From aac03f713e9b80db75d54788a055db157cf28692 Mon Sep 17 00:00:00 2001 From: FrancescoMolinaro Date: Wed, 26 Nov 2025 17:00:22 +0100 Subject: [PATCH 1/6] [CST-22299] copy library, update components and upgrade ng-bootstrap --- package-lock.json | 51 +-- package.json | 14 +- .../access-control/access-control-routes.ts | 6 +- .../eperson-form/eperson-form.component.ts | 10 +- .../group-form/group-form.component.ts | 10 +- .../format-form/format-form.component.ts | 16 +- .../metadata-schema-form.component.ts | 10 +- .../metadata-field-form.component.ts | 12 +- src/app/app.config.ts | 2 +- .../edit-bitstream-page.component.ts | 12 +- .../collection-form.component.ts | 11 +- .../collection-form/collection-form.models.ts | 11 +- .../collection-source.component.ts | 19 +- .../community-form.component.ts | 11 +- src/app/init.service.ts | 2 +- .../profile-page-metadata-form.component.ts | 10 +- .../profile-page-security-form.component.ts | 9 +- .../comcol-form/comcol-form.component.ts | 9 +- ...ynamic-form-control-container.component.ts | 44 +- .../ds-dynamic-form-control-map-fn.ts | 46 +- .../ds-dynamic-form.component.ts | 19 +- .../ds-dynamic-type-bind-relation.service.ts | 15 +- .../dynamic-form-array.component.ts | 24 +- .../custom-switch/custom-switch.component.ts | 10 +- .../custom-switch/custom-switch.model.ts | 10 +- .../dynamic-date-picker-inline.component.ts | 12 +- .../date-picker/date-picker.component.ts | 8 +- .../models/date-picker/date-picker.model.ts | 15 +- .../disabled/dynamic-disabled.component.ts | 8 +- .../models/disabled/dynamic-disabled.model.ts | 7 +- .../models/ds-dynamic-concat.model.ts | 11 +- .../models/ds-dynamic-input.model.ts | 11 +- .../models/ds-dynamic-qualdrop.model.ts | 9 +- .../models/ds-dynamic-row-array-model.ts | 11 +- .../models/ds-dynamic-row-group-model.ts | 2 +- .../models/ds-dynamic-textarea.model.ts | 9 +- .../models/dynamic-vocabulary.component.ts | 8 +- .../dynamic-form-group.component.ts | 25 +- .../list/dynamic-list-checkbox-group.model.ts | 13 +- .../list/dynamic-list-radio-group.model.ts | 12 +- .../models/list/dynamic-list.component.html | 5 +- .../models/list/dynamic-list.component.ts | 12 +- .../lookup/dynamic-lookup-name.model.ts | 7 +- .../models/lookup/dynamic-lookup.component.ts | 6 +- .../models/lookup/dynamic-lookup.model.ts | 9 +- .../models/onebox/dynamic-onebox.component.ts | 6 +- .../models/onebox/dynamic-onebox.model.ts | 9 +- .../dynamic-relation-group.components.ts | 14 +- .../dynamic-relation-group.model.ts | 7 +- .../dynamic-scrollable-dropdown.component.ts | 6 +- .../dynamic-scrollable-dropdown.model.ts | 9 +- .../models/tag/dynamic-tag.component.ts | 6 +- .../models/tag/dynamic-tag.model.ts | 9 +- .../ds-dynamic-form-ui/type-bind.utils.ts | 9 +- .../form/builder/form-builder.service.ts | 29 +- .../builder/parsers/dropdown-field-parser.ts | 2 +- .../form/builder/parsers/field-parser.ts | 2 +- .../builder/parsers/onebox-field-parser.ts | 6 +- .../form/builder/parsers/parser.utils.ts | 6 +- .../shared/form/builder/parsers/row-parser.ts | 6 +- src/app/shared/form/form.component.ts | 16 +- src/app/shared/form/form.service.ts | 8 +- .../form/resource-policy-form.component.ts | 10 +- .../form/resource-policy-form.model.ts | 12 +- .../accesses/section-accesses.component.ts | 32 +- .../accesses/section-accesses.model.ts | 18 +- .../form/section-form-operations.service.ts | 12 +- .../sections/form/section-form.component.ts | 7 +- .../license/section-license.component.ts | 11 +- .../submission/sections/sections.service.ts | 2 +- .../section-upload-file-edit.component.ts | 25 +- .../edit/section-upload-file-edit.model.ts | 18 +- .../file/section-upload-file.component.ts | 3 +- .../ng-dynamic-forms/LICENSE | 13 + .../ng-dynamic-forms/core/LICENSE | 13 + .../component/dynamic-form-array.component.ts | 30 ++ ...ynamic-form-control-container.component.ts | 361 +++++++++++++++ .../component/dynamic-form-control-event.ts | 28 ++ .../dynamic-form-control-interface.ts | 20 + ...ic-form-control-with-template-interface.ts | 7 + ...ic-form-control-with-template.component.ts | 41 ++ .../dynamic-form-control.component.ts | 112 +++++ .../component/dynamic-form-group.component.ts | 15 + .../core/component/dynamic-form.component.ts | 69 +++ .../core/decorator/serializable.decorator.ts | 41 ++ .../directive/dynamic-list.directive.spec.ts | 42 ++ .../core/directive/dynamic-list.directive.ts | 19 + .../dynamic-template.directive.spec.ts | 35 ++ .../directive/dynamic-template.directive.ts | 21 + .../dynamic-checkbox-group.model.spec.ts | 86 ++++ .../checkbox/dynamic-checkbox-group.model.ts | 32 ++ .../checkbox/dynamic-checkbox.model.spec.ts | 50 ++ .../model/checkbox/dynamic-checkbox.model.ts | 22 + .../dynamic-datepicker.model.spec.ts | 37 ++ .../datepicker/dynamic-datepicker.model.ts | 47 ++ .../core/model/dynamic-check-control.model.ts | 31 ++ .../core/model/dynamic-date-control.model.ts | 28 ++ .../core/model/dynamic-file-control.model.ts | 18 + .../core/model/dynamic-form-control.model.ts | 81 ++++ .../model/dynamic-form-value-control.model.ts | 51 +++ .../core/model/dynamic-input-control.model.ts | 42 ++ .../model/dynamic-option-control.model.ts | 100 ++++ .../dynamic-file-upload.model.spec.ts | 34 ++ .../file-upload/dynamic-file-upload.model.ts | 40 ++ .../dynamic-form-array.model.spec.ts | 68 +++ .../form-array/dynamic-form-array.model.ts | 120 +++++ .../dynamic-form-group.model.spec.ts | 56 +++ .../form-group/dynamic-form-group.model.ts | 56 +++ .../model/input/dynamic-input.model.spec.ts | 115 +++++ .../core/model/input/dynamic-input.model.ts | 101 ++++ .../misc/dynamic-form-control-layout.model.ts | 24 + .../misc/dynamic-form-control-path.model.ts | 5 + .../dynamic-form-control-relation.model.ts | 12 + .../dynamic-form-control-validation.model.ts | 12 + .../radio/dynamic-radio-group.model.spec.ts | 93 ++++ .../model/radio/dynamic-radio-group.model.ts | 25 + .../model/select/dynamic-select.model.spec.ts | 104 +++++ .../core/model/select/dynamic-select.model.ts | 41 ++ .../model/switch/dynamic-switch.model.spec.ts | 32 ++ .../core/model/switch/dynamic-switch.model.ts | 24 + .../textarea/dynamic-textarea.model.spec.ts | 47 ++ .../model/textarea/dynamic-textarea.model.ts | 31 ++ .../dynamic-timepicker.model.spec.ts | 35 ++ .../timepicker/dynamic-timepicker.model.ts | 25 + .../dynamic-form-component.service.spec.ts | 106 +++++ .../service/dynamic-form-component.service.ts | 167 +++++++ .../dynamic-form-layout.service.spec.ts | 77 ++++ .../service/dynamic-form-layout.service.ts | 130 ++++++ .../service/dynamic-form-relation-matchers.ts | 83 ++++ .../dynamic-form-relation.service.spec.ts | 170 +++++++ .../service/dynamic-form-relation.service.ts | 116 +++++ .../dynamic-form-validation-matchers.ts | 18 + .../dynamic-form-validation.service.spec.ts | 212 +++++++++ .../dynamic-form-validation.service.ts | 192 ++++++++ .../core/service/dynamic-form-validators.ts | 12 + .../core/service/dynamic-form.service.spec.ts | 432 ++++++++++++++++++ .../core/service/dynamic-form.service.ts | 350 ++++++++++++++ .../core/utils/autofill.utils.spec.ts | 80 ++++ .../core/utils/autofill.utils.ts | 136 ++++++ .../core/utils/core.utils.spec.ts | 73 +++ .../ng-dynamic-forms/core/utils/core.utils.ts | 20 + .../core/utils/json.utils.spec.ts | 43 ++ .../ng-dynamic-forms/core/utils/json.utils.ts | 32 ++ .../ng-dynamic-forms/ui-ng-bootstrap/LICENSE | 13 + ...namic-ng-bootstrap-calendar.component.html | 17 + ...ic-ng-bootstrap-calendar.component.spec.ts | 88 ++++ ...dynamic-ng-bootstrap-calendar.component.ts | 39 ++ ...ng-bootstrap-checkbox-group.component.html | 26 ++ ...bootstrap-checkbox-group.component.spec.ts | 92 ++++ ...c-ng-bootstrap-checkbox-group.component.ts | 46 ++ ...namic-ng-bootstrap-checkbox.component.html | 20 + ...ic-ng-bootstrap-checkbox.component.spec.ts | 88 ++++ ...dynamic-ng-bootstrap-checkbox.component.ts | 34 ++ .../dynamic-ng-bootstrap-input.component.html | 85 ++++ ...namic-ng-bootstrap-input.component.spec.ts | 91 ++++ .../dynamic-ng-bootstrap-input.component.ts | 37 ++ ...ic-ng-bootstrap-radio-group.component.html | 26 ++ ...ng-bootstrap-radio-group.component.spec.ts | 90 ++++ ...amic-ng-bootstrap-radio-group.component.ts | 35 ++ ...dynamic-ng-bootstrap-select.component.html | 22 + ...amic-ng-bootstrap-select.component.spec.ts | 88 ++++ .../dynamic-ng-bootstrap-select.component.ts | 33 ++ ...namic-ng-bootstrap-textarea.component.html | 23 + ...ic-ng-bootstrap-textarea.component.spec.ts | 89 ++++ ...dynamic-ng-bootstrap-textarea.component.ts | 34 ++ ...mic-ng-bootstrap-timepicker.component.html | 14 + ...-ng-bootstrap-timepicker.component.spec.ts | 95 ++++ ...namic-ng-bootstrap-timepicker.component.ts | 39 ++ tsconfig.json | 4 +- 169 files changed, 6678 insertions(+), 524 deletions(-) create mode 100644 src/external-libraries/ng-dynamic-forms/LICENSE create mode 100644 src/external-libraries/ng-dynamic-forms/core/LICENSE create mode 100644 src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-array.component.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-container.component.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-event.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-interface.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-with-template-interface.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-with-template.component.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control.component.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-group.component.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/component/dynamic-form.component.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/decorator/serializable.decorator.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/directive/dynamic-list.directive.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/directive/dynamic-list.directive.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/directive/dynamic-template.directive.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/directive/dynamic-template.directive.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/dynamic-check-control.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/dynamic-date-control.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/dynamic-file-control.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/dynamic-form-control.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/dynamic-form-value-control.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/dynamic-input-control.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/dynamic-option-control.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/file-upload/dynamic-file-upload.model.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/file-upload/dynamic-file-upload.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/form-array/dynamic-form-array.model.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/form-array/dynamic-form-array.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/form-group/dynamic-form-group.model.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/form-group/dynamic-form-group.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/input/dynamic-input.model.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/input/dynamic-input.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/misc/dynamic-form-control-path.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/misc/dynamic-form-control-validation.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/radio/dynamic-radio-group.model.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/radio/dynamic-radio-group.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/select/dynamic-select.model.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/select/dynamic-select.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/switch/dynamic-switch.model.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/switch/dynamic-switch.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/textarea/dynamic-textarea.model.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/textarea/dynamic-textarea.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-component.service.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-component.service.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-layout.service.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-layout.service.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-relation-matchers.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-relation.service.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-relation.service.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validation-matchers.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validation.service.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validation.service.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validators.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/utils/autofill.utils.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/utils/autofill.utils.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/utils/core.utils.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/utils/core.utils.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/utils/json.utils.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/utils/json.utils.ts create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/LICENSE create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/calendar/dynamic-ng-bootstrap-calendar.component.html create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/calendar/dynamic-ng-bootstrap-calendar.component.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/calendar/dynamic-ng-bootstrap-calendar.component.ts create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component.html create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component.ts create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox/dynamic-ng-bootstrap-checkbox.component.html create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox/dynamic-ng-bootstrap-checkbox.component.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox/dynamic-ng-bootstrap-checkbox.component.ts create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.html create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.ts create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component.html create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component.ts create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component.html create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component.ts create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/textarea/dynamic-ng-bootstrap-textarea.component.html create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/textarea/dynamic-ng-bootstrap-textarea.component.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/textarea/dynamic-ng-bootstrap-textarea.component.ts create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/timepicker/dynamic-ng-bootstrap-timepicker.component.html create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/timepicker/dynamic-ng-bootstrap-timepicker.component.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/timepicker/dynamic-ng-bootstrap-timepicker.component.ts diff --git a/package-lock.json b/package-lock.json index 67686290421..0998aaaf427 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,9 +22,7 @@ "@angular/router": "^20.3.12", "@angular/ssr": "^20.3.10", "@kolkov/ngx-gallery": "^2.0.1", - "@ng-bootstrap/ng-bootstrap": "^12.1.2", - "@ng-dynamic-forms/core": "^16.0.0", - "@ng-dynamic-forms/ui-ng-bootstrap": "^16.0.0", + "@ng-bootstrap/ng-bootstrap": "^15.1.2", "@ngrx/effects": "^20.1.0", "@ngrx/router-store": "^20.1.0", "@ngrx/store": "^20.1.0", @@ -7528,50 +7526,22 @@ } }, "node_modules/@ng-bootstrap/ng-bootstrap": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-12.1.2.tgz", - "integrity": "sha512-p27c+mYVdHiJMYrj5hwClVJxLdiZxafAqlbw1sdJh2xJ1rGOe+H/kCf5YDRbhlHqRN+34Gr0RQqIUeD1I2V8hg==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-15.1.2.tgz", + "integrity": "sha512-mM2yiGnt9o7KZLIFp8K1vjfmVfu7HR3d8dhH5SszfArbgn9DvvQ4P5D5TDGygzyBSzeyZe18p7I8rX8vgA6DKw==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/common": "^13.0.0", - "@angular/core": "^13.0.0", - "@angular/forms": "^13.0.0", - "@angular/localize": "^13.0.0", - "@popperjs/core": "^2.10.2", + "@angular/common": "^16.0.0", + "@angular/core": "^16.0.0", + "@angular/forms": "^16.0.0", + "@angular/localize": "^16.0.0", + "@popperjs/core": "^2.11.6", "rxjs": "^6.5.3 || ^7.4.0" } }, - "node_modules/@ng-dynamic-forms/core": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@ng-dynamic-forms/core/-/core-16.0.0.tgz", - "integrity": "sha512-fH0OIgFs/bWkVnnOtDoAAXHXb3K2UOQXm7qEgO9hg86keE2x3Tu/G/Ma6tRVi5+RfKRgvI2Q6JlMLHIQHYFAgA==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/common": "^15.0.0", - "@angular/core": "^15.0.0", - "@angular/forms": "^15.0.0", - "core-js": "^3.8.1", - "rxjs": "^7.5.5" - } - }, - "node_modules/@ng-dynamic-forms/ui-ng-bootstrap": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@ng-dynamic-forms/ui-ng-bootstrap/-/ui-ng-bootstrap-16.0.0.tgz", - "integrity": "sha512-qopjC+j1wfOaB6a/xSUKEpl5vohEospvhLqPl33BgNH557DQg3x3oI/oPo3caLRhIo2vpKGIeuEN5Itok0B3vg==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@ng-bootstrap/ng-bootstrap": "^11.0.0", - "@ng-dynamic-forms/core": "^16.0.0", - "bootstrap": "^4.0.0", - "ngx-mask": "^13.0.0" - } - }, "node_modules/@ngrx/effects": { "version": "20.1.0", "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-20.1.0.tgz", @@ -19106,6 +19076,7 @@ "version": "14.2.4", "resolved": "https://registry.npmjs.org/ngx-mask/-/ngx-mask-14.2.4.tgz", "integrity": "sha512-158nAe2tyiZa2T8COoI6SvJCQHqpJ4+JW0amGcvVEYUBF6FIoYK66BlnOJURAOy5qry0d0N45w7J/LGsCBgZcg==", + "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.3.0" diff --git a/package.json b/package.json index 7afdcb913be..aaa91568ea8 100644 --- a/package.json +++ b/package.json @@ -66,16 +66,6 @@ "@angular/forms": "^20.3.12", "@angular/localize": "^20.3.12" }, - "@ng-dynamic-forms/core": { - "@angular/common": "^20.3.12", - "@angular/core": "^20.3.12", - "@angular/forms": "^20.3.12" - }, - "@ng-dynamic-forms/ui-ng-bootstrap": { - "ngx-mask": "14.2.4", - "@ng-bootstrap/ng-bootstrap": "^12.1.2", - "bootstrap": "^5.3" - }, "@nicky-lenaers/ngx-scroll-to": { "@angular/common": "^20.3.12", "@angular/core": "^20.3.12" @@ -95,9 +85,7 @@ "@angular/router": "^20.3.12", "@angular/ssr": "^20.3.10", "@kolkov/ngx-gallery": "^2.0.1", - "@ng-bootstrap/ng-bootstrap": "^12.1.2", - "@ng-dynamic-forms/core": "^16.0.0", - "@ng-dynamic-forms/ui-ng-bootstrap": "^16.0.0", + "@ng-bootstrap/ng-bootstrap": "^15.1.2", "@ngrx/effects": "^20.1.0", "@ngrx/router-store": "^20.1.0", "@ngrx/store": "^20.1.0", diff --git a/src/app/access-control/access-control-routes.ts b/src/app/access-control/access-control-routes.ts index 9252c075ec7..9916a6a7e4e 100644 --- a/src/app/access-control/access-control-routes.ts +++ b/src/app/access-control/access-control-routes.ts @@ -3,10 +3,7 @@ import { Route } from '@angular/router'; import { i18nBreadcrumbResolver } from '@dspace/core/breadcrumbs/i18n-breadcrumb.resolver'; import { groupAdministratorGuard } from '@dspace/core/data/feature-authorization/feature-authorization-guard/group-administrator.guard'; import { siteAdministratorGuard } from '@dspace/core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; -import { - DYNAMIC_ERROR_MESSAGES_MATCHER, - DynamicErrorMessagesMatcher, -} from '@ng-dynamic-forms/core'; + import { EPERSON_PATH, @@ -19,6 +16,7 @@ import { EPersonResolver } from './epeople-registry/eperson-resolver.service'; import { GroupFormComponent } from './group-registry/group-form/group-form.component'; import { groupPageGuard } from './group-registry/group-page.guard'; import { GroupsRegistryComponent } from './group-registry/groups-registry.component'; +import { DYNAMIC_ERROR_MESSAGES_MATCHER, DynamicErrorMessagesMatcher } from "@ng-dynamic-forms/core/service/dynamic-form-validation-matchers"; /** * Condition for displaying error messages on email form field diff --git a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts index dde99b9ab7d..3852fd6f425 100644 --- a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts +++ b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts @@ -39,12 +39,6 @@ import { PageInfo } from '@dspace/core/shared/page-info.model'; import { Registration } from '@dspace/core/shared/registration.model'; import { hasValue } from '@dspace/shared/utils/empty.util'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { - DynamicCheckboxModel, - DynamicFormControlModel, - DynamicFormLayout, - DynamicInputModel, -} from '@ng-dynamic-forms/core'; import { TranslateModule, TranslateService, @@ -78,6 +72,10 @@ import { import { GroupRegistryService } from '../../group-registry/group-registry.service'; import { EpeopleRegistryService } from '../epeople-registry.service'; import { ValidateEmailNotTaken } from './validators/email-taken.validator'; +import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; +import { DynamicCheckboxModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; +import { DynamicFormLayout } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; @Component({ selector: 'ds-eperson-form', diff --git a/src/app/access-control/group-registry/group-form/group-form.component.ts b/src/app/access-control/group-registry/group-form/group-form.component.ts index 54ea6d77fcc..1a6a6b17494 100644 --- a/src/app/access-control/group-registry/group-form/group-form.component.ts +++ b/src/app/access-control/group-registry/group-form/group-form.component.ts @@ -43,12 +43,6 @@ import { isNotEmpty, } from '@dspace/shared/utils/empty.util'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { - DynamicFormControlModel, - DynamicFormLayout, - DynamicInputModel, - DynamicTextAreaModel, -} from '@ng-dynamic-forms/core'; import { TranslateModule, TranslateService, @@ -83,6 +77,10 @@ import { GroupRegistryService } from '../group-registry.service'; import { MembersListComponent } from './members-list/members-list.component'; import { SubgroupsListComponent } from './subgroup-list/subgroups-list.component'; import { ValidateGroupExists } from './validators/group-exists.validator'; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; +import { DynamicFormLayout } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; +import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; +import { DynamicTextAreaModel } from "@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model"; @Component({ selector: 'ds-group-form', diff --git a/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.ts b/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.ts index 78d9bf7ff78..c31f3fff50f 100644 --- a/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.ts +++ b/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.ts @@ -13,19 +13,17 @@ import { hasValue, isEmpty, } from '@dspace/shared/utils/empty.util'; -import { - DynamicCheckboxModel, - DynamicFormArrayModel, - DynamicFormControlLayout, - DynamicFormControlModel, - DynamicInputModel, - DynamicSelectModel, - DynamicTextAreaModel, -} from '@ng-dynamic-forms/core'; import { environment } from '../../../../../environments/environment'; import { FormComponent } from '../../../../shared/form/form.component'; import { getBitstreamFormatsModuleRoute } from '../../admin-registries-routing-paths'; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; +import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; +import { DynamicTextAreaModel } from "@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model"; +import { DynamicSelectModel } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; +import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; +import { DynamicFormArrayModel } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; +import { DynamicCheckboxModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; /** * The component responsible for rendering the form to create/edit a bitstream format diff --git a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts index 8f456dd0b16..bedde7d567d 100644 --- a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts +++ b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts @@ -8,12 +8,6 @@ import { } from '@angular/core'; import { UntypedFormGroup } from '@angular/forms'; import { MetadataSchema } from '@dspace/core/metadata/metadata-schema.model'; -import { - DynamicFormControlModel, - DynamicFormGroupModel, - DynamicFormLayout, - DynamicInputModel, -} from '@ng-dynamic-forms/core'; import { TranslateModule, TranslateService, @@ -31,6 +25,10 @@ import { import { FormBuilderService } from '../../../../shared/form/builder/form-builder.service'; import { FormComponent } from '../../../../shared/form/form.component'; import { RegistryService } from '../../registry/registry.service'; +import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; +import { DynamicFormLayout } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; +import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; @Component({ selector: 'ds-metadata-schema-form', diff --git a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts index 887ec2ab56c..21bb6470c92 100644 --- a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts +++ b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts @@ -10,13 +10,6 @@ import { import { UntypedFormGroup } from '@angular/forms'; import { MetadataField } from '@dspace/core/metadata/metadata-field.model'; import { MetadataSchema } from '@dspace/core/metadata/metadata-schema.model'; -import { - DynamicFormControlModel, - DynamicFormGroupModel, - DynamicFormLayout, - DynamicInputModel, - DynamicTextAreaModel, -} from '@ng-dynamic-forms/core'; import { TranslateModule, TranslateService, @@ -27,6 +20,11 @@ import { take } from 'rxjs/operators'; import { FormBuilderService } from '../../../../shared/form/builder/form-builder.service'; import { FormComponent } from '../../../../shared/form/form.component'; import { RegistryService } from '../../registry/registry.service'; +import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; +import { DynamicTextAreaModel } from "@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model"; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; +import { DynamicFormLayout } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; +import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; @Component({ selector: 'ds-metadata-field-form', diff --git a/src/app/app.config.ts b/src/app/app.config.ts index 9a799147fdb..bcc241cbd87 100644 --- a/src/app/app.config.ts +++ b/src/app/app.config.ts @@ -31,7 +31,6 @@ import { } from '@dspace/core/provide-core'; import { XsrfInterceptor } from '@dspace/core/xsrf/xsrf.interceptor'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -import { DYNAMIC_MATCHER_PROVIDERS } from '@ng-dynamic-forms/core'; import { EffectsModule } from '@ngrx/effects'; import { RouterStateSerializer, @@ -74,6 +73,7 @@ import { WORKFLOW_TASK_OPTION_DECORATOR_MAP, } from './shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-decorator'; import { STARTS_WITH_DECORATOR_MAP } from './shared/starts-with/starts-with-decorator'; +import { DYNAMIC_MATCHER_PROVIDERS } from "@ng-dynamic-forms/core/service/dynamic-form-relation-matchers"; export function getConfig() { return environment; diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts index 21cce391bbc..dcdae0ff84d 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -38,13 +38,6 @@ import { isEmpty, isNotEmpty, } from '@dspace/shared/utils/empty.util'; -import { - DynamicFormControlModel, - DynamicFormGroupModel, - DynamicFormLayout, - DynamicFormService, - DynamicInputModel, -} from '@ng-dynamic-forms/core'; import { TranslateModule, TranslateService, @@ -76,6 +69,11 @@ import { ThemedLoadingComponent } from '../../shared/loading/themed-loading.comp import { FileSizePipe } from '../../shared/utils/file-size-pipe'; import { VarDirective } from '../../shared/utils/var.directive'; import { ThemedThumbnailComponent } from '../../thumbnail/themed-thumbnail.component'; +import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; +import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; +import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; +import { DynamicFormLayout } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; @Component({ selector: 'ds-base-edit-bitstream-page', diff --git a/src/app/collection-page/collection-form/collection-form.component.ts b/src/app/collection-page/collection-form/collection-form.component.ts index bc049aa6b5b..1c2ab75a85f 100644 --- a/src/app/collection-page/collection-form/collection-form.component.ts +++ b/src/app/collection-page/collection-form/collection-form.component.ts @@ -24,12 +24,7 @@ import { isNotNull, } from '@dspace/shared/utils/empty.util'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { - DynamicFormControlModel, - DynamicFormOptionConfig, - DynamicFormService, - DynamicSelectModel, -} from '@ng-dynamic-forms/core'; + import { TranslateModule, TranslateService, @@ -45,6 +40,10 @@ import { collectionFormEntityTypeSelectionConfig, collectionFormModels, } from './collection-form.models'; +import { DynamicSelectModel } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; +import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; +import { DynamicFormOptionConfig } from "@ng-dynamic-forms/core/model/dynamic-option-control.model"; /** * Form used for creating and editing collections diff --git a/src/app/collection-page/collection-form/collection-form.models.ts b/src/app/collection-page/collection-form/collection-form.models.ts index 90204c246f6..9a7ad048875 100644 --- a/src/app/collection-page/collection-form/collection-form.models.ts +++ b/src/app/collection-page/collection-form/collection-form.models.ts @@ -1,11 +1,8 @@ -import { - DynamicFormControlModel, - DynamicInputModel, - DynamicSelectModelConfig, - DynamicTextAreaModel, -} from '@ng-dynamic-forms/core'; - +import { DynamicSelectModelConfig } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; import { environment } from '../../../environments/environment'; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; +import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; +import { DynamicTextAreaModel } from "@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model"; export const collectionFormEntityTypeSelectionConfig: DynamicSelectModelConfig = { id: 'entityType', diff --git a/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.ts b/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.ts index df87e2b12e5..dbf96fd7617 100644 --- a/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.ts +++ b/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.ts @@ -35,16 +35,7 @@ import { hasValue, isNotEmpty, } from '@dspace/shared/utils/empty.util'; -import { - DynamicFormControlModel, - DynamicFormGroupModel, - DynamicFormLayout, - DynamicFormService, - DynamicInputModel, - DynamicOptionControlModel, - DynamicRadioGroupModel, - DynamicSelectModel, -} from '@ng-dynamic-forms/core'; + import { TranslateModule, TranslateService, @@ -67,6 +58,14 @@ import { FormComponent } from '../../../shared/form/form.component'; import { ThemedLoadingComponent } from '../../../shared/loading/themed-loading.component'; import { AbstractTrackableComponent } from '../../../shared/trackable/abstract-trackable.component'; import { CollectionSourceControlsComponent } from './collection-source-controls/collection-source-controls.component'; +import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; +import { DynamicSelectModel } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; +import { DynamicRadioGroupModel } from "@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model"; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; +import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; +import { DynamicFormLayout } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; +import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; +import { DynamicOptionControlModel } from "@ng-dynamic-forms/core/model/dynamic-option-control.model"; /** * Component for managing the content source of the collection diff --git a/src/app/community-page/community-form/community-form.component.ts b/src/app/community-page/community-form/community-form.component.ts index 8b7bd36b4c9..3428d1a4dfa 100644 --- a/src/app/community-page/community-form/community-form.component.ts +++ b/src/app/community-page/community-form/community-form.component.ts @@ -13,12 +13,7 @@ import { RequestService } from '@dspace/core/data/request.service'; import { NotificationsService } from '@dspace/core/notification-system/notifications.service'; import { Community } from '@dspace/core/shared/community.model'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { - DynamicFormControlModel, - DynamicFormService, - DynamicInputModel, - DynamicTextAreaModel, -} from '@ng-dynamic-forms/core'; + import { TranslateModule, TranslateService, @@ -30,6 +25,10 @@ import { ComcolPageLogoComponent } from '../../shared/comcol/comcol-page-logo/co import { FormComponent } from '../../shared/form/form.component'; import { UploaderComponent } from '../../shared/upload/uploader/uploader.component'; import { VarDirective } from '../../shared/utils/var.directive'; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; +import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; +import { DynamicTextAreaModel } from "@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model"; +import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; /** * Form used for creating and editing communities diff --git a/src/app/init.service.ts b/src/app/init.service.ts index 7838a21706d..a97689f20b2 100644 --- a/src/app/init.service.ts +++ b/src/app/init.service.ts @@ -26,7 +26,6 @@ import { LAZY_DATA_SERVICES } from '@dspace/core/data-services-map'; import { APP_DATA_SERVICES_MAP } from '@dspace/core/data-services-map-type'; import { LocaleService } from '@dspace/core/locale/locale.service'; import { HeadTagService } from '@dspace/core/metadata/head-tag.service'; -import { DYNAMIC_FORM_CONTROL_MAP_FN } from '@ng-dynamic-forms/core'; import { select, Store, @@ -47,6 +46,7 @@ import { MenuService } from './shared/menu/menu.service'; import { MenuProviderService } from './shared/menu/menu-provider.service'; import { ThemeService } from './shared/theme-support/theme.service'; import { Angulartics2DSpace } from './statistics/angulartics/dspace-provider'; +import { DYNAMIC_FORM_CONTROL_MAP_FN } from "@ng-dynamic-forms/core/service/dynamic-form-component.service"; /** * Performs the initialization of the app. diff --git a/src/app/profile-page/profile-page-metadata-form/profile-page-metadata-form.component.ts b/src/app/profile-page/profile-page-metadata-form/profile-page-metadata-form.component.ts index 114c221609c..b4b1b42e7e7 100644 --- a/src/app/profile-page/profile-page-metadata-form/profile-page-metadata-form.component.ts +++ b/src/app/profile-page/profile-page-metadata-form/profile-page-metadata-form.component.ts @@ -17,18 +17,16 @@ import { hasValue, isNotEmpty, } from '@dspace/shared/utils/empty.util'; -import { - DynamicFormControlModel, - DynamicFormValueControlModel, - DynamicInputModel, - DynamicSelectModel, -} from '@ng-dynamic-forms/core'; import { TranslateService } from '@ngx-translate/core'; import cloneDeep from 'lodash/cloneDeep'; import { environment } from '../../../environments/environment'; import { FormBuilderService } from '../../shared/form/builder/form-builder.service'; import { FormComponent } from '../../shared/form/form.component'; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; +import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; +import { DynamicSelectModel } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; +import { DynamicFormValueControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-value-control.model"; @Component({ selector: 'ds-base-profile-page-metadata-form', diff --git a/src/app/profile-page/profile-page-security-form/profile-page-security-form.component.ts b/src/app/profile-page/profile-page-security-form/profile-page-security-form.component.ts index 189a7b020f4..68dd68cd12e 100644 --- a/src/app/profile-page/profile-page-security-form/profile-page-security-form.component.ts +++ b/src/app/profile-page/profile-page-security-form/profile-page-security-form.component.ts @@ -14,11 +14,7 @@ import { hasValue, isEmpty, } from '@dspace/shared/utils/empty.util'; -import { - DynamicFormControlModel, - DynamicFormService, - DynamicInputModel, -} from '@ng-dynamic-forms/core'; + import { TranslateModule, TranslateService, @@ -29,6 +25,9 @@ import { map } from 'rxjs/operators'; import { debounceTimeWorkaround as debounceTime } from '../../core/shared/operators'; import { AlertComponent } from '../../shared/alert/alert.component'; import { FormComponent } from '../../shared/form/form.component'; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; +import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; +import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; @Component({ selector: 'ds-profile-page-security-form', diff --git a/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts b/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts index db9ac721301..449284f4291 100644 --- a/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts +++ b/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts @@ -34,11 +34,7 @@ import { NgbModal, NgbModalRef, } from '@ng-bootstrap/ng-bootstrap'; -import { - DynamicFormControlModel, - DynamicFormService, - DynamicInputModel, -} from '@ng-dynamic-forms/core'; + import { TranslateModule, TranslateService, @@ -63,6 +59,9 @@ import { UploaderComponent } from '../../../upload/uploader/uploader.component'; import { UploaderOptions } from '../../../upload/uploader/uploader-options.model'; import { VarDirective } from '../../../utils/var.directive'; import { ComcolPageLogoComponent } from '../../comcol-page-logo/comcol-page-logo.component'; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; +import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; +import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; /** * A form for creating and editing Communities or Collections diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts index 5a7ebcd34d6..5f91cee5191 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts @@ -74,24 +74,7 @@ import { NgbModalRef, NgbTooltipModule, } from '@ng-bootstrap/ng-bootstrap'; -import { - DYNAMIC_FORM_CONTROL_MAP_FN, - DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX, - DynamicFormArrayGroupModel, - DynamicFormArrayModel, - DynamicFormComponentService, - DynamicFormControl, - DynamicFormControlContainerComponent, - DynamicFormControlEvent, - DynamicFormControlEventType, - DynamicFormControlMapFn, - DynamicFormControlModel, - DynamicFormLayout, - DynamicFormLayoutService, - DynamicFormRelationService, - DynamicFormValidationService, - DynamicTemplateDirective, -} from '@ng-dynamic-forms/core'; + import { Store } from '@ngrx/store'; import { TranslateModule, @@ -122,6 +105,31 @@ import { ExistingRelationListElementComponent } from './existing-relation-list-e import { DYNAMIC_FORM_CONTROL_TYPE_CUSTOM_SWITCH } from './models/custom-switch/custom-switch.model'; import { DsDynamicLookupRelationModalComponent } from './relation-lookup-modal/dynamic-lookup-relation-modal.component'; import { NameVariantService } from './relation-lookup-modal/name-variant.service'; +import { + DynamicFormControlContainerComponent +} from "@ng-dynamic-forms/core/component/dynamic-form-control-container.component"; +import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; +import { + DynamicFormLayout, + DynamicFormLayoutService, +} from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; +import { + DynamicFormControlEvent, + DynamicFormControlEventType, +} from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; +import { DynamicFormControl } from "@ng-dynamic-forms/core/component/dynamic-form-control-interface"; +import { + DYNAMIC_FORM_CONTROL_MAP_FN, + DynamicFormComponentService, DynamicFormControlMapFn, +} from "@ng-dynamic-forms/core/service/dynamic-form-component.service"; +import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; +import { DynamicFormRelationService } from "@ng-dynamic-forms/core/service/dynamic-form-relation.service"; +import { DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; +import { + DynamicFormArrayGroupModel, + DynamicFormArrayModel, +} from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; @Component({ selector: 'ds-dynamic-form-control-container', diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-map-fn.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-map-fn.ts index 5f3ce659fcd..55e9757a024 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-map-fn.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-map-fn.ts @@ -1,31 +1,5 @@ import { Type } from '@angular/core'; import { DYNAMIC_FORM_CONTROL_TYPE_RELATION_GROUP } from '@dspace/core/shared/form/ds-dynamic-form-constants'; -import { - DYNAMIC_FORM_CONTROL_TYPE_ARRAY, - DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX, - DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP, - DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER, - DYNAMIC_FORM_CONTROL_TYPE_GROUP, - DYNAMIC_FORM_CONTROL_TYPE_INPUT, - DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP, - DYNAMIC_FORM_CONTROL_TYPE_SELECT, - DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA, - DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER, - DynamicDatePickerModel, - DynamicFormControl, - DynamicFormControlModel, -} from '@ng-dynamic-forms/core'; -import { - DynamicNGBootstrapCalendarComponent, - DynamicNGBootstrapCheckboxComponent, - DynamicNGBootstrapCheckboxGroupComponent, - DynamicNGBootstrapInputComponent, - DynamicNGBootstrapRadioGroupComponent, - DynamicNGBootstrapSelectComponent, - DynamicNGBootstrapTextAreaComponent, - DynamicNGBootstrapTimePickerComponent, -} from '@ng-dynamic-forms/ui-ng-bootstrap'; - import { DsDynamicFormArrayComponent } from './models/array-group/dynamic-form-array.component'; import { CustomSwitchComponent } from './models/custom-switch/custom-switch.component'; import { DYNAMIC_FORM_CONTROL_TYPE_CUSTOM_SWITCH } from './models/custom-switch/custom-switch.model'; @@ -48,6 +22,26 @@ import { DsDynamicScrollableDropdownComponent } from './models/scrollable-dropdo import { DYNAMIC_FORM_CONTROL_TYPE_SCROLLABLE_DROPDOWN } from './models/scrollable-dropdown/dynamic-scrollable-dropdown.model'; import { DsDynamicTagComponent } from './models/tag/dynamic-tag.component'; import { DYNAMIC_FORM_CONTROL_TYPE_TAG } from './models/tag/dynamic-tag.model'; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; +import { DynamicFormControl } from "@ng-dynamic-forms/core/component/dynamic-form-control-interface"; +import { DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER, DynamicDatePickerModel } from "@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model"; +import { DYNAMIC_FORM_CONTROL_TYPE_ARRAY } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; +import { DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; +import { DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model"; +import { DYNAMIC_FORM_CONTROL_TYPE_GROUP } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; +import { DYNAMIC_FORM_CONTROL_TYPE_INPUT } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; +import { DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP } from "@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model"; +import { DYNAMIC_FORM_CONTROL_TYPE_SELECT } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; +import { DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA } from "@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model"; +import { DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER } from "@ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model"; +import { DynamicNGBootstrapCheckboxComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/checkbox/dynamic-ng-bootstrap-checkbox.component"; +import { DynamicNGBootstrapCheckboxGroupComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component"; +import { DynamicNGBootstrapCalendarComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/calendar/dynamic-ng-bootstrap-calendar.component"; +import { DynamicNGBootstrapInputComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component"; +import { DynamicNGBootstrapRadioGroupComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component"; +import { DynamicNGBootstrapSelectComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component"; +import { DynamicNGBootstrapTextAreaComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/textarea/dynamic-ng-bootstrap-textarea.component"; +import { DynamicNGBootstrapTimePickerComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/timepicker/dynamic-ng-bootstrap-timepicker.component"; export function dsDynamicFormControlMapFn(model: DynamicFormControlModel): Type | null { const datepickerModel = model as DynamicDatePickerModel; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form.component.ts index 2eb43b34829..c5d8d1bd0e8 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form.component.ts @@ -11,17 +11,18 @@ import { ViewChildren, } from '@angular/core'; import { UntypedFormGroup } from '@angular/forms'; -import { - DynamicFormComponent, - DynamicFormComponentService, - DynamicFormControlContainerComponent, - DynamicFormControlEvent, - DynamicFormControlModel, - DynamicFormLayout, - DynamicTemplateDirective, -} from '@ng-dynamic-forms/core'; + import { DsDynamicFormControlContainerComponent } from './ds-dynamic-form-control-container.component'; +import { DynamicFormComponent } from "@ng-dynamic-forms/core/component/dynamic-form.component"; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; +import { DynamicFormLayout } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; +import { DynamicFormControlEvent } from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; +import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; +import { + DynamicFormControlContainerComponent +} from "@ng-dynamic-forms/core/component/dynamic-form-control-container.component"; +import { DynamicFormComponentService } from "@ng-dynamic-forms/core/service/dynamic-form-component.service"; @Component({ selector: 'ds-dynamic-form', diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.ts index 68a77c8f9ad..e7f8961d869 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.ts @@ -11,20 +11,15 @@ import { hasNoValue, hasValue, } from '@dspace/shared/utils/empty.util'; -import { - AND_OPERATOR, - DYNAMIC_MATCHERS, - DynamicFormControlCondition, - DynamicFormControlMatcher, - DynamicFormControlModel, - DynamicFormControlRelation, - DynamicFormRelationService, - OR_OPERATOR, -} from '@ng-dynamic-forms/core'; + import { Subscription } from 'rxjs'; import { startWith } from 'rxjs/operators'; import { FormBuilderService } from '../form-builder.service'; +import { AND_OPERATOR, DYNAMIC_MATCHERS, DynamicFormControlMatcher, OR_OPERATOR } from "@ng-dynamic-forms/core/service/dynamic-form-relation-matchers"; +import { DynamicFormRelationService } from "@ng-dynamic-forms/core/service/dynamic-form-relation.service"; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; +import { DynamicFormControlCondition, DynamicFormControlRelation } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model"; /** * Service to manage type binding for submission input fields diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.ts index ceab82bf6f0..1c32e47e08f 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.ts @@ -22,17 +22,6 @@ import { } from '@angular/forms'; import { Relationship } from '@dspace/core/shared/item-relationships/relationship.model'; import { hasValue } from '@dspace/shared/utils/empty.util'; -import { - DynamicFormArrayComponent, - DynamicFormControlCustomEvent, - DynamicFormControlEvent, - DynamicFormControlLayout, - DynamicFormControlModel, - DynamicFormLayout, - DynamicFormLayoutService, - DynamicFormValidationService, - DynamicTemplateDirective, -} from '@ng-dynamic-forms/core'; import { TranslateModule, TranslateService, @@ -41,6 +30,19 @@ import { import { LiveRegionService } from '../../../../../live-region/live-region.service'; import { DsDynamicFormControlContainerComponent } from '../../ds-dynamic-form-control-container.component'; import { DynamicRowArrayModel } from '../ds-dynamic-row-array-model'; +import { DynamicFormArrayComponent } from "@ng-dynamic-forms/core/component/dynamic-form-array.component"; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; +import { + DynamicFormLayout, + DynamicFormLayoutService, +} from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; +import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; +import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; +import { + DynamicFormControlCustomEvent, + DynamicFormControlEvent, +} from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; +import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; @Component({ selector: 'ds-dynamic-form-array', diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.ts index e99b53a99ce..1421d297412 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.ts @@ -9,14 +9,14 @@ import { ReactiveFormsModule, UntypedFormGroup, } from '@angular/forms'; -import { - DynamicFormLayoutService, - DynamicFormValidationService, -} from '@ng-dynamic-forms/core'; -import { DynamicNGBootstrapCheckboxComponent } from '@ng-dynamic-forms/ui-ng-bootstrap'; import { TranslateModule } from '@ngx-translate/core'; import { DynamicCustomSwitchModel } from './custom-switch.model'; +import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; +import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; +import { + DynamicNGBootstrapCheckboxComponent +} from "@ng-dynamic-forms/ui-ng-bootstrap/checkbox/dynamic-ng-bootstrap-checkbox.component"; @Component({ selector: 'ds-custom-switch', diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.model.ts index 4a7e7a22bed..882d516576c 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.model.ts @@ -1,9 +1,7 @@ -import { - DynamicCheckboxModel, - DynamicCheckboxModelConfig, - DynamicFormControlLayout, - serializable, -} from '@ng-dynamic-forms/core'; +import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; +import { DynamicCheckboxModel, DynamicCheckboxModelConfig } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; +import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; + export const DYNAMIC_FORM_CONTROL_TYPE_CUSTOM_SWITCH = 'CUSTOM_SWITCH'; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.ts index 5c4fe42a91f..96abf244a94 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.ts @@ -15,15 +15,13 @@ import { NgbDatepickerConfig, NgbDatepickerModule, } from '@ng-bootstrap/ng-bootstrap'; -import { - DynamicDatePickerModel, - DynamicFormControlComponent, - DynamicFormControlLayout, - DynamicFormLayoutService, - DynamicFormValidationService, -} from '@ng-dynamic-forms/core'; import { BtnDisabledDirective } from '../../../../../btn-disabled.directive'; +import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; +import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; +import { DynamicDatePickerModel } from "@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model"; +import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; +import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; @Component({ selector: 'ds-dynamic-date-picker-inline', diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.ts index f0475fdf61a..fa5e0a0b3ff 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.ts @@ -15,16 +15,14 @@ import { UntypedFormGroup, } from '@angular/forms'; import { hasValue } from '@dspace/shared/utils/empty.util'; -import { - DynamicFormControlComponent, - DynamicFormLayoutService, - DynamicFormValidationService, -} from '@ng-dynamic-forms/core'; import { TranslateModule } from '@ngx-translate/core'; import isEqual from 'lodash/isEqual'; import { NumberPickerComponent } from '../../../../number-picker/number-picker.component'; import { DynamicDsDatePickerModel } from './date-picker.model'; +import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; +import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; +import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; export type DatePickerFieldType = '_year' | '_month' | '_day'; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.model.ts index 33e0ee9ca48..94a525b9a81 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.model.ts @@ -3,14 +3,13 @@ import { isEmpty, isNotUndefined, } from '@dspace/shared/utils/empty.util'; -import { - DynamicDateControlModel, - DynamicDatePickerModelConfig, - DynamicFormControlLayout, - DynamicFormControlModel, - DynamicFormControlRelation, - serializable, -} from '@ng-dynamic-forms/core'; +import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; +import { DynamicDatePickerModelConfig } from "@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model"; +import { DynamicDateControlModel } from "@ng-dynamic-forms/core/model/dynamic-date-control.model"; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; +import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; +import { DynamicFormControlRelation } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model"; + import { BehaviorSubject, Subject, diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.ts index dfdfeb960e9..0176034832f 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.ts @@ -5,14 +5,12 @@ import { Output, } from '@angular/core'; import { UntypedFormGroup } from '@angular/forms'; -import { - DynamicFormControlComponent, - DynamicFormLayoutService, - DynamicFormValidationService, -} from '@ng-dynamic-forms/core'; import { TranslateModule } from '@ngx-translate/core'; import { DynamicDisabledModel } from './dynamic-disabled.model'; +import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; +import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; +import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; /** * Component representing a simple disabled input field diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.model.ts index 5902a7cc3d0..1643d1b6efb 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.model.ts @@ -1,12 +1,9 @@ -import { - DynamicFormControlLayout, - serializable, -} from '@ng-dynamic-forms/core'; - +import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; import { DsDynamicInputModel, DsDynamicInputModelConfig, } from '../ds-dynamic-input.model'; +import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; export const DYNAMIC_FORM_CONTROL_TYPE_DISABLED = 'EMPTY'; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts index 374d046b318..b57403ad49d 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts @@ -5,16 +5,13 @@ import { hasNoValue, isNotEmpty, } from '@dspace/shared/utils/empty.util'; -import { - DynamicFormControlLayout, - DynamicFormControlRelation, - DynamicFormGroupModel, - DynamicFormGroupModelConfig, - serializable, -} from '@ng-dynamic-forms/core'; import { Subject } from 'rxjs'; import { DsDynamicInputModel } from './ds-dynamic-input.model'; +import { DynamicFormGroupModel, DynamicFormGroupModelConfig } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; +import { DynamicFormControlRelation } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model"; +import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; +import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; export const CONCAT_GROUP_SUFFIX = '_CONCAT_GROUP'; export const CONCAT_FIRST_INPUT_SUFFIX = '_CONCAT_FIRST_INPUT'; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts index 8d1edcc27f3..73ab5d9cf60 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts @@ -3,13 +3,10 @@ import { FormFieldMetadataValueObject } from '@dspace/core/shared/form/models/fo import { RelationshipOptions } from '@dspace/core/shared/relationship-options.model'; import { VocabularyOptions } from '@dspace/core/submission/vocabularies/models/vocabulary-options.model'; import { hasValue } from '@dspace/shared/utils/empty.util'; -import { - DynamicFormControlLayout, - DynamicFormControlRelation, - DynamicInputModel, - DynamicInputModelConfig, - serializable, -} from '@ng-dynamic-forms/core'; +import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; +import { DynamicInputModel, DynamicInputModelConfig } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; +import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; +import { DynamicFormControlRelation } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model"; import { Subject } from 'rxjs'; export interface DsDynamicInputModelConfig extends DynamicInputModelConfig { diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-qualdrop.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-qualdrop.model.ts index 16d52a7330b..0e0096b8d90 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-qualdrop.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-qualdrop.model.ts @@ -1,13 +1,10 @@ import { LanguageCode } from '@dspace/core/shared/form/models/form-field-language-value.model'; -import { - DynamicFormControlLayout, - DynamicFormGroupModel, - DynamicFormGroupModelConfig, - serializable, -} from '@ng-dynamic-forms/core'; import { Subject } from 'rxjs'; import { DsDynamicInputModel } from './ds-dynamic-input.model'; +import { DynamicFormGroupModel, DynamicFormGroupModelConfig } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; +import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; +import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; export const QUALDROP_GROUP_SUFFIX = '_QUALDROP_GROUP'; export const QUALDROP_METADATA_SUFFIX = '_QUALDROP_METADATA'; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-array-model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-array-model.ts index 2761f365a09..a98437ef179 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-array-model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-array-model.ts @@ -1,12 +1,9 @@ import { RelationshipOptions } from '@dspace/core/shared/relationship-options.model'; import { hasValue } from '@dspace/shared/utils/empty.util'; -import { - DynamicFormArrayModel, - DynamicFormArrayModelConfig, - DynamicFormControlLayout, - DynamicFormControlRelation, - serializable, -} from '@ng-dynamic-forms/core'; +import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; +import { DynamicFormArrayModel, DynamicFormArrayModelConfig } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; +import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; +import { DynamicFormControlRelation } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model"; export interface DynamicRowArrayModelConfig extends DynamicFormArrayModelConfig { notRepeatable: boolean; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-group-model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-group-model.ts index b6d76b4c55b..9356813f27a 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-group-model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-group-model.ts @@ -1,4 +1,4 @@ -import { DynamicFormGroupModel } from '@ng-dynamic-forms/core'; +import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; export class DynamicRowGroupModel extends DynamicFormGroupModel { isRowGroup = true; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-textarea.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-textarea.model.ts index 532acf720a0..78bb60b681a 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-textarea.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-textarea.model.ts @@ -1,13 +1,10 @@ -import { - DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA, - DynamicFormControlLayout, - serializable, -} from '@ng-dynamic-forms/core'; - +import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; import { DsDynamicInputModel, DsDynamicInputModelConfig, } from './ds-dynamic-input.model'; +import { DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA } from "@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model"; +import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; export interface DsDynamicTextAreaModelConfig extends DsDynamicInputModelConfig { cols?: number; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/dynamic-vocabulary.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/dynamic-vocabulary.component.ts index f249016c022..f795a9f059e 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/dynamic-vocabulary.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/dynamic-vocabulary.component.ts @@ -10,11 +10,6 @@ import { PageInfo } from '@dspace/core/shared/page-info.model'; import { VocabularyEntry } from '@dspace/core/submission/vocabularies/models/vocabulary-entry.model'; import { VocabularyService } from '@dspace/core/submission/vocabularies/vocabulary.service'; import { isNotEmpty } from '@dspace/shared/utils/empty.util'; -import { - DynamicFormControlComponent, - DynamicFormLayoutService, - DynamicFormValidationService, -} from '@ng-dynamic-forms/core'; import { Observable, of, @@ -22,6 +17,9 @@ import { import { map } from 'rxjs/operators'; import { DsDynamicInputModel } from './ds-dynamic-input.model'; +import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; +import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; +import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; /** * An abstract class to be extended by form components that handle vocabulary diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/form-group/dynamic-form-group.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/form-group/dynamic-form-group.component.ts index 561132893cc..8b381419877 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/form-group/dynamic-form-group.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/form-group/dynamic-form-group.component.ts @@ -12,20 +12,23 @@ import { ReactiveFormsModule, UntypedFormGroup, } from '@angular/forms'; + + +import { DsDynamicFormControlContainerComponent } from '../../ds-dynamic-form-control-container.component'; +import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; +import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; import { - DynamicFormControlComponent, - DynamicFormControlCustomEvent, - DynamicFormControlEvent, - DynamicFormControlLayout, - DynamicFormControlModel, - DynamicFormGroupModel, DynamicFormLayout, DynamicFormLayoutService, - DynamicFormValidationService, - DynamicTemplateDirective, -} from '@ng-dynamic-forms/core'; - -import { DsDynamicFormControlContainerComponent } from '../../ds-dynamic-form-control-container.component'; +} from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; +import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; +import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; +import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; +import { + DynamicFormControlCustomEvent, + DynamicFormControlEvent, +} from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; +import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; @Component({ selector: 'ds-dynamic-form-group', diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list-checkbox-group.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list-checkbox-group.model.ts index 05ef4cb1015..737c1d91601 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list-checkbox-group.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list-checkbox-group.model.ts @@ -1,13 +1,12 @@ import { VocabularyEntry } from '@dspace/core/submission/vocabularies/models/vocabulary-entry.model'; import { VocabularyOptions } from '@dspace/core/submission/vocabularies/models/vocabulary-options.model'; import { hasValue } from '@dspace/shared/utils/empty.util'; -import { - DynamicCheckboxGroupModel, - DynamicFormControlLayout, - DynamicFormControlRelation, - DynamicFormGroupModelConfig, - serializable, -} from '@ng-dynamic-forms/core'; +import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; +import { DynamicCheckboxGroupModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model"; +import { DynamicFormGroupModelConfig } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; +import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; +import { DynamicFormControlRelation } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model"; + import { Subject } from 'rxjs'; export interface DynamicListCheckboxGroupModelConfig extends DynamicFormGroupModelConfig { diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list-radio-group.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list-radio-group.model.ts index 5b9c6801823..e7580b0dcb4 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list-radio-group.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list-radio-group.model.ts @@ -1,13 +1,11 @@ import { VocabularyEntry } from '@dspace/core/submission/vocabularies/models/vocabulary-entry.model'; import { VocabularyOptions } from '@dspace/core/submission/vocabularies/models/vocabulary-options.model'; import { hasValue } from '@dspace/shared/utils/empty.util'; -import { - DynamicFormControlLayout, - DynamicFormControlRelation, - DynamicRadioGroupModel, - DynamicRadioGroupModelConfig, - serializable, -} from '@ng-dynamic-forms/core'; +import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; +import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; +import { DynamicFormControlRelation } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model"; +import { DynamicRadioGroupModel, DynamicRadioGroupModelConfig } from "@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model"; + export interface DynamicListModelConfig extends DynamicRadioGroupModelConfig { vocabularyOptions: VocabularyOptions; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.html index 3c58f495321..5e21353d364 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.html +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.html @@ -37,11 +37,9 @@ @if (!model.repeatable) {
+ [ngClass]="model.layout.element?.control"> @for (columnItems of items; track columnItems) {
@for (item of columnItems; track item) { @@ -52,6 +50,7 @@ [name]="model.id" [required]="model.required" [value]="item.index" + (change)="onChange($event)" (blur)="onBlur($event)" (focus)="onFocus($event)"/>
-
+
@if (!processesRD || processesRD.isLoading) { diff --git a/src/app/process-page/overview/table/process-overview-table.component.spec.ts b/src/app/process-page/overview/table/process-overview-table.component.spec.ts index dca49769442..883e0cfd302 100644 --- a/src/app/process-page/overview/table/process-overview-table.component.spec.ts +++ b/src/app/process-page/overview/table/process-overview-table.component.spec.ts @@ -146,8 +146,7 @@ describe('ProcessOverviewTableComponent', () => { translateServiceSpy = jasmine.createSpyObj('TranslateService', ['get']); void TestBed.configureTestingModule({ - declarations: [NgbCollapse], - imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), VarDirective, ProcessOverviewTableComponent], + imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), VarDirective, ProcessOverviewTableComponent, NgbCollapse], providers: [ { provide: ProcessOverviewService, useValue: processOverviewService }, { provide: ProcessDataService, useValue: processService }, diff --git a/src/app/process-page/overview/table/process-overview-table.component.ts b/src/app/process-page/overview/table/process-overview-table.component.ts index 02b9488dee2..504d7c42ce0 100644 --- a/src/app/process-page/overview/table/process-overview-table.component.ts +++ b/src/app/process-page/overview/table/process-overview-table.component.ts @@ -36,7 +36,7 @@ import { hasValue, isNotEmpty, } from '@dspace/shared/utils/empty.util'; -import { NgbCollapseModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgbCollapse, NgbCollapseModule } from '@ng-bootstrap/ng-bootstrap'; import { TranslateModule, TranslateService, @@ -83,7 +83,7 @@ export interface ProcessOverviewTableEntry { templateUrl: './process-overview-table.component.html', imports: [ AsyncPipe, - NgbCollapseModule, + NgbCollapse, NgClass, PaginationComponent, RouterLink, diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts index 08794dc031f..ec08a234df2 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts @@ -24,7 +24,7 @@ import { Item } from '@dspace/core/shared/item.model'; import { WorkspaceItem } from '@dspace/core/submission/models/workspaceitem.model'; import { VocabularyOptions } from '@dspace/core/submission/vocabularies/models/vocabulary-options.model'; import { createSuccessfulRemoteDataObject } from '@dspace/core/utilities/remote-data.utils'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgbModule, NgbTooltip } from '@ng-bootstrap/ng-bootstrap'; import { Store } from '@ngrx/store'; import { TranslateModule } from '@ngx-translate/core'; @@ -186,7 +186,7 @@ describe('DsDynamicFormControlContainerComponent test suite', () => { }), new DynamicQualdropModel({ id: 'combobox', readOnly: false, required: false }), ]; - const testModel = formModel[8]; + const testModel = formModel[6]; let formGroup: UntypedFormGroup; let fixture: ComponentFixture; let component: DsDynamicFormControlContainerComponent; @@ -202,7 +202,7 @@ describe('DsDynamicFormControlContainerComponent test suite', () => { imports: [ FormsModule, ReactiveFormsModule, - NgbModule, + NgbTooltip, DynamicListDirective, DynamicTemplateDirective, TranslateModule.forRoot(), @@ -341,32 +341,28 @@ describe('DsDynamicFormControlContainerComponent test suite', () => { const testFn = dsDynamicFormControlMapFn; expect(testFn(formModel[0])).toEqual(DynamicNGBootstrapCheckboxComponent); expect(testFn(formModel[1])).toEqual(DynamicNGBootstrapCheckboxGroupComponent); - expect(testFn(formModel[2])).toBeNull(); - expect(testFn(formModel[3])).toEqual(DsDatePickerInlineComponent); - (formModel[3] as DynamicDatePickerModel).inline = true; - expect(testFn(formModel[3])).toEqual(DynamicNGBootstrapCalendarComponent); - expect(testFn(formModel[4])).toBeNull(); - expect(testFn(formModel[5])).toBeNull(); - expect(testFn(formModel[6])).toEqual(DsDynamicFormArrayComponent); - expect(testFn(formModel[7])).toEqual(DsDynamicFormGroupComponent); - expect(testFn(formModel[8])).toEqual(DynamicNGBootstrapInputComponent); - expect(testFn(formModel[9])).toEqual(DynamicNGBootstrapRadioGroupComponent); - expect(testFn(formModel[10])).toBeNull(); - expect(testFn(formModel[11])).toEqual(DynamicNGBootstrapSelectComponent); - expect(testFn(formModel[12])).toBeNull(); - expect(testFn(formModel[13])).toBeNull(); - expect(testFn(formModel[14])).toEqual(DynamicNGBootstrapTextAreaComponent); - expect(testFn(formModel[15])).toEqual(DynamicNGBootstrapTimePickerComponent); - expect(testFn(formModel[16])).toEqual(DsDynamicOneboxComponent); - expect(testFn(formModel[17])).toEqual(DsDynamicScrollableDropdownComponent); - expect(testFn(formModel[18])).toEqual(DsDynamicTagComponent); - expect(testFn(formModel[19])).toEqual(DsDynamicListComponent); - expect(testFn(formModel[20])).toEqual(DsDynamicListComponent); - expect(testFn(formModel[21])).toEqual(DsDynamicRelationGroupComponent); - expect(testFn(formModel[22])).toEqual(DsDatePickerComponent); - expect(testFn(formModel[23])).toEqual(DsDynamicLookupComponent); - expect(testFn(formModel[24])).toEqual(DsDynamicLookupComponent); - expect(testFn(formModel[25])).toEqual(DsDynamicFormGroupComponent); + expect(testFn(formModel[2])).toEqual(DsDatePickerInlineComponent); + (formModel[2] as DynamicDatePickerModel).inline = true; + expect(testFn(formModel[2])).toEqual(DynamicNGBootstrapCalendarComponent); + expect(testFn(formModel[3])).toBeNull(); + expect(testFn(formModel[4])).toEqual(DsDynamicFormArrayComponent); + expect(testFn(formModel[5])).toEqual(DsDynamicFormGroupComponent); + expect(testFn(formModel[6])).toEqual(DynamicNGBootstrapInputComponent); + expect(testFn(formModel[7])).toEqual(DynamicNGBootstrapRadioGroupComponent); + expect(testFn(formModel[8])).toEqual(DynamicNGBootstrapSelectComponent); + expect(testFn(formModel[9])).toBeNull(); + expect(testFn(formModel[10])).toEqual(DynamicNGBootstrapTextAreaComponent); + expect(testFn(formModel[11])).toEqual(DynamicNGBootstrapTimePickerComponent); + expect(testFn(formModel[12])).toEqual(DsDynamicOneboxComponent); + expect(testFn(formModel[13])).toEqual(DsDynamicScrollableDropdownComponent); + expect(testFn(formModel[14])).toEqual(DsDynamicTagComponent); + expect(testFn(formModel[15])).toEqual(DsDynamicListComponent); + expect(testFn(formModel[16])).toEqual(DsDynamicListComponent); + expect(testFn(formModel[17])).toEqual(DsDynamicRelationGroupComponent); + expect(testFn(formModel[18])).toEqual(DsDatePickerComponent); + expect(testFn(formModel[19])).toEqual(DsDynamicLookupComponent); + expect(testFn(formModel[20])).toEqual(DsDynamicLookupComponent); + expect(testFn(formModel[21])).toEqual(DsDynamicFormGroupComponent); }); }); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts index 5f91cee5191..2c924154a73 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts @@ -71,8 +71,7 @@ import { } from '@dspace/shared/utils/empty.util'; import { NgbModal, - NgbModalRef, - NgbTooltipModule, + NgbModalRef, NgbTooltip, } from '@ng-bootstrap/ng-bootstrap'; import { Store } from '@ngrx/store'; @@ -141,7 +140,7 @@ import { ExistingMetadataListElementComponent, ExistingRelationListElementComponent, FormsModule, - NgbTooltipModule, + NgbTooltip, NgClass, NgTemplateOutlet, ReactiveFormsModule, diff --git a/src/app/shared/resource-policies/form/resource-policy-form.component.spec.ts b/src/app/shared/resource-policies/form/resource-policy-form.component.spec.ts index 6d1f1de955b..874a2dad6c2 100644 --- a/src/app/shared/resource-policies/form/resource-policy-form.component.spec.ts +++ b/src/app/shared/resource-policies/form/resource-policy-form.component.spec.ts @@ -42,7 +42,7 @@ import { stringToNgbDateStruct, } from '@dspace/shared/utils/date.util'; import { isNotEmptyOperator } from '@dspace/shared/utils/empty.util'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgbNav, NgbNavContent, NgbNavItem, NgbNavLink, NgbNavOutlet } from '@ng-bootstrap/ng-bootstrap'; import { provideMockStore } from '@ngrx/store/testing'; import { TranslateModule } from '@ngx-translate/core'; import { getTestScheduler } from 'jasmine-marbles'; @@ -207,7 +207,11 @@ describe('ResourcePolicyFormComponent test suite', () => { imports: [ CommonModule, FormsModule, - NgbModule, + NgbNavLink, + NgbNavItem, + NgbNavContent, + NgbNavOutlet, + NgbNav, NoopAnimationsModule, ReactiveFormsModule, TranslateModule.forRoot(), @@ -494,7 +498,11 @@ describe('ResourcePolicyFormComponent test suite', () => { template: ``, imports: [ FormsModule, - NgbModule, + NgbNavLink, + NgbNavItem, + NgbNavContent, + NgbNavOutlet, + NgbNav, ReactiveFormsModule, ], }) diff --git a/src/app/shared/resource-policies/form/resource-policy-form.component.ts b/src/app/shared/resource-policies/form/resource-policy-form.component.ts index 0e53743ef84..93ee8f2e2f8 100644 --- a/src/app/shared/resource-policies/form/resource-policy-form.component.ts +++ b/src/app/shared/resource-policies/form/resource-policy-form.component.ts @@ -29,9 +29,9 @@ import { isNotEmpty, } from '@dspace/shared/utils/empty.util'; import { - NgbModal, - NgbNavChangeEvent, - NgbNavModule, + NgbModal, NgbNav, + NgbNavChangeEvent, NgbNavContent, NgbNavItem, NgbNavLink, + NgbNavModule, NgbNavOutlet, } from '@ng-bootstrap/ng-bootstrap'; import { TranslateModule } from '@ngx-translate/core'; import { @@ -87,7 +87,11 @@ export interface ResourcePolicyEvent { BtnDisabledDirective, EpersonGroupListComponent, FormComponent, - NgbNavModule, + NgbNavLink, + NgbNavItem, + NgbNavContent, + NgbNavOutlet, + NgbNav, TranslateModule, ], }) diff --git a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.spec.ts b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.spec.ts index 2f0bcc7cb10..9d1c09c8574 100644 --- a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.spec.ts @@ -149,10 +149,7 @@ describe("DynamicFormService test suite", () => { expect(formGroup.get("testSelect") instanceof UntypedFormControl).toBe(true); expect(formGroup.get("testTextArea") instanceof UntypedFormControl).toBe(true); expect(formGroup.get("testFileUpload") instanceof UntypedFormControl).toBe(true); - expect(formGroup.get("testEditor") instanceof UntypedFormControl).toBe(true); expect(formGroup.get("testTimePicker") instanceof UntypedFormControl).toBe(true); - expect(formGroup.get("testRating") instanceof UntypedFormControl).toBe(true); - expect(formGroup.get("testColorPicker") instanceof UntypedFormControl).toBe(true); }); @@ -172,9 +169,9 @@ describe("DynamicFormService test suite", () => { expect(formModel[7] instanceof DynamicFormGroupModel).toBe(true); expect(formModel[8] instanceof DynamicSwitchModel).toBe(true); expect(formModel[9] instanceof DynamicDatePickerModel).toBe(true); - expect((formModel[10] as DynamicDateControlModel).value instanceof Date).toBe(true); - expect(formModel[11] instanceof DynamicFileUploadModel).toBe(true); - expect(formModel[12] instanceof DynamicTimePickerModel).toBe(true); + expect((formModel[9] as DynamicDateControlModel).value instanceof Date).toBe(true); + expect(formModel[10] instanceof DynamicFileUploadModel).toBe(true); + expect(formModel[11] instanceof DynamicTimePickerModel).toBe(true); }); @@ -192,7 +189,6 @@ describe("DynamicFormService test suite", () => { expect(service.findById("testInput", testModel) instanceof DynamicFormControlModel).toBe(true); expect(service.findById("testRadioGroup", testModel) instanceof DynamicFormControlModel).toBe(true); expect(service.findById("testSelect", testModel) instanceof DynamicFormControlModel).toBe(true); - expect(service.findById("testSlider", testModel) instanceof DynamicFormControlModel).toBe(true); expect(service.findById("testSwitch", testModel) instanceof DynamicFormControlModel).toBe(true); expect(service.findById("testTextArea", testModel) instanceof DynamicFormControlModel).toBe(true); expect(service.findById("testFileUpload", testModel) instanceof DynamicFormControlModel).toBe(true); diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.spec.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.spec.ts index d38e80a9698..9c637dc7475 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.spec.ts @@ -19,7 +19,7 @@ describe("DynamicNGBootstrapInputComponent test suite", () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - imports: [DynamicNGBootstrapInputComponent, NgxMaskModule], + imports: [DynamicNGBootstrapInputComponent, NgxMaskModule.forRoot()], }).compileComponents().then(() => { fixture = TestBed.createComponent(DynamicNGBootstrapInputComponent); From ee6479b403cbf268c6b7fbc7826c773c5a795c5f Mon Sep 17 00:00:00 2001 From: FrancescoMolinaro Date: Fri, 28 Nov 2025 11:21:33 +0100 Subject: [PATCH 4/6] [CST-22299] migrate ng-dynamic-forms to control flow --- ...ng-bootstrap-checkbox-group.component.html | 43 ++--- ...c-ng-bootstrap-checkbox-group.component.ts | 4 +- .../dynamic-ng-bootstrap-input.component.html | 165 +++++++++--------- .../dynamic-ng-bootstrap-input.component.ts | 4 +- ...ic-ng-bootstrap-radio-group.component.html | 39 +++-- ...amic-ng-bootstrap-radio-group.component.ts | 4 +- ...dynamic-ng-bootstrap-select.component.html | 34 ++-- .../dynamic-ng-bootstrap-select.component.ts | 4 +- 8 files changed, 156 insertions(+), 141 deletions(-) diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component.html b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component.html index 88c2e3ce742..5d959214d61 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component.html +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component.html @@ -1,26 +1,27 @@ -
+
- + @for (checkboxModel of model.group; track checkboxModel) { + + }
- + diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component.ts index 97e185c4c77..fd12d639d08 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from "@angular/core"; import { UntypedFormGroup, ReactiveFormsModule } from "@angular/forms"; -import { NgClass, NgFor } from "@angular/common"; +import { NgClass } from "@angular/common"; import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; import { DynamicFormLayout, @@ -19,7 +19,7 @@ import { DynamicCheckboxModel } from "@ng-dynamic-forms/core/model/checkbox/dyna templateUrl: "./dynamic-ng-bootstrap-checkbox-group.component.html", changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, - imports: [ReactiveFormsModule, NgClass, NgFor] + imports: [ReactiveFormsModule, NgClass] }) export class DynamicNGBootstrapCheckboxGroupComponent extends DynamicFormControlComponent { @Input() formLayout?: DynamicFormLayout; diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.html b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.html index c1ed9c4af94..97ab182d47f 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.html +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.html @@ -1,85 +1,94 @@
- + @if (model.prefix) { + + } - + @if (model.inputType === 'file') { + + } @else { + + } - - - - + @if (model.suffix) { + + } - - + @if (model.hasList) { + + @for (option of model.list$ | async; track option) { + + } -
+
diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.ts index 484e73fd02d..13d35c7a0b7 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from "@angular/core"; import { UntypedFormGroup, ReactiveFormsModule } from "@angular/forms"; -import { NgIf, NgClass, NgFor, AsyncPipe } from "@angular/common"; +import { NgClass, AsyncPipe } from "@angular/common"; import { NgxMaskModule } from "ngx-mask"; import { DynamicListDirective } from "@ng-dynamic-forms/core/directive/dynamic-list.directive"; @@ -19,7 +19,7 @@ import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dyn templateUrl: "./dynamic-ng-bootstrap-input.component.html", changeDetection: ChangeDetectionStrategy.Default, standalone: true, - imports: [ReactiveFormsModule, NgIf, DynamicListDirective, NgClass, NgFor, AsyncPipe, NgxMaskModule], + imports: [ReactiveFormsModule, DynamicListDirective, NgClass, AsyncPipe, NgxMaskModule], }) export class DynamicNGBootstrapInputComponent extends DynamicFormControlComponent { @Input() formLayout?: DynamicFormLayout; diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component.html b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component.html index c5fdc231374..befa674a147 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component.html +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component.html @@ -1,26 +1,29 @@ -
+
- + @if (model.legend) { + + } -
- + diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component.ts index debc6cc1de0..24bd7ae0dec 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from "@angular/core"; import { UntypedFormGroup, ReactiveFormsModule } from "@angular/forms"; -import { NgClass, NgIf, NgFor, AsyncPipe } from "@angular/common"; +import { NgClass, AsyncPipe } from "@angular/common"; import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; import { DynamicFormLayout, @@ -17,7 +17,7 @@ import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dyn templateUrl: "./dynamic-ng-bootstrap-radio-group.component.html", changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, - imports: [ReactiveFormsModule, NgClass, NgIf, NgFor, AsyncPipe] + imports: [ReactiveFormsModule, NgClass, AsyncPipe] }) export class DynamicNGBootstrapRadioGroupComponent extends DynamicFormControlComponent { @Input() formLayout?: DynamicFormLayout; diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component.html b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component.html index 454ebebfce7..daec18ed033 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component.html +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component.html @@ -1,22 +1,24 @@ - - + @for (option of model.options$ | async; track option) { + + } - + diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component.ts index a0b01091fb1..71cf316817d 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from "@angular/core"; import { UntypedFormGroup, ReactiveFormsModule } from "@angular/forms"; -import { NgClass, NgFor, AsyncPipe } from "@angular/common"; +import { NgClass, AsyncPipe } from "@angular/common"; import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; import { DynamicFormLayout, @@ -15,7 +15,7 @@ import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dyn templateUrl: "./dynamic-ng-bootstrap-select.component.html", changeDetection: ChangeDetectionStrategy.Default, standalone: true, - imports: [ReactiveFormsModule, NgClass, NgFor, AsyncPipe] + imports: [ReactiveFormsModule, NgClass, AsyncPipe] }) export class DynamicNGBootstrapSelectComponent extends DynamicFormControlComponent { @Input() formLayout?: DynamicFormLayout; From d6b16e0f23fe10d133b3b00a40a2d379adaef7d6 Mon Sep 17 00:00:00 2001 From: FrancescoMolinaro Date: Fri, 28 Nov 2025 12:37:21 +0100 Subject: [PATCH 5/6] [CST-22299] exclude dynamic forms from some rules, fix lint --- .eslintrc.json | 10 +- .../access-control/access-control-routes.ts | 6 +- .../bulk-access-browse.component.spec.ts | 8 +- .../browse/bulk-access-browse.component.ts | 14 +- .../eperson-form/eperson-form.component.ts | 8 +- .../group-form/group-form.component.ts | 8 +- .../format-form/format-form.component.spec.ts | 7 +- .../format-form/format-form.component.ts | 14 +- .../metadata-schema-form.component.ts | 8 +- .../metadata-field-form.component.ts | 10 +- src/app/app.config.ts | 2 +- .../edit-bitstream-page.component.spec.ts | 5 +- .../edit-bitstream-page.component.ts | 10 +- .../collection-form.component.ts | 9 +- .../collection-form/collection-form.models.ts | 9 +- .../collection-item-mapper.component.spec.ts | 10 +- .../collection-item-mapper.component.ts | 14 +- .../collection-source.component.spec.ts | 5 +- .../collection-source.component.ts | 17 +- .../community-form.component.ts | 9 +- ...em-metadata-list-element.component.spec.ts | 5 +- ...it-item-metadata-list-element.component.ts | 8 +- ...em-metadata-list-element.component.spec.ts | 7 +- ...on-item-metadata-list-element.component.ts | 6 +- .../health-page/health-page.component.spec.ts | 8 +- src/app/health-page/health-page.component.ts | 14 +- src/app/init.service.ts | 2 +- .../item-collection-mapper.component.spec.ts | 9 +- .../item-collection-mapper.component.ts | 14 +- .../table/process-overview-table.component.ts | 2 +- .../profile-page-metadata-form.component.ts | 8 +- .../profile-page-security-form.component.ts | 7 +- .../comcol-form/comcol-form.component.spec.ts | 7 +- .../comcol-form/comcol-form.component.ts | 7 +- ...c-form-control-container.component.spec.ts | 58 +- ...ynamic-form-control-container.component.ts | 53 +- .../ds-dynamic-form-control-map-fn.ts | 44 +- .../ds-dynamic-form.component.ts | 17 +- ...dynamic-type-bind-relation.service.spec.ts | 10 +- .../ds-dynamic-type-bind-relation.service.ts | 17 +- .../dynamic-form-array.component.spec.ts | 11 +- .../dynamic-form-array.component.ts | 26 +- .../custom-switch.component.spec.ts | 7 +- .../custom-switch/custom-switch.component.ts | 8 +- .../custom-switch/custom-switch.model.ts | 9 +- ...namic-date-picker-inline.component.spec.ts | 9 +- .../dynamic-date-picker-inline.component.ts | 10 +- .../date-picker/date-picker.component.spec.ts | 5 +- .../date-picker/date-picker.component.ts | 6 +- .../models/date-picker/date-picker.model.ts | 13 +- .../dynamic-disabled.component.spec.ts | 5 +- .../disabled/dynamic-disabled.component.ts | 6 +- .../models/disabled/dynamic-disabled.model.ts | 5 +- .../models/ds-dynamic-concat.model.ts | 11 +- .../models/ds-dynamic-input.model.ts | 11 +- .../models/ds-dynamic-qualdrop.model.ts | 9 +- .../models/ds-dynamic-row-array-model.ts | 11 +- .../models/ds-dynamic-row-group-model.ts | 2 +- .../models/ds-dynamic-textarea.model.ts | 7 +- .../models/dynamic-vocabulary.component.ts | 6 +- .../dynamic-form-group.component.ts | 27 +- .../list/dynamic-list-checkbox-group.model.ts | 11 +- .../list/dynamic-list-radio-group.model.ts | 11 +- .../list/dynamic-list.component.spec.ts | 11 +- .../models/list/dynamic-list.component.ts | 8 +- .../lookup/dynamic-lookup-name.model.ts | 5 +- .../lookup/dynamic-lookup.component.spec.ts | 8 +- .../models/lookup/dynamic-lookup.component.ts | 4 +- .../models/lookup/dynamic-lookup.model.ts | 7 +- .../onebox/dynamic-onebox.component.spec.ts | 8 +- .../models/onebox/dynamic-onebox.component.ts | 4 +- .../models/onebox/dynamic-onebox.model.ts | 7 +- .../dynamic-relation-group.component.spec.ts | 7 +- .../dynamic-relation-group.components.ts | 12 +- .../dynamic-relation-group.model.ts | 5 +- ...amic-scrollable-dropdown.component.spec.ts | 9 +- .../dynamic-scrollable-dropdown.component.ts | 4 +- .../dynamic-scrollable-dropdown.model.ts | 7 +- .../models/tag/dynamic-tag.component.spec.ts | 8 +- .../models/tag/dynamic-tag.component.ts | 4 +- .../models/tag/dynamic-tag.model.ts | 7 +- .../ds-dynamic-form-ui/type-bind.utils.ts | 8 +- .../form/builder/form-builder.service.spec.ts | 31 +- .../form/builder/form-builder.service.ts | 31 +- .../builder/parsers/dropdown-field-parser.ts | 2 +- .../form/builder/parsers/field-parser.ts | 2 +- .../builder/parsers/onebox-field-parser.ts | 6 +- .../form/builder/parsers/parser.utils.ts | 5 +- .../shared/form/builder/parsers/row-parser.ts | 4 +- src/app/shared/form/form.component.spec.ts | 13 +- src/app/shared/form/form.component.ts | 14 +- src/app/shared/form/form.service.spec.ts | 7 +- src/app/shared/form/form.service.ts | 6 +- .../shared/form/testing/form-event.stub.ts | 4 +- .../shared/form/testing/form-models.mock.ts | 2 +- .../resource-policy-form.component.spec.ts | 16 +- .../form/resource-policy-form.component.ts | 24 +- .../form/resource-policy-form.model.ts | 10 +- .../section-accesses.component.spec.ts | 11 +- .../accesses/section-accesses.component.ts | 36 +- .../accesses/section-accesses.model.ts | 17 +- .../section-form-operations.service.spec.ts | 9 +- .../form/section-form-operations.service.ts | 14 +- .../form/section-form.component.spec.ts | 5 +- .../sections/form/section-form.component.ts | 5 +- .../license/section-license.component.spec.ts | 10 +- .../license/section-license.component.ts | 9 +- .../submission/sections/sections.service.ts | 2 +- ...section-upload-file-edit.component.spec.ts | 9 +- .../section-upload-file-edit.component.ts | 27 +- .../edit/section-upload-file-edit.model.ts | 17 +- .../file/section-upload-file.component.ts | 3 +- .../component/dynamic-form-array.component.ts | 45 +- ...ynamic-form-control-container.component.ts | 432 +++++------ .../component/dynamic-form-control-event.ts | 23 +- .../dynamic-form-control-interface.ts | 18 +- ...ic-form-control-with-template-interface.ts | 2 +- ...ic-form-control-with-template.component.ts | 52 +- .../dynamic-form-control.component.ts | 168 ++--- .../component/dynamic-form-group.component.ts | 21 +- .../core/component/dynamic-form.component.ts | 107 +-- .../core/decorator/serializable.decorator.ts | 34 +- .../directive/dynamic-list.directive.spec.ts | 60 +- .../core/directive/dynamic-list.directive.ts | 23 +- .../dynamic-template.directive.spec.ts | 52 +- .../directive/dynamic-template.directive.ts | 16 +- .../dynamic-checkbox-group.model.spec.ts | 175 ++--- .../checkbox/dynamic-checkbox-group.model.ts | 23 +- .../checkbox/dynamic-checkbox.model.spec.ts | 101 +-- .../model/checkbox/dynamic-checkbox.model.ts | 17 +- .../dynamic-datepicker.model.spec.ts | 63 +- .../datepicker/dynamic-datepicker.model.ts | 37 +- .../core/model/dynamic-check-control.model.ts | 23 +- .../core/model/dynamic-date-control.model.ts | 19 +- .../core/model/dynamic-file-control.model.ts | 15 +- .../core/model/dynamic-form-control.model.ts | 70 +- .../model/dynamic-form-value-control.model.ts | 48 +- .../core/model/dynamic-input-control.model.ts | 34 +- .../model/dynamic-option-control.model.ts | 90 ++- .../dynamic-file-upload.model.spec.ts | 59 +- .../file-upload/dynamic-file-upload.model.ts | 32 +- .../dynamic-form-array.model.spec.ts | 108 +-- .../form-array/dynamic-form-array.model.ts | 116 +-- .../dynamic-form-group.model.spec.ts | 115 +-- .../form-group/dynamic-form-group.model.ts | 31 +- .../model/input/dynamic-input.model.spec.ts | 228 +++--- .../core/model/input/dynamic-input.model.ts | 116 +-- .../dynamic-form-control-validation.model.ts | 10 +- .../radio/dynamic-radio-group.model.spec.ts | 165 +++-- .../model/radio/dynamic-radio-group.model.ts | 17 +- .../model/select/dynamic-select.model.spec.ts | 178 ++--- .../core/model/select/dynamic-select.model.ts | 34 +- .../model/switch/dynamic-switch.model.spec.ts | 55 +- .../core/model/switch/dynamic-switch.model.ts | 17 +- .../textarea/dynamic-textarea.model.spec.ts | 90 +-- .../model/textarea/dynamic-textarea.model.ts | 25 +- .../dynamic-timepicker.model.spec.ts | 61 +- .../timepicker/dynamic-timepicker.model.ts | 19 +- .../dynamic-form-component.service.spec.ts | 163 ++-- .../service/dynamic-form-component.service.ts | 154 ++-- .../dynamic-form-layout.service.spec.ts | 139 ++-- .../service/dynamic-form-layout.service.ts | 192 ++--- .../service/dynamic-form-relation-matchers.ts | 113 +-- .../dynamic-form-relation.service.spec.ts | 335 +++++---- .../service/dynamic-form-relation.service.ts | 235 +++--- .../dynamic-form-validation-matchers.ts | 15 +- .../dynamic-form-validation.service.spec.ts | 336 +++++---- .../dynamic-form-validation.service.ts | 271 +++---- .../core/service/dynamic-form-validators.ts | 9 +- .../core/service/dynamic-form.service.spec.ts | 695 +++++++++--------- .../core/service/dynamic-form.service.ts | 559 +++++++------- .../core/utils/autofill.utils.spec.ts | 137 ++-- .../core/utils/autofill.utils.ts | 202 ++--- .../core/utils/core.utils.spec.ts | 128 ++-- .../ng-dynamic-forms/core/utils/core.utils.ts | 20 +- .../core/utils/json.utils.spec.ts | 60 +- .../ng-dynamic-forms/core/utils/json.utils.ts | 36 +- ...ic-ng-bootstrap-calendar.component.spec.ts | 165 +++-- ...dynamic-ng-bootstrap-calendar.component.ts | 49 +- ...bootstrap-checkbox-group.component.spec.ts | 153 ++-- ...c-ng-bootstrap-checkbox-group.component.ts | 48 +- ...ic-ng-bootstrap-checkbox.component.spec.ts | 165 +++-- ...dynamic-ng-bootstrap-checkbox.component.ts | 39 +- ...namic-ng-bootstrap-input.component.spec.ts | 167 +++-- .../dynamic-ng-bootstrap-input.component.ts | 50 +- ...ng-bootstrap-radio-group.component.spec.ts | 153 ++-- ...amic-ng-bootstrap-radio-group.component.ts | 43 +- ...amic-ng-bootstrap-select.component.spec.ts | 163 ++-- .../dynamic-ng-bootstrap-select.component.ts | 43 +- ...ic-ng-bootstrap-textarea.component.spec.ts | 167 +++-- ...dynamic-ng-bootstrap-textarea.component.ts | 39 +- ...-ng-bootstrap-timepicker.component.spec.ts | 161 ++-- ...namic-ng-bootstrap-timepicker.component.ts | 49 +- 193 files changed, 5306 insertions(+), 4587 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index d7977878e89..e4ec1d73d9b 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -231,7 +231,8 @@ { "ignoredTypeNames": [ "ResourceType", - "Error" + "Error", + "RegExp" ] } ], @@ -382,6 +383,13 @@ } ] } + }, + { + "files": ["src/external-libraries/ng-dynamic-forms/**/*.ts"], + "rules": { + "@angular-eslint/directive-selector": "off", + "@angular-eslint/component-selector": "off" + } } ] } diff --git a/src/app/access-control/access-control-routes.ts b/src/app/access-control/access-control-routes.ts index 9916a6a7e4e..1c7fd20625d 100644 --- a/src/app/access-control/access-control-routes.ts +++ b/src/app/access-control/access-control-routes.ts @@ -3,7 +3,10 @@ import { Route } from '@angular/router'; import { i18nBreadcrumbResolver } from '@dspace/core/breadcrumbs/i18n-breadcrumb.resolver'; import { groupAdministratorGuard } from '@dspace/core/data/feature-authorization/feature-authorization-guard/group-administrator.guard'; import { siteAdministratorGuard } from '@dspace/core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; - +import { + DYNAMIC_ERROR_MESSAGES_MATCHER, + DynamicErrorMessagesMatcher, +} from '@ng-dynamic-forms/core/service/dynamic-form-validation-matchers'; import { EPERSON_PATH, @@ -16,7 +19,6 @@ import { EPersonResolver } from './epeople-registry/eperson-resolver.service'; import { GroupFormComponent } from './group-registry/group-form/group-form.component'; import { groupPageGuard } from './group-registry/group-page.guard'; import { GroupsRegistryComponent } from './group-registry/groups-registry.component'; -import { DYNAMIC_ERROR_MESSAGES_MATCHER, DynamicErrorMessagesMatcher } from "@ng-dynamic-forms/core/service/dynamic-form-validation-matchers"; /** * Condition for displaying error messages on email form field diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts index 06b565787f7..3bffd36089a 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts @@ -8,8 +8,12 @@ import { buildPaginatedList } from '@dspace/core/data/paginated-list.model'; import { PageInfo } from '@dspace/core/shared/page-info.model'; import { createSuccessfulRemoteDataObject } from '@dspace/core/utilities/remote-data.utils'; import { - NgbAccordionModule, NgbNav, NgbNavContent, NgbNavItem, NgbNavLink, - NgbNavModule, NgbNavOutlet, + NgbAccordionModule, + NgbNav, + NgbNavContent, + NgbNavItem, + NgbNavLink, + NgbNavOutlet, } from '@ng-bootstrap/ng-bootstrap'; import { TranslateModule } from '@ngx-translate/core'; import { of } from 'rxjs'; diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts index e09c46060be..e2ca2037b1e 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts @@ -16,8 +16,12 @@ import { PageInfo } from '@dspace/core/shared/page-info.model'; import { createSuccessfulRemoteDataObject } from '@dspace/core/utilities/remote-data.utils'; import { hasValue } from '@dspace/shared/utils/empty.util'; import { - NgbAccordionModule, NgbNav, NgbNavContent, NgbNavItem, NgbNavLink, - NgbNavModule, NgbNavOutlet, + NgbAccordionModule, + NgbNav, + NgbNavContent, + NgbNavItem, + NgbNavLink, + NgbNavOutlet, } from '@ng-bootstrap/ng-bootstrap'; import { TranslateModule } from '@ngx-translate/core'; import { NgxPaginationModule } from 'ngx-pagination'; @@ -55,11 +59,11 @@ import { BrowserOnlyPipe } from '../../../shared/utils/browser-only.pipe'; BrowserOnlyPipe, ListableObjectComponentLoaderComponent, NgbAccordionModule, - NgbNavLink, - NgbNavItem, + NgbNav, NgbNavContent, + NgbNavItem, + NgbNavLink, NgbNavOutlet, - NgbNav, NgxPaginationModule, PaginationComponent, SelectableListItemControlComponent, diff --git a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts index 3852fd6f425..8f2fc9272d5 100644 --- a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts +++ b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts @@ -39,6 +39,10 @@ import { PageInfo } from '@dspace/core/shared/page-info.model'; import { Registration } from '@dspace/core/shared/registration.model'; import { hasValue } from '@dspace/shared/utils/empty.util'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { DynamicCheckboxModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicFormLayout } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; import { TranslateModule, TranslateService, @@ -72,10 +76,6 @@ import { import { GroupRegistryService } from '../../group-registry/group-registry.service'; import { EpeopleRegistryService } from '../epeople-registry.service'; import { ValidateEmailNotTaken } from './validators/email-taken.validator'; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicCheckboxModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicFormLayout } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; @Component({ selector: 'ds-eperson-form', diff --git a/src/app/access-control/group-registry/group-form/group-form.component.ts b/src/app/access-control/group-registry/group-form/group-form.component.ts index 1a6a6b17494..f66c84cd25f 100644 --- a/src/app/access-control/group-registry/group-form/group-form.component.ts +++ b/src/app/access-control/group-registry/group-form/group-form.component.ts @@ -43,6 +43,10 @@ import { isNotEmpty, } from '@dspace/shared/utils/empty.util'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicTextAreaModel } from '@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model'; +import { DynamicFormLayout } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; import { TranslateModule, TranslateService, @@ -77,10 +81,6 @@ import { GroupRegistryService } from '../group-registry.service'; import { MembersListComponent } from './members-list/members-list.component'; import { SubgroupsListComponent } from './subgroup-list/subgroups-list.component'; import { ValidateGroupExists } from './validators/group-exists.validator'; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicFormLayout } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicTextAreaModel } from "@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model"; @Component({ selector: 'ds-group-form', diff --git a/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.spec.ts b/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.spec.ts index 71ebc7fa409..5e99f6b869e 100644 --- a/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.spec.ts +++ b/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.spec.ts @@ -16,14 +16,13 @@ import { BitstreamFormatSupportLevel } from '@dspace/core/shared/bitstream-forma import { RouterStub } from '@dspace/core/testing/router.stub'; import { isEmpty } from '@dspace/shared/utils/empty.util'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; - +import { DynamicCheckboxModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model'; +import { DynamicFormArrayModel } from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; import { TranslateModule } from '@ngx-translate/core'; import { FormComponent } from '../../../../shared/form/form.component'; import { FormatFormComponent } from './format-form.component'; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicCheckboxModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; -import { DynamicFormArrayModel } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; describe('FormatFormComponent', () => { let comp: FormatFormComponent; diff --git a/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.ts b/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.ts index c31f3fff50f..0f0d5e8d4f8 100644 --- a/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.ts +++ b/src/app/admin/admin-registries/bitstream-formats/format-form/format-form.component.ts @@ -13,17 +13,17 @@ import { hasValue, isEmpty, } from '@dspace/shared/utils/empty.util'; +import { DynamicCheckboxModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormArrayModel } from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { DynamicSelectModel } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; +import { DynamicTextAreaModel } from '@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model'; import { environment } from '../../../../../environments/environment'; import { FormComponent } from '../../../../shared/form/form.component'; import { getBitstreamFormatsModuleRoute } from '../../admin-registries-routing-paths'; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicTextAreaModel } from "@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model"; -import { DynamicSelectModel } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicFormArrayModel } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; -import { DynamicCheckboxModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; /** * The component responsible for rendering the form to create/edit a bitstream format diff --git a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts index bedde7d567d..9525175a0b1 100644 --- a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts +++ b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts @@ -8,6 +8,10 @@ import { } from '@angular/core'; import { UntypedFormGroup } from '@angular/forms'; import { MetadataSchema } from '@dspace/core/metadata/metadata-schema.model'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormGroupModel } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicFormLayout } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; import { TranslateModule, TranslateService, @@ -25,10 +29,6 @@ import { import { FormBuilderService } from '../../../../shared/form/builder/form-builder.service'; import { FormComponent } from '../../../../shared/form/form.component'; import { RegistryService } from '../../registry/registry.service'; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicFormLayout } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; @Component({ selector: 'ds-metadata-schema-form', diff --git a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts index 21bb6470c92..65dd37d6335 100644 --- a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts +++ b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts @@ -10,6 +10,11 @@ import { import { UntypedFormGroup } from '@angular/forms'; import { MetadataField } from '@dspace/core/metadata/metadata-field.model'; import { MetadataSchema } from '@dspace/core/metadata/metadata-schema.model'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormGroupModel } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicTextAreaModel } from '@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model'; +import { DynamicFormLayout } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; import { TranslateModule, TranslateService, @@ -20,11 +25,6 @@ import { take } from 'rxjs/operators'; import { FormBuilderService } from '../../../../shared/form/builder/form-builder.service'; import { FormComponent } from '../../../../shared/form/form.component'; import { RegistryService } from '../../registry/registry.service'; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicTextAreaModel } from "@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicFormLayout } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; @Component({ selector: 'ds-metadata-field-form', diff --git a/src/app/app.config.ts b/src/app/app.config.ts index bcc241cbd87..65da60e8f0f 100644 --- a/src/app/app.config.ts +++ b/src/app/app.config.ts @@ -31,6 +31,7 @@ import { } from '@dspace/core/provide-core'; import { XsrfInterceptor } from '@dspace/core/xsrf/xsrf.interceptor'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { DYNAMIC_MATCHER_PROVIDERS } from '@ng-dynamic-forms/core/service/dynamic-form-relation-matchers'; import { EffectsModule } from '@ngrx/effects'; import { RouterStateSerializer, @@ -73,7 +74,6 @@ import { WORKFLOW_TASK_OPTION_DECORATOR_MAP, } from './shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-decorator'; import { STARTS_WITH_DECORATOR_MAP } from './shared/starts-with/starts-with-decorator'; -import { DYNAMIC_MATCHER_PROVIDERS } from "@ng-dynamic-forms/core/service/dynamic-form-relation-matchers"; export function getConfig() { return environment; diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts index 6aee36d50f7..e497f7f2ef8 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts @@ -37,7 +37,8 @@ import { createSuccessfulRemoteDataObject$, } from '@dspace/core/utilities/remote-data.utils'; import { hasValue } from '@dspace/shared/utils/empty.util'; - +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; import { TranslateModule } from '@ngx-translate/core'; import { of } from 'rxjs'; @@ -45,8 +46,6 @@ import { getEntityEditRoute } from '../../item-page/item-page-routing-paths'; import { FileSizePipe } from '../../shared/utils/file-size-pipe'; import { VarDirective } from '../../shared/utils/var.directive'; import { EditBitstreamPageComponent } from './edit-bitstream-page.component'; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; const infoNotification: INotification = new Notification('id', NotificationType.Info, 'info'); const warningNotification: INotification = new Notification('id', NotificationType.Warning, 'warning'); diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts index dcdae0ff84d..6d05b39d83a 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -38,6 +38,11 @@ import { isEmpty, isNotEmpty, } from '@dspace/shared/utils/empty.util'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormGroupModel } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; +import { DynamicFormLayout } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; import { TranslateModule, TranslateService, @@ -69,11 +74,6 @@ import { ThemedLoadingComponent } from '../../shared/loading/themed-loading.comp import { FileSizePipe } from '../../shared/utils/file-size-pipe'; import { VarDirective } from '../../shared/utils/var.directive'; import { ThemedThumbnailComponent } from '../../thumbnail/themed-thumbnail.component'; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; -import { DynamicFormLayout } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; @Component({ selector: 'ds-base-edit-bitstream-page', diff --git a/src/app/collection-page/collection-form/collection-form.component.ts b/src/app/collection-page/collection-form/collection-form.component.ts index 1c2ab75a85f..f3b045291cc 100644 --- a/src/app/collection-page/collection-form/collection-form.component.ts +++ b/src/app/collection-page/collection-form/collection-form.component.ts @@ -24,7 +24,10 @@ import { isNotNull, } from '@dspace/shared/utils/empty.util'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormOptionConfig } from '@ng-dynamic-forms/core/model/dynamic-option-control.model'; +import { DynamicSelectModel } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; import { TranslateModule, TranslateService, @@ -40,10 +43,6 @@ import { collectionFormEntityTypeSelectionConfig, collectionFormModels, } from './collection-form.models'; -import { DynamicSelectModel } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; -import { DynamicFormOptionConfig } from "@ng-dynamic-forms/core/model/dynamic-option-control.model"; /** * Form used for creating and editing collections diff --git a/src/app/collection-page/collection-form/collection-form.models.ts b/src/app/collection-page/collection-form/collection-form.models.ts index 9a7ad048875..2e8c4c95f40 100644 --- a/src/app/collection-page/collection-form/collection-form.models.ts +++ b/src/app/collection-page/collection-form/collection-form.models.ts @@ -1,8 +1,9 @@ -import { DynamicSelectModelConfig } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicSelectModelConfig } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; +import { DynamicTextAreaModel } from '@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model'; + import { environment } from '../../../environments/environment'; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicTextAreaModel } from "@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model"; export const collectionFormEntityTypeSelectionConfig: DynamicSelectModelConfig = { id: 'entityType', diff --git a/src/app/collection-page/collection-item-mapper/collection-item-mapper.component.spec.ts b/src/app/collection-page/collection-item-mapper/collection-item-mapper.component.spec.ts index 659b6162d68..ade5cb0fffd 100644 --- a/src/app/collection-page/collection-item-mapper/collection-item-mapper.component.spec.ts +++ b/src/app/collection-page/collection-item-mapper/collection-item-mapper.component.spec.ts @@ -40,7 +40,13 @@ import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$, } from '@dspace/core/utilities/remote-data.utils'; -import { NgbModule, NgbNav, NgbNavContent, NgbNavItem, NgbNavLink, NgbNavOutlet } from '@ng-bootstrap/ng-bootstrap'; +import { + NgbNav, + NgbNavContent, + NgbNavItem, + NgbNavLink, + NgbNavOutlet, +} from '@ng-bootstrap/ng-bootstrap'; import { TranslateModule, TranslateService, @@ -200,7 +206,7 @@ describe('CollectionItemMapperComponent', () => { EnumKeysPipe, VarDirective, ErrorComponent, - LoadingComponent + LoadingComponent, ], providers: [ { provide: ActivatedRoute, useValue: activatedRouteStub }, diff --git a/src/app/collection-page/collection-item-mapper/collection-item-mapper.component.ts b/src/app/collection-page/collection-item-mapper/collection-item-mapper.component.ts index 4edef5037ae..4ed8143b0c0 100644 --- a/src/app/collection-page/collection-item-mapper/collection-item-mapper.component.ts +++ b/src/app/collection-page/collection-item-mapper/collection-item-mapper.component.ts @@ -34,7 +34,13 @@ import { } from '@dspace/core/shared/operators'; import { PaginatedSearchOptions } from '@dspace/core/shared/search/models/paginated-search-options.model'; import { isNotEmpty } from '@dspace/shared/utils/empty.util'; -import { NgbNav, NgbNavContent, NgbNavItem, NgbNavLink, NgbNavModule, NgbNavOutlet } from '@ng-bootstrap/ng-bootstrap'; +import { + NgbNav, + NgbNavContent, + NgbNavItem, + NgbNavLink, + NgbNavOutlet, +} from '@ng-bootstrap/ng-bootstrap'; import { TranslateModule, TranslateService, @@ -81,11 +87,11 @@ import { BrowserOnlyPipe } from '../../shared/utils/browser-only.pipe'; AsyncPipe, BrowserOnlyPipe, ItemSelectComponent, - NgbNavLink, - NgbNavItem, + NgbNav, NgbNavContent, + NgbNavItem, + NgbNavLink, NgbNavOutlet, - NgbNav, ThemedSearchFormComponent, TranslateModule, ], diff --git a/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.spec.ts b/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.spec.ts index 2d35ba32baf..7eadf1e095a 100644 --- a/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.spec.ts +++ b/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.spec.ts @@ -35,7 +35,8 @@ import { createSuccessfulRemoteDataObject$, } from '@dspace/core/utilities/remote-data.utils'; import { hasValue } from '@dspace/shared/utils/empty.util'; - +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; import { TranslateModule } from '@ngx-translate/core'; import { of } from 'rxjs'; @@ -43,8 +44,6 @@ import { FormComponent } from '../../../shared/form/form.component'; import { ThemedLoadingComponent } from '../../../shared/loading/themed-loading.component'; import { CollectionSourceComponent } from './collection-source.component'; import { CollectionSourceControlsComponent } from './collection-source-controls/collection-source-controls.component'; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; const infoNotification: INotification = new Notification('id', NotificationType.Info, 'info'); const warningNotification: INotification = new Notification('id', NotificationType.Warning, 'warning'); diff --git a/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.ts b/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.ts index dbf96fd7617..539f7229a34 100644 --- a/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.ts +++ b/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.ts @@ -35,7 +35,14 @@ import { hasValue, isNotEmpty, } from '@dspace/shared/utils/empty.util'; - +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicOptionControlModel } from '@ng-dynamic-forms/core/model/dynamic-option-control.model'; +import { DynamicFormGroupModel } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicRadioGroupModel } from '@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model'; +import { DynamicSelectModel } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; +import { DynamicFormLayout } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; import { TranslateModule, TranslateService, @@ -58,14 +65,6 @@ import { FormComponent } from '../../../shared/form/form.component'; import { ThemedLoadingComponent } from '../../../shared/loading/themed-loading.component'; import { AbstractTrackableComponent } from '../../../shared/trackable/abstract-trackable.component'; import { CollectionSourceControlsComponent } from './collection-source-controls/collection-source-controls.component'; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicSelectModel } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; -import { DynamicRadioGroupModel } from "@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DynamicFormLayout } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; -import { DynamicOptionControlModel } from "@ng-dynamic-forms/core/model/dynamic-option-control.model"; /** * Component for managing the content source of the collection diff --git a/src/app/community-page/community-form/community-form.component.ts b/src/app/community-page/community-form/community-form.component.ts index 3428d1a4dfa..098a9ac090c 100644 --- a/src/app/community-page/community-form/community-form.component.ts +++ b/src/app/community-page/community-form/community-form.component.ts @@ -13,7 +13,10 @@ import { RequestService } from '@dspace/core/data/request.service'; import { NotificationsService } from '@dspace/core/notification-system/notifications.service'; import { Community } from '@dspace/core/shared/community.model'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicTextAreaModel } from '@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; import { TranslateModule, TranslateService, @@ -25,10 +28,6 @@ import { ComcolPageLogoComponent } from '../../shared/comcol/comcol-page-logo/co import { FormComponent } from '../../shared/form/form.component'; import { UploaderComponent } from '../../shared/upload/uploader/uploader.component'; import { VarDirective } from '../../shared/utils/var.directive'; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicTextAreaModel } from "@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model"; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; /** * Form used for creating and editing communities diff --git a/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.spec.ts b/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.spec.ts index c38d3c46fbf..f8179bf96d5 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.spec.ts @@ -12,7 +12,10 @@ import { RouterLink } from '@angular/router'; import { Item } from '@dspace/core/shared/item.model'; import { MetadataValue } from '@dspace/core/shared/metadata.models'; import { ItemMetadataRepresentation } from '@dspace/core/shared/metadata-representation/item/item-metadata-representation.model'; -import { NgbTooltip, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'; +import { + NgbTooltip, + NgbTooltipModule, +} from '@ng-bootstrap/ng-bootstrap'; import { TruncatableComponent } from '../../../../shared/truncatable/truncatable.component'; import { OrgUnitItemMetadataListElementComponent } from './org-unit-item-metadata-list-element.component'; diff --git a/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.ts b/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.ts index aeed128b621..88a65fb6f50 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.ts @@ -1,9 +1,13 @@ -import { Component, TemplateRef, ViewChild } from '@angular/core'; +import { + Component, + TemplateRef, + ViewChild, +} from '@angular/core'; import { RouterLink } from '@angular/router'; +import { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'; import { ItemMetadataRepresentationListElementComponent } from '../../../../shared/object-list/metadata-representation-list-element/item/item-metadata-representation-list-element.component'; import { TruncatableComponent } from '../../../../shared/truncatable/truncatable.component'; -import { NgbTooltipModule } from "@ng-bootstrap/ng-bootstrap"; @Component({ selector: 'ds-org-unit-item-metadata-list-element', diff --git a/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.spec.ts b/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.spec.ts index 32387b5cc90..8afc3973716 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.spec.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, - NO_ERRORS_SCHEMA, TemplateRef, + NO_ERRORS_SCHEMA, } from '@angular/core'; import { ComponentFixture, @@ -12,7 +12,10 @@ import { RouterLink } from '@angular/router'; import { Item } from '@dspace/core/shared/item.model'; import { MetadataValue } from '@dspace/core/shared/metadata.models'; import { ItemMetadataRepresentation } from '@dspace/core/shared/metadata-representation/item/item-metadata-representation.model'; -import { NgbModule, NgbTooltip, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'; +import { + NgbModule, + NgbTooltip, +} from '@ng-bootstrap/ng-bootstrap'; import { TruncatableComponent } from '../../../../shared/truncatable/truncatable.component'; import { PersonItemMetadataListElementComponent } from './person-item-metadata-list-element.component'; diff --git a/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.ts b/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.ts index 8bb12937a95..0499490e5b7 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.ts @@ -1,5 +1,9 @@ -import { Component, TemplateRef, ViewChild } from '@angular/core'; +import { + Component, + TemplateRef, + ViewChild, +} from '@angular/core'; import { RouterLink } from '@angular/router'; import { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'; diff --git a/src/app/health-page/health-page.component.spec.ts b/src/app/health-page/health-page.component.spec.ts index 7280310d70e..f2dd0b9393b 100644 --- a/src/app/health-page/health-page.component.spec.ts +++ b/src/app/health-page/health-page.component.spec.ts @@ -10,7 +10,13 @@ import { HealthResponseObj, } from '@dspace/core/testing/health-endpoint.mocks'; import { TranslateLoaderMock } from '@dspace/core/testing/translate-loader.mock'; -import { NgbNav, NgbNavContent, NgbNavItem, NgbNavLink, NgbNavModule, NgbNavOutlet } from '@ng-bootstrap/ng-bootstrap'; +import { + NgbNav, + NgbNavContent, + NgbNavItem, + NgbNavLink, + NgbNavOutlet, +} from '@ng-bootstrap/ng-bootstrap'; import { TranslateLoader, TranslateModule, diff --git a/src/app/health-page/health-page.component.ts b/src/app/health-page/health-page.component.ts index e634fa7888a..be5229b09f7 100644 --- a/src/app/health-page/health-page.component.ts +++ b/src/app/health-page/health-page.component.ts @@ -7,7 +7,13 @@ import { HealthInfoResponse, HealthResponse, } from '@dspace/core/shared/health-component.model'; -import { NgbNav, NgbNavContent, NgbNavItem, NgbNavLink, NgbNavModule, NgbNavOutlet } from '@ng-bootstrap/ng-bootstrap'; +import { + NgbNav, + NgbNavContent, + NgbNavItem, + NgbNavLink, + NgbNavOutlet, +} from '@ng-bootstrap/ng-bootstrap'; import { TranslateModule } from '@ngx-translate/core'; import { BehaviorSubject } from 'rxjs'; import { take } from 'rxjs/operators'; @@ -27,11 +33,11 @@ import { HealthPanelComponent } from './health-panel/health-panel.component'; AsyncPipe, HealthInfoComponent, HealthPanelComponent, - NgbNavLink, - NgbNavItem, + NgbNav, NgbNavContent, + NgbNavItem, + NgbNavLink, NgbNavOutlet, - NgbNav, TranslateModule, ], }) diff --git a/src/app/init.service.ts b/src/app/init.service.ts index a97689f20b2..3690f331160 100644 --- a/src/app/init.service.ts +++ b/src/app/init.service.ts @@ -26,6 +26,7 @@ import { LAZY_DATA_SERVICES } from '@dspace/core/data-services-map'; import { APP_DATA_SERVICES_MAP } from '@dspace/core/data-services-map-type'; import { LocaleService } from '@dspace/core/locale/locale.service'; import { HeadTagService } from '@dspace/core/metadata/head-tag.service'; +import { DYNAMIC_FORM_CONTROL_MAP_FN } from '@ng-dynamic-forms/core/service/dynamic-form-component.service'; import { select, Store, @@ -46,7 +47,6 @@ import { MenuService } from './shared/menu/menu.service'; import { MenuProviderService } from './shared/menu/menu-provider.service'; import { ThemeService } from './shared/theme-support/theme.service'; import { Angulartics2DSpace } from './statistics/angulartics/dspace-provider'; -import { DYNAMIC_FORM_CONTROL_MAP_FN } from "@ng-dynamic-forms/core/service/dynamic-form-component.service"; /** * Performs the initialization of the app. diff --git a/src/app/item-page/edit-item-page/item-collection-mapper/item-collection-mapper.component.spec.ts b/src/app/item-page/edit-item-page/item-collection-mapper/item-collection-mapper.component.spec.ts index 1d8a89f5df6..b6358841036 100644 --- a/src/app/item-page/edit-item-page/item-collection-mapper/item-collection-mapper.component.spec.ts +++ b/src/app/item-page/edit-item-page/item-collection-mapper/item-collection-mapper.component.spec.ts @@ -36,6 +36,12 @@ import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$, } from '@dspace/core/utilities/remote-data.utils'; +import { + NgbNavContent, + NgbNavItem, + NgbNavLink, + NgbNavOutlet, +} from '@ng-bootstrap/ng-bootstrap'; import { TranslateModule, TranslateService, @@ -54,7 +60,6 @@ import { SearchFormComponent } from '../../../shared/search-form/search-form.com import { EnumKeysPipe } from '../../../shared/utils/enum-keys-pipe'; import { VarDirective } from '../../../shared/utils/var.directive'; import { ItemCollectionMapperComponent } from './item-collection-mapper.component'; -import { NgbNavContent, NgbNavItem, NgbNavLink, NgbNavOutlet } from "@ng-bootstrap/ng-bootstrap"; describe('ItemCollectionMapperComponent', () => { let comp: ItemCollectionMapperComponent; @@ -147,7 +152,7 @@ describe('ItemCollectionMapperComponent', () => { EnumKeysPipe, VarDirective, ErrorComponent, - LoadingComponent + LoadingComponent, ], providers: [ { provide: ActivatedRoute, useValue: activatedRouteStub }, diff --git a/src/app/item-page/edit-item-page/item-collection-mapper/item-collection-mapper.component.ts b/src/app/item-page/edit-item-page/item-collection-mapper/item-collection-mapper.component.ts index d9531368f70..b740b5df6b0 100644 --- a/src/app/item-page/edit-item-page/item-collection-mapper/item-collection-mapper.component.ts +++ b/src/app/item-page/edit-item-page/item-collection-mapper/item-collection-mapper.component.ts @@ -33,7 +33,13 @@ import { hasValue, isNotEmpty, } from '@dspace/shared/utils/empty.util'; -import { NgbNav, NgbNavContent, NgbNavItem, NgbNavLink, NgbNavOutlet } from '@ng-bootstrap/ng-bootstrap'; +import { + NgbNav, + NgbNavContent, + NgbNavItem, + NgbNavLink, + NgbNavOutlet, +} from '@ng-bootstrap/ng-bootstrap'; import { TranslateModule, TranslateService, @@ -74,11 +80,11 @@ import { BrowserOnlyPipe } from '../../../shared/utils/browser-only.pipe'; AsyncPipe, BrowserOnlyPipe, CollectionSelectComponent, - NgbNavLink, - NgbNavItem, + NgbNav, NgbNavContent, + NgbNavItem, + NgbNavLink, NgbNavOutlet, - NgbNav, ThemedSearchFormComponent, TranslateModule, ], diff --git a/src/app/process-page/overview/table/process-overview-table.component.ts b/src/app/process-page/overview/table/process-overview-table.component.ts index 504d7c42ce0..e96bb617526 100644 --- a/src/app/process-page/overview/table/process-overview-table.component.ts +++ b/src/app/process-page/overview/table/process-overview-table.component.ts @@ -36,7 +36,7 @@ import { hasValue, isNotEmpty, } from '@dspace/shared/utils/empty.util'; -import { NgbCollapse, NgbCollapseModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgbCollapse } from '@ng-bootstrap/ng-bootstrap'; import { TranslateModule, TranslateService, diff --git a/src/app/profile-page/profile-page-metadata-form/profile-page-metadata-form.component.ts b/src/app/profile-page/profile-page-metadata-form/profile-page-metadata-form.component.ts index b4b1b42e7e7..1332f959bc5 100644 --- a/src/app/profile-page/profile-page-metadata-form/profile-page-metadata-form.component.ts +++ b/src/app/profile-page/profile-page-metadata-form/profile-page-metadata-form.component.ts @@ -17,16 +17,16 @@ import { hasValue, isNotEmpty, } from '@dspace/shared/utils/empty.util'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormValueControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-value-control.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicSelectModel } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; import { TranslateService } from '@ngx-translate/core'; import cloneDeep from 'lodash/cloneDeep'; import { environment } from '../../../environments/environment'; import { FormBuilderService } from '../../shared/form/builder/form-builder.service'; import { FormComponent } from '../../shared/form/form.component'; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicSelectModel } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; -import { DynamicFormValueControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-value-control.model"; @Component({ selector: 'ds-base-profile-page-metadata-form', diff --git a/src/app/profile-page/profile-page-security-form/profile-page-security-form.component.ts b/src/app/profile-page/profile-page-security-form/profile-page-security-form.component.ts index 68dd68cd12e..c594fab5215 100644 --- a/src/app/profile-page/profile-page-security-form/profile-page-security-form.component.ts +++ b/src/app/profile-page/profile-page-security-form/profile-page-security-form.component.ts @@ -14,7 +14,9 @@ import { hasValue, isEmpty, } from '@dspace/shared/utils/empty.util'; - +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; import { TranslateModule, TranslateService, @@ -25,9 +27,6 @@ import { map } from 'rxjs/operators'; import { debounceTimeWorkaround as debounceTime } from '../../core/shared/operators'; import { AlertComponent } from '../../shared/alert/alert.component'; import { FormComponent } from '../../shared/form/form.component'; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; @Component({ selector: 'ds-profile-page-security-form', diff --git a/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.spec.ts b/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.spec.ts index bfe468ff170..fa8b41fa0ab 100644 --- a/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.spec.ts +++ b/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.spec.ts @@ -21,7 +21,9 @@ import { AuthServiceMock } from '@dspace/core/testing/auth.service.mock'; import { NotificationsServiceStub } from '@dspace/core/testing/notifications-service.stub'; import { createSuccessfulRemoteDataObject$ } from '@dspace/core/utilities/remote-data.utils'; import { hasValue } from '@dspace/shared/utils/empty.util'; - +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; import { TranslateModule } from '@ngx-translate/core'; import { Operation } from 'fast-json-patch'; import { of } from 'rxjs'; @@ -31,9 +33,6 @@ import { UploaderComponent } from '../../../upload/uploader/uploader.component'; import { VarDirective } from '../../../utils/var.directive'; import { ComcolPageLogoComponent } from '../../comcol-page-logo/comcol-page-logo.component'; import { ComColFormComponent } from './comcol-form.component'; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; describe('ComColFormComponent', () => { let comp: ComColFormComponent; diff --git a/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts b/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts index 449284f4291..24f2d0387e6 100644 --- a/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts +++ b/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts @@ -34,7 +34,9 @@ import { NgbModal, NgbModalRef, } from '@ng-bootstrap/ng-bootstrap'; - +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; import { TranslateModule, TranslateService, @@ -59,9 +61,6 @@ import { UploaderComponent } from '../../../upload/uploader/uploader.component'; import { UploaderOptions } from '../../../upload/uploader/uploader-options.model'; import { VarDirective } from '../../../utils/var.directive'; import { ComcolPageLogoComponent } from '../../comcol-page-logo/comcol-page-logo.component'; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; /** * A form for creating and editing Communities or Collections diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts index ec08a234df2..701f6feb980 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts @@ -24,8 +24,36 @@ import { Item } from '@dspace/core/shared/item.model'; import { WorkspaceItem } from '@dspace/core/submission/models/workspaceitem.model'; import { VocabularyOptions } from '@dspace/core/submission/vocabularies/models/vocabulary-options.model'; import { createSuccessfulRemoteDataObject } from '@dspace/core/utilities/remote-data.utils'; -import { NgbModule, NgbTooltip } from '@ng-bootstrap/ng-bootstrap'; - +import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap'; +import { DynamicListDirective } from '@ng-dynamic-forms/core/directive/dynamic-list.directive'; +import { DynamicTemplateDirective } from '@ng-dynamic-forms/core/directive/dynamic-template.directive'; +import { DynamicCheckboxModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model'; +import { DynamicCheckboxGroupModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model'; +import { DynamicDatePickerModel } from '@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFileUploadModel } from '@ng-dynamic-forms/core/model/file-upload/dynamic-file-upload.model'; +import { DynamicFormArrayModel } from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; +import { DynamicFormGroupModel } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicRadioGroupModel } from '@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model'; +import { DynamicSelectModel } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; +import { DynamicSwitchModel } from '@ng-dynamic-forms/core/model/switch/dynamic-switch.model'; +import { DynamicTextAreaModel } from '@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model'; +import { DynamicTimePickerModel } from '@ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; +import { DYNAMIC_FORM_CONTROL_MAP_FN } from '@ng-dynamic-forms/core/service/dynamic-form-component.service'; +import { + MATCH_VISIBLE, + OR_OPERATOR, +} from '@ng-dynamic-forms/core/service/dynamic-form-relation-matchers'; +import { DynamicNGBootstrapCalendarComponent } from '@ng-dynamic-forms/ui-ng-bootstrap/calendar/dynamic-ng-bootstrap-calendar.component'; +import { DynamicNGBootstrapCheckboxComponent } from '@ng-dynamic-forms/ui-ng-bootstrap/checkbox/dynamic-ng-bootstrap-checkbox.component'; +import { DynamicNGBootstrapCheckboxGroupComponent } from '@ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component'; +import { DynamicNGBootstrapInputComponent } from '@ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component'; +import { DynamicNGBootstrapRadioGroupComponent } from '@ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component'; +import { DynamicNGBootstrapSelectComponent } from '@ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component'; +import { DynamicNGBootstrapTextAreaComponent } from '@ng-dynamic-forms/ui-ng-bootstrap/textarea/dynamic-ng-bootstrap-textarea.component'; +import { DynamicNGBootstrapTimePickerComponent } from '@ng-dynamic-forms/ui-ng-bootstrap/timepicker/dynamic-ng-bootstrap-timepicker.component'; import { Store } from '@ngrx/store'; import { TranslateModule } from '@ngx-translate/core'; import { NgxMaskModule } from 'ngx-mask'; @@ -59,32 +87,6 @@ import { DsDynamicScrollableDropdownComponent } from './models/scrollable-dropdo import { DynamicScrollableDropdownModel } from './models/scrollable-dropdown/dynamic-scrollable-dropdown.model'; import { DsDynamicTagComponent } from './models/tag/dynamic-tag.component'; import { DynamicTagModel } from './models/tag/dynamic-tag.model'; -import { DynamicCheckboxModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; -import { DynamicCheckboxGroupModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model"; -import { DynamicDatePickerModel } from "@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model"; -import { DynamicFormArrayModel } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; -import { DynamicFileUploadModel } from "@ng-dynamic-forms/core/model/file-upload/dynamic-file-upload.model"; -import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicRadioGroupModel } from "@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model"; -import { DynamicSelectModel } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; -import { DynamicTextAreaModel } from "@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model"; -import { DynamicSwitchModel } from "@ng-dynamic-forms/core/model/switch/dynamic-switch.model"; -import { DynamicTimePickerModel } from "@ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model"; -import { MATCH_VISIBLE, OR_OPERATOR } from "@ng-dynamic-forms/core/service/dynamic-form-relation-matchers"; -import { DynamicListDirective } from "@ng-dynamic-forms/core/directive/dynamic-list.directive"; -import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; -import { DYNAMIC_FORM_CONTROL_MAP_FN } from "@ng-dynamic-forms/core/service/dynamic-form-component.service"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicNGBootstrapInputComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component"; -import { DynamicNGBootstrapCheckboxComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/checkbox/dynamic-ng-bootstrap-checkbox.component"; -import { DynamicNGBootstrapCheckboxGroupComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component"; -import { DynamicNGBootstrapCalendarComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/calendar/dynamic-ng-bootstrap-calendar.component"; -import { DynamicNGBootstrapRadioGroupComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component"; -import { DynamicNGBootstrapSelectComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component"; -import { DynamicNGBootstrapTextAreaComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/textarea/dynamic-ng-bootstrap-textarea.component"; -import { DynamicNGBootstrapTimePickerComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/timepicker/dynamic-ng-bootstrap-timepicker.component"; function getMockDsDynamicTypeBindRelationService(): DsDynamicTypeBindRelationService { return jasmine.createSpyObj('DsDynamicTypeBindRelationService', { diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts index 2c924154a73..2a48003e7fd 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts @@ -71,9 +71,33 @@ import { } from '@dspace/shared/utils/empty.util'; import { NgbModal, - NgbModalRef, NgbTooltip, + NgbModalRef, + NgbTooltip, } from '@ng-bootstrap/ng-bootstrap'; - +import { DynamicFormControlContainerComponent } from '@ng-dynamic-forms/core/component/dynamic-form-control-container.component'; +import { + DynamicFormControlEvent, + DynamicFormControlEventType, +} from '@ng-dynamic-forms/core/component/dynamic-form-control-event'; +import { DynamicFormControl } from '@ng-dynamic-forms/core/component/dynamic-form-control-interface'; +import { DynamicTemplateDirective } from '@ng-dynamic-forms/core/directive/dynamic-template.directive'; +import { DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { + DynamicFormArrayGroupModel, + DynamicFormArrayModel, +} from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; +import { + DYNAMIC_FORM_CONTROL_MAP_FN, + DynamicFormComponentService, + DynamicFormControlMapFn, +} from '@ng-dynamic-forms/core/service/dynamic-form-component.service'; +import { + DynamicFormLayout, + DynamicFormLayoutService, +} from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormRelationService } from '@ng-dynamic-forms/core/service/dynamic-form-relation.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { Store } from '@ngrx/store'; import { TranslateModule, @@ -104,31 +128,6 @@ import { ExistingRelationListElementComponent } from './existing-relation-list-e import { DYNAMIC_FORM_CONTROL_TYPE_CUSTOM_SWITCH } from './models/custom-switch/custom-switch.model'; import { DsDynamicLookupRelationModalComponent } from './relation-lookup-modal/dynamic-lookup-relation-modal.component'; import { NameVariantService } from './relation-lookup-modal/name-variant.service'; -import { - DynamicFormControlContainerComponent -} from "@ng-dynamic-forms/core/component/dynamic-form-control-container.component"; -import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { - DynamicFormLayout, - DynamicFormLayoutService, -} from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { - DynamicFormControlEvent, - DynamicFormControlEventType, -} from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; -import { DynamicFormControl } from "@ng-dynamic-forms/core/component/dynamic-form-control-interface"; -import { - DYNAMIC_FORM_CONTROL_MAP_FN, - DynamicFormComponentService, DynamicFormControlMapFn, -} from "@ng-dynamic-forms/core/service/dynamic-form-component.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; -import { DynamicFormRelationService } from "@ng-dynamic-forms/core/service/dynamic-form-relation.service"; -import { DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; -import { - DynamicFormArrayGroupModel, - DynamicFormArrayModel, -} from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; @Component({ selector: 'ds-dynamic-form-control-container', diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-map-fn.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-map-fn.ts index 55e9757a024..63f49e33cb6 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-map-fn.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-map-fn.ts @@ -1,5 +1,29 @@ import { Type } from '@angular/core'; import { DYNAMIC_FORM_CONTROL_TYPE_RELATION_GROUP } from '@dspace/core/shared/form/ds-dynamic-form-constants'; +import { DynamicFormControl } from '@ng-dynamic-forms/core/component/dynamic-form-control-interface'; +import { DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model'; +import { DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model'; +import { + DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER, + DynamicDatePickerModel, +} from '@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DYNAMIC_FORM_CONTROL_TYPE_ARRAY } from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; +import { DYNAMIC_FORM_CONTROL_TYPE_GROUP } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DYNAMIC_FORM_CONTROL_TYPE_INPUT } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP } from '@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model'; +import { DYNAMIC_FORM_CONTROL_TYPE_SELECT } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; +import { DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA } from '@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model'; +import { DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER } from '@ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model'; +import { DynamicNGBootstrapCalendarComponent } from '@ng-dynamic-forms/ui-ng-bootstrap/calendar/dynamic-ng-bootstrap-calendar.component'; +import { DynamicNGBootstrapCheckboxComponent } from '@ng-dynamic-forms/ui-ng-bootstrap/checkbox/dynamic-ng-bootstrap-checkbox.component'; +import { DynamicNGBootstrapCheckboxGroupComponent } from '@ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component'; +import { DynamicNGBootstrapInputComponent } from '@ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component'; +import { DynamicNGBootstrapRadioGroupComponent } from '@ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component'; +import { DynamicNGBootstrapSelectComponent } from '@ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component'; +import { DynamicNGBootstrapTextAreaComponent } from '@ng-dynamic-forms/ui-ng-bootstrap/textarea/dynamic-ng-bootstrap-textarea.component'; +import { DynamicNGBootstrapTimePickerComponent } from '@ng-dynamic-forms/ui-ng-bootstrap/timepicker/dynamic-ng-bootstrap-timepicker.component'; + import { DsDynamicFormArrayComponent } from './models/array-group/dynamic-form-array.component'; import { CustomSwitchComponent } from './models/custom-switch/custom-switch.component'; import { DYNAMIC_FORM_CONTROL_TYPE_CUSTOM_SWITCH } from './models/custom-switch/custom-switch.model'; @@ -22,26 +46,6 @@ import { DsDynamicScrollableDropdownComponent } from './models/scrollable-dropdo import { DYNAMIC_FORM_CONTROL_TYPE_SCROLLABLE_DROPDOWN } from './models/scrollable-dropdown/dynamic-scrollable-dropdown.model'; import { DsDynamicTagComponent } from './models/tag/dynamic-tag.component'; import { DYNAMIC_FORM_CONTROL_TYPE_TAG } from './models/tag/dynamic-tag.model'; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicFormControl } from "@ng-dynamic-forms/core/component/dynamic-form-control-interface"; -import { DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER, DynamicDatePickerModel } from "@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_ARRAY } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_GROUP } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_INPUT } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP } from "@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_SELECT } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA } from "@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER } from "@ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model"; -import { DynamicNGBootstrapCheckboxComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/checkbox/dynamic-ng-bootstrap-checkbox.component"; -import { DynamicNGBootstrapCheckboxGroupComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component"; -import { DynamicNGBootstrapCalendarComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/calendar/dynamic-ng-bootstrap-calendar.component"; -import { DynamicNGBootstrapInputComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component"; -import { DynamicNGBootstrapRadioGroupComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component"; -import { DynamicNGBootstrapSelectComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component"; -import { DynamicNGBootstrapTextAreaComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/textarea/dynamic-ng-bootstrap-textarea.component"; -import { DynamicNGBootstrapTimePickerComponent } from "@ng-dynamic-forms/ui-ng-bootstrap/timepicker/dynamic-ng-bootstrap-timepicker.component"; export function dsDynamicFormControlMapFn(model: DynamicFormControlModel): Type | null { const datepickerModel = model as DynamicDatePickerModel; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form.component.ts index c5d8d1bd0e8..09932f58485 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form.component.ts @@ -11,18 +11,15 @@ import { ViewChildren, } from '@angular/core'; import { UntypedFormGroup } from '@angular/forms'; - +import { DynamicFormComponent } from '@ng-dynamic-forms/core/component/dynamic-form.component'; +import { DynamicFormControlContainerComponent } from '@ng-dynamic-forms/core/component/dynamic-form-control-container.component'; +import { DynamicFormControlEvent } from '@ng-dynamic-forms/core/component/dynamic-form-control-event'; +import { DynamicTemplateDirective } from '@ng-dynamic-forms/core/directive/dynamic-template.directive'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormComponentService } from '@ng-dynamic-forms/core/service/dynamic-form-component.service'; +import { DynamicFormLayout } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; import { DsDynamicFormControlContainerComponent } from './ds-dynamic-form-control-container.component'; -import { DynamicFormComponent } from "@ng-dynamic-forms/core/component/dynamic-form.component"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicFormLayout } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormControlEvent } from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; -import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; -import { - DynamicFormControlContainerComponent -} from "@ng-dynamic-forms/core/component/dynamic-form-control-container.component"; -import { DynamicFormComponentService } from "@ng-dynamic-forms/core/service/dynamic-form-component.service"; @Component({ selector: 'ds-dynamic-form', diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.spec.ts index 972e850a907..320398bc245 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.spec.ts @@ -8,7 +8,13 @@ import { UntypedFormControl, } from '@angular/forms'; import { FormFieldMetadataValueObject } from '@dspace/core/shared/form/models/form-field-metadata-value.model'; - +import { DynamicFormRelationService } from '@ng-dynamic-forms/core/service/dynamic-form-relation.service'; +import { + DISABLED_MATCHER_PROVIDER, + HIDDEN_MATCHER, + HIDDEN_MATCHER_PROVIDER, + REQUIRED_MATCHER_PROVIDER, +} from '@ng-dynamic-forms/core/service/dynamic-form-relation-matchers'; import { getMockFormBuilderService } from '../../testing/form-builder-service.mock'; import { @@ -18,8 +24,6 @@ import { import { FormBuilderService } from '../form-builder.service'; import { DsDynamicTypeBindRelationService } from './ds-dynamic-type-bind-relation.service'; import { getTypeBindRelations } from './type-bind.utils'; -import { DynamicFormRelationService } from "@ng-dynamic-forms/core/service/dynamic-form-relation.service"; -import { DISABLED_MATCHER_PROVIDER, HIDDEN_MATCHER, HIDDEN_MATCHER_PROVIDER, REQUIRED_MATCHER_PROVIDER } from "@ng-dynamic-forms/core/service/dynamic-form-relation-matchers"; describe('DSDynamicTypeBindRelationService test suite', () => { let service: DsDynamicTypeBindRelationService; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.ts index e7f8961d869..3b72843e557 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.ts @@ -11,15 +11,22 @@ import { hasNoValue, hasValue, } from '@dspace/shared/utils/empty.util'; - +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { + DynamicFormControlCondition, + DynamicFormControlRelation, +} from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model'; +import { DynamicFormRelationService } from '@ng-dynamic-forms/core/service/dynamic-form-relation.service'; +import { + AND_OPERATOR, + DYNAMIC_MATCHERS, + DynamicFormControlMatcher, + OR_OPERATOR, +} from '@ng-dynamic-forms/core/service/dynamic-form-relation-matchers'; import { Subscription } from 'rxjs'; import { startWith } from 'rxjs/operators'; import { FormBuilderService } from '../form-builder.service'; -import { AND_OPERATOR, DYNAMIC_MATCHERS, DynamicFormControlMatcher, OR_OPERATOR } from "@ng-dynamic-forms/core/service/dynamic-form-relation-matchers"; -import { DynamicFormRelationService } from "@ng-dynamic-forms/core/service/dynamic-form-relation.service"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicFormControlCondition, DynamicFormControlRelation } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model"; /** * Service to manage type binding for submission input fields diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.spec.ts index 3e955e0915c..ef99c72d41e 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.spec.ts @@ -9,7 +9,11 @@ import { ReactiveFormsModule } from '@angular/forms'; import { By } from '@angular/platform-browser'; import { APP_CONFIG } from '@dspace/config/app-config.interface'; import { APP_DATA_SERVICES_MAP } from '@dspace/core/data-services-map-type'; - +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; +import { DYNAMIC_FORM_CONTROL_MAP_FN } from '@ng-dynamic-forms/core/service/dynamic-form-component.service'; +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { provideMockStore } from '@ngrx/store/testing'; import { TranslateModule, @@ -26,11 +30,6 @@ import { DsDynamicFormControlContainerComponent } from '../../ds-dynamic-form-co import { dsDynamicFormControlMapFn } from '../../ds-dynamic-form-control-map-fn'; import { DynamicRowArrayModel } from '../ds-dynamic-row-array-model'; import { DsDynamicFormArrayComponent } from './dynamic-form-array.component'; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; -import { DYNAMIC_FORM_CONTROL_MAP_FN } from "@ng-dynamic-forms/core/service/dynamic-form-component.service"; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; describe('DsDynamicFormArrayComponent', () => { const translateServiceStub = { diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.ts index 1c32e47e08f..249bdd20bd8 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.ts @@ -22,6 +22,19 @@ import { } from '@angular/forms'; import { Relationship } from '@dspace/core/shared/item-relationships/relationship.model'; import { hasValue } from '@dspace/shared/utils/empty.util'; +import { DynamicFormArrayComponent } from '@ng-dynamic-forms/core/component/dynamic-form-array.component'; +import { + DynamicFormControlCustomEvent, + DynamicFormControlEvent, +} from '@ng-dynamic-forms/core/component/dynamic-form-control-event'; +import { DynamicTemplateDirective } from '@ng-dynamic-forms/core/directive/dynamic-template.directive'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { + DynamicFormLayout, + DynamicFormLayoutService, +} from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { TranslateModule, TranslateService, @@ -30,19 +43,6 @@ import { import { LiveRegionService } from '../../../../../live-region/live-region.service'; import { DsDynamicFormControlContainerComponent } from '../../ds-dynamic-form-control-container.component'; import { DynamicRowArrayModel } from '../ds-dynamic-row-array-model'; -import { DynamicFormArrayComponent } from "@ng-dynamic-forms/core/component/dynamic-form-array.component"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { - DynamicFormLayout, - DynamicFormLayoutService, -} from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; -import { - DynamicFormControlCustomEvent, - DynamicFormControlEvent, -} from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; @Component({ selector: 'ds-dynamic-form-array', diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.spec.ts index c3f5164113a..8936471d6fe 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.spec.ts @@ -11,14 +11,13 @@ import { } from '@angular/forms'; import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; - +import { DynamicListDirective } from '@ng-dynamic-forms/core/directive/dynamic-list.directive'; +import { DynamicTemplateDirective } from '@ng-dynamic-forms/core/directive/dynamic-template.directive'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; import { TranslateModule } from '@ngx-translate/core'; import { CustomSwitchComponent } from './custom-switch.component'; import { DynamicCustomSwitchModel } from './custom-switch.model'; -import { DynamicListDirective } from "@ng-dynamic-forms/core/directive/dynamic-list.directive"; -import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; describe('CustomSwitchComponent', () => { diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.ts index 1421d297412..c90c7f6aaf1 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.ts @@ -9,14 +9,12 @@ import { ReactiveFormsModule, UntypedFormGroup, } from '@angular/forms'; +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; +import { DynamicNGBootstrapCheckboxComponent } from '@ng-dynamic-forms/ui-ng-bootstrap/checkbox/dynamic-ng-bootstrap-checkbox.component'; import { TranslateModule } from '@ngx-translate/core'; import { DynamicCustomSwitchModel } from './custom-switch.model'; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; -import { - DynamicNGBootstrapCheckboxComponent -} from "@ng-dynamic-forms/ui-ng-bootstrap/checkbox/dynamic-ng-bootstrap-checkbox.component"; @Component({ selector: 'ds-custom-switch', diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.model.ts index 882d516576c..f9ca9cc15f2 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.model.ts @@ -1,6 +1,9 @@ -import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; -import { DynamicCheckboxModel, DynamicCheckboxModelConfig } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; +import { serializable } from '@ng-dynamic-forms/core/decorator/serializable.decorator'; +import { + DynamicCheckboxModel, + DynamicCheckboxModelConfig, +} from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; export const DYNAMIC_FORM_CONTROL_TYPE_CUSTOM_SWITCH = 'CUSTOM_SWITCH'; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.spec.ts index 6aca0b66c18..2bba8ee6ceb 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.spec.ts @@ -13,13 +13,12 @@ import { import { By } from '@angular/platform-browser'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; - +import { DynamicListDirective } from '@ng-dynamic-forms/core/directive/dynamic-list.directive'; +import { DynamicTemplateDirective } from '@ng-dynamic-forms/core/directive/dynamic-template.directive'; +import { DynamicDatePickerModel } from '@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; import { DsDatePickerInlineComponent } from './dynamic-date-picker-inline.component'; -import { DynamicDatePickerModel } from "@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model"; -import { DynamicListDirective } from "@ng-dynamic-forms/core/directive/dynamic-list.directive"; -import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; describe('DsDatePickerInlineComponent test suite', () => { diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.ts index 96abf244a94..dcc4f43ca09 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.ts @@ -15,13 +15,13 @@ import { NgbDatepickerConfig, NgbDatepickerModule, } from '@ng-bootstrap/ng-bootstrap'; +import { DynamicFormControlComponent } from '@ng-dynamic-forms/core/component/dynamic-form-control.component'; +import { DynamicDatePickerModel } from '@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { BtnDisabledDirective } from '../../../../../btn-disabled.directive'; -import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicDatePickerModel } from "@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model"; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; @Component({ selector: 'ds-dynamic-date-picker-inline', diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.spec.ts index b9322dfdac1..b80d53f3c00 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.spec.ts @@ -25,7 +25,8 @@ import { } from '@dspace/core/testing/dynamic-form-mock-services'; import { createTestComponent } from '@dspace/core/testing/utils.test'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; - +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { TranslateModule, TranslateService, @@ -34,8 +35,6 @@ import { of } from 'rxjs'; import { DsDatePickerComponent } from './date-picker.component'; import { DynamicDsDatePickerModel } from './date-picker.model'; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; export const DATE_TEST_GROUP = new UntypedFormGroup({ date: new UntypedFormControl(), diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.ts index fa5e0a0b3ff..e900d75e91b 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.ts @@ -15,14 +15,14 @@ import { UntypedFormGroup, } from '@angular/forms'; import { hasValue } from '@dspace/shared/utils/empty.util'; +import { DynamicFormControlComponent } from '@ng-dynamic-forms/core/component/dynamic-form-control.component'; +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { TranslateModule } from '@ngx-translate/core'; import isEqual from 'lodash/isEqual'; import { NumberPickerComponent } from '../../../../number-picker/number-picker.component'; import { DynamicDsDatePickerModel } from './date-picker.model'; -import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; export type DatePickerFieldType = '_year' | '_month' | '_day'; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.model.ts index 94a525b9a81..0c62a83e0c4 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.model.ts @@ -3,13 +3,12 @@ import { isEmpty, isNotUndefined, } from '@dspace/shared/utils/empty.util'; -import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; -import { DynamicDatePickerModelConfig } from "@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model"; -import { DynamicDateControlModel } from "@ng-dynamic-forms/core/model/dynamic-date-control.model"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicFormControlRelation } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model"; - +import { serializable } from '@ng-dynamic-forms/core/decorator/serializable.decorator'; +import { DynamicDatePickerModelConfig } from '@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model'; +import { DynamicDateControlModel } from '@ng-dynamic-forms/core/model/dynamic-date-control.model'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { DynamicFormControlRelation } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model'; import { BehaviorSubject, Subject, diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.spec.ts index ef90624b2db..a27e2abd6af 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.spec.ts @@ -17,13 +17,12 @@ import { mockDynamicFormLayoutService, mockDynamicFormValidationService, } from '@dspace/core/testing/dynamic-form-mock-services'; - +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { TranslateModule } from '@ngx-translate/core'; import { DsDynamicDisabledComponent } from './dynamic-disabled.component'; import { DynamicDisabledModel } from './dynamic-disabled.model'; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; describe('DsDynamicDisabledComponent', () => { let comp: DsDynamicDisabledComponent; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.ts index 0176034832f..392b31a82af 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.ts @@ -5,12 +5,12 @@ import { Output, } from '@angular/core'; import { UntypedFormGroup } from '@angular/forms'; +import { DynamicFormControlComponent } from '@ng-dynamic-forms/core/component/dynamic-form-control.component'; +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { TranslateModule } from '@ngx-translate/core'; import { DynamicDisabledModel } from './dynamic-disabled.model'; -import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; /** * Component representing a simple disabled input field diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.model.ts index 1643d1b6efb..36595eb9939 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.model.ts @@ -1,9 +1,10 @@ -import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; +import { serializable } from '@ng-dynamic-forms/core/decorator/serializable.decorator'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; + import { DsDynamicInputModel, DsDynamicInputModelConfig, } from '../ds-dynamic-input.model'; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; export const DYNAMIC_FORM_CONTROL_TYPE_DISABLED = 'EMPTY'; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts index b57403ad49d..35a3dbb275b 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts @@ -5,13 +5,16 @@ import { hasNoValue, isNotEmpty, } from '@dspace/shared/utils/empty.util'; +import { serializable } from '@ng-dynamic-forms/core/decorator/serializable.decorator'; +import { + DynamicFormGroupModel, + DynamicFormGroupModelConfig, +} from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { DynamicFormControlRelation } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model'; import { Subject } from 'rxjs'; import { DsDynamicInputModel } from './ds-dynamic-input.model'; -import { DynamicFormGroupModel, DynamicFormGroupModelConfig } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DynamicFormControlRelation } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model"; -import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; export const CONCAT_GROUP_SUFFIX = '_CONCAT_GROUP'; export const CONCAT_FIRST_INPUT_SUFFIX = '_CONCAT_FIRST_INPUT'; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts index 73ab5d9cf60..caf3ed47a4b 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts @@ -3,10 +3,13 @@ import { FormFieldMetadataValueObject } from '@dspace/core/shared/form/models/fo import { RelationshipOptions } from '@dspace/core/shared/relationship-options.model'; import { VocabularyOptions } from '@dspace/core/submission/vocabularies/models/vocabulary-options.model'; import { hasValue } from '@dspace/shared/utils/empty.util'; -import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; -import { DynamicInputModel, DynamicInputModelConfig } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicFormControlRelation } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model"; +import { serializable } from '@ng-dynamic-forms/core/decorator/serializable.decorator'; +import { + DynamicInputModel, + DynamicInputModelConfig, +} from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { DynamicFormControlRelation } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model'; import { Subject } from 'rxjs'; export interface DsDynamicInputModelConfig extends DynamicInputModelConfig { diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-qualdrop.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-qualdrop.model.ts index 0e0096b8d90..d5b35bde65d 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-qualdrop.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-qualdrop.model.ts @@ -1,10 +1,13 @@ import { LanguageCode } from '@dspace/core/shared/form/models/form-field-language-value.model'; +import { serializable } from '@ng-dynamic-forms/core/decorator/serializable.decorator'; +import { + DynamicFormGroupModel, + DynamicFormGroupModelConfig, +} from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; import { Subject } from 'rxjs'; import { DsDynamicInputModel } from './ds-dynamic-input.model'; -import { DynamicFormGroupModel, DynamicFormGroupModelConfig } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; export const QUALDROP_GROUP_SUFFIX = '_QUALDROP_GROUP'; export const QUALDROP_METADATA_SUFFIX = '_QUALDROP_METADATA'; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-array-model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-array-model.ts index a98437ef179..48270a4d5f3 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-array-model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-array-model.ts @@ -1,9 +1,12 @@ import { RelationshipOptions } from '@dspace/core/shared/relationship-options.model'; import { hasValue } from '@dspace/shared/utils/empty.util'; -import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; -import { DynamicFormArrayModel, DynamicFormArrayModelConfig } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicFormControlRelation } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model"; +import { serializable } from '@ng-dynamic-forms/core/decorator/serializable.decorator'; +import { + DynamicFormArrayModel, + DynamicFormArrayModelConfig, +} from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { DynamicFormControlRelation } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model'; export interface DynamicRowArrayModelConfig extends DynamicFormArrayModelConfig { notRepeatable: boolean; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-group-model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-group-model.ts index 9356813f27a..f555dea5371 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-group-model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-group-model.ts @@ -1,4 +1,4 @@ -import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; +import { DynamicFormGroupModel } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; export class DynamicRowGroupModel extends DynamicFormGroupModel { isRowGroup = true; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-textarea.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-textarea.model.ts index 78bb60b681a..a83472c2e10 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-textarea.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-textarea.model.ts @@ -1,10 +1,11 @@ -import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; +import { serializable } from '@ng-dynamic-forms/core/decorator/serializable.decorator'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA } from '@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model'; + import { DsDynamicInputModel, DsDynamicInputModelConfig, } from './ds-dynamic-input.model'; -import { DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA } from "@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; export interface DsDynamicTextAreaModelConfig extends DsDynamicInputModelConfig { cols?: number; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/dynamic-vocabulary.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/dynamic-vocabulary.component.ts index f795a9f059e..03bbb191bd7 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/dynamic-vocabulary.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/dynamic-vocabulary.component.ts @@ -10,6 +10,9 @@ import { PageInfo } from '@dspace/core/shared/page-info.model'; import { VocabularyEntry } from '@dspace/core/submission/vocabularies/models/vocabulary-entry.model'; import { VocabularyService } from '@dspace/core/submission/vocabularies/vocabulary.service'; import { isNotEmpty } from '@dspace/shared/utils/empty.util'; +import { DynamicFormControlComponent } from '@ng-dynamic-forms/core/component/dynamic-form-control.component'; +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { Observable, of, @@ -17,9 +20,6 @@ import { import { map } from 'rxjs/operators'; import { DsDynamicInputModel } from './ds-dynamic-input.model'; -import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; /** * An abstract class to be extended by form components that handle vocabulary diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/form-group/dynamic-form-group.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/form-group/dynamic-form-group.component.ts index 8b381419877..fbfad520929 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/form-group/dynamic-form-group.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/form-group/dynamic-form-group.component.ts @@ -12,23 +12,22 @@ import { ReactiveFormsModule, UntypedFormGroup, } from '@angular/forms'; - - -import { DsDynamicFormControlContainerComponent } from '../../ds-dynamic-form-control-container.component'; -import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { - DynamicFormLayout, - DynamicFormLayoutService, -} from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; +import { DynamicFormControlComponent } from '@ng-dynamic-forms/core/component/dynamic-form-control.component'; import { DynamicFormControlCustomEvent, DynamicFormControlEvent, -} from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; +} from '@ng-dynamic-forms/core/component/dynamic-form-control-event'; +import { DynamicTemplateDirective } from '@ng-dynamic-forms/core/directive/dynamic-template.directive'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormGroupModel } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { + DynamicFormLayout, + DynamicFormLayoutService, +} from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; + +import { DsDynamicFormControlContainerComponent } from '../../ds-dynamic-form-control-container.component'; @Component({ selector: 'ds-dynamic-form-group', diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list-checkbox-group.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list-checkbox-group.model.ts index 737c1d91601..2a679b0a93b 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list-checkbox-group.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list-checkbox-group.model.ts @@ -1,12 +1,11 @@ import { VocabularyEntry } from '@dspace/core/submission/vocabularies/models/vocabulary-entry.model'; import { VocabularyOptions } from '@dspace/core/submission/vocabularies/models/vocabulary-options.model'; import { hasValue } from '@dspace/shared/utils/empty.util'; -import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; -import { DynamicCheckboxGroupModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model"; -import { DynamicFormGroupModelConfig } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicFormControlRelation } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model"; - +import { serializable } from '@ng-dynamic-forms/core/decorator/serializable.decorator'; +import { DynamicCheckboxGroupModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model'; +import { DynamicFormGroupModelConfig } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { DynamicFormControlRelation } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model'; import { Subject } from 'rxjs'; export interface DynamicListCheckboxGroupModelConfig extends DynamicFormGroupModelConfig { diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list-radio-group.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list-radio-group.model.ts index e7580b0dcb4..461e694549e 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list-radio-group.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list-radio-group.model.ts @@ -1,10 +1,13 @@ import { VocabularyEntry } from '@dspace/core/submission/vocabularies/models/vocabulary-entry.model'; import { VocabularyOptions } from '@dspace/core/submission/vocabularies/models/vocabulary-options.model'; import { hasValue } from '@dspace/shared/utils/empty.util'; -import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicFormControlRelation } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model"; -import { DynamicRadioGroupModel, DynamicRadioGroupModelConfig } from "@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model"; +import { serializable } from '@ng-dynamic-forms/core/decorator/serializable.decorator'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { DynamicFormControlRelation } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model'; +import { + DynamicRadioGroupModel, + DynamicRadioGroupModelConfig, +} from '@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model'; export interface DynamicListModelConfig extends DynamicRadioGroupModelConfig { diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.spec.ts index ac33071b032..ef1f4ba9271 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.spec.ts @@ -29,17 +29,16 @@ import { createTestComponent } from '@dspace/core/testing/utils.test'; import { VocabularyServiceStub } from '@dspace/core/testing/vocabulary-service.stub'; import { createSuccessfulRemoteDataObject$ } from '@dspace/core/utilities/remote-data.utils'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; - +import { DynamicListDirective } from '@ng-dynamic-forms/core/directive/dynamic-list.directive'; +import { DynamicTemplateDirective } from '@ng-dynamic-forms/core/directive/dynamic-template.directive'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { FormBuilderService } from '../../../form-builder.service'; import { DsDynamicListComponent } from './dynamic-list.component'; import { DynamicListCheckboxGroupModel } from './dynamic-list-checkbox-group.model'; import { DynamicListRadioGroupModel } from './dynamic-list-radio-group.model'; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicListDirective } from "@ng-dynamic-forms/core/directive/dynamic-list.directive"; -import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; export const LAYOUT_TEST = { element: { diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.ts index a1cbb270cfd..a03eed80057 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.ts @@ -27,6 +27,10 @@ import { hasValue, isNotEmpty, } from '@dspace/shared/utils/empty.util'; +import { DynamicFormControlComponent } from '@ng-dynamic-forms/core/component/dynamic-form-control.component'; +import { DynamicCheckboxModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model'; +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { TranslateModule } from '@ngx-translate/core'; import findKey from 'lodash/findKey'; import { @@ -42,10 +46,6 @@ import { ThemedLoadingComponent } from '../../../../../loading/themed-loading.co import { FormBuilderService } from '../../../form-builder.service'; import { DynamicListCheckboxGroupModel } from './dynamic-list-checkbox-group.model'; import { DynamicListRadioGroupModel } from './dynamic-list-radio-group.model'; -import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; -import { DynamicCheckboxModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; export interface ListItem { id: string; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup-name.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup-name.model.ts index d0e165528df..7c1bee2399e 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup-name.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup-name.model.ts @@ -1,9 +1,10 @@ -import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; +import { serializable } from '@ng-dynamic-forms/core/decorator/serializable.decorator'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; + import { DynamicLookupModel, DynamicLookupModelConfig, } from './dynamic-lookup.model'; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; export const DYNAMIC_FORM_CONTROL_TYPE_LOOKUP_NAME = 'LOOKUP_NAME'; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.spec.ts index 773a4bb8847..8bc021e2957 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.spec.ts @@ -30,6 +30,10 @@ import { import { createTestComponent } from '@dspace/core/testing/utils.test'; import { VocabularyServiceStub } from '@dspace/core/testing/vocabulary-service.stub'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { DynamicListDirective } from '@ng-dynamic-forms/core/directive/dynamic-list.directive'; +import { DynamicTemplateDirective } from '@ng-dynamic-forms/core/directive/dynamic-template.directive'; +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { TranslateModule } from '@ngx-translate/core'; import { InfiniteScrollModule } from 'ngx-infinite-scroll'; import { of } from 'rxjs'; @@ -43,10 +47,6 @@ import { DynamicLookupModelConfig, } from './dynamic-lookup.model'; import { DynamicLookupNameModel } from './dynamic-lookup-name.model'; -import { DynamicListDirective } from "@ng-dynamic-forms/core/directive/dynamic-list.directive"; -import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; let LOOKUP_TEST_MODEL_CONFIG: DynamicLookupModelConfig = { vocabularyOptions: { diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.ts index d5c344dac06..c75681bc32c 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.ts @@ -35,6 +35,8 @@ import { NgbDropdownModule, NgbTooltipModule, } from '@ng-bootstrap/ng-bootstrap'; +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { TranslateModule } from '@ngx-translate/core'; import { InfiniteScrollModule } from 'ngx-infinite-scroll'; import { @@ -51,8 +53,6 @@ import { ObjNgFor } from '../../../../../utils/object-ngfor.pipe'; import { AuthorityConfidenceStateDirective } from '../../../../directives/authority-confidence-state.directive'; import { DsDynamicVocabularyComponent } from '../dynamic-vocabulary.component'; import { DynamicLookupNameModel } from './dynamic-lookup-name.model'; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; /** * Component representing a lookup or lookup-name input field diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.model.ts index 296c533b9b7..4ea71445564 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.model.ts @@ -1,10 +1,11 @@ -import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; +import { serializable } from '@ng-dynamic-forms/core/decorator/serializable.decorator'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { AUTOCOMPLETE_OFF } from '@ng-dynamic-forms/core/utils/autofill.utils'; + import { DsDynamicInputModel, DsDynamicInputModelConfig, } from '../ds-dynamic-input.model'; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { AUTOCOMPLETE_OFF } from "@ng-dynamic-forms/core/utils/autofill.utils"; export const DYNAMIC_FORM_CONTROL_TYPE_LOOKUP = 'LOOKUP'; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.spec.ts index 23724935acd..a8e04ec7758 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.spec.ts @@ -35,6 +35,10 @@ import { NgbModal, NgbModule, } from '@ng-bootstrap/ng-bootstrap'; +import { DynamicListDirective } from '@ng-dynamic-forms/core/directive/dynamic-list.directive'; +import { DynamicTemplateDirective } from '@ng-dynamic-forms/core/directive/dynamic-template.directive'; +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { TranslateModule } from '@ngx-translate/core'; import { getTestScheduler } from 'jasmine-marbles'; import { of } from 'rxjs'; @@ -45,10 +49,6 @@ import { AuthorityConfidenceStateDirective } from '../../../../directives/author import { VocabularyTreeviewComponent } from '../../../../vocabulary-treeview/vocabulary-treeview.component'; import { DsDynamicOneboxComponent } from './dynamic-onebox.component'; import { DynamicOneboxModel } from './dynamic-onebox.model'; -import { DynamicListDirective } from "@ng-dynamic-forms/core/directive/dynamic-list.directive"; -import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; export let ONEBOX_TEST_GROUP; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts index 8a187e4a97a..200120a4a9e 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts @@ -41,6 +41,8 @@ import { NgbTypeaheadModule, NgbTypeaheadSelectItemEvent, } from '@ng-bootstrap/ng-bootstrap'; +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { TranslateModule } from '@ngx-translate/core'; import { Observable, @@ -65,8 +67,6 @@ import { AuthorityConfidenceStateDirective } from '../../../../directives/author import { VocabularyTreeviewModalComponent } from '../../../../vocabulary-treeview-modal/vocabulary-treeview-modal.component'; import { DsDynamicVocabularyComponent } from '../dynamic-vocabulary.component'; import { DynamicOneboxModel } from './dynamic-onebox.model'; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; /** * Component representing a onebox input field. diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.model.ts index dc037b68b86..909dda5bee4 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.model.ts @@ -1,10 +1,11 @@ -import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; +import { serializable } from '@ng-dynamic-forms/core/decorator/serializable.decorator'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { AUTOCOMPLETE_OFF } from '@ng-dynamic-forms/core/utils/autofill.utils'; + import { DsDynamicInputModel, DsDynamicInputModelConfig, } from '../ds-dynamic-input.model'; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { AUTOCOMPLETE_OFF } from "@ng-dynamic-forms/core/utils/autofill.utils"; export const DYNAMIC_FORM_CONTROL_TYPE_ONEBOX = 'ONEBOX'; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.component.spec.ts index 31c9d04ec9c..e02aa502ce4 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.component.spec.ts @@ -30,7 +30,9 @@ import { NgbModule, NgbTooltipModule, } from '@ng-bootstrap/ng-bootstrap'; - +import { DYNAMIC_FORM_CONTROL_MAP_FN } from '@ng-dynamic-forms/core/service/dynamic-form-component.service'; +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { provideMockStore } from '@ngrx/store/testing'; import { TranslateModule } from '@ngx-translate/core'; @@ -49,9 +51,6 @@ import { DynamicRelationGroupModel, DynamicRelationGroupModelConfig, } from './dynamic-relation-group.model'; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DYNAMIC_FORM_CONTROL_MAP_FN } from "@ng-dynamic-forms/core/service/dynamic-form-component.service"; export let FORM_GROUP_TEST_MODEL_CONFIG; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.components.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.components.ts index 9b2dadb664e..a80c229f7f6 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.components.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.components.ts @@ -28,6 +28,12 @@ import { } from '@dspace/shared/utils/empty.util'; import { hasOnlyEmptyProperties } from '@dspace/shared/utils/object.util'; import { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'; +import { DynamicFormControlComponent } from '@ng-dynamic-forms/core/component/dynamic-form-control.component'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormGroupModel } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { TranslateModule } from '@ngx-translate/core'; import isEqual from 'lodash/isEqual'; import isObject from 'lodash/isObject'; @@ -55,12 +61,6 @@ import { FormComponent } from '../../../../form.component'; import { FormService } from '../../../../form.service'; import { FormBuilderService } from '../../../form-builder.service'; import { DynamicRelationGroupModel } from './dynamic-relation-group.model'; -import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; -import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; /** * Component representing a group input field diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.model.ts index b41b4ae7821..a8c1d40e82b 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.model.ts @@ -4,14 +4,13 @@ import { isEmpty, isNull, } from '@dspace/shared/utils/empty.util'; - +import { serializable } from '@ng-dynamic-forms/core/decorator/serializable.decorator'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; import { DsDynamicInputModel, DsDynamicInputModelConfig, } from '../ds-dynamic-input.model'; -import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; /** * Dynamic Group Model configuration interface diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.spec.ts index f918a786e67..61565e09e3f 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.spec.ts @@ -34,16 +34,15 @@ import { } from '@dspace/core/testing/utils.test'; import { VocabularyServiceStub } from '@dspace/core/testing/vocabulary-service.stub'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; - +import { DynamicListDirective } from '@ng-dynamic-forms/core/directive/dynamic-list.directive'; +import { DynamicTemplateDirective } from '@ng-dynamic-forms/core/directive/dynamic-template.directive'; +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { TranslateModule } from '@ngx-translate/core'; import { InfiniteScrollModule } from 'ngx-infinite-scroll'; import { DsDynamicScrollableDropdownComponent } from './dynamic-scrollable-dropdown.component'; import { DynamicScrollableDropdownModel } from './dynamic-scrollable-dropdown.model'; -import { DynamicListDirective } from "@ng-dynamic-forms/core/directive/dynamic-list.directive"; -import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; export const SD_TEST_GROUP = new UntypedFormGroup({ dropdown: new UntypedFormControl(), diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.ts index d13b8298bf1..94b659f80e9 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.ts @@ -36,6 +36,8 @@ import { NgbDropdown, NgbDropdownModule, } from '@ng-bootstrap/ng-bootstrap'; +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { TranslateModule } from '@ngx-translate/core'; import { InfiniteScrollDirective } from 'ngx-infinite-scroll'; import { @@ -52,8 +54,6 @@ import { import { DsDynamicVocabularyComponent } from '../dynamic-vocabulary.component'; import { DynamicScrollableDropdownModel } from './dynamic-scrollable-dropdown.model'; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; /** diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.model.ts index be701afe710..bcbdf893073 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.model.ts @@ -1,14 +1,13 @@ import { ResourceType } from '@dspace/core/shared/resource-type'; import { VocabularyOptions } from '@dspace/core/submission/vocabularies/models/vocabulary-options.model'; - +import { serializable } from '@ng-dynamic-forms/core/decorator/serializable.decorator'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { AUTOCOMPLETE_OFF } from '@ng-dynamic-forms/core/utils/autofill.utils'; import { DsDynamicInputModel, DsDynamicInputModelConfig, } from '../ds-dynamic-input.model'; -import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { AUTOCOMPLETE_OFF } from "@ng-dynamic-forms/core/utils/autofill.utils"; export const DYNAMIC_FORM_CONTROL_TYPE_SCROLLABLE_DROPDOWN = 'SCROLLABLE_DROPDOWN'; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.component.spec.ts index 62d31263126..3cac7e6e8b0 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.component.spec.ts @@ -32,16 +32,16 @@ import { NgbModule, NgbTypeaheadSelectItemEvent, } from '@ng-bootstrap/ng-bootstrap'; +import { DynamicListDirective } from '@ng-dynamic-forms/core/directive/dynamic-list.directive'; +import { DynamicTemplateDirective } from '@ng-dynamic-forms/core/directive/dynamic-template.directive'; +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { TranslateModule } from '@ngx-translate/core'; import { of } from 'rxjs'; import { Chips } from '../../../../chips/models/chips.model'; import { DsDynamicTagComponent } from './dynamic-tag.component'; import { DynamicTagModel } from './dynamic-tag.model'; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; -import { DynamicListDirective } from "@ng-dynamic-forms/core/directive/dynamic-list.directive"; -import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; function createKeyUpEvent(key: string) { /* eslint-disable no-empty,@typescript-eslint/no-empty-function */ diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.component.ts index 3d3454075c0..ad9a30a0e82 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.component.ts @@ -29,6 +29,8 @@ import { NgbTypeaheadModule, NgbTypeaheadSelectItemEvent, } from '@ng-bootstrap/ng-bootstrap'; +import { DynamicFormLayoutService } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import isEqual from 'lodash/isEqual'; import { Observable, @@ -49,8 +51,6 @@ import { ChipsComponent } from '../../../../chips/chips.component'; import { Chips } from '../../../../chips/models/chips.model'; import { DsDynamicVocabularyComponent } from '../dynamic-vocabulary.component'; import { DynamicTagModel } from './dynamic-tag.model'; -import { DynamicFormLayoutService } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; /** * Component representing a tag input field diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.model.ts index 4f75913d0b0..1b2f5300e68 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.model.ts @@ -1,10 +1,11 @@ -import { serializable } from "@ng-dynamic-forms/core/decorator/serializable.decorator"; +import { serializable } from '@ng-dynamic-forms/core/decorator/serializable.decorator'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { AUTOCOMPLETE_OFF } from '@ng-dynamic-forms/core/utils/autofill.utils'; + import { DsDynamicInputModel, DsDynamicInputModelConfig, } from '../ds-dynamic-input.model'; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { AUTOCOMPLETE_OFF } from "@ng-dynamic-forms/core/utils/autofill.utils"; export const DYNAMIC_FORM_CONTROL_TYPE_TAG = 'TAG'; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/type-bind.utils.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/type-bind.utils.ts index a4e6c62677e..dca883e939e 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/type-bind.utils.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/type-bind.utils.ts @@ -1,5 +1,9 @@ -import { DynamicFormControlRelation } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model"; -import { MATCH_ENABLED, MATCH_VISIBLE, OR_OPERATOR } from "@ng-dynamic-forms/core/service/dynamic-form-relation-matchers"; +import { DynamicFormControlRelation } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model'; +import { + MATCH_ENABLED, + MATCH_VISIBLE, + OR_OPERATOR, +} from '@ng-dynamic-forms/core/service/dynamic-form-relation-matchers'; /** diff --git a/src/app/shared/form/builder/form-builder.service.spec.ts b/src/app/shared/form/builder/form-builder.service.spec.ts index 0f6129c8304..9a2d519f1a6 100644 --- a/src/app/shared/form/builder/form-builder.service.spec.ts +++ b/src/app/shared/form/builder/form-builder.service.spec.ts @@ -19,7 +19,21 @@ import { FormFieldMetadataValueObject } from '@dspace/core/shared/form/models/fo import { VocabularyOptions } from '@dspace/core/submission/vocabularies/models/vocabulary-options.model'; import { getMockTranslateService } from '@dspace/core/testing/translate.service.mock'; import { createSuccessfulRemoteDataObject$ } from '@dspace/core/utilities/remote-data.utils'; - +import { DynamicCheckboxModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model'; +import { DynamicCheckboxGroupModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model'; +import { DynamicDatePickerModel } from '@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormValueControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-value-control.model'; +import { DynamicFileUploadModel } from '@ng-dynamic-forms/core/model/file-upload/dynamic-file-upload.model'; +import { DynamicFormArrayModel } from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; +import { DynamicFormGroupModel } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicRadioGroupModel } from '@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model'; +import { DynamicSelectModel } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; +import { DynamicSwitchModel } from '@ng-dynamic-forms/core/model/switch/dynamic-switch.model'; +import { DynamicTextAreaModel } from '@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model'; +import { DynamicTimePickerModel } from '@ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; import { TranslateService } from '@ngx-translate/core'; import { DynamicDsDatePickerModel } from './ds-dynamic-form-ui/models/date-picker/date-picker.model'; @@ -37,21 +51,6 @@ import { DynamicRelationGroupModel } from './ds-dynamic-form-ui/models/relation- import { DynamicScrollableDropdownModel } from './ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.model'; import { DynamicTagModel } from './ds-dynamic-form-ui/models/tag/dynamic-tag.model'; import { FormBuilderService } from './form-builder.service'; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; -import { DynamicSelectModel } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicCheckboxGroupModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model"; -import { DynamicCheckboxModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; -import { DynamicRadioGroupModel } from "@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model"; -import { DynamicTextAreaModel } from "@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model"; -import { DynamicFormArrayModel } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; -import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DynamicSwitchModel } from "@ng-dynamic-forms/core/model/switch/dynamic-switch.model"; -import { DynamicDatePickerModel } from "@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model"; -import { DynamicFileUploadModel } from "@ng-dynamic-forms/core/model/file-upload/dynamic-file-upload.model"; -import { DynamicTimePickerModel } from "@ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model"; -import { DynamicFormValueControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-value-control.model"; describe('FormBuilderService test suite', () => { diff --git a/src/app/shared/form/builder/form-builder.service.ts b/src/app/shared/form/builder/form-builder.service.ts index 747662b6371..b35186a533b 100644 --- a/src/app/shared/form/builder/form-builder.service.ts +++ b/src/app/shared/form/builder/form-builder.service.ts @@ -26,6 +26,25 @@ import { isNotUndefined, isNull, } from '@dspace/shared/utils/empty.util'; +import { DynamicFormControlEvent } from '@ng-dynamic-forms/core/component/dynamic-form-control-event'; +import { DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { + DYNAMIC_FORM_CONTROL_TYPE_ARRAY, + DynamicFormArrayGroupModel, + DynamicFormArrayModel, +} from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; +import { + DYNAMIC_FORM_CONTROL_TYPE_GROUP, + DynamicFormGroupModel, +} from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DYNAMIC_FORM_CONTROL_TYPE_INPUT } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicPathable } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-path.model'; +import { DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP } from '@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; +import { DynamicFormComponentService } from '@ng-dynamic-forms/core/service/dynamic-form-component.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; +import { parseReviver } from '@ng-dynamic-forms/core/utils/json.utils'; import isObject from 'lodash/isObject'; import isString from 'lodash/isString'; import mergeWith from 'lodash/mergeWith'; @@ -40,18 +59,6 @@ import { DynamicRowArrayModel } from './ds-dynamic-form-ui/models/ds-dynamic-row import { DynamicRelationGroupModel } from './ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.model'; import { DYNAMIC_FORM_CONTROL_TYPE_TAG } from './ds-dynamic-form-ui/models/tag/dynamic-tag.model'; import { RowParser } from './parsers/row-parser'; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicFormComponentService } from "@ng-dynamic-forms/core/service/dynamic-form-component.service"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; -import { DynamicFormControlEvent } from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; -import { DYNAMIC_FORM_CONTROL_TYPE_ARRAY, DynamicFormArrayGroupModel, DynamicFormArrayModel } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_GROUP, DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { parseReviver } from "@ng-dynamic-forms/core/utils/json.utils"; -import { DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP } from "@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_INPUT } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicPathable } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-path.model"; @Injectable({ providedIn: 'root' }) export class FormBuilderService extends DynamicFormService { diff --git a/src/app/shared/form/builder/parsers/dropdown-field-parser.ts b/src/app/shared/form/builder/parsers/dropdown-field-parser.ts index c4634fead56..4d491a4212b 100644 --- a/src/app/shared/form/builder/parsers/dropdown-field-parser.ts +++ b/src/app/shared/form/builder/parsers/dropdown-field-parser.ts @@ -2,6 +2,7 @@ import { Inject } from '@angular/core'; import { FormFieldModel } from '@dspace/core/shared/form/models/form-field.model'; import { FormFieldMetadataValueObject } from '@dspace/core/shared/form/models/form-field-metadata-value.model'; import { isNotEmpty } from '@dspace/shared/utils/empty.util'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; import { TranslateService } from '@ngx-translate/core'; import { @@ -16,7 +17,6 @@ import { SUBMISSION_ID, } from './field-parser'; import { ParserOptions } from './parser-options'; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; export class DropdownFieldParser extends FieldParser { diff --git a/src/app/shared/form/builder/parsers/field-parser.ts b/src/app/shared/form/builder/parsers/field-parser.ts index a5eadd265da..cfa9bcf6fc8 100644 --- a/src/app/shared/form/builder/parsers/field-parser.ts +++ b/src/app/shared/form/builder/parsers/field-parser.ts @@ -16,6 +16,7 @@ import { isNotNull, isNotUndefined, } from '@dspace/shared/utils/empty.util'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; import { TranslateService } from '@ngx-translate/core'; import uniqueId from 'lodash/uniqueId'; @@ -31,7 +32,6 @@ import { getTypeBindRelations } from '../ds-dynamic-form-ui/type-bind.utils'; import { setLayout } from './parser.utils'; import { ParserOptions } from './parser-options'; import { ParserType } from './parser-type'; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; export const SUBMISSION_ID: InjectionToken = new InjectionToken('submissionId'); export const CONFIG_DATA: InjectionToken = new InjectionToken('configData'); diff --git a/src/app/shared/form/builder/parsers/onebox-field-parser.ts b/src/app/shared/form/builder/parsers/onebox-field-parser.ts index c58556a3b71..9d37e5a6a04 100644 --- a/src/app/shared/form/builder/parsers/onebox-field-parser.ts +++ b/src/app/shared/form/builder/parsers/onebox-field-parser.ts @@ -1,6 +1,9 @@ import { FormFieldMetadataValueObject } from '@dspace/core/shared/form/models/form-field-metadata-value.model'; import { isNotEmpty } from '@dspace/shared/utils/empty.util'; - +import { + DynamicSelectModel, + DynamicSelectModelConfig, +} from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; import { environment } from '../../../../../environments/environment'; import { @@ -19,7 +22,6 @@ import { DynamicOneboxModel, } from '../ds-dynamic-form-ui/models/onebox/dynamic-onebox.model'; import { FieldParser } from './field-parser'; -import { DynamicSelectModel, DynamicSelectModelConfig } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; export class OneboxFieldParser extends FieldParser { diff --git a/src/app/shared/form/builder/parsers/parser.utils.ts b/src/app/shared/form/builder/parsers/parser.utils.ts index 4020fad11ab..efe7afd3cda 100644 --- a/src/app/shared/form/builder/parsers/parser.utils.ts +++ b/src/app/shared/form/builder/parsers/parser.utils.ts @@ -2,7 +2,10 @@ import { isNull, isUndefined, } from '@dspace/shared/utils/empty.util'; -import { DynamicFormControlLayout, DynamicFormControlLayoutConfig } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; +import { + DynamicFormControlLayout, + DynamicFormControlLayoutConfig, +} from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; export function setLayout(model: any, controlLayout: string, controlLayoutConfig: string, style: string) { diff --git a/src/app/shared/form/builder/parsers/row-parser.ts b/src/app/shared/form/builder/parsers/row-parser.ts index d4befd11da9..cec92d819a2 100644 --- a/src/app/shared/form/builder/parsers/row-parser.ts +++ b/src/app/shared/form/builder/parsers/row-parser.ts @@ -11,6 +11,8 @@ import { isEmpty, isNotEmpty, } from '@dspace/shared/utils/empty.util'; +import { DYNAMIC_FORM_CONTROL_TYPE_ARRAY } from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; +import { DynamicFormGroupModelConfig } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; import uniqueId from 'lodash/uniqueId'; import { DynamicRowGroupModel } from '../ds-dynamic-form-ui/models/ds-dynamic-row-group-model'; @@ -25,8 +27,6 @@ import { setLayout } from './parser.utils'; import { ParserFactory } from './parser-factory'; import { ParserOptions } from './parser-options'; import { ParserType } from './parser-type'; -import { DynamicFormGroupModelConfig } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_ARRAY } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; export const ROW_ID_PREFIX = 'df-row-group-config-'; diff --git a/src/app/shared/form/form.component.spec.ts b/src/app/shared/form/form.component.spec.ts index 8b658bd7626..4bf17ff4ff9 100644 --- a/src/app/shared/form/form.component.spec.ts +++ b/src/app/shared/form/form.component.spec.ts @@ -19,7 +19,12 @@ import { FormFieldMetadataValueObject } from '@dspace/core/shared/form/models/fo import { StoreMock } from '@dspace/core/testing/store.mock'; import { createTestComponent } from '@dspace/core/testing/utils.test'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; - +import { DynamicFormControlEvent } from '@ng-dynamic-forms/core/component/dynamic-form-control-event'; +import { DynamicListDirective } from '@ng-dynamic-forms/core/directive/dynamic-list.directive'; +import { DynamicTemplateDirective } from '@ng-dynamic-forms/core/directive/dynamic-template.directive'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormArrayModel } from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; import { Store, StoreModule, @@ -37,12 +42,6 @@ import { import { FormComponent } from './form.component'; import { FormState } from './form.reducer'; import { FormService } from './form.service'; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicFormArrayModel } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; -import { DynamicFormControlEvent } from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; -import { DynamicListDirective } from "@ng-dynamic-forms/core/directive/dynamic-list.directive"; -import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; let TEST_FORM_MODEL; diff --git a/src/app/shared/form/form.component.ts b/src/app/shared/form/form.component.ts index 05620d27a8d..9cebc5c8808 100644 --- a/src/app/shared/form/form.component.ts +++ b/src/app/shared/form/form.component.ts @@ -23,6 +23,12 @@ import { isNull, } from '@dspace/shared/utils/empty.util'; import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; +import { DynamicFormControlEvent } from '@ng-dynamic-forms/core/component/dynamic-form-control-event'; +import { DynamicTemplateDirective } from '@ng-dynamic-forms/core/directive/dynamic-template.directive'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormArrayModel } from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; +import { DynamicFormGroupModel } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicFormLayout } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; import { TranslateModule } from '@ngx-translate/core'; import findIndex from 'lodash/findIndex'; import { @@ -43,12 +49,6 @@ import { FormError, } from './form.reducer'; import { FormService } from './form.service'; -import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DynamicFormLayout } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormControlEvent } from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; -import { DynamicFormArrayModel } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; /** * The default form component. @@ -62,9 +62,9 @@ import { DynamicFormArrayModel } from "@ng-dynamic-forms/core/model/form-array/d AsyncPipe, BtnDisabledDirective, DsDynamicFormComponent, + DynamicTemplateDirective, ReactiveFormsModule, TranslateModule, - DynamicTemplateDirective ], }) export class FormComponent implements OnDestroy, OnInit { diff --git a/src/app/shared/form/form.service.spec.ts b/src/app/shared/form/form.service.spec.ts index 4385e25fbf1..470c723884e 100644 --- a/src/app/shared/form/form.service.spec.ts +++ b/src/app/shared/form/form.service.spec.ts @@ -9,7 +9,9 @@ import { UntypedFormGroup, Validators, } from '@angular/forms'; - +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormGroupModel } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; import { Store, StoreModule, @@ -20,9 +22,6 @@ import { FormBuilderService } from './builder/form-builder.service'; import { formReducer } from './form.reducer'; import { FormService } from './form.service'; import { getMockFormBuilderService } from './testing/form-builder-service.mock'; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; describe('FormService test suite', () => { const config = { diff --git a/src/app/shared/form/form.service.ts b/src/app/shared/form/form.service.ts index 344d8862efd..d1f2a984d43 100644 --- a/src/app/shared/form/form.service.ts +++ b/src/app/shared/form/form.service.ts @@ -9,6 +9,9 @@ import { isEmpty, isNotUndefined, } from '@dspace/shared/utils/empty.util'; +import { DynamicFormControlEvent } from '@ng-dynamic-forms/core/component/dynamic-form-control-event'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormGroupModel } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; import { select, Store, @@ -39,9 +42,6 @@ import { FormTouchedState, } from './form.reducer'; import { formObjectFromIdSelector } from './selectors'; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DynamicFormControlEvent } from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; @Injectable({ providedIn: 'root' }) export class FormService { diff --git a/src/app/shared/form/testing/form-event.stub.ts b/src/app/shared/form/testing/form-event.stub.ts index 72360147a77..86398536411 100644 --- a/src/app/shared/form/testing/form-event.stub.ts +++ b/src/app/shared/form/testing/form-event.stub.ts @@ -2,8 +2,8 @@ import { UntypedFormControl, UntypedFormGroup, } from '@angular/forms'; -import { DynamicCheckboxModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; -import { DynamicSelectModel } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; +import { DynamicCheckboxModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model'; +import { DynamicSelectModel } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; export const accessConditionChangeEvent = { diff --git a/src/app/shared/form/testing/form-models.mock.ts b/src/app/shared/form/testing/form-models.mock.ts index 719e71875ce..e405d76a1f6 100644 --- a/src/app/shared/form/testing/form-models.mock.ts +++ b/src/app/shared/form/testing/form-models.mock.ts @@ -4,6 +4,7 @@ import { FormFieldMetadataValueObject } from '@dspace/core/shared/form/models/fo import { SubmissionScopeType } from '@dspace/core/submission/submission-scope-type'; import { VocabularyEntry } from '@dspace/core/submission/vocabularies/models/vocabulary-entry.model'; import { VocabularyOptions } from '@dspace/core/submission/vocabularies/models/vocabulary-options.model'; +import { DynamicSelectModel } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; import { DsDynamicInputModel } from '../builder/ds-dynamic-form-ui/models/ds-dynamic-input.model'; import { DynamicQualdropModel } from '../builder/ds-dynamic-form-ui/models/ds-dynamic-qualdrop.model'; @@ -13,7 +14,6 @@ import { } from '../builder/ds-dynamic-form-ui/models/ds-dynamic-row-array-model'; import { DynamicRowGroupModel } from '../builder/ds-dynamic-form-ui/models/ds-dynamic-row-group-model'; import { DynamicRelationGroupModel } from '../builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.model'; -import { DynamicSelectModel } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; export const qualdropSelectConfig = { name: 'dc.identifier_QUALDROP_METADATA', diff --git a/src/app/shared/resource-policies/form/resource-policy-form.component.spec.ts b/src/app/shared/resource-policies/form/resource-policy-form.component.spec.ts index 874a2dad6c2..8808af80020 100644 --- a/src/app/shared/resource-policies/form/resource-policy-form.component.spec.ts +++ b/src/app/shared/resource-policies/form/resource-policy-form.component.spec.ts @@ -42,7 +42,14 @@ import { stringToNgbDateStruct, } from '@dspace/shared/utils/date.util'; import { isNotEmptyOperator } from '@dspace/shared/utils/empty.util'; -import { NgbNav, NgbNavContent, NgbNavItem, NgbNavLink, NgbNavOutlet } from '@ng-bootstrap/ng-bootstrap'; +import { + NgbNav, + NgbNavContent, + NgbNavItem, + NgbNavLink, + NgbNavOutlet, +} from '@ng-bootstrap/ng-bootstrap'; +import { DYNAMIC_FORM_CONTROL_MAP_FN } from '@ng-dynamic-forms/core/service/dynamic-form-component.service'; import { provideMockStore } from '@ngrx/store/testing'; import { TranslateModule } from '@ngx-translate/core'; import { getTestScheduler } from 'jasmine-marbles'; @@ -66,7 +73,6 @@ import { ResourcePolicyEvent, ResourcePolicyFormComponent, } from './resource-policy-form.component'; -import { DYNAMIC_FORM_CONTROL_MAP_FN } from "@ng-dynamic-forms/core/service/dynamic-form-component.service"; export const mockResourcePolicyFormData = { name: [ @@ -498,11 +504,11 @@ describe('ResourcePolicyFormComponent test suite', () => { template: ``, imports: [ FormsModule, - NgbNavLink, - NgbNavItem, + NgbNav, NgbNavContent, + NgbNavItem, + NgbNavLink, NgbNavOutlet, - NgbNav, ReactiveFormsModule, ], }) diff --git a/src/app/shared/resource-policies/form/resource-policy-form.component.ts b/src/app/shared/resource-policies/form/resource-policy-form.component.ts index 93ee8f2e2f8..c32cfc2a90b 100644 --- a/src/app/shared/resource-policies/form/resource-policy-form.component.ts +++ b/src/app/shared/resource-policies/form/resource-policy-form.component.ts @@ -29,10 +29,18 @@ import { isNotEmpty, } from '@dspace/shared/utils/empty.util'; import { - NgbModal, NgbNav, - NgbNavChangeEvent, NgbNavContent, NgbNavItem, NgbNavLink, - NgbNavModule, NgbNavOutlet, + NgbModal, + NgbNav, + NgbNavChangeEvent, + NgbNavContent, + NgbNavItem, + NgbNavLink, + NgbNavOutlet, } from '@ng-bootstrap/ng-bootstrap'; +import { DynamicDatePickerModel } from '@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormGroupModel } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicSelectModel } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; import { TranslateModule } from '@ngx-translate/core'; import { BehaviorSubject, @@ -65,10 +73,6 @@ import { RESOURCE_POLICY_FORM_START_DATE_CONFIG, RESOURCE_POLICY_FORM_START_DATE_LAYOUT, } from './resource-policy-form.model'; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicSelectModel } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; -import { DynamicDatePickerModel } from "@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model"; -import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; export interface ResourcePolicyEvent { object: ResourcePolicy; @@ -87,11 +91,11 @@ export interface ResourcePolicyEvent { BtnDisabledDirective, EpersonGroupListComponent, FormComponent, - NgbNavLink, - NgbNavItem, + NgbNav, NgbNavContent, + NgbNavItem, + NgbNavLink, NgbNavOutlet, - NgbNav, TranslateModule, ], }) diff --git a/src/app/shared/resource-policies/form/resource-policy-form.model.ts b/src/app/shared/resource-policies/form/resource-policy-form.model.ts index d403084eed2..cf6cb85fbc5 100644 --- a/src/app/shared/resource-policies/form/resource-policy-form.model.ts +++ b/src/app/shared/resource-policies/form/resource-policy-form.model.ts @@ -1,13 +1,13 @@ import { ActionType } from '@dspace/core/resource-policy/models/action-type.model'; import { PolicyType } from '@dspace/core/resource-policy/models/policy-type.model'; +import { DynamicDatePickerModelConfig } from '@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model'; +import { DynamicFormOptionConfig } from '@ng-dynamic-forms/core/model/dynamic-option-control.model'; +import { DynamicFormGroupModelConfig } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { DynamicSelectModelConfig } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; import { DsDynamicInputModelConfig } from '../../form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model'; import { DsDynamicTextAreaModelConfig } from '../../form/builder/ds-dynamic-form-ui/models/ds-dynamic-textarea.model'; -import { DynamicFormOptionConfig } from "@ng-dynamic-forms/core/model/dynamic-option-control.model"; -import { DynamicSelectModelConfig } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; -import { DynamicFormGroupModelConfig } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicDatePickerModelConfig } from "@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model"; const policyTypeList: DynamicFormOptionConfig[] = [ { diff --git a/src/app/submission/sections/accesses/section-accesses.component.spec.ts b/src/app/submission/sections/accesses/section-accesses.component.spec.ts index bd607bc9980..0686a6670f5 100644 --- a/src/app/submission/sections/accesses/section-accesses.component.spec.ts +++ b/src/app/submission/sections/accesses/section-accesses.component.spec.ts @@ -16,7 +16,11 @@ import { import { SectionsServiceStub } from '@dspace/core/testing/sections-service.stub'; import { SubmissionJsonPatchOperationsServiceStub } from '@dspace/core/testing/submission-json-patch-operations-service.stub'; import { XSRFService } from '@dspace/core/xsrf/xsrf.service'; - +import { DynamicCheckboxModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model'; +import { DynamicDatePickerModel } from '@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model'; +import { DynamicFormArrayModel } from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; +import { DynamicSelectModel } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; +import { DYNAMIC_FORM_CONTROL_MAP_FN } from '@ng-dynamic-forms/core/service/dynamic-form-component.service'; import { Store } from '@ngrx/store'; import { provideMockStore } from '@ngrx/store/testing'; import { TranslateModule } from '@ngx-translate/core'; @@ -44,11 +48,6 @@ import { SectionFormOperationsService } from '../form/section-form-operations.se import { SectionsService } from '../sections.service'; import { SubmissionSectionAccessesComponent } from './section-accesses.component'; import { SectionAccessesService } from './section-accesses.service'; -import { DYNAMIC_FORM_CONTROL_MAP_FN } from "@ng-dynamic-forms/core/service/dynamic-form-component.service"; -import { DynamicCheckboxModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; -import { DynamicFormArrayModel } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; -import { DynamicSelectModel } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; -import { DynamicDatePickerModel } from "@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model"; function getMockDsDynamicTypeBindRelationService(): DsDynamicTypeBindRelationService { diff --git a/src/app/submission/sections/accesses/section-accesses.component.ts b/src/app/submission/sections/accesses/section-accesses.component.ts index 986256b6554..ce603fb6f0f 100644 --- a/src/app/submission/sections/accesses/section-accesses.component.ts +++ b/src/app/submission/sections/accesses/section-accesses.component.ts @@ -17,7 +17,25 @@ import { isNotEmpty, isNotNull, } from '@dspace/shared/utils/empty.util'; - +import { DynamicFormControlEvent } from '@ng-dynamic-forms/core/component/dynamic-form-control-event'; +import { + DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX, + DynamicCheckboxModel, +} from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model'; +import { + DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER, + DynamicDatePickerModel, +} from '@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model'; +import { DynamicDateControlValue } from '@ng-dynamic-forms/core/model/dynamic-date-control.model'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormArrayModel } from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; +import { DynamicFormGroupModel } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicFormControlCondition } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model'; +import { DynamicSelectModel } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; +import { + MATCH_ENABLED, + OR_OPERATOR, +} from '@ng-dynamic-forms/core/service/dynamic-form-relation-matchers'; import { TranslateService } from '@ngx-translate/core'; import { combineLatest, @@ -54,22 +72,6 @@ import { FORM_ACCESS_CONDITION_TYPE_LAYOUT, } from './section-accesses.model'; import { SectionAccessesService } from './section-accesses.service'; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { - DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER, - DynamicDatePickerModel, -} from "@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model"; -import { DynamicFormControlEvent } from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; -import { - DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX, - DynamicCheckboxModel, -} from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; -import { DynamicFormControlCondition } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model"; -import { DynamicDateControlValue } from "@ng-dynamic-forms/core/model/dynamic-date-control.model"; -import { MATCH_ENABLED, OR_OPERATOR } from "@ng-dynamic-forms/core/service/dynamic-form-relation-matchers"; -import { DynamicSelectModel } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; -import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DynamicFormArrayModel } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; /** * This component represents a section for managing item's access conditions. diff --git a/src/app/submission/sections/accesses/section-accesses.model.ts b/src/app/submission/sections/accesses/section-accesses.model.ts index 70632b32409..72647f76332 100644 --- a/src/app/submission/sections/accesses/section-accesses.model.ts +++ b/src/app/submission/sections/accesses/section-accesses.model.ts @@ -1,10 +1,13 @@ -import { DynamicCheckboxModelConfig } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; -import { DynamicDatePickerModelConfig } from "@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model"; -import { DynamicFormArrayModelConfig } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; -import { DynamicFormGroupModelConfig } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicSelectModelConfig } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; -import { MATCH_ENABLED, OR_OPERATOR } from "@ng-dynamic-forms/core/service/dynamic-form-relation-matchers"; +import { DynamicCheckboxModelConfig } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model'; +import { DynamicDatePickerModelConfig } from '@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model'; +import { DynamicFormArrayModelConfig } from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; +import { DynamicFormGroupModelConfig } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { DynamicSelectModelConfig } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; +import { + MATCH_ENABLED, + OR_OPERATOR, +} from '@ng-dynamic-forms/core/service/dynamic-form-relation-matchers'; export const ACCESS_FORM_CHECKBOX_CONFIG: DynamicCheckboxModelConfig = { diff --git a/src/app/submission/sections/form/section-form-operations.service.spec.ts b/src/app/submission/sections/form/section-form-operations.service.spec.ts index 3b422ae3b72..678b2c59b1c 100644 --- a/src/app/submission/sections/form/section-form-operations.service.spec.ts +++ b/src/app/submission/sections/form/section-form-operations.service.spec.ts @@ -9,7 +9,10 @@ import { FormFieldMetadataValueObject } from '@dspace/core/shared/form/models/fo import { FormFieldPreviousValueObject } from '@dspace/core/shared/form/models/form-field-previous-value-object'; import { VocabularyEntry } from '@dspace/core/submission/vocabularies/models/vocabulary-entry.model'; import { TranslateLoaderMock } from '@dspace/core/testing/translate-loader.mock'; - +import { DynamicFormControlEvent } from '@ng-dynamic-forms/core/component/dynamic-form-control-event'; +import { DYNAMIC_FORM_CONTROL_TYPE_ARRAY } from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; +import { DYNAMIC_FORM_CONTROL_TYPE_GROUP } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; import { TranslateLoader, TranslateModule, @@ -31,10 +34,6 @@ import { mockRowGroupModel, } from '../../../shared/form/testing/form-models.mock'; import { SectionFormOperationsService } from './section-form-operations.service'; -import { DynamicFormControlEvent } from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; -import { DYNAMIC_FORM_CONTROL_TYPE_GROUP } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_ARRAY } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; describe('SectionFormOperationsService test suite', () => { let formBuilderService: any; diff --git a/src/app/submission/sections/form/section-form-operations.service.ts b/src/app/submission/sections/form/section-form-operations.service.ts index fe266de98c0..7e21651c4d0 100644 --- a/src/app/submission/sections/form/section-form-operations.service.ts +++ b/src/app/submission/sections/form/section-form-operations.service.ts @@ -18,6 +18,16 @@ import { isNull, isUndefined, } from '@dspace/shared/utils/empty.util'; +import { + DynamicFormControlEvent, + isDynamicFormControlEvent, +} from '@ng-dynamic-forms/core/component/dynamic-form-control-event'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { + DYNAMIC_FORM_CONTROL_TYPE_ARRAY, + DynamicFormArrayGroupModel, +} from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; +import { DYNAMIC_FORM_CONTROL_TYPE_GROUP } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; import { deepClone } from 'fast-json-patch'; import isEqual from 'lodash/isEqual'; import isObject from 'lodash/isObject'; @@ -27,10 +37,6 @@ import { DynamicQualdropModel } from '../../../shared/form/builder/ds-dynamic-fo import { DynamicRowArrayModel } from '../../../shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-row-array-model'; import { DynamicRelationGroupModel } from '../../../shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.model'; import { FormBuilderService } from '../../../shared/form/builder/form-builder.service'; -import { DynamicFormControlEvent, isDynamicFormControlEvent } from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_GROUP } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_ARRAY, DynamicFormArrayGroupModel } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; /** * The service handling all form section operations diff --git a/src/app/submission/sections/form/section-form.component.spec.ts b/src/app/submission/sections/form/section-form.component.spec.ts index 55826b6468f..7b735256cb4 100644 --- a/src/app/submission/sections/form/section-form.component.spec.ts +++ b/src/app/submission/sections/form/section-form.component.spec.ts @@ -32,6 +32,10 @@ import { SubmissionServiceStub } from '@dspace/core/testing/submission-service.s import { getMockTranslateService } from '@dspace/core/testing/translate.service.mock'; import { createTestComponent } from '@dspace/core/testing/utils.test'; import { createSuccessfulRemoteDataObject$ } from '@dspace/core/utilities/remote-data.utils'; +import { + DynamicFormControlEvent, + DynamicFormControlEventType, +} from '@ng-dynamic-forms/core/component/dynamic-form-control-event'; import { TranslateModule, TranslateService, @@ -60,7 +64,6 @@ import { SectionDataObject } from '../models/section-data.model'; import { SectionsService } from '../sections.service'; import { SubmissionSectionFormComponent } from './section-form.component'; import { SectionFormOperationsService } from './section-form-operations.service'; -import { DynamicFormControlEvent, DynamicFormControlEventType } from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; function getMockSubmissionFormsConfigService(): SubmissionFormsConfigDataService { return jasmine.createSpyObj('FormOperationsService', { diff --git a/src/app/submission/sections/form/section-form.component.ts b/src/app/submission/sections/form/section-form.component.ts index e916a6c6935..da99902988f 100644 --- a/src/app/submission/sections/form/section-form.component.ts +++ b/src/app/submission/sections/form/section-form.component.ts @@ -34,7 +34,8 @@ import { isUndefined, } from '@dspace/shared/utils/empty.util'; import { difference } from '@dspace/shared/utils/object.util'; - +import { DynamicFormControlEvent } from '@ng-dynamic-forms/core/component/dynamic-form-control-event'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; import { TranslateService } from '@ngx-translate/core'; import findIndex from 'lodash/findIndex'; import isEqual from 'lodash/isEqual'; @@ -64,8 +65,6 @@ import { SectionModelComponent } from '../models/section.model'; import { SectionDataObject } from '../models/section-data.model'; import { SectionsService } from '../sections.service'; import { SectionFormOperationsService } from './section-form-operations.service'; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicFormControlEvent } from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; /** * This component represents a section that contains a Form. diff --git a/src/app/submission/sections/license/section-license.component.spec.ts b/src/app/submission/sections/license/section-license.component.spec.ts index 08f249d4519..91a5253edc4 100644 --- a/src/app/submission/sections/license/section-license.component.spec.ts +++ b/src/app/submission/sections/license/section-license.component.spec.ts @@ -34,7 +34,12 @@ import { createSuccessfulRemoteDataObject$, } from '@dspace/core/utilities/remote-data.utils'; import { XSRFService } from '@dspace/core/xsrf/xsrf.service'; - +import { + DynamicFormControlEvent, + DynamicFormControlEventType, +} from '@ng-dynamic-forms/core/component/dynamic-form-control-event'; +import { DynamicCheckboxModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model'; +import { DYNAMIC_FORM_CONTROL_MAP_FN } from '@ng-dynamic-forms/core/service/dynamic-form-component.service'; import { provideMockStore } from '@ngrx/store/testing'; import { TranslateModule } from '@ngx-translate/core'; import { cold } from 'jasmine-marbles'; @@ -61,9 +66,6 @@ import { SectionFormOperationsService } from '../form/section-form-operations.se import { SectionDataObject } from '../models/section-data.model'; import { SectionsService } from '../sections.service'; import { SubmissionSectionLicenseComponent } from './section-license.component'; -import { DynamicFormControlEvent, DynamicFormControlEventType } from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; -import { DYNAMIC_FORM_CONTROL_MAP_FN } from "@ng-dynamic-forms/core/service/dynamic-form-component.service"; -import { DynamicCheckboxModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; function getMockDsDynamicTypeBindRelationService(): DsDynamicTypeBindRelationService { return jasmine.createSpyObj('DsDynamicTypeBindRelationService', { diff --git a/src/app/submission/sections/license/section-license.component.ts b/src/app/submission/sections/license/section-license.component.ts index 0a8c1b71de9..35cc28802cd 100644 --- a/src/app/submission/sections/license/section-license.component.ts +++ b/src/app/submission/sections/license/section-license.component.ts @@ -20,7 +20,10 @@ import { isNotNull, isNotUndefined, } from '@dspace/shared/utils/empty.util'; - +import { DynamicFormControlEvent } from '@ng-dynamic-forms/core/component/dynamic-form-control-event'; +import { DynamicCheckboxModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormLayout } from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; import { TranslateService } from '@ngx-translate/core'; import { Observable, @@ -48,10 +51,6 @@ import { SECTION_LICENSE_FORM_LAYOUT, SECTION_LICENSE_FORM_MODEL, } from './section-license.model'; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { DynamicFormLayout } from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicCheckboxModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; -import { DynamicFormControlEvent } from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; /** * This component represents a section that contains the submission license form. diff --git a/src/app/submission/sections/sections.service.ts b/src/app/submission/sections/sections.service.ts index 2aaf4f1952a..e1f7ec3dd54 100644 --- a/src/app/submission/sections/sections.service.ts +++ b/src/app/submission/sections/sections.service.ts @@ -15,6 +15,7 @@ import { isNotEmpty, isNotUndefined, } from '@dspace/shared/utils/empty.util'; +import { parseReviver } from '@ng-dynamic-forms/core/utils/json.utils'; import { Store } from '@ngrx/store'; import { TranslateService } from '@ngx-translate/core'; import { @@ -59,7 +60,6 @@ import { import { SubmissionState } from '../submission.reducers'; import { SubmissionService } from '../submission.service'; import parseSectionErrorPaths, { SectionErrorPath } from '../utils/parseSectionErrorPaths'; -import { parseReviver } from "@ng-dynamic-forms/core/utils/json.utils"; /** * A service that provides methods used in submission process. diff --git a/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.spec.ts b/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.spec.ts index b5fc5c0d67c..5bbc419f9c0 100644 --- a/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.spec.ts +++ b/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.spec.ts @@ -31,7 +31,10 @@ import { NgbActiveModal, NgbModal, } from '@ng-bootstrap/ng-bootstrap'; - +import { DynamicFormControlEvent } from '@ng-dynamic-forms/core/component/dynamic-form-control-event'; +import { DynamicFormArrayModel } from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; +import { DynamicFormGroupModel } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicSelectModel } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; import { provideMockStore } from '@ngrx/store/testing'; import { TranslateModule } from '@ngx-translate/core'; import { NgxMaskModule } from 'ngx-mask'; @@ -57,10 +60,6 @@ import { import { SectionUploadService } from '../../section-upload.service'; import { POLICY_DEFAULT_WITH_LIST } from '../../section-upload-constants'; import { SubmissionSectionUploadFileEditComponent } from './section-upload-file-edit.component'; -import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DynamicFormArrayModel } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; -import { DynamicFormControlEvent } from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; -import { DynamicSelectModel } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; function getMockDsDynamicTypeBindRelationService(): DsDynamicTypeBindRelationService { return jasmine.createSpyObj('DsDynamicTypeBindRelationService', { diff --git a/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.ts b/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.ts index a0daeb944a7..fbffba4d695 100644 --- a/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.ts +++ b/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.ts @@ -23,6 +23,21 @@ import { isNotNull, } from '@dspace/shared/utils/empty.util'; import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { DynamicFormControlEvent } from '@ng-dynamic-forms/core/component/dynamic-form-control-event'; +import { + DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER, + DynamicDatePickerModel, +} from '@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model'; +import { DynamicDateControlValue } from '@ng-dynamic-forms/core/model/dynamic-date-control.model'; +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicFormArrayModel } from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; +import { DynamicFormGroupModel } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicFormControlCondition } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model'; +import { DynamicSelectModel } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; +import { + MATCH_ENABLED, + OR_OPERATOR, +} from '@ng-dynamic-forms/core/service/dynamic-form-relation-matchers'; import { TranslateModule } from '@ngx-translate/core'; import { Subscription } from 'rxjs'; import { @@ -55,18 +70,6 @@ import { BITSTREAM_METADATA_FORM_GROUP_CONFIG, BITSTREAM_METADATA_FORM_GROUP_LAYOUT, } from './section-upload-file-edit.model'; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; -import { - DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER, - DynamicDatePickerModel, -} from "@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model"; -import { DynamicFormControlEvent } from "@ng-dynamic-forms/core/component/dynamic-form-control-event"; -import { DynamicFormGroupModel } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DynamicFormControlCondition } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-relation.model"; -import { DynamicDateControlValue } from "@ng-dynamic-forms/core/model/dynamic-date-control.model"; -import { MATCH_ENABLED, OR_OPERATOR } from "@ng-dynamic-forms/core/service/dynamic-form-relation-matchers"; -import { DynamicSelectModel } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; -import { DynamicFormArrayModel } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; /** * This component represents the edit form for bitstream diff --git a/src/app/submission/sections/upload/file/edit/section-upload-file-edit.model.ts b/src/app/submission/sections/upload/file/edit/section-upload-file-edit.model.ts index df50e1cddbe..5cee00bca43 100644 --- a/src/app/submission/sections/upload/file/edit/section-upload-file-edit.model.ts +++ b/src/app/submission/sections/upload/file/edit/section-upload-file-edit.model.ts @@ -1,10 +1,13 @@ -import { DynamicDatePickerModelConfig } from "@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model"; -import { DynamicFormArrayModelConfig } from "@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model"; -import { DynamicFormGroupModelConfig } from "@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicSelectModelConfig } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; -import { DynamicSwitchModelConfig } from "@ng-dynamic-forms/core/model/switch/dynamic-switch.model"; -import { MATCH_ENABLED, OR_OPERATOR } from "@ng-dynamic-forms/core/service/dynamic-form-relation-matchers"; +import { DynamicDatePickerModelConfig } from '@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model'; +import { DynamicFormArrayModelConfig } from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; +import { DynamicFormGroupModelConfig } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { DynamicSelectModelConfig } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; +import { DynamicSwitchModelConfig } from '@ng-dynamic-forms/core/model/switch/dynamic-switch.model'; +import { + MATCH_ENABLED, + OR_OPERATOR, +} from '@ng-dynamic-forms/core/service/dynamic-form-relation-matchers'; export const BITSTREAM_METADATA_FORM_GROUP_CONFIG: DynamicFormGroupModelConfig = { diff --git a/src/app/submission/sections/upload/file/section-upload-file.component.ts b/src/app/submission/sections/upload/file/section-upload-file.component.ts index 31cdd9e796d..1a1acf34960 100644 --- a/src/app/submission/sections/upload/file/section-upload-file.component.ts +++ b/src/app/submission/sections/upload/file/section-upload-file.component.ts @@ -22,7 +22,7 @@ import { NgbModal, NgbModalOptions, } from '@ng-bootstrap/ng-bootstrap'; - +import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; import { TranslateModule } from '@ngx-translate/core'; import { BehaviorSubject, @@ -38,7 +38,6 @@ import { SubmissionService } from '../../../submission.service'; import { SectionUploadService } from '../section-upload.service'; import { SubmissionSectionUploadFileEditComponent } from './edit/section-upload-file-edit.component'; import { SubmissionSectionUploadFileViewComponent } from './view/section-upload-file-view.component'; -import { DynamicFormControlModel } from "@ng-dynamic-forms/core/model/dynamic-form-control.model"; /** * This component represents a single bitstream contained in the submission diff --git a/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-array.component.ts b/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-array.component.ts index 28c66eff1ae..94fa25c7b1a 100644 --- a/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-array.component.ts +++ b/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-array.component.ts @@ -1,30 +1,31 @@ -import { QueryList } from "@angular/core"; -import { UntypedFormArray } from "@angular/forms"; -import { DynamicFormControlComponent } from "./dynamic-form-control.component"; -import { DynamicTemplateDirective } from "../directive/dynamic-template.directive"; -import { DynamicFormArrayModel } from "../model/form-array/dynamic-form-array.model"; -import { DynamicFormControlContainerComponent } from "./dynamic-form-control-container.component"; +import { QueryList } from '@angular/core'; +import { UntypedFormArray } from '@angular/forms'; + +import { DynamicTemplateDirective } from '../directive/dynamic-template.directive'; +import { DynamicFormArrayModel } from '../model/form-array/dynamic-form-array.model'; +import { DynamicFormControlComponent } from './dynamic-form-control.component'; +import { DynamicFormControlContainerComponent } from './dynamic-form-control-container.component'; export abstract class DynamicFormArrayComponent extends DynamicFormControlComponent { - components!: QueryList; - model!: DynamicFormArrayModel; - templates?: QueryList; + components!: QueryList; + model!: DynamicFormArrayModel; + templates?: QueryList; - get array(): UntypedFormArray { - return this.control as UntypedFormArray; - } + get array(): UntypedFormArray { + return this.control as UntypedFormArray; + } - get startTemplate(): DynamicTemplateDirective | undefined { - return this.layoutService.getStartTemplate(this.model, this.templates); - } + get startTemplate(): DynamicTemplateDirective | undefined { + return this.layoutService.getStartTemplate(this.model, this.templates); + } - get endTemplate(): DynamicTemplateDirective | undefined { - return this.layoutService.getEndTemplate(this.model, this.templates); - } + get endTemplate(): DynamicTemplateDirective | undefined { + return this.layoutService.getEndTemplate(this.model, this.templates); + } - markForCheck() { - if (this.components instanceof QueryList) { - this.components.forEach(component => component.markForCheck()); - } + markForCheck() { + if (this.components instanceof QueryList) { + this.components.forEach(component => component.markForCheck()); } + } } diff --git a/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-container.component.ts b/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-container.component.ts index acafccfc486..67c3ff16139 100644 --- a/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-container.component.ts +++ b/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-container.component.ts @@ -1,183 +1,195 @@ import { - ChangeDetectorRef, - ComponentFactoryResolver, - ComponentRef, Directive, - EventEmitter, - OnChanges, - OnDestroy, - OnInit, - QueryList, - SimpleChanges, - Type, - ViewContainerRef -} from "@angular/core"; -import { UntypedFormControl, UntypedFormGroup } from "@angular/forms"; -import { Subscription } from "rxjs"; + ChangeDetectorRef, + ComponentFactoryResolver, + ComponentRef, + Directive, + EventEmitter, + OnChanges, + OnDestroy, + OnInit, + QueryList, + SimpleChanges, + Type, + ViewContainerRef, +} from '@angular/core'; import { - DynamicFormControlCustomEvent, - DynamicFormControlEvent, - DynamicFormControlEventType, - isDynamicFormControlEvent -} from "./dynamic-form-control-event"; -import { DynamicFormControlModel } from "../model/dynamic-form-control.model"; -import { DynamicFormValueControlModel } from "../model/dynamic-form-value-control.model"; + UntypedFormControl, + UntypedFormGroup, +} from '@angular/forms'; +import { Subscription } from 'rxjs'; import { - DYNAMIC_FORM_CONTROL_TYPE_ARRAY, - DynamicFormArrayGroupModel -} from "../model/form-array/dynamic-form-array.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX } from "../model/checkbox/dynamic-checkbox.model"; + bufferCount, + filter, + map, +} from 'rxjs/operators'; + +import { DynamicTemplateDirective } from '../directive/dynamic-template.directive'; +import { DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX } from '../model/checkbox/dynamic-checkbox.model'; +import { DynamicFormControlModel } from '../model/dynamic-form-control.model'; +import { DynamicFormValueControlModel } from '../model/dynamic-form-value-control.model'; import { - DYNAMIC_FORM_CONTROL_INPUT_TYPE_FILE, - DYNAMIC_FORM_CONTROL_TYPE_INPUT, - DynamicInputModel -} from "../model/input/dynamic-input.model"; + DYNAMIC_FORM_CONTROL_TYPE_ARRAY, + DynamicFormArrayGroupModel, +} from '../model/form-array/dynamic-form-array.model'; import { - DynamicFormControlLayout, - DynamicFormControlLayoutContext, - DynamicFormControlLayoutPlace -} from "../model/misc/dynamic-form-control-layout.model"; -import { DynamicFormControl } from "./dynamic-form-control-interface"; -import { DynamicTemplateDirective } from "../directive/dynamic-template.directive"; -import { DynamicFormLayout, DynamicFormLayoutService } from "../service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "../service/dynamic-form-validation.service"; -import { DynamicFormComponentService } from "../service/dynamic-form-component.service"; -import { isString } from "../utils/core.utils"; -import { DynamicFormRelationService } from "../service/dynamic-form-relation.service"; -import { bufferCount, filter, map } from "rxjs/operators"; + DYNAMIC_FORM_CONTROL_INPUT_TYPE_FILE, + DYNAMIC_FORM_CONTROL_TYPE_INPUT, + DynamicInputModel, +} from '../model/input/dynamic-input.model'; +import { + DynamicFormControlLayout, + DynamicFormControlLayoutContext, + DynamicFormControlLayoutPlace, +} from '../model/misc/dynamic-form-control-layout.model'; +import { DynamicFormComponentService } from '../service/dynamic-form-component.service'; +import { + DynamicFormLayout, + DynamicFormLayoutService, +} from '../service/dynamic-form-layout.service'; +import { DynamicFormRelationService } from '../service/dynamic-form-relation.service'; +import { DynamicFormValidationService } from '../service/dynamic-form-validation.service'; +import { isString } from '../utils/core.utils'; +import { + DynamicFormControlCustomEvent, + DynamicFormControlEvent, + DynamicFormControlEventType, + isDynamicFormControlEvent, +} from './dynamic-form-control-event'; +import { DynamicFormControl } from './dynamic-form-control-interface'; @Directive({ - standalone: true + standalone: true, }) // tslint:disable-next-line:directive-class-suffix export abstract class DynamicFormControlContainerComponent implements OnChanges, OnInit, OnDestroy { - private _hasFocus = false; + private _hasFocus = false; - context: DynamicFormArrayGroupModel | null = null; - control!: UntypedFormControl; - group!: UntypedFormGroup; - hostClass?: string[]; - klass?: string; - layout?: DynamicFormLayout; - model!: DynamicFormControlModel; + context: DynamicFormArrayGroupModel | null = null; + control!: UntypedFormControl; + group!: UntypedFormGroup; + hostClass?: string[]; + klass?: string; + layout?: DynamicFormLayout; + model!: DynamicFormControlModel; - contentTemplateList?: QueryList; - inputTemplateList?: QueryList; + contentTemplateList?: QueryList; + inputTemplateList?: QueryList; - blur!: EventEmitter; - change!: EventEmitter; - customEvent?: EventEmitter; - focus!: EventEmitter; + blur!: EventEmitter; + change!: EventEmitter; + customEvent?: EventEmitter; + focus!: EventEmitter; - componentViewContainerRef!: ViewContainerRef; + componentViewContainerRef!: ViewContainerRef; - protected componentRef!: ComponentRef; - protected componentSubscriptions: Subscription[] = []; - protected controlLayout?: DynamicFormControlLayout; - protected subscriptions: Subscription[] = []; + protected componentRef!: ComponentRef; + protected componentSubscriptions: Subscription[] = []; + protected controlLayout?: DynamicFormControlLayout; + protected subscriptions: Subscription[] = []; - protected constructor(protected changeDetectorRef: ChangeDetectorRef, + protected constructor(protected changeDetectorRef: ChangeDetectorRef, protected componentFactoryResolver: ComponentFactoryResolver, protected layoutService: DynamicFormLayoutService, protected validationService: DynamicFormValidationService, protected componentService: DynamicFormComponentService, protected relationService: DynamicFormRelationService) { - } - - ngOnChanges(changes: SimpleChanges): void { - const groupChange = (changes as Pick).group; - const layoutChange = (changes as Pick).layout; - const modelChange = (changes as Pick).model; + } - if (layoutChange || modelChange) { - this.onLayoutOrModelChange(); - } + ngOnChanges(changes: SimpleChanges): void { + const groupChange = (changes as Pick).group; + const layoutChange = (changes as Pick).layout; + const modelChange = (changes as Pick).model; - if (modelChange) { - this.onModelChange(); - } - - if (groupChange || modelChange) { - this.onGroupOrModelChange(); - } + if (layoutChange || modelChange) { + this.onLayoutOrModelChange(); } - ngOnInit(): void { - this.subscriptions.push(this.control.statusChanges.pipe( - bufferCount(2, 1), - map(states => states[0]), - filter(previousState => previousState === "PENDING") - ).subscribe(_status => this.markForCheck())); + if (modelChange) { + this.onModelChange(); } - ngOnDestroy(): void { - this.destroyFormControlComponent(); - this.unsubscribe(); + if (groupChange || modelChange) { + this.onGroupOrModelChange(); } + } + + ngOnInit(): void { + this.subscriptions.push(this.control.statusChanges.pipe( + bufferCount(2, 1), + map(states => states[0]), + filter(previousState => previousState === 'PENDING'), + ).subscribe(_status => this.markForCheck())); + } + + ngOnDestroy(): void { + this.destroyFormControlComponent(); + this.unsubscribe(); + } abstract get componentType(): Type | null; get id(): string { - return this.layoutService.getElementId(this.model); + return this.layoutService.getElementId(this.model); } get hasFocus(): boolean { - return this._hasFocus; + return this._hasFocus; } get isInvalid(): boolean { - return this.control.invalid; + return this.control.invalid; } get isValid(): boolean { - return this.control.valid; + return this.control.valid; } get errorMessages(): string[] { - return this.validationService.createErrorMessages(this.control, this.model); + return this.validationService.createErrorMessages(this.control, this.model); } get showErrorMessages(): boolean { - return this.validationService.showErrorMessages(this.control, this.model, this.hasFocus); + return this.validationService.showErrorMessages(this.control, this.model, this.hasFocus); } get hasLabel(): boolean { - return isString(this.model.label); + return isString(this.model.label); } get hasHint(): boolean { - return isString((this.model as DynamicFormValueControlModel).hint); + return isString((this.model as DynamicFormValueControlModel).hint); } get hint(): string | null { - return (this.model as DynamicFormValueControlModel).hint ?? null; + return (this.model as DynamicFormValueControlModel).hint ?? null; } get isCheckbox(): boolean { - return this.model.type === DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX; + return this.model.type === DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX; } get templates(): QueryList | undefined { - return this.inputTemplateList !== undefined ? this.inputTemplateList : this.contentTemplateList; + return this.inputTemplateList !== undefined ? this.inputTemplateList : this.contentTemplateList; } get startTemplate(): DynamicTemplateDirective | undefined { - return this.model.type !== DYNAMIC_FORM_CONTROL_TYPE_ARRAY ? - this.layoutService.getStartTemplate(this.model, this.templates) : undefined; + return this.model.type !== DYNAMIC_FORM_CONTROL_TYPE_ARRAY ? + this.layoutService.getStartTemplate(this.model, this.templates) : undefined; } get endTemplate(): DynamicTemplateDirective | undefined { - return this.model.type !== DYNAMIC_FORM_CONTROL_TYPE_ARRAY ? - this.layoutService.getEndTemplate(this.model, this.templates) : undefined; + return this.model.type !== DYNAMIC_FORM_CONTROL_TYPE_ARRAY ? + this.layoutService.getEndTemplate(this.model, this.templates) : undefined; } getClass(context: DynamicFormControlLayoutContext, place: DynamicFormControlLayoutPlace): string { - return this.layoutService.getClass(this.controlLayout, context, place); + return this.layoutService.getClass(this.controlLayout, context, place); } markForCheck(): void { - this.changeDetectorRef.markForCheck(); + this.changeDetectorRef.markForCheck(); - const component = this.componentRef && this.componentRef.instance; + const component = this.componentRef && this.componentRef.instance; if (component && 'markForCheck' in component && typeof component.markForCheck === 'function') { component.markForCheck(); @@ -185,177 +197,181 @@ export abstract class DynamicFormControlContainerComponent implements OnChanges, } protected createFormControlComponent(): void { - const componentType = this.componentType; - - if (componentType !== null) { - const componentFactory = this.componentFactoryResolver.resolveComponentFactory(componentType); + const componentType = this.componentType; - this.componentViewContainerRef.clear(); - this.componentRef = this.componentViewContainerRef.createComponent(componentFactory); + if (componentType !== null) { + const componentFactory = this.componentFactoryResolver.resolveComponentFactory(componentType); - const component = this.componentRef.instance; + this.componentViewContainerRef.clear(); + this.componentRef = this.componentViewContainerRef.createComponent(componentFactory); - component.formLayout = this.layout; - component.group = this.group; - component.layout = this.controlLayout; - component.model = this.model; + const component = this.componentRef.instance; - if (this.templates) { - component.templates = this.templates; - } + component.formLayout = this.layout; + component.group = this.group; + component.layout = this.controlLayout; + component.model = this.model; - this.componentSubscriptions.push(component.blur.subscribe(($event: any) => this.onBlur($event))); - this.componentSubscriptions.push(component.change.subscribe(($event: any) => this.onChange($event))); - this.componentSubscriptions.push(component.focus.subscribe(($event: any) => this.onFocus($event))); + if (this.templates) { + component.templates = this.templates; + } - if (component.customEvent !== undefined) { - this.componentSubscriptions.push( - component.customEvent.subscribe(($event: any) => this.onCustomEvent($event))); - } + this.componentSubscriptions.push(component.blur.subscribe(($event: any) => this.onBlur($event))); + this.componentSubscriptions.push(component.change.subscribe(($event: any) => this.onChange($event))); + this.componentSubscriptions.push(component.focus.subscribe(($event: any) => this.onFocus($event))); - this.registerFormControlComponentRef(this.componentRef); + if (component.customEvent !== undefined) { + this.componentSubscriptions.push( + component.customEvent.subscribe(($event: any) => this.onCustomEvent($event))); } + + this.registerFormControlComponentRef(this.componentRef); + } } protected destroyFormControlComponent(): void { - if (this.componentRef) { - this.componentSubscriptions.forEach(subscription => subscription.unsubscribe()); - this.componentSubscriptions = []; + if (this.componentRef) { + this.componentSubscriptions.forEach(subscription => subscription.unsubscribe()); + this.componentSubscriptions = []; - this.unregisterFormControlComponentRef(); - this.componentRef.destroy(); - } + this.unregisterFormControlComponentRef(); + this.componentRef.destroy(); + } } protected createDynamicFormControlEvent($event: any, type: string): DynamicFormControlEvent { - return {$event, context: this.context, control: this.control, group: this.group, model: this.model, type}; + return { $event, context: this.context, control: this.control, group: this.group, model: this.model, type }; } unsubscribe(): void { - // this.componentSubscriptions.forEach(subscription => subscription.unsubscribe()); - // this.componentSubscriptions = []; + // this.componentSubscriptions.forEach(subscription => subscription.unsubscribe()); + // this.componentSubscriptions = []; - this.subscriptions.forEach(subscription => subscription.unsubscribe()); - this.subscriptions = []; + this.subscriptions.forEach(subscription => subscription.unsubscribe()); + this.subscriptions = []; } onControlValueChanges(value: any): void { - if (this.model instanceof DynamicFormValueControlModel && this.model.value !== value) { - this.model.value = value; - } + if (this.model instanceof DynamicFormValueControlModel && this.model.value !== value) { + this.model.value = value; + } } onModelValueUpdates(value: any): void { - if (this.control.value !== value) { - this.control.setValue(value); - } + if (this.control.value !== value) { + this.control.setValue(value); + } } onModelDisabledUpdates(disabled: boolean): void { - disabled ? this.control.disable() : this.control.enable(); + if (disabled) { + this.control.disable(); + } else { + this.control.enable(); + } } onLayoutOrModelChange(): void { - this.controlLayout = this.layoutService.findByModel(this.model, this.layout) ?? this.model.layout as DynamicFormControlLayout; - this.klass = `${Array.isArray(this.hostClass) ? this.hostClass.join(" ") : ""} ${this.layoutService.getHostClass(this.controlLayout)}`; + this.controlLayout = this.layoutService.findByModel(this.model, this.layout) ?? this.model.layout as DynamicFormControlLayout; + this.klass = `${Array.isArray(this.hostClass) ? this.hostClass.join(' ') : ''} ${this.layoutService.getHostClass(this.controlLayout)}`; } onModelChange(): void { - this.destroyFormControlComponent(); - this.createFormControlComponent(); + this.destroyFormControlComponent(); + this.createFormControlComponent(); } onGroupOrModelChange(): void { - if (this.model) { - this.unsubscribe(); + if (this.model) { + this.unsubscribe(); - if (this.group) { - this.control = this.group.get(this.model.id) as UntypedFormControl; - this.subscriptions.push(this.control.valueChanges.subscribe(value => this.onControlValueChanges(value))); - } + if (this.group) { + this.control = this.group.get(this.model.id) as UntypedFormControl; + this.subscriptions.push(this.control.valueChanges.subscribe(value => this.onControlValueChanges(value))); + } - this.subscriptions.push(this.model.disabledChanges.subscribe(value => this.onModelDisabledUpdates(value))); + this.subscriptions.push(this.model.disabledChanges.subscribe(value => this.onModelDisabledUpdates(value))); - if (this.model instanceof DynamicFormValueControlModel) { - const model = this.model as DynamicFormValueControlModel; + if (this.model instanceof DynamicFormValueControlModel) { + const model = this.model as DynamicFormValueControlModel; - this.subscriptions.push(model.valueChanges.subscribe(value => this.onModelValueUpdates(value))); - } + this.subscriptions.push(model.valueChanges.subscribe(value => this.onModelValueUpdates(value))); + } - if (this.model.relations.length > 0) { - this.subscriptions.push(...this.relationService.subscribeRelations(this.model, this.group, this.control)); - } + if (this.model.relations.length > 0) { + this.subscriptions.push(...this.relationService.subscribeRelations(this.model, this.group, this.control)); } + } } - + // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents onChange($event: Event | DynamicFormControlEvent | any): void { - if ($event instanceof Event) { // native HTML5 change event - if (this.model.type === DYNAMIC_FORM_CONTROL_TYPE_INPUT) { - const model = this.model as DynamicInputModel; + if ($event instanceof Event) { // native HTML5 change event + if (this.model.type === DYNAMIC_FORM_CONTROL_TYPE_INPUT) { + const model = this.model as DynamicInputModel; - if (model.inputType === DYNAMIC_FORM_CONTROL_INPUT_TYPE_FILE) { - const inputElement: any = $event.target; + if (model.inputType === DYNAMIC_FORM_CONTROL_INPUT_TYPE_FILE) { + const inputElement: any = $event.target; - model.files = inputElement.files as FileList; - } - } + model.files = inputElement.files as FileList; + } + } - this.change.emit(this.createDynamicFormControlEvent($event, DynamicFormControlEventType.Change)); + this.change.emit(this.createDynamicFormControlEvent($event, DynamicFormControlEventType.Change)); - } else if (isDynamicFormControlEvent($event)) { // event bypass - this.change.emit($event); + } else if (isDynamicFormControlEvent($event)) { // event bypass + this.change.emit($event); - } else { // custom library value change event - this.change.emit(this.createDynamicFormControlEvent($event, DynamicFormControlEventType.Change)); - } + } else { // custom library value change event + this.change.emit(this.createDynamicFormControlEvent($event, DynamicFormControlEventType.Change)); + } } - + // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents onBlur($event: FocusEvent | DynamicFormControlEvent | any): void { - if (isDynamicFormControlEvent($event)) { // event bypass - this.blur.emit($event); + if (isDynamicFormControlEvent($event)) { // event bypass + this.blur.emit($event); - } else { // native HTML 5 or UI library blur event - this._hasFocus = false; - this.blur.emit(this.createDynamicFormControlEvent($event, DynamicFormControlEventType.Blur)); - } + } else { // native HTML 5 or UI library blur event + this._hasFocus = false; + this.blur.emit(this.createDynamicFormControlEvent($event, DynamicFormControlEventType.Blur)); + } } - + // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents onFocus($event: FocusEvent | DynamicFormControlEvent | any): void { - if (isDynamicFormControlEvent($event)) { // event bypass - this.focus.emit($event); + if (isDynamicFormControlEvent($event)) { // event bypass + this.focus.emit($event); - } else { // native HTML 5 or UI library focus event - this._hasFocus = true; - this.focus.emit(this.createDynamicFormControlEvent($event, DynamicFormControlEventType.Focus)); - } + } else { // native HTML 5 or UI library focus event + this._hasFocus = true; + this.focus.emit(this.createDynamicFormControlEvent($event, DynamicFormControlEventType.Focus)); + } } onCustomEvent($event: DynamicFormControlEvent | DynamicFormControlCustomEvent): void { - const emitter = this.customEvent as EventEmitter; + const emitter = this.customEvent as EventEmitter; - if (isDynamicFormControlEvent($event)) { // child event bypass - emitter.emit($event); + if (isDynamicFormControlEvent($event)) { // child event bypass + emitter.emit($event); - } else { // native UI library custom event - emitter.emit(this.createDynamicFormControlEvent($event.customEvent, $event.customEventType)); - } + } else { // native UI library custom event + emitter.emit(this.createDynamicFormControlEvent($event.customEvent, $event.customEventType)); + } } private registerFormControlComponentRef(ref: ComponentRef): void { - if (this.context instanceof DynamicFormArrayGroupModel) { - this.componentService.registerFormControl(this.model, ref, this.context.index); + if (this.context instanceof DynamicFormArrayGroupModel) { + this.componentService.registerFormControl(this.model, ref, this.context.index); - } else { - this.componentService.registerFormControl(this.model, ref); - } + } else { + this.componentService.registerFormControl(this.model, ref); + } } private unregisterFormControlComponentRef(): void { - if (this.context instanceof DynamicFormArrayGroupModel) { - this.componentService.unregisterFormControl(this.model.id, this.context.index); + if (this.context instanceof DynamicFormArrayGroupModel) { + this.componentService.unregisterFormControl(this.model.id, this.context.index); - } else { - this.componentService.unregisterFormControl(this.model.id); - } + } else { + this.componentService.unregisterFormControl(this.model.id); + } } } diff --git a/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-event.ts b/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-event.ts index b3b5b677625..4d5157ddbd1 100644 --- a/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-event.ts +++ b/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-event.ts @@ -1,16 +1,21 @@ -import { UntypedFormControl, UntypedFormGroup } from "@angular/forms"; -import { DynamicFormControlModel } from "../model/dynamic-form-control.model"; -import { DynamicFormArrayGroupModel } from "../model/form-array/dynamic-form-array.model"; -import { isObject } from "../utils/core.utils"; +import { + UntypedFormControl, + UntypedFormGroup, +} from '@angular/forms'; + +import { DynamicFormControlModel } from '../model/dynamic-form-control.model'; +import { DynamicFormArrayGroupModel } from '../model/form-array/dynamic-form-array.model'; +import { isObject } from '../utils/core.utils'; export enum DynamicFormControlEventType { - Blur = "blur", - Change = "change", - Focus = "focus" + Blur = 'blur', + Change = 'change', + Focus = 'focus' } export interface DynamicFormControlEvent { - $event: Event | FocusEvent | DynamicFormControlEvent | any; + // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents + $event: Event | FocusEvent | DynamicFormControlEvent | any; context: DynamicFormArrayGroupModel | null; control: UntypedFormControl; group: UntypedFormGroup; @@ -24,5 +29,5 @@ export interface DynamicFormControlCustomEvent { } export function isDynamicFormControlEvent($event: any): $event is DynamicFormControlEvent { - return isObject($event) && $event.hasOwnProperty("$event"); + return isObject($event) && $event.hasOwnProperty('$event'); } diff --git a/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-interface.ts b/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-interface.ts index 09482123334..7a59f7af919 100644 --- a/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-interface.ts +++ b/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-interface.ts @@ -1,10 +1,14 @@ -import { EventEmitter, QueryList } from "@angular/core"; -import { UntypedFormGroup } from "@angular/forms"; -import { DynamicFormControlCustomEvent } from "./dynamic-form-control-event"; -import { DynamicFormLayout } from "../service/dynamic-form-layout.service"; -import { DynamicFormControlModel } from "../model/dynamic-form-control.model"; -import { DynamicFormControlLayout } from "../model/misc/dynamic-form-control-layout.model"; -import { DynamicTemplateDirective } from "../directive/dynamic-template.directive"; +import { + EventEmitter, + QueryList, +} from '@angular/core'; +import { UntypedFormGroup } from '@angular/forms'; + +import { DynamicTemplateDirective } from '../directive/dynamic-template.directive'; +import { DynamicFormControlModel } from '../model/dynamic-form-control.model'; +import { DynamicFormControlLayout } from '../model/misc/dynamic-form-control-layout.model'; +import { DynamicFormLayout } from '../service/dynamic-form-layout.service'; +import { DynamicFormControlCustomEvent } from './dynamic-form-control-event'; export interface DynamicFormControl { formLayout?: DynamicFormLayout; diff --git a/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-with-template-interface.ts b/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-with-template-interface.ts index c5c758662ef..7d85ab40544 100644 --- a/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-with-template-interface.ts +++ b/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-with-template-interface.ts @@ -1,4 +1,4 @@ -import { DynamicFormControl } from "./dynamic-form-control-interface"; +import { DynamicFormControl } from './dynamic-form-control-interface'; export interface DynamicFormControlWithTemplate extends DynamicFormControl { readonly templateDirectives: Map; diff --git a/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-with-template.component.ts b/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-with-template.component.ts index 43e7543c54f..05f7a9b4444 100644 --- a/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-with-template.component.ts +++ b/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control-with-template.component.ts @@ -1,41 +1,47 @@ -import { AfterViewInit, Directive, QueryList, TemplateRef } from "@angular/core"; -import { DynamicFormControlWithTemplate } from "./dynamic-form-control-with-template-interface"; -import { DynamicTemplateDirective } from "../directive/dynamic-template.directive"; -import { DynamicFormControlComponent } from "./dynamic-form-control.component"; -import { isString } from "../utils/core.utils"; -import { DynamicFormLayoutService } from "../service/dynamic-form-layout.service"; -import { DynamicFormValidationService } from "../service/dynamic-form-validation.service"; +import { + AfterViewInit, + Directive, + QueryList, + TemplateRef, +} from '@angular/core'; + +import { DynamicTemplateDirective } from '../directive/dynamic-template.directive'; +import { DynamicFormLayoutService } from '../service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '../service/dynamic-form-validation.service'; +import { isString } from '../utils/core.utils'; +import { DynamicFormControlComponent } from './dynamic-form-control.component'; +import { DynamicFormControlWithTemplate } from './dynamic-form-control-with-template-interface'; @Directive({ - standalone: true + standalone: true, })// tslint:disable-next-line:directive-class-suffix export abstract class DynamicFormControlWithTemplateComponent extends DynamicFormControlComponent - implements DynamicFormControlWithTemplate, AfterViewInit { + implements DynamicFormControlWithTemplate, AfterViewInit { - readonly templateDirectives!: Map; + readonly templateDirectives!: Map; - templates?: QueryList | DynamicTemplateDirective[]; + templates?: QueryList | DynamicTemplateDirective[]; - protected constructor(protected layoutService: DynamicFormLayoutService, + protected constructor(protected layoutService: DynamicFormLayoutService, protected validationService: DynamicFormValidationService) { - super(layoutService, validationService); - } + super(layoutService, validationService); + } - ngAfterViewInit() { - this.layoutService - .filterTemplatesByModel(this.model, this.templates) - .forEach(template => this.bindTemplate(template)); - } + ngAfterViewInit() { + this.layoutService + .filterTemplatesByModel(this.model, this.templates) + .forEach(template => this.bindTemplate(template)); + } abstract get viewChild(): any; abstract mapTemplate(template: DynamicTemplateDirective): DynamicTemplateDirective | TemplateRef; bindTemplate(template: DynamicTemplateDirective) { - if (isString(template.as) && this.templateDirectives.has(template.as)) { - const property = this.templateDirectives.get(template.as) as string; + if (isString(template.as) && this.templateDirectives.has(template.as)) { + const property = this.templateDirectives.get(template.as) as string; - this.viewChild[property] = this.mapTemplate(template); - } + this.viewChild[property] = this.mapTemplate(template); + } } } diff --git a/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control.component.ts b/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control.component.ts index 46975ae9a8a..2b9025b29d5 100644 --- a/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control.component.ts +++ b/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-control.component.ts @@ -1,112 +1,116 @@ -import { EventEmitter } from "@angular/core"; -import { AbstractControl, UntypedFormGroup } from "@angular/forms"; -import { DynamicFormControl } from "./dynamic-form-control-interface"; -import { DynamicFormControlCustomEvent } from "./dynamic-form-control-event"; -import { DynamicFormControlModel } from "../model/dynamic-form-control.model"; +import { EventEmitter } from '@angular/core'; import { - DynamicFormControlLayout, - DynamicFormControlLayoutContext, - DynamicFormControlLayoutPlace -} from "../model/misc/dynamic-form-control-layout.model"; -import { DynamicFormValidationService } from "../service/dynamic-form-validation.service"; + AbstractControl, + UntypedFormGroup, +} from '@angular/forms'; + +import { DynamicFormControlModel } from '../model/dynamic-form-control.model'; +import { + DynamicFormControlLayout, + DynamicFormControlLayoutContext, + DynamicFormControlLayoutPlace, +} from '../model/misc/dynamic-form-control-layout.model'; import { - DynamicFormLayout, - DynamicFormLayoutService, - DynamicFormControlTemplates -} from "../service/dynamic-form-layout.service"; -import { isString } from "../utils/core.utils"; + DynamicFormControlTemplates, + DynamicFormLayout, + DynamicFormLayoutService, +} from '../service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '../service/dynamic-form-validation.service'; +import { isString } from '../utils/core.utils'; +import { DynamicFormControlCustomEvent } from './dynamic-form-control-event'; +import { DynamicFormControl } from './dynamic-form-control-interface'; export abstract class DynamicFormControlComponent implements DynamicFormControl { - formLayout?: DynamicFormLayout; - group!: UntypedFormGroup; - layout?: DynamicFormControlLayout; - model!: DynamicFormControlModel; - templates?: DynamicFormControlTemplates; + formLayout?: DynamicFormLayout; + group!: UntypedFormGroup; + layout?: DynamicFormControlLayout; + model!: DynamicFormControlModel; + templates?: DynamicFormControlTemplates; - blur!: EventEmitter; - change!: EventEmitter; - customEvent?: EventEmitter; - focus!: EventEmitter; + blur!: EventEmitter; + change!: EventEmitter; + customEvent?: EventEmitter; + focus!: EventEmitter; - private _hasFocus = false; - - protected constructor(protected layoutService: DynamicFormLayoutService, protected validationService: DynamicFormValidationService) { - } + private _hasFocus = false; - get control(): AbstractControl | never { - const control = this.group.get(this.model.id); + protected constructor(protected layoutService: DynamicFormLayoutService, protected validationService: DynamicFormValidationService) { + } - if (control === null) { - throw new Error(`form group does not contain an abstract control with id ${this.model.id}`); - } + get control(): AbstractControl | never { + const control = this.group.get(this.model.id); - return control; + if (control === null) { + throw new Error(`form group does not contain an abstract control with id ${this.model.id}`); } - get id(): string { - return this.layoutService.getElementId(this.model); - } + return control; + } - get hasFocus(): boolean { - return this._hasFocus; - } + get id(): string { + return this.layoutService.getElementId(this.model); + } - get isInvalid(): boolean { - return this.control.invalid; - } + get hasFocus(): boolean { + return this._hasFocus; + } - get isValid(): boolean { - return this.control.valid; - } + get isInvalid(): boolean { + return this.control.invalid; + } - get errorMessages(): string[] { - return this.validationService.createErrorMessages(this.control, this.model); - } + get isValid(): boolean { + return this.control.valid; + } - get showErrorMessages(): boolean { - return this.validationService.showErrorMessages(this.control, this.model, this.hasFocus); - } + get errorMessages(): string[] { + return this.validationService.createErrorMessages(this.control, this.model); + } - getClass(context: DynamicFormControlLayoutContext, place: DynamicFormControlLayoutPlace, - model: DynamicFormControlModel = this.model): string { - const controlLayout = model === this.model ? this.layout : - this.layoutService.findByModel(model, this.formLayout) ?? model.layout as DynamicFormControlLayout; + get showErrorMessages(): boolean { + return this.validationService.showErrorMessages(this.control, this.model, this.hasFocus); + } - return this.layoutService.getClass(controlLayout, context, place); - } + getClass(context: DynamicFormControlLayoutContext, place: DynamicFormControlLayoutPlace, + model: DynamicFormControlModel = this.model): string { + const controlLayout = model === this.model ? this.layout : + this.layoutService.findByModel(model, this.formLayout) ?? model.layout as DynamicFormControlLayout; - onBlur($event: any) { - if ($event instanceof Event) { - $event.stopPropagation(); - } + return this.layoutService.getClass(controlLayout, context, place); + } - this._hasFocus = false; - this.blur.emit($event); + onBlur($event: any) { + if ($event instanceof Event) { + $event.stopPropagation(); } - onChange($event: any) { - if ($event instanceof Event) { - $event.stopPropagation(); - } + this._hasFocus = false; + this.blur.emit($event); + } - this.change.emit($event); + onChange($event: any) { + if ($event instanceof Event) { + $event.stopPropagation(); } - onCustomEvent($event: any, type: string | null = null, bypass: boolean = false) { - if (bypass) { - this.customEvent?.emit($event); + this.change.emit($event); + } - } else if (isString(type)) { - this.customEvent?.emit({customEvent: $event, customEventType: type}); - } - } + onCustomEvent($event: any, type: string | null = null, bypass: boolean = false) { + if (bypass) { + this.customEvent?.emit($event); - onFocus($event: any) { - if ($event instanceof Event) { - $event.stopPropagation(); - } + } else if (isString(type)) { + this.customEvent?.emit({ customEvent: $event, customEventType: type }); + } + } - this._hasFocus = true; - this.focus.emit($event); + onFocus($event: any) { + if ($event instanceof Event) { + $event.stopPropagation(); } + + this._hasFocus = true; + this.focus.emit($event); + } } diff --git a/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-group.component.ts b/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-group.component.ts index c82674609e4..aec2daf2922 100644 --- a/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-group.component.ts +++ b/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form-group.component.ts @@ -1,15 +1,16 @@ -import { DynamicFormControlComponent } from "./dynamic-form-control.component"; -import { DynamicFormGroupModel } from "../model/form-group/dynamic-form-group.model"; -import { QueryList } from "@angular/core"; -import { DynamicFormControlContainerComponent } from "./dynamic-form-control-container.component"; +import { QueryList } from '@angular/core'; + +import { DynamicFormGroupModel } from '../model/form-group/dynamic-form-group.model'; +import { DynamicFormControlComponent } from './dynamic-form-control.component'; +import { DynamicFormControlContainerComponent } from './dynamic-form-control-container.component'; export abstract class DynamicFormGroupComponent extends DynamicFormControlComponent { - components!: QueryList; - model!: DynamicFormGroupModel; + components!: QueryList; + model!: DynamicFormGroupModel; - markForCheck() { - if (this.components instanceof QueryList) { - this.components.forEach(component => component.markForCheck()); - } + markForCheck() { + if (this.components instanceof QueryList) { + this.components.forEach(component => component.markForCheck()); } + } } diff --git a/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form.component.ts b/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form.component.ts index 7a2f8ac4b05..42f8c602723 100644 --- a/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form.component.ts +++ b/src/external-libraries/ng-dynamic-forms/core/component/dynamic-form.component.ts @@ -1,69 +1,80 @@ -import { ChangeDetectorRef, Directive, EventEmitter, OnDestroy, OnInit, QueryList} from "@angular/core"; -import { UntypedFormGroup } from "@angular/forms"; -import { DynamicFormControlEvent } from "./dynamic-form-control-event"; -import { DynamicFormControlModel } from "../model/dynamic-form-control.model"; -import { DynamicTemplateDirective } from "../directive/dynamic-template.directive"; -import { DynamicFormLayout } from "../service/dynamic-form-layout.service"; -import { DynamicFormComponentService, IDynamicFormControlContainer } from "../service/dynamic-form-component.service"; -import { DynamicFormModel } from "../model/form-group/dynamic-form-group.model"; +import { + ChangeDetectorRef, + Directive, + EventEmitter, + OnDestroy, + OnInit, + QueryList, +} from '@angular/core'; +import { UntypedFormGroup } from '@angular/forms'; + +import { DynamicTemplateDirective } from '../directive/dynamic-template.directive'; +import { DynamicFormControlModel } from '../model/dynamic-form-control.model'; +import { DynamicFormModel } from '../model/form-group/dynamic-form-group.model'; +import { + DynamicFormComponentService, + IDynamicFormControlContainer, +} from '../service/dynamic-form-component.service'; +import { DynamicFormLayout } from '../service/dynamic-form-layout.service'; +import { DynamicFormControlEvent } from './dynamic-form-control-event'; @Directive({ - standalone: true + standalone: true, })// tslint:disable-next-line:directive-class-suffix export abstract class DynamicFormComponent implements OnInit, OnDestroy { - group!: UntypedFormGroup; - model!: DynamicFormModel; - layout?: DynamicFormLayout; + group!: UntypedFormGroup; + model!: DynamicFormModel; + layout?: DynamicFormLayout; - components!: QueryList; - templates!: QueryList; + components!: QueryList; + templates!: QueryList; - blur?: EventEmitter; - change?: EventEmitter; - focus?: EventEmitter; + blur?: EventEmitter; + change?: EventEmitter; + focus?: EventEmitter; - protected constructor(protected changeDetectorRef: ChangeDetectorRef, protected componentService: DynamicFormComponentService) { - } + protected constructor(protected changeDetectorRef: ChangeDetectorRef, protected componentService: DynamicFormComponentService) { + } - ngOnInit(): void { - this.componentService.registerForm(this); - } + ngOnInit(): void { + this.componentService.registerForm(this); + } - ngOnDestroy(): void { - this.componentService.unregisterForm(this); - } + ngOnDestroy(): void { + this.componentService.unregisterForm(this); + } - trackByFn(_index: number, model: DynamicFormControlModel): string { - return model.id; - } + trackByFn(_index: number, model: DynamicFormControlModel): string { + return model.id; + } - markForCheck(): void { - this.changeDetectorRef.markForCheck(); + markForCheck(): void { + this.changeDetectorRef.markForCheck(); - if (this.components instanceof QueryList) { - this.components.forEach(component => component.markForCheck()); - } + if (this.components instanceof QueryList) { + this.components.forEach(component => component.markForCheck()); } + } - detectChanges(): void { - this.changeDetectorRef.detectChanges(); - } + detectChanges(): void { + this.changeDetectorRef.detectChanges(); + } - onBlur($event: DynamicFormControlEvent) { - this.blur?.emit($event); - } + onBlur($event: DynamicFormControlEvent) { + this.blur?.emit($event); + } - onChange($event: DynamicFormControlEvent) { - this.change?.emit($event); - } + onChange($event: DynamicFormControlEvent) { + this.change?.emit($event); + } - onFocus($event: DynamicFormControlEvent) { - this.focus?.emit($event); - } + onFocus($event: DynamicFormControlEvent) { + this.focus?.emit($event); + } - onCustomEvent($event: DynamicFormControlEvent, customEventEmitter: EventEmitter) { - customEventEmitter.emit($event); - } + onCustomEvent($event: DynamicFormControlEvent, customEventEmitter: EventEmitter) { + customEventEmitter.emit($event); + } } diff --git a/src/external-libraries/ng-dynamic-forms/core/decorator/serializable.decorator.ts b/src/external-libraries/ng-dynamic-forms/core/decorator/serializable.decorator.ts index d89c12ec2bc..e2b1686be5a 100644 --- a/src/external-libraries/ng-dynamic-forms/core/decorator/serializable.decorator.ts +++ b/src/external-libraries/ng-dynamic-forms/core/decorator/serializable.decorator.ts @@ -1,8 +1,8 @@ -import "reflect-metadata"; +import 'reflect-metadata'; declare let Reflect: any; -export const METADATA_KEY_SERIALIZABLE = "SERIALIZABLE"; +export const METADATA_KEY_SERIALIZABLE = 'SERIALIZABLE'; export interface SerializableProperty { key: string; @@ -10,32 +10,32 @@ export interface SerializableProperty { } export function serializable(name?: string): (target: any, key: string) => void { - return (target, key) => { - Reflect.defineMetadata(METADATA_KEY_SERIALIZABLE, {key, name: name || key}, target, key); - }; + return (target, key) => { + Reflect.defineMetadata(METADATA_KEY_SERIALIZABLE, { key, name: name || key }, target, key); + }; } export function getSerializables(target: any): SerializableProperty[] { - const serializables = []; + const serializables = []; - // tslint:disable-next-line:forin - for (const key in target) { - const metadata = Reflect.getMetadata(METADATA_KEY_SERIALIZABLE, target, key); + // eslint-disable-next-line guard-for-in + for (const key in target) { + const metadata = Reflect.getMetadata(METADATA_KEY_SERIALIZABLE, target, key); - if (metadata) { - serializables.push(metadata); - } + if (metadata) { + serializables.push(metadata); } + } - return serializables; + return serializables; } export function serialize(target: any, prototype?: any): object { - return getSerializables(prototype || target).reduce((prev: any, prop: SerializableProperty) => { + return getSerializables(prototype || target).reduce((prev: any, prop: SerializableProperty) => { - prev[prop.name] = target[prop.key]; + prev[prop.name] = target[prop.key]; - return prev; + return prev; - }, {}); + }, {}); } diff --git a/src/external-libraries/ng-dynamic-forms/core/directive/dynamic-list.directive.spec.ts b/src/external-libraries/ng-dynamic-forms/core/directive/dynamic-list.directive.spec.ts index b7ae827cd4c..8ea90c35a90 100644 --- a/src/external-libraries/ng-dynamic-forms/core/directive/dynamic-list.directive.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/directive/dynamic-list.directive.spec.ts @@ -1,42 +1,50 @@ -import { TestBed, ComponentFixture } from "@angular/core/testing"; -import { Component, DebugElement } from "@angular/core"; -import { By } from "@angular/platform-browser"; -import { DynamicListDirective } from "./dynamic-list.directive"; +import { + Component, + DebugElement, +} from '@angular/core'; +import { + ComponentFixture, + TestBed, +} from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; + +import { DynamicListDirective } from './dynamic-list.directive'; @Component({ - template: ` + template: `
`, - standalone: true, - imports: [DynamicListDirective] + imports: [ + DynamicListDirective, + ], }) class TestComponent { - testList1 = null; - testList2 = "list"; + testList1 = null; + testList2 = 'list'; } -describe("DynamicListDirective test suite", () => { - let fixture: ComponentFixture; - let directives: DebugElement[]; +describe('DynamicListDirective test suite', () => { + let fixture: ComponentFixture; + let directives: DebugElement[]; - beforeEach(() => { - fixture = TestBed.configureTestingModule({ - imports: [TestComponent] - }).createComponent(TestComponent); + beforeEach(() => { + fixture = TestBed.configureTestingModule({ + imports: [TestComponent], + }).createComponent(TestComponent); - fixture.detectChanges(); + fixture.detectChanges(); - directives = fixture.debugElement.queryAll(By.directive(DynamicListDirective)); - }); + directives = fixture.debugElement.queryAll(By.directive(DynamicListDirective)); + }); - it("should have two directives", () => { - expect(directives.length).toBe(2); - }); + it('should have two directives', () => { + expect(directives.length).toBe(2); + }); - it("should have one set list", () => { - expect(directives[0].attributes["list"]).toBeUndefined(); - expect(directives[1].attributes["list"]).toEqual(fixture.componentInstance.testList2); - }); + it('should have one set list', () => { + expect(directives[0].attributes.list).toBeUndefined(); + expect(directives[1].attributes.list).toEqual(fixture.componentInstance.testList2); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/directive/dynamic-list.directive.ts b/src/external-libraries/ng-dynamic-forms/core/directive/dynamic-list.directive.ts index 0b56f3bb582..1d4d22b3118 100644 --- a/src/external-libraries/ng-dynamic-forms/core/directive/dynamic-list.directive.ts +++ b/src/external-libraries/ng-dynamic-forms/core/directive/dynamic-list.directive.ts @@ -1,19 +1,26 @@ -import { Directive, ElementRef, Input, Renderer2, AfterViewInit } from "@angular/core"; -import { isString } from "../utils/core.utils"; +import { + AfterViewInit, + Directive, + ElementRef, + Input, + Renderer2, +} from '@angular/core'; + +import { isString } from '../utils/core.utils'; @Directive({ - selector: "[dynamicList]", - standalone: true + selector: '[dynamicList]', + standalone: true, }) export class DynamicListDirective implements AfterViewInit { - @Input("dynamicList") listId?: string; + @Input('dynamicList') listId?: string; constructor(private elementRef: ElementRef, private renderer: Renderer2) { } ngAfterViewInit() { - if (isString(this.listId)) { - this.renderer.setAttribute(this.elementRef.nativeElement, "list", this.listId as string); - } + if (isString(this.listId)) { + this.renderer.setAttribute(this.elementRef.nativeElement, 'list', this.listId as string); + } } } diff --git a/src/external-libraries/ng-dynamic-forms/core/directive/dynamic-template.directive.spec.ts b/src/external-libraries/ng-dynamic-forms/core/directive/dynamic-template.directive.spec.ts index ad8a2ecd870..3a45842dff4 100644 --- a/src/external-libraries/ng-dynamic-forms/core/directive/dynamic-template.directive.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/directive/dynamic-template.directive.spec.ts @@ -1,35 +1,45 @@ -import { TestBed, ComponentFixture } from "@angular/core/testing"; -import { Component, TemplateRef } from "@angular/core"; -import { DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT, DynamicTemplateDirective } from "./dynamic-template.directive"; +import { + Component, + TemplateRef, +} from '@angular/core'; +import { + ComponentFixture, + TestBed, +} from '@angular/core/testing'; + +import { + DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT, + DynamicTemplateDirective, +} from './dynamic-template.directive'; @Component({ - template: ` + template: ` `, - standalone: true }) class TestComponent { } -describe("DynamicTemplateDirective test suite", () => { - let directive: DynamicTemplateDirective; - let fixture: ComponentFixture; +describe('DynamicTemplateDirective test suite', () => { + let directive: DynamicTemplateDirective; + let fixture: ComponentFixture; - beforeEach(() => { - directive = new DynamicTemplateDirective({} as TemplateRef); + beforeEach(() => { + directive = new DynamicTemplateDirective({} as TemplateRef); - fixture = TestBed.configureTestingModule({ - imports: [DynamicTemplateDirective, TestComponent] -}).createComponent(TestComponent); + fixture = TestBed.configureTestingModule({ + imports: [DynamicTemplateDirective, TestComponent], + }).createComponent(TestComponent); - fixture.detectChanges(); - }); + fixture.detectChanges(); + }); - it("should be initialized correctly", () => { - expect(directive.align === DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT.End).toBe(true); - expect(directive.as).toBeNull(); - expect(directive.modelId).toBeUndefined(); - expect(directive.modelType).toBeUndefined(); - }); + it('should be initialized correctly', () => { + // eslint:disable@typescript-eslint/no-unsafe-enum-comparison + expect(directive.align === DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT.End).toBe(true); + expect(directive.as).toBeNull(); + expect(directive.modelId).toBeUndefined(); + expect(directive.modelType).toBeUndefined(); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/directive/dynamic-template.directive.ts b/src/external-libraries/ng-dynamic-forms/core/directive/dynamic-template.directive.ts index a55146d56ac..ea9f3337ae7 100644 --- a/src/external-libraries/ng-dynamic-forms/core/directive/dynamic-template.directive.ts +++ b/src/external-libraries/ng-dynamic-forms/core/directive/dynamic-template.directive.ts @@ -1,16 +1,20 @@ -import { Directive, Input, TemplateRef } from "@angular/core"; +import { + Directive, + Input, + TemplateRef, +} from '@angular/core'; export enum DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT { - Start = "START", - End = "END" + Start = 'START', + End = 'END' } @Directive({ - selector: "ng-template[modelId],ng-template[modelType]", - standalone: true + selector: 'ng-template[modelId],ng-template[modelType]', + standalone: true, }) export class DynamicTemplateDirective { - @Input() align: string = DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT.End; + @Input() align: DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT = DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT.End; @Input() as: string | null = null; @Input() index?: number; @Input() modelId?: string; diff --git a/src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model.spec.ts b/src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model.spec.ts index d8c22eec828..dc93d9e83a1 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model.spec.ts @@ -1,87 +1,90 @@ -import { DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP, DynamicCheckboxGroupModel } from "./dynamic-checkbox-group.model"; -import { DynamicCheckboxModel } from "./dynamic-checkbox.model"; - - -describe("DynamicCheckboxGroupModel test suite", () => { - let model: DynamicCheckboxGroupModel; - const config = { - id: "checkboxGroup", - group: [ - new DynamicCheckboxModel( - { - id: "checkbox1", - label: "Checkbox 1", - value: true - } - ), - new DynamicCheckboxModel( - { - id: "checkbox2", - label: "Checkbox 2", - value: false - } - ), - new DynamicCheckboxModel( - { - id: "checkbox3", - label: "Checkbox 3", - value: false - } - ) - ] - }; - - beforeEach(() => model = new DynamicCheckboxGroupModel(config)); - - it("should initialize correctly", () => { - expect(model.id).toEqual(config.id); - expect(model.group.length).toBe(config.group.length); - expect(model.legend).toBeNull(); - expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP); - expect(model.disabledChanges).toBeDefined(); - }); - - it("should check checkboxes correctly", () => { - model.check(0, 2); - - expect(model.group[0].value).toBe(true); - expect(model.group[2].value).toBe(true); - }); - - it("should check all checkboxes correctly", () => { - model.checkAll(); - - expect(model.group[0].value).toBe(true); - expect(model.group[1].value).toBe(true); - expect(model.group[2].value).toBe(true); - }); - - it("should uncheck checkboxes correctly", () => { - model.uncheck(0, 2); - - expect(model.group[0].value).toBe(false); - expect(model.group[2].value).toBe(false); - }); - - it("should uncheck all checkboxes correctly", () => { - model.uncheckAll(); - - expect(model.group[0].value).toBe(false); - expect(model.group[1].value).toBe(false); - expect(model.group[2].value).toBe(false); - }); - - it("should serialize correctly", () => { - const json = JSON.parse(JSON.stringify(model)); - - expect(json.id).toEqual(model.id); - expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP); - }); - - it("should serialize correctly", () => { - const json = JSON.parse(JSON.stringify(model)); - - expect(json.id).toEqual(model.id); - expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP); - }); +import { DynamicCheckboxModel } from './dynamic-checkbox.model'; +import { + DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP, + DynamicCheckboxGroupModel, +} from './dynamic-checkbox-group.model'; + + +describe('DynamicCheckboxGroupModel test suite', () => { + let model: DynamicCheckboxGroupModel; + const config = { + id: 'checkboxGroup', + group: [ + new DynamicCheckboxModel( + { + id: 'checkbox1', + label: 'Checkbox 1', + value: true, + }, + ), + new DynamicCheckboxModel( + { + id: 'checkbox2', + label: 'Checkbox 2', + value: false, + }, + ), + new DynamicCheckboxModel( + { + id: 'checkbox3', + label: 'Checkbox 3', + value: false, + }, + ), + ], + }; + + beforeEach(() => model = new DynamicCheckboxGroupModel(config)); + + it('should initialize correctly', () => { + expect(model.id).toEqual(config.id); + expect(model.group.length).toBe(config.group.length); + expect(model.legend).toBeNull(); + expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP); + expect(model.disabledChanges).toBeDefined(); + }); + + it('should check checkboxes correctly', () => { + model.check(0, 2); + + expect(model.group[0].value).toBe(true); + expect(model.group[2].value).toBe(true); + }); + + it('should check all checkboxes correctly', () => { + model.checkAll(); + + expect(model.group[0].value).toBe(true); + expect(model.group[1].value).toBe(true); + expect(model.group[2].value).toBe(true); + }); + + it('should uncheck checkboxes correctly', () => { + model.uncheck(0, 2); + + expect(model.group[0].value).toBe(false); + expect(model.group[2].value).toBe(false); + }); + + it('should uncheck all checkboxes correctly', () => { + model.uncheckAll(); + + expect(model.group[0].value).toBe(false); + expect(model.group[1].value).toBe(false); + expect(model.group[2].value).toBe(false); + }); + + it('should serialize correctly', () => { + const json = JSON.parse(JSON.stringify(model)); + + expect(json.id).toEqual(model.id); + expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP); + }); + + it('should serialize correctly', () => { + const json = JSON.parse(JSON.stringify(model)); + + expect(json.id).toEqual(model.id); + expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model.ts index 109530e4c0a..795a0babdf5 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model.ts @@ -1,9 +1,12 @@ -import { DynamicFormGroupModel, DynamicFormGroupModelConfig } from "../form-group/dynamic-form-group.model"; -import { DynamicCheckboxModel } from "./dynamic-checkbox.model"; -import { DynamicFormControlLayout } from "../misc/dynamic-form-control-layout.model"; -import { serializable } from "../../decorator/serializable.decorator"; +import { serializable } from '../../decorator/serializable.decorator'; +import { + DynamicFormGroupModel, + DynamicFormGroupModelConfig, +} from '../form-group/dynamic-form-group.model'; +import { DynamicFormControlLayout } from '../misc/dynamic-form-control-layout.model'; +import { DynamicCheckboxModel } from './dynamic-checkbox.model'; -export const DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP = "CHECKBOX_GROUP"; +export const DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP = 'CHECKBOX_GROUP'; export class DynamicCheckboxGroupModel extends DynamicFormGroupModel { @serializable() group!: DynamicCheckboxModel[]; @@ -11,22 +14,22 @@ export class DynamicCheckboxGroupModel extends DynamicFormGroupModel { @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP; constructor(config: DynamicFormGroupModelConfig, layout?: DynamicFormControlLayout) { - super(config, layout); + super(config, layout); } check(...indices: number[]): void { - indices.forEach(index => this.group[index].checked = true); + indices.forEach(index => this.group[index].checked = true); } uncheck(...indices: number[]): void { - indices.forEach(index => this.group[index].checked = false); + indices.forEach(index => this.group[index].checked = false); } checkAll(): void { - this.group.forEach(model => model.checked = true); + this.group.forEach(model => model.checked = true); } uncheckAll(): void { - this.group.forEach(model => model.checked = false); + this.group.forEach(model => model.checked = false); } } diff --git a/src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model.spec.ts b/src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model.spec.ts index 74d8915f9f4..6df4bcd4f67 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model.spec.ts @@ -1,50 +1,53 @@ -import { DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX, DynamicCheckboxModel } from "./dynamic-checkbox.model"; - -describe("DynamicCheckboxModel test suite", () => { - let model: DynamicCheckboxModel; - const config = { - id: "checkbox", - value: true - }; - - beforeEach(() => model = new DynamicCheckboxModel(config)); - - it("should initialize correctly", () => { - expect(model.asyncValidators).toBeNull(); - expect(model.disabled).toBe(false); - expect(model.hidden).toBe(false); - expect(model.id).toEqual(config.id); - expect(model.indeterminate).toBe(false); - expect(model.label).toBeNull(); - expect(model.labelPosition).toBeNull(); - expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX); - expect(model.validators).toBeNull(); - expect(model.value).toBe(config.value); - expect(model.disabledChanges).toBeDefined(); - expect(model.valueChanges).toBeDefined(); - }); - - it("should get and set checked property correctly", () => { - expect(model.checked).toBe(config.value); - - model.checked = false; - - expect(model.checked).toBe(false); - expect(model.value).toBe(false); - }); - - it("should toggle correctly", () => { - model.toggle(); - - expect(model.checked).toBe(!config.value); - expect(model.value).toBe(!config.value); - }); - - it("should serialize correctly", () => { - const json = JSON.parse(JSON.stringify(model)); - - expect(json.id).toEqual(model.id); - expect(json.value).toBe(model.value); - expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX); - }); +import { + DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX, + DynamicCheckboxModel, +} from './dynamic-checkbox.model'; + +describe('DynamicCheckboxModel test suite', () => { + let model: DynamicCheckboxModel; + const config = { + id: 'checkbox', + value: true, + }; + + beforeEach(() => model = new DynamicCheckboxModel(config)); + + it('should initialize correctly', () => { + expect(model.asyncValidators).toBeNull(); + expect(model.disabled).toBe(false); + expect(model.hidden).toBe(false); + expect(model.id).toEqual(config.id); + expect(model.indeterminate).toBe(false); + expect(model.label).toBeNull(); + expect(model.labelPosition).toBeNull(); + expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX); + expect(model.validators).toBeNull(); + expect(model.value).toBe(config.value); + expect(model.disabledChanges).toBeDefined(); + expect(model.valueChanges).toBeDefined(); + }); + + it('should get and set checked property correctly', () => { + expect(model.checked).toBe(config.value); + + model.checked = false; + + expect(model.checked).toBe(false); + expect(model.value).toBe(false); + }); + + it('should toggle correctly', () => { + model.toggle(); + + expect(model.checked).toBe(!config.value); + expect(model.value).toBe(!config.value); + }); + + it('should serialize correctly', () => { + const json = JSON.parse(JSON.stringify(model)); + + expect(json.id).toEqual(model.id); + expect(json.value).toBe(model.value); + expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model.ts index 2c7c2aaf9d6..c44615681eb 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model.ts @@ -1,9 +1,12 @@ -import { DynamicCheckControlModel, DynamicCheckControlModelConfig } from "../dynamic-check-control.model"; -import { DynamicFormControlLayout } from "../misc/dynamic-form-control-layout.model"; -import { serializable } from "../../decorator/serializable.decorator"; -import { isBoolean } from "../../utils/core.utils"; +import { serializable } from '../../decorator/serializable.decorator'; +import { isBoolean } from '../../utils/core.utils'; +import { + DynamicCheckControlModel, + DynamicCheckControlModelConfig, +} from '../dynamic-check-control.model'; +import { DynamicFormControlLayout } from '../misc/dynamic-form-control-layout.model'; -export const DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX = "CHECKBOX"; +export const DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX = 'CHECKBOX'; export interface DynamicCheckboxModelConfig extends DynamicCheckControlModelConfig { indeterminate?: boolean; @@ -15,8 +18,8 @@ export class DynamicCheckboxModel extends DynamicCheckControlModel { @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX; constructor(config: DynamicCheckboxModelConfig, layout?: DynamicFormControlLayout) { - super(config, layout); + super(config, layout); - this.indeterminate = isBoolean(config.indeterminate) ? config.indeterminate : false; + this.indeterminate = isBoolean(config.indeterminate) ? config.indeterminate : false; } } diff --git a/src/external-libraries/ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model.spec.ts b/src/external-libraries/ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model.spec.ts index b3c66ed91c9..7383109da6c 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model.spec.ts @@ -1,37 +1,40 @@ -import { DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER, DynamicDatePickerModel } from "./dynamic-datepicker.model"; +import { + DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER, + DynamicDatePickerModel, +} from './dynamic-datepicker.model'; -describe("DynamicDatepickerModel test suite", () => { - let model: DynamicDatePickerModel; - const config = { - id: "datepicker", - value: new Date() - }; +describe('DynamicDatepickerModel test suite', () => { + let model: DynamicDatePickerModel; + const config = { + id: 'datepicker', + value: new Date(), + }; - beforeEach(() => model = new DynamicDatePickerModel(config)); + beforeEach(() => model = new DynamicDatePickerModel(config)); - it("should initialize correctly", () => { + it('should initialize correctly', () => { - expect(model.disabled).toBe(false); - expect(model.focusedDate).toBeNull(); - expect(model.hidden).toBe(false); - expect(model.id).toEqual(config.id); - expect(model.label).toBeNull(); - expect(model.format).toBeNull(); - expect(model.max).toBeNull(); - expect(model.min).toBeNull(); - expect(model.toggleIcon).toBeNull(); - expect(model.toggleLabel).toBeNull(); - expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER); - expect(model.value).toBe(config.value); - expect(model.disabledChanges).toBeDefined(); - expect(model.valueChanges).toBeDefined(); - }); + expect(model.disabled).toBe(false); + expect(model.focusedDate).toBeNull(); + expect(model.hidden).toBe(false); + expect(model.id).toEqual(config.id); + expect(model.label).toBeNull(); + expect(model.format).toBeNull(); + expect(model.max).toBeNull(); + expect(model.min).toBeNull(); + expect(model.toggleIcon).toBeNull(); + expect(model.toggleLabel).toBeNull(); + expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER); + expect(model.value).toBe(config.value); + expect(model.disabledChanges).toBeDefined(); + expect(model.valueChanges).toBeDefined(); + }); - it("should serialize correctly", () => { - const json = JSON.parse(JSON.stringify(model)); + it('should serialize correctly', () => { + const json = JSON.parse(JSON.stringify(model)); - expect(json.id).toEqual(model.id); - expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER); - expect(json.value).toBe((model.value as Date).toJSON()); - }); + expect(json.id).toEqual(model.id); + expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER); + expect(json.value).toBe((model.value as Date).toJSON()); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model.ts index a541a505560..9e72729d60a 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model.ts @@ -1,13 +1,16 @@ +import { serializable } from '../../decorator/serializable.decorator'; import { - DynamicDateControlModel, - DynamicDateControlModelConfig, - DynamicDateControlValue -} from "../dynamic-date-control.model"; -import { DynamicFormControlLayout } from "../misc/dynamic-form-control-layout.model"; -import { serializable } from "../../decorator/serializable.decorator"; -import { isBoolean, isString } from "../../utils/core.utils"; + isBoolean, + isString, +} from '../../utils/core.utils'; +import { + DynamicDateControlModel, + DynamicDateControlModelConfig, + DynamicDateControlValue, +} from '../dynamic-date-control.model'; +import { DynamicFormControlLayout } from '../misc/dynamic-form-control-layout.model'; -export const DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER = "DATEPICKER"; +export const DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER = 'DATEPICKER'; export interface DynamicDatePickerModelConfig extends DynamicDateControlModelConfig { autoFocus?: boolean; @@ -33,15 +36,15 @@ export class DynamicDatePickerModel extends DynamicDateControlModel { @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER; constructor(config: DynamicDatePickerModelConfig, layout?: DynamicFormControlLayout) { - super(config, layout); + super(config, layout); - this.autoFocus = isBoolean(config.autoFocus) ? config.autoFocus : false; - this.focusedDate = config.focusedDate ?? null; - this.inline = isBoolean(config.inline) ? config.inline : false; - this.prefix = config.prefix ?? null; - this.readOnly = isBoolean(config.readOnly) ? config.readOnly : false; - this.toggleIcon = isString(config.toggleIcon) ? config.toggleIcon : null; - this.toggleLabel = isString(config.toggleLabel) ? config.toggleLabel : null; - this.suffix = config.suffix ?? null; + this.autoFocus = isBoolean(config.autoFocus) ? config.autoFocus : false; + this.focusedDate = config.focusedDate ?? null; + this.inline = isBoolean(config.inline) ? config.inline : false; + this.prefix = config.prefix ?? null; + this.readOnly = isBoolean(config.readOnly) ? config.readOnly : false; + this.toggleIcon = isString(config.toggleIcon) ? config.toggleIcon : null; + this.toggleLabel = isString(config.toggleLabel) ? config.toggleLabel : null; + this.suffix = config.suffix ?? null; } } diff --git a/src/external-libraries/ng-dynamic-forms/core/model/dynamic-check-control.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/dynamic-check-control.model.ts index 73d4ae72f92..04a8e46a5f4 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/dynamic-check-control.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/dynamic-check-control.model.ts @@ -1,7 +1,10 @@ -import { DynamicFormValueControlModel, DynamicFormValueControlModelConfig } from "./dynamic-form-value-control.model"; -import { DynamicFormControlLayout } from "./misc/dynamic-form-control-layout.model"; -import { serializable } from "../decorator/serializable.decorator"; -import { isBoolean } from "../utils/core.utils"; +import { serializable } from '../decorator/serializable.decorator'; +import { isBoolean } from '../utils/core.utils'; +import { + DynamicFormValueControlModel, + DynamicFormValueControlModelConfig, +} from './dynamic-form-value-control.model'; +import { DynamicFormControlLayout } from './misc/dynamic-form-control-layout.model'; export interface DynamicCheckControlModelConfig extends DynamicFormValueControlModelConfig { labelPosition?: string; @@ -11,21 +14,21 @@ export abstract class DynamicCheckControlModel extends DynamicFormValueControlMo @serializable() labelPosition: string | null; protected constructor(config: DynamicCheckControlModelConfig, layout?: DynamicFormControlLayout) { - super(config, layout); + super(config, layout); - this.labelPosition = config.labelPosition ?? null; - this.checked = isBoolean(this.value) ? this.value : false; + this.labelPosition = config.labelPosition ?? null; + this.checked = isBoolean(this.value) ? this.value : false; } get checked(): boolean { - return this.value ?? false; + return this.value ?? false; } set checked(checked: boolean) { - this.value = checked; + this.value = checked; } toggle(): void { - this.checked = !this.checked; + this.checked = !this.checked; } } diff --git a/src/external-libraries/ng-dynamic-forms/core/model/dynamic-date-control.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/dynamic-date-control.model.ts index 6acc7053863..9906dd6348f 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/dynamic-date-control.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/dynamic-date-control.model.ts @@ -1,6 +1,9 @@ -import { DynamicFormValueControlModelConfig, DynamicFormValueControlModel } from "./dynamic-form-value-control.model"; -import { DynamicFormControlLayout } from "./misc/dynamic-form-control-layout.model"; -import { serializable } from "../decorator/serializable.decorator"; +import { serializable } from '../decorator/serializable.decorator'; +import { + DynamicFormValueControlModel, + DynamicFormValueControlModelConfig, +} from './dynamic-form-value-control.model'; +import { DynamicFormControlLayout } from './misc/dynamic-form-control-layout.model'; export type DynamicDateControlValue = string | object | Date; @@ -18,11 +21,11 @@ export abstract class DynamicDateControlModel extends DynamicFormValueControlMod @serializable() placeholder: string | null; protected constructor(config: DynamicDateControlModelConfig, layout?: DynamicFormControlLayout) { - super(config, layout); + super(config, layout); - this.format = config.format ?? null; - this.max = config.max ?? null; - this.min = config.min ?? null; - this.placeholder = config.placeholder ?? null; + this.format = config.format ?? null; + this.max = config.max ?? null; + this.min = config.min ?? null; + this.placeholder = config.placeholder ?? null; } } diff --git a/src/external-libraries/ng-dynamic-forms/core/model/dynamic-file-control.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/dynamic-file-control.model.ts index 2a49d40a2cc..04554d09d16 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/dynamic-file-control.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/dynamic-file-control.model.ts @@ -1,7 +1,10 @@ -import { DynamicFormValueControlModelConfig, DynamicFormValueControlModel } from "./dynamic-form-value-control.model"; -import { DynamicFormControlLayout } from "./misc/dynamic-form-control-layout.model"; -import { serializable } from "../decorator/serializable.decorator"; -import { isBoolean } from "../utils/core.utils"; +import { serializable } from '../decorator/serializable.decorator'; +import { isBoolean } from '../utils/core.utils'; +import { + DynamicFormValueControlModel, + DynamicFormValueControlModelConfig, +} from './dynamic-form-value-control.model'; +import { DynamicFormControlLayout } from './misc/dynamic-form-control-layout.model'; export interface DynamicFileControlModelConfig extends DynamicFormValueControlModelConfig { multiple?: boolean; @@ -11,8 +14,8 @@ export abstract class DynamicFileControlModel extends DynamicFormValueControlMod @serializable() multiple: boolean; protected constructor(config: DynamicFileControlModelConfig, layout?: DynamicFormControlLayout) { - super(config, layout); + super(config, layout); - this.multiple = isBoolean(config.multiple) ? config.multiple : false; + this.multiple = isBoolean(config.multiple) ? config.multiple : false; } } diff --git a/src/external-libraries/ng-dynamic-forms/core/model/dynamic-form-control.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/dynamic-form-control.model.ts index 5fa71d720a9..cddef22e906 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/dynamic-form-control.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/dynamic-form-control.model.ts @@ -1,10 +1,24 @@ -import { DynamicFormControlLayout } from "./misc/dynamic-form-control-layout.model"; -import { DynamicPathable } from "./misc/dynamic-form-control-path.model"; -import { DynamicFormControlRelation } from "./misc/dynamic-form-control-relation.model"; -import { DynamicFormHook, DynamicValidatorsConfig } from "./misc/dynamic-form-control-validation.model"; -import { serializable, serialize } from "../decorator/serializable.decorator"; -import { isBoolean, isObject, isString } from "../utils/core.utils"; -import { BehaviorSubject, Observable } from "rxjs"; +import { + BehaviorSubject, + Observable, +} from 'rxjs'; + +import { + serializable, + serialize, +} from '../decorator/serializable.decorator'; +import { + isBoolean, + isObject, + isString, +} from '../utils/core.utils'; +import { DynamicFormControlLayout } from './misc/dynamic-form-control-layout.model'; +import { DynamicPathable } from './misc/dynamic-form-control-path.model'; +import { DynamicFormControlRelation } from './misc/dynamic-form-control-relation.model'; +import { + DynamicFormHook, + DynamicValidatorsConfig, +} from './misc/dynamic-form-control-validation.model'; export interface DynamicFormControlModelConfig { asyncValidators?: DynamicValidatorsConfig; @@ -23,7 +37,7 @@ export interface DynamicFormControlModelConfig { export abstract class DynamicFormControlModel implements DynamicPathable { @serializable() asyncValidators: DynamicValidatorsConfig | null; - @serializable("disabled") _disabled: boolean; + @serializable('disabled') _disabled: boolean; @serializable() errorMessages: DynamicValidatorsConfig | null; @serializable() hidden: boolean; @serializable() id: string; @@ -44,38 +58,38 @@ export abstract class DynamicFormControlModel implements DynamicPathable { abstract readonly type: string; protected constructor(config: DynamicFormControlModelConfig, layout: DynamicFormControlLayout | null = null) { - this.asyncValidators = config.asyncValidators ?? null; - this.errorMessages = config.errorMessages ?? null; - this.hidden = isBoolean(config.hidden) ? config.hidden : false; - this.id = config.id; - this.label = config.label ?? null; - this.labelTooltip = config.labelTooltip ?? null; - this.controlTooltip = config.controlTooltip ?? null; - this.layout = layout; - this.name = config.name ?? config.id; - this.relations = Array.isArray(config.relations) ? config.relations : []; - this.updateOn = isString(config.updateOn) ? config.updateOn : null; - this.validators = config.validators ?? null; + this.asyncValidators = config.asyncValidators ?? null; + this.errorMessages = config.errorMessages ?? null; + this.hidden = isBoolean(config.hidden) ? config.hidden : false; + this.id = config.id; + this.label = config.label ?? null; + this.labelTooltip = config.labelTooltip ?? null; + this.controlTooltip = config.controlTooltip ?? null; + this.layout = layout; + this.name = config.name ?? config.id; + this.relations = Array.isArray(config.relations) ? config.relations : []; + this.updateOn = isString(config.updateOn) ? config.updateOn : null; + this.validators = config.validators ?? null; - this._disabled = isBoolean(config.disabled) ? config.disabled : false; - this.disabled$ = new BehaviorSubject(this._disabled); - this.disabled$.subscribe(disabled => this._disabled = disabled); - this.disabledChanges = this.disabled$.asObservable(); + this._disabled = isBoolean(config.disabled) ? config.disabled : false; + this.disabled$ = new BehaviorSubject(this._disabled); + this.disabled$.subscribe(disabled => this._disabled = disabled); + this.disabledChanges = this.disabled$.asObservable(); } get disabled(): boolean { - return this.disabled$.getValue(); + return this.disabled$.getValue(); } set disabled(disabled: boolean) { - this.disabled$.next(disabled); + this.disabled$.next(disabled); } get hasErrorMessages(): boolean { - return isObject(this.errorMessages); + return isObject(this.errorMessages); } toJSON() { - return serialize(this); + return serialize(this); } } diff --git a/src/external-libraries/ng-dynamic-forms/core/model/dynamic-form-value-control.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/dynamic-form-value-control.model.ts index 2c7cd34101b..1948bcac81d 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/dynamic-form-value-control.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/dynamic-form-value-control.model.ts @@ -1,8 +1,18 @@ -import { BehaviorSubject, Observable } from "rxjs"; -import { DynamicFormControlModel, DynamicFormControlModelConfig } from "./dynamic-form-control.model"; -import { DynamicFormControlLayout } from "./misc/dynamic-form-control-layout.model"; -import { serializable } from "../decorator/serializable.decorator"; -import { isBoolean, isObject } from "../utils/core.utils"; +import { + BehaviorSubject, + Observable, +} from 'rxjs'; + +import { serializable } from '../decorator/serializable.decorator'; +import { + isBoolean, + isObject, +} from '../utils/core.utils'; +import { + DynamicFormControlModel, + DynamicFormControlModelConfig, +} from './dynamic-form-control.model'; +import { DynamicFormControlLayout } from './misc/dynamic-form-control-layout.model'; export interface DynamicFormValueControlModelConfig extends DynamicFormControlModelConfig { additional?: { [key: string]: any }; @@ -17,35 +27,35 @@ export abstract class DynamicFormValueControlModel extends DynamicFormControl @serializable() hint: string | null; @serializable() required: boolean; @serializable() tabIndex: number | null; - @serializable("value") private _value: T | null; + @serializable('value') private _value: T | null; private readonly value$: BehaviorSubject; readonly valueChanges: Observable; protected constructor(config: DynamicFormValueControlModelConfig, layout?: DynamicFormControlLayout) { - super(config, layout); + super(config, layout); - this.additional = isObject(config.additional) ? config.additional : null; - this.hint = config.hint ?? null; - this.required = isBoolean(config.required) ? config.required : false; - this.tabIndex = config.tabIndex ?? null; + this.additional = isObject(config.additional) ? config.additional : null; + this.hint = config.hint ?? null; + this.required = isBoolean(config.required) ? config.required : false; + this.tabIndex = config.tabIndex ?? null; - this._value = config.value ?? null; - this.value$ = new BehaviorSubject(this._value); - this.value$.subscribe(value => this._value = value); - this.valueChanges = this.value$.asObservable(); + this._value = config.value ?? null; + this.value$ = new BehaviorSubject(this._value); + this.value$.subscribe(value => this._value = value); + this.valueChanges = this.value$.asObservable(); } get value(): T | null { - return this.value$.getValue(); + return this.value$.getValue(); } set value(value: T | null) { - this.value$.next(value); + this.value$.next(value); } - getAdditional(key: string, defaultValue?: any | null): any { - return this.additional !== null && this.additional.hasOwnProperty(key) ? this.additional[key] : defaultValue; + getAdditional(key: string, defaultValue?: any): any { + return this.additional !== null && this.additional.hasOwnProperty(key) ? this.additional[key] : defaultValue; } } diff --git a/src/external-libraries/ng-dynamic-forms/core/model/dynamic-input-control.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/dynamic-input-control.model.ts index 0e9e9a6bc49..4252713247a 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/dynamic-input-control.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/dynamic-input-control.model.ts @@ -1,7 +1,13 @@ -import { DynamicFormValueControlModel, DynamicFormValueControlModelConfig } from "./dynamic-form-value-control.model"; -import { DynamicFormControlLayout } from "./misc/dynamic-form-control-layout.model"; -import { serializable } from "../decorator/serializable.decorator"; -import { isBoolean, isNumber } from "../utils/core.utils"; +import { serializable } from '../decorator/serializable.decorator'; +import { + isBoolean, + isNumber, +} from '../utils/core.utils'; +import { + DynamicFormValueControlModel, + DynamicFormValueControlModelConfig, +} from './dynamic-form-value-control.model'; +import { DynamicFormControlLayout } from './misc/dynamic-form-control-layout.model'; export interface DynamicInputControlModelConfig extends DynamicFormValueControlModelConfig { autoComplete?: string; @@ -27,16 +33,16 @@ export abstract class DynamicInputControlModel extends DynamicFormValueContro @serializable() suffix: string | null; protected constructor(config: DynamicInputControlModelConfig, layout?: DynamicFormControlLayout) { - super(config, layout); + super(config, layout); - this.autoComplete = config.autoComplete ?? "on"; - this.autoFocus = isBoolean(config.autoFocus) ? config.autoFocus : false; - this.maxLength = isNumber(config.maxLength) ? config.maxLength : null; - this.minLength = isNumber(config.minLength) ? config.minLength : null; - this.placeholder = config.placeholder ?? ""; - this.prefix = config.prefix ?? null; - this.readOnly = isBoolean(config.readOnly) ? config.readOnly : false; - this.spellCheck = isBoolean(config.spellCheck) ? config.spellCheck : false; - this.suffix = config.suffix ?? null; + this.autoComplete = config.autoComplete ?? 'on'; + this.autoFocus = isBoolean(config.autoFocus) ? config.autoFocus : false; + this.maxLength = isNumber(config.maxLength) ? config.maxLength : null; + this.minLength = isNumber(config.minLength) ? config.minLength : null; + this.placeholder = config.placeholder ?? ''; + this.prefix = config.prefix ?? null; + this.readOnly = isBoolean(config.readOnly) ? config.readOnly : false; + this.spellCheck = isBoolean(config.spellCheck) ? config.spellCheck : false; + this.suffix = config.suffix ?? null; } } diff --git a/src/external-libraries/ng-dynamic-forms/core/model/dynamic-option-control.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/dynamic-option-control.model.ts index e4b247597bf..7730224fa82 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/dynamic-option-control.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/dynamic-option-control.model.ts @@ -1,9 +1,21 @@ -import { Observable, isObservable, of } from "rxjs"; -import { map } from "rxjs/operators"; -import { DynamicFormValueControlModel, DynamicFormValueControlModelConfig } from "./dynamic-form-value-control.model"; -import { DynamicFormControlLayout } from "./misc/dynamic-form-control-layout.model"; -import { serializable, serialize } from "../decorator/serializable.decorator"; -import { isBoolean } from "../utils/core.utils"; +/* eslint-disable max-classes-per-file */ +import { + isObservable, + Observable, + of, +} from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { + serializable, + serialize, +} from '../decorator/serializable.decorator'; +import { isBoolean } from '../utils/core.utils'; +import { + DynamicFormValueControlModel, + DynamicFormValueControlModelConfig, +} from './dynamic-form-value-control.model'; +import { DynamicFormControlLayout } from './misc/dynamic-form-control-layout.model'; export interface DynamicFormOptionConfig { disabled?: boolean; @@ -17,21 +29,21 @@ export class DynamicFormOption { @serializable() value: T; constructor(config: DynamicFormOptionConfig) { - this.disabled = isBoolean(config.disabled) ? config.disabled : false; - this.label = config.label ?? null; - this.value = config.value; + this.disabled = isBoolean(config.disabled) ? config.disabled : false; + this.label = config.label ?? null; + this.value = config.value; } get text() { - return this.label; + return this.label; } set text(text: string | null) { - this.label = text; + this.label = text; } toJSON() { - return serialize(this); + return serialize(this); } } @@ -40,60 +52,60 @@ export interface DynamicOptionControlModelConfig extends DynamicFormValueCont } export abstract class DynamicOptionControlModel extends DynamicFormValueControlModel { - @serializable("options") private _options: DynamicFormOption[] = []; + @serializable('options') private _options: DynamicFormOption[] = []; options$!: Observable[]>; protected constructor(config: DynamicOptionControlModelConfig, layout?: DynamicFormControlLayout) { - super(config, layout); + super(config, layout); - this.options = config.options; + this.options = config.options; } private updateOptions$(): void { - this.options$ = of(this.options); + this.options$ = of(this.options); } set options(options: any) { - if (Array.isArray(options)) { - this._options = (options as DynamicFormOptionConfig[]).map(optionConfig => new DynamicFormOption(optionConfig)); - this.updateOptions$(); - - } else if (isObservable(options)) { - this.options$ = (options as Observable[]>).pipe( - map(optionsConfig => { - this._options = optionsConfig.map(optionConfig => new DynamicFormOption(optionConfig)); - return this._options; - })); - - } else { - this.updateOptions$(); - } + if (Array.isArray(options)) { + this._options = (options as DynamicFormOptionConfig[]).map(optionConfig => new DynamicFormOption(optionConfig)); + this.updateOptions$(); + + } else if (isObservable(options)) { + this.options$ = (options as Observable[]>).pipe( + map(optionsConfig => { + this._options = optionsConfig.map(optionConfig => new DynamicFormOption(optionConfig)); + return this._options; + })); + + } else { + this.updateOptions$(); + } } get options(): any { - return this._options; + return this._options; } add(optionConfig: DynamicFormOptionConfig): DynamicFormOption { - return this.insert(this.options.length, optionConfig); + return this.insert(this.options.length, optionConfig); } get(index: number): DynamicFormOption { - return this.options[index]; + return this.options[index]; } insert(index: number, optionConfig: DynamicFormOptionConfig): DynamicFormOption { - const option = new DynamicFormOption(optionConfig); + const option = new DynamicFormOption(optionConfig); - this.options.splice(index, 0, option); - this.updateOptions$(); + this.options.splice(index, 0, option); + this.updateOptions$(); - return option; + return option; } remove(...indices: number[]): void { - indices.forEach(index => this.options.splice(index, 1)); - this.updateOptions$(); + indices.forEach(index => this.options.splice(index, 1)); + this.updateOptions$(); } abstract select(...indices: number[]): void; diff --git a/src/external-libraries/ng-dynamic-forms/core/model/file-upload/dynamic-file-upload.model.spec.ts b/src/external-libraries/ng-dynamic-forms/core/model/file-upload/dynamic-file-upload.model.spec.ts index 7345ad16861..268b8ae367d 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/file-upload/dynamic-file-upload.model.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/file-upload/dynamic-file-upload.model.spec.ts @@ -1,34 +1,37 @@ -import { DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD, DynamicFileUploadModel } from "./dynamic-file-upload.model"; +import { + DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD, + DynamicFileUploadModel, +} from './dynamic-file-upload.model'; -describe("DynamicFileUploadModel test suite", () => { - let model: DynamicFileUploadModel; - const config: any = { - id: "upload" - }; +describe('DynamicFileUploadModel test suite', () => { + let model: DynamicFileUploadModel; + const config: any = { + id: 'upload', + }; - beforeEach(() => model = new DynamicFileUploadModel(config)); + beforeEach(() => model = new DynamicFileUploadModel(config)); - it("should initialize correctly", () => { - expect(model.autoUpload).toBe(true); - expect(model.disabled).toBe(false); - expect(model.hidden).toBe(false); - expect(model.id).toEqual(config.id); - expect(model.label).toBeNull(); - expect(model.multiple).toBe(false); - expect(model.removeUrl).toBeNull(); - expect(model.showFileList).toBe(true); - expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD); - expect(model.url).toBeNull(); - expect(model.value).toBeNull(); - expect(model.disabledChanges).toBeDefined(); - expect(model.valueChanges).toBeDefined(); - }); + it('should initialize correctly', () => { + expect(model.autoUpload).toBe(true); + expect(model.disabled).toBe(false); + expect(model.hidden).toBe(false); + expect(model.id).toEqual(config.id); + expect(model.label).toBeNull(); + expect(model.multiple).toBe(false); + expect(model.removeUrl).toBeNull(); + expect(model.showFileList).toBe(true); + expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD); + expect(model.url).toBeNull(); + expect(model.value).toBeNull(); + expect(model.disabledChanges).toBeDefined(); + expect(model.valueChanges).toBeDefined(); + }); - it("should serialize correctly", () => { - const json = JSON.parse(JSON.stringify(model)); + it('should serialize correctly', () => { + const json = JSON.parse(JSON.stringify(model)); - expect(json.id).toEqual(model.id); - expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD); - expect(json.value).toBeNull(); - }); + expect(json.id).toEqual(model.id); + expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD); + expect(json.value).toBeNull(); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/model/file-upload/dynamic-file-upload.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/file-upload/dynamic-file-upload.model.ts index 81c65bf3971..670056f3be1 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/file-upload/dynamic-file-upload.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/file-upload/dynamic-file-upload.model.ts @@ -1,9 +1,15 @@ -import { DynamicFileControlModelConfig, DynamicFileControlModel } from "../dynamic-file-control.model"; -import { DynamicFormControlLayout } from "../misc/dynamic-form-control-layout.model"; -import { serializable } from "../../decorator/serializable.decorator"; -import { isBoolean, isNumber } from "../../utils/core.utils"; +import { serializable } from '../../decorator/serializable.decorator'; +import { + isBoolean, + isNumber, +} from '../../utils/core.utils'; +import { + DynamicFileControlModel, + DynamicFileControlModelConfig, +} from '../dynamic-file-control.model'; +import { DynamicFormControlLayout } from '../misc/dynamic-form-control-layout.model'; -export const DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD = "FILE_UPLOAD"; +export const DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD = 'FILE_UPLOAD'; export interface DynamicFileUploadModelConfig extends DynamicFileControlModelConfig { accept?: string[]; @@ -27,14 +33,14 @@ export class DynamicFileUploadModel extends DynamicFileControlModel { @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD; constructor(config: DynamicFileUploadModelConfig, layout?: DynamicFormControlLayout) { - super(config, layout); + super(config, layout); - this.accept = Array.isArray(config.accept) ? config.accept : null; - this.autoUpload = isBoolean(config.autoUpload) ? config.autoUpload : true; - this.maxSize = isNumber(config.maxSize) ? config.maxSize : null; - this.minSize = isNumber(config.minSize) ? config.minSize : null; - this.removeUrl = config.removeUrl ?? null; - this.showFileList = isBoolean(config.showFileList) ? config.showFileList : true; - this.url = config.url ?? null; + this.accept = Array.isArray(config.accept) ? config.accept : null; + this.autoUpload = isBoolean(config.autoUpload) ? config.autoUpload : true; + this.maxSize = isNumber(config.maxSize) ? config.maxSize : null; + this.minSize = isNumber(config.minSize) ? config.minSize : null; + this.removeUrl = config.removeUrl ?? null; + this.showFileList = isBoolean(config.showFileList) ? config.showFileList : true; + this.url = config.url ?? null; } } diff --git a/src/external-libraries/ng-dynamic-forms/core/model/form-array/dynamic-form-array.model.spec.ts b/src/external-libraries/ng-dynamic-forms/core/model/form-array/dynamic-form-array.model.spec.ts index bca2944b6e4..bb34f5f57a3 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/form-array/dynamic-form-array.model.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/form-array/dynamic-form-array.model.spec.ts @@ -1,65 +1,69 @@ -import { DynamicInputModel } from "../input/dynamic-input.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_ARRAY, DynamicFormArrayGroupModel, DynamicFormArrayModel } from "./dynamic-form-array.model"; +import { DynamicInputModel } from '../input/dynamic-input.model'; +import { + DYNAMIC_FORM_CONTROL_TYPE_ARRAY, + DynamicFormArrayGroupModel, + DynamicFormArrayModel, +} from './dynamic-form-array.model'; -describe("DynamicFormArrayModel test suite", () => { - let model: DynamicFormArrayModel; - const config: any = { - id: "formArray", - initialCount: 3, +describe('DynamicFormArrayModel test suite', () => { + let model: DynamicFormArrayModel; + const config: any = { + id: 'formArray', + initialCount: 3, + groupFactory: () => [ + new DynamicInputModel({ + id: 'input', + }), + new DynamicFormArrayModel({ + id: 'nestedFormArray', groupFactory: () => [ - new DynamicInputModel({ - id: "input" - }), - new DynamicFormArrayModel({ - id: "nestedFormArray", - groupFactory: () => [ - new DynamicInputModel({ - id: "nestedInput" - }) - ] - }) + new DynamicInputModel({ + id: 'nestedInput', + }), ], - validators: { - required: null - } - }; + }), + ], + validators: { + required: null, + }, + }; - beforeEach(() => model = new DynamicFormArrayModel(config)); + beforeEach(() => model = new DynamicFormArrayModel(config)); - it("should initialize correctly", () => { - expect(model.initialCount).toBe(config.initialCount); - expect(model.size).toBe(model.initialCount); - expect(model.id).toEqual(config.id); - expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_ARRAY); - expect(model.groupFactory().length).toEqual(2); - expect(model.removeGroup).toBeDefined(); - expect(model.disabledChanges).toBeDefined(); - }); + it('should initialize correctly', () => { + expect(model.initialCount).toBe(config.initialCount); + expect(model.size).toBe(model.initialCount); + expect(model.id).toEqual(config.id); + expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_ARRAY); + expect(model.groupFactory().length).toEqual(2); + expect(model.removeGroup).toBeDefined(); + expect(model.disabledChanges).toBeDefined(); + }); - it("should throw when no createGroup function is specified", () => { - expect(() => new DynamicFormArrayModel({id: "test"})) - .toThrow(new Error("group factory function must be specified for DynamicFormArrayModel")); - }); + it('should throw when no createGroup function is specified', () => { + expect(() => new DynamicFormArrayModel({ id: 'test' })) + .toThrow(new Error('group factory function must be specified for DynamicFormArrayModel')); + }); - it("should get the correct group model", () => { - expect(model.get(0) instanceof DynamicFormArrayGroupModel).toBe(true); - expect(model.get(1) instanceof DynamicFormArrayGroupModel).toBe(true); - }); + it('should get the correct group model', () => { + expect(model.get(0) instanceof DynamicFormArrayGroupModel).toBe(true); + expect(model.get(1) instanceof DynamicFormArrayGroupModel).toBe(true); + }); - it("should add another form array group", () => { - model.addGroup(); + it('should add another form array group', () => { + model.addGroup(); - expect(model.size).toBe(config.initialCount + 1); - }); + expect(model.size).toBe(config.initialCount + 1); + }); - it("should serialize correctly", () => { - const json = JSON.parse(JSON.stringify(model)); + it('should serialize correctly', () => { + const json = JSON.parse(JSON.stringify(model)); - expect(json.asyncValidators).toBeNull(); - expect(json.id).toEqual(model.id); - expect(json.groups.length).toEqual(model.size); - expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_ARRAY); - expect(Object.keys(json.validators)[0]).toEqual("required"); - }); + expect(json.asyncValidators).toBeNull(); + expect(json.id).toEqual(model.id); + expect(json.groups.length).toEqual(model.size); + expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_ARRAY); + expect(Object.keys(json.validators)[0]).toEqual('required'); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/model/form-array/dynamic-form-array.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/form-array/dynamic-form-array.model.ts index b48a9287b58..83b43d30e38 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/form-array/dynamic-form-array.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/form-array/dynamic-form-array.model.ts @@ -1,38 +1,48 @@ -import { DynamicFormControlModel, DynamicFormControlModelConfig } from "../dynamic-form-control.model"; -import { DynamicFormControlLayout } from "../misc/dynamic-form-control-layout.model"; -import { DynamicPathable } from "../misc/dynamic-form-control-path.model"; -import { DynamicValidatorsConfig } from "../misc/dynamic-form-control-validation.model"; -import { serializable, serialize } from "../../decorator/serializable.decorator"; -import { isFunction, isNumber } from "../../utils/core.utils"; -import { DynamicFormModel } from "../form-group/dynamic-form-group.model"; +/* eslint-disable max-classes-per-file */ +import { + serializable, + serialize, +} from '../../decorator/serializable.decorator'; +import { + isFunction, + isNumber, +} from '../../utils/core.utils'; +import { + DynamicFormControlModel, + DynamicFormControlModelConfig, +} from '../dynamic-form-control.model'; +import { DynamicFormModel } from '../form-group/dynamic-form-group.model'; +import { DynamicFormControlLayout } from '../misc/dynamic-form-control-layout.model'; +import { DynamicPathable } from '../misc/dynamic-form-control-path.model'; +import { DynamicValidatorsConfig } from '../misc/dynamic-form-control-validation.model'; export class DynamicFormArrayGroupModel implements DynamicPathable { - $implicit: DynamicFormArrayGroupModel; - context: DynamicFormArrayModel; + $implicit: DynamicFormArrayGroupModel; + context: DynamicFormArrayModel; @serializable() group: DynamicFormModel; @serializable() index: number; constructor(context: DynamicFormArrayModel, group: DynamicFormModel = [], index: number = -1) { - this.$implicit = this; - this.context = context; - this.group = group; - this.index = index; + this.$implicit = this; + this.context = context; + this.group = group; + this.index = index; } get parent(): DynamicFormArrayModel { - return this.context; + return this.context; } get(index: number): DynamicFormControlModel { - return this.group[index]; + return this.group[index]; } toJSON() { - return serialize(this); + return serialize(this); } } -export const DYNAMIC_FORM_CONTROL_TYPE_ARRAY = "ARRAY"; +export const DYNAMIC_FORM_CONTROL_TYPE_ARRAY = 'ARRAY'; export interface DynamicFormArrayModelConfig extends DynamicFormControlModelConfig { groupAsyncValidators?: DynamicValidatorsConfig; @@ -53,68 +63,68 @@ export class DynamicFormArrayModel extends DynamicFormControlModel { @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_ARRAY; constructor(config: DynamicFormArrayModelConfig, layout?: DynamicFormControlLayout) { - super(config, layout); - - if (isFunction(config.groupFactory)) { - this.groupFactory = config.groupFactory; - } else { - throw new Error("group factory function must be specified for DynamicFormArrayModel"); - } - - this.groupAsyncValidators = config.groupAsyncValidators ?? null; - this.groupPrototype = this.groupFactory(); - this.groupValidators = config.groupValidators ?? null; - this.initialCount = isNumber(config.initialCount) ? config.initialCount : 1; - - if (Array.isArray(config.groups)) { - config.groups.forEach((arrayGroup, index) => { - this.groups.push(new DynamicFormArrayGroupModel(this, arrayGroup.group, arrayGroup.index ?? index)); - }); - - } else { - for (let index = 0; index < this.initialCount; index++) { - this.addGroup(); - } + super(config, layout); + + if (isFunction(config.groupFactory)) { + this.groupFactory = config.groupFactory; + } else { + throw new Error('group factory function must be specified for DynamicFormArrayModel'); + } + + this.groupAsyncValidators = config.groupAsyncValidators ?? null; + this.groupPrototype = this.groupFactory(); + this.groupValidators = config.groupValidators ?? null; + this.initialCount = isNumber(config.initialCount) ? config.initialCount : 1; + + if (Array.isArray(config.groups)) { + config.groups.forEach((arrayGroup, index) => { + this.groups.push(new DynamicFormArrayGroupModel(this, arrayGroup.group, arrayGroup.index ?? index)); + }); + + } else { + for (let index = 0; index < this.initialCount; index++) { + this.addGroup(); } + } } private updateGroupIndex(): void { - this.groups.forEach((group, index) => group.index = index); + this.groups.forEach((group, index) => group.index = index); } get size(): number { - return this.groups.length; + return this.groups.length; } get(index: number): DynamicFormArrayGroupModel { - return this.groups[index]; + return this.groups[index]; } addGroup(): DynamicFormArrayGroupModel { - return this.insertGroup(this.groups.length); + return this.insertGroup(this.groups.length); } insertGroup(index: number): DynamicFormArrayGroupModel { - const group = new DynamicFormArrayGroupModel(this, this.groupFactory()); + const group = new DynamicFormArrayGroupModel(this, this.groupFactory()); - this.groups.splice(index, 0, group); - this.updateGroupIndex(); + this.groups.splice(index, 0, group); + this.updateGroupIndex(); - return group; + return group; } moveGroup(index: number, step: number): void { - this.groups.splice(index + step, 0, ...this.groups.splice(index, 1)); - this.updateGroupIndex(); + this.groups.splice(index + step, 0, ...this.groups.splice(index, 1)); + this.updateGroupIndex(); } removeGroup(index: number): void { - this.groups.splice(index, 1); - this.updateGroupIndex(); + this.groups.splice(index, 1); + this.updateGroupIndex(); } clear(): void { - this.groups.splice(0); - this.updateGroupIndex(); + this.groups.splice(0); + this.updateGroupIndex(); } } diff --git a/src/external-libraries/ng-dynamic-forms/core/model/form-group/dynamic-form-group.model.spec.ts b/src/external-libraries/ng-dynamic-forms/core/model/form-group/dynamic-form-group.model.spec.ts index ea1ec00c43d..d1a3d940759 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/form-group/dynamic-form-group.model.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/form-group/dynamic-form-group.model.spec.ts @@ -1,57 +1,60 @@ -import { DynamicInputModel } from "../input/dynamic-input.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_GROUP, DynamicFormGroupModel } from "./dynamic-form-group.model"; - - -describe("DynamicFormGroupModel test suite", () => { - let model: DynamicFormGroupModel; - const config: any = { - id: "formGroup", - group: [ - new DynamicInputModel({ - id: "input" - }) - ], - validators: { - required: null - } - }; - - beforeEach(() => model = new DynamicFormGroupModel(config)); - - it("should initialize correctly", () => { - expect(model.id).toEqual(config.id); - expect(model.group.length).toBe(config.group.length); - expect(model.size()).toBe(model.group.length); - expect(model.legend).toBeNull(); - expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_GROUP); - expect(model.disabledChanges).toBeDefined(); - }); - - it("should get the correct DynamicFormControlModel of group", () => { - expect(model.get(0) === model.group[0]).toBe(true); - }); - - it("should correctly set a DynamicFormControlModel", () => { - const newModel = new DynamicInputModel({id: "setInput"}); - - model.set(0, newModel); - - expect(model.get(0) === newModel).toBe(true); - }); - - it("should correctly add a DynamicFormControlModel", () => { - const newModel = new DynamicInputModel({id: "addInput"}); - - model.add(newModel); - - expect(model.get(model.size() - 1) === newModel).toBe(true); - }); - - it("should serialize correctly", () => { - const json = JSON.parse(JSON.stringify(model)); - - expect(json.id).toEqual(model.id); - expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_GROUP); - expect(Object.keys(json.validators)[0]).toEqual("required"); - }); +import { DynamicInputModel } from '../input/dynamic-input.model'; +import { + DYNAMIC_FORM_CONTROL_TYPE_GROUP, + DynamicFormGroupModel, +} from './dynamic-form-group.model'; + + +describe('DynamicFormGroupModel test suite', () => { + let model: DynamicFormGroupModel; + const config: any = { + id: 'formGroup', + group: [ + new DynamicInputModel({ + id: 'input', + }), + ], + validators: { + required: null, + }, + }; + + beforeEach(() => model = new DynamicFormGroupModel(config)); + + it('should initialize correctly', () => { + expect(model.id).toEqual(config.id); + expect(model.group.length).toBe(config.group.length); + expect(model.size()).toBe(model.group.length); + expect(model.legend).toBeNull(); + expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_GROUP); + expect(model.disabledChanges).toBeDefined(); + }); + + it('should get the correct DynamicFormControlModel of group', () => { + expect(model.get(0) === model.group[0]).toBe(true); + }); + + it('should correctly set a DynamicFormControlModel', () => { + const newModel = new DynamicInputModel({ id: 'setInput' }); + + model.set(0, newModel); + + expect(model.get(0) === newModel).toBe(true); + }); + + it('should correctly add a DynamicFormControlModel', () => { + const newModel = new DynamicInputModel({ id: 'addInput' }); + + model.add(newModel); + + expect(model.get(model.size() - 1) === newModel).toBe(true); + }); + + it('should serialize correctly', () => { + const json = JSON.parse(JSON.stringify(model)); + + expect(json.id).toEqual(model.id); + expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_GROUP); + expect(Object.keys(json.validators)[0]).toEqual('required'); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/model/form-group/dynamic-form-group.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/form-group/dynamic-form-group.model.ts index 6c242c9a4d1..1340e654ef5 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/form-group/dynamic-form-group.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/form-group/dynamic-form-group.model.ts @@ -1,8 +1,11 @@ -import { DynamicFormControlModel, DynamicFormControlModelConfig } from "../dynamic-form-control.model"; -import { DynamicFormControlLayout } from "../misc/dynamic-form-control-layout.model"; -import { serializable } from "../../decorator/serializable.decorator"; +import { serializable } from '../../decorator/serializable.decorator'; +import { + DynamicFormControlModel, + DynamicFormControlModelConfig, +} from '../dynamic-form-control.model'; +import { DynamicFormControlLayout } from '../misc/dynamic-form-control-layout.model'; -export const DYNAMIC_FORM_CONTROL_TYPE_GROUP = "GROUP"; +export const DYNAMIC_FORM_CONTROL_TYPE_GROUP = 'GROUP'; export interface DynamicFormGroupModelConfig extends DynamicFormControlModelConfig { group?: DynamicFormModel; @@ -20,37 +23,37 @@ export class DynamicFormGroupModel extends DynamicFormControlModel { @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_GROUP; constructor(config: DynamicFormGroupModelConfig, layout?: DynamicFormControlLayout) { - super(config, layout); + super(config, layout); - this.group = Array.isArray(config.group) ? config.group : []; - this.legend = config.legend ?? null; + this.group = Array.isArray(config.group) ? config.group : []; + this.legend = config.legend ?? null; } get(index: number): DynamicFormControlModel { - return this.group[index]; + return this.group[index]; } set(index: number, controlModel: DynamicFormControlModel): void { - this.group[index] = controlModel; + this.group[index] = controlModel; } add(controlModel: DynamicFormControlModel): void { - this.group.push(controlModel); + this.group.push(controlModel); } insert(index: number, controlModel: DynamicFormControlModel): void { - this.group.splice(index, 0, controlModel); + this.group.splice(index, 0, controlModel); } move(index: number, step: number): void { - this.group.splice(index + step, 0, ...this.group.splice(index, 1)); + this.group.splice(index + step, 0, ...this.group.splice(index, 1)); } remove(index: number) { - this.group.splice(index, 1); + this.group.splice(index, 1); } size(): number { - return this.group.length; + return this.group.length; } } diff --git a/src/external-libraries/ng-dynamic-forms/core/model/input/dynamic-input.model.spec.ts b/src/external-libraries/ng-dynamic-forms/core/model/input/dynamic-input.model.spec.ts index efa89673cde..f4f48224b5f 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/input/dynamic-input.model.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/input/dynamic-input.model.spec.ts @@ -1,116 +1,116 @@ +import { AUTOCOMPLETE_ON } from '@ng-dynamic-forms/core/utils/autofill.utils'; + +import { isString } from '../../utils/core.utils'; import { - DYNAMIC_FORM_CONTROL_TYPE_INPUT, - DYNAMIC_FORM_CONTROL_INPUT_TYPE_TEXT, - DynamicInputModel -} from "./dynamic-input.model"; - -import { isString } from "../../utils/core.utils"; -import { AUTOCOMPLETE_ON } from "@ng-dynamic-forms/core/utils/autofill.utils"; - -describe("DynamicInputModel test suite", () => { - let model: DynamicInputModel; - const config = { - id: "input", - list: ["One", "Two", "Three"], - mask: "00/00" - }; - - beforeEach(() => { - model = new DynamicInputModel(config); - }); - - it("should initialize correctly", () => { - expect(model.asyncValidators).toBeNull(); - expect(model.disabled).toBe(false); - expect(model.hidden).toBe(false); - expect(model.id).toEqual(config.id); - expect(model.validators).toBeNull(); - expect(model.disabledChanges).toBeDefined(); - expect(model.valueChanges).toBeDefined(); - }); - - it("tests if correct default type property is set", () => { - expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_INPUT); - }); - - it("tests if correct default input type property is set", () => { - expect(model.inputType).toEqual(DYNAMIC_FORM_CONTROL_INPUT_TYPE_TEXT); - }); - - it("tests if correct default autoComplete property is set", () => { - expect(model.autoComplete).toEqual(AUTOCOMPLETE_ON); - }); - - it("tests if correct default autoFocus property is set", () => { - expect(model.autoFocus).toBe(false); - }); - - it("tests if correct default hint property is set", () => { - expect(model.hint).toBeNull(); - }); - - it("tests if correct default label property is set", () => { - expect(model.label).toBeNull(); - }); - - it("tests if correct default list property is set", () => { - expect(model.hasList).toBe(true); - expect(isString(model.listId)).toBe(true); - expect(model.list$).toBeDefined(); - }); - - it("tests if correct default max property is set", () => { - expect(model.max).toBeNull(); - }); - - it("tests if correct default maxLength property is set", () => { - expect(model.maxLength).toBeNull(); - }); - - it("tests if correct default minLength property is set", () => { - expect(model.minLength).toBeNull(); - }); - - it("tests if correct default min property is set", () => { - expect(model.min).toBeNull(); - }); - - it("tests if correct default placeholder property is set", () => { - expect(model.placeholder).toEqual(""); - }); - - it("tests if correct default readonly property is set", () => { - expect(model.readOnly).toBe(false); - }); - - it("tests if correct default required property is set", () => { - expect(model.required).toBe(false); - }); - - it("tests if correct default spellcheck property is set", () => { - expect(model.spellCheck).toBe(false); - }); - - it("tests if correct default step property is set", () => { - expect(model.step).toBeNull(); - }); - - it("tests if correct default prefix property is set", () => { - expect(model.prefix).toBeNull(); - }); - - it("tests if correct default suffix property is set", () => { - expect(model.suffix).toBeNull(); - }); - - it("should serialize correctly", () => { - const json = JSON.parse(JSON.stringify(model)); - - expect(json.id).toEqual(model.id); - expect(json.disabled).toEqual(model.disabled); - expect(json.hidden).toEqual(model.hidden); - expect(json.mask).toEqual(config.mask); - expect(json.value).toBe(model.value); - expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_INPUT); - }); + DYNAMIC_FORM_CONTROL_INPUT_TYPE_TEXT, + DYNAMIC_FORM_CONTROL_TYPE_INPUT, + DynamicInputModel, +} from './dynamic-input.model'; + +describe('DynamicInputModel test suite', () => { + let model: DynamicInputModel; + const config = { + id: 'input', + list: ['One', 'Two', 'Three'], + mask: '00/00', + }; + + beforeEach(() => { + model = new DynamicInputModel(config); + }); + + it('should initialize correctly', () => { + expect(model.asyncValidators).toBeNull(); + expect(model.disabled).toBe(false); + expect(model.hidden).toBe(false); + expect(model.id).toEqual(config.id); + expect(model.validators).toBeNull(); + expect(model.disabledChanges).toBeDefined(); + expect(model.valueChanges).toBeDefined(); + }); + + it('tests if correct default type property is set', () => { + expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_INPUT); + }); + + it('tests if correct default input type property is set', () => { + expect(model.inputType).toEqual(DYNAMIC_FORM_CONTROL_INPUT_TYPE_TEXT); + }); + + it('tests if correct default autoComplete property is set', () => { + expect(model.autoComplete).toEqual(AUTOCOMPLETE_ON); + }); + + it('tests if correct default autoFocus property is set', () => { + expect(model.autoFocus).toBe(false); + }); + + it('tests if correct default hint property is set', () => { + expect(model.hint).toBeNull(); + }); + + it('tests if correct default label property is set', () => { + expect(model.label).toBeNull(); + }); + + it('tests if correct default list property is set', () => { + expect(model.hasList).toBe(true); + expect(isString(model.listId)).toBe(true); + expect(model.list$).toBeDefined(); + }); + + it('tests if correct default max property is set', () => { + expect(model.max).toBeNull(); + }); + + it('tests if correct default maxLength property is set', () => { + expect(model.maxLength).toBeNull(); + }); + + it('tests if correct default minLength property is set', () => { + expect(model.minLength).toBeNull(); + }); + + it('tests if correct default min property is set', () => { + expect(model.min).toBeNull(); + }); + + it('tests if correct default placeholder property is set', () => { + expect(model.placeholder).toEqual(''); + }); + + it('tests if correct default readonly property is set', () => { + expect(model.readOnly).toBe(false); + }); + + it('tests if correct default required property is set', () => { + expect(model.required).toBe(false); + }); + + it('tests if correct default spellcheck property is set', () => { + expect(model.spellCheck).toBe(false); + }); + + it('tests if correct default step property is set', () => { + expect(model.step).toBeNull(); + }); + + it('tests if correct default prefix property is set', () => { + expect(model.prefix).toBeNull(); + }); + + it('tests if correct default suffix property is set', () => { + expect(model.suffix).toBeNull(); + }); + + it('should serialize correctly', () => { + const json = JSON.parse(JSON.stringify(model)); + + expect(json.id).toEqual(model.id); + expect(json.disabled).toEqual(model.disabled); + expect(json.hidden).toEqual(model.hidden); + expect(json.mask).toEqual(config.mask); + expect(json.value).toBe(model.value); + expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_INPUT); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/model/input/dynamic-input.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/input/dynamic-input.model.ts index 805632ff0c4..685f18b08a3 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/input/dynamic-input.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/input/dynamic-input.model.ts @@ -1,29 +1,43 @@ -import { DynamicInputControlModel, DynamicInputControlModelConfig } from "../dynamic-input-control.model"; -import { DynamicFormControlLayout } from "../misc/dynamic-form-control-layout.model"; -import { serializable } from "../../decorator/serializable.decorator"; -import { isBoolean, isNumber } from "../../utils/core.utils"; -import { Observable, isObservable, of } from "rxjs"; -import { tap } from "rxjs/operators"; -import { IConfig, initialConfig } from "ngx-mask"; +import { + IConfig, + initialConfig, +} from 'ngx-mask'; +import { + isObservable, + Observable, + of, +} from 'rxjs'; +import { tap } from 'rxjs/operators'; -export const DYNAMIC_FORM_CONTROL_TYPE_INPUT = "INPUT"; +import { serializable } from '../../decorator/serializable.decorator'; +import { + isBoolean, + isNumber, +} from '../../utils/core.utils'; +import { + DynamicInputControlModel, + DynamicInputControlModelConfig, +} from '../dynamic-input-control.model'; +import { DynamicFormControlLayout } from '../misc/dynamic-form-control-layout.model'; -export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_COLOR = "color"; -export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_DATE = "date"; +export const DYNAMIC_FORM_CONTROL_TYPE_INPUT = 'INPUT'; + +export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_COLOR = 'color'; +export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_DATE = 'date'; // export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_DATETIME = "datetime"; -export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_DATETIME_LOCAL = "datetime-local"; -export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_EMAIL = "email"; -export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_FILE = "file"; -export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_MONTH = "month"; -export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_NUMBER = "number"; -export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_PASSWORD = "password"; -export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_RANGE = "range"; -export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_SEARCH = "search"; -export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_TEL = "tel"; -export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_TEXT = "text"; -export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_TIME = "time"; -export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_URL = "url"; -export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_WEEK = "week"; +export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_DATETIME_LOCAL = 'datetime-local'; +export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_EMAIL = 'email'; +export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_FILE = 'file'; +export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_MONTH = 'month'; +export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_NUMBER = 'number'; +export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_PASSWORD = 'password'; +export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_RANGE = 'range'; +export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_SEARCH = 'search'; +export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_TEL = 'tel'; +export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_TEXT = 'text'; +export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_TIME = 'time'; +export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_URL = 'url'; +export const DYNAMIC_FORM_CONTROL_INPUT_TYPE_WEEK = 'week'; export interface DynamicInputModelConfig extends DynamicInputControlModelConfig { accept?: string; @@ -51,51 +65,51 @@ export class DynamicInputModel extends DynamicInputControlModel | null) { - if (Array.isArray(list)) { - this._list = list; - this.list$ = of(this._list); + if (Array.isArray(list)) { + this._list = list; + this.list$ = of(this._list); - } else if (isObservable(list)) { - this.list$ = list.pipe( - tap(_list => this._list = _list) - ); + } else if (isObservable(list)) { + this.list$ = list.pipe( + tap(_list => this._list = _list), + ); - } else { - this._list = null; - this.list$ = null; - } + } else { + this._list = null; + this.list$ = null; + } } } diff --git a/src/external-libraries/ng-dynamic-forms/core/model/misc/dynamic-form-control-validation.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/misc/dynamic-form-control-validation.model.ts index 3df3a4d521a..de0877f2336 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/misc/dynamic-form-control-validation.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/misc/dynamic-form-control-validation.model.ts @@ -2,11 +2,11 @@ export interface DynamicValidatorDescriptor { name: string; args: any; } - -export type DynamicValidatorsConfig = { [validatorKey: string]: any | DynamicValidatorDescriptor }; +// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents +export interface DynamicValidatorsConfig { [validatorKey: string]: any | DynamicValidatorDescriptor } export enum DynamicFormHook { - Blur = "blur", - Change = "change", - Submit = "submit" + Blur = 'blur', + Change = 'change', + Submit = 'submit' } diff --git a/src/external-libraries/ng-dynamic-forms/core/model/radio/dynamic-radio-group.model.spec.ts b/src/external-libraries/ng-dynamic-forms/core/model/radio/dynamic-radio-group.model.spec.ts index 327b6fcac58..9d7f5ddc440 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/radio/dynamic-radio-group.model.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/radio/dynamic-radio-group.model.spec.ts @@ -1,93 +1,100 @@ -import { waitForAsync } from "@angular/core/testing"; -import { isObservable, of } from "rxjs"; -import { DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP, DynamicRadioGroupModel } from "./dynamic-radio-group.model"; - -describe("DynamicRadioModel test suite", () => { - let model: DynamicRadioGroupModel; - const config = { - id: "radio", - options: of([ - { - value: "1", - label: "One" - }, - { - value: "2", - label: "Two" - } - ]) - }; - - beforeEach(() => model = new DynamicRadioGroupModel(config)); - - it("should initialize correctly", () => { - expect(model.disabled).toBe(false); - expect(model.errorMessages).toBeNull(); - expect(model.hasErrorMessages).toBe(false); - expect(model.hidden).toBe(false); - expect(model.id).toEqual(config.id); - expect(model.label).toBeNull(); - expect(model.legend).toBeNull(); - expect(isObservable(model.options$)).toBe(true); - expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP); - expect(model.value).toBeNull(); - expect(model.disabledChanges).toBeDefined(); - expect(model.valueChanges).toBeDefined(); +import { waitForAsync } from '@angular/core/testing'; +import { + isObservable, + of, +} from 'rxjs'; + +import { + DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP, + DynamicRadioGroupModel, +} from './dynamic-radio-group.model'; + +describe('DynamicRadioModel test suite', () => { + let model: DynamicRadioGroupModel; + const config = { + id: 'radio', + options: of([ + { + value: '1', + label: 'One', + }, + { + value: '2', + label: 'Two', + }, + ]), + }; + + beforeEach(() => model = new DynamicRadioGroupModel(config)); + + it('should initialize correctly', () => { + expect(model.disabled).toBe(false); + expect(model.errorMessages).toBeNull(); + expect(model.hasErrorMessages).toBe(false); + expect(model.hidden).toBe(false); + expect(model.id).toEqual(config.id); + expect(model.label).toBeNull(); + expect(model.legend).toBeNull(); + expect(isObservable(model.options$)).toBe(true); + expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP); + expect(model.value).toBeNull(); + expect(model.disabledChanges).toBeDefined(); + expect(model.valueChanges).toBeDefined(); + }); + + it('should select the correct option', waitForAsync(() => { + model.options$.subscribe(() => { + model.select(1); + + expect(model.value).toEqual(model.get(1).value); }); + })); - it("should select the correct option", waitForAsync(() => { - model.options$.subscribe(() => { - model.select(1); + it('should correctly create options Observable', waitForAsync(() => { + model.options$.subscribe(options => { + expect(options.length).toBe(2); + }); + })); - expect(model.value).toEqual(model.get(1).value); - }); - })); + it('should insert another option', waitForAsync(() => { + const option = { label: 'test option', value: 'test-option' }; + const index = 1; - it("should correctly create options Observable", waitForAsync(() => { - model.options$.subscribe(options => { - expect(options.length).toBe(2); - }); - })); + model.options$.subscribe(() => { + model.insert(index, option); - it("should insert another option", waitForAsync(() => { - const option = {label: "test option", value: "test-option"}; - const index = 1; + expect(model.options.length).toBe(3); + expect(model.get(index).value).toEqual(option.value); + }); + })); - model.options$.subscribe(() => { - model.insert(index, option); + it('should remove a given option correctly', waitForAsync(() => { + model.options$.subscribe(() => { + model.remove(1); - expect(model.options.length).toBe(3); - expect(model.get(index).value).toEqual(option.value); - }); - })); + expect(model.options.length).toBe(1); + }); + })); - it("should remove a given option correctly", waitForAsync(() => { - model.options$.subscribe(() => { - model.remove(1); + it('should get the correct option', () => { + expect(model.get(0)).toEqual(model.options[0]); + expect(model.get(1)).toEqual(model.options[1]); + }); - expect(model.options.length).toBe(1); - }); - })); + it('should make options Observable deliver an empty array when options are set to non-expected value', waitForAsync(() => { + model.options = null; + model.options$.subscribe(options => { - it("should get the correct option", () => { - expect(model.get(0)).toEqual(model.options[0]); - expect(model.get(1)).toEqual(model.options[1]); + expect(options.length).toBe(0); }); + })); - it("should make options Observable deliver an empty array when options are set to non-expected value", waitForAsync(() => { - model.options = null; - model.options$.subscribe(options => { + it('should serialize correctly', () => { + const json = JSON.parse(JSON.stringify(model)); - expect(options.length).toBe(0); - }); - })); - - it("should serialize correctly", () => { - const json = JSON.parse(JSON.stringify(model)); - - expect(json.id).toEqual(model.id); - expect(json.options.length).toBe(model.options.length); - expect(json.value).toBe(model.value); - expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP); - }); + expect(json.id).toEqual(model.id); + expect(json.options.length).toBe(model.options.length); + expect(json.value).toBe(model.value); + expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/model/radio/dynamic-radio-group.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/radio/dynamic-radio-group.model.ts index 064e71b370b..358628310b6 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/radio/dynamic-radio-group.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/radio/dynamic-radio-group.model.ts @@ -1,8 +1,11 @@ -import { DynamicOptionControlModel, DynamicOptionControlModelConfig } from "../dynamic-option-control.model"; -import { DynamicFormControlLayout } from "../misc/dynamic-form-control-layout.model"; -import { serializable } from "../../decorator/serializable.decorator"; +import { serializable } from '../../decorator/serializable.decorator'; +import { + DynamicOptionControlModel, + DynamicOptionControlModelConfig, +} from '../dynamic-option-control.model'; +import { DynamicFormControlLayout } from '../misc/dynamic-form-control-layout.model'; -export const DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP = "RADIO_GROUP"; +export const DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP = 'RADIO_GROUP'; export interface DynamicRadioGroupModelConfig extends DynamicOptionControlModelConfig { legend?: string; @@ -14,12 +17,12 @@ export class DynamicRadioGroupModel extends DynamicOptionControlModel { @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP; constructor(config: DynamicRadioGroupModelConfig, layout?: DynamicFormControlLayout) { - super(config, layout); + super(config, layout); - this.legend = config.legend ?? null; + this.legend = config.legend ?? null; } select(index: number): void { - this.value = this.get(index).value; + this.value = this.get(index).value; } } diff --git a/src/external-libraries/ng-dynamic-forms/core/model/select/dynamic-select.model.spec.ts b/src/external-libraries/ng-dynamic-forms/core/model/select/dynamic-select.model.spec.ts index a395d5c6217..32ebf2eafe5 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/select/dynamic-select.model.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/select/dynamic-select.model.spec.ts @@ -1,104 +1,108 @@ -import { waitForAsync } from "@angular/core/testing"; -import { DYNAMIC_FORM_CONTROL_TYPE_SELECT, DynamicSelectModel } from "./dynamic-select.model"; - -describe("DynamicSelectModel test suite", () => { - let model: DynamicSelectModel; - const config = { - id: "select", - multiple: false, - options: [ - { - value: "1", - label: "One" - }, - { - value: "2", - label: "Two" - } - ] - }; - - beforeEach(() => model = new DynamicSelectModel(config)); - - it("should initialize correctly", () => { - expect(model.disabled).toBe(false); - expect(model.filterable).toBe(false); - expect(model.hidden).toBe(false); - expect(model.id).toEqual(config.id); - expect(model.label).toBeNull(); - expect(model.multiple).toBe(config.multiple); - expect(model.options.length).toBe(config.options.length); - expect(model.placeholder).toEqual(""); - expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_SELECT); - expect(model.value).toBeNull(); - expect(model.compareWithFn).toBe(Object.is); - expect(model.disabledChanges).toBeDefined(); - expect(model.valueChanges).toBeDefined(); +import { waitForAsync } from '@angular/core/testing'; + +import { + DYNAMIC_FORM_CONTROL_TYPE_SELECT, + DynamicSelectModel, +} from './dynamic-select.model'; + +describe('DynamicSelectModel test suite', () => { + let model: DynamicSelectModel; + const config = { + id: 'select', + multiple: false, + options: [ + { + value: '1', + label: 'One', + }, + { + value: '2', + label: 'Two', + }, + ], + }; + + beforeEach(() => model = new DynamicSelectModel(config)); + + it('should initialize correctly', () => { + expect(model.disabled).toBe(false); + expect(model.filterable).toBe(false); + expect(model.hidden).toBe(false); + expect(model.id).toEqual(config.id); + expect(model.label).toBeNull(); + expect(model.multiple).toBe(config.multiple); + expect(model.options.length).toBe(config.options.length); + expect(model.placeholder).toEqual(''); + expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_SELECT); + expect(model.value).toBeNull(); + expect(model.compareWithFn).toBe(Object.is); + expect(model.disabledChanges).toBeDefined(); + expect(model.valueChanges).toBeDefined(); + }); + + it('should get and set text property correctly', () => { + expect(model.get(0).text).toEqual('One'); + + model.get(0).text = 'Eins'; + + expect(model.get(0).text).toEqual('Eins'); + }); + + it('should correctly create options Observable', waitForAsync(() => { + model.options$.subscribe(options => { + expect(options.length).toBe(config.options.length); }); + })); - it("should get and set text property correctly", () => { - expect(model.get(0).text).toEqual("One"); + it('should add another option', () => { + const option = { label: 'test option', value: 'test-option' }; - model.get(0).text = "Eins"; + model.add(option); - expect(model.get(0).text).toEqual("Eins"); - }); - - it("should correctly create options Observable", waitForAsync(() => { - model.options$.subscribe(options => { - expect(options.length).toBe(config.options.length); - }); - })); - - it("should add another option", () => { - const option = {label: "test option", value: "test-option"}; - - model.add(option); - - expect(model.options.length).toBe(config.options.length + 1); - expect(model.get(model.options.length - 1).value).toEqual(option.value); - }); + expect(model.options.length).toBe(config.options.length + 1); + expect(model.get(model.options.length - 1).value).toEqual(option.value); + }); - it("should insert another option", () => { - const option = {label: "test option", value: "test-option"}; - const index = 1; + it('should insert another option', () => { + const option = { label: 'test option', value: 'test-option' }; + const index = 1; - model.insert(index, option); + model.insert(index, option); - expect(model.options.length).toBe(config.options.length + 1); - expect(model.get(index).value).toEqual(option.value); - }); + expect(model.options.length).toBe(config.options.length + 1); + expect(model.get(index).value).toEqual(option.value); + }); - it("should remove a given option", () => { - model.remove(1); + it('should remove a given option', () => { + model.remove(1); - expect(model.options.length).toBe(config.options.length - 1); - }); + expect(model.options.length).toBe(config.options.length - 1); + }); - it("should get the correct option", () => { - expect(model.get(0)).toEqual(model.options[0]); - expect(model.get(1)).toEqual(model.options[1]); - }); + it('should get the correct option', () => { + expect(model.get(0)).toEqual(model.options[0]); + expect(model.get(1)).toEqual(model.options[1]); + }); - it("should select correct option", () => { - model.select(1); + it('should select correct option', () => { + model.select(1); - expect(model.value).toEqual(model.get(1).value); - }); + expect(model.value).toEqual(model.get(1).value); + }); - it("should select multiple options", () => { - model.multiple = true; - model.select(0, 1); + it('should select multiple options', () => { + model.multiple = true; + model.select(0, 1); - expect(model.value).toEqual([model.get(0).value, model.get(1).value]); - }); + expect(model.value).toEqual([model.get(0).value, model.get(1).value]); + }); - it("should serialize correctly", () => { - const json = JSON.parse(JSON.stringify(model)); + it('should serialize correctly', () => { + const json = JSON.parse(JSON.stringify(model)); - expect(json.id).toEqual(model.id); - expect(json.options.length).toBe(model.options.length); - expect(json.value).toBe(model.value); - expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_SELECT); - }); + expect(json.id).toEqual(model.id); + expect(json.options.length).toBe(model.options.length); + expect(json.value).toBe(model.value); + expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_SELECT); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/model/select/dynamic-select.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/select/dynamic-select.model.ts index 6e716a48d78..e33880523fc 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/select/dynamic-select.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/select/dynamic-select.model.ts @@ -1,9 +1,15 @@ -import { DynamicOptionControlModel, DynamicOptionControlModelConfig } from "../dynamic-option-control.model"; -import { DynamicFormControlLayout } from "../misc/dynamic-form-control-layout.model"; -import { serializable } from "../../decorator/serializable.decorator"; -import { isBoolean, isFunction } from "../../utils/core.utils"; +import { serializable } from '../../decorator/serializable.decorator'; +import { + isBoolean, + isFunction, +} from '../../utils/core.utils'; +import { + DynamicOptionControlModel, + DynamicOptionControlModelConfig, +} from '../dynamic-option-control.model'; +import { DynamicFormControlLayout } from '../misc/dynamic-form-control-layout.model'; -export const DYNAMIC_FORM_CONTROL_TYPE_SELECT = "SELECT"; +export const DYNAMIC_FORM_CONTROL_TYPE_SELECT = 'SELECT'; export interface DynamicSelectModelConfig extends DynamicOptionControlModelConfig { compareWithFn?: (o1: any, o2: any) => boolean; @@ -15,7 +21,7 @@ export interface DynamicSelectModelConfig extends DynamicOptionControlModelCo } export class DynamicSelectModel extends DynamicOptionControlModel { - compareWithFn: (value1: any, value2: any) => boolean; + compareWithFn: (value1: any, value2: any) => boolean; @serializable() filterable: boolean; @serializable() multiple: boolean; @serializable() placeholder: string; @@ -25,17 +31,17 @@ export class DynamicSelectModel extends DynamicOptionControlModel { @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_SELECT; constructor(config: DynamicSelectModelConfig, layout?: DynamicFormControlLayout) { - super(config, layout); + super(config, layout); - this.compareWithFn = isFunction(config.compareWithFn) ? config.compareWithFn : Object.is; - this.filterable = isBoolean(config.filterable) ? config.filterable : false; - this.multiple = isBoolean(config.multiple) ? config.multiple : false; - this.placeholder = config.placeholder ?? ""; - this.prefix = config.prefix ?? null; - this.suffix = config.suffix ?? null; + this.compareWithFn = isFunction(config.compareWithFn) ? config.compareWithFn : Object.is; + this.filterable = isBoolean(config.filterable) ? config.filterable : false; + this.multiple = isBoolean(config.multiple) ? config.multiple : false; + this.placeholder = config.placeholder ?? ''; + this.prefix = config.prefix ?? null; + this.suffix = config.suffix ?? null; } select(...indices: number[]): void { - this.value = this.multiple ? indices.map(index => this.get(index).value) : this.get(indices[0]).value; + this.value = this.multiple ? indices.map(index => this.get(index).value) : this.get(indices[0]).value; } } diff --git a/src/external-libraries/ng-dynamic-forms/core/model/switch/dynamic-switch.model.spec.ts b/src/external-libraries/ng-dynamic-forms/core/model/switch/dynamic-switch.model.spec.ts index 1ed6479618b..d86eca4b8a2 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/switch/dynamic-switch.model.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/switch/dynamic-switch.model.spec.ts @@ -1,32 +1,35 @@ -import { DYNAMIC_FORM_CONTROL_TYPE_SWITCH, DynamicSwitchModel } from "./dynamic-switch.model"; +import { + DYNAMIC_FORM_CONTROL_TYPE_SWITCH, + DynamicSwitchModel, +} from './dynamic-switch.model'; -describe("DynamicSwitchModel test suite", () => { - let model: DynamicSwitchModel; - const config = { - id: "switch" - }; +describe('DynamicSwitchModel test suite', () => { + let model: DynamicSwitchModel; + const config = { + id: 'switch', + }; - beforeEach(() => model = new DynamicSwitchModel(config)); + beforeEach(() => model = new DynamicSwitchModel(config)); - it("should initialize correctly", () => { - expect(model.disabled).toBe(false); - expect(model.hidden).toBe(false); - expect(model.id).toEqual(config.id); - expect(model.label).toBeNull(); - expect(model.labelPosition).toBeNull(); - expect(model.offLabel).toBeNull(); - expect(model.onLabel).toBeNull(); - expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_SWITCH); - expect(model.value).toBe(false); - expect(model.disabledChanges).toBeDefined(); - expect(model.valueChanges).toBeDefined(); - }); + it('should initialize correctly', () => { + expect(model.disabled).toBe(false); + expect(model.hidden).toBe(false); + expect(model.id).toEqual(config.id); + expect(model.label).toBeNull(); + expect(model.labelPosition).toBeNull(); + expect(model.offLabel).toBeNull(); + expect(model.onLabel).toBeNull(); + expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_SWITCH); + expect(model.value).toBe(false); + expect(model.disabledChanges).toBeDefined(); + expect(model.valueChanges).toBeDefined(); + }); - it("should serialize correctly", () => { - const json = JSON.parse(JSON.stringify(model)); + it('should serialize correctly', () => { + const json = JSON.parse(JSON.stringify(model)); - expect(json.id).toEqual(model.id); - expect(json.value).toBe(model.value); - expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_SWITCH); - }); + expect(json.id).toEqual(model.id); + expect(json.value).toBe(model.value); + expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_SWITCH); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/model/switch/dynamic-switch.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/switch/dynamic-switch.model.ts index cd082b7e68a..21e670fe317 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/switch/dynamic-switch.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/switch/dynamic-switch.model.ts @@ -1,8 +1,11 @@ -import { DynamicCheckControlModel, DynamicCheckControlModelConfig } from "../dynamic-check-control.model"; -import { DynamicFormControlLayout } from "../misc/dynamic-form-control-layout.model"; -import { serializable } from "../../decorator/serializable.decorator"; +import { serializable } from '../../decorator/serializable.decorator'; +import { + DynamicCheckControlModel, + DynamicCheckControlModelConfig, +} from '../dynamic-check-control.model'; +import { DynamicFormControlLayout } from '../misc/dynamic-form-control-layout.model'; -export const DYNAMIC_FORM_CONTROL_TYPE_SWITCH = "SWITCH"; +export const DYNAMIC_FORM_CONTROL_TYPE_SWITCH = 'SWITCH'; export interface DynamicSwitchModelConfig extends DynamicCheckControlModelConfig { offLabel?: string; @@ -16,9 +19,9 @@ export class DynamicSwitchModel extends DynamicCheckControlModel { @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_SWITCH; constructor(config: DynamicSwitchModelConfig, layout?: DynamicFormControlLayout) { - super(config, layout); + super(config, layout); - this.offLabel = config.offLabel ?? null; - this.onLabel = config.onLabel ?? null; + this.offLabel = config.offLabel ?? null; + this.onLabel = config.onLabel ?? null; } } diff --git a/src/external-libraries/ng-dynamic-forms/core/model/textarea/dynamic-textarea.model.spec.ts b/src/external-libraries/ng-dynamic-forms/core/model/textarea/dynamic-textarea.model.spec.ts index 48d0648741b..b72be87ae8e 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/textarea/dynamic-textarea.model.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/textarea/dynamic-textarea.model.spec.ts @@ -1,44 +1,48 @@ -import { DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA, DYNAMIC_FORM_TEXTAREA_WRAP_SOFT, DynamicTextAreaModel } from "./dynamic-textarea.model"; - - -describe("DynamicTextAreaModel test suite", () => { - let model: DynamicTextAreaModel; - const config: any = { - id: "textarea", - validators: {required: null, minLength: 5} - }; - - beforeEach(() => model = new DynamicTextAreaModel(config)); - - it("should initialize correctly", () => { - expect(model.cols).toBe(20); - expect(model.disabled).toBe(false); - expect(model.errorMessages).toBeNull(); - expect(model.hasErrorMessages).toBe(false); - expect(model.hidden).toBe(false); - expect(model.id).toEqual(config.id); - expect(model.label).toBeNull(); - expect(model.rows).toBe(2); - expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA); - expect(model.value).toBeNull(); - expect(model.wrap).toEqual(DYNAMIC_FORM_TEXTAREA_WRAP_SOFT); - expect(model.disabledChanges).toBeDefined(); - expect(model.valueChanges).toBeDefined(); - }); - - it("should set disabled property correctly", () => { - model.disabled = true; - - expect(model.disabled).toBe(true); - }); - - it("should serialize correctly", () => { - const json = JSON.parse(JSON.stringify(model)); - - expect(json.id).toEqual(model.id); - expect(json.cols).toBe(model.cols); - expect(Object.keys(json.validators).length).toBe(Object.keys(model.validators as any).length); - expect(json.value).toBe(model.value); - expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA); - }); +import { + DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA, + DYNAMIC_FORM_TEXTAREA_WRAP_SOFT, + DynamicTextAreaModel, +} from './dynamic-textarea.model'; + + +describe('DynamicTextAreaModel test suite', () => { + let model: DynamicTextAreaModel; + const config: any = { + id: 'textarea', + validators: { required: null, minLength: 5 }, + }; + + beforeEach(() => model = new DynamicTextAreaModel(config)); + + it('should initialize correctly', () => { + expect(model.cols).toBe(20); + expect(model.disabled).toBe(false); + expect(model.errorMessages).toBeNull(); + expect(model.hasErrorMessages).toBe(false); + expect(model.hidden).toBe(false); + expect(model.id).toEqual(config.id); + expect(model.label).toBeNull(); + expect(model.rows).toBe(2); + expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA); + expect(model.value).toBeNull(); + expect(model.wrap).toEqual(DYNAMIC_FORM_TEXTAREA_WRAP_SOFT); + expect(model.disabledChanges).toBeDefined(); + expect(model.valueChanges).toBeDefined(); + }); + + it('should set disabled property correctly', () => { + model.disabled = true; + + expect(model.disabled).toBe(true); + }); + + it('should serialize correctly', () => { + const json = JSON.parse(JSON.stringify(model)); + + expect(json.id).toEqual(model.id); + expect(json.cols).toBe(model.cols); + expect(Object.keys(json.validators).length).toBe(Object.keys(model.validators as any).length); + expect(json.value).toBe(model.value); + expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/model/textarea/dynamic-textarea.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/textarea/dynamic-textarea.model.ts index 345b14d8142..9bbc0257d8b 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/textarea/dynamic-textarea.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/textarea/dynamic-textarea.model.ts @@ -1,12 +1,15 @@ -import { DynamicInputControlModel, DynamicInputControlModelConfig } from "../dynamic-input-control.model"; -import { DynamicFormControlLayout } from "../misc/dynamic-form-control-layout.model"; -import { serializable } from "../../decorator/serializable.decorator"; -import { isNumber } from "../../utils/core.utils"; +import { serializable } from '../../decorator/serializable.decorator'; +import { isNumber } from '../../utils/core.utils'; +import { + DynamicInputControlModel, + DynamicInputControlModelConfig, +} from '../dynamic-input-control.model'; +import { DynamicFormControlLayout } from '../misc/dynamic-form-control-layout.model'; -export const DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA = "TEXTAREA"; +export const DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA = 'TEXTAREA'; -export const DYNAMIC_FORM_TEXTAREA_WRAP_HARD = "hard"; -export const DYNAMIC_FORM_TEXTAREA_WRAP_SOFT = "soft"; +export const DYNAMIC_FORM_TEXTAREA_WRAP_HARD = 'hard'; +export const DYNAMIC_FORM_TEXTAREA_WRAP_SOFT = 'soft'; export interface DynamicTextAreaModelConfig extends DynamicInputControlModelConfig { cols?: number; @@ -22,10 +25,10 @@ export class DynamicTextAreaModel extends DynamicInputControlModel { @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA; constructor(config: DynamicTextAreaModelConfig, layout?: DynamicFormControlLayout) { - super(config, layout); + super(config, layout); - this.cols = isNumber(config.cols) ? config.cols : 20; - this.rows = isNumber(config.rows) ? config.rows : 2; - this.wrap = config.wrap ?? DYNAMIC_FORM_TEXTAREA_WRAP_SOFT; + this.cols = isNumber(config.cols) ? config.cols : 20; + this.rows = isNumber(config.rows) ? config.rows : 2; + this.wrap = config.wrap ?? DYNAMIC_FORM_TEXTAREA_WRAP_SOFT; } } diff --git a/src/external-libraries/ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model.spec.ts b/src/external-libraries/ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model.spec.ts index 287b0c7f202..94cbc1cab3f 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model.spec.ts @@ -1,35 +1,38 @@ -import { DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER, DynamicTimePickerModel } from "./dynamic-timepicker.model"; +import { + DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER, + DynamicTimePickerModel, +} from './dynamic-timepicker.model'; -describe("DynamicTimePickerModel test suite", () => { - let model: DynamicTimePickerModel; - const config = { - id: "timepicker", - value: new Date() - }; +describe('DynamicTimePickerModel test suite', () => { + let model: DynamicTimePickerModel; + const config = { + id: 'timepicker', + value: new Date(), + }; - beforeEach(() => model = new DynamicTimePickerModel(config)); + beforeEach(() => model = new DynamicTimePickerModel(config)); - it("should initialize correctly", () => { - expect(model.disabled).toBe(false); - expect(model.hidden).toBe(false); - expect(model.id).toEqual(config.id); - expect(model.label).toBeNull(); - expect(model.format).toBeNull(); - expect(model.max).toBeNull(); - expect(model.meridian).toBe(false); - expect(model.min).toBeNull(); - expect(model.showSeconds).toBe(false); - expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER); - expect(model.value).toBe(config.value); - expect(model.disabledChanges).toBeDefined(); - expect(model.valueChanges).toBeDefined(); - }); + it('should initialize correctly', () => { + expect(model.disabled).toBe(false); + expect(model.hidden).toBe(false); + expect(model.id).toEqual(config.id); + expect(model.label).toBeNull(); + expect(model.format).toBeNull(); + expect(model.max).toBeNull(); + expect(model.meridian).toBe(false); + expect(model.min).toBeNull(); + expect(model.showSeconds).toBe(false); + expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER); + expect(model.value).toBe(config.value); + expect(model.disabledChanges).toBeDefined(); + expect(model.valueChanges).toBeDefined(); + }); - it("should serialize correctly", () => { - const json = JSON.parse(JSON.stringify(model)); + it('should serialize correctly', () => { + const json = JSON.parse(JSON.stringify(model)); - expect(json.id).toEqual(model.id); - expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER); - expect(json.value).toBe((model.value as Date).toJSON()); - }); + expect(json.id).toEqual(model.id); + expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER); + expect(json.value).toBe((model.value as Date).toJSON()); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model.ts index dbd37f1c3d7..feb6275f024 100644 --- a/src/external-libraries/ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model.ts +++ b/src/external-libraries/ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model.ts @@ -1,9 +1,12 @@ -import { DynamicDateControlModel, DynamicDateControlModelConfig } from "../dynamic-date-control.model"; -import { DynamicFormControlLayout } from "../misc/dynamic-form-control-layout.model"; -import { serializable } from "../../decorator/serializable.decorator"; -import { isBoolean } from "../../utils/core.utils"; +import { serializable } from '../../decorator/serializable.decorator'; +import { isBoolean } from '../../utils/core.utils'; +import { + DynamicDateControlModel, + DynamicDateControlModelConfig, +} from '../dynamic-date-control.model'; +import { DynamicFormControlLayout } from '../misc/dynamic-form-control-layout.model'; -export const DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER = "TIMEPICKER"; +export const DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER = 'TIMEPICKER'; export interface DynamicTimePickerModelConfig extends DynamicDateControlModelConfig { meridian?: boolean; @@ -17,9 +20,9 @@ export class DynamicTimePickerModel extends DynamicDateControlModel { @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER; constructor(config: DynamicTimePickerModelConfig, layout?: DynamicFormControlLayout) { - super(config, layout); + super(config, layout); - this.meridian = isBoolean(config.meridian) ? config.meridian : false; - this.showSeconds = isBoolean(config.showSeconds) ? config.showSeconds : false; + this.meridian = isBoolean(config.meridian) ? config.meridian : false; + this.showSeconds = isBoolean(config.showSeconds) ? config.showSeconds : false; } } diff --git a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-component.service.spec.ts b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-component.service.spec.ts index b41e424f0e5..b69baaea0d2 100644 --- a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-component.service.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-component.service.spec.ts @@ -1,107 +1,118 @@ -import { inject, TestBed } from "@angular/core/testing"; -import { ChangeDetectorRef, ComponentRef, ElementRef, Injector, Type, ViewRef } from "@angular/core"; -import { DynamicFormComponentService } from "./dynamic-form-component.service"; -import { DynamicFormControlModel } from "../model/dynamic-form-control.model"; -import { DynamicInputModel } from "../model/input/dynamic-input.model"; +import { + ChangeDetectorRef, + ComponentRef, + ElementRef, + Injector, + Type, + ViewRef, +} from '@angular/core'; +import { + inject, + TestBed, +} from '@angular/core/testing'; + +import { DynamicFormControlModel } from '../model/dynamic-form-control.model'; +import { DynamicInputModel } from '../model/input/dynamic-input.model'; +import { DynamicFormComponentService } from './dynamic-form-component.service'; export class TestComponentRef extends ComponentRef { - readonly changeDetectorRef!: ChangeDetectorRef; - readonly componentType!: Type; - readonly hostView!: ViewRef; - readonly injector!: Injector; - readonly instance!: any; - readonly location!: ElementRef; + readonly changeDetectorRef!: ChangeDetectorRef; + readonly componentType!: Type; + readonly hostView!: ViewRef; + readonly injector!: Injector; + readonly instance!: any; + readonly location!: ElementRef; - destroy(): void { - } + destroy(): void { + } - onDestroy(): void { - } + onDestroy(): void { + } - setInput(name: string, value: unknown) { - } + setInput(name: string, value: unknown) { + } - constructor() { - super(); - } + constructor() { + super(); + } } -describe("DynamicFormInstanceService test suite", () => { - let service: DynamicFormComponentService; - let model: DynamicFormControlModel; - let componentRef: TestComponentRef; +describe('DynamicFormInstanceService test suite', () => { + let service: DynamicFormComponentService; + let model: DynamicFormControlModel; + let componentRef: TestComponentRef; - beforeEach(() => { - TestBed.configureTestingModule({ - providers: [DynamicFormComponentService] - }); - - model = new DynamicInputModel({id: "test"}); - componentRef = new TestComponentRef(); + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [DynamicFormComponentService], }); - beforeEach(inject([DynamicFormComponentService], - (componentService: DynamicFormComponentService) => service = componentService)); + model = new DynamicInputModel({ id: 'test' }); + componentRef = new TestComponentRef(); + }); - it("should return undefined when nothing is registered", () => { - expect(service.getFormControlRef(model.id)).toBeUndefined(); - }); + beforeEach(inject([DynamicFormComponentService], + (componentService: DynamicFormComponentService) => service = componentService)); - it("should return a component reference when registered", () => { - service.registerFormControl(model, componentRef); + it('should return undefined when nothing is registered', () => { + expect(service.getFormControlRef(model.id)).toBeUndefined(); + }); - expect(service.getFormControlRef(model.id)).toBe(componentRef); - }); + it('should return a component reference when registered', () => { + service.registerFormControl(model, componentRef); - it("should return undefined when index is invalid", () => { - service.registerFormControl(model, componentRef); + expect(service.getFormControlRef(model.id)).toBe(componentRef); + }); - expect(service.getFormControlRef(model.id, 0)).toBeUndefined(); - }); + it('should return undefined when index is invalid', () => { + service.registerFormControl(model, componentRef); - it("should return a component reference when index is valid", () => { - service.registerFormControl(model, componentRef, 0); + expect(service.getFormControlRef(model.id, 0)).toBeUndefined(); + }); - expect(service.getFormControlRef(model.id, 0)).toBe(componentRef); - }); + it('should return a component reference when index is valid', () => { + service.registerFormControl(model, componentRef, 0); - it("should still have this reference at the given index, when deleting the first one", () => { - service.registerFormControl(model, componentRef, 0); - service.registerFormControl(model, componentRef, 1); - service.unregisterFormControl(model.id, 0); + expect(service.getFormControlRef(model.id, 0)).toBe(componentRef); + }); - expect(service.getFormControlRef(model.id, 0)).toBeDefined(); - }); + it('should still have this reference at the given index, when deleting the first one', () => { + service.registerFormControl(model, componentRef, 0); + service.registerFormControl(model, componentRef, 1); + service.unregisterFormControl(model.id, 0); - it("should no more have this reference at the given index, when deleting the first one two times", () => { - service.registerFormControl(model, componentRef, 0); - service.registerFormControl(model, componentRef, 1); - service.unregisterFormControl(model.id, 0); - service.unregisterFormControl(model.id, 0); + expect(service.getFormControlRef(model.id, 0)).toBeDefined(); + }); - expect(service.getFormControlRef(model.id, 0)).toBeUndefined(); - }); + it('should no more have this reference at the given index, when deleting the first one two times', () => { + service.registerFormControl(model, componentRef, 0); + service.registerFormControl(model, componentRef, 1); + service.unregisterFormControl(model.id, 0); + service.unregisterFormControl(model.id, 0); - it("should warn when a model is registered with index for a non-array form control", () => { - spyOn(console, "warn"); + expect(service.getFormControlRef(model.id, 0)).toBeUndefined(); + }); - service.registerFormControl(model, componentRef); - service.registerFormControl(model, componentRef, 1); + it('should warn when a model is registered with index for a non-array form control', () => { + spyOn(console, 'warn'); - expect(console.warn).toHaveBeenCalledWith(`registerFormControlRef is called with index for a non-array form control: ${model.id}`); - }); + service.registerFormControl(model, componentRef); + service.registerFormControl(model, componentRef, 1); - it("should unregister a component ref", () => { - service.registerFormControl(model, componentRef); - service.unregisterFormControl(model.id); + expect(console.warn).toHaveBeenCalledWith(`registerFormControlRef is called with index for a non-array form control: ${model.id}`); + }); - expect(service.getFormControlRef(model.id)).toBeUndefined(); - }); + it('should unregister a component ref', () => { + service.registerFormControl(model, componentRef); + service.unregisterFormControl(model.id); - it("should return a custom form control component type", () => { - const inputModel = new DynamicInputModel({id: "input"}); + expect(service.getFormControlRef(model.id)).toBeUndefined(); + }); - expect(service.getCustomComponentType(inputModel)).toBe(null); - }); + it('should return a custom form control component type', () => { + const inputModel = new DynamicInputModel({ id: 'input' }); + + expect(service.getCustomComponentType(inputModel)).toBe(null); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-component.service.ts b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-component.service.ts index 64ccd572de7..879cdcab40b 100644 --- a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-component.service.ts +++ b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-component.service.ts @@ -1,18 +1,41 @@ -import { ComponentRef, EventEmitter, Inject, Injectable, InjectionToken, Optional, QueryList, Type, ViewContainerRef } from "@angular/core"; -import { DynamicFormControl } from "../component/dynamic-form-control-interface"; -import { DynamicFormControlModel } from "../model/dynamic-form-control.model"; -import { isFunction, isNumber } from "../utils/core.utils"; -import { UntypedFormControl, UntypedFormGroup } from "@angular/forms"; -import { DynamicFormLayout } from "./dynamic-form-layout.service"; -import { DynamicFormArrayGroupModel } from "../model/form-array/dynamic-form-array.model"; -import { DynamicTemplateDirective } from "../directive/dynamic-template.directive"; -import { DynamicFormControlCustomEvent, DynamicFormControlEvent } from "../component/dynamic-form-control-event"; -import { DynamicFormControlLayoutContext, DynamicFormControlLayoutPlace } from "../model/misc/dynamic-form-control-layout.model"; +import { + ComponentRef, + EventEmitter, + Inject, + Injectable, + InjectionToken, + Optional, + QueryList, + Type, + ViewContainerRef, +} from '@angular/core'; +import { + UntypedFormControl, + UntypedFormGroup, +} from '@angular/forms'; + +import { + DynamicFormControlCustomEvent, + DynamicFormControlEvent, +} from '../component/dynamic-form-control-event'; +import { DynamicFormControl } from '../component/dynamic-form-control-interface'; +import { DynamicTemplateDirective } from '../directive/dynamic-template.directive'; +import { DynamicFormControlModel } from '../model/dynamic-form-control.model'; +import { DynamicFormArrayGroupModel } from '../model/form-array/dynamic-form-array.model'; +import { + DynamicFormControlLayoutContext, + DynamicFormControlLayoutPlace, +} from '../model/misc/dynamic-form-control-layout.model'; +import { + isFunction, + isNumber, +} from '../utils/core.utils'; +import { DynamicFormLayout } from './dynamic-form-layout.service'; export type DynamicFormControlRef = ComponentRef; export type DynamicFormControlMapFn = (model: DynamicFormControlModel) => Type | null; -export const DYNAMIC_FORM_CONTROL_MAP_FN = new InjectionToken("DYNAMIC_FORM_CONTROL_MAP_FN"); +export const DYNAMIC_FORM_CONTROL_MAP_FN = new InjectionToken('DYNAMIC_FORM_CONTROL_MAP_FN'); export interface IDynamicFormControlContainer { context: DynamicFormArrayGroupModel | null; @@ -48,8 +71,11 @@ export interface IDynamicFormControlContainer { markForCheck(): void; getClass(context: DynamicFormControlLayoutContext, place: DynamicFormControlLayoutPlace): string; + // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents onChange($event: Event | DynamicFormControlEvent | any): void; + // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents onBlur($event: FocusEvent | DynamicFormControlEvent | any): void; + // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents onFocus($event: FocusEvent | DynamicFormControlEvent | any): void; onCustomEvent($event: DynamicFormControlEvent | DynamicFormControlCustomEvent): void; @@ -94,74 +120,74 @@ interface IDynamicFormComponent { } @Injectable({ - providedIn: "root", + providedIn: 'root', }) export class DynamicFormComponentService { - private forms: IDynamicFormComponent[] = []; - private formControls: { [key: string]: DynamicFormControlRef | DynamicFormControlRef[] } = {}; - - constructor(@Inject(DYNAMIC_FORM_CONTROL_MAP_FN) @Optional() private readonly DYNAMIC_FORM_CONTROL_MAP_FN: any) { - this.DYNAMIC_FORM_CONTROL_MAP_FN = DYNAMIC_FORM_CONTROL_MAP_FN as DynamicFormControlMapFn; + private forms: IDynamicFormComponent[] = []; + private formControls: { [key: string]: DynamicFormControlRef | DynamicFormControlRef[] } = {}; + // eslint-disable-next-line @typescript-eslint/no-shadow + constructor(@Inject(DYNAMIC_FORM_CONTROL_MAP_FN) @Optional() private readonly DYNAMIC_FORM_CONTROL_MAP_FN: any) { + this.DYNAMIC_FORM_CONTROL_MAP_FN = DYNAMIC_FORM_CONTROL_MAP_FN as DynamicFormControlMapFn; + } + + getForms(): IterableIterator { + return this.forms.values(); + } + + registerForm(component: IDynamicFormComponent): void { + this.forms.push(component); + } + + unregisterForm(component: IDynamicFormComponent): void { + const indexOf = this.forms.indexOf(component); + + if (indexOf !== -1) { + this.forms.splice(indexOf, 1); } + } - getForms(): IterableIterator { - return this.forms.values(); - } + getFormControlRef(modelId: string, index?: number): DynamicFormControlRef | undefined { + const ref: DynamicFormControlRef | DynamicFormControlRef[] = this.formControls[modelId]; - registerForm(component: IDynamicFormComponent): void { - this.forms.push(component); - } + if (isNumber(index)) { + return Array.isArray(ref) ? ref[index] : undefined; - unregisterForm(component: IDynamicFormComponent): void { - const indexOf = this.forms.indexOf(component); - - if (indexOf !== -1) { - this.forms.splice(indexOf, 1); - } + } else { + return ref as DynamicFormControlRef; } + } - getFormControlRef(modelId: string, index?: number): DynamicFormControlRef | undefined { - const ref: DynamicFormControlRef | DynamicFormControlRef[] = this.formControls[modelId]; + registerFormControl(model: DynamicFormControlModel, ref: DynamicFormControlRef, index?: number): void { + if (isNumber(index)) { // threat model as array child + const arrayRef: DynamicFormControlRef[] = this.formControls[model.id] as DynamicFormControlRef[] || []; - if (isNumber(index)) { - return Array.isArray(ref) ? ref[index] : undefined; + if (Array.isArray(arrayRef)) { + arrayRef.splice(index, 0, ref); + this.formControls[model.id] = arrayRef; - } else { - return ref as DynamicFormControlRef; - } - } + } else { + console.warn(`registerFormControlRef is called with index for a non-array form control: ${model.id}`); + } - registerFormControl(model: DynamicFormControlModel, ref: DynamicFormControlRef, index?: number): void { - if (isNumber(index)) { // threat model as array child - const arrayRef: DynamicFormControlRef[] = this.formControls[model.id] as DynamicFormControlRef[] || []; - - if (Array.isArray(arrayRef)) { - arrayRef.splice(index, 0, ref); - this.formControls[model.id] = arrayRef; - - } else { - console.warn(`registerFormControlRef is called with index for a non-array form control: ${model.id}`); - } - - } else { - this.formControls[model.id] = ref; - } + } else { + this.formControls[model.id] = ref; } + } - unregisterFormControl(modelId: string, index?: number): void { - const componentRef = this.formControls[modelId]; + unregisterFormControl(modelId: string, index?: number): void { + const componentRef = this.formControls[modelId]; - if (isNumber(index)) { - if (Array.isArray(componentRef) && componentRef[index] !== undefined) { - componentRef.splice(index, 1); - } + if (isNumber(index)) { + if (Array.isArray(componentRef) && componentRef[index] !== undefined) { + componentRef.splice(index, 1); + } - } else if (componentRef !== undefined) { - delete this.formControls[modelId]; - } + } else if (componentRef !== undefined) { + delete this.formControls[modelId]; } + } - getCustomComponentType(model: DynamicFormControlModel): Type | null { - return isFunction(this.DYNAMIC_FORM_CONTROL_MAP_FN) ? this.DYNAMIC_FORM_CONTROL_MAP_FN(model) : null; - } + getCustomComponentType(model: DynamicFormControlModel): Type | null { + return isFunction(this.DYNAMIC_FORM_CONTROL_MAP_FN) ? this.DYNAMIC_FORM_CONTROL_MAP_FN(model) : null; + } } diff --git a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-layout.service.spec.ts b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-layout.service.spec.ts index 74c1d5037fd..2af7bb6bb20 100644 --- a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-layout.service.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-layout.service.spec.ts @@ -1,78 +1,85 @@ -import { TestBed, inject } from "@angular/core/testing"; -import { ReactiveFormsModule } from "@angular/forms"; -import { DynamicFormLayout, DynamicFormLayoutService } from "./dynamic-form-layout.service"; -import { DynamicInputModel } from "../model/input/dynamic-input.model"; -import { DynamicFormArrayModel } from "../model/form-array/dynamic-form-array.model"; +import { + inject, + TestBed, +} from '@angular/core/testing'; +import { ReactiveFormsModule } from '@angular/forms'; +import { DynamicFormArrayModel } from '../model/form-array/dynamic-form-array.model'; +import { DynamicInputModel } from '../model/input/dynamic-input.model'; +import { + DynamicFormLayout, + DynamicFormLayoutService, +} from './dynamic-form-layout.service'; -describe("DynamicFormLayoutService test suite", () => { - let service: DynamicFormLayoutService; - let formLayout: DynamicFormLayout; - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [ReactiveFormsModule], - providers: [DynamicFormLayoutService] - }); +describe('DynamicFormLayoutService test suite', () => { + let service: DynamicFormLayoutService; + let formLayout: DynamicFormLayout; - formLayout = { - test1: { - element: { - label: "element-test-class", - control: "element-test-class" - }, - grid: { - label: "grid-test-class", - control: "grid-test-class" - } - }, - test2: { - element: { - label: "element-test-class", - control: "element-test-class" - } - }, - test3: { - grid: { - label: "grid-test-class", - control: "grid-test-class" - } - } - }; + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ReactiveFormsModule], + providers: [DynamicFormLayoutService], }); - beforeEach(inject([DynamicFormLayoutService], - (layoutService: DynamicFormLayoutService) => service = layoutService)); + formLayout = { + test1: { + element: { + label: 'element-test-class', + control: 'element-test-class', + }, + grid: { + label: 'grid-test-class', + control: 'grid-test-class', + }, + }, + test2: { + element: { + label: 'element-test-class', + control: 'element-test-class', + }, + }, + test3: { + grid: { + label: 'grid-test-class', + control: 'grid-test-class', + }, + }, + }; + }); - it("should find a form control layout in form layout", () => { - expect(service.findById("test", formLayout)).toBeNull(); - expect(service.findById("test1", formLayout)).toBe(formLayout.test1); - expect(service.findById("test3", formLayout)).toBe(formLayout.test3); - expect(service.findById("test1", null)).toBeNull(); - }); - - it("should extract a CSS class string from a form control layout", () => { - expect(service.getClass(null, "element", "control")).toEqual(""); - expect(service.getClass(formLayout.test1, "element", "control")).toEqual("element-test-class"); - expect(service.getClass(formLayout.test1, "element", "container")).toEqual(""); - expect(service.getClass(formLayout.test2, "grid", "control")).toEqual(""); - expect(service.getClass(formLayout.test3, "grid", "control")).toEqual("grid-test-class"); - }); + beforeEach(inject([DynamicFormLayoutService], + (layoutService: DynamicFormLayoutService) => service = layoutService)); - it("should return a unique element id", () => { - const testModel1 = new DynamicInputModel({id: "input"}); - const testModel2 = new DynamicFormArrayModel({ - id: "formArray", - groupFactory: () => { - return [new DynamicInputModel({id: "formArrayInput"})]; - } - }); - const testModel3 = testModel2.get(0); - const testModel4 = testModel3.get(0); + it('should find a form control layout in form layout', () => { + expect(service.findById('test', formLayout)).toBeNull(); + expect(service.findById('test1', formLayout)).toBe(formLayout.test1); + expect(service.findById('test3', formLayout)).toBe(formLayout.test3); + expect(service.findById('test1', null)).toBeNull(); + }); - testModel4.parent = testModel3; + it('should extract a CSS class string from a form control layout', () => { + expect(service.getClass(null, 'element', 'control')).toEqual(''); + expect(service.getClass(formLayout.test1, 'element', 'control')).toEqual('element-test-class'); + expect(service.getClass(formLayout.test1, 'element', 'container')).toEqual(''); + expect(service.getClass(formLayout.test2, 'grid', 'control')).toEqual(''); + expect(service.getClass(formLayout.test3, 'grid', 'control')).toEqual('grid-test-class'); + }); - expect(service.getElementId(testModel1)).toBe(testModel1.id); - expect(service.getElementId(testModel4)).toBe(`${testModel2.id}-${testModel3.index}-${testModel4.id}`); + it('should return a unique element id', () => { + const testModel1 = new DynamicInputModel({ id: 'input' }); + const testModel2 = new DynamicFormArrayModel({ + id: 'formArray', + groupFactory: () => { + return [new DynamicInputModel({ id: 'formArrayInput' })]; + }, }); + const testModel3 = testModel2.get(0); + const testModel4 = testModel3.get(0); + + testModel4.parent = testModel3; + + expect(service.getElementId(testModel1)).toBe(testModel1.id); + expect(service.getElementId(testModel4)).toBe(`${testModel2.id}-${testModel3.index}-${testModel4.id}`); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-layout.service.ts b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-layout.service.ts index a4a88ecd82d..cfd5f85e774 100644 --- a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-layout.service.ts +++ b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-layout.service.ts @@ -1,130 +1,140 @@ -import { Injectable, QueryList } from "@angular/core"; import { - DynamicFormControlLayout, - DynamicFormControlLayoutConfig, - DynamicFormControlLayoutContext, - DynamicFormControlLayoutPlace -} from "../model/misc/dynamic-form-control-layout.model"; -import { DynamicFormControlModel } from "../model/dynamic-form-control.model"; -import { DynamicFormArrayGroupModel } from "../model/form-array/dynamic-form-array.model"; -import { DynamicTemplateDirective, DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT } from "../directive/dynamic-template.directive"; -import { isObject, isString } from "../utils/core.utils"; - -export type DynamicFormLayout = { [id: string]: DynamicFormControlLayout }; + Injectable, + QueryList, +} from '@angular/core'; + +import { + DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT, + DynamicTemplateDirective, +} from '../directive/dynamic-template.directive'; +import { DynamicFormControlModel } from '../model/dynamic-form-control.model'; +import { DynamicFormArrayGroupModel } from '../model/form-array/dynamic-form-array.model'; +import { + DynamicFormControlLayout, + DynamicFormControlLayoutConfig, + DynamicFormControlLayoutContext, + DynamicFormControlLayoutPlace, +} from '../model/misc/dynamic-form-control-layout.model'; +import { + isObject, + isString, +} from '../utils/core.utils'; + +export interface DynamicFormLayout { [id: string]: DynamicFormControlLayout } export type DynamicFormControlTemplates = QueryList | DynamicTemplateDirective[] | undefined; @Injectable({ - providedIn: "root" + providedIn: 'root', }) export class DynamicFormLayoutService { - findById(id: string, formLayout: DynamicFormLayout | null): DynamicFormControlLayout | null { - if (isObject(formLayout)) { - for (const key of Object.keys(formLayout)) { - if (key === id) { - return formLayout[key]; - } - } + findById(id: string, formLayout: DynamicFormLayout | null): DynamicFormControlLayout | null { + if (isObject(formLayout)) { + for (const key of Object.keys(formLayout)) { + if (key === id) { + return formLayout[key]; } - - return null; + } } - findByModel(model: DynamicFormControlModel, formLayout: DynamicFormLayout | null | undefined): DynamicFormControlLayout | null { - let controlLayout: DynamicFormControlLayout | null = null; + return null; + } - if (isObject(formLayout)) { - for (const key of Object.keys(formLayout)) { - key.split(",").forEach(substring => { - const selector = substring.trim(); + findByModel(model: DynamicFormControlModel, formLayout: DynamicFormLayout | null | undefined): DynamicFormControlLayout | null { + let controlLayout: DynamicFormControlLayout | null = null; - if (selector === model.id || selector === model.type) { - controlLayout = formLayout[key]; - } - }); - } - } + if (isObject(formLayout)) { + for (const key of Object.keys(formLayout)) { + key.split(',').forEach(substring => { + const selector = substring.trim(); - return controlLayout; + if (selector === model.id || selector === model.type) { + controlLayout = formLayout[key]; + } + }); + } } - filterTemplatesByModel(model: DynamicFormControlModel, templates: DynamicFormControlTemplates): DynamicTemplateDirective[] { - const filterCallback: (template: DynamicTemplateDirective) => boolean = (template: DynamicTemplateDirective) => { - return template.modelId === model.id || template.modelType === model.type; - }; + return controlLayout; + } - if (templates instanceof QueryList) { - return templates.filter(filterCallback); + filterTemplatesByModel(model: DynamicFormControlModel, templates: DynamicFormControlTemplates): DynamicTemplateDirective[] { + const filterCallback: (template: DynamicTemplateDirective) => boolean = (template: DynamicTemplateDirective) => { + return template.modelId === model.id || template.modelType === model.type; + }; - } else if (Array.isArray(templates)) { - return templates.filter(filterCallback); - } + if (templates instanceof QueryList) { + return templates.filter(filterCallback); - return []; + } else if (Array.isArray(templates)) { + return templates.filter(filterCallback); } - getAlignedTemplate(model: DynamicFormControlModel, templates: DynamicFormControlTemplates, - alignment: DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT): DynamicTemplateDirective | undefined { + return []; + } - return this.filterTemplatesByModel(model, templates) - .find(template => template.as === null && template.align === alignment); - } + getAlignedTemplate(model: DynamicFormControlModel, templates: DynamicFormControlTemplates, + alignment: DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT): DynamicTemplateDirective | undefined { + + return this.filterTemplatesByModel(model, templates) + .find(template => template.as === null && template.align === alignment); + } - /* + /* getIndexedTemplates(model: DynamicFormControlModel, templates: DynamicFormControlTemplates): DynamicTemplateDirective[] | undefined { return this.filterTemplatesByModel(model, templates).filter(template => template.as === null); } */ - getStartTemplate(model: DynamicFormControlModel, templates: DynamicFormControlTemplates): DynamicTemplateDirective | undefined { - return this.getAlignedTemplate(model, templates, DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT.Start); + getStartTemplate(model: DynamicFormControlModel, templates: DynamicFormControlTemplates): DynamicTemplateDirective | undefined { + return this.getAlignedTemplate(model, templates, DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT.Start); + } + + getEndTemplate(model: DynamicFormControlModel, templates: DynamicFormControlTemplates): DynamicTemplateDirective | undefined { + return this.getAlignedTemplate(model, templates, DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT.End); + } + + getClass(layout: DynamicFormControlLayout | null | undefined, context: DynamicFormControlLayoutContext, + place: DynamicFormControlLayoutPlace): string { + + if (isObject(layout) && layout.hasOwnProperty(context)) { + const config = layout[context] as DynamicFormControlLayoutConfig; + if (config.hasOwnProperty(place)) { + return config[place] as string; + } } - getEndTemplate(model: DynamicFormControlModel, templates: DynamicFormControlTemplates): DynamicTemplateDirective | undefined { - return this.getAlignedTemplate(model, templates, DYNAMIC_TEMPLATE_DIRECTIVE_ALIGNMENT.End); - } + return ''; + } - getClass(layout: DynamicFormControlLayout | null | undefined, context: DynamicFormControlLayoutContext, - place: DynamicFormControlLayoutPlace): string { + getHostClass(layout: DynamicFormControlLayout | null | undefined): string { + const keys: (keyof DynamicFormControlLayout)[] = ['element', 'grid']; + let cls = ''; - if (isObject(layout) && layout.hasOwnProperty(context)) { - const config = layout[context] as DynamicFormControlLayoutConfig; - if (config.hasOwnProperty(place)) { - return config[place] as string; - } + if (isObject(layout)) { + keys.forEach(key => { + if (isObject(layout[key]) && isString(layout[key]?.host)) { + cls = cls + ` ${layout[key]?.host}`; } - - return ""; + }); } - getHostClass(layout: DynamicFormControlLayout | null | undefined): string { - const keys: (keyof DynamicFormControlLayout)[] = ["element", "grid"]; - let cls = ""; + return cls; + } - if (isObject(layout)) { - keys.forEach(key => { - if (isObject(layout[key]) && isString(layout[key]?.host)) { - cls = cls + ` ${layout[key]?.host}`; - } - }); - } - - return cls; - } + getElementId(model: DynamicFormControlModel): string { + let id = model.id; + let parent = model.parent; - getElementId(model: DynamicFormControlModel): string { - let id = model.id; - let parent = model.parent; + while (parent !== null) { + if (parent instanceof DynamicFormArrayGroupModel) { + id = `${parent.context.id}-${parent.index}-${model.id}`; + break; + } - while (parent !== null) { - if (parent instanceof DynamicFormArrayGroupModel) { - id = `${parent.context.id}-${parent.index}-${model.id}`; - break; - } - - parent = parent.parent; - } - - return id; + parent = parent.parent; } + + return id; + } } diff --git a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-relation-matchers.ts b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-relation-matchers.ts index 26018e741db..0ab7f73222d 100644 --- a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-relation-matchers.ts +++ b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-relation-matchers.ts @@ -1,20 +1,25 @@ -import { InjectionToken, Injector, ValueProvider } from "@angular/core"; -import { UntypedFormControl } from "@angular/forms"; -import { DynamicFormControlModel } from "../model/dynamic-form-control.model"; -import { DynamicFormValidationService } from "./dynamic-form-validation.service"; -import { isObject } from "../utils/core.utils"; -import { DynamicValidatorsConfig } from "../model/misc/dynamic-form-control-validation.model"; -import { DynamicFormService } from "./dynamic-form.service"; - -export const MATCH_DISABLED = "DISABLED"; -export const MATCH_ENABLED = "ENABLED"; -export const MATCH_HIDDEN = "HIDDEN"; -export const MATCH_OPTIONAL = "OPTIONAL"; -export const MATCH_REQUIRED = "REQUIRED"; -export const MATCH_VISIBLE = "VISIBLE"; - -export const AND_OPERATOR = "AND"; -export const OR_OPERATOR = "OR"; +import { + InjectionToken, + Injector, + ValueProvider, +} from '@angular/core'; +import { UntypedFormControl } from '@angular/forms'; + +import { DynamicFormControlModel } from '../model/dynamic-form-control.model'; +import { DynamicValidatorsConfig } from '../model/misc/dynamic-form-control-validation.model'; +import { isObject } from '../utils/core.utils'; +import { DynamicFormService } from './dynamic-form.service'; +import { DynamicFormValidationService } from './dynamic-form-validation.service'; + +export const MATCH_DISABLED = 'DISABLED'; +export const MATCH_ENABLED = 'ENABLED'; +export const MATCH_HIDDEN = 'HIDDEN'; +export const MATCH_OPTIONAL = 'OPTIONAL'; +export const MATCH_REQUIRED = 'REQUIRED'; +export const MATCH_VISIBLE = 'VISIBLE'; + +export const AND_OPERATOR = 'AND'; +export const OR_OPERATOR = 'OR'; export interface DynamicFormControlMatcher { match: string; @@ -23,61 +28,61 @@ export interface DynamicFormControlMatcher { onChange(hasMatch: boolean, model: DynamicFormControlModel, control: UntypedFormControl, injector: Injector): void; } -export const DYNAMIC_MATCHERS = new InjectionToken("DYNAMIC_MATCHERS"); +export const DYNAMIC_MATCHERS = new InjectionToken('DYNAMIC_MATCHERS'); export const DISABLED_MATCHER: DynamicFormControlMatcher = { - match: MATCH_DISABLED, - opposingMatch: MATCH_ENABLED, - onChange(hasMatch, model) { - model.disabled = hasMatch; - } + match: MATCH_DISABLED, + opposingMatch: MATCH_ENABLED, + onChange(hasMatch, model) { + model.disabled = hasMatch; + }, }; export const HIDDEN_MATCHER: DynamicFormControlMatcher = { - match: MATCH_HIDDEN, - opposingMatch: MATCH_VISIBLE, - onChange(hasMatch, model) { - model.hidden = hasMatch; - } + match: MATCH_HIDDEN, + opposingMatch: MATCH_VISIBLE, + onChange(hasMatch, model) { + model.hidden = hasMatch; + }, }; export const REQUIRED_MATCHER: DynamicFormControlMatcher = { - match: MATCH_REQUIRED, - opposingMatch: MATCH_OPTIONAL, - onChange(hasMatch, model, control, injector) { - let validatorsConfig = null; - - if (hasMatch) { - validatorsConfig = isObject(model.validators) ? {...model.validators, required: null} : {required: null}; - - } else { - if (isObject(model.validators)) { - delete (model.validators as Pick).required; - validatorsConfig = {...model.validators}; - } - } - - injector.get(DynamicFormValidationService).updateValidators(validatorsConfig, control, model); - injector.get(DynamicFormService).detectChanges(); + match: MATCH_REQUIRED, + opposingMatch: MATCH_OPTIONAL, + onChange(hasMatch, model, control, injector) { + let validatorsConfig = null; + + if (hasMatch) { + validatorsConfig = isObject(model.validators) ? { ...model.validators, required: null } : { required: null }; + + } else { + if (isObject(model.validators)) { + delete (model.validators as Pick).required; + validatorsConfig = { ...model.validators }; + } } + + injector.get(DynamicFormValidationService).updateValidators(validatorsConfig, control, model); + injector.get(DynamicFormService).detectChanges(); + }, }; export const DISABLED_MATCHER_PROVIDER: ValueProvider = { - provide: DYNAMIC_MATCHERS, - useValue: DISABLED_MATCHER, - multi: true + provide: DYNAMIC_MATCHERS, + useValue: DISABLED_MATCHER, + multi: true, }; export const HIDDEN_MATCHER_PROVIDER: ValueProvider = { - provide: DYNAMIC_MATCHERS, - useValue: HIDDEN_MATCHER, - multi: true + provide: DYNAMIC_MATCHERS, + useValue: HIDDEN_MATCHER, + multi: true, }; export const REQUIRED_MATCHER_PROVIDER: ValueProvider = { - provide: DYNAMIC_MATCHERS, - useValue: REQUIRED_MATCHER, - multi: true + provide: DYNAMIC_MATCHERS, + useValue: REQUIRED_MATCHER, + multi: true, }; export const DYNAMIC_MATCHER_PROVIDERS = [DISABLED_MATCHER_PROVIDER, HIDDEN_MATCHER_PROVIDER, REQUIRED_MATCHER_PROVIDER]; diff --git a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-relation.service.spec.ts b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-relation.service.spec.ts index 348c242e2b1..884814fb35c 100644 --- a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-relation.service.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-relation.service.spec.ts @@ -1,163 +1,178 @@ -import { TestBed, inject } from "@angular/core/testing"; -import { UntypedFormGroup, ReactiveFormsModule } from "@angular/forms"; -import { DynamicFormService } from "./dynamic-form.service"; -import { DynamicFormRelationService } from "./dynamic-form-relation.service"; -import { DynamicTextAreaModel } from "../model/textarea/dynamic-textarea.model"; -import { AND_OPERATOR, DISABLED_MATCHER, DISABLED_MATCHER_PROVIDER, - HIDDEN_MATCHER_PROVIDER, MATCH_DISABLED, MATCH_ENABLED, MATCH_REQUIRED, OR_OPERATOR, +import { + inject, + TestBed, +} from '@angular/core/testing'; +import { + ReactiveFormsModule, + UntypedFormGroup, +} from '@angular/forms'; + +import { DynamicRadioGroupModel } from '../model/radio/dynamic-radio-group.model'; +import { DynamicSelectModel } from '../model/select/dynamic-select.model'; +import { DynamicTextAreaModel } from '../model/textarea/dynamic-textarea.model'; +import { DynamicFormService } from './dynamic-form.service'; +import { DynamicFormRelationService } from './dynamic-form-relation.service'; +import { + AND_OPERATOR, + DISABLED_MATCHER, + DISABLED_MATCHER_PROVIDER, + HIDDEN_MATCHER_PROVIDER, + MATCH_DISABLED, + MATCH_ENABLED, + MATCH_REQUIRED, + OR_OPERATOR, REQUIRED_MATCHER, - REQUIRED_MATCHER_PROVIDER} from "./dynamic-form-relation-matchers"; -import { DynamicSelectModel } from "../model/select/dynamic-select.model"; -import { DynamicRadioGroupModel } from "../model/radio/dynamic-radio-group.model"; - - -describe("DynamicFormRelationService test suite", () => { - let service: DynamicFormRelationService; - let group: UntypedFormGroup; - - const model: DynamicTextAreaModel = new DynamicTextAreaModel({id: "testTextArea"}); - const relDisabledOr23 = { - match: MATCH_DISABLED, - operator: OR_OPERATOR, - when: [ - {id: "testSelect", value: "option-2"}, - {id: "testRadioGroup", value: "option-3"} - ] - }; - const relEnabledAnd32 = { - match: MATCH_ENABLED, - operator: AND_OPERATOR, - when: [ - {id: "testSelect", value: "option-3"}, - {id: "testRadioGroup", value: "option-2"} - ] - }; - const relDisabledAnd23 = { - match: MATCH_DISABLED, - operator: AND_OPERATOR, - when: [ - {id: "testSelect", value: "option-2"}, - {id: "testRadioGroup", value: "option-3"} - ] - }; - const relEnabledOr12 = { - match: MATCH_ENABLED, - operator: OR_OPERATOR, - when: [ - {id: "testSelect", value: "option-1"}, - {id: "testRadioGroup", value: "option-2"} - ] - }; - const relDisabledOr13 = { - match: MATCH_DISABLED, - operator: OR_OPERATOR, - when: [ - {id: "testSelect", value: "option-1"}, - {id: "testRadioGroup", value: "option-3"} - ] - }; - const relRequiredOr23 = { - match: MATCH_REQUIRED, - operator: OR_OPERATOR, - when: [ - {id: "testSelect", value: "option-2"}, - {id: "testRadioGroup", value: "option-3"} - ] - }; - const relRequiredAnd23 = { - match: MATCH_REQUIRED, - operator: AND_OPERATOR, - when: [ - {id: "testSelect", value: "option-2"}, - {id: "testRadioGroup", value: "option-3"} - ] - }; - const relRequiredOr13 = { - match: MATCH_REQUIRED, - operator: OR_OPERATOR, - when: [ - {id: "testSelect", value: "option-1"}, - {id: "testRadioGroup", value: "option-3"} - ] - }; - const relDisabledOr32 = { - match: MATCH_DISABLED, - operator: OR_OPERATOR, - when: [ - {id: "testSelect", value: "option-3"}, - {id: "testRadioGroup", value: "option-2"} - ] - }; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [ReactiveFormsModule], - providers: [DynamicFormRelationService, DISABLED_MATCHER_PROVIDER, HIDDEN_MATCHER_PROVIDER, REQUIRED_MATCHER_PROVIDER] - }); - }); - - beforeEach(inject([DynamicFormRelationService, DynamicFormService], - (relationService: DynamicFormRelationService, formService: DynamicFormService) => { - service = relationService; - group = formService.createFormGroup([ - new DynamicSelectModel({ - id: "testSelect", - options: [{value: "option-1"}, {value: "option-2"}, {value: "option-3"}], - value: "option-1" - }), - new DynamicRadioGroupModel({ - id: "testRadioGroup", - options: [{value: "option-1"}, {value: "option-2"}, {value: "option-3"}], - value: "option-1" - }), - model - ]); - })); - - it("should find an activation relation correctly", () => { - model.relations = [relDisabledOr23]; - expect(service.findRelationByMatcher(model.relations, DISABLED_MATCHER)).toBe(relDisabledOr23); - - model.relations = [relEnabledAnd32]; - expect(service.findRelationByMatcher(model.relations, DISABLED_MATCHER)).toBe(relEnabledAnd32); - - model.relations = [relRequiredOr23]; - expect(service.findRelationByMatcher(model.relations, REQUIRED_MATCHER)).toBe(relRequiredOr23); - }); - - it("should check if form control is to be disabled correctly", () => { - model.relations = [relDisabledOr23]; - expect(service.matchesCondition(model.relations[0], service.getRelatedFormControls(model, group), DISABLED_MATCHER)).toBe(false); - - model.relations = [relEnabledAnd32]; - expect(service.matchesCondition(model.relations[0], service.getRelatedFormControls(model, group), DISABLED_MATCHER)).toBe(true); - - model.relations = [relDisabledAnd23]; - expect(service.matchesCondition(model.relations[0], service.getRelatedFormControls(model, group), DISABLED_MATCHER)).toBe(false); - - model.relations = [relEnabledOr12]; - expect(service.matchesCondition(model.relations[0], service.getRelatedFormControls(model, group), DISABLED_MATCHER)).toBe(false); - - model.relations = [relDisabledOr13]; - expect(service.matchesCondition(model.relations[0], service.getRelatedFormControls(model, group), DISABLED_MATCHER)).toBe(true); - }); - - it("should check if form control is to be required correctly", () => { - model.relations = [relRequiredOr23]; - expect(service.matchesCondition(model.relations[0], service.getRelatedFormControls(model, group), REQUIRED_MATCHER)).toBe(false); - - model.relations = [relRequiredAnd23]; - expect(service.matchesCondition(model.relations[0], service.getRelatedFormControls(model, group), REQUIRED_MATCHER)).toBe(false); - - model.relations = [relRequiredOr13]; - expect(service.matchesCondition(model.relations[0], service.getRelatedFormControls(model, group), REQUIRED_MATCHER)).toBe(true); - }); - - it("should get all related form controls correctly", () => { - model.relations = [relDisabledOr32]; - - const relatedFormControls = service.getRelatedFormControls(model, group); - - expect(Object.keys(relatedFormControls).length).toBe(relDisabledOr32.when.length); + REQUIRED_MATCHER_PROVIDER, +} from './dynamic-form-relation-matchers'; + + +describe('DynamicFormRelationService test suite', () => { + let service: DynamicFormRelationService; + let group: UntypedFormGroup; + + const model: DynamicTextAreaModel = new DynamicTextAreaModel({ id: 'testTextArea' }); + const relDisabledOr23 = { + match: MATCH_DISABLED, + operator: OR_OPERATOR, + when: [ + { id: 'testSelect', value: 'option-2' }, + { id: 'testRadioGroup', value: 'option-3' }, + ], + }; + const relEnabledAnd32 = { + match: MATCH_ENABLED, + operator: AND_OPERATOR, + when: [ + { id: 'testSelect', value: 'option-3' }, + { id: 'testRadioGroup', value: 'option-2' }, + ], + }; + const relDisabledAnd23 = { + match: MATCH_DISABLED, + operator: AND_OPERATOR, + when: [ + { id: 'testSelect', value: 'option-2' }, + { id: 'testRadioGroup', value: 'option-3' }, + ], + }; + const relEnabledOr12 = { + match: MATCH_ENABLED, + operator: OR_OPERATOR, + when: [ + { id: 'testSelect', value: 'option-1' }, + { id: 'testRadioGroup', value: 'option-2' }, + ], + }; + const relDisabledOr13 = { + match: MATCH_DISABLED, + operator: OR_OPERATOR, + when: [ + { id: 'testSelect', value: 'option-1' }, + { id: 'testRadioGroup', value: 'option-3' }, + ], + }; + const relRequiredOr23 = { + match: MATCH_REQUIRED, + operator: OR_OPERATOR, + when: [ + { id: 'testSelect', value: 'option-2' }, + { id: 'testRadioGroup', value: 'option-3' }, + ], + }; + const relRequiredAnd23 = { + match: MATCH_REQUIRED, + operator: AND_OPERATOR, + when: [ + { id: 'testSelect', value: 'option-2' }, + { id: 'testRadioGroup', value: 'option-3' }, + ], + }; + const relRequiredOr13 = { + match: MATCH_REQUIRED, + operator: OR_OPERATOR, + when: [ + { id: 'testSelect', value: 'option-1' }, + { id: 'testRadioGroup', value: 'option-3' }, + ], + }; + const relDisabledOr32 = { + match: MATCH_DISABLED, + operator: OR_OPERATOR, + when: [ + { id: 'testSelect', value: 'option-3' }, + { id: 'testRadioGroup', value: 'option-2' }, + ], + }; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ReactiveFormsModule], + providers: [DynamicFormRelationService, DISABLED_MATCHER_PROVIDER, HIDDEN_MATCHER_PROVIDER, REQUIRED_MATCHER_PROVIDER], }); + }); + + beforeEach(inject([DynamicFormRelationService, DynamicFormService], + (relationService: DynamicFormRelationService, formService: DynamicFormService) => { + service = relationService; + group = formService.createFormGroup([ + new DynamicSelectModel({ + id: 'testSelect', + options: [{ value: 'option-1' }, { value: 'option-2' }, { value: 'option-3' }], + value: 'option-1', + }), + new DynamicRadioGroupModel({ + id: 'testRadioGroup', + options: [{ value: 'option-1' }, { value: 'option-2' }, { value: 'option-3' }], + value: 'option-1', + }), + model, + ]); + })); + + it('should find an activation relation correctly', () => { + model.relations = [relDisabledOr23]; + expect(service.findRelationByMatcher(model.relations, DISABLED_MATCHER)).toBe(relDisabledOr23); + + model.relations = [relEnabledAnd32]; + expect(service.findRelationByMatcher(model.relations, DISABLED_MATCHER)).toBe(relEnabledAnd32); + + model.relations = [relRequiredOr23]; + expect(service.findRelationByMatcher(model.relations, REQUIRED_MATCHER)).toBe(relRequiredOr23); + }); + + it('should check if form control is to be disabled correctly', () => { + model.relations = [relDisabledOr23]; + expect(service.matchesCondition(model.relations[0], service.getRelatedFormControls(model, group), DISABLED_MATCHER)).toBe(false); + + model.relations = [relEnabledAnd32]; + expect(service.matchesCondition(model.relations[0], service.getRelatedFormControls(model, group), DISABLED_MATCHER)).toBe(true); + + model.relations = [relDisabledAnd23]; + expect(service.matchesCondition(model.relations[0], service.getRelatedFormControls(model, group), DISABLED_MATCHER)).toBe(false); + + model.relations = [relEnabledOr12]; + expect(service.matchesCondition(model.relations[0], service.getRelatedFormControls(model, group), DISABLED_MATCHER)).toBe(false); + + model.relations = [relDisabledOr13]; + expect(service.matchesCondition(model.relations[0], service.getRelatedFormControls(model, group), DISABLED_MATCHER)).toBe(true); + }); + + it('should check if form control is to be required correctly', () => { + model.relations = [relRequiredOr23]; + expect(service.matchesCondition(model.relations[0], service.getRelatedFormControls(model, group), REQUIRED_MATCHER)).toBe(false); + + model.relations = [relRequiredAnd23]; + expect(service.matchesCondition(model.relations[0], service.getRelatedFormControls(model, group), REQUIRED_MATCHER)).toBe(false); + + model.relations = [relRequiredOr13]; + expect(service.matchesCondition(model.relations[0], service.getRelatedFormControls(model, group), REQUIRED_MATCHER)).toBe(true); + }); + + it('should get all related form controls correctly', () => { + model.relations = [relDisabledOr32]; + + const relatedFormControls = service.getRelatedFormControls(model, group); + + expect(Object.keys(relatedFormControls).length).toBe(relDisabledOr32.when.length); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-relation.service.ts b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-relation.service.ts index f28bb7292bc..aabebffc7a6 100644 --- a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-relation.service.ts +++ b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-relation.service.ts @@ -1,116 +1,137 @@ -import { Inject, Injectable, Injector, Optional } from "@angular/core"; -import { UntypedFormControl, UntypedFormGroup } from "@angular/forms"; -import { DynamicFormControlModel } from "../model/dynamic-form-control.model"; import { - AND_OPERATOR, - DYNAMIC_MATCHERS, - DynamicFormControlMatcher, - OR_OPERATOR -} from "./dynamic-form-relation-matchers"; -import { DynamicFormControlCondition, DynamicFormControlRelation } from "../model/misc/dynamic-form-control-relation.model"; -import { distinctUntilChanged, startWith } from "rxjs/operators"; -import { merge, Subscription } from "rxjs"; -import { isString } from "../utils/core.utils"; - -export type DynamicRelatedFormControls = { [path: string]: UntypedFormControl }; + Inject, + Injectable, + Injector, + Optional, +} from '@angular/core'; +import { + UntypedFormControl, + UntypedFormGroup, +} from '@angular/forms'; +import { + merge, + Subscription, +} from 'rxjs'; +import { + distinctUntilChanged, + startWith, +} from 'rxjs/operators'; + +import { DynamicFormControlModel } from '../model/dynamic-form-control.model'; +import { + DynamicFormControlCondition, + DynamicFormControlRelation, +} from '../model/misc/dynamic-form-control-relation.model'; +import { isString } from '../utils/core.utils'; +import { + AND_OPERATOR, + DYNAMIC_MATCHERS, + DynamicFormControlMatcher, + OR_OPERATOR, +} from './dynamic-form-relation-matchers'; + +export interface DynamicRelatedFormControls { [path: string]: UntypedFormControl } @Injectable({ - providedIn: "root" + providedIn: 'root', }) export class DynamicFormRelationService { - constructor(@Optional() @Inject(DYNAMIC_MATCHERS) private MATCHERS: DynamicFormControlMatcher[], private injector: Injector) { - } - - getRelatedFormControls(model: DynamicFormControlModel, group: UntypedFormGroup): DynamicRelatedFormControls { - const conditionReducer = (controls: DynamicRelatedFormControls, condition: DynamicFormControlCondition) => { - const path = condition.rootPath ?? condition.id; - - if (isString(path) && !controls.hasOwnProperty(path)) { - const control = condition.rootPath ? group.root.get(condition.rootPath) : group.get(condition.id!); - control instanceof UntypedFormControl ? - controls[path] = control : console.warn(`No related form control with id ${condition.id} could be found`); - } - - return controls; - }; - - const relationReducer = (controls: DynamicRelatedFormControls, relation: DynamicFormControlRelation) => - relation.when.reduce(conditionReducer, controls); - - return model.relations.reduce(relationReducer, {}); - } - - findRelationByMatcher(relations: DynamicFormControlRelation[], - matcher: DynamicFormControlMatcher): DynamicFormControlRelation | undefined { - return relations.find(relation => [matcher.match, matcher.opposingMatch].includes(relation.match)); - } - - matchesCondition(relation: DynamicFormControlRelation, - relatedFormControls: DynamicRelatedFormControls, - matcher: DynamicFormControlMatcher): boolean { - const operator = relation.operator ?? OR_OPERATOR; - - return relation.when.reduce((hasMatched, condition, index) => { - const path = condition.rootPath ?? condition.id; - let relatedFormControl; - - for (const [key, control] of Object.entries(relatedFormControls)) { - if (key === path) { - relatedFormControl = control; - break; - } - } - - if (relatedFormControl && relation.match === matcher.match) { - if (index > 0 && operator === AND_OPERATOR && !hasMatched) { - return false; - } - - if (index > 0 && operator === OR_OPERATOR && hasMatched) { - return true; - } - - return condition.value === relatedFormControl.value || condition.status === relatedFormControl.status; - } - - if (relatedFormControl && relation.match === matcher.opposingMatch) { - if (index > 0 && operator === AND_OPERATOR && hasMatched) { - return true; - } - - if (index > 0 && operator === OR_OPERATOR && !hasMatched) { - return false; - } - - return !(condition.value === relatedFormControl.value || condition.status === relatedFormControl.status); - } - - return false; - - }, false); - } - - subscribeRelations(model: DynamicFormControlModel, group: UntypedFormGroup, control: UntypedFormControl): Subscription[] { - const relatedFormControls = this.getRelatedFormControls(model, group); - const subscriptions: Subscription[] = []; - - Object.values(relatedFormControls).forEach(relatedControl => { - const valueChanges = relatedControl.valueChanges.pipe(startWith(relatedControl.value), distinctUntilChanged()); - const statusChanges = relatedControl.statusChanges.pipe(startWith(relatedControl.status), distinctUntilChanged()); - - subscriptions.push(merge(valueChanges, statusChanges).subscribe(() => { - this.MATCHERS.forEach(matcher => { - const relation = this.findRelationByMatcher(model.relations, matcher); - - if (relation !== undefined) { - const hasMatch = this.matchesCondition(relation, relatedFormControls, matcher); - matcher.onChange(hasMatch, model, control, this.injector); - } - }); - })); + constructor(@Optional() @Inject(DYNAMIC_MATCHERS) private MATCHERS: DynamicFormControlMatcher[], private injector: Injector) { + } + + getRelatedFormControls(model: DynamicFormControlModel, group: UntypedFormGroup): DynamicRelatedFormControls { + const conditionReducer = (controls: DynamicRelatedFormControls, condition: DynamicFormControlCondition) => { + const path = condition.rootPath ?? condition.id; + + if (isString(path) && !controls.hasOwnProperty(path)) { + const control = condition.rootPath ? group.root.get(condition.rootPath) : group.get(condition.id!); + if (control instanceof UntypedFormControl) { + controls[path] = control; + } else { + console.warn(`No related form control with id ${condition.id} could be found`); + } + } + + return controls; + }; + + const relationReducer = (controls: DynamicRelatedFormControls, relation: DynamicFormControlRelation) => + relation.when.reduce(conditionReducer, controls); + + return model.relations.reduce(relationReducer, {}); + } + + findRelationByMatcher(relations: DynamicFormControlRelation[], + matcher: DynamicFormControlMatcher): DynamicFormControlRelation | undefined { + return relations.find(relation => [matcher.match, matcher.opposingMatch].includes(relation.match)); + } + + matchesCondition(relation: DynamicFormControlRelation, + relatedFormControls: DynamicRelatedFormControls, + matcher: DynamicFormControlMatcher): boolean { + const operator = relation.operator ?? OR_OPERATOR; + + return relation.when.reduce((hasMatched, condition, index) => { + const path = condition.rootPath ?? condition.id; + let relatedFormControl; + + for (const [key, control] of Object.entries(relatedFormControls)) { + if (key === path) { + relatedFormControl = control; + break; + } + } + + if (relatedFormControl && relation.match === matcher.match) { + if (index > 0 && operator === AND_OPERATOR && !hasMatched) { + return false; + } + + if (index > 0 && operator === OR_OPERATOR && hasMatched) { + return true; + } + + return condition.value === relatedFormControl.value || condition.status === relatedFormControl.status; + } + + if (relatedFormControl && relation.match === matcher.opposingMatch) { + if (index > 0 && operator === AND_OPERATOR && hasMatched) { + return true; + } + + if (index > 0 && operator === OR_OPERATOR && !hasMatched) { + return false; + } + + return !(condition.value === relatedFormControl.value || condition.status === relatedFormControl.status); + } + + return false; + + }, false); + } + + subscribeRelations(model: DynamicFormControlModel, group: UntypedFormGroup, control: UntypedFormControl): Subscription[] { + const relatedFormControls = this.getRelatedFormControls(model, group); + const subscriptions: Subscription[] = []; + + Object.values(relatedFormControls).forEach(relatedControl => { + const valueChanges = relatedControl.valueChanges.pipe(startWith(relatedControl.value), distinctUntilChanged()); + const statusChanges = relatedControl.statusChanges.pipe(startWith(relatedControl.status), distinctUntilChanged()); + + subscriptions.push(merge(valueChanges, statusChanges).subscribe(() => { + this.MATCHERS.forEach(matcher => { + const relation = this.findRelationByMatcher(model.relations, matcher); + + if (relation !== undefined) { + const hasMatch = this.matchesCondition(relation, relatedFormControls, matcher); + matcher.onChange(hasMatch, model, control, this.injector); + } }); + })); + }); - return subscriptions; - } + return subscriptions; + } } diff --git a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validation-matchers.ts b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validation-matchers.ts index bce0e99c8a0..017d3d30b67 100644 --- a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validation-matchers.ts +++ b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validation-matchers.ts @@ -1,18 +1,19 @@ -import { InjectionToken } from "@angular/core"; -import { AbstractControl } from "@angular/forms"; -import { DynamicFormControlModel } from "../model/dynamic-form-control.model"; -import { DynamicFormHook } from "../model/misc/dynamic-form-control-validation.model"; +import { InjectionToken } from '@angular/core'; +import { AbstractControl } from '@angular/forms'; + +import { DynamicFormControlModel } from '../model/dynamic-form-control.model'; +import { DynamicFormHook } from '../model/misc/dynamic-form-control-validation.model'; export type DynamicErrorMessagesMatcher = (control: AbstractControl, model: DynamicFormControlModel, hasFocus: boolean) => boolean; export const DEFAULT_ERROR_STATE_MATCHER: DynamicErrorMessagesMatcher = (control: AbstractControl, model: DynamicFormControlModel, hasFocus: boolean) => { - return control.touched && !hasFocus; + return control.touched && !hasFocus; }; export const CHANGE_ERROR_STATE_MATCHER: DynamicErrorMessagesMatcher = (control: AbstractControl, model: DynamicFormControlModel, hasFocus: boolean) => { - return (model.updateOn === DynamicFormHook.Change || model.updateOn === null) ? control.dirty : control.touched && !hasFocus; + return (model.updateOn === DynamicFormHook.Change || model.updateOn === null) ? control.dirty : control.touched && !hasFocus; }; -export const DYNAMIC_ERROR_MESSAGES_MATCHER = new InjectionToken("DYNAMIC_ERROR_MESSAGES_MATCHER"); +export const DYNAMIC_ERROR_MESSAGES_MATCHER = new InjectionToken('DYNAMIC_ERROR_MESSAGES_MATCHER'); diff --git a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validation.service.spec.ts b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validation.service.spec.ts index 059b6eecf61..48fa5b6584b 100644 --- a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validation.service.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validation.service.spec.ts @@ -1,213 +1,227 @@ -import { TestBed, inject } from "@angular/core/testing"; -import { ReactiveFormsModule, UntypedFormControl, NG_VALIDATORS, NG_ASYNC_VALIDATORS, ValidationErrors, Validators } from "@angular/forms"; - -import { isFunction } from "../utils/core.utils"; -import { DynamicFormValidationService } from "./dynamic-form-validation.service"; -import { DYNAMIC_VALIDATORS, Validator, ValidatorFactory } from "./dynamic-form-validators"; -import { DynamicFormControlModel } from "../model/dynamic-form-control.model"; -import { DynamicInputModel } from "../model/input/dynamic-input.model"; - -describe("DynamicFormValidationService test suite", () => { - let service: DynamicFormValidationService; - - function testValidator(): ValidationErrors | null { - return {testValidator: {valid: true}}; - } - - function testValidatorFactory(): () => ValidationErrors | null { - return (): ValidationErrors | null => { - return {testValidatorFactory: {valid: true}}; - }; - } - - function testAsyncValidator() { - return new Promise(resolve => setTimeout(() => resolve(true), 0)); - } - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [ReactiveFormsModule], - providers: [ - DynamicFormValidationService, - { - provide: NG_VALIDATORS, - useValue: testValidator, - multi: true - }, - { - provide: NG_ASYNC_VALIDATORS, - useValue: testAsyncValidator, - multi: true - }, - { - provide: DYNAMIC_VALIDATORS, - useValue: new Map([ - ["testValidatorFactory", testValidatorFactory] - ]) - } - ] - }); +import { + inject, + TestBed, +} from '@angular/core/testing'; +import { + NG_ASYNC_VALIDATORS, + NG_VALIDATORS, + ReactiveFormsModule, + UntypedFormControl, + ValidationErrors, + Validators, +} from '@angular/forms'; + +import { DynamicFormControlModel } from '../model/dynamic-form-control.model'; +import { DynamicInputModel } from '../model/input/dynamic-input.model'; +import { isFunction } from '../utils/core.utils'; +import { DynamicFormValidationService } from './dynamic-form-validation.service'; +import { + DYNAMIC_VALIDATORS, + Validator, + ValidatorFactory, +} from './dynamic-form-validators'; + +describe('DynamicFormValidationService test suite', () => { + let service: DynamicFormValidationService; + + function testValidator(): ValidationErrors | null { + return { testValidator: { valid: true } }; + } + + function testValidatorFactory(): () => ValidationErrors | null { + return (): ValidationErrors | null => { + return { testValidatorFactory: { valid: true } }; + }; + } + + function testAsyncValidator() { + return new Promise(resolve => setTimeout(() => resolve(true), 0)); + } + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ReactiveFormsModule], + providers: [ + DynamicFormValidationService, + { + provide: NG_VALIDATORS, + useValue: testValidator, + multi: true, + }, + { + provide: NG_ASYNC_VALIDATORS, + useValue: testAsyncValidator, + multi: true, + }, + { + provide: DYNAMIC_VALIDATORS, + useValue: new Map([ + ['testValidatorFactory', testValidatorFactory], + ]), + }, + ], }); + }); - beforeEach(inject([DynamicFormValidationService], - (validationService: DynamicFormValidationService) => service = validationService)); + beforeEach(inject([DynamicFormValidationService], + (validationService: DynamicFormValidationService) => service = validationService)); - it("should resolve a validator by name", () => { - expect(service.getValidator("required")).toBeTruthy(); - expect(service.getValidator("testValidator")).toBeTruthy(); - expect(service.getValidator("testValidatorFactory")).toBeTruthy(); - }); + it('should resolve a validator by name', () => { + expect(service.getValidator('required')).toBeTruthy(); + expect(service.getValidator('testValidator')).toBeTruthy(); + expect(service.getValidator('testValidatorFactory')).toBeTruthy(); + }); - it("should resolve a async validator by name correctly", () => { - expect(service.getAsyncValidator("testAsyncValidator")).toBeTruthy(); - }); + it('should resolve a async validator by name correctly', () => { + expect(service.getAsyncValidator('testAsyncValidator')).toBeTruthy(); + }); - it("should resolve validators from config", () => { - const config: any = {required: null, maxLength: 7, minLength: 3}; - const validators = service.getValidators(config); + it('should resolve validators from config', () => { + const config: any = { required: null, maxLength: 7, minLength: 3 }; + const validators = service.getValidators(config); - expect(validators.length === Object.keys(config).length).toBe(true); - }); + expect(validators.length === Object.keys(config).length).toBe(true); + }); - it("should resolve custom validators from config", () => { - const config: any = {required: null, maxLength: 7, testValidator: null, testValidatorFactory: "test"}; - const validators = service.getValidators(config); + it('should resolve custom validators from config', () => { + const config: any = { required: null, maxLength: 7, testValidator: null, testValidatorFactory: 'test' }; + const validators = service.getValidators(config); - expect(validators.length === Object.keys(config).length).toBe(true); - }); + expect(validators.length === Object.keys(config).length).toBe(true); + }); - it("should resolve custom validators from detailed config", () => { - const config: any = {testValidator: {name: testValidator.name, args: null}}; - const validators = service.getValidators(config); + it('should resolve custom validators from detailed config', () => { + const config: any = { testValidator: { name: testValidator.name, args: null } }; + const validators = service.getValidators(config); - expect(validators.length === Object.keys(config).length).toBe(true); - }); + expect(validators.length === Object.keys(config).length).toBe(true); + }); - it("should resolve custom async validators from config", () => { - const config: any = {testAsyncValidator: null}; - const validators = service.getAsyncValidators(config); + it('should resolve custom async validators from config', () => { + const config: any = { testAsyncValidator: null }; + const validators = service.getAsyncValidators(config); - expect(validators.length === Object.keys(config).length).toBe(true); - }); + expect(validators.length === Object.keys(config).length).toBe(true); + }); - it("should throw when validator is not provided via NG_VALIDATORS", () => { - expect(() => service.getValidator("test", null)) - .toThrow(new Error(`validator "test" is not provided via NG_VALIDATORS, NG_ASYNC_VALIDATORS or DYNAMIC_FORM_VALIDATORS`)); - }); + it('should throw when validator is not provided via NG_VALIDATORS', () => { + expect(() => service.getValidator('test', null)) + .toThrow(new Error(`validator "test" is not provided via NG_VALIDATORS, NG_ASYNC_VALIDATORS or DYNAMIC_FORM_VALIDATORS`)); + }); - it("should update validators on control and model", () => { - const config: any = {testValidator: null}; - const control: UntypedFormControl = new UntypedFormControl(); - const model: DynamicFormControlModel = new DynamicInputModel({id: "input"}); + it('should update validators on control and model', () => { + const config: any = { testValidator: null }; + const control: UntypedFormControl = new UntypedFormControl(); + const model: DynamicFormControlModel = new DynamicInputModel({ id: 'input' }); - expect(control.validator).toBeNull(); - expect(model.validators).toBeNull(); + expect(control.validator).toBeNull(); + expect(model.validators).toBeNull(); - service.updateValidators(config, control, model); + service.updateValidators(config, control, model); - expect(isFunction(control.validator)).toBe(true); - expect((model.validators as object).hasOwnProperty("testValidator")).toBe(true); + expect(isFunction(control.validator)).toBe(true); + expect((model.validators as object).hasOwnProperty('testValidator')).toBe(true); - service.updateValidators(null, control, model); + service.updateValidators(null, control, model); - expect(control.validator).toBeNull(); - expect(model.validators).toBeNull(); - }); + expect(control.validator).toBeNull(); + expect(model.validators).toBeNull(); + }); - it("should update async validators on control and model", () => { - const config: any = {testAsyncValidator: null}; - const control: UntypedFormControl = new UntypedFormControl(); - const model: DynamicFormControlModel = new DynamicInputModel({id: "input"}); + it('should update async validators on control and model', () => { + const config: any = { testAsyncValidator: null }; + const control: UntypedFormControl = new UntypedFormControl(); + const model: DynamicFormControlModel = new DynamicInputModel({ id: 'input' }); - expect(control.asyncValidator).toBeNull(); - expect(model.asyncValidators).toBeNull(); + expect(control.asyncValidator).toBeNull(); + expect(model.asyncValidators).toBeNull(); - service.updateAsyncValidators(config, control, model); + service.updateAsyncValidators(config, control, model); - expect(isFunction(control.asyncValidator)).toBe(true); - expect((model.asyncValidators as object).hasOwnProperty("testAsyncValidator")).toBe(true); + expect(isFunction(control.asyncValidator)).toBe(true); + expect((model.asyncValidators as object).hasOwnProperty('testAsyncValidator')).toBe(true); - service.updateAsyncValidators(null, control, model); + service.updateAsyncValidators(null, control, model); - expect(control.asyncValidator).toBeNull(); - expect(model.asyncValidators).toBeNull(); - }); + expect(control.asyncValidator).toBeNull(); + expect(model.asyncValidators).toBeNull(); + }); - it("should create error messages", () => { - const testControl: UntypedFormControl = new UntypedFormControl(); - const testModel: DynamicFormControlModel = new DynamicInputModel({ - id: "testModel", - minLength: 5, - errorMessages: { - required: "Field is required", - minLength: "Field must contain at least {{ minLength }} characters", - custom1: "Field {{ id }} has a custom error", - custom2: "Field has a custom error: {{ validator.param }}" - } - }); + it('should create error messages', () => { + const testControl: UntypedFormControl = new UntypedFormControl(); + const testModel: DynamicFormControlModel = new DynamicInputModel({ + id: 'testModel', + minLength: 5, + errorMessages: { + required: 'Field is required', + minLength: 'Field must contain at least {{ minLength }} characters', + custom1: 'Field {{ id }} has a custom error', + custom2: 'Field has a custom error: {{ validator.param }}', + }, + }); - let errorMessages; + let errorMessages; - errorMessages = service.createErrorMessages(testControl, testModel); - expect(errorMessages.length).toBe(0); + errorMessages = service.createErrorMessages(testControl, testModel); + expect(errorMessages.length).toBe(0); - testControl.setErrors({required: true, minlength: 5}); + testControl.setErrors({ required: true, minlength: 5 }); - errorMessages = service.createErrorMessages(testControl, testModel); - expect(errorMessages.length).toBe(2); - expect(errorMessages[0]).toEqual((testModel.errorMessages as any).required); - expect(errorMessages[1]).toEqual("Field must contain at least 5 characters"); + errorMessages = service.createErrorMessages(testControl, testModel); + expect(errorMessages.length).toBe(2); + expect(errorMessages[0]).toEqual((testModel.errorMessages as any).required); + expect(errorMessages[1]).toEqual('Field must contain at least 5 characters'); - testControl.setErrors({custom1: true}); + testControl.setErrors({ custom1: true }); - errorMessages = service.createErrorMessages(testControl, testModel); - expect(errorMessages.length).toBe(1); - expect(errorMessages[0]).toEqual(`Field ${testModel.id} has a custom error`); + errorMessages = service.createErrorMessages(testControl, testModel); + expect(errorMessages.length).toBe(1); + expect(errorMessages[0]).toEqual(`Field ${testModel.id} has a custom error`); - testControl.setErrors({custom2: {param: 42}}); + testControl.setErrors({ custom2: { param: 42 } }); - errorMessages = service.createErrorMessages(testControl, testModel); - expect(errorMessages.length).toBe(1); - expect(errorMessages[0]).toEqual("Field has a custom error: 42"); - }); + errorMessages = service.createErrorMessages(testControl, testModel); + expect(errorMessages.length).toBe(1); + expect(errorMessages[0]).toEqual('Field has a custom error: 42'); + }); - it("should check if error messages should be shown", () => { - const control: UntypedFormControl = new UntypedFormControl(); - const model: DynamicFormControlModel = new DynamicInputModel({ - id: "testModel", - errorMessages: { - required: "Field is required" - } - }); + it('should check if error messages should be shown', () => { + const control: UntypedFormControl = new UntypedFormControl(); + const model: DynamicFormControlModel = new DynamicInputModel({ + id: 'testModel', + errorMessages: { + required: 'Field is required', + }, + }); - expect(service.showErrorMessages(control, model, false)).toBe(false); - expect(service.showErrorMessages(control, model, true)).toBe(false); + expect(service.showErrorMessages(control, model, false)).toBe(false); + expect(service.showErrorMessages(control, model, true)).toBe(false); - control.markAsTouched(); - control.setValidators(Validators.required); - control.updateValueAndValidity(); + control.markAsTouched(); + control.setValidators(Validators.required); + control.updateValueAndValidity(); - expect(service.showErrorMessages(control, model, true)).toBe(false); - expect(service.showErrorMessages(control, model, false)).toBe(true); - }); + expect(service.showErrorMessages(control, model, true)).toBe(false); + expect(service.showErrorMessages(control, model, false)).toBe(true); + }); - it("should check form hooks", () => { - expect(service.isFormHook(null)).toBe(false); - expect(service.isFormHook("blur")).toBe(true); - expect(service.isFormHook("focus")).toBe(false); - expect(service.isFormHook("change")).toBe(true); - expect(service.isFormHook("submit")).toBe(true); - }); + it('should check form hooks', () => { + expect(service.isFormHook(null)).toBe(false); + expect(service.isFormHook('blur')).toBe(true); + expect(service.isFormHook('focus')).toBe(false); + expect(service.isFormHook('change')).toBe(true); + expect(service.isFormHook('submit')).toBe(true); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validation.service.ts b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validation.service.ts index ca3858deaf9..1821a4d392f 100644 --- a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validation.service.ts +++ b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validation.service.ts @@ -1,192 +1,205 @@ -import { Injectable, Inject, Optional } from "@angular/core"; import { - AbstractControl, - AsyncValidatorFn, - ValidatorFn, - Validators, - NG_VALIDATORS, - NG_ASYNC_VALIDATORS -} from "@angular/forms"; -import { DynamicFormControlModel } from "../model/dynamic-form-control.model"; + Inject, + Injectable, + Optional, +} from '@angular/core'; import { - DynamicFormHook, - DynamicValidatorDescriptor, - DynamicValidatorsConfig -} from "../model/misc/dynamic-form-control-validation.model"; -import { isObject, isString } from "../utils/core.utils"; -import { DYNAMIC_VALIDATORS, Validator, ValidatorFactory, ValidatorsToken } from "./dynamic-form-validators"; + AbstractControl, + AsyncValidatorFn, + NG_ASYNC_VALIDATORS, + NG_VALIDATORS, + ValidatorFn, + Validators, +} from '@angular/forms'; + +import { DynamicFormControlModel } from '../model/dynamic-form-control.model'; import { - DEFAULT_ERROR_STATE_MATCHER, - DYNAMIC_ERROR_MESSAGES_MATCHER, - DynamicErrorMessagesMatcher -} from "./dynamic-form-validation-matchers"; + DynamicFormHook, + DynamicValidatorDescriptor, + DynamicValidatorsConfig, +} from '../model/misc/dynamic-form-control-validation.model'; +import { + isObject, + isString, +} from '../utils/core.utils'; +import { + DEFAULT_ERROR_STATE_MATCHER, + DYNAMIC_ERROR_MESSAGES_MATCHER, + DynamicErrorMessagesMatcher, +} from './dynamic-form-validation-matchers'; +import { + DYNAMIC_VALIDATORS, + Validator, + ValidatorFactory, + ValidatorsToken, +} from './dynamic-form-validators'; @Injectable({ - providedIn: "root" + providedIn: 'root', }) export class DynamicFormValidationService { - constructor(@Optional() @Inject(NG_VALIDATORS) private _NG_VALIDATORS: ValidatorFn[], + constructor(@Optional() @Inject(NG_VALIDATORS) private _NG_VALIDATORS: ValidatorFn[], @Optional() @Inject(NG_ASYNC_VALIDATORS) private _NG_ASYNC_VALIDATORS: AsyncValidatorFn[], @Optional() @Inject(DYNAMIC_VALIDATORS) private _DYNAMIC_VALIDATORS: Map, @Optional() @Inject(DYNAMIC_ERROR_MESSAGES_MATCHER) private _DYNAMIC_ERROR_MESSAGES_MATCHER: DynamicErrorMessagesMatcher) { - } - - private getValidatorFn(validatorName: string, validatorArgs: any = null, - validatorsToken: ValidatorsToken = this._NG_VALIDATORS): Validator | never { + } - let validatorFn: ValidatorFactory | Validator | undefined; + private getValidatorFn(validatorName: string, validatorArgs: any = null, + validatorsToken: ValidatorsToken = this._NG_VALIDATORS): Validator | never { - if (Validators.hasOwnProperty(validatorName)) { // Built-in Angular Validators - validatorFn = (Validators as any)[validatorName]; + let validatorFn: ValidatorFactory | Validator | undefined; - } else { // Custom Validators - if (this._DYNAMIC_VALIDATORS && this._DYNAMIC_VALIDATORS.has(validatorName)) { - validatorFn = this._DYNAMIC_VALIDATORS.get(validatorName); + if (Validators.hasOwnProperty(validatorName)) { // Built-in Angular Validators + validatorFn = (Validators as any)[validatorName]; - } else if (validatorsToken) { - validatorFn = validatorsToken.find(validator => validator.name === validatorName); - } - } + } else { // Custom Validators + if (this._DYNAMIC_VALIDATORS && this._DYNAMIC_VALIDATORS.has(validatorName)) { + validatorFn = this._DYNAMIC_VALIDATORS.get(validatorName); - if (validatorFn === undefined) { // throw when no validator could be resolved - throw new Error( - `validator "${validatorName}" is not provided via NG_VALIDATORS, NG_ASYNC_VALIDATORS or DYNAMIC_FORM_VALIDATORS`); - } + } else if (validatorsToken) { + validatorFn = validatorsToken.find(validator => validator.name === validatorName); + } + } - if (validatorArgs !== null) { - return (validatorFn as ValidatorFactory)(validatorArgs); - } + if (validatorFn === undefined) { // throw when no validator could be resolved + throw new Error( + `validator "${validatorName}" is not provided via NG_VALIDATORS, NG_ASYNC_VALIDATORS or DYNAMIC_FORM_VALIDATORS`); + } - return validatorFn as Validator; + if (validatorArgs !== null) { + return (validatorFn as ValidatorFactory)(validatorArgs); } - private getValidatorFns(validatorsConfig: DynamicValidatorsConfig, - validatorsToken: ValidatorsToken = this._NG_VALIDATORS): Validator[] { + return validatorFn as Validator; + } - let validatorFns: Validator[] = []; + private getValidatorFns(validatorsConfig: DynamicValidatorsConfig, + validatorsToken: ValidatorsToken = this._NG_VALIDATORS): Validator[] { - if (isObject(validatorsConfig)) { + let validatorFns: Validator[] = []; - validatorFns = Object.keys(validatorsConfig).map(validatorConfigKey => { - const validatorConfigValue = (validatorsConfig as DynamicValidatorsConfig)[validatorConfigKey]; + if (isObject(validatorsConfig)) { - if (this.isValidatorDescriptor(validatorConfigValue)) { - const descriptor = validatorConfigValue as DynamicValidatorDescriptor; + validatorFns = Object.keys(validatorsConfig).map(validatorConfigKey => { + const validatorConfigValue = (validatorsConfig as DynamicValidatorsConfig)[validatorConfigKey]; - return this.getValidatorFn(descriptor.name, descriptor.args, validatorsToken); - } + if (this.isValidatorDescriptor(validatorConfigValue)) { + const descriptor = validatorConfigValue as DynamicValidatorDescriptor; - return this.getValidatorFn(validatorConfigKey, validatorConfigValue, validatorsToken); - }); + return this.getValidatorFn(descriptor.name, descriptor.args, validatorsToken); } - return validatorFns; + return this.getValidatorFn(validatorConfigKey, validatorConfigValue, validatorsToken); + }); } - getValidator(validatorName: string, validatorArgs: any = null): ValidatorFn { - return this.getValidatorFn(validatorName, validatorArgs) as ValidatorFn; - } + return validatorFns; + } - getAsyncValidator(validatorName: string, validatorArgs: any = null): AsyncValidatorFn { - return this.getValidatorFn(validatorName, validatorArgs, this._NG_ASYNC_VALIDATORS) as AsyncValidatorFn; - } + getValidator(validatorName: string, validatorArgs: any = null): ValidatorFn { + return this.getValidatorFn(validatorName, validatorArgs) as ValidatorFn; + } - getValidators(validatorsConfig: DynamicValidatorsConfig): ValidatorFn[] { - return this.getValidatorFns(validatorsConfig) as ValidatorFn[]; - } + getAsyncValidator(validatorName: string, validatorArgs: any = null): AsyncValidatorFn { + return this.getValidatorFn(validatorName, validatorArgs, this._NG_ASYNC_VALIDATORS) as AsyncValidatorFn; + } - getAsyncValidators(asyncValidatorsConfig: DynamicValidatorsConfig): AsyncValidatorFn[] { - return this.getValidatorFns(asyncValidatorsConfig, this._NG_ASYNC_VALIDATORS) as AsyncValidatorFn[]; - } + getValidators(validatorsConfig: DynamicValidatorsConfig): ValidatorFn[] { + return this.getValidatorFns(validatorsConfig) as ValidatorFn[]; + } - updateValidators(validatorsConfig: DynamicValidatorsConfig | null, control: AbstractControl, - model: DynamicFormControlModel): void { + getAsyncValidators(asyncValidatorsConfig: DynamicValidatorsConfig): AsyncValidatorFn[] { + return this.getValidatorFns(asyncValidatorsConfig, this._NG_ASYNC_VALIDATORS) as AsyncValidatorFn[]; + } - model.validators = validatorsConfig; + updateValidators(validatorsConfig: DynamicValidatorsConfig | null, control: AbstractControl, + model: DynamicFormControlModel): void { - if (validatorsConfig === null) { - control.clearValidators(); + model.validators = validatorsConfig; - } else { - control.setValidators(this.getValidators(validatorsConfig)); - } + if (validatorsConfig === null) { + control.clearValidators(); - control.updateValueAndValidity(); + } else { + control.setValidators(this.getValidators(validatorsConfig)); } - updateAsyncValidators(asyncValidatorsConfig: DynamicValidatorsConfig | null, control: AbstractControl, - model: DynamicFormControlModel): void { + control.updateValueAndValidity(); + } - model.asyncValidators = asyncValidatorsConfig; + updateAsyncValidators(asyncValidatorsConfig: DynamicValidatorsConfig | null, control: AbstractControl, + model: DynamicFormControlModel): void { - if (asyncValidatorsConfig === null) { - control.clearAsyncValidators(); + model.asyncValidators = asyncValidatorsConfig; - } else { - control.setAsyncValidators(this.getAsyncValidators(asyncValidatorsConfig)); - } + if (asyncValidatorsConfig === null) { + control.clearAsyncValidators(); - control.updateValueAndValidity(); + } else { + control.setAsyncValidators(this.getAsyncValidators(asyncValidatorsConfig)); } - showErrorMessages(control: AbstractControl, model: DynamicFormControlModel, hasFocus: boolean): boolean { - const precondition = control.invalid && model.hasErrorMessages; - const matcher = this._DYNAMIC_ERROR_MESSAGES_MATCHER ? this._DYNAMIC_ERROR_MESSAGES_MATCHER(control, model, hasFocus) : - DEFAULT_ERROR_STATE_MATCHER(control, model, hasFocus); - - return precondition && matcher; - } + control.updateValueAndValidity(); + } - parseErrorMessageConfig(template: string, model: DynamicFormControlModel, error: any = null): string { - return template.replace(/{{\s*(.+?)\s*}}/mg, (_match: string, expression: string) => { - let propertySource: any = model; - let propertyName: string = expression; + showErrorMessages(control: AbstractControl, model: DynamicFormControlModel, hasFocus: boolean): boolean { + const precondition = control.invalid && model.hasErrorMessages; + const matcher = this._DYNAMIC_ERROR_MESSAGES_MATCHER ? this._DYNAMIC_ERROR_MESSAGES_MATCHER(control, model, hasFocus) : + DEFAULT_ERROR_STATE_MATCHER(control, model, hasFocus); - if (expression.indexOf("validator.") >= 0 && error) { - propertySource = error; - propertyName = expression.replace("validator.", ""); - } + return precondition && matcher; + } - return propertySource[propertyName] !== null && propertySource[propertyName] !== undefined ? - propertySource[propertyName] : null; - }); - } + parseErrorMessageConfig(template: string, model: DynamicFormControlModel, error: any = null): string { + return template.replace(/{{\s*(.+?)\s*}}/mg, (_match: string, expression: string) => { + let propertySource: any = model; + let propertyName: string = expression; - createErrorMessages(control: AbstractControl, model: DynamicFormControlModel): string[] { - const messages: string[] = []; + if (expression.indexOf('validator.') >= 0 && error) { + propertySource = error; + propertyName = expression.replace('validator.', ''); + } - if (model.hasErrorMessages) { - const messagesConfig = model.errorMessages as DynamicValidatorsConfig; + return propertySource[propertyName] !== null && propertySource[propertyName] !== undefined ? + propertySource[propertyName] : null; + }); + } - Object.keys(control.errors || {}).forEach(validationErrorKey => { - let messageKey = validationErrorKey; + createErrorMessages(control: AbstractControl, model: DynamicFormControlModel): string[] { + const messages: string[] = []; - if (validationErrorKey === "minlength" || validationErrorKey === "maxlength") { - messageKey = messageKey.replace("length", "Length"); - } + if (model.hasErrorMessages) { + const messagesConfig = model.errorMessages as DynamicValidatorsConfig; - if (messagesConfig.hasOwnProperty(messageKey)) { - const validationError = control.getError(validationErrorKey); - const messageTemplate = messagesConfig[messageKey] as string; + Object.keys(control.errors || {}).forEach(validationErrorKey => { + let messageKey = validationErrorKey; - messages.push(this.parseErrorMessageConfig(messageTemplate, model, validationError)); - } - }); + if (validationErrorKey === 'minlength' || validationErrorKey === 'maxlength') { + messageKey = messageKey.replace('length', 'Length'); } - return messages; - } + if (messagesConfig.hasOwnProperty(messageKey)) { + const validationError = control.getError(validationErrorKey); + const messageTemplate = messagesConfig[messageKey] as string; - isFormHook(value: any): boolean { - return isString(value) && (Object.values(DynamicFormHook) as string[]).includes(value); + messages.push(this.parseErrorMessageConfig(messageTemplate, model, validationError)); + } + }); } - isValidatorDescriptor(value: any): boolean { - if (isObject(value)) { - return value.hasOwnProperty("name") && value.hasOwnProperty("args"); - } + return messages; + } + + isFormHook(value: any): boolean { + return isString(value) && (Object.values(DynamicFormHook) as string[]).includes(value); + } - return false; + isValidatorDescriptor(value: any): boolean { + if (isObject(value)) { + return value.hasOwnProperty('name') && value.hasOwnProperty('args'); } + + return false; + } } diff --git a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validators.ts b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validators.ts index d78533e1ecc..24dd45bad6f 100644 --- a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validators.ts +++ b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form-validators.ts @@ -1,5 +1,8 @@ -import { InjectionToken } from "@angular/core"; -import { AsyncValidatorFn, ValidatorFn } from "@angular/forms"; +import { InjectionToken } from '@angular/core'; +import { + AsyncValidatorFn, + ValidatorFn, +} from '@angular/forms'; export type Validator = ValidatorFn | AsyncValidatorFn; @@ -9,4 +12,4 @@ export type ValidatorsToken = Validator[]; export type ValidatorsMap = Map; -export const DYNAMIC_VALIDATORS = new InjectionToken("DYNAMIC_VALIDATORS"); +export const DYNAMIC_VALIDATORS = new InjectionToken('DYNAMIC_VALIDATORS'); diff --git a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.spec.ts b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.spec.ts index 9d1c09c8574..38b08e4e478 100644 --- a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.spec.ts @@ -1,413 +1,420 @@ -import { TestBed, inject } from "@angular/core/testing"; import { - ReactiveFormsModule, - UntypedFormGroup, - UntypedFormControl, - UntypedFormArray, - NG_VALIDATORS, - NG_ASYNC_VALIDATORS -} from "@angular/forms"; -import { DynamicFormService } from "./dynamic-form.service"; -import { DynamicFormGroupModel, DynamicFormModel } from "../model/form-group/dynamic-form-group.model"; -import { DynamicFormComponentService } from "./dynamic-form-component.service"; -import { DynamicFormValidationService } from "./dynamic-form-validation.service"; -import { DynamicSelectModel } from "../model/select/dynamic-select.model"; -import { DynamicInputModel } from "../model/input/dynamic-input.model"; -import { DynamicCheckboxGroupModel } from "../model/checkbox/dynamic-checkbox-group.model"; -import { DynamicCheckboxModel } from "../model/checkbox/dynamic-checkbox.model"; -import { DynamicRadioGroupModel } from "../model/radio/dynamic-radio-group.model"; -import { DynamicTextAreaModel } from "../model/textarea/dynamic-textarea.model"; -import { DynamicFormArrayModel } from "../model/form-array/dynamic-form-array.model"; -import { DynamicDatePickerModel } from "../model/datepicker/dynamic-datepicker.model"; -import { DynamicSwitchModel } from "../model/switch/dynamic-switch.model"; -import { DynamicFileUploadModel } from "../model/file-upload/dynamic-file-upload.model"; -import { DynamicTimePickerModel } from "../model/timepicker/dynamic-timepicker.model"; -import { DynamicDateControlModel } from "../model/dynamic-date-control.model"; -import { DynamicFormControlModel } from "../model/dynamic-form-control.model"; -import { DynamicFormValueControlModel } from "../model/dynamic-form-value-control.model"; - - -describe("DynamicFormService test suite", () => { - let testModel: DynamicFormModel; - let service: DynamicFormService; - - function testValidator() { - return {testValidator: {valid: true}}; - } - - function testAsyncValidator() { - return new Promise(resolve => setTimeout(() => resolve(true), 0)); - } - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [ReactiveFormsModule], - providers: [ - DynamicFormService, - DynamicFormComponentService, - DynamicFormValidationService, - {provide: NG_VALIDATORS, useValue: testValidator, multi: true}, - {provide: NG_ASYNC_VALIDATORS, useValue: testAsyncValidator, multi: true} - ] - }); - - testModel = [ - new DynamicSelectModel( - { - id: "testSelect", - options: [ - {label: "Option 1", value: "option-1"}, - {label: "Option 2", value: "option-2"} - ], - value: "option-3" - } - ), - new DynamicInputModel( - { - id: "testInput", - mask: "00/00/00" - } - ), - new DynamicCheckboxGroupModel( - { - id: "testCheckboxGroup", - group: [ - new DynamicCheckboxModel( - { - id: "testCheckboxGroup1", - value: true - } - ), - new DynamicCheckboxModel( - { - id: "testCheckboxGroup2", - value: true - } - ) - ] - } - ), - new DynamicRadioGroupModel( - { - id: "testRadioGroup", - options: [ - {label: "Option 1", value: "option-1"}, - {label: "Option 2", value: "option-2"} - ], - value: "option-3" - } - ), - new DynamicTextAreaModel({id: "testTextArea"}), - new DynamicCheckboxModel({id: "testCheckbox"}), - new DynamicFormArrayModel( - { - id: "testFormArray", - initialCount: 5, - groupFactory: () => { - return [ - new DynamicInputModel({id: "testFormArrayGroupInput"}), - new DynamicFormArrayModel({ - id: "testNestedFormArray", groupFactory: () => [ - new DynamicInputModel({id: "testNestedFormArrayGroupInput"}) - ] - }) - ]; - } - } - ), - new DynamicFormGroupModel( - { - id: "testFormGroup", - group: [ - new DynamicInputModel({id: "nestedTestInput"}), - new DynamicTextAreaModel({id: "nestedTestTextArea"}) - ] - } - ), - new DynamicSwitchModel({id: "testSwitch"}), - new DynamicDatePickerModel({id: "testDatepicker", value: new Date()}), - new DynamicFileUploadModel({id: "testFileUpload"}), - new DynamicTimePickerModel({id: "testTimePicker"}), - ]; - }); - - - beforeEach(inject([DynamicFormService], (formService: DynamicFormService) => service = formService)); - - - it("should create create a form group", () => { - const formGroup = service.createFormGroup(testModel); - - expect(formGroup instanceof UntypedFormGroup).toBe(true); - - expect(formGroup.get("testCheckbox") instanceof UntypedFormControl).toBe(true); - expect(formGroup.get("testCheckboxGroup") instanceof UntypedFormGroup).toBe(true); - expect(formGroup.get("testDatepicker") instanceof UntypedFormControl).toBe(true); - expect(formGroup.get("testFormArray") instanceof UntypedFormArray).toBe(true); - expect(formGroup.get("testInput") instanceof UntypedFormControl).toBe(true); - expect(formGroup.get("testRadioGroup") instanceof UntypedFormControl).toBe(true); - expect(formGroup.get("testSelect") instanceof UntypedFormControl).toBe(true); - expect(formGroup.get("testTextArea") instanceof UntypedFormControl).toBe(true); - expect(formGroup.get("testFileUpload") instanceof UntypedFormControl).toBe(true); - expect(formGroup.get("testTimePicker") instanceof UntypedFormControl).toBe(true); - }); - - - it("should parse dynamic form JSON", () => { - const json = JSON.stringify(testModel); - const formModel = service.fromJSON(json); - - expect(Array.isArray(formModel) as boolean).toBe(true); - - expect(formModel[0] instanceof DynamicSelectModel).toBe(true); - expect(formModel[1] instanceof DynamicInputModel).toBe(true); - expect(formModel[2] instanceof DynamicCheckboxGroupModel).toBe(true); - expect(formModel[3] instanceof DynamicRadioGroupModel).toBe(true); - expect(formModel[4] instanceof DynamicTextAreaModel).toBe(true); - expect(formModel[5] instanceof DynamicCheckboxModel).toBe(true); - expect(formModel[6] instanceof DynamicFormArrayModel).toBe(true); - expect(formModel[7] instanceof DynamicFormGroupModel).toBe(true); - expect(formModel[8] instanceof DynamicSwitchModel).toBe(true); - expect(formModel[9] instanceof DynamicDatePickerModel).toBe(true); - expect((formModel[9] as DynamicDateControlModel).value instanceof Date).toBe(true); - expect(formModel[10] instanceof DynamicFileUploadModel).toBe(true); - expect(formModel[11] instanceof DynamicTimePickerModel).toBe(true); - }); - - - it("should throw when unknown DynamicFormControlModel id is specified in JSON", () => { - expect(() => service.fromJSON([{id: "test"}])) - .toThrow(new Error(`unknown form control model type defined on JSON object with id "test"`)); - }); - - - it("should find a dynamic form control model by id", () => { - expect(service.findById("testCheckbox", testModel) instanceof DynamicFormControlModel).toBe(true); - expect(service.findById("testCheckboxGroup", testModel) instanceof DynamicFormControlModel).toBe(true); - expect(service.findById("testDatepicker", testModel) instanceof DynamicFormControlModel).toBe(true); - expect(service.findById("testFormArray", testModel) instanceof DynamicFormControlModel).toBe(true); - expect(service.findById("testInput", testModel) instanceof DynamicFormControlModel).toBe(true); - expect(service.findById("testRadioGroup", testModel) instanceof DynamicFormControlModel).toBe(true); - expect(service.findById("testSelect", testModel) instanceof DynamicFormControlModel).toBe(true); - expect(service.findById("testSwitch", testModel) instanceof DynamicFormControlModel).toBe(true); - expect(service.findById("testTextArea", testModel) instanceof DynamicFormControlModel).toBe(true); - expect(service.findById("testFileUpload", testModel) instanceof DynamicFormControlModel).toBe(true); - expect(service.findById("testTimePicker", testModel) instanceof DynamicTimePickerModel).toBe(true); - }); - - - it("should find a nested dynamic form control model by id", () => { - expect(service.findById("testCheckboxGroup1", testModel) instanceof DynamicFormControlModel).toBe(true); - expect(service.findById("testCheckboxGroup2", testModel) instanceof DynamicFormControlModel).toBe(true); - expect(service.findById("nestedTestInput", testModel) instanceof DynamicFormControlModel).toBe(true); + inject, + TestBed, +} from '@angular/core/testing'; +import { + NG_ASYNC_VALIDATORS, + NG_VALIDATORS, + ReactiveFormsModule, + UntypedFormArray, + UntypedFormControl, + UntypedFormGroup, +} from '@angular/forms'; + +import { DynamicCheckboxModel } from '../model/checkbox/dynamic-checkbox.model'; +import { DynamicCheckboxGroupModel } from '../model/checkbox/dynamic-checkbox-group.model'; +import { DynamicDatePickerModel } from '../model/datepicker/dynamic-datepicker.model'; +import { DynamicDateControlModel } from '../model/dynamic-date-control.model'; +import { DynamicFormControlModel } from '../model/dynamic-form-control.model'; +import { DynamicFormValueControlModel } from '../model/dynamic-form-value-control.model'; +import { DynamicFileUploadModel } from '../model/file-upload/dynamic-file-upload.model'; +import { DynamicFormArrayModel } from '../model/form-array/dynamic-form-array.model'; +import { + DynamicFormGroupModel, + DynamicFormModel, +} from '../model/form-group/dynamic-form-group.model'; +import { DynamicInputModel } from '../model/input/dynamic-input.model'; +import { DynamicRadioGroupModel } from '../model/radio/dynamic-radio-group.model'; +import { DynamicSelectModel } from '../model/select/dynamic-select.model'; +import { DynamicSwitchModel } from '../model/switch/dynamic-switch.model'; +import { DynamicTextAreaModel } from '../model/textarea/dynamic-textarea.model'; +import { DynamicTimePickerModel } from '../model/timepicker/dynamic-timepicker.model'; +import { DynamicFormService } from './dynamic-form.service'; +import { DynamicFormComponentService } from './dynamic-form-component.service'; +import { DynamicFormValidationService } from './dynamic-form-validation.service'; + + +describe('DynamicFormService test suite', () => { + let testModel: DynamicFormModel; + let service: DynamicFormService; + + function testValidator() { + return { testValidator: { valid: true } }; + } + + function testAsyncValidator() { + return new Promise(resolve => setTimeout(() => resolve(true), 0)); + } + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ReactiveFormsModule], + providers: [ + DynamicFormService, + DynamicFormComponentService, + DynamicFormValidationService, + { provide: NG_VALIDATORS, useValue: testValidator, multi: true }, + { provide: NG_ASYNC_VALIDATORS, useValue: testAsyncValidator, multi: true }, + ], }); - - it("should resolve array group path", () => { - service.createFormGroup(testModel); - - const model = service.findById("testFormArray", testModel) as DynamicFormArrayModel; - const nestedModel = (model.get(0).get(1) as DynamicFormArrayModel).get(0); - - expect(service.getPath(model)).toEqual(["testFormArray"]); - expect(service.getPath(nestedModel)).toEqual(["testFormArray", "0", "testNestedFormArray", "0"]); - }); + testModel = [ + new DynamicSelectModel( + { + id: 'testSelect', + options: [ + { label: 'Option 1', value: 'option-1' }, + { label: 'Option 2', value: 'option-2' }, + ], + value: 'option-3', + }, + ), + new DynamicInputModel( + { + id: 'testInput', + mask: '00/00/00', + }, + ), + new DynamicCheckboxGroupModel( + { + id: 'testCheckboxGroup', + group: [ + new DynamicCheckboxModel( + { + id: 'testCheckboxGroup1', + value: true, + }, + ), + new DynamicCheckboxModel( + { + id: 'testCheckboxGroup2', + value: true, + }, + ), + ], + }, + ), + new DynamicRadioGroupModel( + { + id: 'testRadioGroup', + options: [ + { label: 'Option 1', value: 'option-1' }, + { label: 'Option 2', value: 'option-2' }, + ], + value: 'option-3', + }, + ), + new DynamicTextAreaModel({ id: 'testTextArea' }), + new DynamicCheckboxModel({ id: 'testCheckbox' }), + new DynamicFormArrayModel( + { + id: 'testFormArray', + initialCount: 5, + groupFactory: () => { + return [ + new DynamicInputModel({ id: 'testFormArrayGroupInput' }), + new DynamicFormArrayModel({ + id: 'testNestedFormArray', groupFactory: () => [ + new DynamicInputModel({ id: 'testNestedFormArrayGroupInput' }), + ], + }), + ]; + }, + }, + ), + new DynamicFormGroupModel( + { + id: 'testFormGroup', + group: [ + new DynamicInputModel({ id: 'nestedTestInput' }), + new DynamicTextAreaModel({ id: 'nestedTestTextArea' }), + ], + }, + ), + new DynamicSwitchModel({ id: 'testSwitch' }), + new DynamicDatePickerModel({ id: 'testDatepicker', value: new Date() }), + new DynamicFileUploadModel({ id: 'testFileUpload' }), + new DynamicTimePickerModel({ id: 'testTimePicker' }), + ]; + }); + + + beforeEach(inject([DynamicFormService], (formService: DynamicFormService) => service = formService)); + + + it('should create create a form group', () => { + const formGroup = service.createFormGroup(testModel); + + expect(formGroup instanceof UntypedFormGroup).toBe(true); + + expect(formGroup.get('testCheckbox') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testCheckboxGroup') instanceof UntypedFormGroup).toBe(true); + expect(formGroup.get('testDatepicker') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testFormArray') instanceof UntypedFormArray).toBe(true); + expect(formGroup.get('testInput') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testRadioGroup') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testSelect') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testTextArea') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testFileUpload') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testTimePicker') instanceof UntypedFormControl).toBe(true); + }); + + + it('should parse dynamic form JSON', () => { + const json = JSON.stringify(testModel); + const formModel = service.fromJSON(json); + + expect(Array.isArray(formModel) as boolean).toBe(true); + + expect(formModel[0] instanceof DynamicSelectModel).toBe(true); + expect(formModel[1] instanceof DynamicInputModel).toBe(true); + expect(formModel[2] instanceof DynamicCheckboxGroupModel).toBe(true); + expect(formModel[3] instanceof DynamicRadioGroupModel).toBe(true); + expect(formModel[4] instanceof DynamicTextAreaModel).toBe(true); + expect(formModel[5] instanceof DynamicCheckboxModel).toBe(true); + expect(formModel[6] instanceof DynamicFormArrayModel).toBe(true); + expect(formModel[7] instanceof DynamicFormGroupModel).toBe(true); + expect(formModel[8] instanceof DynamicSwitchModel).toBe(true); + expect(formModel[9] instanceof DynamicDatePickerModel).toBe(true); + expect((formModel[9] as DynamicDateControlModel).value instanceof Date).toBe(true); + expect(formModel[10] instanceof DynamicFileUploadModel).toBe(true); + expect(formModel[11] instanceof DynamicTimePickerModel).toBe(true); + }); + + + it('should throw when unknown DynamicFormControlModel id is specified in JSON', () => { + expect(() => service.fromJSON([{ id: 'test' }])) + .toThrow(new Error(`unknown form control model type defined on JSON object with id "test"`)); + }); + + + it('should find a dynamic form control model by id', () => { + expect(service.findById('testCheckbox', testModel) instanceof DynamicFormControlModel).toBe(true); + expect(service.findById('testCheckboxGroup', testModel) instanceof DynamicFormControlModel).toBe(true); + expect(service.findById('testDatepicker', testModel) instanceof DynamicFormControlModel).toBe(true); + expect(service.findById('testFormArray', testModel) instanceof DynamicFormControlModel).toBe(true); + expect(service.findById('testInput', testModel) instanceof DynamicFormControlModel).toBe(true); + expect(service.findById('testRadioGroup', testModel) instanceof DynamicFormControlModel).toBe(true); + expect(service.findById('testSelect', testModel) instanceof DynamicFormControlModel).toBe(true); + expect(service.findById('testSwitch', testModel) instanceof DynamicFormControlModel).toBe(true); + expect(service.findById('testTextArea', testModel) instanceof DynamicFormControlModel).toBe(true); + expect(service.findById('testFileUpload', testModel) instanceof DynamicFormControlModel).toBe(true); + expect(service.findById('testTimePicker', testModel) instanceof DynamicTimePickerModel).toBe(true); + }); + + + it('should find a nested dynamic form control model by id', () => { + expect(service.findById('testCheckboxGroup1', testModel) instanceof DynamicFormControlModel).toBe(true); + expect(service.findById('testCheckboxGroup2', testModel) instanceof DynamicFormControlModel).toBe(true); + expect(service.findById('nestedTestInput', testModel) instanceof DynamicFormControlModel).toBe(true); + }); + + + it('should resolve array group path', () => { + service.createFormGroup(testModel); + + const model = service.findById('testFormArray', testModel) as DynamicFormArrayModel; + const nestedModel = (model.get(0).get(1) as DynamicFormArrayModel).get(0); + + expect(service.getPath(model)).toEqual(['testFormArray']); + expect(service.getPath(nestedModel)).toEqual(['testFormArray', '0', 'testNestedFormArray', '0']); + }); - it("should add a form control to an existing form group", () => { - const formGroup = service.createFormGroup(testModel); - const nestedFormGroup = formGroup.controls["testFormGroup"] as UntypedFormGroup; - const nestedFormGroupModel = testModel[7] as DynamicFormGroupModel; - const newModel1 = new DynamicInputModel({id: "newInput1"}); - const newModel2 = new DynamicInputModel({id: "newInput2"}); + it('should add a form control to an existing form group', () => { + const formGroup = service.createFormGroup(testModel); + const nestedFormGroup = formGroup.controls.testFormGroup as UntypedFormGroup; + const nestedFormGroupModel = testModel[7] as DynamicFormGroupModel; + const newModel1 = new DynamicInputModel({ id: 'newInput1' }); + const newModel2 = new DynamicInputModel({ id: 'newInput2' }); - service.addFormGroupControl(formGroup, testModel, newModel1); - service.addFormGroupControl(nestedFormGroup, nestedFormGroupModel, newModel2); + service.addFormGroupControl(formGroup, testModel, newModel1); + service.addFormGroupControl(nestedFormGroup, nestedFormGroupModel, newModel2); - expect(formGroup.controls[newModel1.id]).toBeTruthy(); - expect(testModel[testModel.length - 1] === newModel1).toBe(true); + expect(formGroup.controls[newModel1.id]).toBeTruthy(); + expect(testModel[testModel.length - 1] === newModel1).toBe(true); - expect((formGroup.controls["testFormGroup"] as UntypedFormGroup).controls[newModel2.id]).toBeTruthy(); - expect(nestedFormGroupModel.get(nestedFormGroupModel.group.length - 1) === newModel2).toBe(true); - }); + expect((formGroup.controls.testFormGroup as UntypedFormGroup).controls[newModel2.id]).toBeTruthy(); + expect(nestedFormGroupModel.get(nestedFormGroupModel.group.length - 1) === newModel2).toBe(true); + }); - it("should insert a form control to an existing form group", () => { - const formGroup = service.createFormGroup(testModel); - const nestedFormGroup = formGroup.controls["testFormGroup"] as UntypedFormGroup; - const nestedFormGroupModel = testModel[7] as DynamicFormGroupModel; - const newModel1 = new DynamicInputModel({id: "newInput1"}); - const newModel2 = new DynamicInputModel({id: "newInput2"}); + it('should insert a form control to an existing form group', () => { + const formGroup = service.createFormGroup(testModel); + const nestedFormGroup = formGroup.controls.testFormGroup as UntypedFormGroup; + const nestedFormGroupModel = testModel[7] as DynamicFormGroupModel; + const newModel1 = new DynamicInputModel({ id: 'newInput1' }); + const newModel2 = new DynamicInputModel({ id: 'newInput2' }); - service.insertFormGroupControl(4, formGroup, testModel, newModel1); - service.insertFormGroupControl(0, nestedFormGroup, nestedFormGroupModel, newModel2); + service.insertFormGroupControl(4, formGroup, testModel, newModel1); + service.insertFormGroupControl(0, nestedFormGroup, nestedFormGroupModel, newModel2); - expect(formGroup.controls[newModel1.id]).toBeTruthy(); - expect(testModel[4] === newModel1).toBe(true); - expect(service.getPath(testModel[4])).toEqual(["newInput1"]); + expect(formGroup.controls[newModel1.id]).toBeTruthy(); + expect(testModel[4] === newModel1).toBe(true); + expect(service.getPath(testModel[4])).toEqual(['newInput1']); - expect((formGroup.controls["testFormGroup"] as UntypedFormGroup).controls[newModel2.id]).toBeTruthy(); - expect(nestedFormGroupModel.get(0) === newModel2).toBe(true); - expect(service.getPath(nestedFormGroupModel.get(0))).toEqual(["testFormGroup", "newInput2"]); - }); + expect((formGroup.controls.testFormGroup as UntypedFormGroup).controls[newModel2.id]).toBeTruthy(); + expect(nestedFormGroupModel.get(0) === newModel2).toBe(true); + expect(service.getPath(nestedFormGroupModel.get(0))).toEqual(['testFormGroup', 'newInput2']); + }); - it("should move an existing form control to a different group position", () => { - const formGroup = service.createFormGroup(testModel); - const nestedFormGroupModel = testModel[7] as DynamicFormGroupModel; - const model1 = testModel[0]; - const model2 = nestedFormGroupModel.get(0); + it('should move an existing form control to a different group position', () => { + const formGroup = service.createFormGroup(testModel); + const nestedFormGroupModel = testModel[7] as DynamicFormGroupModel; + const model1 = testModel[0]; + const model2 = nestedFormGroupModel.get(0); - service.moveFormGroupControl(0, 2, testModel); + service.moveFormGroupControl(0, 2, testModel); - expect(formGroup.controls[model1.id]).toBeTruthy(); - expect(testModel[2] === model1).toBe(true); + expect(formGroup.controls[model1.id]).toBeTruthy(); + expect(testModel[2] === model1).toBe(true); - service.moveFormGroupControl(0, 1, nestedFormGroupModel); + service.moveFormGroupControl(0, 1, nestedFormGroupModel); - expect((formGroup.controls["testFormGroup"] as UntypedFormGroup).controls[model2.id]).toBeTruthy(); - expect(nestedFormGroupModel.get(1) === model2).toBe(true); - }); + expect((formGroup.controls.testFormGroup as UntypedFormGroup).controls[model2.id]).toBeTruthy(); + expect(nestedFormGroupModel.get(1) === model2).toBe(true); + }); - it("should remove a form control from an existing form group", () => { - const formGroup = service.createFormGroup(testModel); - const nestedFormGroup = formGroup.controls["testFormGroup"] as UntypedFormGroup; - const nestedFormGroupModel = testModel[7] as DynamicFormGroupModel; - const length = testModel.length; - const size = nestedFormGroupModel.size(); - const index = 1; - const id1 = testModel[index].id; - const id2 = nestedFormGroupModel.get(index).id; + it('should remove a form control from an existing form group', () => { + const formGroup = service.createFormGroup(testModel); + const nestedFormGroup = formGroup.controls.testFormGroup as UntypedFormGroup; + const nestedFormGroupModel = testModel[7] as DynamicFormGroupModel; + const length = testModel.length; + const size = nestedFormGroupModel.size(); + const index = 1; + const id1 = testModel[index].id; + const id2 = nestedFormGroupModel.get(index).id; - service.removeFormGroupControl(index, formGroup, testModel); + service.removeFormGroupControl(index, formGroup, testModel); - expect(Object.keys(formGroup.controls).length).toBe(length - 1); - expect(formGroup.controls[id1]).toBeUndefined(); + expect(Object.keys(formGroup.controls).length).toBe(length - 1); + expect(formGroup.controls[id1]).toBeUndefined(); - expect(testModel.length).toBe(length - 1); - expect(service.findById(id1, testModel)).toBeNull(); + expect(testModel.length).toBe(length - 1); + expect(service.findById(id1, testModel)).toBeNull(); - service.removeFormGroupControl(index, nestedFormGroup, nestedFormGroupModel); + service.removeFormGroupControl(index, nestedFormGroup, nestedFormGroupModel); - expect(Object.keys(nestedFormGroup.controls).length).toBe(size - 1); - expect(nestedFormGroup.controls[id2]).toBeUndefined(); + expect(Object.keys(nestedFormGroup.controls).length).toBe(size - 1); + expect(nestedFormGroup.controls[id2]).toBeUndefined(); - expect(nestedFormGroupModel.size()).toBe(size - 1); - expect(service.findById(id2, testModel)).toBeNull(); - }); + expect(nestedFormGroupModel.size()).toBe(size - 1); + expect(service.findById(id2, testModel)).toBeNull(); + }); - it("should create a form array", () => { - const model = service.findById("testFormArray", testModel) as DynamicFormArrayModel; - let formArray; + it('should create a form array', () => { + const model = service.findById('testFormArray', testModel) as DynamicFormArrayModel; + let formArray; - expect(service.createFormArray).toBeTruthy(); + expect(service.createFormArray).toBeTruthy(); - formArray = service.createFormArray(model); + formArray = service.createFormArray(model); - expect(formArray instanceof UntypedFormArray).toBe(true); - expect(formArray.length).toBe(model.initialCount); - }); + expect(formArray instanceof UntypedFormArray).toBe(true); + expect(formArray.length).toBe(model.initialCount); + }); - it("should add a form array group", () => { - const model = service.findById("testFormArray", testModel) as DynamicFormArrayModel; - const formArray = service.createFormArray(model); + it('should add a form array group', () => { + const model = service.findById('testFormArray', testModel) as DynamicFormArrayModel; + const formArray = service.createFormArray(model); - service.addFormArrayGroup(formArray, model); + service.addFormArrayGroup(formArray, model); - expect(formArray.length).toBe(model.initialCount + 1); - }); + expect(formArray.length).toBe(model.initialCount + 1); + }); - it("should insert a form array group", () => { - const model = service.findById("testFormArray", testModel) as DynamicFormArrayModel; - const formArray = service.createFormArray(model); + it('should insert a form array group', () => { + const model = service.findById('testFormArray', testModel) as DynamicFormArrayModel; + const formArray = service.createFormArray(model); - service.insertFormArrayGroup(0, formArray, model); + service.insertFormArrayGroup(0, formArray, model); - expect(formArray.length).toBe(model.initialCount + 1); - }); + expect(formArray.length).toBe(model.initialCount + 1); + }); - it("should move up a form array group", () => { - const model = service.findById("testFormArray", testModel) as DynamicFormArrayModel; - const formArray = service.createFormArray(model); - const index = 3; - const step = 1; + it('should move up a form array group', () => { + const model = service.findById('testFormArray', testModel) as DynamicFormArrayModel; + const formArray = service.createFormArray(model); + const index = 3; + const step = 1; - (formArray.at(index) as UntypedFormGroup).controls["testFormArrayGroupInput"].setValue("next test value 1"); - (formArray.at(index + step) as UntypedFormGroup).controls["testFormArrayGroupInput"].setValue("next test value 2"); + (formArray.at(index) as UntypedFormGroup).controls.testFormArrayGroupInput.setValue('next test value 1'); + (formArray.at(index + step) as UntypedFormGroup).controls.testFormArrayGroupInput.setValue('next test value 2'); - (model.get(index).get(0) as DynamicFormValueControlModel).value = "next test value 1"; - (model.get(index + step).get(0) as DynamicFormValueControlModel).value = "next test value 2"; + (model.get(index).get(0) as DynamicFormValueControlModel).value = 'next test value 1'; + (model.get(index + step).get(0) as DynamicFormValueControlModel).value = 'next test value 2'; - service.moveFormArrayGroup(index, step, formArray, model); + service.moveFormArrayGroup(index, step, formArray, model); - expect(formArray.length).toBe(model.initialCount); + expect(formArray.length).toBe(model.initialCount); - expect((formArray.at(index) as UntypedFormGroup).controls["testFormArrayGroupInput"].value).toEqual("next test value 2"); - expect((formArray.at(index + step) as UntypedFormGroup).controls["testFormArrayGroupInput"].value).toEqual("next test value 1"); + expect((formArray.at(index) as UntypedFormGroup).controls.testFormArrayGroupInput.value).toEqual('next test value 2'); + expect((formArray.at(index + step) as UntypedFormGroup).controls.testFormArrayGroupInput.value).toEqual('next test value 1'); - expect((model.get(index).get(0) as DynamicFormValueControlModel).value).toEqual("next test value 2"); - expect((model.get(index + step).get(0) as DynamicFormValueControlModel).value).toEqual("next test value 1"); - }); + expect((model.get(index).get(0) as DynamicFormValueControlModel).value).toEqual('next test value 2'); + expect((model.get(index + step).get(0) as DynamicFormValueControlModel).value).toEqual('next test value 1'); + }); - it("should move down a form array group", () => { - const model = service.findById("testFormArray", testModel) as DynamicFormArrayModel; - const formArray = service.createFormArray(model); - const index = 3; - const step = -1; + it('should move down a form array group', () => { + const model = service.findById('testFormArray', testModel) as DynamicFormArrayModel; + const formArray = service.createFormArray(model); + const index = 3; + const step = -1; - (formArray.at(index) as UntypedFormGroup).controls["testFormArrayGroupInput"].setValue("next test value 1"); - (formArray.at(index + step) as UntypedFormGroup).controls["testFormArrayGroupInput"].setValue("next test value 2"); + (formArray.at(index) as UntypedFormGroup).controls.testFormArrayGroupInput.setValue('next test value 1'); + (formArray.at(index + step) as UntypedFormGroup).controls.testFormArrayGroupInput.setValue('next test value 2'); - (model.get(index).get(0) as DynamicFormValueControlModel).value = "next test value 1"; - (model.get(index + step).get(0) as DynamicFormValueControlModel).value = "next test value 2"; + (model.get(index).get(0) as DynamicFormValueControlModel).value = 'next test value 1'; + (model.get(index + step).get(0) as DynamicFormValueControlModel).value = 'next test value 2'; - service.moveFormArrayGroup(index, step, formArray, model); + service.moveFormArrayGroup(index, step, formArray, model); - expect(formArray.length).toBe(model.initialCount); + expect(formArray.length).toBe(model.initialCount); - expect((formArray.at(index) as UntypedFormGroup).controls["testFormArrayGroupInput"].value).toEqual("next test value 2"); - expect((formArray.at(index + step) as UntypedFormGroup).controls["testFormArrayGroupInput"].value).toEqual("next test value 1"); + expect((formArray.at(index) as UntypedFormGroup).controls.testFormArrayGroupInput.value).toEqual('next test value 2'); + expect((formArray.at(index + step) as UntypedFormGroup).controls.testFormArrayGroupInput.value).toEqual('next test value 1'); - expect((model.get(index).get(0) as DynamicFormValueControlModel).value).toEqual("next test value 2"); - expect((model.get(index + step).get(0) as DynamicFormValueControlModel).value).toEqual("next test value 1"); - }); + expect((model.get(index).get(0) as DynamicFormValueControlModel).value).toEqual('next test value 2'); + expect((model.get(index + step).get(0) as DynamicFormValueControlModel).value).toEqual('next test value 1'); + }); - it("should throw when form array group is to be moved out of bounds", () => { - const model = service.findById("testFormArray", testModel) as DynamicFormArrayModel; - const formArray = service.createFormArray(model); + it('should throw when form array group is to be moved out of bounds', () => { + const model = service.findById('testFormArray', testModel) as DynamicFormArrayModel; + const formArray = service.createFormArray(model); - expect(() => service.moveFormArrayGroup(2, -5, formArray, model)) - .toThrow(new Error(`form array group cannot be moved due to index or new index being out of bounds`)); - }); + expect(() => service.moveFormArrayGroup(2, -5, formArray, model)) + .toThrow(new Error(`form array group cannot be moved due to index or new index being out of bounds`)); + }); - it("should remove a form array group", () => { - const model = service.findById("testFormArray", testModel) as DynamicFormArrayModel; - const formArray = service.createFormArray(model); + it('should remove a form array group', () => { + const model = service.findById('testFormArray', testModel) as DynamicFormArrayModel; + const formArray = service.createFormArray(model); - service.removeFormArrayGroup(0, formArray, model); + service.removeFormArrayGroup(0, formArray, model); - const newCount = model.initialCount - 1; + const newCount = model.initialCount - 1; - expect(model.size).toBe(newCount); - expect(formArray.length).toBe(newCount); - }); + expect(model.size).toBe(newCount); + expect(formArray.length).toBe(newCount); + }); - it("should clear a form array", () => { - const model = service.findById("testFormArray", testModel) as DynamicFormArrayModel; - const formArray = service.createFormArray(model); + it('should clear a form array', () => { + const model = service.findById('testFormArray', testModel) as DynamicFormArrayModel; + const formArray = service.createFormArray(model); - service.clearFormArray(formArray, model); + service.clearFormArray(formArray, model); - expect(model.size === 0).toBe(true); - expect(formArray.length === 0).toBe(true); - }); + expect(model.size === 0).toBe(true); + expect(formArray.length === 0).toBe(true); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.ts b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.ts index b60cb5cb4c7..42b6ad7e8e4 100644 --- a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.ts +++ b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.ts @@ -1,350 +1,383 @@ -import { Injectable } from "@angular/core"; -import { AbstractControl, UntypedFormArray, UntypedFormControl, UntypedFormGroup } from "@angular/forms"; -import { AbstractControlOptions } from "@angular/forms"; -import { DynamicFormControlModel } from "../model/dynamic-form-control.model"; -import { DynamicFormValueControlModel } from "../model/dynamic-form-value-control.model"; +import { Injectable } from '@angular/core'; import { - DynamicFormArrayModel, - DYNAMIC_FORM_CONTROL_TYPE_ARRAY, - DynamicFormArrayGroupModel -} from "../model/form-array/dynamic-form-array.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_GROUP, DynamicFormGroupModel, DynamicFormModel, DynamicUnionFormModel } from "../model/form-group/dynamic-form-group.model"; + AbstractControl, + AbstractControlOptions, + UntypedFormArray, + UntypedFormControl, + UntypedFormGroup, +} from '@angular/forms'; + +import { DynamicFormComponent } from '../component/dynamic-form.component'; import { - DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP, - DynamicCheckboxGroupModel -} from "../model/checkbox/dynamic-checkbox-group.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX, DynamicCheckboxModel } from "../model/checkbox/dynamic-checkbox.model"; + DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX, + DynamicCheckboxModel, +} from '../model/checkbox/dynamic-checkbox.model'; import { - DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER, - DynamicDatePickerModel -} from "../model/datepicker/dynamic-datepicker.model"; + DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP, + DynamicCheckboxGroupModel, +} from '../model/checkbox/dynamic-checkbox-group.model'; import { - DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD, - DynamicFileUploadModel -} from "../model/file-upload/dynamic-file-upload.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_INPUT, DynamicInputModel } from "../model/input/dynamic-input.model"; + DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER, + DynamicDatePickerModel, +} from '../model/datepicker/dynamic-datepicker.model'; +import { DynamicFormControlModel } from '../model/dynamic-form-control.model'; +import { DynamicFormValueControlModel } from '../model/dynamic-form-value-control.model'; import { - DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP, - DynamicRadioGroupModel -} from "../model/radio/dynamic-radio-group.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_SELECT, DynamicSelectModel } from "../model/select/dynamic-select.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_SWITCH, DynamicSwitchModel } from "../model/switch/dynamic-switch.model"; -import { DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA, DynamicTextAreaModel } from "../model/textarea/dynamic-textarea.model"; + DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD, + DynamicFileUploadModel, +} from '../model/file-upload/dynamic-file-upload.model'; import { - DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER, - DynamicTimePickerModel -} from "../model/timepicker/dynamic-timepicker.model"; -import { DynamicFormValidationService } from "./dynamic-form-validation.service"; -import { DynamicPathable } from "../model/misc/dynamic-form-control-path.model"; -import { DynamicFormHook, DynamicValidatorsConfig } from "../model/misc/dynamic-form-control-validation.model"; -import { parseReviver } from "../utils/json.utils"; -import { isString } from "../utils/core.utils"; -import { DynamicFormComponent } from "../component/dynamic-form.component"; -import { DynamicFormComponentService } from "./dynamic-form-component.service"; + DYNAMIC_FORM_CONTROL_TYPE_ARRAY, + DynamicFormArrayGroupModel, + DynamicFormArrayModel, +} from '../model/form-array/dynamic-form-array.model'; +import { + DYNAMIC_FORM_CONTROL_TYPE_GROUP, + DynamicFormGroupModel, + DynamicFormModel, + DynamicUnionFormModel, +} from '../model/form-group/dynamic-form-group.model'; +import { + DYNAMIC_FORM_CONTROL_TYPE_INPUT, + DynamicInputModel, +} from '../model/input/dynamic-input.model'; +import { DynamicPathable } from '../model/misc/dynamic-form-control-path.model'; +import { + DynamicFormHook, + DynamicValidatorsConfig, +} from '../model/misc/dynamic-form-control-validation.model'; +import { + DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP, + DynamicRadioGroupModel, +} from '../model/radio/dynamic-radio-group.model'; +import { + DYNAMIC_FORM_CONTROL_TYPE_SELECT, + DynamicSelectModel, +} from '../model/select/dynamic-select.model'; +import { + DYNAMIC_FORM_CONTROL_TYPE_SWITCH, + DynamicSwitchModel, +} from '../model/switch/dynamic-switch.model'; +import { + DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA, + DynamicTextAreaModel, +} from '../model/textarea/dynamic-textarea.model'; +import { + DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER, + DynamicTimePickerModel, +} from '../model/timepicker/dynamic-timepicker.model'; +import { isString } from '../utils/core.utils'; +import { parseReviver } from '../utils/json.utils'; +import { DynamicFormComponentService } from './dynamic-form-component.service'; +import { DynamicFormValidationService } from './dynamic-form-validation.service'; @Injectable({ - providedIn: "root" + providedIn: 'root', }) export class DynamicFormService { - constructor(private componentService: DynamicFormComponentService, private validationService: DynamicFormValidationService) { - } - - private createAbstractControlOptions(validatorsConfig: DynamicValidatorsConfig | null = null, - asyncValidatorsConfig: DynamicValidatorsConfig | null = null, - updateOn: DynamicFormHook | null = null): AbstractControlOptions { - return { - asyncValidators: asyncValidatorsConfig !== null ? this.validationService.getAsyncValidators(asyncValidatorsConfig) : null, - validators: validatorsConfig !== null ? this.validationService.getValidators(validatorsConfig) : null, - updateOn: updateOn !== null && this.validationService.isFormHook(updateOn) ? updateOn : DynamicFormHook.Change - }; + constructor(private componentService: DynamicFormComponentService, private validationService: DynamicFormValidationService) { + } + + private createAbstractControlOptions(validatorsConfig: DynamicValidatorsConfig | null = null, + asyncValidatorsConfig: DynamicValidatorsConfig | null = null, + updateOn: DynamicFormHook | null = null): AbstractControlOptions { + return { + asyncValidators: asyncValidatorsConfig !== null ? this.validationService.getAsyncValidators(asyncValidatorsConfig) : null, + validators: validatorsConfig !== null ? this.validationService.getValidators(validatorsConfig) : null, + updateOn: updateOn !== null && this.validationService.isFormHook(updateOn) ? updateOn : DynamicFormHook.Change, + }; + } + + createFormArray(formArrayModel: DynamicFormArrayModel): UntypedFormArray { + const controls: AbstractControl[] = []; + const options = this.createAbstractControlOptions(formArrayModel.validators, formArrayModel.asyncValidators, + formArrayModel.updateOn); + + for (let index = 0; index < formArrayModel.size; index++) { + const groupModel = formArrayModel.get(index); + const groupOptions = this.createAbstractControlOptions(formArrayModel.groupValidators, + formArrayModel.groupAsyncValidators, formArrayModel.updateOn); + + controls.push(this.createFormGroup(groupModel.group, groupOptions, groupModel)); } - createFormArray(formArrayModel: DynamicFormArrayModel): UntypedFormArray { - const controls: AbstractControl[] = []; - const options = this.createAbstractControlOptions(formArrayModel.validators, formArrayModel.asyncValidators, - formArrayModel.updateOn); - - for (let index = 0; index < formArrayModel.size; index++) { - const groupModel = formArrayModel.get(index); - const groupOptions = this.createAbstractControlOptions(formArrayModel.groupValidators, - formArrayModel.groupAsyncValidators, formArrayModel.updateOn); + return new UntypedFormArray(controls, options); + } - controls.push(this.createFormGroup(groupModel.group, groupOptions, groupModel)); - } + createFormGroup(formModel: DynamicFormModel, options: AbstractControlOptions | null = null, + parent: DynamicPathable | null = null): UntypedFormGroup { + const controls: { [controlId: string]: AbstractControl; } = {}; - return new UntypedFormArray(controls, options); - } + formModel.forEach(model => { + model.parent = parent; - createFormGroup(formModel: DynamicFormModel, options: AbstractControlOptions | null = null, - parent: DynamicPathable | null = null): UntypedFormGroup { - const controls: { [controlId: string]: AbstractControl; } = {}; + switch (model.type) { - formModel.forEach(model => { - model.parent = parent; + case DYNAMIC_FORM_CONTROL_TYPE_ARRAY: + controls[model.id] = this.createFormArray(model as DynamicFormArrayModel); + break; - switch (model.type) { + case DYNAMIC_FORM_CONTROL_TYPE_GROUP: + case DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP: { + const groupModel = model as DynamicFormGroupModel; + const groupOptions = this.createAbstractControlOptions(groupModel.validators, + groupModel.asyncValidators, groupModel.updateOn); - case DYNAMIC_FORM_CONTROL_TYPE_ARRAY: - controls[model.id] = this.createFormArray(model as DynamicFormArrayModel); - break; + controls[model.id] = this.createFormGroup(groupModel.group, groupOptions, groupModel); + break; + } - case DYNAMIC_FORM_CONTROL_TYPE_GROUP: - case DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP: - const groupModel = model as DynamicFormGroupModel; - const groupOptions = this.createAbstractControlOptions(groupModel.validators, - groupModel.asyncValidators, groupModel.updateOn); + default: { + const controlModel = model as DynamicFormValueControlModel; + const controlState = { value: controlModel.value, disabled: controlModel.disabled }; + const controlOptions = this.createAbstractControlOptions(controlModel.validators, + controlModel.asyncValidators, controlModel.updateOn); - controls[model.id] = this.createFormGroup(groupModel.group, groupOptions, groupModel); - break; + controls[model.id] = new UntypedFormControl(controlState, controlOptions); + } + } + }); - default: - const controlModel = model as DynamicFormValueControlModel; - const controlState = {value: controlModel.value, disabled: controlModel.disabled}; - const controlOptions = this.createAbstractControlOptions(controlModel.validators, - controlModel.asyncValidators, controlModel.updateOn); + return new UntypedFormGroup(controls, options); + } - controls[model.id] = new UntypedFormControl(controlState, controlOptions); - } - }); + getPathSegment(model: DynamicPathable): string { + return model instanceof DynamicFormArrayGroupModel ? model.index.toString() : (model as DynamicFormControlModel).id; + } - return new UntypedFormGroup(controls, options); - } + getPath(model: DynamicPathable, join: boolean = false): string[] | string { + const path = [this.getPathSegment(model)]; + let parent = model.parent; - getPathSegment(model: DynamicPathable): string { - return model instanceof DynamicFormArrayGroupModel ? model.index.toString() : (model as DynamicFormControlModel).id; + while (parent) { + path.unshift(this.getPathSegment(parent)); + parent = parent.parent; } - getPath(model: DynamicPathable, join: boolean = false): string[] | string { - const path = [this.getPathSegment(model)]; - let parent = model.parent; + return join ? path.join('.') : path; + } - while (parent) { - path.unshift(this.getPathSegment(parent)); - parent = parent.parent; - } + addFormGroupControl(formGroup: UntypedFormGroup, formModel: DynamicUnionFormModel, ...models: DynamicFormModel): void { + if (formModel instanceof DynamicFormGroupModel) { + this.insertFormGroupControl(formModel.size(), formGroup, formModel, ...models); - return join ? path.join(".") : path; + } else { + const model = formModel as DynamicFormModel; + this.insertFormGroupControl(model.length, formGroup, model, ...models); } + } - addFormGroupControl(formGroup: UntypedFormGroup, formModel: DynamicUnionFormModel, ...models: DynamicFormModel): void { - if (formModel instanceof DynamicFormGroupModel) { - this.insertFormGroupControl(formModel.size(), formGroup, formModel, ...models); + moveFormGroupControl(index: number, step: number, formModel: DynamicUnionFormModel): void { + if (formModel instanceof DynamicFormGroupModel) { + formModel.move(index, step); - } else { - const model = formModel as DynamicFormModel; - this.insertFormGroupControl(model.length, formGroup, model, ...models); - } + } else { + const model = formModel as DynamicFormModel; + model.splice(index + step, 0, ...model.splice(index, 1)); } + } - moveFormGroupControl(index: number, step: number, formModel: DynamicUnionFormModel): void { - if (formModel instanceof DynamicFormGroupModel) { - formModel.move(index, step); + insertFormGroupControl(index: number, formGroup: UntypedFormGroup, formModel: DynamicUnionFormModel, ...models: DynamicFormModel): void { + const parent = formModel instanceof DynamicFormGroupModel ? formModel : null; + const controls = this.createFormGroup(models, null, parent).controls; - } else { - const model = formModel as DynamicFormModel; - model.splice(index + step, 0, ...model.splice(index, 1)); - } - } + Object.keys(controls).forEach((controlName, idx) => { + const controlModel = models[idx]; - insertFormGroupControl(index: number, formGroup: UntypedFormGroup, formModel: DynamicUnionFormModel, ...models: DynamicFormModel): void { - const parent = formModel instanceof DynamicFormGroupModel ? formModel : null; - const controls = this.createFormGroup(models, null, parent).controls; + if (formModel instanceof DynamicFormGroupModel) { + formModel.insert(index, controlModel); - Object.keys(controls).forEach((controlName, idx) => { - const controlModel = models[idx]; + } else { + (formModel as DynamicFormModel).splice(index, 0, controlModel); + } - if (formModel instanceof DynamicFormGroupModel) { - formModel.insert(index, controlModel); + formGroup.addControl(controlName, controls[controlName]); + }); + } - } else { - (formModel as DynamicFormModel).splice(index, 0, controlModel); - } + removeFormGroupControl(index: number, formGroup: UntypedFormGroup, formModel: DynamicUnionFormModel): void { + if (formModel instanceof DynamicFormGroupModel) { + formGroup.removeControl(formModel.get(index).id); + formModel.remove(index); - formGroup.addControl(controlName, controls[controlName]); - }); + } else { + formGroup.removeControl(formModel[index].id); + (formModel as DynamicFormModel).splice(index, 1); } + } - removeFormGroupControl(index: number, formGroup: UntypedFormGroup, formModel: DynamicUnionFormModel): void { - if (formModel instanceof DynamicFormGroupModel) { - formGroup.removeControl(formModel.get(index).id); - formModel.remove(index); + addFormArrayGroup(formArray: UntypedFormArray, formArrayModel: DynamicFormArrayModel): void { + const groupModel = formArrayModel.addGroup(); + formArray.push(this.createFormGroup(groupModel.group, null, groupModel)); + } - } else { - formGroup.removeControl(formModel[index].id); - (formModel as DynamicFormModel).splice(index, 1); - } - } - - addFormArrayGroup(formArray: UntypedFormArray, formArrayModel: DynamicFormArrayModel): void { - const groupModel = formArrayModel.addGroup(); - formArray.push(this.createFormGroup(groupModel.group, null, groupModel)); - } + insertFormArrayGroup(index: number, formArray: UntypedFormArray, formArrayModel: DynamicFormArrayModel): void { + const groupModel = formArrayModel.insertGroup(index); + formArray.insert(index, this.createFormGroup(groupModel.group, null, groupModel)); + } - insertFormArrayGroup(index: number, formArray: UntypedFormArray, formArrayModel: DynamicFormArrayModel): void { - const groupModel = formArrayModel.insertGroup(index); - formArray.insert(index, this.createFormGroup(groupModel.group, null, groupModel)); - } - - moveFormArrayGroup(index: number, step: number, formArray: UntypedFormArray, formArrayModel: DynamicFormArrayModel): void { - const newIndex = index + step; - const moveUp = step >= 0; + moveFormArrayGroup(index: number, step: number, formArray: UntypedFormArray, formArrayModel: DynamicFormArrayModel): void { + const newIndex = index + step; + const moveUp = step >= 0; - if ((index >= 0 && index < formArrayModel.size) && (newIndex >= 0 && newIndex < formArrayModel.size)) { - const movingGroups: AbstractControl[] = []; + if ((index >= 0 && index < formArrayModel.size) && (newIndex >= 0 && newIndex < formArrayModel.size)) { + const movingGroups: AbstractControl[] = []; - for (let i = moveUp ? index : newIndex; i <= (moveUp ? newIndex : index); i++) { - movingGroups.push(formArray.at(i)); - } + for (let i = moveUp ? index : newIndex; i <= (moveUp ? newIndex : index); i++) { + movingGroups.push(formArray.at(i)); + } - movingGroups.forEach((formControl, idx) => { - let position; + movingGroups.forEach((formControl, idx) => { + let position; - if (moveUp) { - position = idx === 0 ? newIndex : index + idx - 1; + if (moveUp) { + position = idx === 0 ? newIndex : index + idx - 1; - } else { - position = idx === movingGroups.length - 1 ? newIndex : newIndex + idx + 1; - } + } else { + position = idx === movingGroups.length - 1 ? newIndex : newIndex + idx + 1; + } - formArray.setControl(position, formControl); - }); + formArray.setControl(position, formControl); + }); - formArrayModel.moveGroup(index, step); + formArrayModel.moveGroup(index, step); - } else { - throw new Error(`form array group cannot be moved due to index or new index being out of bounds`); - } + } else { + throw new Error(`form array group cannot be moved due to index or new index being out of bounds`); } + } - removeFormArrayGroup(index: number, formArray: UntypedFormArray, formArrayModel: DynamicFormArrayModel): void { - formArray.removeAt(index); - formArrayModel.removeGroup(index); - } + removeFormArrayGroup(index: number, formArray: UntypedFormArray, formArrayModel: DynamicFormArrayModel): void { + formArray.removeAt(index); + formArrayModel.removeGroup(index); + } - clearFormArray(formArray: UntypedFormArray, formArrayModel: DynamicFormArrayModel): void { - formArray.clear(); - formArrayModel.clear(); - } + clearFormArray(formArray: UntypedFormArray, formArrayModel: DynamicFormArrayModel): void { + formArray.clear(); + formArrayModel.clear(); + } - findById(id: string, formModel: DynamicFormModel): DynamicFormControlModel | null { - const findByIdFn = (modelId: string, groupModel: DynamicFormModel): void => { - for (const controlModel of groupModel) { + findById(id: string, formModel: DynamicFormModel): DynamicFormControlModel | null { + const findByIdFn = (modelId: string, groupModel: DynamicFormModel): void => { + for (const controlModel of groupModel) { - if (controlModel.id === modelId) { - result = controlModel; - break; - } + if (controlModel.id === modelId) { + result = controlModel; + break; + } - if (controlModel instanceof DynamicFormGroupModel) { - findByIdFn(modelId, (controlModel as DynamicFormGroupModel).group); - } - } - }; - let result = null; + if (controlModel instanceof DynamicFormGroupModel) { + findByIdFn(modelId, (controlModel as DynamicFormGroupModel).group); + } + } + }; + let result = null; - findByIdFn(id, formModel); + findByIdFn(id, formModel); - return result; - } + return result; + } - findModelById(id: string, formModel: DynamicFormModel): T | null { - return this.findById(id, formModel) as T; - } + findModelById(id: string, formModel: DynamicFormModel): T | null { + return this.findById(id, formModel) as T; + } - findControlByModel(model: DynamicFormControlModel, group: UntypedFormGroup): T | null { - return group.root.get(this.getPath(model, true)) as T; - } + findControlByModel(model: DynamicFormControlModel, group: UntypedFormGroup): T | null { + return group.root.get(this.getPath(model, true)) as T; + } - detectChanges(formComponent?: DynamicFormComponent): void { - if (formComponent instanceof DynamicFormComponent) { - formComponent.markForCheck(); - formComponent.detectChanges(); + detectChanges(formComponent?: DynamicFormComponent): void { + if (formComponent instanceof DynamicFormComponent) { + formComponent.markForCheck(); + formComponent.detectChanges(); - } else { - for (const form of this.componentService.getForms()) { - form.markForCheck(); - form.detectChanges(); - } - } + } else { + for (const form of this.componentService.getForms()) { + form.markForCheck(); + form.detectChanges(); + } } + } - fromJSON(json: string | object[]): DynamicFormModel | never { - const formModelJSON = isString(json) ? JSON.parse(json, parseReviver) : json; - const formModel: DynamicFormModel = []; + fromJSON(json: string | object[]): DynamicFormModel | never { + const formModelJSON = isString(json) ? JSON.parse(json, parseReviver) : json; + const formModel: DynamicFormModel = []; - formModelJSON.forEach((model: any) => { - const layout = model.layout ?? null; + formModelJSON.forEach((model: any) => { + const layout = model.layout ?? null; - switch (model.type) { + switch (model.type) { - case DYNAMIC_FORM_CONTROL_TYPE_ARRAY: - const formArrayModel = model as DynamicFormArrayModel; + case DYNAMIC_FORM_CONTROL_TYPE_ARRAY: { + const formArrayModel = model as DynamicFormArrayModel; - if (Array.isArray(formArrayModel.groups)) { - formArrayModel.groups.forEach((groupModel: DynamicFormArrayGroupModel) => { - groupModel.group = this.fromJSON(groupModel.group) as DynamicFormModel; - }); - } + if (Array.isArray(formArrayModel.groups)) { + formArrayModel.groups.forEach((groupModel: DynamicFormArrayGroupModel) => { + groupModel.group = this.fromJSON(groupModel.group) as DynamicFormModel; + }); + } - formArrayModel.groupFactory = () => this.fromJSON(formArrayModel.groupPrototype); + formArrayModel.groupFactory = () => this.fromJSON(formArrayModel.groupPrototype); - formModel.push(new DynamicFormArrayModel(model, layout)); - break; + formModel.push(new DynamicFormArrayModel(model, layout)); + break; + } - case DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX: - formModel.push(new DynamicCheckboxModel(model, layout)); - break; - case DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP: - model.group = this.fromJSON(model.group) as DynamicCheckboxModel[]; - formModel.push(new DynamicCheckboxGroupModel(model, layout)); - break; + case DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX: + formModel.push(new DynamicCheckboxModel(model, layout)); + break; - case DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER: - formModel.push(new DynamicDatePickerModel(model, layout)); - break; + case DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP: + model.group = this.fromJSON(model.group) as DynamicCheckboxModel[]; + formModel.push(new DynamicCheckboxGroupModel(model, layout)); + break; - case DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD: - model.value = null; - formModel.push(new DynamicFileUploadModel(model, layout)); - break; + case DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER: + formModel.push(new DynamicDatePickerModel(model, layout)); + break; - case DYNAMIC_FORM_CONTROL_TYPE_GROUP: - model.group = this.fromJSON(model.group); - formModel.push(new DynamicFormGroupModel(model, layout)); - break; + case DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD: + model.value = null; + formModel.push(new DynamicFileUploadModel(model, layout)); + break; - case DYNAMIC_FORM_CONTROL_TYPE_INPUT: - formModel.push(new DynamicInputModel(model, layout)); - break; + case DYNAMIC_FORM_CONTROL_TYPE_GROUP: + model.group = this.fromJSON(model.group); + formModel.push(new DynamicFormGroupModel(model, layout)); + break; - case DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP: - formModel.push(new DynamicRadioGroupModel(model, layout)); - break; + case DYNAMIC_FORM_CONTROL_TYPE_INPUT: + formModel.push(new DynamicInputModel(model, layout)); + break; - case DYNAMIC_FORM_CONTROL_TYPE_SELECT: - formModel.push(new DynamicSelectModel(model, layout)); - break; + case DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP: + formModel.push(new DynamicRadioGroupModel(model, layout)); + break; + case DYNAMIC_FORM_CONTROL_TYPE_SELECT: + formModel.push(new DynamicSelectModel(model, layout)); + break; - case DYNAMIC_FORM_CONTROL_TYPE_SWITCH: - formModel.push(new DynamicSwitchModel(model, layout)); - break; - case DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA: - formModel.push(new DynamicTextAreaModel(model, layout)); - break; + case DYNAMIC_FORM_CONTROL_TYPE_SWITCH: + formModel.push(new DynamicSwitchModel(model, layout)); + break; - case DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER: - formModel.push(new DynamicTimePickerModel(model, layout)); - break; + case DYNAMIC_FORM_CONTROL_TYPE_TEXTAREA: + formModel.push(new DynamicTextAreaModel(model, layout)); + break; - default: - throw new Error(`unknown form control model type defined on JSON object with id "${model.id}"`); - } - }); + case DYNAMIC_FORM_CONTROL_TYPE_TIMEPICKER: + formModel.push(new DynamicTimePickerModel(model, layout)); + break; - return formModel; - } + default: + throw new Error(`unknown form control model type defined on JSON object with id "${model.id}"`); + } + }); + + return formModel; + } } diff --git a/src/external-libraries/ng-dynamic-forms/core/utils/autofill.utils.spec.ts b/src/external-libraries/ng-dynamic-forms/core/utils/autofill.utils.spec.ts index 28656beb165..603998a605c 100644 --- a/src/external-libraries/ng-dynamic-forms/core/utils/autofill.utils.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/utils/autofill.utils.spec.ts @@ -1,80 +1,87 @@ -import { isAddressToken, isContactToken, isContactField, isField, isSectionToken, validate } from "./autofill.utils"; +import { + isAddressToken, + isContactField, + isContactToken, + isField, + isSectionToken, + validate, +} from './autofill.utils'; -describe("Autofill utils test suite", () => { +describe('Autofill utils test suite', () => { - it("should validate autofill expressions correctly", () => { + it('should validate autofill expressions correctly', () => { - let value1 = "section-test shipping mobile tel", - value2 = "billing section-test mobile tel", - value3 = "section-test shipping tel", - value4 = "section-test work given-name", - value5 = "billing cc-name", - value6 = "home email", - value7 = "section-test shipping work", - value8 = "section-test work shipping tel", - value9 = "billing country", - value10 = "billing country name", - value11 = "billing shipping name", - value12 = "section-test1 section-test2 shipping name", - value13 = "section-test1 blabla name", - value14 = "section-test1 blabla mobile tel"; + let value1 = 'section-test shipping mobile tel', + value2 = 'billing section-test mobile tel', + value3 = 'section-test shipping tel', + value4 = 'section-test work given-name', + value5 = 'billing cc-name', + value6 = 'home email', + value7 = 'section-test shipping work', + value8 = 'section-test work shipping tel', + value9 = 'billing country', + value10 = 'billing country name', + value11 = 'billing shipping name', + value12 = 'section-test1 section-test2 shipping name', + value13 = 'section-test1 blabla name', + value14 = 'section-test1 blabla mobile tel'; - expect(validate(value1)).toBe(true); - expect(validate(value2)).toBe(false); - expect(validate(value3)).toBe(false); - expect(validate(value4)).toBe(false); - expect(validate(value5)).toBe(true); - expect(validate(value6)).toBe(true); - expect(validate(value7)).toBe(false); - expect(validate(value8)).toBe(false); - expect(validate(value9)).toBe(true); - expect(validate(value10)).toBe(false); - expect(validate(value11)).toBe(false); - expect(validate(value12)).toBe(false); - expect(validate(value13)).toBe(false); - expect(validate(value14)).toBe(false); - }); + expect(validate(value1)).toBe(true); + expect(validate(value2)).toBe(false); + expect(validate(value3)).toBe(false); + expect(validate(value4)).toBe(false); + expect(validate(value5)).toBe(true); + expect(validate(value6)).toBe(true); + expect(validate(value7)).toBe(false); + expect(validate(value8)).toBe(false); + expect(validate(value9)).toBe(true); + expect(validate(value10)).toBe(false); + expect(validate(value11)).toBe(false); + expect(validate(value12)).toBe(false); + expect(validate(value13)).toBe(false); + expect(validate(value14)).toBe(false); + }); - it("should validate address tokens correctly", () => { + it('should validate address tokens correctly', () => { - expect(isAddressToken("shipping")).toBe(true); - expect(isAddressToken("billing")).toBe(true); - expect(isAddressToken("home")).toBe(false); - }); + expect(isAddressToken('shipping')).toBe(true); + expect(isAddressToken('billing')).toBe(true); + expect(isAddressToken('home')).toBe(false); + }); - it("should validate contact tokens correctly", () => { + it('should validate contact tokens correctly', () => { - expect(isContactToken("home")).toBe(true); - expect(isContactToken("work")).toBe(true); - expect(isContactToken("mobile")).toBe(true); - expect(isContactToken("fax")).toBe(true); - expect(isContactToken("pager")).toBe(true); - expect(isContactToken("billing")).toBe(false); - }); + expect(isContactToken('home')).toBe(true); + expect(isContactToken('work')).toBe(true); + expect(isContactToken('mobile')).toBe(true); + expect(isContactToken('fax')).toBe(true); + expect(isContactToken('pager')).toBe(true); + expect(isContactToken('billing')).toBe(false); + }); - it("should validate section tokens correctly", () => { + it('should validate section tokens correctly', () => { - expect(isSectionToken("section-test")).toBe(true); - expect(isSectionToken("section")).toBe(false); - }); + expect(isSectionToken('section-test')).toBe(true); + expect(isSectionToken('section')).toBe(false); + }); - it("should validate contact fields correctly", () => { + it('should validate contact fields correctly', () => { - expect(isContactField("tel")).toBe(true); - expect(isContactField("email")).toBe(true); - expect(isContactField("impp")).toBe(true); - expect(isContactField("name")).toBe(false); - expect(isContactField("country")).toBe(false); - }); + expect(isContactField('tel')).toBe(true); + expect(isContactField('email')).toBe(true); + expect(isContactField('impp')).toBe(true); + expect(isContactField('name')).toBe(false); + expect(isContactField('country')).toBe(false); + }); - it("should validate fields correctly", () => { + it('should validate fields correctly', () => { - expect(isField("street-address")).toBe(true); - expect(isField("nickname")).toBe(true); - expect(isField("organization")).toBe(true); - expect(isField("postal-code")).toBe(true); - expect(isField("country")).toBe(true); - expect(isField("tel")).toBe(false); - expect(isField("email")).toBe(false); - }); + expect(isField('street-address')).toBe(true); + expect(isField('nickname')).toBe(true); + expect(isField('organization')).toBe(true); + expect(isField('postal-code')).toBe(true); + expect(isField('country')).toBe(true); + expect(isField('tel')).toBe(false); + expect(isField('email')).toBe(false); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/utils/autofill.utils.ts b/src/external-libraries/ng-dynamic-forms/core/utils/autofill.utils.ts index 173becc0797..0598c6b4823 100644 --- a/src/external-libraries/ng-dynamic-forms/core/utils/autofill.utils.ts +++ b/src/external-libraries/ng-dynamic-forms/core/utils/autofill.utils.ts @@ -1,136 +1,136 @@ -export const AUTOCOMPLETE_OFF = "off"; -export const AUTOCOMPLETE_ON = "on"; +export const AUTOCOMPLETE_OFF = 'off'; +export const AUTOCOMPLETE_ON = 'on'; -export const AUTOFILL_TOKEN_BILLING = "billing"; -export const AUTOFILL_TOKEN_SHIPPING = "shipping"; +export const AUTOFILL_TOKEN_BILLING = 'billing'; +export const AUTOFILL_TOKEN_SHIPPING = 'shipping'; export const AUTOFILL_TOKENS_ADDRESS = [AUTOFILL_TOKEN_BILLING, AUTOFILL_TOKEN_SHIPPING]; -export const AUTOFILL_TOKEN_HOME = "home"; -export const AUTOFILL_TOKEN_WORK = "work"; -export const AUTOFILL_TOKEN_MOBILE = "mobile"; -export const AUTOFILL_TOKEN_FAX = "fax"; -export const AUTOFILL_TOKEN_PAGER = "pager"; +export const AUTOFILL_TOKEN_HOME = 'home'; +export const AUTOFILL_TOKEN_WORK = 'work'; +export const AUTOFILL_TOKEN_MOBILE = 'mobile'; +export const AUTOFILL_TOKEN_FAX = 'fax'; +export const AUTOFILL_TOKEN_PAGER = 'pager'; export const AUTOFILL_TOKENS_CONTACT = [ - AUTOFILL_TOKEN_FAX, AUTOFILL_TOKEN_HOME, AUTOFILL_TOKEN_MOBILE, AUTOFILL_TOKEN_PAGER, AUTOFILL_TOKEN_WORK + AUTOFILL_TOKEN_FAX, AUTOFILL_TOKEN_HOME, AUTOFILL_TOKEN_MOBILE, AUTOFILL_TOKEN_PAGER, AUTOFILL_TOKEN_WORK, ]; -export const AUTOFILL_FIELD_STREET_ADDRESS = "street-address"; -export const AUTOFILL_FIELD_ADDRESS_LINE_1 = "address-line1"; -export const AUTOFILL_FIELD_ADDRESS_LINE_2 = "address-line2"; -export const AUTOFILL_FIELD_ADDRESS_LINE_3 = "address-line3"; -export const AUTOFILL_FIELD_ADDRESS_LEVEL_4 = "address-level4"; -export const AUTOFILL_FIELD_ADDRESS_LEVEL_3 = "address-level3"; -export const AUTOFILL_FIELD_ADDRESS_LEVEL_2 = "address-level2"; -export const AUTOFILL_FIELD_ADDRESS_LEVEL_1 = "address-level1"; - -export const AUTOFILL_FIELD_NAME = "name"; -export const AUTOFILL_FIELD_HONORIFIC_PREFIX = "honorific-prefix"; -export const AUTOFILL_FIELD_GIVEN_NAME = "given-name"; -export const AUTOFILL_FIELD_ADDITIONAL_NAME = "additional-name"; -export const AUTOFILL_FIELD_FAMILY_NAME = "family-name"; -export const AUTOFILL_FIELD_HONORIFIC_SUFFIX = "honorific-suffix"; -export const AUTOFILL_FIELD_NICKNAME = "nickname"; -export const AUTOFILL_FIELD_USERNAME = "username"; - -export const AUTOFILL_FIELD_NEW_PASSWORD = "new-password"; -export const AUTOFILL_FIELD_CURRENT_PASSWORD = "current-password"; - -export const AUTOFILL_FIELD_ORGANIZATION_TITLE = "organization-title"; -export const AUTOFILL_FIELD_ORGANIZATION = "organization"; - -export const AUTOFILL_FIELD_COUNTRY = "country"; -export const AUTOFILL_FIELD_COUNTRY_NAME = "country-name"; -export const AUTOFILL_FIELD_POSTAL_CODE = "postal-code"; - -export const AUTOFILL_FIELD_CC_NAME = "cc-name"; -export const AUTOFILL_FIELD_CC_GIVEN_NAME = "cc-given-name"; -export const AUTOFILL_FIELD_CC_ADDITIONAL_NAME = "cc-additional-name"; -export const AUTOFILL_FIELD_CC_FAMILY_NAME = "cc-family-name"; -export const AUTOFILL_FIELD_CC_NUMBER = "cc-number"; -export const AUTOFILL_FIELD_CC_EXP = "cc-exp"; -export const AUTOFILL_FIELD_CC_EXP_MONTH = "cc-exp-month"; -export const AUTOFILL_FIELD_CC_EXP_YEAR = "cc-exp-year"; -export const AUTOFILL_FIELD_CC_CSC = "cc-csc"; -export const AUTOFILL_FIELD_CC_TYPE = "cc-type"; - -export const AUTOFILL_FIELD_TRANSACTION_CURRENCY = "transaction-currency"; -export const AUTOFILL_FIELD_TRANSACTION_AMOUNT = "transaction-amount"; - -export const AUTOFILL_FIELD_LANGUAGE = "language"; - -export const AUTOFILL_FIELD_BDAY = "bday"; -export const AUTOFILL_FIELD_BDAY_DAY = "bday-day"; -export const AUTOFILL_FIELD_BDAY_MONTH = "bday-month"; -export const AUTOFILL_FIELD_BDAY_YEAR = "bday-year"; - -export const AUTOFILL_FIELD_SEX = "sex"; - -export const AUTOFILL_FIELD_URL = "url"; - -export const AUTOFILL_FIELD_PHOTO = "photo"; +export const AUTOFILL_FIELD_STREET_ADDRESS = 'street-address'; +export const AUTOFILL_FIELD_ADDRESS_LINE_1 = 'address-line1'; +export const AUTOFILL_FIELD_ADDRESS_LINE_2 = 'address-line2'; +export const AUTOFILL_FIELD_ADDRESS_LINE_3 = 'address-line3'; +export const AUTOFILL_FIELD_ADDRESS_LEVEL_4 = 'address-level4'; +export const AUTOFILL_FIELD_ADDRESS_LEVEL_3 = 'address-level3'; +export const AUTOFILL_FIELD_ADDRESS_LEVEL_2 = 'address-level2'; +export const AUTOFILL_FIELD_ADDRESS_LEVEL_1 = 'address-level1'; + +export const AUTOFILL_FIELD_NAME = 'name'; +export const AUTOFILL_FIELD_HONORIFIC_PREFIX = 'honorific-prefix'; +export const AUTOFILL_FIELD_GIVEN_NAME = 'given-name'; +export const AUTOFILL_FIELD_ADDITIONAL_NAME = 'additional-name'; +export const AUTOFILL_FIELD_FAMILY_NAME = 'family-name'; +export const AUTOFILL_FIELD_HONORIFIC_SUFFIX = 'honorific-suffix'; +export const AUTOFILL_FIELD_NICKNAME = 'nickname'; +export const AUTOFILL_FIELD_USERNAME = 'username'; + +export const AUTOFILL_FIELD_NEW_PASSWORD = 'new-password'; +export const AUTOFILL_FIELD_CURRENT_PASSWORD = 'current-password'; + +export const AUTOFILL_FIELD_ORGANIZATION_TITLE = 'organization-title'; +export const AUTOFILL_FIELD_ORGANIZATION = 'organization'; + +export const AUTOFILL_FIELD_COUNTRY = 'country'; +export const AUTOFILL_FIELD_COUNTRY_NAME = 'country-name'; +export const AUTOFILL_FIELD_POSTAL_CODE = 'postal-code'; + +export const AUTOFILL_FIELD_CC_NAME = 'cc-name'; +export const AUTOFILL_FIELD_CC_GIVEN_NAME = 'cc-given-name'; +export const AUTOFILL_FIELD_CC_ADDITIONAL_NAME = 'cc-additional-name'; +export const AUTOFILL_FIELD_CC_FAMILY_NAME = 'cc-family-name'; +export const AUTOFILL_FIELD_CC_NUMBER = 'cc-number'; +export const AUTOFILL_FIELD_CC_EXP = 'cc-exp'; +export const AUTOFILL_FIELD_CC_EXP_MONTH = 'cc-exp-month'; +export const AUTOFILL_FIELD_CC_EXP_YEAR = 'cc-exp-year'; +export const AUTOFILL_FIELD_CC_CSC = 'cc-csc'; +export const AUTOFILL_FIELD_CC_TYPE = 'cc-type'; + +export const AUTOFILL_FIELD_TRANSACTION_CURRENCY = 'transaction-currency'; +export const AUTOFILL_FIELD_TRANSACTION_AMOUNT = 'transaction-amount'; + +export const AUTOFILL_FIELD_LANGUAGE = 'language'; + +export const AUTOFILL_FIELD_BDAY = 'bday'; +export const AUTOFILL_FIELD_BDAY_DAY = 'bday-day'; +export const AUTOFILL_FIELD_BDAY_MONTH = 'bday-month'; +export const AUTOFILL_FIELD_BDAY_YEAR = 'bday-year'; + +export const AUTOFILL_FIELD_SEX = 'sex'; + +export const AUTOFILL_FIELD_URL = 'url'; + +export const AUTOFILL_FIELD_PHOTO = 'photo'; export const AUTOFILL_FIELDS = [ - AUTOFILL_FIELD_STREET_ADDRESS, AUTOFILL_FIELD_ADDRESS_LINE_1, AUTOFILL_FIELD_ADDRESS_LINE_2, - AUTOFILL_FIELD_ADDRESS_LINE_3, AUTOFILL_FIELD_ADDRESS_LEVEL_4, AUTOFILL_FIELD_ADDRESS_LEVEL_3, - AUTOFILL_FIELD_ADDRESS_LEVEL_2, AUTOFILL_FIELD_ADDRESS_LEVEL_1, AUTOFILL_FIELD_NAME, - AUTOFILL_FIELD_HONORIFIC_PREFIX, AUTOFILL_FIELD_GIVEN_NAME, AUTOFILL_FIELD_ADDITIONAL_NAME, - AUTOFILL_FIELD_FAMILY_NAME, AUTOFILL_FIELD_HONORIFIC_SUFFIX, AUTOFILL_FIELD_NICKNAME, AUTOFILL_FIELD_USERNAME, - AUTOFILL_FIELD_NEW_PASSWORD, AUTOFILL_FIELD_CURRENT_PASSWORD, AUTOFILL_FIELD_ORGANIZATION_TITLE, - AUTOFILL_FIELD_ORGANIZATION, AUTOFILL_FIELD_COUNTRY, AUTOFILL_FIELD_COUNTRY_NAME, AUTOFILL_FIELD_POSTAL_CODE, - AUTOFILL_FIELD_CC_NAME, AUTOFILL_FIELD_CC_GIVEN_NAME, AUTOFILL_FIELD_CC_ADDITIONAL_NAME, - AUTOFILL_FIELD_CC_FAMILY_NAME, AUTOFILL_FIELD_CC_NUMBER, AUTOFILL_FIELD_CC_EXP, AUTOFILL_FIELD_CC_EXP_MONTH, - AUTOFILL_FIELD_CC_EXP_YEAR, AUTOFILL_FIELD_CC_CSC, AUTOFILL_FIELD_CC_TYPE, AUTOFILL_FIELD_TRANSACTION_CURRENCY, - AUTOFILL_FIELD_TRANSACTION_AMOUNT, AUTOFILL_FIELD_LANGUAGE, AUTOFILL_FIELD_BDAY, AUTOFILL_FIELD_BDAY_DAY, - AUTOFILL_FIELD_BDAY_MONTH, AUTOFILL_FIELD_BDAY_YEAR, AUTOFILL_FIELD_SEX, AUTOFILL_FIELD_URL, AUTOFILL_FIELD_PHOTO + AUTOFILL_FIELD_STREET_ADDRESS, AUTOFILL_FIELD_ADDRESS_LINE_1, AUTOFILL_FIELD_ADDRESS_LINE_2, + AUTOFILL_FIELD_ADDRESS_LINE_3, AUTOFILL_FIELD_ADDRESS_LEVEL_4, AUTOFILL_FIELD_ADDRESS_LEVEL_3, + AUTOFILL_FIELD_ADDRESS_LEVEL_2, AUTOFILL_FIELD_ADDRESS_LEVEL_1, AUTOFILL_FIELD_NAME, + AUTOFILL_FIELD_HONORIFIC_PREFIX, AUTOFILL_FIELD_GIVEN_NAME, AUTOFILL_FIELD_ADDITIONAL_NAME, + AUTOFILL_FIELD_FAMILY_NAME, AUTOFILL_FIELD_HONORIFIC_SUFFIX, AUTOFILL_FIELD_NICKNAME, AUTOFILL_FIELD_USERNAME, + AUTOFILL_FIELD_NEW_PASSWORD, AUTOFILL_FIELD_CURRENT_PASSWORD, AUTOFILL_FIELD_ORGANIZATION_TITLE, + AUTOFILL_FIELD_ORGANIZATION, AUTOFILL_FIELD_COUNTRY, AUTOFILL_FIELD_COUNTRY_NAME, AUTOFILL_FIELD_POSTAL_CODE, + AUTOFILL_FIELD_CC_NAME, AUTOFILL_FIELD_CC_GIVEN_NAME, AUTOFILL_FIELD_CC_ADDITIONAL_NAME, + AUTOFILL_FIELD_CC_FAMILY_NAME, AUTOFILL_FIELD_CC_NUMBER, AUTOFILL_FIELD_CC_EXP, AUTOFILL_FIELD_CC_EXP_MONTH, + AUTOFILL_FIELD_CC_EXP_YEAR, AUTOFILL_FIELD_CC_CSC, AUTOFILL_FIELD_CC_TYPE, AUTOFILL_FIELD_TRANSACTION_CURRENCY, + AUTOFILL_FIELD_TRANSACTION_AMOUNT, AUTOFILL_FIELD_LANGUAGE, AUTOFILL_FIELD_BDAY, AUTOFILL_FIELD_BDAY_DAY, + AUTOFILL_FIELD_BDAY_MONTH, AUTOFILL_FIELD_BDAY_YEAR, AUTOFILL_FIELD_SEX, AUTOFILL_FIELD_URL, AUTOFILL_FIELD_PHOTO, ]; -export const AUTOFILL_FIELD_TEL = "tel"; -export const AUTOFILL_FIELD_TEL_COUNTRY_CODE = "tel-country-code"; -export const AUTOFILL_FIELD_TEL_NATIONAL = "tel-national"; -export const AUTOFILL_FIELD_TEL_AREA_CODE = "tel-area-code"; -export const AUTOFILL_FIELD_TEL_LOCAL = "tel-local"; -export const AUTOFILL_FIELD_TEL_LOCAL_PREFIX = "tel-local-prefix"; -export const AUTOFILL_FIELD_TEL_LOCAL_SUFFIX = "tel-local-suffix"; -export const AUTOFILL_FIELD_TEL_LOCAL_EXTENSION = "tel-extension"; -export const AUTOFILL_FIELD_EMAIL = "email"; -export const AUTOFILL_FIELD_IMPP = "impp"; +export const AUTOFILL_FIELD_TEL = 'tel'; +export const AUTOFILL_FIELD_TEL_COUNTRY_CODE = 'tel-country-code'; +export const AUTOFILL_FIELD_TEL_NATIONAL = 'tel-national'; +export const AUTOFILL_FIELD_TEL_AREA_CODE = 'tel-area-code'; +export const AUTOFILL_FIELD_TEL_LOCAL = 'tel-local'; +export const AUTOFILL_FIELD_TEL_LOCAL_PREFIX = 'tel-local-prefix'; +export const AUTOFILL_FIELD_TEL_LOCAL_SUFFIX = 'tel-local-suffix'; +export const AUTOFILL_FIELD_TEL_LOCAL_EXTENSION = 'tel-extension'; +export const AUTOFILL_FIELD_EMAIL = 'email'; +export const AUTOFILL_FIELD_IMPP = 'impp'; export const AUTOFILL_FIELDS_CONTACT = [ - AUTOFILL_FIELD_TEL, AUTOFILL_FIELD_TEL_COUNTRY_CODE, AUTOFILL_FIELD_TEL_NATIONAL, AUTOFILL_FIELD_TEL_AREA_CODE, - AUTOFILL_FIELD_TEL_LOCAL, AUTOFILL_FIELD_TEL_LOCAL_PREFIX, AUTOFILL_FIELD_TEL_LOCAL_SUFFIX, - AUTOFILL_FIELD_TEL_LOCAL_EXTENSION, AUTOFILL_FIELD_EMAIL, AUTOFILL_FIELD_IMPP + AUTOFILL_FIELD_TEL, AUTOFILL_FIELD_TEL_COUNTRY_CODE, AUTOFILL_FIELD_TEL_NATIONAL, AUTOFILL_FIELD_TEL_AREA_CODE, + AUTOFILL_FIELD_TEL_LOCAL, AUTOFILL_FIELD_TEL_LOCAL_PREFIX, AUTOFILL_FIELD_TEL_LOCAL_SUFFIX, + AUTOFILL_FIELD_TEL_LOCAL_EXTENSION, AUTOFILL_FIELD_EMAIL, AUTOFILL_FIELD_IMPP, ]; export function isAddressToken(token: string): boolean { - return AUTOFILL_TOKENS_ADDRESS.indexOf(token) > -1; + return AUTOFILL_TOKENS_ADDRESS.indexOf(token) > -1; } export function isContactField(token: string): boolean { - return AUTOFILL_FIELDS_CONTACT.indexOf(token) > -1; + return AUTOFILL_FIELDS_CONTACT.indexOf(token) > -1; } export function isContactToken(token: string): boolean { - return AUTOFILL_TOKENS_CONTACT.indexOf(token) > -1; + return AUTOFILL_TOKENS_CONTACT.indexOf(token) > -1; } export function isField(token: string): boolean { - return AUTOFILL_FIELDS.indexOf(token) > -1; + return AUTOFILL_FIELDS.indexOf(token) > -1; } export function isSectionToken(token: string): boolean { - return token.startsWith("section-"); + return token.startsWith('section-'); } export function validate(tokens: string): boolean { - const toExpression = (total: string, currentValue: string) => `${total}|${currentValue}`; - const tokensAddress = AUTOFILL_TOKENS_ADDRESS.reduce(toExpression); - const tokensContact = AUTOFILL_TOKENS_CONTACT.reduce(toExpression); - const fields = AUTOFILL_FIELDS.reduce(toExpression); - const fieldsContact = AUTOFILL_FIELDS_CONTACT.reduce(toExpression); - const regex = new RegExp(`^(section-\\w+\\s{1})?((${tokensAddress}){1}\\s)?((${fields}){1}|((${tokensContact}){1}\\s{1}(${fieldsContact})))$`); + const toExpression = (total: string, currentValue: string) => `${total}|${currentValue}`; + const tokensAddress = AUTOFILL_TOKENS_ADDRESS.reduce(toExpression); + const tokensContact = AUTOFILL_TOKENS_CONTACT.reduce(toExpression); + const fields = AUTOFILL_FIELDS.reduce(toExpression); + const fieldsContact = AUTOFILL_FIELDS_CONTACT.reduce(toExpression); + const regex = new RegExp(`^(section-\\w+\\s{1})?((${tokensAddress}){1}\\s)?((${fields}){1}|((${tokensContact}){1}\\s{1}(${fieldsContact})))$`); - return regex.test(tokens); + return regex.test(tokens); } diff --git a/src/external-libraries/ng-dynamic-forms/core/utils/core.utils.spec.ts b/src/external-libraries/ng-dynamic-forms/core/utils/core.utils.spec.ts index f746a84e7f9..e07f8cb5ee6 100644 --- a/src/external-libraries/ng-dynamic-forms/core/utils/core.utils.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/utils/core.utils.spec.ts @@ -1,73 +1,79 @@ -import { isBoolean, isFunction, isNumber, isObject, isString } from "./core.utils"; +import { + isBoolean, + isFunction, + isNumber, + isObject, + isString, +} from './core.utils'; -describe("core utils test suite", () => { +describe('core utils test suite', () => { - let testValue1: undefined = undefined, - testValue2: null = null, - testValue3 = 42, - testValue4 = true, - testValue5 = false, - testValue6 = "test", - testValue7 = {}, - testValue8 = () => {}; + let testValue1 = undefined, + testValue2 = null, + testValue3 = 42, + testValue4 = true, + testValue5 = false, + testValue6 = 'test', + testValue7 = {}, + testValue8 = () => {}; - it("should check if a given value is of type boolean", () => { + it('should check if a given value is of type boolean', () => { - expect(isBoolean(testValue1)).toBe(false); - expect(isBoolean(testValue2)).toBe(false); - expect(isBoolean(testValue3)).toBe(false); - expect(isBoolean(testValue4)).toBe(true); - expect(isBoolean(testValue5)).toBe(true); - expect(isBoolean(testValue6)).toBe(false); - expect(isBoolean(testValue7)).toBe(false); - expect(isBoolean(testValue8)).toBe(false); - }); + expect(isBoolean(testValue1)).toBe(false); + expect(isBoolean(testValue2)).toBe(false); + expect(isBoolean(testValue3)).toBe(false); + expect(isBoolean(testValue4)).toBe(true); + expect(isBoolean(testValue5)).toBe(true); + expect(isBoolean(testValue6)).toBe(false); + expect(isBoolean(testValue7)).toBe(false); + expect(isBoolean(testValue8)).toBe(false); + }); - it("should check if a given value is of type function", () => { + it('should check if a given value is of type function', () => { - expect(isFunction(testValue1)).toBe(false); - expect(isFunction(testValue2)).toBe(false); - expect(isFunction(testValue3)).toBe(false); - expect(isFunction(testValue4)).toBe(false); - expect(isFunction(testValue5)).toBe(false); - expect(isFunction(testValue6)).toBe(false); - expect(isFunction(testValue7)).toBe(false); - expect(isFunction(testValue8)).toBe(true); - }); + expect(isFunction(testValue1)).toBe(false); + expect(isFunction(testValue2)).toBe(false); + expect(isFunction(testValue3)).toBe(false); + expect(isFunction(testValue4)).toBe(false); + expect(isFunction(testValue5)).toBe(false); + expect(isFunction(testValue6)).toBe(false); + expect(isFunction(testValue7)).toBe(false); + expect(isFunction(testValue8)).toBe(true); + }); - it("should check if a given value is of type number", () => { + it('should check if a given value is of type number', () => { - expect(isNumber(testValue1)).toBe(false); - expect(isNumber(testValue2)).toBe(false); - expect(isNumber(testValue3)).toBe(true); - expect(isNumber(testValue4)).toBe(false); - expect(isNumber(testValue5)).toBe(false); - expect(isNumber(testValue6)).toBe(false); - expect(isNumber(testValue7)).toBe(false); - expect(isNumber(testValue8)).toBe(false); - }); + expect(isNumber(testValue1)).toBe(false); + expect(isNumber(testValue2)).toBe(false); + expect(isNumber(testValue3)).toBe(true); + expect(isNumber(testValue4)).toBe(false); + expect(isNumber(testValue5)).toBe(false); + expect(isNumber(testValue6)).toBe(false); + expect(isNumber(testValue7)).toBe(false); + expect(isNumber(testValue8)).toBe(false); + }); - it("should check if a given value is of type object", () => { + it('should check if a given value is of type object', () => { - expect(isObject(testValue1)).toBe(false); - expect(isObject(testValue2)).toBe(false); - expect(isObject(testValue3)).toBe(false); - expect(isObject(testValue4)).toBe(false); - expect(isObject(testValue5)).toBe(false); - expect(isObject(testValue6)).toBe(false); - expect(isObject(testValue7)).toBe(true); - expect(isObject(testValue8)).toBe(false); - }); + expect(isObject(testValue1)).toBe(false); + expect(isObject(testValue2)).toBe(false); + expect(isObject(testValue3)).toBe(false); + expect(isObject(testValue4)).toBe(false); + expect(isObject(testValue5)).toBe(false); + expect(isObject(testValue6)).toBe(false); + expect(isObject(testValue7)).toBe(true); + expect(isObject(testValue8)).toBe(false); + }); - it("should check if a given value is of type string", () => { + it('should check if a given value is of type string', () => { - expect(isString(testValue1)).toBe(false); - expect(isString(testValue2)).toBe(false); - expect(isString(testValue3)).toBe(false); - expect(isString(testValue4)).toBe(false); - expect(isString(testValue5)).toBe(false); - expect(isString(testValue6)).toBe(true); - expect(isString(testValue7)).toBe(false); - expect(isString(testValue8)).toBe(false); - }); -}); \ No newline at end of file + expect(isString(testValue1)).toBe(false); + expect(isString(testValue2)).toBe(false); + expect(isString(testValue3)).toBe(false); + expect(isString(testValue4)).toBe(false); + expect(isString(testValue5)).toBe(false); + expect(isString(testValue6)).toBe(true); + expect(isString(testValue7)).toBe(false); + expect(isString(testValue8)).toBe(false); + }); +}); diff --git a/src/external-libraries/ng-dynamic-forms/core/utils/core.utils.ts b/src/external-libraries/ng-dynamic-forms/core/utils/core.utils.ts index 375364dbd34..926c2726116 100644 --- a/src/external-libraries/ng-dynamic-forms/core/utils/core.utils.ts +++ b/src/external-libraries/ng-dynamic-forms/core/utils/core.utils.ts @@ -1,20 +1,20 @@ +// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type export function isBoolean(value: any): value is boolean { - return typeof value === "boolean"; + return typeof value === 'boolean'; } - -// tslint:disable-next-line:ban-types +// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type export function isFunction(value: any): value is Function { - return typeof value === "function"; + return typeof value === 'function'; } - +// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type export function isNumber(value: any): value is number { - return typeof value === "number"; + return typeof value === 'number'; } - +// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type export function isObject(value: any): value is object { - return typeof value === "object" && value !== null; + return typeof value === 'object' && value !== null; } - +// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type export function isString(value: any): value is string { - return typeof value === "string"; + return typeof value === 'string'; } diff --git a/src/external-libraries/ng-dynamic-forms/core/utils/json.utils.spec.ts b/src/external-libraries/ng-dynamic-forms/core/utils/json.utils.spec.ts index 7f2399c7faa..ad9f39c6921 100644 --- a/src/external-libraries/ng-dynamic-forms/core/utils/json.utils.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/utils/json.utils.spec.ts @@ -1,43 +1,47 @@ -import { maskFromString, maskToString, parseReviver } from "./json.utils"; +import { + maskFromString, + maskToString, + parseReviver, +} from './json.utils'; -describe("JSON utils test suite", () => { +describe('JSON utils test suite', () => { - it("should convert a text mask to string correctly", () => { + it('should convert a text mask to string correctly', () => { - let testValue1 = "test", - testValue2 = /[1-9]/, - testValue3 = [testValue1, testValue2], - testResult3 = maskToString(testValue3) as string[]; + let testValue1 = 'test', + testValue2 = /[1-9]/, + testValue3 = [testValue1, testValue2], + testResult3 = maskToString(testValue3) as string[]; - expect(maskToString(testValue1)).toEqual(testValue1); - expect(maskToString(testValue2)).toEqual(testValue2.toString()); + expect(maskToString(testValue1)).toEqual(testValue1); + expect(maskToString(testValue2)).toEqual(testValue2.toString()); - expect(testResult3[0]).toEqual(testValue1); - expect(testResult3[1]).toEqual(testValue2.toString()); + expect(testResult3[0]).toEqual(testValue1); + expect(testResult3[1]).toEqual(testValue2.toString()); - expect(maskToString({} as string)).toBeNull(); - }); + expect(maskToString({} as string)).toBeNull(); + }); - it("should recreate a text mask from string correctly", () => { + it('should recreate a text mask from string correctly', () => { - let testValue1 = "test", - testValue2 = "/[1-9]/", - testValue3 = [testValue1, testValue2], - testResult3 = maskFromString(testValue3) as (string | RegExp)[]; + let testValue1 = 'test', + testValue2 = '/[1-9]/', + testValue3 = [testValue1, testValue2], + testResult3 = maskFromString(testValue3) as (string | RegExp)[]; - expect(maskFromString(testValue1)).toEqual(testValue1); - expect(maskFromString(testValue2)).toEqual(new RegExp("[1-9]")); + expect(maskFromString(testValue1)).toEqual(testValue1); + expect(maskFromString(testValue2)).toEqual(new RegExp('[1-9]')); - expect(testResult3[0]).toEqual(testValue1); - expect(testResult3[1]).toEqual(new RegExp("[1-9]")); + expect(testResult3[0]).toEqual(testValue1); + expect(testResult3[1]).toEqual(new RegExp('[1-9]')); - expect(maskFromString({} as string)).toBeNull(); - }); + expect(maskFromString({} as string)).toBeNull(); + }); - it("should recreate a date from string correctly", () => { + it('should recreate a date from string correctly', () => { - let testValue1 = "2011-10-05T14:48:00.000Z"; + let testValue1 = '2011-10-05T14:48:00.000Z'; - expect(parseReviver("test", testValue1)).toEqual(new Date(testValue1)); - }); + expect(parseReviver('test', testValue1)).toEqual(new Date(testValue1)); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/utils/json.utils.ts b/src/external-libraries/ng-dynamic-forms/core/utils/json.utils.ts index 79b50b1241e..a7f94242c4d 100644 --- a/src/external-libraries/ng-dynamic-forms/core/utils/json.utils.ts +++ b/src/external-libraries/ng-dynamic-forms/core/utils/json.utils.ts @@ -1,32 +1,32 @@ -import { isString } from "./core.utils"; +import { isString } from './core.utils'; export function maskToString(mask: string | RegExp | (string | RegExp)[]): string | string[] | null { - if (isString(mask)) { - return mask as string; + if (isString(mask)) { + return mask as string; - } else if (mask instanceof RegExp) { - return mask.toString(); + } else if (mask instanceof RegExp) { + return mask.toString(); - } else if (Array.isArray(mask)) { - return mask.map(value => maskToString(value)) as string[]; - } + } else if (Array.isArray(mask)) { + return mask.map(value => maskToString(value)) as string[]; + } - return null; + return null; } export function maskFromString(mask: string | string[]): string | RegExp | (string | RegExp)[] | null { - if (isString(mask)) { - const isRegExp = (mask as string).startsWith("/") && (mask as string).endsWith("/"); - return isRegExp ? new RegExp((mask as string).slice(1, mask.length - 1)) : mask; + if (isString(mask)) { + const isRegExp = (mask as string).startsWith('/') && (mask as string).endsWith('/'); + return isRegExp ? new RegExp((mask as string).slice(1, mask.length - 1)) : mask; - } else if (Array.isArray(mask)) { - return (mask as string[]).map(value => maskFromString(value)) as string[]; - } + } else if (Array.isArray(mask)) { + return (mask as string[]).map(value => maskFromString(value)) as string[]; + } - return null; + return null; } export function parseReviver(_key: string, value: any): any { - const regexDateISO = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*))(?:Z|([+\-])([\d|:]*))?$/; - return isString(value) && regexDateISO.test(value) ? new Date(value) : value; + const regexDateISO = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*))(?:Z|([+\-])([\d|:]*))?$/; + return isString(value) && regexDateISO.test(value) ? new Date(value) : value; } diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/calendar/dynamic-ng-bootstrap-calendar.component.spec.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/calendar/dynamic-ng-bootstrap-calendar.component.spec.ts index 1cf9d087eab..932e9c318bd 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/calendar/dynamic-ng-bootstrap-calendar.component.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/calendar/dynamic-ng-bootstrap-calendar.component.spec.ts @@ -1,90 +1,99 @@ -import { TestBed, inject, ComponentFixture, waitForAsync } from "@angular/core/testing"; -import { DebugElement } from "@angular/core"; -import { UntypedFormGroup, UntypedFormControl } from "@angular/forms"; -import { By } from "@angular/platform-browser"; -import { NgbDatepicker } from "@ng-bootstrap/ng-bootstrap"; -import { DynamicDatePickerModel } from "@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model"; -import { DynamicNGBootstrapCalendarComponent } from "./dynamic-ng-bootstrap-calendar.component"; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; - - -describe("DynamicNGBootstrapCalendarComponent test suite", () => { - const testModel = new DynamicDatePickerModel({id: "calendar"}); - const formModel = [testModel]; - - let formGroup: UntypedFormGroup; - let fixture: ComponentFixture; - let component: DynamicNGBootstrapCalendarComponent; - let debugElement: DebugElement; - let testElement: DebugElement; - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [DynamicNGBootstrapCalendarComponent] - }).compileComponents().then(() => { - fixture = TestBed.createComponent(DynamicNGBootstrapCalendarComponent); - - component = fixture.componentInstance; - debugElement = fixture.debugElement; - }); - })); - - beforeEach(inject([DynamicFormService], (service: DynamicFormService) => { - formGroup = service.createFormGroup(formModel); - - component.group = formGroup; - component.model = testModel; - - fixture.detectChanges(); - - testElement = debugElement.query(By.css(`ngb-datepicker[id="${testModel.id}"]`)); - })); - - it("should initialize correctly", () => { - expect(component.control instanceof UntypedFormControl).toBe(true); - expect(component.group instanceof UntypedFormGroup).toBe(true); - expect(component.model instanceof DynamicDatePickerModel).toBe(true); - expect(component.ngbCalendar instanceof NgbDatepicker).toBe(true); - - expect(component.blur).toBeDefined(); - expect(component.change).toBeDefined(); - expect(component.focus).toBeDefined(); - - expect(component.onBlur).toBeDefined(); - expect(component.onChange).toBeDefined(); - expect(component.onFocus).toBeDefined(); - - expect(component.hasFocus).toBe(false); - expect(component.isValid).toBe(true); - expect(component.isInvalid).toBe(false); - expect(component.showErrorMessages).toBe(false); +import { DebugElement } from '@angular/core'; +import { + ComponentFixture, + inject, + TestBed, + waitForAsync, +} from '@angular/core/testing'; +import { + UntypedFormControl, + UntypedFormGroup, +} from '@angular/forms'; +import { By } from '@angular/platform-browser'; +import { NgbDatepicker } from '@ng-bootstrap/ng-bootstrap'; +import { DynamicDatePickerModel } from '@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; + +import { DynamicNGBootstrapCalendarComponent } from './dynamic-ng-bootstrap-calendar.component'; + + +describe('DynamicNGBootstrapCalendarComponent test suite', () => { + const testModel = new DynamicDatePickerModel({ id: 'calendar' }); + const formModel = [testModel]; + + let formGroup: UntypedFormGroup; + let fixture: ComponentFixture; + let component: DynamicNGBootstrapCalendarComponent; + let debugElement: DebugElement; + let testElement: DebugElement; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [DynamicNGBootstrapCalendarComponent], + }).compileComponents().then(() => { + fixture = TestBed.createComponent(DynamicNGBootstrapCalendarComponent); + + component = fixture.componentInstance; + debugElement = fixture.debugElement; }); + })); - it("should have an ngb-datepicker element", () => { - expect(testElement instanceof DebugElement).toBe(true); - }); + beforeEach(inject([DynamicFormService], (service: DynamicFormService) => { + formGroup = service.createFormGroup(formModel); - it("should emit blur event", () => { - spyOn(component.blur, "emit"); + component.group = formGroup; + component.model = testModel; - component.onBlur(null); + fixture.detectChanges(); - expect(component.blur.emit).toHaveBeenCalled(); - }); + testElement = debugElement.query(By.css(`ngb-datepicker[id="${testModel.id}"]`)); + })); - it("should emit change event", () => { - spyOn(component.change, "emit"); + it('should initialize correctly', () => { + expect(component.control instanceof UntypedFormControl).toBe(true); + expect(component.group instanceof UntypedFormGroup).toBe(true); + expect(component.model instanceof DynamicDatePickerModel).toBe(true); + expect(component.ngbCalendar instanceof NgbDatepicker).toBe(true); - component.onChange(null); + expect(component.blur).toBeDefined(); + expect(component.change).toBeDefined(); + expect(component.focus).toBeDefined(); - expect(component.change.emit).toHaveBeenCalled(); - }); + expect(component.onBlur).toBeDefined(); + expect(component.onChange).toBeDefined(); + expect(component.onFocus).toBeDefined(); - it("should emit focus event", () => { - spyOn(component.focus, "emit"); + expect(component.hasFocus).toBe(false); + expect(component.isValid).toBe(true); + expect(component.isInvalid).toBe(false); + expect(component.showErrorMessages).toBe(false); + }); - component.onFocus(null); + it('should have an ngb-datepicker element', () => { + expect(testElement instanceof DebugElement).toBe(true); + }); - expect(component.focus.emit).toHaveBeenCalled(); - }); + it('should emit blur event', () => { + spyOn(component.blur, 'emit'); + + component.onBlur(null); + + expect(component.blur.emit).toHaveBeenCalled(); + }); + + it('should emit change event', () => { + spyOn(component.change, 'emit'); + + component.onChange(null); + + expect(component.change.emit).toHaveBeenCalled(); + }); + + it('should emit focus event', () => { + spyOn(component.focus, 'emit'); + + component.onFocus(null); + + expect(component.focus.emit).toHaveBeenCalled(); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/calendar/dynamic-ng-bootstrap-calendar.component.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/calendar/dynamic-ng-bootstrap-calendar.component.ts index 637bc72ee97..24de0555888 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/calendar/dynamic-ng-bootstrap-calendar.component.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/calendar/dynamic-ng-bootstrap-calendar.component.ts @@ -1,23 +1,40 @@ -import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild } from "@angular/core"; -import { UntypedFormGroup, ReactiveFormsModule } from "@angular/forms"; -import { NgbDatepicker, NgbDatepickerConfig, NgbDatepickerModule } from "@ng-bootstrap/ng-bootstrap"; -import { NgClass } from "@angular/common"; -import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; +import { NgClass } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + Output, + ViewChild, +} from '@angular/core'; +import { + ReactiveFormsModule, + UntypedFormGroup, +} from '@angular/forms'; +import { + NgbDatepicker, + NgbDatepickerConfig, + NgbDatepickerModule, +} from '@ng-bootstrap/ng-bootstrap'; +import { DynamicFormControlComponent } from '@ng-dynamic-forms/core/component/dynamic-form-control.component'; +import { DynamicDatePickerModel } from '@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; import { DynamicFormLayout, DynamicFormLayoutService, -} from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicDatePickerModel } from "@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; +} from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; @Component({ - selector: "dynamic-ng-bootstrap-calendar", - templateUrl: "./dynamic-ng-bootstrap-calendar.component.html", - changeDetection: ChangeDetectionStrategy.OnPush, - standalone: true, - imports: [ReactiveFormsModule, NgbDatepickerModule, NgClass] + selector: 'dynamic-ng-bootstrap-calendar', + templateUrl: './dynamic-ng-bootstrap-calendar.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [ + NgbDatepickerModule, + NgClass, + ReactiveFormsModule, + ], }) export class DynamicNGBootstrapCalendarComponent extends DynamicFormControlComponent { @Input() formLayout?: DynamicFormLayout; @@ -29,11 +46,11 @@ export class DynamicNGBootstrapCalendarComponent extends DynamicFormControlCompo @Output() change: EventEmitter = new EventEmitter(); @Output() focus: EventEmitter = new EventEmitter(); - @ViewChild(NgbDatepicker, {static: true}) ngbCalendar!: NgbDatepicker; + @ViewChild(NgbDatepicker, { static: true }) ngbCalendar!: NgbDatepicker; constructor(protected layoutService: DynamicFormLayoutService, protected validationService: DynamicFormValidationService, public config: NgbDatepickerConfig) { - super(layoutService, validationService); + super(layoutService, validationService); } } diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component.spec.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component.spec.ts index 35f0405052a..aafd4be830b 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component.spec.ts @@ -1,96 +1,105 @@ -import { TestBed, inject, ComponentFixture, waitForAsync } from "@angular/core/testing"; -import { DebugElement } from "@angular/core"; -import { ReactiveFormsModule, UntypedFormGroup } from "@angular/forms"; -import { NoopAnimationsModule } from "@angular/platform-browser/animations"; -import { By } from "@angular/platform-browser"; -import { DynamicCheckboxGroupModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model"; -import { DynamicNGBootstrapCheckboxGroupComponent } from "./dynamic-ng-bootstrap-checkbox-group.component"; -import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; -import { DynamicListDirective } from "@ng-dynamic-forms/core/directive/dynamic-list.directive"; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; - -describe("DynamicNGBootstrapCheckboxGroupComponent test suite", () => { - const testModel = new DynamicCheckboxGroupModel({id: "checkboxGroup", group: []}); - const formModel = [testModel]; - - let formGroup: UntypedFormGroup; - let fixture: ComponentFixture; - let component: DynamicNGBootstrapCheckboxGroupComponent; - let debugElement: DebugElement; - let testElement: DebugElement; - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [ +import { DebugElement } from '@angular/core'; +import { + ComponentFixture, + inject, + TestBed, + waitForAsync, +} from '@angular/core/testing'; +import { + ReactiveFormsModule, + UntypedFormGroup, +} from '@angular/forms'; +import { By } from '@angular/platform-browser'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { DynamicListDirective } from '@ng-dynamic-forms/core/directive/dynamic-list.directive'; +import { DynamicTemplateDirective } from '@ng-dynamic-forms/core/directive/dynamic-template.directive'; +import { DynamicCheckboxGroupModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; + +import { DynamicNGBootstrapCheckboxGroupComponent } from './dynamic-ng-bootstrap-checkbox-group.component'; + +describe('DynamicNGBootstrapCheckboxGroupComponent test suite', () => { + const testModel = new DynamicCheckboxGroupModel({ id: 'checkboxGroup', group: [] }); + const formModel = [testModel]; + + let formGroup: UntypedFormGroup; + let fixture: ComponentFixture; + let component: DynamicNGBootstrapCheckboxGroupComponent; + let debugElement: DebugElement; + let testElement: DebugElement; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ ReactiveFormsModule, NoopAnimationsModule, DynamicTemplateDirective, DynamicListDirective, - DynamicNGBootstrapCheckboxGroupComponent - ] -}).compileComponents().then(() => { - fixture = TestBed.createComponent(DynamicNGBootstrapCheckboxGroupComponent); + DynamicNGBootstrapCheckboxGroupComponent, + ], + }).compileComponents().then(() => { + fixture = TestBed.createComponent(DynamicNGBootstrapCheckboxGroupComponent); - component = fixture.componentInstance; - debugElement = fixture.debugElement; - }); - })); + component = fixture.componentInstance; + debugElement = fixture.debugElement; + }); + })); - beforeEach(inject([DynamicFormService], (service: DynamicFormService) => { - formGroup = service.createFormGroup(formModel); + beforeEach(inject([DynamicFormService], (service: DynamicFormService) => { + formGroup = service.createFormGroup(formModel); - component.group = formGroup; - component.model = testModel; + component.group = formGroup; + component.model = testModel; - fixture.detectChanges(); + fixture.detectChanges(); - testElement = debugElement.query(By.css(`div.btn-group`)); - })); + testElement = debugElement.query(By.css(`div.btn-group`)); + })); - it("should initialize correctly", () => { - expect(component.control instanceof UntypedFormGroup).toBe(true); - expect(component.group instanceof UntypedFormGroup).toBe(true); - expect(component.model instanceof DynamicCheckboxGroupModel).toBe(true); + it('should initialize correctly', () => { + expect(component.control instanceof UntypedFormGroup).toBe(true); + expect(component.group instanceof UntypedFormGroup).toBe(true); + expect(component.model instanceof DynamicCheckboxGroupModel).toBe(true); - expect(component.blur).toBeDefined(); - expect(component.change).toBeDefined(); - expect(component.focus).toBeDefined(); + expect(component.blur).toBeDefined(); + expect(component.change).toBeDefined(); + expect(component.focus).toBeDefined(); - expect(component.onBlur).toBeDefined(); - expect(component.onChange).toBeDefined(); - expect(component.onFocus).toBeDefined(); + expect(component.onBlur).toBeDefined(); + expect(component.onChange).toBeDefined(); + expect(component.onFocus).toBeDefined(); - expect(component.hasFocus).toBe(false); - expect(component.isValid).toBe(true); - expect(component.isInvalid).toBe(false); - expect(component.showErrorMessages).toBe(false); - }); + expect(component.hasFocus).toBe(false); + expect(component.isValid).toBe(true); + expect(component.isInvalid).toBe(false); + expect(component.showErrorMessages).toBe(false); + }); - it("should have an div.btn-group element", () => { - expect(testElement instanceof DebugElement).toBe(true); - }); + it('should have an div.btn-group element', () => { + expect(testElement instanceof DebugElement).toBe(true); + }); - it("should emit blur event", () => { - spyOn(component.blur, "emit"); + it('should emit blur event', () => { + spyOn(component.blur, 'emit'); - component.onBlur(null); + component.onBlur(null); - expect(component.blur.emit).toHaveBeenCalled(); - }); + expect(component.blur.emit).toHaveBeenCalled(); + }); - it("should emit change event", () => { - spyOn(component.change, "emit"); + it('should emit change event', () => { + spyOn(component.change, 'emit'); - component.onChange(null); + component.onChange(null); - expect(component.change.emit).toHaveBeenCalled(); - }); + expect(component.change.emit).toHaveBeenCalled(); + }); - it("should emit focus event", () => { - spyOn(component.focus, "emit"); + it('should emit focus event', () => { + spyOn(component.focus, 'emit'); - component.onFocus(null); + component.onFocus(null); - expect(component.focus.emit).toHaveBeenCalled(); - }); + expect(component.focus.emit).toHaveBeenCalled(); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component.ts index fd12d639d08..bb0ad6ca68e 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox-group/dynamic-ng-bootstrap-checkbox-group.component.ts @@ -1,25 +1,35 @@ -import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from "@angular/core"; -import { UntypedFormGroup, ReactiveFormsModule } from "@angular/forms"; - -import { NgClass } from "@angular/common"; -import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; +import { NgClass } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; +import { + ReactiveFormsModule, + UntypedFormGroup, +} from '@angular/forms'; +import { DynamicFormControlComponent } from '@ng-dynamic-forms/core/component/dynamic-form-control.component'; +import { DynamicCheckboxModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model'; +import { DynamicCheckboxGroupModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; import { DynamicFormLayout, DynamicFormLayoutService, -} from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicCheckboxGroupModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; -import { DynamicCheckboxModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; +} from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; @Component({ - selector: "dynamic-ng-bootstrap-checkbox-group", - templateUrl: "./dynamic-ng-bootstrap-checkbox-group.component.html", - changeDetection: ChangeDetectionStrategy.OnPush, - standalone: true, - imports: [ReactiveFormsModule, NgClass] + selector: 'dynamic-ng-bootstrap-checkbox-group', + templateUrl: './dynamic-ng-bootstrap-checkbox-group.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [ + NgClass, + ReactiveFormsModule, + ], }) export class DynamicNGBootstrapCheckboxGroupComponent extends DynamicFormControlComponent { @Input() formLayout?: DynamicFormLayout; @@ -32,15 +42,15 @@ export class DynamicNGBootstrapCheckboxGroupComponent extends DynamicFormControl @Output() focus: EventEmitter = new EventEmitter(); constructor(protected layoutService: DynamicFormLayoutService, protected validationService: DynamicFormValidationService) { - super(layoutService, validationService); + super(layoutService, validationService); } getCheckboxId(model: DynamicCheckboxModel) { - return this.layoutService.getElementId(model); + return this.layoutService.getElementId(model); } onCheckboxChange($event: Event, model: DynamicCheckboxModel) { - this.onChange($event); - model.value = ($event.target as HTMLInputElement).checked; + this.onChange($event); + model.value = ($event.target as HTMLInputElement).checked; } } diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox/dynamic-ng-bootstrap-checkbox.component.spec.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox/dynamic-ng-bootstrap-checkbox.component.spec.ts index b88567422a8..24519ce68a5 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox/dynamic-ng-bootstrap-checkbox.component.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox/dynamic-ng-bootstrap-checkbox.component.spec.ts @@ -1,90 +1,99 @@ -import { TestBed, inject, ComponentFixture, waitForAsync } from "@angular/core/testing"; -import { DebugElement } from "@angular/core"; -import { UntypedFormGroup, UntypedFormControl } from "@angular/forms"; -import { By } from "@angular/platform-browser"; -import { DynamicCheckboxModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; -import { DynamicNGBootstrapCheckboxComponent } from "./dynamic-ng-bootstrap-checkbox.component"; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; - - -describe("DynamicNGBootstrapCheckboxComponent test suite", () => { - const testModel = new DynamicCheckboxModel({id: "checkbox"}); - const formModel = [testModel]; - - let formGroup: UntypedFormGroup; - let fixture: ComponentFixture; - let component: DynamicNGBootstrapCheckboxComponent; - let debugElement: DebugElement; - let testElement: DebugElement; - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [DynamicNGBootstrapCheckboxComponent] - }).compileComponents().then(() => { - fixture = TestBed.createComponent(DynamicNGBootstrapCheckboxComponent); - - component = fixture.componentInstance; - debugElement = fixture.debugElement; - }); - })); - - beforeEach(inject([DynamicFormService], (service: DynamicFormService) => { - formGroup = service.createFormGroup(formModel); - - component.group = formGroup; - component.model = testModel; - - fixture.detectChanges(); - - testElement = debugElement.query(By.css(`input[type="checkbox"][id="${testModel.id}"]`)); - })); - - it("should initialize correctly", () => { - expect(component.control instanceof UntypedFormControl).toBe(true); - expect(component.group instanceof UntypedFormGroup).toBe(true); - expect(component.model instanceof DynamicCheckboxModel).toBe(true); - - expect(component.blur).toBeDefined(); - expect(component.change).toBeDefined(); - expect(component.focus).toBeDefined(); - - expect(component.onBlur).toBeDefined(); - expect(component.onChange).toBeDefined(); - expect(component.onFocus).toBeDefined(); - - expect(component.hasFocus).toBe(false); - expect(component.isValid).toBe(true); - expect(component.isInvalid).toBe(false); - expect(component.showErrorMessages).toBe(false); +import { DebugElement } from '@angular/core'; +import { + ComponentFixture, + inject, + TestBed, + waitForAsync, +} from '@angular/core/testing'; +import { + UntypedFormControl, + UntypedFormGroup, +} from '@angular/forms'; +import { By } from '@angular/platform-browser'; +import { DynamicCheckboxModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; + +import { DynamicNGBootstrapCheckboxComponent } from './dynamic-ng-bootstrap-checkbox.component'; + + +describe('DynamicNGBootstrapCheckboxComponent test suite', () => { + const testModel = new DynamicCheckboxModel({ id: 'checkbox' }); + const formModel = [testModel]; + + let formGroup: UntypedFormGroup; + let fixture: ComponentFixture; + let component: DynamicNGBootstrapCheckboxComponent; + let debugElement: DebugElement; + let testElement: DebugElement; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [DynamicNGBootstrapCheckboxComponent], + }).compileComponents().then(() => { + fixture = TestBed.createComponent(DynamicNGBootstrapCheckboxComponent); + + component = fixture.componentInstance; + debugElement = fixture.debugElement; }); + })); - it("should have an checkbox element", () => { - expect(testElement instanceof DebugElement).toBe(true); - }); + beforeEach(inject([DynamicFormService], (service: DynamicFormService) => { + formGroup = service.createFormGroup(formModel); - it("should listen to and emit blur event", () => { - spyOn(component.blur, "emit"); + component.group = formGroup; + component.model = testModel; - component.onBlur(null); - testElement.triggerEventHandler("blur", null); + fixture.detectChanges(); - expect(component.blur.emit).toHaveBeenCalledTimes(2); - }); + testElement = debugElement.query(By.css(`input[type="checkbox"][id="${testModel.id}"]`)); + })); - it("should emit change event", () => { - spyOn(component.change, "emit"); + it('should initialize correctly', () => { + expect(component.control instanceof UntypedFormControl).toBe(true); + expect(component.group instanceof UntypedFormGroup).toBe(true); + expect(component.model instanceof DynamicCheckboxModel).toBe(true); - component.onChange(null); + expect(component.blur).toBeDefined(); + expect(component.change).toBeDefined(); + expect(component.focus).toBeDefined(); - expect(component.change.emit).toHaveBeenCalled(); - }); + expect(component.onBlur).toBeDefined(); + expect(component.onChange).toBeDefined(); + expect(component.onFocus).toBeDefined(); - it("should listen to and emit focus event", () => { - spyOn(component.focus, "emit"); + expect(component.hasFocus).toBe(false); + expect(component.isValid).toBe(true); + expect(component.isInvalid).toBe(false); + expect(component.showErrorMessages).toBe(false); + }); - component.onFocus(null); - testElement.triggerEventHandler("focus", null); + it('should have an checkbox element', () => { + expect(testElement instanceof DebugElement).toBe(true); + }); - expect(component.focus.emit).toHaveBeenCalledTimes(2); - }); + it('should listen to and emit blur event', () => { + spyOn(component.blur, 'emit'); + + component.onBlur(null); + testElement.triggerEventHandler('blur', null); + + expect(component.blur.emit).toHaveBeenCalledTimes(2); + }); + + it('should emit change event', () => { + spyOn(component.change, 'emit'); + + component.onChange(null); + + expect(component.change.emit).toHaveBeenCalled(); + }); + + it('should listen to and emit focus event', () => { + spyOn(component.focus, 'emit'); + + component.onFocus(null); + testElement.triggerEventHandler('focus', null); + + expect(component.focus.emit).toHaveBeenCalledTimes(2); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox/dynamic-ng-bootstrap-checkbox.component.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox/dynamic-ng-bootstrap-checkbox.component.ts index 861d3b9a1a8..ef84c3c3e4c 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox/dynamic-ng-bootstrap-checkbox.component.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/checkbox/dynamic-ng-bootstrap-checkbox.component.ts @@ -1,22 +1,33 @@ -import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from "@angular/core"; -import { UntypedFormGroup, ReactiveFormsModule } from "@angular/forms"; -import { NgClass } from "@angular/common"; -import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; +import { NgClass } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; +import { + ReactiveFormsModule, + UntypedFormGroup, +} from '@angular/forms'; +import { DynamicFormControlComponent } from '@ng-dynamic-forms/core/component/dynamic-form-control.component'; +import { DynamicCheckboxModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; import { DynamicFormLayout, DynamicFormLayoutService, -} from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicCheckboxModel } from "@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; +} from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; @Component({ - selector: "dynamic-ng-bootstrap-checkbox", - templateUrl: "./dynamic-ng-bootstrap-checkbox.component.html", - changeDetection: ChangeDetectionStrategy.Default, - standalone: true, - imports: [ReactiveFormsModule, NgClass] + selector: 'dynamic-ng-bootstrap-checkbox', + templateUrl: './dynamic-ng-bootstrap-checkbox.component.html', + changeDetection: ChangeDetectionStrategy.Default, + imports: [ + NgClass, + ReactiveFormsModule, + ], }) export class DynamicNGBootstrapCheckboxComponent extends DynamicFormControlComponent { @Input() formLayout?: DynamicFormLayout; @@ -29,6 +40,6 @@ export class DynamicNGBootstrapCheckboxComponent extends DynamicFormControlCompo @Output() focus: EventEmitter = new EventEmitter(); constructor(protected layoutService: DynamicFormLayoutService, protected validationService: DynamicFormValidationService) { - super(layoutService, validationService); + super(layoutService, validationService); } } diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.spec.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.spec.ts index 9c637dc7475..aabc9c42c51 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.spec.ts @@ -1,91 +1,100 @@ -import { TestBed, inject, ComponentFixture, waitForAsync } from "@angular/core/testing"; -import { DebugElement } from "@angular/core"; -import { UntypedFormGroup, UntypedFormControl } from "@angular/forms"; -import { By } from "@angular/platform-browser"; -import { NgxMaskModule } from "ngx-mask"; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicNGBootstrapInputComponent } from "./dynamic-ng-bootstrap-input.component"; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; - -describe("DynamicNGBootstrapInputComponent test suite", () => { - const testModel = new DynamicInputModel({id: "input"}); - const formModel = [testModel]; - - let formGroup: UntypedFormGroup; - let fixture: ComponentFixture; - let component: DynamicNGBootstrapInputComponent; - let debugElement: DebugElement; - let testElement: DebugElement; - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [DynamicNGBootstrapInputComponent, NgxMaskModule.forRoot()], - }).compileComponents().then(() => { - fixture = TestBed.createComponent(DynamicNGBootstrapInputComponent); - - component = fixture.componentInstance; - debugElement = fixture.debugElement; - }); - })); - - beforeEach(inject([DynamicFormService], (service: DynamicFormService) => { - formGroup = service.createFormGroup(formModel); - - component.group = formGroup; - component.model = testModel; - - fixture.detectChanges(); - - testElement = debugElement.query(By.css(`input[id="${testModel.id}"]`)); - })); - - it("should initialize correctly", () => { - expect(component.control instanceof UntypedFormControl).toBe(true); - expect(component.group instanceof UntypedFormGroup).toBe(true); - expect(component.model instanceof DynamicInputModel).toBe(true); - - expect(component.blur).toBeDefined(); - expect(component.change).toBeDefined(); - expect(component.focus).toBeDefined(); - - expect(component.onBlur).toBeDefined(); - expect(component.onChange).toBeDefined(); - expect(component.onFocus).toBeDefined(); - - expect(component.hasFocus).toBe(false); - expect(component.isValid).toBe(true); - expect(component.isInvalid).toBe(false); - expect(component.showErrorMessages).toBe(false); +import { DebugElement } from '@angular/core'; +import { + ComponentFixture, + inject, + TestBed, + waitForAsync, +} from '@angular/core/testing'; +import { + UntypedFormControl, + UntypedFormGroup, +} from '@angular/forms'; +import { By } from '@angular/platform-browser'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; +import { NgxMaskModule } from 'ngx-mask'; + +import { DynamicNGBootstrapInputComponent } from './dynamic-ng-bootstrap-input.component'; + +describe('DynamicNGBootstrapInputComponent test suite', () => { + const testModel = new DynamicInputModel({ id: 'input' }); + const formModel = [testModel]; + + let formGroup: UntypedFormGroup; + let fixture: ComponentFixture; + let component: DynamicNGBootstrapInputComponent; + let debugElement: DebugElement; + let testElement: DebugElement; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [DynamicNGBootstrapInputComponent, NgxMaskModule.forRoot()], + }).compileComponents().then(() => { + fixture = TestBed.createComponent(DynamicNGBootstrapInputComponent); + + component = fixture.componentInstance; + debugElement = fixture.debugElement; }); + })); - it("should have an input element", () => { - expect(testElement instanceof DebugElement).toBe(true); - }); + beforeEach(inject([DynamicFormService], (service: DynamicFormService) => { + formGroup = service.createFormGroup(formModel); - it("should listen to and emit blur event", () => { - spyOn(component.blur, "emit"); + component.group = formGroup; + component.model = testModel; - component.onBlur(null); - testElement.triggerEventHandler("blur", null); + fixture.detectChanges(); - expect(component.blur.emit).toHaveBeenCalledTimes(2); - }); + testElement = debugElement.query(By.css(`input[id="${testModel.id}"]`)); + })); - it("should emit change event", () => { - spyOn(component.change, "emit"); + it('should initialize correctly', () => { + expect(component.control instanceof UntypedFormControl).toBe(true); + expect(component.group instanceof UntypedFormGroup).toBe(true); + expect(component.model instanceof DynamicInputModel).toBe(true); - component.onChange(null); - testElement.triggerEventHandler("change", null); + expect(component.blur).toBeDefined(); + expect(component.change).toBeDefined(); + expect(component.focus).toBeDefined(); - expect(component.change.emit).toHaveBeenCalled(); - }); + expect(component.onBlur).toBeDefined(); + expect(component.onChange).toBeDefined(); + expect(component.onFocus).toBeDefined(); - it("should listen to and emit focus event", () => { - spyOn(component.focus, "emit"); + expect(component.hasFocus).toBe(false); + expect(component.isValid).toBe(true); + expect(component.isInvalid).toBe(false); + expect(component.showErrorMessages).toBe(false); + }); - component.onFocus(null); - testElement.triggerEventHandler("focus", null); + it('should have an input element', () => { + expect(testElement instanceof DebugElement).toBe(true); + }); - expect(component.focus.emit).toHaveBeenCalledTimes(2); - }); + it('should listen to and emit blur event', () => { + spyOn(component.blur, 'emit'); + + component.onBlur(null); + testElement.triggerEventHandler('blur', null); + + expect(component.blur.emit).toHaveBeenCalledTimes(2); + }); + + it('should emit change event', () => { + spyOn(component.change, 'emit'); + + component.onChange(null); + testElement.triggerEventHandler('change', null); + + expect(component.change.emit).toHaveBeenCalled(); + }); + + it('should listen to and emit focus event', () => { + spyOn(component.focus, 'emit'); + + component.onFocus(null); + testElement.triggerEventHandler('focus', null); + + expect(component.focus.emit).toHaveBeenCalledTimes(2); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.ts index 13d35c7a0b7..bed3b0ae02f 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/input/dynamic-ng-bootstrap-input.component.ts @@ -1,25 +1,41 @@ -import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from "@angular/core"; -import { UntypedFormGroup, ReactiveFormsModule } from "@angular/forms"; -import { NgClass, AsyncPipe } from "@angular/common"; - -import { NgxMaskModule } from "ngx-mask"; -import { DynamicListDirective } from "@ng-dynamic-forms/core/directive/dynamic-list.directive"; -import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; +import { + AsyncPipe, + NgClass, +} from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; +import { + ReactiveFormsModule, + UntypedFormGroup, +} from '@angular/forms'; +import { DynamicFormControlComponent } from '@ng-dynamic-forms/core/component/dynamic-form-control.component'; +import { DynamicListDirective } from '@ng-dynamic-forms/core/directive/dynamic-list.directive'; +import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; import { DynamicFormLayout, DynamicFormLayoutService, -} from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicInputModel } from "@ng-dynamic-forms/core/model/input/dynamic-input.model"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; +} from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; +import { NgxMaskModule } from 'ngx-mask'; @Component({ - selector: "dynamic-ng-bootstrap-input", - templateUrl: "./dynamic-ng-bootstrap-input.component.html", - changeDetection: ChangeDetectionStrategy.Default, - standalone: true, - imports: [ReactiveFormsModule, DynamicListDirective, NgClass, AsyncPipe, NgxMaskModule], + selector: 'dynamic-ng-bootstrap-input', + templateUrl: './dynamic-ng-bootstrap-input.component.html', + changeDetection: ChangeDetectionStrategy.Default, + imports: [ + AsyncPipe, + DynamicListDirective, + NgClass, + NgxMaskModule, + ReactiveFormsModule, + ], }) export class DynamicNGBootstrapInputComponent extends DynamicFormControlComponent { @Input() formLayout?: DynamicFormLayout; @@ -32,6 +48,6 @@ export class DynamicNGBootstrapInputComponent extends DynamicFormControlComponen @Output() focus: EventEmitter = new EventEmitter(); constructor(protected layoutService: DynamicFormLayoutService, protected validationService: DynamicFormValidationService) { - super(layoutService, validationService); + super(layoutService, validationService); } } diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component.spec.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component.spec.ts index 49c1e5d68b6..47ccb86e2cd 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component.spec.ts @@ -1,92 +1,101 @@ -import { TestBed, inject, ComponentFixture, waitForAsync } from "@angular/core/testing"; -import { DebugElement } from "@angular/core"; -import { UntypedFormGroup, UntypedFormControl } from "@angular/forms"; -import { By } from "@angular/platform-browser"; -import { DynamicRadioGroupModel } from "@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model"; -import { DynamicNGBootstrapRadioGroupComponent } from "./dynamic-ng-bootstrap-radio-group.component"; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; - - -describe("DynamicNGBootstrapRadioGroupComponent test suite", () => { - const testModel = new DynamicRadioGroupModel({ - id: "radioGroup", - options: [{value: "One"}, {value: "Two"}], - value: "One" +import { DebugElement } from '@angular/core'; +import { + ComponentFixture, + inject, + TestBed, + waitForAsync, +} from '@angular/core/testing'; +import { + UntypedFormControl, + UntypedFormGroup, +} from '@angular/forms'; +import { By } from '@angular/platform-browser'; +import { DynamicRadioGroupModel } from '@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; + +import { DynamicNGBootstrapRadioGroupComponent } from './dynamic-ng-bootstrap-radio-group.component'; + + +describe('DynamicNGBootstrapRadioGroupComponent test suite', () => { + const testModel = new DynamicRadioGroupModel({ + id: 'radioGroup', + options: [{ value: 'One' }, { value: 'Two' }], + value: 'One', + }); + const formModel = [testModel]; + + let formGroup: UntypedFormGroup; + let fixture: ComponentFixture; + let component: DynamicNGBootstrapRadioGroupComponent; + let debugElement: DebugElement; + let testElement: DebugElement; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [DynamicNGBootstrapRadioGroupComponent], + }).compileComponents().then(() => { + fixture = TestBed.createComponent(DynamicNGBootstrapRadioGroupComponent); + + component = fixture.componentInstance; + debugElement = fixture.debugElement; }); - const formModel = [testModel]; + })); - let formGroup: UntypedFormGroup; - let fixture: ComponentFixture; - let component: DynamicNGBootstrapRadioGroupComponent; - let debugElement: DebugElement; - let testElement: DebugElement; + beforeEach(inject([DynamicFormService], (service: DynamicFormService) => { + formGroup = service.createFormGroup(formModel); - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [DynamicNGBootstrapRadioGroupComponent] - }).compileComponents().then(() => { - fixture = TestBed.createComponent(DynamicNGBootstrapRadioGroupComponent); + component.group = formGroup; + component.model = testModel; - component = fixture.componentInstance; - debugElement = fixture.debugElement; - }); - })); + fixture.detectChanges(); - beforeEach(inject([DynamicFormService], (service: DynamicFormService) => { - formGroup = service.createFormGroup(formModel); + testElement = debugElement.query(By.css(`div[id="${testModel.id}"]`)); + })); - component.group = formGroup; - component.model = testModel; + it('should initialize correctly', () => { + expect(component.control instanceof UntypedFormControl).toBe(true); + expect(component.group instanceof UntypedFormGroup).toBe(true); + expect(component.model instanceof DynamicRadioGroupModel).toBe(true); - fixture.detectChanges(); + expect(component.blur).toBeDefined(); + expect(component.change).toBeDefined(); + expect(component.focus).toBeDefined(); - testElement = debugElement.query(By.css(`div[id="${testModel.id}"]`)); - })); + expect(component.onBlur).toBeDefined(); + expect(component.onChange).toBeDefined(); + expect(component.onFocus).toBeDefined(); - it("should initialize correctly", () => { - expect(component.control instanceof UntypedFormControl).toBe(true); - expect(component.group instanceof UntypedFormGroup).toBe(true); - expect(component.model instanceof DynamicRadioGroupModel).toBe(true); + expect(component.hasFocus).toBe(false); + expect(component.isValid).toBe(true); + expect(component.isInvalid).toBe(false); + expect(component.showErrorMessages).toBe(false); + }); - expect(component.blur).toBeDefined(); - expect(component.change).toBeDefined(); - expect(component.focus).toBeDefined(); + it('should have an radio group element', () => { + expect(testElement instanceof DebugElement).toBe(true); + }); - expect(component.onBlur).toBeDefined(); - expect(component.onChange).toBeDefined(); - expect(component.onFocus).toBeDefined(); + it('should emit blur event', () => { + spyOn(component.blur, 'emit'); - expect(component.hasFocus).toBe(false); - expect(component.isValid).toBe(true); - expect(component.isInvalid).toBe(false); - expect(component.showErrorMessages).toBe(false); - }); - - it("should have an radio group element", () => { - expect(testElement instanceof DebugElement).toBe(true); - }); - - it("should emit blur event", () => { - spyOn(component.blur, "emit"); + component.onBlur(null); - component.onBlur(null); + expect(component.blur.emit).toHaveBeenCalled(); + }); - expect(component.blur.emit).toHaveBeenCalled(); - }); - - it("should emit change event", () => { - spyOn(component.change, "emit"); + it('should emit change event', () => { + spyOn(component.change, 'emit'); - component.onChange(null); + component.onChange(null); - expect(component.change.emit).toHaveBeenCalled(); - }); + expect(component.change.emit).toHaveBeenCalled(); + }); - it("should emit focus event", () => { - spyOn(component.focus, "emit"); + it('should emit focus event', () => { + spyOn(component.focus, 'emit'); - component.onFocus(null); + component.onFocus(null); - expect(component.focus.emit).toHaveBeenCalled(); - }); + expect(component.focus.emit).toHaveBeenCalled(); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component.ts index 24bd7ae0dec..9c53ecfaa57 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/radio-group/dynamic-ng-bootstrap-radio-group.component.ts @@ -1,23 +1,38 @@ -import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from "@angular/core"; -import { UntypedFormGroup, ReactiveFormsModule } from "@angular/forms"; -import { NgClass, AsyncPipe } from "@angular/common"; -import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; +import { + AsyncPipe, + NgClass, +} from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; +import { + ReactiveFormsModule, + UntypedFormGroup, +} from '@angular/forms'; +import { DynamicFormControlComponent } from '@ng-dynamic-forms/core/component/dynamic-form-control.component'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { DynamicRadioGroupModel } from '@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model'; import { DynamicFormLayout, DynamicFormLayoutService, -} from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicRadioGroupModel } from "@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; +} from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; @Component({ - selector: "dynamic-ng-bootstrap-radio-group", - templateUrl: "./dynamic-ng-bootstrap-radio-group.component.html", - changeDetection: ChangeDetectionStrategy.OnPush, - standalone: true, - imports: [ReactiveFormsModule, NgClass, AsyncPipe] + selector: 'dynamic-ng-bootstrap-radio-group', + templateUrl: './dynamic-ng-bootstrap-radio-group.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [ + AsyncPipe, + NgClass, + ReactiveFormsModule, + ], }) export class DynamicNGBootstrapRadioGroupComponent extends DynamicFormControlComponent { @Input() formLayout?: DynamicFormLayout; @@ -30,6 +45,6 @@ export class DynamicNGBootstrapRadioGroupComponent extends DynamicFormControlCom @Output() focus: EventEmitter = new EventEmitter(); constructor(protected layoutService: DynamicFormLayoutService, protected validationService: DynamicFormValidationService) { - super(layoutService, validationService); + super(layoutService, validationService); } } diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component.spec.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component.spec.ts index 0c2db6d19af..807a3369902 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component.spec.ts @@ -1,89 +1,98 @@ -import { TestBed, inject, ComponentFixture, waitForAsync } from "@angular/core/testing"; -import { DebugElement } from "@angular/core"; -import { UntypedFormGroup, UntypedFormControl } from "@angular/forms"; -import { By } from "@angular/platform-browser"; -import { DynamicSelectModel } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; -import { DynamicNGBootstrapSelectComponent } from "./dynamic-ng-bootstrap-select.component"; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; - -describe("DynamicNGBootstrapSelectComponent test suite", () => { - const testModel = new DynamicSelectModel({id: "select", options: [{value: "One"}, {value: "Two"}], value: "One"}); - const formModel = [testModel]; - - let formGroup: UntypedFormGroup; - let fixture: ComponentFixture; - let component: DynamicNGBootstrapSelectComponent; - let debugElement: DebugElement; - let testElement: DebugElement; - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [DynamicNGBootstrapSelectComponent] - }).compileComponents().then(() => { - fixture = TestBed.createComponent(DynamicNGBootstrapSelectComponent); - - component = fixture.componentInstance; - debugElement = fixture.debugElement; - }); - })); - - beforeEach(inject([DynamicFormService], (service: DynamicFormService) => { - formGroup = service.createFormGroup(formModel); - - component.group = formGroup; - component.model = testModel; - - fixture.detectChanges(); - - testElement = debugElement.query(By.css(`select[id="${testModel.id}"]`)); - })); - - it("should initialize correctly", () => { - expect(component.control instanceof UntypedFormControl).toBe(true); - expect(component.group instanceof UntypedFormGroup).toBe(true); - expect(component.model instanceof DynamicSelectModel).toBe(true); - - expect(component.blur).toBeDefined(); - expect(component.change).toBeDefined(); - expect(component.focus).toBeDefined(); - - expect(component.onBlur).toBeDefined(); - expect(component.onChange).toBeDefined(); - expect(component.onFocus).toBeDefined(); - - expect(component.hasFocus).toBe(false); - expect(component.isValid).toBe(true); - expect(component.isInvalid).toBe(false); - expect(component.showErrorMessages).toBe(false); +import { DebugElement } from '@angular/core'; +import { + ComponentFixture, + inject, + TestBed, + waitForAsync, +} from '@angular/core/testing'; +import { + UntypedFormControl, + UntypedFormGroup, +} from '@angular/forms'; +import { By } from '@angular/platform-browser'; +import { DynamicSelectModel } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; + +import { DynamicNGBootstrapSelectComponent } from './dynamic-ng-bootstrap-select.component'; + +describe('DynamicNGBootstrapSelectComponent test suite', () => { + const testModel = new DynamicSelectModel({ id: 'select', options: [{ value: 'One' }, { value: 'Two' }], value: 'One' }); + const formModel = [testModel]; + + let formGroup: UntypedFormGroup; + let fixture: ComponentFixture; + let component: DynamicNGBootstrapSelectComponent; + let debugElement: DebugElement; + let testElement: DebugElement; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [DynamicNGBootstrapSelectComponent], + }).compileComponents().then(() => { + fixture = TestBed.createComponent(DynamicNGBootstrapSelectComponent); + + component = fixture.componentInstance; + debugElement = fixture.debugElement; }); + })); - it("should have an select element", () => { - expect(testElement instanceof DebugElement).toBe(true); - }); + beforeEach(inject([DynamicFormService], (service: DynamicFormService) => { + formGroup = service.createFormGroup(formModel); - it("should listen to and emit blur event", () => { - spyOn(component.blur, "emit"); + component.group = formGroup; + component.model = testModel; - component.onBlur(null); - testElement.triggerEventHandler("blur", null); + fixture.detectChanges(); - expect(component.blur.emit).toHaveBeenCalledTimes(2); - }); + testElement = debugElement.query(By.css(`select[id="${testModel.id}"]`)); + })); - it("should emit change event", () => { - spyOn(component.change, "emit"); + it('should initialize correctly', () => { + expect(component.control instanceof UntypedFormControl).toBe(true); + expect(component.group instanceof UntypedFormGroup).toBe(true); + expect(component.model instanceof DynamicSelectModel).toBe(true); - component.onChange(null); + expect(component.blur).toBeDefined(); + expect(component.change).toBeDefined(); + expect(component.focus).toBeDefined(); - expect(component.change.emit).toHaveBeenCalled(); - }); + expect(component.onBlur).toBeDefined(); + expect(component.onChange).toBeDefined(); + expect(component.onFocus).toBeDefined(); - it("should listen to and emit focus event", () => { - spyOn(component.focus, "emit"); + expect(component.hasFocus).toBe(false); + expect(component.isValid).toBe(true); + expect(component.isInvalid).toBe(false); + expect(component.showErrorMessages).toBe(false); + }); - component.onFocus(null); - testElement.triggerEventHandler("focus", null); + it('should have an select element', () => { + expect(testElement instanceof DebugElement).toBe(true); + }); - expect(component.focus.emit).toHaveBeenCalledTimes(2); - }); + it('should listen to and emit blur event', () => { + spyOn(component.blur, 'emit'); + + component.onBlur(null); + testElement.triggerEventHandler('blur', null); + + expect(component.blur.emit).toHaveBeenCalledTimes(2); + }); + + it('should emit change event', () => { + spyOn(component.change, 'emit'); + + component.onChange(null); + + expect(component.change.emit).toHaveBeenCalled(); + }); + + it('should listen to and emit focus event', () => { + spyOn(component.focus, 'emit'); + + component.onFocus(null); + testElement.triggerEventHandler('focus', null); + + expect(component.focus.emit).toHaveBeenCalledTimes(2); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component.ts index 71cf316817d..2f40bbee3df 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/select/dynamic-ng-bootstrap-select.component.ts @@ -1,21 +1,36 @@ -import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from "@angular/core"; -import { UntypedFormGroup, ReactiveFormsModule } from "@angular/forms"; -import { NgClass, AsyncPipe } from "@angular/common"; -import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; +import { + AsyncPipe, + NgClass, +} from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; +import { + ReactiveFormsModule, + UntypedFormGroup, +} from '@angular/forms'; +import { DynamicFormControlComponent } from '@ng-dynamic-forms/core/component/dynamic-form-control.component'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { DynamicSelectModel } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; import { DynamicFormLayout, DynamicFormLayoutService, -} from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicSelectModel } from "@ng-dynamic-forms/core/model/select/dynamic-select.model"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; +} from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; @Component({ - selector: "dynamic-ng-bootstrap-select", - templateUrl: "./dynamic-ng-bootstrap-select.component.html", - changeDetection: ChangeDetectionStrategy.Default, - standalone: true, - imports: [ReactiveFormsModule, NgClass, AsyncPipe] + selector: 'dynamic-ng-bootstrap-select', + templateUrl: './dynamic-ng-bootstrap-select.component.html', + changeDetection: ChangeDetectionStrategy.Default, + imports: [ + AsyncPipe, + NgClass, + ReactiveFormsModule, + ], }) export class DynamicNGBootstrapSelectComponent extends DynamicFormControlComponent { @Input() formLayout?: DynamicFormLayout; @@ -28,6 +43,6 @@ export class DynamicNGBootstrapSelectComponent extends DynamicFormControlCompone @Output() focus: EventEmitter = new EventEmitter(); constructor(protected layoutService: DynamicFormLayoutService, protected validationService: DynamicFormValidationService) { - super(layoutService, validationService); + super(layoutService, validationService); } } diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/textarea/dynamic-ng-bootstrap-textarea.component.spec.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/textarea/dynamic-ng-bootstrap-textarea.component.spec.ts index 51bafad1bdc..748b7f160c4 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/textarea/dynamic-ng-bootstrap-textarea.component.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/textarea/dynamic-ng-bootstrap-textarea.component.spec.ts @@ -1,91 +1,100 @@ -import { TestBed, inject, ComponentFixture, waitForAsync } from "@angular/core/testing"; -import { DebugElement } from "@angular/core"; -import { UntypedFormGroup, UntypedFormControl } from "@angular/forms"; -import { By } from "@angular/platform-browser"; -import { DynamicTextAreaModel } from "@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model"; -import { DynamicNGBootstrapTextAreaComponent } from "./dynamic-ng-bootstrap-textarea.component"; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; - - -describe("DynamicNGBootstrapTextAreaComponent test suite", () => { - const testModel = new DynamicTextAreaModel({id: "textarea"}); - const formModel = [testModel]; - - let formGroup: UntypedFormGroup; - let fixture: ComponentFixture; - let component: DynamicNGBootstrapTextAreaComponent; - let debugElement: DebugElement; - let testElement: DebugElement; - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [DynamicNGBootstrapTextAreaComponent] - }).compileComponents().then(() => { - fixture = TestBed.createComponent(DynamicNGBootstrapTextAreaComponent); - - component = fixture.componentInstance; - debugElement = fixture.debugElement; - }); - })); - - beforeEach(inject([DynamicFormService], (service: DynamicFormService) => { - formGroup = service.createFormGroup(formModel); - - component.group = formGroup; - component.model = testModel; - - fixture.detectChanges(); - - testElement = debugElement.query(By.css(`textarea[id="${testModel.id}"]`)); - })); - - it("should initialize correctly", () => { - expect(component.control instanceof UntypedFormControl).toBe(true); - expect(component.group instanceof UntypedFormGroup).toBe(true); - expect(component.model instanceof DynamicTextAreaModel).toBe(true); - - expect(component.blur).toBeDefined(); - expect(component.change).toBeDefined(); - expect(component.focus).toBeDefined(); - - expect(component.onBlur).toBeDefined(); - expect(component.onChange).toBeDefined(); - expect(component.onFocus).toBeDefined(); - - expect(component.hasFocus).toBe(false); - expect(component.isValid).toBe(true); - expect(component.isInvalid).toBe(false); - expect(component.showErrorMessages).toBe(false); +import { DebugElement } from '@angular/core'; +import { + ComponentFixture, + inject, + TestBed, + waitForAsync, +} from '@angular/core/testing'; +import { + UntypedFormControl, + UntypedFormGroup, +} from '@angular/forms'; +import { By } from '@angular/platform-browser'; +import { DynamicTextAreaModel } from '@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; + +import { DynamicNGBootstrapTextAreaComponent } from './dynamic-ng-bootstrap-textarea.component'; + + +describe('DynamicNGBootstrapTextAreaComponent test suite', () => { + const testModel = new DynamicTextAreaModel({ id: 'textarea' }); + const formModel = [testModel]; + + let formGroup: UntypedFormGroup; + let fixture: ComponentFixture; + let component: DynamicNGBootstrapTextAreaComponent; + let debugElement: DebugElement; + let testElement: DebugElement; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [DynamicNGBootstrapTextAreaComponent], + }).compileComponents().then(() => { + fixture = TestBed.createComponent(DynamicNGBootstrapTextAreaComponent); + + component = fixture.componentInstance; + debugElement = fixture.debugElement; }); + })); - it("should have an textarea element", () => { - expect(testElement instanceof DebugElement).toBe(true); - }); + beforeEach(inject([DynamicFormService], (service: DynamicFormService) => { + formGroup = service.createFormGroup(formModel); - it("should listen to and emit blur event", () => { - spyOn(component.blur, "emit"); + component.group = formGroup; + component.model = testModel; - component.onBlur(null); - testElement.triggerEventHandler("blur", null); + fixture.detectChanges(); - expect(component.blur.emit).toHaveBeenCalledTimes(2); - }); + testElement = debugElement.query(By.css(`textarea[id="${testModel.id}"]`)); + })); - it("should emit change event", () => { - spyOn(component.change, "emit"); + it('should initialize correctly', () => { + expect(component.control instanceof UntypedFormControl).toBe(true); + expect(component.group instanceof UntypedFormGroup).toBe(true); + expect(component.model instanceof DynamicTextAreaModel).toBe(true); - component.onChange(null); - testElement.triggerEventHandler("change", null); + expect(component.blur).toBeDefined(); + expect(component.change).toBeDefined(); + expect(component.focus).toBeDefined(); - expect(component.change.emit).toHaveBeenCalled(); - }); + expect(component.onBlur).toBeDefined(); + expect(component.onChange).toBeDefined(); + expect(component.onFocus).toBeDefined(); - it("should listen to and emit focus event", () => { - spyOn(component.focus, "emit"); + expect(component.hasFocus).toBe(false); + expect(component.isValid).toBe(true); + expect(component.isInvalid).toBe(false); + expect(component.showErrorMessages).toBe(false); + }); - component.onFocus(null); - testElement.triggerEventHandler("focus", null); + it('should have an textarea element', () => { + expect(testElement instanceof DebugElement).toBe(true); + }); - expect(component.focus.emit).toHaveBeenCalledTimes(2); - }); + it('should listen to and emit blur event', () => { + spyOn(component.blur, 'emit'); + + component.onBlur(null); + testElement.triggerEventHandler('blur', null); + + expect(component.blur.emit).toHaveBeenCalledTimes(2); + }); + + it('should emit change event', () => { + spyOn(component.change, 'emit'); + + component.onChange(null); + testElement.triggerEventHandler('change', null); + + expect(component.change.emit).toHaveBeenCalled(); + }); + + it('should listen to and emit focus event', () => { + spyOn(component.focus, 'emit'); + + component.onFocus(null); + testElement.triggerEventHandler('focus', null); + + expect(component.focus.emit).toHaveBeenCalledTimes(2); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/textarea/dynamic-ng-bootstrap-textarea.component.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/textarea/dynamic-ng-bootstrap-textarea.component.ts index e1cbc566198..bb033496839 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/textarea/dynamic-ng-bootstrap-textarea.component.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/textarea/dynamic-ng-bootstrap-textarea.component.ts @@ -1,22 +1,33 @@ -import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from "@angular/core"; -import { UntypedFormGroup, ReactiveFormsModule } from "@angular/forms"; -import { NgClass } from "@angular/common"; -import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; +import { NgClass } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + Output, +} from '@angular/core'; +import { + ReactiveFormsModule, + UntypedFormGroup, +} from '@angular/forms'; +import { DynamicFormControlComponent } from '@ng-dynamic-forms/core/component/dynamic-form-control.component'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { DynamicTextAreaModel } from '@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model'; import { DynamicFormLayout, DynamicFormLayoutService, -} from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicTextAreaModel } from "@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; +} from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; @Component({ - selector: "dynamic-ng-bootstrap-textarea", - templateUrl: "./dynamic-ng-bootstrap-textarea.component.html", - changeDetection: ChangeDetectionStrategy.Default, - standalone: true, - imports: [ReactiveFormsModule, NgClass] + selector: 'dynamic-ng-bootstrap-textarea', + templateUrl: './dynamic-ng-bootstrap-textarea.component.html', + changeDetection: ChangeDetectionStrategy.Default, + imports: [ + NgClass, + ReactiveFormsModule, + ], }) export class DynamicNGBootstrapTextAreaComponent extends DynamicFormControlComponent { @Input() formLayout?: DynamicFormLayout; @@ -29,6 +40,6 @@ export class DynamicNGBootstrapTextAreaComponent extends DynamicFormControlCompo @Output() focus: EventEmitter = new EventEmitter(); constructor(protected layoutService: DynamicFormLayoutService, protected validationService: DynamicFormValidationService) { - super(layoutService, validationService); + super(layoutService, validationService); } } diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/timepicker/dynamic-ng-bootstrap-timepicker.component.spec.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/timepicker/dynamic-ng-bootstrap-timepicker.component.spec.ts index 96ef85d5444..d90a8297f8e 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/timepicker/dynamic-ng-bootstrap-timepicker.component.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/timepicker/dynamic-ng-bootstrap-timepicker.component.spec.ts @@ -1,99 +1,112 @@ -import { TestBed, inject, ComponentFixture, waitForAsync } from "@angular/core/testing"; -import { DebugElement } from "@angular/core"; -import { ReactiveFormsModule, UntypedFormGroup, UntypedFormControl } from "@angular/forms"; -import { NoopAnimationsModule } from "@angular/platform-browser/animations"; -import { By } from "@angular/platform-browser"; -import { NgbTimepicker, NgbTimepickerModule } from "@ng-bootstrap/ng-bootstrap"; -import { DynamicTimePickerModel } from "@ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model"; -import { DynamicNGBootstrapTimePickerComponent } from "./dynamic-ng-bootstrap-timepicker.component"; -import { DynamicListDirective } from "@ng-dynamic-forms/core/directive/dynamic-list.directive"; -import { DynamicTemplateDirective } from "@ng-dynamic-forms/core/directive/dynamic-template.directive"; -import { DynamicFormService } from "@ng-dynamic-forms/core/service/dynamic-form.service"; - -describe("DynamicNGBootstrapTimePickerComponent test suite", () => { - const testModel = new DynamicTimePickerModel({id: "timepicker"}); - const formModel = [testModel]; - - let formGroup: UntypedFormGroup; - let fixture: ComponentFixture; - let component: DynamicNGBootstrapTimePickerComponent; - let debugElement: DebugElement; - let testElement: DebugElement; - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ - imports: [ +import { DebugElement } from '@angular/core'; +import { + ComponentFixture, + inject, + TestBed, + waitForAsync, +} from '@angular/core/testing'; +import { + ReactiveFormsModule, + UntypedFormControl, + UntypedFormGroup, +} from '@angular/forms'; +import { By } from '@angular/platform-browser'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { + NgbTimepicker, + NgbTimepickerModule, +} from '@ng-bootstrap/ng-bootstrap'; +import { DynamicListDirective } from '@ng-dynamic-forms/core/directive/dynamic-list.directive'; +import { DynamicTemplateDirective } from '@ng-dynamic-forms/core/directive/dynamic-template.directive'; +import { DynamicTimePickerModel } from '@ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; + +import { DynamicNGBootstrapTimePickerComponent } from './dynamic-ng-bootstrap-timepicker.component'; + +describe('DynamicNGBootstrapTimePickerComponent test suite', () => { + const testModel = new DynamicTimePickerModel({ id: 'timepicker' }); + const formModel = [testModel]; + + let formGroup: UntypedFormGroup; + let fixture: ComponentFixture; + let component: DynamicNGBootstrapTimePickerComponent; + let debugElement: DebugElement; + let testElement: DebugElement; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ ReactiveFormsModule, NoopAnimationsModule, NgbTimepickerModule, DynamicListDirective, DynamicTemplateDirective, - DynamicNGBootstrapTimePickerComponent - ] -}).compileComponents().then(() => { - fixture = TestBed.createComponent(DynamicNGBootstrapTimePickerComponent); + DynamicNGBootstrapTimePickerComponent, + ], + }).compileComponents().then(() => { + fixture = TestBed.createComponent(DynamicNGBootstrapTimePickerComponent); - component = fixture.componentInstance; - debugElement = fixture.debugElement; - }); - })); + component = fixture.componentInstance; + debugElement = fixture.debugElement; + }); + })); - beforeEach(inject([DynamicFormService], (service: DynamicFormService) => { - formGroup = service.createFormGroup(formModel); + beforeEach(inject([DynamicFormService], (service: DynamicFormService) => { + formGroup = service.createFormGroup(formModel); - component.group = formGroup; - component.model = testModel; + component.group = formGroup; + component.model = testModel; - fixture.detectChanges(); + fixture.detectChanges(); - testElement = debugElement.query(By.css(`ngb-timepicker[id="${testModel.id}"]`)); - })); + testElement = debugElement.query(By.css(`ngb-timepicker[id="${testModel.id}"]`)); + })); - it("should initialize correctly", () => { - expect(component.control instanceof UntypedFormControl).toBe(true); - expect(component.group instanceof UntypedFormGroup).toBe(true); - expect(component.model instanceof DynamicTimePickerModel).toBe(true); - expect(component.ngbTimePicker instanceof NgbTimepicker).toBe(true); + it('should initialize correctly', () => { + expect(component.control instanceof UntypedFormControl).toBe(true); + expect(component.group instanceof UntypedFormGroup).toBe(true); + expect(component.model instanceof DynamicTimePickerModel).toBe(true); + expect(component.ngbTimePicker instanceof NgbTimepicker).toBe(true); - expect(component.blur).toBeDefined(); - expect(component.change).toBeDefined(); - expect(component.focus).toBeDefined(); + expect(component.blur).toBeDefined(); + expect(component.change).toBeDefined(); + expect(component.focus).toBeDefined(); - expect(component.onBlur).toBeDefined(); - expect(component.onChange).toBeDefined(); - expect(component.onFocus).toBeDefined(); + expect(component.onBlur).toBeDefined(); + expect(component.onChange).toBeDefined(); + expect(component.onFocus).toBeDefined(); - expect(component.hasFocus).toBe(false); - expect(component.isValid).toBe(true); - expect(component.isInvalid).toBe(false); - expect(component.showErrorMessages).toBe(false); - }); + expect(component.hasFocus).toBe(false); + expect(component.isValid).toBe(true); + expect(component.isInvalid).toBe(false); + expect(component.showErrorMessages).toBe(false); + }); - it("should have an ngb-timepicker element", () => { - expect(testElement instanceof DebugElement).toBe(true); - }); + it('should have an ngb-timepicker element', () => { + expect(testElement instanceof DebugElement).toBe(true); + }); - it("should emit blur event", () => { - spyOn(component.blur, "emit"); + it('should emit blur event', () => { + spyOn(component.blur, 'emit'); - component.onBlur(null); + component.onBlur(null); - expect(component.blur.emit).toHaveBeenCalled(); - }); + expect(component.blur.emit).toHaveBeenCalled(); + }); - it("should emit change event", () => { - spyOn(component.change, "emit"); + it('should emit change event', () => { + spyOn(component.change, 'emit'); - component.onChange(null); + component.onChange(null); - expect(component.change.emit).toHaveBeenCalled(); - }); + expect(component.change.emit).toHaveBeenCalled(); + }); - it("should emit focus event", () => { - spyOn(component.focus, "emit"); + it('should emit focus event', () => { + spyOn(component.focus, 'emit'); - component.onFocus(null); + component.onFocus(null); - expect(component.focus.emit).toHaveBeenCalled(); - }); + expect(component.focus.emit).toHaveBeenCalled(); + }); }); diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/timepicker/dynamic-ng-bootstrap-timepicker.component.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/timepicker/dynamic-ng-bootstrap-timepicker.component.ts index e8c8866919c..94b1ce272fb 100644 --- a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/timepicker/dynamic-ng-bootstrap-timepicker.component.ts +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/timepicker/dynamic-ng-bootstrap-timepicker.component.ts @@ -1,23 +1,40 @@ -import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild } from "@angular/core"; -import { UntypedFormGroup, ReactiveFormsModule } from "@angular/forms"; -import { NgbTimepicker, NgbTimepickerConfig, NgbTimepickerModule } from "@ng-bootstrap/ng-bootstrap"; -import { NgClass } from "@angular/common"; -import { DynamicFormControlComponent } from "@ng-dynamic-forms/core/component/dynamic-form-control.component"; +import { NgClass } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + Output, + ViewChild, +} from '@angular/core'; +import { + ReactiveFormsModule, + UntypedFormGroup, +} from '@angular/forms'; +import { + NgbTimepicker, + NgbTimepickerConfig, + NgbTimepickerModule, +} from '@ng-bootstrap/ng-bootstrap'; +import { DynamicFormControlComponent } from '@ng-dynamic-forms/core/component/dynamic-form-control.component'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { DynamicTimePickerModel } from '@ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model'; import { DynamicFormLayout, DynamicFormLayoutService, -} from "@ng-dynamic-forms/core/service/dynamic-form-layout.service"; -import { DynamicFormControlLayout } from "@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model"; -import { DynamicTimePickerModel } from "@ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model"; -import { DynamicFormValidationService } from "@ng-dynamic-forms/core/service/dynamic-form-validation.service"; +} from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; @Component({ - selector: "dynamic-ng-bootstrap-timepicker", - templateUrl: "./dynamic-ng-bootstrap-timepicker.component.html", - changeDetection: ChangeDetectionStrategy.OnPush, - standalone: true, - imports: [ReactiveFormsModule, NgbTimepickerModule, NgClass] + selector: 'dynamic-ng-bootstrap-timepicker', + templateUrl: './dynamic-ng-bootstrap-timepicker.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [ + NgbTimepickerModule, + NgClass, + ReactiveFormsModule, + ], }) export class DynamicNGBootstrapTimePickerComponent extends DynamicFormControlComponent { @Input() formLayout?: DynamicFormLayout; @@ -29,11 +46,11 @@ export class DynamicNGBootstrapTimePickerComponent extends DynamicFormControlCom @Output() change: EventEmitter = new EventEmitter(); @Output() focus: EventEmitter = new EventEmitter(); - @ViewChild(NgbTimepicker, {static: true}) ngbTimePicker!: NgbTimepicker; + @ViewChild(NgbTimepicker, { static: true }) ngbTimePicker!: NgbTimepicker; constructor(protected layoutService: DynamicFormLayoutService, protected validationService: DynamicFormValidationService, public config: NgbTimepickerConfig) { - super(layoutService, validationService); + super(layoutService, validationService); } } From a17b163384bada5b608f753cbf391055637a8b38 Mon Sep 17 00:00:00 2001 From: FrancescoMolinaro Date: Fri, 28 Nov 2025 17:01:12 +0100 Subject: [PATCH 6/6] [CST-22299] reintroduce rating/slider/editor/colorpicker models --- ...c-form-control-container.component.spec.ts | 58 ++++++----- .../dynamic-colorpicker.model.spec.ts | 35 +++++++ .../colorpicker/dynamic-colorpicker.model.ts | 31 ++++++ .../model/editor/dynamic-editor.model.spec.ts | 42 ++++++++ .../core/model/editor/dynamic-editor.model.ts | 19 ++++ .../model/rating/dynamic-rating.model.spec.ts | 35 +++++++ .../core/model/rating/dynamic-rating.model.ts | 24 +++++ .../model/slider/dynamic-slider.model.spec.ts | 48 +++++++++ .../core/model/slider/dynamic-slider.model.ts | 37 +++++++ .../core/service/dynamic-form.service.spec.ts | 30 ++++-- .../core/service/dynamic-form.service.ts | 32 ++++++ ...dynamic-ng-bootstrap-rating.component.html | 12 +++ ...amic-ng-bootstrap-rating.component.spec.ts | 98 +++++++++++++++++++ .../dynamic-ng-bootstrap-rating.component.ts | 59 +++++++++++ 14 files changed, 531 insertions(+), 29 deletions(-) create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/colorpicker/dynamic-colorpicker.model.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/colorpicker/dynamic-colorpicker.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/editor/dynamic-editor.model.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/editor/dynamic-editor.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/rating/dynamic-rating.model.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/rating/dynamic-rating.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/slider/dynamic-slider.model.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/core/model/slider/dynamic-slider.model.ts create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/rating/dynamic-ng-bootstrap-rating.component.html create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/rating/dynamic-ng-bootstrap-rating.component.spec.ts create mode 100644 src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/rating/dynamic-ng-bootstrap-rating.component.ts diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts index 701f6feb980..705993cd8d0 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts @@ -29,14 +29,18 @@ import { DynamicListDirective } from '@ng-dynamic-forms/core/directive/dynamic-l import { DynamicTemplateDirective } from '@ng-dynamic-forms/core/directive/dynamic-template.directive'; import { DynamicCheckboxModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox.model'; import { DynamicCheckboxGroupModel } from '@ng-dynamic-forms/core/model/checkbox/dynamic-checkbox-group.model'; +import { DynamicColorPickerModel } from '@ng-dynamic-forms/core/model/colorpicker/dynamic-colorpicker.model'; import { DynamicDatePickerModel } from '@ng-dynamic-forms/core/model/datepicker/dynamic-datepicker.model'; import { DynamicFormControlModel } from '@ng-dynamic-forms/core/model/dynamic-form-control.model'; +import { DynamicEditorModel } from '@ng-dynamic-forms/core/model/editor/dynamic-editor.model'; import { DynamicFileUploadModel } from '@ng-dynamic-forms/core/model/file-upload/dynamic-file-upload.model'; import { DynamicFormArrayModel } from '@ng-dynamic-forms/core/model/form-array/dynamic-form-array.model'; import { DynamicFormGroupModel } from '@ng-dynamic-forms/core/model/form-group/dynamic-form-group.model'; import { DynamicInputModel } from '@ng-dynamic-forms/core/model/input/dynamic-input.model'; import { DynamicRadioGroupModel } from '@ng-dynamic-forms/core/model/radio/dynamic-radio-group.model'; +import { DynamicRatingModel } from '@ng-dynamic-forms/core/model/rating/dynamic-rating.model'; import { DynamicSelectModel } from '@ng-dynamic-forms/core/model/select/dynamic-select.model'; +import { DynamicSliderModel } from '@ng-dynamic-forms/core/model/slider/dynamic-slider.model'; import { DynamicSwitchModel } from '@ng-dynamic-forms/core/model/switch/dynamic-switch.model'; import { DynamicTextAreaModel } from '@ng-dynamic-forms/core/model/textarea/dynamic-textarea.model'; import { DynamicTimePickerModel } from '@ng-dynamic-forms/core/model/timepicker/dynamic-timepicker.model'; @@ -105,17 +109,21 @@ describe('DsDynamicFormControlContainerComponent test suite', () => { const formModel = [ new DynamicCheckboxModel({ id: 'checkbox' }), new DynamicCheckboxGroupModel({ id: 'checkboxGroup', group: [] }), + new DynamicColorPickerModel({ id: 'colorpicker' }), new DynamicDatePickerModel({ id: 'datepicker' }), + new DynamicEditorModel({ id: 'editor' }), new DynamicFileUploadModel({ id: 'upload', url: '' }), new DynamicFormArrayModel({ id: 'formArray', groupFactory: () => [] }), new DynamicFormGroupModel({ id: 'formGroup', group: [] }), new DynamicInputModel({ id: 'input', maxLength: 51 }), new DynamicRadioGroupModel({ id: 'radioGroup' }), + new DynamicRatingModel({ id: 'rating' }), new DynamicSelectModel({ id: 'select', options: [{ value: 'One' }, { value: 'Two' }], value: 'One', }), + new DynamicSliderModel({ id: 'slider' }), new DynamicSwitchModel({ id: 'switch' }), new DynamicTextAreaModel({ id: 'textarea' }), new DynamicTimePickerModel({ id: 'timepicker' }), @@ -188,7 +196,7 @@ describe('DsDynamicFormControlContainerComponent test suite', () => { }), new DynamicQualdropModel({ id: 'combobox', readOnly: false, required: false }), ]; - const testModel = formModel[6]; + const testModel = formModel[8]; let formGroup: UntypedFormGroup; let fixture: ComponentFixture; let component: DsDynamicFormControlContainerComponent; @@ -343,28 +351,32 @@ describe('DsDynamicFormControlContainerComponent test suite', () => { const testFn = dsDynamicFormControlMapFn; expect(testFn(formModel[0])).toEqual(DynamicNGBootstrapCheckboxComponent); expect(testFn(formModel[1])).toEqual(DynamicNGBootstrapCheckboxGroupComponent); - expect(testFn(formModel[2])).toEqual(DsDatePickerInlineComponent); - (formModel[2] as DynamicDatePickerModel).inline = true; - expect(testFn(formModel[2])).toEqual(DynamicNGBootstrapCalendarComponent); - expect(testFn(formModel[3])).toBeNull(); - expect(testFn(formModel[4])).toEqual(DsDynamicFormArrayComponent); - expect(testFn(formModel[5])).toEqual(DsDynamicFormGroupComponent); - expect(testFn(formModel[6])).toEqual(DynamicNGBootstrapInputComponent); - expect(testFn(formModel[7])).toEqual(DynamicNGBootstrapRadioGroupComponent); - expect(testFn(formModel[8])).toEqual(DynamicNGBootstrapSelectComponent); - expect(testFn(formModel[9])).toBeNull(); - expect(testFn(formModel[10])).toEqual(DynamicNGBootstrapTextAreaComponent); - expect(testFn(formModel[11])).toEqual(DynamicNGBootstrapTimePickerComponent); - expect(testFn(formModel[12])).toEqual(DsDynamicOneboxComponent); - expect(testFn(formModel[13])).toEqual(DsDynamicScrollableDropdownComponent); - expect(testFn(formModel[14])).toEqual(DsDynamicTagComponent); - expect(testFn(formModel[15])).toEqual(DsDynamicListComponent); - expect(testFn(formModel[16])).toEqual(DsDynamicListComponent); - expect(testFn(formModel[17])).toEqual(DsDynamicRelationGroupComponent); - expect(testFn(formModel[18])).toEqual(DsDatePickerComponent); - expect(testFn(formModel[19])).toEqual(DsDynamicLookupComponent); - expect(testFn(formModel[20])).toEqual(DsDynamicLookupComponent); - expect(testFn(formModel[21])).toEqual(DsDynamicFormGroupComponent); + expect(testFn(formModel[2])).toBeNull(); + expect(testFn(formModel[3])).toEqual(DsDatePickerInlineComponent); + (formModel[3] as DynamicDatePickerModel).inline = true; + expect(testFn(formModel[3])).toEqual(DynamicNGBootstrapCalendarComponent); + expect(testFn(formModel[4])).toBeNull(); + expect(testFn(formModel[5])).toBeNull(); + expect(testFn(formModel[6])).toEqual(DsDynamicFormArrayComponent); + expect(testFn(formModel[7])).toEqual(DsDynamicFormGroupComponent); + expect(testFn(formModel[8])).toEqual(DynamicNGBootstrapInputComponent); + expect(testFn(formModel[9])).toEqual(DynamicNGBootstrapRadioGroupComponent); + expect(testFn(formModel[10])).toBeNull(); + expect(testFn(formModel[11])).toEqual(DynamicNGBootstrapSelectComponent); + expect(testFn(formModel[12])).toBeNull(); + expect(testFn(formModel[13])).toBeNull(); + expect(testFn(formModel[14])).toEqual(DynamicNGBootstrapTextAreaComponent); + expect(testFn(formModel[15])).toEqual(DynamicNGBootstrapTimePickerComponent); + expect(testFn(formModel[16])).toEqual(DsDynamicOneboxComponent); + expect(testFn(formModel[17])).toEqual(DsDynamicScrollableDropdownComponent); + expect(testFn(formModel[18])).toEqual(DsDynamicTagComponent); + expect(testFn(formModel[19])).toEqual(DsDynamicListComponent); + expect(testFn(formModel[20])).toEqual(DsDynamicListComponent); + expect(testFn(formModel[21])).toEqual(DsDynamicRelationGroupComponent); + expect(testFn(formModel[22])).toEqual(DsDatePickerComponent); + expect(testFn(formModel[23])).toEqual(DsDynamicLookupComponent); + expect(testFn(formModel[24])).toEqual(DsDynamicLookupComponent); + expect(testFn(formModel[25])).toEqual(DsDynamicFormGroupComponent); }); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/model/colorpicker/dynamic-colorpicker.model.spec.ts b/src/external-libraries/ng-dynamic-forms/core/model/colorpicker/dynamic-colorpicker.model.spec.ts new file mode 100644 index 00000000000..ddd60ddbd41 --- /dev/null +++ b/src/external-libraries/ng-dynamic-forms/core/model/colorpicker/dynamic-colorpicker.model.spec.ts @@ -0,0 +1,35 @@ +import { + DYNAMIC_FORM_CONTROL_TYPE_COLORPICKER, + DynamicColorPickerModel, +} from './dynamic-colorpicker.model'; + +describe('DynamicColorPickerModel test suite', () => { + let model: DynamicColorPickerModel; + const config = { + id: 'colorpicker', + value: '#ffffff', + }; + + beforeEach(() => model = new DynamicColorPickerModel(config)); + + it('should initialize correctly', () => { + expect(model.disabled).toBe(false); + expect(model.format).toBeNull(); + expect(model.hidden).toBe(false); + expect(model.id).toEqual(config.id); + expect(model.inline).toBe(false); + expect(model.label).toBeNull(); + expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_COLORPICKER); + expect(model.value).toBe(config.value); + expect(model.disabledChanges).toBeDefined(); + expect(model.valueChanges).toBeDefined(); + }); + + it('should serialize correctly', () => { + const json = JSON.parse(JSON.stringify(model)); + + expect(json.id).toEqual(model.id); + expect(json.value).toBe(model.value); + expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_COLORPICKER); + }); +}); diff --git a/src/external-libraries/ng-dynamic-forms/core/model/colorpicker/dynamic-colorpicker.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/colorpicker/dynamic-colorpicker.model.ts new file mode 100644 index 00000000000..cd8916b1fee --- /dev/null +++ b/src/external-libraries/ng-dynamic-forms/core/model/colorpicker/dynamic-colorpicker.model.ts @@ -0,0 +1,31 @@ +import { serializable } from '../../decorator/serializable.decorator'; +import { + isBoolean, + isString, +} from '../../utils/core.utils'; +import { + DynamicFormValueControlModel, + DynamicFormValueControlModelConfig, +} from '../dynamic-form-value-control.model'; +import { DynamicFormControlLayout } from '../misc/dynamic-form-control-layout.model'; + +export const DYNAMIC_FORM_CONTROL_TYPE_COLORPICKER = 'COLORPICKER'; + +export interface DynamicColorPickerModelConfig extends DynamicFormValueControlModelConfig { + format?: string; + inline?: boolean; +} + +export class DynamicColorPickerModel extends DynamicFormValueControlModel { + @serializable() format: string | null; + @serializable() inline: boolean; + + @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_COLORPICKER; + + constructor(config: DynamicColorPickerModelConfig, layout?: DynamicFormControlLayout) { + super(config, layout); + + this.format = isString(config.format) ? config.format : null; + this.inline = isBoolean(config.inline) ? config.inline : false; + } +} diff --git a/src/external-libraries/ng-dynamic-forms/core/model/editor/dynamic-editor.model.spec.ts b/src/external-libraries/ng-dynamic-forms/core/model/editor/dynamic-editor.model.spec.ts new file mode 100644 index 00000000000..3e9c0371bb2 --- /dev/null +++ b/src/external-libraries/ng-dynamic-forms/core/model/editor/dynamic-editor.model.spec.ts @@ -0,0 +1,42 @@ +import { + DYNAMIC_FORM_CONTROL_TYPE_EDITOR, + DynamicEditorModel, +} from './dynamic-editor.model'; + +describe('DynamicEditorModel test suite', () => { + let model: DynamicEditorModel; + const config: any = { + id: 'editor', + validators: { required: null, minLength: 5 }, + }; + + beforeEach(() => model = new DynamicEditorModel(config)); + + it('should initialize correctly', () => { + expect(model.disabled).toBe(false); + expect(model.errorMessages).toBeNull(); + expect(model.hasErrorMessages).toBe(false); + expect(model.hidden).toBe(false); + expect(model.id).toEqual(config.id); + expect(model.label).toBeNull(); + expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_EDITOR); + expect(model.value).toBeNull(); + expect(model.disabledChanges).toBeDefined(); + expect(model.valueChanges).toBeDefined(); + }); + + it('should set disabled property correctly', () => { + model.disabled = true; + + expect(model.disabled).toBe(true); + }); + + it('should serialize correctly', () => { + const json = JSON.parse(JSON.stringify(model)); + + expect(json.id).toEqual(model.id); + expect(Object.keys(json.validators).length).toBe(Object.keys(model.validators as any).length); + expect(json.value).toBe(model.value); + expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_EDITOR); + }); +}); diff --git a/src/external-libraries/ng-dynamic-forms/core/model/editor/dynamic-editor.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/editor/dynamic-editor.model.ts new file mode 100644 index 00000000000..5109dfb6c92 --- /dev/null +++ b/src/external-libraries/ng-dynamic-forms/core/model/editor/dynamic-editor.model.ts @@ -0,0 +1,19 @@ +import { serializable } from '../../decorator/serializable.decorator'; +import { + DynamicInputControlModel, + DynamicInputControlModelConfig, +} from '../dynamic-input-control.model'; +import { DynamicFormControlLayout } from '../misc/dynamic-form-control-layout.model'; + +export const DYNAMIC_FORM_CONTROL_TYPE_EDITOR = 'EDITOR'; +// eslint-disable-next-line @typescript-eslint/no-empty-object-type +export interface DynamicEditorModelConfig extends DynamicInputControlModelConfig { +} + +export class DynamicEditorModel extends DynamicInputControlModel { + @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_EDITOR; + + constructor(config: DynamicEditorModelConfig, layout?: DynamicFormControlLayout) { + super(config, layout); + } +} diff --git a/src/external-libraries/ng-dynamic-forms/core/model/rating/dynamic-rating.model.spec.ts b/src/external-libraries/ng-dynamic-forms/core/model/rating/dynamic-rating.model.spec.ts new file mode 100644 index 00000000000..739f0421b2c --- /dev/null +++ b/src/external-libraries/ng-dynamic-forms/core/model/rating/dynamic-rating.model.spec.ts @@ -0,0 +1,35 @@ +import { + DYNAMIC_FORM_CONTROL_TYPE_RATING, + DynamicRatingModel, +} from './dynamic-rating.model'; + +describe('DynamicRatingModel test suite', () => { + let model: DynamicRatingModel; + const config = { + id: 'rating', + max: 5, + value: 2, + }; + + beforeEach(() => model = new DynamicRatingModel(config)); + + it('should initialize correctly', () => { + expect(model.disabled).toBe(false); + expect(model.hidden).toBe(false); + expect(model.id).toEqual(config.id); + expect(model.label).toBeNull(); + expect(model.max).toBe(config.max); + expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_RATING); + expect(model.value).toBe(config.value); + expect(model.disabledChanges).toBeDefined(); + expect(model.valueChanges).toBeDefined(); + }); + + it('should serialize correctly', () => { + const json = JSON.parse(JSON.stringify(model)); + + expect(json.id).toEqual(model.id); + expect(json.value).toBe(model.value); + expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_RATING); + }); +}); diff --git a/src/external-libraries/ng-dynamic-forms/core/model/rating/dynamic-rating.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/rating/dynamic-rating.model.ts new file mode 100644 index 00000000000..ed54d2c5d03 --- /dev/null +++ b/src/external-libraries/ng-dynamic-forms/core/model/rating/dynamic-rating.model.ts @@ -0,0 +1,24 @@ +import { serializable } from '../../decorator/serializable.decorator'; +import { isNumber } from '../../utils/core.utils'; +import { + DynamicFormValueControlModel, + DynamicFormValueControlModelConfig, +} from '../dynamic-form-value-control.model'; +import { DynamicFormControlLayout } from '../misc/dynamic-form-control-layout.model'; + +export const DYNAMIC_FORM_CONTROL_TYPE_RATING = 'RATING'; + +export interface DynamicRatingModelConfig extends DynamicFormValueControlModelConfig { + max?: number; +} + +export class DynamicRatingModel extends DynamicFormValueControlModel { + @serializable() max: number | null; + @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_RATING; + + constructor(config: DynamicRatingModelConfig, layout?: DynamicFormControlLayout) { + super(config, layout); + + this.max = isNumber(config.max) ? config.max : 10; + } +} diff --git a/src/external-libraries/ng-dynamic-forms/core/model/slider/dynamic-slider.model.spec.ts b/src/external-libraries/ng-dynamic-forms/core/model/slider/dynamic-slider.model.spec.ts new file mode 100644 index 00000000000..7bda497724a --- /dev/null +++ b/src/external-libraries/ng-dynamic-forms/core/model/slider/dynamic-slider.model.spec.ts @@ -0,0 +1,48 @@ +import { + DYNAMIC_FORM_CONTROL_TYPE_SLIDER, + DynamicSliderModel, +} from './dynamic-slider.model'; + +describe('DynamicSliderModel test suite', () => { + let model: DynamicSliderModel; + const config = { + id: 'slider', + min: 0, + max: 100, + step: 1, + value: 27, + additional: { + test: true, + }, + }; + + beforeEach(() => model = new DynamicSliderModel(config)); + + it('should initialize correctly', () => { + expect(model.disabled).toBe(false); + expect(model.hidden).toBe(false); + expect(model.id).toEqual(config.id); + expect(model.label).toBeNull(); + expect(model.min).toBe(config.min); + expect(model.max).toBe(config.max); + expect(model.step).toBe(config.step); + expect(model.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_SLIDER); + expect(model.value).toBe(config.value); + expect(model.vertical).toBe(false); + expect(model.disabledChanges).toBeDefined(); + expect(model.valueChanges).toBeDefined(); + }); + + it('should get additional', () => { + + expect(model.getAdditional('test', null)).toBe(true); + }); + + it('should serialize correctly', () => { + const json = JSON.parse(JSON.stringify(model)); + + expect(json.id).toEqual(model.id); + expect(json.value).toBe(model.value); + expect(json.type).toEqual(DYNAMIC_FORM_CONTROL_TYPE_SLIDER); + }); +}); diff --git a/src/external-libraries/ng-dynamic-forms/core/model/slider/dynamic-slider.model.ts b/src/external-libraries/ng-dynamic-forms/core/model/slider/dynamic-slider.model.ts new file mode 100644 index 00000000000..2101506dc8c --- /dev/null +++ b/src/external-libraries/ng-dynamic-forms/core/model/slider/dynamic-slider.model.ts @@ -0,0 +1,37 @@ +import { serializable } from '../../decorator/serializable.decorator'; +import { + isBoolean, + isNumber, +} from '../../utils/core.utils'; +import { + DynamicFormValueControlModel, + DynamicFormValueControlModelConfig, +} from '../dynamic-form-value-control.model'; +import { DynamicFormControlLayout } from '../misc/dynamic-form-control-layout.model'; + +export const DYNAMIC_FORM_CONTROL_TYPE_SLIDER = 'SLIDER'; + +export interface DynamicSliderModelConfig extends DynamicFormValueControlModelConfig { + max?: number; + min?: number; + step?: number; + vertical?: boolean; +} + +export class DynamicSliderModel extends DynamicFormValueControlModel { + @serializable() max: number | null; + @serializable() min: number | null; + @serializable() step: number | null; + @serializable() vertical: boolean; + + @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_SLIDER; + + constructor(config: DynamicSliderModelConfig, layout?: DynamicFormControlLayout) { + super(config, layout); + + this.max = isNumber(config.max) ? config.max : 10; + this.min = isNumber(config.min) ? config.min : 0; + this.step = isNumber(config.step) ? config.step : 1; + this.vertical = isBoolean(config.vertical) ? config.vertical : false; + } +} diff --git a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.spec.ts b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.spec.ts index 38b08e4e478..01b6aac0894 100644 --- a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.spec.ts +++ b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.spec.ts @@ -13,10 +13,12 @@ import { import { DynamicCheckboxModel } from '../model/checkbox/dynamic-checkbox.model'; import { DynamicCheckboxGroupModel } from '../model/checkbox/dynamic-checkbox-group.model'; +import { DynamicColorPickerModel } from '../model/colorpicker/dynamic-colorpicker.model'; import { DynamicDatePickerModel } from '../model/datepicker/dynamic-datepicker.model'; import { DynamicDateControlModel } from '../model/dynamic-date-control.model'; import { DynamicFormControlModel } from '../model/dynamic-form-control.model'; import { DynamicFormValueControlModel } from '../model/dynamic-form-value-control.model'; +import { DynamicEditorModel } from '../model/editor/dynamic-editor.model'; import { DynamicFileUploadModel } from '../model/file-upload/dynamic-file-upload.model'; import { DynamicFormArrayModel } from '../model/form-array/dynamic-form-array.model'; import { @@ -25,7 +27,9 @@ import { } from '../model/form-group/dynamic-form-group.model'; import { DynamicInputModel } from '../model/input/dynamic-input.model'; import { DynamicRadioGroupModel } from '../model/radio/dynamic-radio-group.model'; +import { DynamicRatingModel } from '../model/rating/dynamic-rating.model'; import { DynamicSelectModel } from '../model/select/dynamic-select.model'; +import { DynamicSliderModel } from '../model/slider/dynamic-slider.model'; import { DynamicSwitchModel } from '../model/switch/dynamic-switch.model'; import { DynamicTextAreaModel } from '../model/textarea/dynamic-textarea.model'; import { DynamicTimePickerModel } from '../model/timepicker/dynamic-timepicker.model'; @@ -33,7 +37,6 @@ import { DynamicFormService } from './dynamic-form.service'; import { DynamicFormComponentService } from './dynamic-form-component.service'; import { DynamicFormValidationService } from './dynamic-form-validation.service'; - describe('DynamicFormService test suite', () => { let testModel: DynamicFormModel; let service: DynamicFormService; @@ -131,10 +134,14 @@ describe('DynamicFormService test suite', () => { ], }, ), + new DynamicSliderModel({ id: 'testSlider' }), new DynamicSwitchModel({ id: 'testSwitch' }), new DynamicDatePickerModel({ id: 'testDatepicker', value: new Date() }), new DynamicFileUploadModel({ id: 'testFileUpload' }), + new DynamicEditorModel({ id: 'testEditor' }), new DynamicTimePickerModel({ id: 'testTimePicker' }), + new DynamicRatingModel({ id: 'testRating' }), + new DynamicColorPickerModel({ id: 'testColorPicker' }), ]; }); @@ -156,7 +163,10 @@ describe('DynamicFormService test suite', () => { expect(formGroup.get('testSelect') instanceof UntypedFormControl).toBe(true); expect(formGroup.get('testTextArea') instanceof UntypedFormControl).toBe(true); expect(formGroup.get('testFileUpload') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testEditor') instanceof UntypedFormControl).toBe(true); expect(formGroup.get('testTimePicker') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testRating') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testColorPicker') instanceof UntypedFormControl).toBe(true); }); @@ -174,11 +184,15 @@ describe('DynamicFormService test suite', () => { expect(formModel[5] instanceof DynamicCheckboxModel).toBe(true); expect(formModel[6] instanceof DynamicFormArrayModel).toBe(true); expect(formModel[7] instanceof DynamicFormGroupModel).toBe(true); - expect(formModel[8] instanceof DynamicSwitchModel).toBe(true); - expect(formModel[9] instanceof DynamicDatePickerModel).toBe(true); - expect((formModel[9] as DynamicDateControlModel).value instanceof Date).toBe(true); - expect(formModel[10] instanceof DynamicFileUploadModel).toBe(true); - expect(formModel[11] instanceof DynamicTimePickerModel).toBe(true); + expect(formModel[8] instanceof DynamicSliderModel).toBe(true); + expect(formModel[9] instanceof DynamicSwitchModel).toBe(true); + expect(formModel[10] instanceof DynamicDatePickerModel).toBe(true); + expect((formModel[10] as DynamicDateControlModel).value instanceof Date).toBe(true); + expect(formModel[11] instanceof DynamicFileUploadModel).toBe(true); + expect(formModel[12] instanceof DynamicEditorModel).toBe(true); + expect(formModel[13] instanceof DynamicTimePickerModel).toBe(true); + expect(formModel[14] instanceof DynamicRatingModel).toBe(true); + expect(formModel[15] instanceof DynamicColorPickerModel).toBe(true); }); @@ -196,10 +210,14 @@ describe('DynamicFormService test suite', () => { expect(service.findById('testInput', testModel) instanceof DynamicFormControlModel).toBe(true); expect(service.findById('testRadioGroup', testModel) instanceof DynamicFormControlModel).toBe(true); expect(service.findById('testSelect', testModel) instanceof DynamicFormControlModel).toBe(true); + expect(service.findById('testSlider', testModel) instanceof DynamicFormControlModel).toBe(true); expect(service.findById('testSwitch', testModel) instanceof DynamicFormControlModel).toBe(true); expect(service.findById('testTextArea', testModel) instanceof DynamicFormControlModel).toBe(true); expect(service.findById('testFileUpload', testModel) instanceof DynamicFormControlModel).toBe(true); + expect(service.findById('testEditor', testModel) instanceof DynamicEditorModel).toBe(true); expect(service.findById('testTimePicker', testModel) instanceof DynamicTimePickerModel).toBe(true); + expect(service.findById('testRating', testModel) instanceof DynamicRatingModel).toBe(true); + expect(service.findById('testColorPicker', testModel) instanceof DynamicColorPickerModel).toBe(true); }); diff --git a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.ts b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.ts index 42b6ad7e8e4..5fcaff12a7d 100644 --- a/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.ts +++ b/src/external-libraries/ng-dynamic-forms/core/service/dynamic-form.service.ts @@ -16,12 +16,20 @@ import { DYNAMIC_FORM_CONTROL_TYPE_CHECKBOX_GROUP, DynamicCheckboxGroupModel, } from '../model/checkbox/dynamic-checkbox-group.model'; +import { + DYNAMIC_FORM_CONTROL_TYPE_COLORPICKER, + DynamicColorPickerModel, +} from '../model/colorpicker/dynamic-colorpicker.model'; import { DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER, DynamicDatePickerModel, } from '../model/datepicker/dynamic-datepicker.model'; import { DynamicFormControlModel } from '../model/dynamic-form-control.model'; import { DynamicFormValueControlModel } from '../model/dynamic-form-value-control.model'; +import { + DYNAMIC_FORM_CONTROL_TYPE_EDITOR, + DynamicEditorModel, +} from '../model/editor/dynamic-editor.model'; import { DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD, DynamicFileUploadModel, @@ -50,10 +58,18 @@ import { DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP, DynamicRadioGroupModel, } from '../model/radio/dynamic-radio-group.model'; +import { + DYNAMIC_FORM_CONTROL_TYPE_RATING, + DynamicRatingModel, +} from '../model/rating/dynamic-rating.model'; import { DYNAMIC_FORM_CONTROL_TYPE_SELECT, DynamicSelectModel, } from '../model/select/dynamic-select.model'; +import { + DYNAMIC_FORM_CONTROL_TYPE_SLIDER, + DynamicSliderModel, +} from '../model/slider/dynamic-slider.model'; import { DYNAMIC_FORM_CONTROL_TYPE_SWITCH, DynamicSwitchModel, @@ -334,10 +350,18 @@ export class DynamicFormService { formModel.push(new DynamicCheckboxGroupModel(model, layout)); break; + case DYNAMIC_FORM_CONTROL_TYPE_COLORPICKER: + formModel.push(new DynamicColorPickerModel(model, layout)); + break; + case DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER: formModel.push(new DynamicDatePickerModel(model, layout)); break; + case DYNAMIC_FORM_CONTROL_TYPE_EDITOR: + formModel.push(new DynamicEditorModel(model, layout)); + break; + case DYNAMIC_FORM_CONTROL_TYPE_FILE_UPLOAD: model.value = null; formModel.push(new DynamicFileUploadModel(model, layout)); @@ -356,10 +380,18 @@ export class DynamicFormService { formModel.push(new DynamicRadioGroupModel(model, layout)); break; + case DYNAMIC_FORM_CONTROL_TYPE_RATING: + formModel.push(new DynamicRatingModel(model, layout)); + break; + case DYNAMIC_FORM_CONTROL_TYPE_SELECT: formModel.push(new DynamicSelectModel(model, layout)); break; + case DYNAMIC_FORM_CONTROL_TYPE_SLIDER: + formModel.push(new DynamicSliderModel(model, layout)); + break; + case DYNAMIC_FORM_CONTROL_TYPE_SWITCH: formModel.push(new DynamicSwitchModel(model, layout)); diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/rating/dynamic-ng-bootstrap-rating.component.html b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/rating/dynamic-ng-bootstrap-rating.component.html new file mode 100644 index 00000000000..2c3d7fc914e --- /dev/null +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/rating/dynamic-ng-bootstrap-rating.component.html @@ -0,0 +1,12 @@ + + + + + diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/rating/dynamic-ng-bootstrap-rating.component.spec.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/rating/dynamic-ng-bootstrap-rating.component.spec.ts new file mode 100644 index 00000000000..3fed1f0b635 --- /dev/null +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/rating/dynamic-ng-bootstrap-rating.component.spec.ts @@ -0,0 +1,98 @@ +import { DebugElement } from '@angular/core'; +import { + ComponentFixture, + inject, + TestBed, + waitForAsync, +} from '@angular/core/testing'; +import { + UntypedFormControl, + UntypedFormGroup, +} from '@angular/forms'; +import { By } from '@angular/platform-browser'; +import { NgbRating } from '@ng-bootstrap/ng-bootstrap'; +import { DynamicRatingModel } from '@ng-dynamic-forms/core/model/rating/dynamic-rating.model'; +import { DynamicFormService } from '@ng-dynamic-forms/core/service/dynamic-form.service'; + +import { DynamicNGBootstrapRatingComponent } from './dynamic-ng-bootstrap-rating.component'; + +describe('DynamicNGBootstrapRatingComponent test suite', () => { + const testModel = new DynamicRatingModel({ id: 'rating' }); + const formModel = [testModel]; + + let formGroup: UntypedFormGroup; + let fixture: ComponentFixture; + let component: DynamicNGBootstrapRatingComponent; + let debugElement: DebugElement; + let testElement: DebugElement; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [DynamicNGBootstrapRatingComponent], + }).compileComponents().then(() => { + fixture = TestBed.createComponent(DynamicNGBootstrapRatingComponent); + + component = fixture.componentInstance; + debugElement = fixture.debugElement; + }); + })); + + beforeEach(inject([DynamicFormService], (service: DynamicFormService) => { + formGroup = service.createFormGroup(formModel); + + component.group = formGroup; + component.model = testModel; + + fixture.detectChanges(); + + testElement = debugElement.query(By.css(`ngb-rating[id="${testModel.id}"]`)); + })); + + it('should initialize correctly', () => { + expect(component.control instanceof UntypedFormControl).toBe(true); + expect(component.group instanceof UntypedFormGroup).toBe(true); + expect(component.model instanceof DynamicRatingModel).toBe(true); + expect(component.ngbRating instanceof NgbRating).toBe(true); + + expect(component.blur).toBeDefined(); + expect(component.change).toBeDefined(); + expect(component.focus).toBeDefined(); + + expect(component.onBlur).toBeDefined(); + expect(component.onChange).toBeDefined(); + expect(component.onFocus).toBeDefined(); + + expect(component.hasFocus).toBe(false); + expect(component.isValid).toBe(true); + expect(component.isInvalid).toBe(false); + expect(component.showErrorMessages).toBe(false); + }); + + it('should have an ngb-rating element', () => { + expect(testElement instanceof DebugElement).toBe(true); + }); + + it('should listen to and emit blur event', () => { + spyOn(component.blur, 'emit'); + + component.onBlur(null); + + expect(component.blur.emit).toHaveBeenCalled(); + }); + + it('should emit change event', () => { + spyOn(component.change, 'emit'); + + component.onChange(null); + + expect(component.change.emit).toHaveBeenCalled(); + }); + + it('should listen to and emit focus event', () => { + spyOn(component.focus, 'emit'); + + component.onFocus(null); + + expect(component.focus.emit).toHaveBeenCalled(); + }); +}); diff --git a/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/rating/dynamic-ng-bootstrap-rating.component.ts b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/rating/dynamic-ng-bootstrap-rating.component.ts new file mode 100644 index 00000000000..ef5ee9389bb --- /dev/null +++ b/src/external-libraries/ng-dynamic-forms/ui-ng-bootstrap/rating/dynamic-ng-bootstrap-rating.component.ts @@ -0,0 +1,59 @@ +import { NgClass } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + EventEmitter, + Input, + Output, + ViewChild, +} from '@angular/core'; +import { + ReactiveFormsModule, + UntypedFormGroup, +} from '@angular/forms'; +import { + NgbRating, + NgbRatingConfig, + NgbRatingModule, +} from '@ng-bootstrap/ng-bootstrap'; +import { DynamicFormControlComponent } from '@ng-dynamic-forms/core/component/dynamic-form-control.component'; +import { DynamicFormControlCustomEvent } from '@ng-dynamic-forms/core/component/dynamic-form-control-event'; +import { DynamicFormControlLayout } from '@ng-dynamic-forms/core/model/misc/dynamic-form-control-layout.model'; +import { DynamicRatingModel } from '@ng-dynamic-forms/core/model/rating/dynamic-rating.model'; +import { + DynamicFormLayout, + DynamicFormLayoutService, +} from '@ng-dynamic-forms/core/service/dynamic-form-layout.service'; +import { DynamicFormValidationService } from '@ng-dynamic-forms/core/service/dynamic-form-validation.service'; + + + +@Component({ + selector: 'dynamic-ng-bootstrap-rating', + templateUrl: './dynamic-ng-bootstrap-rating.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [ + NgbRatingModule, + NgClass, + ReactiveFormsModule, + ], +}) +export class DynamicNGBootstrapRatingComponent extends DynamicFormControlComponent { + @Input() formLayout?: DynamicFormLayout; + @Input() group!: UntypedFormGroup; + @Input() layout?: DynamicFormControlLayout; + @Input() model!: DynamicRatingModel; + + @Output() blur: EventEmitter = new EventEmitter(); + @Output() change: EventEmitter = new EventEmitter(); + @Output() customEvent: EventEmitter = new EventEmitter(); + @Output() focus: EventEmitter = new EventEmitter(); + + @ViewChild(NgbRating, { static: true }) ngbRating!: NgbRating; + + constructor(protected layoutService: DynamicFormLayoutService, + protected validationService: DynamicFormValidationService, + public config: NgbRatingConfig) { + super(layoutService, validationService); + } +}