@beinformed/ui 1.63.2 → 2.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -2419
- package/dist/Constants-BIbEko1E.d.cts +57 -0
- package/dist/Constants-BIbEko1E.d.ts +57 -0
- package/dist/FormModel-40md7nLX.d.ts +457 -0
- package/dist/FormModel-CemlQ_MU.d.cts +457 -0
- package/dist/chunk-2MCBBWEA.js +1 -0
- package/dist/chunk-2MCBBWEA.js.map +1 -0
- package/dist/chunk-52QS5IDA.js +1 -0
- package/dist/chunk-52QS5IDA.js.map +1 -0
- package/dist/chunk-73XVCQCW.js +2 -0
- package/dist/chunk-73XVCQCW.js.map +1 -0
- package/dist/chunk-77CGPEAQ.js +2 -0
- package/dist/chunk-77CGPEAQ.js.map +1 -0
- package/dist/chunk-BE2T4IDL.js +2 -0
- package/dist/chunk-BE2T4IDL.js.map +1 -0
- package/dist/chunk-BODVDNNA.js +2 -0
- package/dist/chunk-BODVDNNA.js.map +1 -0
- package/dist/chunk-CKI2GSM7.js +2 -0
- package/dist/chunk-CKI2GSM7.js.map +1 -0
- package/dist/chunk-CPYNQW3X.js +3 -0
- package/dist/chunk-CPYNQW3X.js.map +1 -0
- package/dist/chunk-ELPRKFLG.js +1 -0
- package/dist/chunk-ELPRKFLG.js.map +1 -0
- package/dist/chunk-EP2OYSVS.js +2 -0
- package/dist/chunk-EP2OYSVS.js.map +1 -0
- package/dist/chunk-FGEQKEJQ.js +2 -0
- package/dist/chunk-FGEQKEJQ.js.map +1 -0
- package/dist/chunk-L7K7QDC2.js +2 -0
- package/dist/chunk-L7K7QDC2.js.map +1 -0
- package/dist/chunk-LHZG2ET5.js +2 -0
- package/dist/chunk-LHZG2ET5.js.map +1 -0
- package/dist/chunk-LYBG43T6.js +2 -0
- package/dist/chunk-LYBG43T6.js.map +1 -0
- package/dist/chunk-MQBYZKME.js +2 -0
- package/dist/chunk-MQBYZKME.js.map +1 -0
- package/dist/chunk-SGXACUOV.js +2 -0
- package/dist/chunk-SGXACUOV.js.map +1 -0
- package/dist/chunk-VGAPPKHA.js +2 -0
- package/dist/chunk-VGAPPKHA.js.map +1 -0
- package/dist/chunk-VI6SO5NT.js +1 -0
- package/dist/chunk-VI6SO5NT.js.map +1 -0
- package/dist/chunk-VV3IT7US.js +1 -0
- package/dist/chunk-VV3IT7US.js.map +1 -0
- package/dist/chunk-WVQSFYWD.js +2 -0
- package/dist/chunk-WVQSFYWD.js.map +1 -0
- package/dist/chunk-YUOGIFZH.js +33 -0
- package/dist/chunk-YUOGIFZH.js.map +1 -0
- package/dist/constants/index.cjs +2 -0
- package/dist/constants/index.cjs.map +1 -0
- package/dist/constants/index.d.cts +28 -0
- package/dist/constants/index.d.ts +28 -0
- package/dist/constants/index.js +2 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/exceptions/index.cjs +2 -0
- package/dist/exceptions/index.cjs.map +1 -0
- package/dist/exceptions/index.d.cts +88 -0
- package/dist/exceptions/index.d.ts +88 -0
- package/dist/exceptions/index.js +2 -0
- package/dist/exceptions/index.js.map +1 -0
- package/dist/index-CgXDAyxM.d.ts +5242 -0
- package/dist/index-Ku2WDvSe.d.cts +5242 -0
- package/dist/index.cjs +34 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +13 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/layouthints/index.cjs +34 -0
- package/dist/layouthints/index.cjs.map +1 -0
- package/dist/layouthints/index.d.cts +322 -0
- package/dist/layouthints/index.d.ts +322 -0
- package/dist/layouthints/index.js +2 -0
- package/dist/layouthints/index.js.map +1 -0
- package/dist/models/index.cjs +34 -0
- package/dist/models/index.cjs.map +1 -0
- package/dist/models/index.d.cts +1133 -0
- package/dist/models/index.d.ts +1133 -0
- package/dist/models/index.js +2 -0
- package/dist/models/index.js.map +1 -0
- package/dist/modularui/index.cjs +34 -0
- package/dist/modularui/index.cjs.map +1 -0
- package/dist/modularui/index.d.cts +216 -0
- package/dist/modularui/index.d.ts +216 -0
- package/dist/modularui/index.js +2 -0
- package/dist/modularui/index.js.map +1 -0
- package/dist/settings/index.cjs +2 -0
- package/dist/settings/index.cjs.map +1 -0
- package/dist/settings/index.d.cts +57 -0
- package/dist/settings/index.d.ts +57 -0
- package/dist/settings/index.js +2 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/types/index.cjs +2 -0
- package/dist/types/index.cjs.map +1 -0
- package/dist/types/index.d.cts +5 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.cjs +33 -0
- package/dist/utils/index.cjs.map +1 -0
- package/dist/utils/index.d.cts +183 -0
- package/dist/utils/index.d.ts +183 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +66 -203
- package/README.md +0 -32
- package/codemods/__testfixtures__/imports.input.txt +0 -41
- package/codemods/__testfixtures__/imports.output.txt +0 -44
- package/codemods/__tests__/imports.spec.js +0 -20
- package/codemods/imports.js +0 -199
- package/esm/builder/__tests__/mergeLayoutHintConfigurations.spec.js.flow +0 -71
- package/esm/builder/index.js +0 -2
- package/esm/builder/index.js.flow +0 -2
- package/esm/builder/index.js.map +0 -1
- package/esm/builder/mergeLayoutHintConfigurations.js +0 -57
- package/esm/builder/mergeLayoutHintConfigurations.js.flow +0 -62
- package/esm/builder/mergeLayoutHintConfigurations.js.map +0 -1
- package/esm/constants/Constants.js +0 -183
- package/esm/constants/Constants.js.flow +0 -190
- package/esm/constants/Constants.js.map +0 -1
- package/esm/constants/LayoutHintConfig.js +0 -167
- package/esm/constants/LayoutHintConfig.js.flow +0 -186
- package/esm/constants/LayoutHintConfig.js.map +0 -1
- package/esm/constants/LayoutHints.js +0 -129
- package/esm/constants/LayoutHints.js.flow +0 -134
- package/esm/constants/LayoutHints.js.map +0 -1
- package/esm/constants/Settings.js +0 -198
- package/esm/constants/Settings.js.flow +0 -269
- package/esm/constants/Settings.js.map +0 -1
- package/esm/constants/index.js +0 -4
- package/esm/constants/index.js.flow +0 -4
- package/esm/constants/index.js.map +0 -1
- package/esm/exceptions/ConfigurationException.js +0 -11
- package/esm/exceptions/ConfigurationException.js.flow +0 -13
- package/esm/exceptions/ConfigurationException.js.map +0 -1
- package/esm/exceptions/FetchException.js +0 -64
- package/esm/exceptions/FetchException.js.flow +0 -101
- package/esm/exceptions/FetchException.js.map +0 -1
- package/esm/exceptions/IllegalArgumentException.js +0 -11
- package/esm/exceptions/IllegalArgumentException.js.flow +0 -12
- package/esm/exceptions/IllegalArgumentException.js.map +0 -1
- package/esm/exceptions/IllegalReturnException.js +0 -10
- package/esm/exceptions/IllegalReturnException.js.flow +0 -11
- package/esm/exceptions/IllegalReturnException.js.map +0 -1
- package/esm/exceptions/IllegalStateException.js +0 -11
- package/esm/exceptions/IllegalStateException.js.flow +0 -12
- package/esm/exceptions/IllegalStateException.js.map +0 -1
- package/esm/exceptions/JsonParseException.js +0 -11
- package/esm/exceptions/JsonParseException.js.flow +0 -12
- package/esm/exceptions/JsonParseException.js.map +0 -1
- package/esm/exceptions/MissingPropertyException.js +0 -11
- package/esm/exceptions/MissingPropertyException.js.flow +0 -13
- package/esm/exceptions/MissingPropertyException.js.map +0 -1
- package/esm/exceptions/NetworkException.js +0 -16
- package/esm/exceptions/NetworkException.js.flow +0 -20
- package/esm/exceptions/NetworkException.js.map +0 -1
- package/esm/exceptions/NotAllowedUriException.js +0 -11
- package/esm/exceptions/NotAllowedUriException.js.flow +0 -12
- package/esm/exceptions/NotAllowedUriException.js.map +0 -1
- package/esm/exceptions/NotFoundException.js +0 -19
- package/esm/exceptions/NotFoundException.js.flow +0 -20
- package/esm/exceptions/NotFoundException.js.map +0 -1
- package/esm/exceptions/ServerRequestException.js +0 -11
- package/esm/exceptions/ServerRequestException.js.flow +0 -12
- package/esm/exceptions/ServerRequestException.js.map +0 -1
- package/esm/exceptions/ThemePropertyException.js +0 -11
- package/esm/exceptions/ThemePropertyException.js.flow +0 -12
- package/esm/exceptions/ThemePropertyException.js.map +0 -1
- package/esm/exceptions/TimeoutException.js +0 -11
- package/esm/exceptions/TimeoutException.js.flow +0 -13
- package/esm/exceptions/TimeoutException.js.map +0 -1
- package/esm/exceptions/UnauthorizedException.js +0 -18
- package/esm/exceptions/UnauthorizedException.js.flow +0 -26
- package/esm/exceptions/UnauthorizedException.js.map +0 -1
- package/esm/exceptions/UnsupportedOperationException.js +0 -11
- package/esm/exceptions/UnsupportedOperationException.js.flow +0 -12
- package/esm/exceptions/UnsupportedOperationException.js.map +0 -1
- package/esm/exceptions/index.js +0 -16
- package/esm/exceptions/index.js.flow +0 -16
- package/esm/exceptions/index.js.map +0 -1
- package/esm/hooks/__tests__/UseModularUIModel.spec.js.flow +0 -193
- package/esm/hooks/__tests__/useAuthentication.spec.js.flow +0 -122
- package/esm/hooks/__tests__/useForm.spec.js.flow +0 -300
- package/esm/hooks/__tests__/useI18n.spec.js.flow +0 -30
- package/esm/hooks/__tests__/useModal.spec.js.flow +0 -67
- package/esm/hooks/__tests__/useModelCatalog.spec.js.flow +0 -180
- package/esm/hooks/__tests__/useModels.spec.js.flow +0 -138
- package/esm/hooks/__tests__/useModularUIBasic.spec.js.flow +0 -126
- package/esm/hooks/__tests__/useNotification.spec.js.flow +0 -47
- package/esm/hooks/__tests__/usePreference.spec.js.flow +0 -72
- package/esm/hooks/__tests__/useProgressIndicator.spec.js.flow +0 -67
- package/esm/hooks/index.js +0 -17
- package/esm/hooks/index.js.flow +0 -17
- package/esm/hooks/index.js.map +0 -1
- package/esm/hooks/useAllFormsOnModel.js +0 -73
- package/esm/hooks/useAllFormsOnModel.js.flow +0 -92
- package/esm/hooks/useAllFormsOnModel.js.map +0 -1
- package/esm/hooks/useAuthentication.js +0 -57
- package/esm/hooks/useAuthentication.js.flow +0 -98
- package/esm/hooks/useAuthentication.js.map +0 -1
- package/esm/hooks/useContent.js +0 -41
- package/esm/hooks/useContent.js.flow +0 -48
- package/esm/hooks/useContent.js.map +0 -1
- package/esm/hooks/useDeepCompareEffect.js +0 -24
- package/esm/hooks/useDeepCompareEffect.js.flow +0 -34
- package/esm/hooks/useDeepCompareEffect.js.map +0 -1
- package/esm/hooks/useForm.js +0 -87
- package/esm/hooks/useForm.js.flow +0 -153
- package/esm/hooks/useForm.js.map +0 -1
- package/esm/hooks/useI18n.js +0 -32
- package/esm/hooks/useI18n.js.flow +0 -46
- package/esm/hooks/useI18n.js.map +0 -1
- package/esm/hooks/useModal.js +0 -35
- package/esm/hooks/useModal.js.flow +0 -46
- package/esm/hooks/useModal.js.map +0 -1
- package/esm/hooks/useModelCatalog.js +0 -199
- package/esm/hooks/useModelCatalog.js.flow +0 -256
- package/esm/hooks/useModelCatalog.js.map +0 -1
- package/esm/hooks/useModels.js +0 -37
- package/esm/hooks/useModels.js.flow +0 -50
- package/esm/hooks/useModels.js.map +0 -1
- package/esm/hooks/useModularUI.js +0 -61
- package/esm/hooks/useModularUI.js.flow +0 -90
- package/esm/hooks/useModularUI.js.map +0 -1
- package/esm/hooks/useModularUIBasic.js +0 -73
- package/esm/hooks/useModularUIBasic.js.flow +0 -101
- package/esm/hooks/useModularUIBasic.js.map +0 -1
- package/esm/hooks/useModularUIModel.js +0 -109
- package/esm/hooks/useModularUIModel.js.flow +0 -165
- package/esm/hooks/useModularUIModel.js.map +0 -1
- package/esm/hooks/useModularUIRequest.js +0 -17
- package/esm/hooks/useModularUIRequest.js.flow +0 -25
- package/esm/hooks/useModularUIRequest.js.map +0 -1
- package/esm/hooks/useNotification.js +0 -31
- package/esm/hooks/useNotification.js.flow +0 -48
- package/esm/hooks/useNotification.js.map +0 -1
- package/esm/hooks/usePreference.js +0 -15
- package/esm/hooks/usePreference.js.flow +0 -27
- package/esm/hooks/usePreference.js.map +0 -1
- package/esm/hooks/useProgressIndicator.js +0 -16
- package/esm/hooks/useProgressIndicator.js.flow +0 -33
- package/esm/hooks/useProgressIndicator.js.map +0 -1
- package/esm/hooks/useRouter.js +0 -31
- package/esm/hooks/useRouter.js.flow +0 -64
- package/esm/hooks/useRouter.js.map +0 -1
- package/esm/i18n/Locale.js +0 -121
- package/esm/i18n/Locale.js.flow +0 -157
- package/esm/i18n/Locale.js.map +0 -1
- package/esm/i18n/Locales.js +0 -132
- package/esm/i18n/Locales.js.flow +0 -171
- package/esm/i18n/Locales.js.map +0 -1
- package/esm/i18n/Message.js +0 -44
- package/esm/i18n/Message.js.flow +0 -66
- package/esm/i18n/Message.js.map +0 -1
- package/esm/i18n/__tests__/Locale.spec.js.flow +0 -108
- package/esm/i18n/__tests__/Locales.spec.js.flow +0 -137
- package/esm/i18n/index.js +0 -5
- package/esm/i18n/index.js.flow +0 -12
- package/esm/i18n/index.js.map +0 -1
- package/esm/i18n/languages.js +0 -206
- package/esm/i18n/languages.js.flow +0 -207
- package/esm/i18n/languages.js.map +0 -1
- package/esm/i18n/translations/beinformed_error_messages_en.nl.js +0 -98
- package/esm/i18n/translations/beinformed_error_messages_en.nl.js.flow +0 -98
- package/esm/i18n/translations/beinformed_error_messages_en.nl.js.map +0 -1
- package/esm/i18n/translations/beinformed_error_messages_nl.nl.js +0 -98
- package/esm/i18n/translations/beinformed_error_messages_nl.nl.js.flow +0 -98
- package/esm/i18n/translations/beinformed_error_messages_nl.nl.js.map +0 -1
- package/esm/i18n/types.js +0 -2
- package/esm/i18n/types.js.flow +0 -23
- package/esm/i18n/types.js.map +0 -1
- package/esm/i18n/withMessage.js +0 -20
- package/esm/i18n/withMessage.js.flow +0 -47
- package/esm/i18n/withMessage.js.map +0 -1
- package/esm/index.js +0 -7
- package/esm/index.js.flow +0 -7
- package/esm/index.js.map +0 -1
- package/esm/models/__tests__/resolveModel.spec.js.flow +0 -34
- package/esm/models/actions/ActionCollection.js +0 -82
- package/esm/models/actions/ActionCollection.js.flow +0 -100
- package/esm/models/actions/ActionCollection.js.map +0 -1
- package/esm/models/actions/ActionModel.js +0 -186
- package/esm/models/actions/ActionModel.js.flow +0 -207
- package/esm/models/actions/ActionModel.js.map +0 -1
- package/esm/models/actions/__mock__/action.js.flow +0 -35
- package/esm/models/actions/__tests__/ActionCollection.spec.js.flow +0 -98
- package/esm/models/actions/__tests__/ActionModel.spec.js.flow +0 -75
- package/esm/models/application/ApplicationModel.js +0 -127
- package/esm/models/application/ApplicationModel.js.flow +0 -151
- package/esm/models/application/ApplicationModel.js.map +0 -1
- package/esm/models/application/__mock__/application.js.flow +0 -14
- package/esm/models/application/__tests__/Application.spec.js.flow +0 -99
- package/esm/models/attributes/AttributeCollection.js +0 -275
- package/esm/models/attributes/AttributeCollection.js.flow +0 -306
- package/esm/models/attributes/AttributeCollection.js.map +0 -1
- package/esm/models/attributes/AttributeContent.js +0 -196
- package/esm/models/attributes/AttributeContent.js.flow +0 -233
- package/esm/models/attributes/AttributeContent.js.map +0 -1
- package/esm/models/attributes/AttributeDataHelper.js +0 -261
- package/esm/models/attributes/AttributeDataHelper.js.flow +0 -323
- package/esm/models/attributes/AttributeDataHelper.js.map +0 -1
- package/esm/models/attributes/AttributeModel.js +0 -816
- package/esm/models/attributes/AttributeModel.js.flow +0 -1007
- package/esm/models/attributes/AttributeModel.js.map +0 -1
- package/esm/models/attributes/AttributeSetModel.js +0 -97
- package/esm/models/attributes/AttributeSetModel.js.flow +0 -117
- package/esm/models/attributes/AttributeSetModel.js.map +0 -1
- package/esm/models/attributes/BooleanAttributeModel.js +0 -287
- package/esm/models/attributes/BooleanAttributeModel.js.flow +0 -319
- package/esm/models/attributes/BooleanAttributeModel.js.map +0 -1
- package/esm/models/attributes/CaptchaAttributeModel.js +0 -53
- package/esm/models/attributes/CaptchaAttributeModel.js.flow +0 -51
- package/esm/models/attributes/CaptchaAttributeModel.js.map +0 -1
- package/esm/models/attributes/ChoiceAttributeModel.js +0 -403
- package/esm/models/attributes/ChoiceAttributeModel.js.flow +0 -499
- package/esm/models/attributes/ChoiceAttributeModel.js.map +0 -1
- package/esm/models/attributes/ChoiceAttributeOptionCollection.js +0 -306
- package/esm/models/attributes/ChoiceAttributeOptionCollection.js.flow +0 -372
- package/esm/models/attributes/ChoiceAttributeOptionCollection.js.map +0 -1
- package/esm/models/attributes/ChoiceAttributeOptionModel.js +0 -335
- package/esm/models/attributes/ChoiceAttributeOptionModel.js.flow +0 -415
- package/esm/models/attributes/ChoiceAttributeOptionModel.js.map +0 -1
- package/esm/models/attributes/CompositeAttributeChildCollection.js +0 -182
- package/esm/models/attributes/CompositeAttributeChildCollection.js.flow +0 -254
- package/esm/models/attributes/CompositeAttributeChildCollection.js.map +0 -1
- package/esm/models/attributes/CompositeAttributeModel.js +0 -374
- package/esm/models/attributes/CompositeAttributeModel.js.flow +0 -439
- package/esm/models/attributes/CompositeAttributeModel.js.map +0 -1
- package/esm/models/attributes/DatetimeAttributeModel.js +0 -458
- package/esm/models/attributes/DatetimeAttributeModel.js.flow +0 -566
- package/esm/models/attributes/DatetimeAttributeModel.js.map +0 -1
- package/esm/models/attributes/HelptextAttributeModel.js +0 -48
- package/esm/models/attributes/HelptextAttributeModel.js.flow +0 -54
- package/esm/models/attributes/HelptextAttributeModel.js.map +0 -1
- package/esm/models/attributes/LabelAttributeModel.js +0 -34
- package/esm/models/attributes/LabelAttributeModel.js.flow +0 -36
- package/esm/models/attributes/LabelAttributeModel.js.map +0 -1
- package/esm/models/attributes/MemoAttributeModel.js +0 -42
- package/esm/models/attributes/MemoAttributeModel.js.flow +0 -43
- package/esm/models/attributes/MemoAttributeModel.js.map +0 -1
- package/esm/models/attributes/MoneyAttributeModel.js +0 -42
- package/esm/models/attributes/MoneyAttributeModel.js.flow +0 -45
- package/esm/models/attributes/MoneyAttributeModel.js.map +0 -1
- package/esm/models/attributes/NumberAttributeModel.js +0 -193
- package/esm/models/attributes/NumberAttributeModel.js.flow +0 -255
- package/esm/models/attributes/NumberAttributeModel.js.map +0 -1
- package/esm/models/attributes/PasswordAttributeModel.js +0 -209
- package/esm/models/attributes/PasswordAttributeModel.js.flow +0 -245
- package/esm/models/attributes/PasswordAttributeModel.js.map +0 -1
- package/esm/models/attributes/StringAttributeModel.js +0 -276
- package/esm/models/attributes/StringAttributeModel.js.flow +0 -314
- package/esm/models/attributes/StringAttributeModel.js.map +0 -1
- package/esm/models/attributes/UploadAttributeModel.js +0 -215
- package/esm/models/attributes/UploadAttributeModel.js.flow +0 -261
- package/esm/models/attributes/UploadAttributeModel.js.map +0 -1
- package/esm/models/attributes/XMLAttributeModel.js +0 -46
- package/esm/models/attributes/XMLAttributeModel.js.flow +0 -51
- package/esm/models/attributes/XMLAttributeModel.js.map +0 -1
- package/esm/models/attributes/__mock__/form.js.flow +0 -6
- package/esm/models/attributes/__mock__/list.js.flow +0 -6
- package/esm/models/attributes/__tests__/AttributeCollection.spec.js.flow +0 -160
- package/esm/models/attributes/__tests__/AttributeCollectionComposite.spec.js.flow +0 -146
- package/esm/models/attributes/__tests__/AttributeContent.spec.js.flow +0 -225
- package/esm/models/attributes/__tests__/AttributeDataHelper.spec.js.flow +0 -634
- package/esm/models/attributes/__tests__/AttributeModel.spec.js.flow +0 -274
- package/esm/models/attributes/__tests__/AttributeSetModel.spec.js.flow +0 -39
- package/esm/models/attributes/__tests__/BooleanAttributeModel.spec.js.flow +0 -107
- package/esm/models/attributes/__tests__/CaptchaAttributeModel.spec.js.flow +0 -13
- package/esm/models/attributes/__tests__/ChoiceAttributeModel.spec.js.flow +0 -750
- package/esm/models/attributes/__tests__/ChoiceAttributeOptionCollection.spec.js.flow +0 -507
- package/esm/models/attributes/__tests__/ChoiceAttributeOptionModel.spec.js.flow +0 -107
- package/esm/models/attributes/__tests__/CompositeAttributeModel.spec.js.flow +0 -467
- package/esm/models/attributes/__tests__/DateAttributeModel.spec.js.flow +0 -134
- package/esm/models/attributes/__tests__/DatetimeAttributeModel.spec.js.flow +0 -206
- package/esm/models/attributes/__tests__/DatetimeAttributeModel_offset.spec.js.flow +0 -345
- package/esm/models/attributes/__tests__/HelptextAttributeModel.spec.js.flow +0 -64
- package/esm/models/attributes/__tests__/LabelAttributeModel.spec.js.flow +0 -13
- package/esm/models/attributes/__tests__/LookupAttributeModel.spec.js.flow +0 -47
- package/esm/models/attributes/__tests__/MemoAttributeModel.spec.js.flow +0 -28
- package/esm/models/attributes/__tests__/MoneyAttributeModel.spec.js.flow +0 -22
- package/esm/models/attributes/__tests__/NumberAttributeModel.spec.js.flow +0 -67
- package/esm/models/attributes/__tests__/PasswordAttributeModel.spec.js.flow +0 -49
- package/esm/models/attributes/__tests__/StringAttributeModel.spec.js.flow +0 -125
- package/esm/models/attributes/__tests__/TimeAttributeModel.spec.js.flow +0 -57
- package/esm/models/attributes/__tests__/TimestampModel.spec.js.flow +0 -43
- package/esm/models/attributes/__tests__/UploadAttributeModel.spec.js.flow +0 -67
- package/esm/models/attributes/__tests__/XMLAttributeModel.spec.js.flow +0 -17
- package/esm/models/attributes/__tests__/_createAttribute.spec.js.flow +0 -106
- package/esm/models/attributes/__tests__/createAttributeComposite.spec.js.flow +0 -151
- package/esm/models/attributes/__tests__/createAttributeDynamicSchema.spec.js.flow +0 -134
- package/esm/models/attributes/_createAttribute.js +0 -86
- package/esm/models/attributes/_createAttribute.js.flow +0 -147
- package/esm/models/attributes/_createAttribute.js.map +0 -1
- package/esm/models/attributes/input-constraints/BSNConstraint.js +0 -66
- package/esm/models/attributes/input-constraints/BSNConstraint.js.flow +0 -80
- package/esm/models/attributes/input-constraints/BSNConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/ConstraintCollection.js +0 -42
- package/esm/models/attributes/input-constraints/ConstraintCollection.js.flow +0 -65
- package/esm/models/attributes/input-constraints/ConstraintCollection.js.map +0 -1
- package/esm/models/attributes/input-constraints/ConstraintModel.js +0 -66
- package/esm/models/attributes/input-constraints/ConstraintModel.js.flow +0 -76
- package/esm/models/attributes/input-constraints/ConstraintModel.js.map +0 -1
- package/esm/models/attributes/input-constraints/DateBoundaryConstraint.js +0 -198
- package/esm/models/attributes/input-constraints/DateBoundaryConstraint.js.flow +0 -240
- package/esm/models/attributes/input-constraints/DateBoundaryConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/DateTimeDateFormatConstraint.js +0 -69
- package/esm/models/attributes/input-constraints/DateTimeDateFormatConstraint.js.flow +0 -72
- package/esm/models/attributes/input-constraints/DateTimeDateFormatConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/DateTimeTimeFormatConstraint.js +0 -69
- package/esm/models/attributes/input-constraints/DateTimeTimeFormatConstraint.js.flow +0 -72
- package/esm/models/attributes/input-constraints/DateTimeTimeFormatConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/DatetimeFormatConstraint.js +0 -115
- package/esm/models/attributes/input-constraints/DatetimeFormatConstraint.js.flow +0 -132
- package/esm/models/attributes/input-constraints/DatetimeFormatConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/FileExtensionConstraint.js +0 -59
- package/esm/models/attributes/input-constraints/FileExtensionConstraint.js.flow +0 -60
- package/esm/models/attributes/input-constraints/FileExtensionConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/FileSizeConstraint.js +0 -91
- package/esm/models/attributes/input-constraints/FileSizeConstraint.js.flow +0 -101
- package/esm/models/attributes/input-constraints/FileSizeConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/IBANConstraint.js +0 -42
- package/esm/models/attributes/input-constraints/IBANConstraint.js.flow +0 -46
- package/esm/models/attributes/input-constraints/IBANConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/MandatoryConstraint.js +0 -47
- package/esm/models/attributes/input-constraints/MandatoryConstraint.js.flow +0 -54
- package/esm/models/attributes/input-constraints/MandatoryConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/MandatoryRangeConstraint.js +0 -78
- package/esm/models/attributes/input-constraints/MandatoryRangeConstraint.js.flow +0 -84
- package/esm/models/attributes/input-constraints/MandatoryRangeConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/NumberBoundaryConstraint.js +0 -170
- package/esm/models/attributes/input-constraints/NumberBoundaryConstraint.js.flow +0 -213
- package/esm/models/attributes/input-constraints/NumberBoundaryConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/NumberFormatConstraint.js +0 -125
- package/esm/models/attributes/input-constraints/NumberFormatConstraint.js.flow +0 -153
- package/esm/models/attributes/input-constraints/NumberFormatConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/NumberGroupingConstraint.js +0 -119
- package/esm/models/attributes/input-constraints/NumberGroupingConstraint.js.flow +0 -140
- package/esm/models/attributes/input-constraints/NumberGroupingConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/PasswordConfirmConstraint.js +0 -65
- package/esm/models/attributes/input-constraints/PasswordConfirmConstraint.js.flow +0 -68
- package/esm/models/attributes/input-constraints/PasswordConfirmConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/PasswordLowerAndUpperCaseConstraint.js +0 -41
- package/esm/models/attributes/input-constraints/PasswordLowerAndUpperCaseConstraint.js.flow +0 -44
- package/esm/models/attributes/input-constraints/PasswordLowerAndUpperCaseConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/PasswordMinNumericCharactersConstraint.js +0 -57
- package/esm/models/attributes/input-constraints/PasswordMinNumericCharactersConstraint.js.flow +0 -60
- package/esm/models/attributes/input-constraints/PasswordMinNumericCharactersConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/PasswordMinSpecialCharactersConstraint.js +0 -57
- package/esm/models/attributes/input-constraints/PasswordMinSpecialCharactersConstraint.js.flow +0 -60
- package/esm/models/attributes/input-constraints/PasswordMinSpecialCharactersConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/PasswordThreeConsecutiveCharactersNotAllowedConstraint.js +0 -71
- package/esm/models/attributes/input-constraints/PasswordThreeConsecutiveCharactersNotAllowedConstraint.js.flow +0 -74
- package/esm/models/attributes/input-constraints/PasswordThreeConsecutiveCharactersNotAllowedConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/RangeConstraint.js +0 -136
- package/esm/models/attributes/input-constraints/RangeConstraint.js.flow +0 -161
- package/esm/models/attributes/input-constraints/RangeConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/RegexConstraint.js +0 -60
- package/esm/models/attributes/input-constraints/RegexConstraint.js.flow +0 -72
- package/esm/models/attributes/input-constraints/RegexConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/StringLengthConstraint.js +0 -171
- package/esm/models/attributes/input-constraints/StringLengthConstraint.js.flow +0 -179
- package/esm/models/attributes/input-constraints/StringLengthConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/XMLConstraint.js +0 -56
- package/esm/models/attributes/input-constraints/XMLConstraint.js.flow +0 -62
- package/esm/models/attributes/input-constraints/XMLConstraint.js.map +0 -1
- package/esm/models/attributes/input-constraints/__tests__/BSNConstraint.spec.js.flow +0 -25
- package/esm/models/attributes/input-constraints/__tests__/ConstraintCollection.spec.js.flow +0 -9
- package/esm/models/attributes/input-constraints/__tests__/ConstraintModel.spec.js.flow +0 -35
- package/esm/models/attributes/input-constraints/__tests__/DateBoundaryConstraint.spec.js.flow +0 -117
- package/esm/models/attributes/input-constraints/__tests__/DateTimeDateFormatConstraint.spec.js.flow +0 -30
- package/esm/models/attributes/input-constraints/__tests__/DateTimeTimeFormatConstraint.spec.js.flow +0 -54
- package/esm/models/attributes/input-constraints/__tests__/DatetimeFormatConstraint.spec.js.flow +0 -79
- package/esm/models/attributes/input-constraints/__tests__/FileExtensionConstraint.spec.js.flow +0 -20
- package/esm/models/attributes/input-constraints/__tests__/FileSizeConstraint.spec.js.flow +0 -53
- package/esm/models/attributes/input-constraints/__tests__/IBANConstraint.spec.js.flow +0 -12
- package/esm/models/attributes/input-constraints/__tests__/MandatoryConstraint.spec.js.flow +0 -14
- package/esm/models/attributes/input-constraints/__tests__/NumberBoundaryConstraint.spec.js.flow +0 -46
- package/esm/models/attributes/input-constraints/__tests__/NumberFormatConstraint.spec.js.flow +0 -137
- package/esm/models/attributes/input-constraints/__tests__/NumberGroupingConstraint.spec.js.flow +0 -85
- package/esm/models/attributes/input-constraints/__tests__/PasswordConfirmConstraint.spec.js.flow +0 -21
- package/esm/models/attributes/input-constraints/__tests__/PasswordLowerAndUpperCaseConstraint.spec.js.flow +0 -14
- package/esm/models/attributes/input-constraints/__tests__/PasswordMinNumericCharactersConstraint.spec.js.flow +0 -11
- package/esm/models/attributes/input-constraints/__tests__/PasswordMinSpecialCharactersConstraint.spec.js.flow +0 -11
- package/esm/models/attributes/input-constraints/__tests__/PasswordThreeConsecutiveCharactersNotAllowedConstraint.spec.js.flow +0 -22
- package/esm/models/attributes/input-constraints/__tests__/RegexConstraint.spec.js.flow +0 -42
- package/esm/models/attributes/input-constraints/__tests__/StringLengthConstraint.spec.js.flow +0 -102
- package/esm/models/attributes/input-constraints/__tests__/XMLConstraint.spec.js.flow +0 -15
- package/esm/models/attributes/layouthint-rules/BaseLayoutHintRule.js +0 -59
- package/esm/models/attributes/layouthint-rules/BaseLayoutHintRule.js.flow +0 -74
- package/esm/models/attributes/layouthint-rules/BaseLayoutHintRule.js.map +0 -1
- package/esm/models/attributes/layouthint-rules/DependentAttribute.js +0 -193
- package/esm/models/attributes/layouthint-rules/DependentAttribute.js.flow +0 -246
- package/esm/models/attributes/layouthint-rules/DependentAttribute.js.map +0 -1
- package/esm/models/attributes/layouthint-rules/LayoutHintRuleCollection.js +0 -79
- package/esm/models/attributes/layouthint-rules/LayoutHintRuleCollection.js.flow +0 -101
- package/esm/models/attributes/layouthint-rules/LayoutHintRuleCollection.js.map +0 -1
- package/esm/models/attributes/layouthint-rules/RemainingTotalUploadSize.js +0 -44
- package/esm/models/attributes/layouthint-rules/RemainingTotalUploadSize.js.flow +0 -67
- package/esm/models/attributes/layouthint-rules/RemainingTotalUploadSize.js.map +0 -1
- package/esm/models/attributes/layouthint-rules/__mock__/MockedCollectionFactory.js.flow +0 -54
- package/esm/models/attributes/layouthint-rules/__tests__/BaseLayoutHintRule.spec.js.flow +0 -29
- package/esm/models/attributes/layouthint-rules/__tests__/DependentAttribute.spec.js.flow +0 -310
- package/esm/models/attributes/layouthint-rules/__tests__/LayoutHintRuleCollection.spec.js.flow +0 -58
- package/esm/models/attributes/layouthint-rules/__tests__/RemainingTotalUploadSize.spec.js.flow +0 -24
- package/esm/models/base/BaseCollection.js +0 -180
- package/esm/models/base/BaseCollection.js.flow +0 -191
- package/esm/models/base/BaseCollection.js.map +0 -1
- package/esm/models/base/BaseModel.js +0 -142
- package/esm/models/base/BaseModel.js.flow +0 -155
- package/esm/models/base/BaseModel.js.map +0 -1
- package/esm/models/base/ResourceCollection.js +0 -34
- package/esm/models/base/ResourceCollection.js.flow +0 -42
- package/esm/models/base/ResourceCollection.js.map +0 -1
- package/esm/models/base/ResourceModel.js +0 -202
- package/esm/models/base/ResourceModel.js.flow +0 -246
- package/esm/models/base/ResourceModel.js.map +0 -1
- package/esm/models/base/__tests__/BaseCollection.spec.js.flow +0 -108
- package/esm/models/base/__tests__/BaseModel.spec.js.flow +0 -85
- package/esm/models/base/__tests__/ResourceCollection.spec.js.flow +0 -51
- package/esm/models/base/__tests__/ResourceModel.spec.js.flow +0 -100
- package/esm/models/caseview/CaseViewModel.js +0 -155
- package/esm/models/caseview/CaseViewModel.js.flow +0 -188
- package/esm/models/caseview/CaseViewModel.js.map +0 -1
- package/esm/models/caseview/__mock__/caseview.js.flow +0 -14
- package/esm/models/caseview/__tests__/CaseViewModel.spec.js.flow +0 -132
- package/esm/models/concepts/BusinessScenarioModel.js +0 -115
- package/esm/models/concepts/BusinessScenarioModel.js.flow +0 -176
- package/esm/models/concepts/BusinessScenarioModel.js.map +0 -1
- package/esm/models/concepts/ConceptDetailModel.js +0 -273
- package/esm/models/concepts/ConceptDetailModel.js.flow +0 -343
- package/esm/models/concepts/ConceptDetailModel.js.map +0 -1
- package/esm/models/concepts/ConceptIndexModel.js +0 -142
- package/esm/models/concepts/ConceptIndexModel.js.flow +0 -170
- package/esm/models/concepts/ConceptIndexModel.js.map +0 -1
- package/esm/models/concepts/ConceptLinkModel.js +0 -164
- package/esm/models/concepts/ConceptLinkModel.js.flow +0 -208
- package/esm/models/concepts/ConceptLinkModel.js.map +0 -1
- package/esm/models/concepts/ConceptRelationCollection.js +0 -75
- package/esm/models/concepts/ConceptRelationCollection.js.flow +0 -95
- package/esm/models/concepts/ConceptRelationCollection.js.map +0 -1
- package/esm/models/concepts/ConceptRelationModel.js +0 -107
- package/esm/models/concepts/ConceptRelationModel.js.flow +0 -129
- package/esm/models/concepts/ConceptRelationModel.js.map +0 -1
- package/esm/models/concepts/ConceptTypeDetailModel.js +0 -121
- package/esm/models/concepts/ConceptTypeDetailModel.js.flow +0 -128
- package/esm/models/concepts/ConceptTypeDetailModel.js.map +0 -1
- package/esm/models/concepts/SourceReferenceCollection.js +0 -27
- package/esm/models/concepts/SourceReferenceCollection.js.flow +0 -32
- package/esm/models/concepts/SourceReferenceCollection.js.map +0 -1
- package/esm/models/concepts/SourceReferenceModel.js +0 -93
- package/esm/models/concepts/SourceReferenceModel.js.flow +0 -114
- package/esm/models/concepts/SourceReferenceModel.js.map +0 -1
- package/esm/models/concepts/__mock__/business_scenario.js.flow +0 -26
- package/esm/models/concepts/__mock__/conceptdetail.js.flow +0 -27
- package/esm/models/concepts/__mock__/conceptindex.js.flow +0 -15
- package/esm/models/concepts/__mock__/concepttype.js.flow +0 -13
- package/esm/models/concepts/__mock__/concepttype_hierarchy.js.flow +0 -13
- package/esm/models/concepts/__mock__/related_concepts.js.flow +0 -12
- package/esm/models/concepts/__mock__/relation_with_props_and_tf_data.js.flow +0 -27
- package/esm/models/concepts/__tests__/BusinessScenarioModel.spec.js.flow +0 -28
- package/esm/models/concepts/__tests__/ConceptDetailModel.spec.js.flow +0 -65
- package/esm/models/concepts/__tests__/ConceptIndexModel.spec.js.flow +0 -42
- package/esm/models/concepts/__tests__/ConceptLinkModel.spec.js.flow +0 -9
- package/esm/models/concepts/__tests__/ConceptRelationCollection.spec.js.flow +0 -9
- package/esm/models/concepts/__tests__/ConceptRelationModel.spec.js.flow +0 -53
- package/esm/models/concepts/__tests__/ConceptTypeDetailModel.spec.js.flow +0 -31
- package/esm/models/concepts/__tests__/RelatedConcepts.spec.js.flow +0 -58
- package/esm/models/concepts/__tests__/SourceReferenceCollection.spec.js.flow +0 -9
- package/esm/models/concepts/__tests__/SourceReferenceModel.spec.js.flow +0 -108
- package/esm/models/content/ContentIndexModel.js +0 -134
- package/esm/models/content/ContentIndexModel.js.flow +0 -160
- package/esm/models/content/ContentIndexModel.js.map +0 -1
- package/esm/models/content/ContentLinkModel.js +0 -250
- package/esm/models/content/ContentLinkModel.js.flow +0 -308
- package/esm/models/content/ContentLinkModel.js.map +0 -1
- package/esm/models/content/ContentModel.js +0 -200
- package/esm/models/content/ContentModel.js.flow +0 -226
- package/esm/models/content/ContentModel.js.map +0 -1
- package/esm/models/content/ContentTOCModel.js +0 -204
- package/esm/models/content/ContentTOCModel.js.flow +0 -233
- package/esm/models/content/ContentTOCModel.js.map +0 -1
- package/esm/models/content/ContentTypeModel.js +0 -66
- package/esm/models/content/ContentTypeModel.js.flow +0 -71
- package/esm/models/content/ContentTypeModel.js.map +0 -1
- package/esm/models/content/SectionModel.js +0 -193
- package/esm/models/content/SectionModel.js.flow +0 -236
- package/esm/models/content/SectionModel.js.map +0 -1
- package/esm/models/content/SubSectionModel.js +0 -159
- package/esm/models/content/SubSectionModel.js.flow +0 -181
- package/esm/models/content/SubSectionModel.js.map +0 -1
- package/esm/models/content/__tests__/ContentIndexModel.spec.js.flow +0 -40
- package/esm/models/content/__tests__/ContentLinkModel.spec.js.flow +0 -129
- package/esm/models/content/__tests__/ContentModel.spec.js.flow +0 -241
- package/esm/models/content/__tests__/Formalsource.spec.js.flow +0 -133
- package/esm/models/contentconfiguration/ContentConfiguration.js +0 -68
- package/esm/models/contentconfiguration/ContentConfiguration.js.flow +0 -70
- package/esm/models/contentconfiguration/ContentConfiguration.js.map +0 -1
- package/esm/models/contentconfiguration/ContentConfigurationElements.js +0 -137
- package/esm/models/contentconfiguration/ContentConfigurationElements.js.flow +0 -152
- package/esm/models/contentconfiguration/ContentConfigurationElements.js.map +0 -1
- package/esm/models/contentconfiguration/ContentConfigurationEndResults.js +0 -43
- package/esm/models/contentconfiguration/ContentConfigurationEndResults.js.flow +0 -45
- package/esm/models/contentconfiguration/ContentConfigurationEndResults.js.map +0 -1
- package/esm/models/contentconfiguration/ContentConfigurationQuestions.js +0 -48
- package/esm/models/contentconfiguration/ContentConfigurationQuestions.js.flow +0 -60
- package/esm/models/contentconfiguration/ContentConfigurationQuestions.js.map +0 -1
- package/esm/models/contentconfiguration/ContentConfigurationResults.js +0 -97
- package/esm/models/contentconfiguration/ContentConfigurationResults.js.flow +0 -105
- package/esm/models/contentconfiguration/ContentConfigurationResults.js.map +0 -1
- package/esm/models/contentconfiguration/__tests__/ContentConfigurationElements.spec.js.flow +0 -29
- package/esm/models/contentconfiguration/__tests__/ContentConfigurationResults.spec.js.flow +0 -101
- package/esm/models/detail/DetailModel.js +0 -211
- package/esm/models/detail/DetailModel.js.flow +0 -241
- package/esm/models/detail/DetailModel.js.map +0 -1
- package/esm/models/detail/__tests__/DetailModel.spec.js.flow +0 -41
- package/esm/models/error/ErrorCollection.js +0 -104
- package/esm/models/error/ErrorCollection.js.flow +0 -127
- package/esm/models/error/ErrorCollection.js.map +0 -1
- package/esm/models/error/ErrorModel.js +0 -75
- package/esm/models/error/ErrorModel.js.flow +0 -83
- package/esm/models/error/ErrorModel.js.map +0 -1
- package/esm/models/error/ErrorResponse.js +0 -300
- package/esm/models/error/ErrorResponse.js.flow +0 -343
- package/esm/models/error/ErrorResponse.js.map +0 -1
- package/esm/models/error/__tests__/ErrorCollection.spec.js.flow +0 -41
- package/esm/models/error/__tests__/ErrorModel.spec.js.flow +0 -24
- package/esm/models/filters/AssignmentFilterModel.js +0 -153
- package/esm/models/filters/AssignmentFilterModel.js.flow +0 -195
- package/esm/models/filters/AssignmentFilterModel.js.map +0 -1
- package/esm/models/filters/BaseFilterModel.js +0 -203
- package/esm/models/filters/BaseFilterModel.js.flow +0 -236
- package/esm/models/filters/BaseFilterModel.js.map +0 -1
- package/esm/models/filters/ConceptIndexFilterModel.js +0 -29
- package/esm/models/filters/ConceptIndexFilterModel.js.flow +0 -40
- package/esm/models/filters/ConceptIndexFilterModel.js.map +0 -1
- package/esm/models/filters/FilterCollection.js +0 -147
- package/esm/models/filters/FilterCollection.js.flow +0 -192
- package/esm/models/filters/FilterCollection.js.map +0 -1
- package/esm/models/filters/FilterModel.js +0 -6
- package/esm/models/filters/FilterModel.js.flow +0 -6
- package/esm/models/filters/FilterModel.js.map +0 -1
- package/esm/models/filters/RangeFilterModel.js +0 -36
- package/esm/models/filters/RangeFilterModel.js.flow +0 -36
- package/esm/models/filters/RangeFilterModel.js.map +0 -1
- package/esm/models/filters/StringFilterModel.js +0 -140
- package/esm/models/filters/StringFilterModel.js.flow +0 -159
- package/esm/models/filters/StringFilterModel.js.map +0 -1
- package/esm/models/filters/__tests__/AssignmentFilterModel.spec.js.flow +0 -140
- package/esm/models/filters/__tests__/FilterCollection.spec.js.flow +0 -68
- package/esm/models/filters/__tests__/FilterModel.spec.js.flow +0 -65
- package/esm/models/filters/__tests__/RangeFilterModel.spec.js.flow +0 -55
- package/esm/models/filters/__tests__/ZipcodeFilter.spec.js.flow +0 -145
- package/esm/models/form/FormModel.js +0 -1031
- package/esm/models/form/FormModel.js.flow +0 -1280
- package/esm/models/form/FormModel.js.map +0 -1
- package/esm/models/form/FormObjectModel.js +0 -469
- package/esm/models/form/FormObjectModel.js.flow +0 -590
- package/esm/models/form/FormObjectModel.js.map +0 -1
- package/esm/models/form/__mock__/form.js.flow +0 -17
- package/esm/models/form/__tests__/FormModel.getters.spec.js.flow +0 -149
- package/esm/models/form/__tests__/FormModel.instrument.spec.js.flow +0 -202
- package/esm/models/form/__tests__/FormModel.repeating.spec.js.flow +0 -65
- package/esm/models/form/__tests__/FormModel.selfhref.spec.js.flow +0 -84
- package/esm/models/form/__tests__/FormModel.spec.js.flow +0 -752
- package/esm/models/form/__tests__/FormModel.unknown-repeat.spec.js.flow +0 -52
- package/esm/models/form/__tests__/FormObjectModel.spec.js.flow +0 -180
- package/esm/models/form/__tests__/FormResultData.spec.js.flow +0 -86
- package/esm/models/form/__tests__/FormValidation.spec.js.flow +0 -79
- package/esm/models/form/__tests__/FormWithContent.spec.js.flow +0 -71
- package/esm/models/grouping/GroupingModel.js +0 -182
- package/esm/models/grouping/GroupingModel.js.flow +0 -232
- package/esm/models/grouping/GroupingModel.js.map +0 -1
- package/esm/models/grouping/__tests__/GroupingModel.spec.js.flow +0 -80
- package/esm/models/href/Href.js +0 -490
- package/esm/models/href/Href.js.flow +0 -564
- package/esm/models/href/Href.js.map +0 -1
- package/esm/models/href/ListHref.js +0 -127
- package/esm/models/href/ListHref.js.flow +0 -146
- package/esm/models/href/ListHref.js.map +0 -1
- package/esm/models/href/__tests__/Href.spec.js.flow +0 -184
- package/esm/models/href/__tests__/ListHref.spec.js.flow +0 -61
- package/esm/models/index.js +0 -96
- package/esm/models/index.js.flow +0 -177
- package/esm/models/index.js.map +0 -1
- package/esm/models/layouthint/LayoutHintCollection.js +0 -111
- package/esm/models/layouthint/LayoutHintCollection.js.flow +0 -116
- package/esm/models/layouthint/LayoutHintCollection.js.map +0 -1
- package/esm/models/layouthint/__tests__/LayoutHintCollection.spec.js.flow +0 -89
- package/esm/models/links/LinkCollection.js +0 -163
- package/esm/models/links/LinkCollection.js.flow +0 -169
- package/esm/models/links/LinkCollection.js.map +0 -1
- package/esm/models/links/LinkModel.js +0 -210
- package/esm/models/links/LinkModel.js.flow +0 -229
- package/esm/models/links/LinkModel.js.map +0 -1
- package/esm/models/links/__tests__/LinkCollection.spec.js.flow +0 -426
- package/esm/models/links/__tests__/LinkModel.spec.js.flow +0 -103
- package/esm/models/links/__tests__/normalizeLinkJSON.spec.js.flow +0 -212
- package/esm/models/links/normalizeLinkJSON.js +0 -101
- package/esm/models/links/normalizeLinkJSON.js.flow +0 -121
- package/esm/models/links/normalizeLinkJSON.js.map +0 -1
- package/esm/models/list/ListDetailModel.js +0 -259
- package/esm/models/list/ListDetailModel.js.flow +0 -330
- package/esm/models/list/ListDetailModel.js.map +0 -1
- package/esm/models/list/ListHeaderModel.js +0 -87
- package/esm/models/list/ListHeaderModel.js.flow +0 -96
- package/esm/models/list/ListHeaderModel.js.map +0 -1
- package/esm/models/list/ListItemCollection.js +0 -60
- package/esm/models/list/ListItemCollection.js.flow +0 -80
- package/esm/models/list/ListItemCollection.js.map +0 -1
- package/esm/models/list/ListItemModel.js +0 -87
- package/esm/models/list/ListItemModel.js.flow +0 -111
- package/esm/models/list/ListItemModel.js.map +0 -1
- package/esm/models/list/ListModel.js +0 -378
- package/esm/models/list/ListModel.js.flow +0 -438
- package/esm/models/list/ListModel.js.map +0 -1
- package/esm/models/list/__mock__/caselist.js.flow +0 -14
- package/esm/models/list/__tests__/ListDetailModel.hierarchy.spec.js.flow +0 -88
- package/esm/models/list/__tests__/ListDetailModel.spec.js.flow +0 -96
- package/esm/models/list/__tests__/ListItemCollection.spec.js.flow +0 -22
- package/esm/models/list/__tests__/ListModel.spec.js.flow +0 -152
- package/esm/models/list/__tests__/ListResultDetail.spec.js.flow +0 -37
- package/esm/models/lookup/LookupOptionCollection.js +0 -38
- package/esm/models/lookup/LookupOptionCollection.js.flow +0 -54
- package/esm/models/lookup/LookupOptionCollection.js.map +0 -1
- package/esm/models/lookup/LookupOptionsModel.js +0 -63
- package/esm/models/lookup/LookupOptionsModel.js.flow +0 -81
- package/esm/models/lookup/LookupOptionsModel.js.map +0 -1
- package/esm/models/lookup/__tests__/LookupOptionCollection.spec.js.flow +0 -80
- package/esm/models/lookup/__tests__/LookupOptionsModel.spec.js.flow +0 -82
- package/esm/models/modelcatalog/ModelCatalogModel.js +0 -61
- package/esm/models/modelcatalog/ModelCatalogModel.js.flow +0 -73
- package/esm/models/modelcatalog/ModelCatalogModel.js.map +0 -1
- package/esm/models/modelcatalog/ModelCategoryCollection.js +0 -16
- package/esm/models/modelcatalog/ModelCategoryCollection.js.flow +0 -22
- package/esm/models/modelcatalog/ModelCategoryCollection.js.map +0 -1
- package/esm/models/modelcatalog/ModelCategoryModel.js +0 -53
- package/esm/models/modelcatalog/ModelCategoryModel.js.flow +0 -63
- package/esm/models/modelcatalog/ModelCategoryModel.js.map +0 -1
- package/esm/models/modelcatalog/__mock__/modelcatalog.js.flow +0 -14
- package/esm/models/modelcatalog/__tests__/ModelCatalogModel.spec.js.flow +0 -49
- package/esm/models/paging/PagesizeModel.js +0 -42
- package/esm/models/paging/PagesizeModel.js.flow +0 -44
- package/esm/models/paging/PagesizeModel.js.map +0 -1
- package/esm/models/paging/PagingModel.js +0 -88
- package/esm/models/paging/PagingModel.js.flow +0 -94
- package/esm/models/paging/PagingModel.js.map +0 -1
- package/esm/models/paging/__tests__/PageSizeModel.spec.js.flow +0 -31
- package/esm/models/paging/__tests__/PagingModel.spec.js.flow +0 -40
- package/esm/models/panels/GroupingPanelModel.js +0 -135
- package/esm/models/panels/GroupingPanelModel.js.flow +0 -164
- package/esm/models/panels/GroupingPanelModel.js.map +0 -1
- package/esm/models/panels/__tests__/GroupingPanelModel.spec.js.flow +0 -142
- package/esm/models/parameter/Parameter.js +0 -102
- package/esm/models/parameter/Parameter.js.flow +0 -117
- package/esm/models/parameter/Parameter.js.map +0 -1
- package/esm/models/parameter/__tests__/Parameter.spec.js.flow +0 -125
- package/esm/models/process/ProcessStatusSettingsModel.js +0 -77
- package/esm/models/process/ProcessStatusSettingsModel.js.flow +0 -88
- package/esm/models/process/ProcessStatusSettingsModel.js.map +0 -1
- package/esm/models/process/__tests__/ProcessStatusSettingsModel.spec.js.flow +0 -52
- package/esm/models/resolveModel.js +0 -50
- package/esm/models/resolveModel.js.flow +0 -92
- package/esm/models/resolveModel.js.map +0 -1
- package/esm/models/search/CaseSearchModel.js +0 -39
- package/esm/models/search/CaseSearchModel.js.flow +0 -46
- package/esm/models/search/CaseSearchModel.js.map +0 -1
- package/esm/models/search/__tests__/CaseSearchModel.spec.js.flow +0 -10
- package/esm/models/sorting/SortOptionModel.js +0 -100
- package/esm/models/sorting/SortOptionModel.js.flow +0 -107
- package/esm/models/sorting/SortOptionModel.js.map +0 -1
- package/esm/models/sorting/SortingModel.js +0 -106
- package/esm/models/sorting/SortingModel.js.flow +0 -128
- package/esm/models/sorting/SortingModel.js.map +0 -1
- package/esm/models/sorting/__tests__/SortingModel.spec.js.flow +0 -96
- package/esm/models/tab/TabModel.js +0 -135
- package/esm/models/tab/TabModel.js.flow +0 -160
- package/esm/models/tab/TabModel.js.map +0 -1
- package/esm/models/tab/__mock__/tab.js.flow +0 -14
- package/esm/models/tab/__mock__/tabPerson.js.flow +0 -14
- package/esm/models/tab/__tests__/TabModel.spec.js.flow +0 -72
- package/esm/models/taskgroup/TaskGroupCollection.js +0 -13
- package/esm/models/taskgroup/TaskGroupCollection.js.flow +0 -16
- package/esm/models/taskgroup/TaskGroupCollection.js.map +0 -1
- package/esm/models/taskgroup/TaskGroupModel.js +0 -79
- package/esm/models/taskgroup/TaskGroupModel.js.flow +0 -102
- package/esm/models/taskgroup/TaskGroupModel.js.map +0 -1
- package/esm/models/taskgroup/__mock__/taskgroup.js.flow +0 -14
- package/esm/models/taskgroup/__tests__/TaskGroupModel.spec.js.flow +0 -26
- package/esm/models/types.js +0 -2
- package/esm/models/types.js.flow +0 -275
- package/esm/models/types.js.map +0 -1
- package/esm/models/user/UserModel.js +0 -51
- package/esm/models/user/UserModel.js.flow +0 -57
- package/esm/models/user/UserModel.js.map +0 -1
- package/esm/models/user/UserProfileModel.js +0 -47
- package/esm/models/user/UserProfileModel.js.flow +0 -54
- package/esm/models/user/UserProfileModel.js.map +0 -1
- package/esm/models/user/UserServicesModel.js +0 -119
- package/esm/models/user/UserServicesModel.js.flow +0 -136
- package/esm/models/user/UserServicesModel.js.map +0 -1
- package/esm/models/user/__tests__/UserModel.spec.js.flow +0 -43
- package/esm/models/user/__tests__/UserProfileModel.spec.js.flow +0 -45
- package/esm/models/user/__tests__/UserServicesModel.spec.js.flow +0 -55
- package/esm/modularui/Authenticate.js +0 -177
- package/esm/modularui/Authenticate.js.flow +0 -195
- package/esm/modularui/Authenticate.js.map +0 -1
- package/esm/modularui/CaptchaRequest.js +0 -64
- package/esm/modularui/CaptchaRequest.js.flow +0 -104
- package/esm/modularui/CaptchaRequest.js.map +0 -1
- package/esm/modularui/ModularUIError.js +0 -23
- package/esm/modularui/ModularUIError.js.flow +0 -25
- package/esm/modularui/ModularUIError.js.map +0 -1
- package/esm/modularui/ModularUIRequest.js +0 -712
- package/esm/modularui/ModularUIRequest.js.flow +0 -872
- package/esm/modularui/ModularUIRequest.js.map +0 -1
- package/esm/modularui/ModularUIResponse.js +0 -140
- package/esm/modularui/ModularUIResponse.js.flow +0 -160
- package/esm/modularui/ModularUIResponse.js.map +0 -1
- package/esm/modularui/UploadRequest.js +0 -97
- package/esm/modularui/UploadRequest.js.flow +0 -151
- package/esm/modularui/UploadRequest.js.map +0 -1
- package/esm/modularui/__tests__/CustomContextPath.spec.js.flow +0 -61
- package/esm/modularui/__tests__/ModularUIError.spec.js.flow +0 -22
- package/esm/modularui/__tests__/ModularUIRequest.spec.js.flow +0 -495
- package/esm/modularui/index.js +0 -6
- package/esm/modularui/index.js.flow +0 -6
- package/esm/modularui/index.js.map +0 -1
- package/esm/modularui/types.js +0 -2
- package/esm/modularui/types.js.flow +0 -4
- package/esm/modularui/types.js.map +0 -1
- package/esm/react/ErrorBoundary.js +0 -49
- package/esm/react/ErrorBoundary.js.flow +0 -61
- package/esm/react/ErrorBoundary.js.map +0 -1
- package/esm/react/ErrorBoundaryFallback.js +0 -34
- package/esm/react/ErrorBoundaryFallback.js.flow +0 -46
- package/esm/react/ErrorBoundaryFallback.js.map +0 -1
- package/esm/react/index.js +0 -3
- package/esm/react/index.js.flow +0 -3
- package/esm/react/index.js.map +0 -1
- package/esm/react/utils.js +0 -24
- package/esm/react/utils.js.flow +0 -33
- package/esm/react/utils.js.map +0 -1
- package/esm/react-client/Init.js +0 -36
- package/esm/react-client/Init.js.flow +0 -46
- package/esm/react-client/Init.js.map +0 -1
- package/esm/react-client/client.js +0 -224
- package/esm/react-client/client.js.flow +0 -309
- package/esm/react-client/client.js.map +0 -1
- package/esm/react-client/contextPath.js +0 -22
- package/esm/react-client/contextPath.js.flow +0 -30
- package/esm/react-client/contextPath.js.map +0 -1
- package/esm/react-client/index.js +0 -4
- package/esm/react-client/index.js.flow +0 -4
- package/esm/react-client/index.js.map +0 -1
- package/esm/react-client/rehydrate.js +0 -67
- package/esm/react-client/rehydrate.js.flow +0 -94
- package/esm/react-client/rehydrate.js.map +0 -1
- package/esm/react-server/__tests__/htmlpage.spec.js.flow +0 -75
- package/esm/react-server/__tests__/requestInformation.spec.js.flow +0 -266
- package/esm/react-server/__tests__/serverUtil.spec.js.flow +0 -183
- package/esm/react-server/contextPath.js +0 -6
- package/esm/react-server/contextPath.js.flow +0 -8
- package/esm/react-server/contextPath.js.map +0 -1
- package/esm/react-server/createSSRComplete.js +0 -54
- package/esm/react-server/createSSRComplete.js.flow +0 -63
- package/esm/react-server/createSSRComplete.js.map +0 -1
- package/esm/react-server/htmlpage.js +0 -47
- package/esm/react-server/htmlpage.js.flow +0 -55
- package/esm/react-server/htmlpage.js.map +0 -1
- package/esm/react-server/index.js +0 -9
- package/esm/react-server/index.js.flow +0 -13
- package/esm/react-server/index.js.map +0 -1
- package/esm/react-server/renderSSRComplete.js +0 -84
- package/esm/react-server/renderSSRComplete.js.flow +0 -111
- package/esm/react-server/renderSSRComplete.js.map +0 -1
- package/esm/react-server/renderSSRMinimal.js +0 -40
- package/esm/react-server/renderSSRMinimal.js.flow +0 -54
- package/esm/react-server/renderSSRMinimal.js.map +0 -1
- package/esm/react-server/requestInformation.js +0 -53
- package/esm/react-server/requestInformation.js.flow +0 -68
- package/esm/react-server/requestInformation.js.map +0 -1
- package/esm/react-server/serverNoSSR.js +0 -56
- package/esm/react-server/serverNoSSR.js.flow +0 -87
- package/esm/react-server/serverNoSSR.js.map +0 -1
- package/esm/react-server/serverSSR.js +0 -44
- package/esm/react-server/serverSSR.js.flow +0 -70
- package/esm/react-server/serverSSR.js.map +0 -1
- package/esm/react-server/serverUtil.js +0 -201
- package/esm/react-server/serverUtil.js.flow +0 -279
- package/esm/react-server/serverUtil.js.map +0 -1
- package/esm/react-theme/ThemeProvider.js +0 -26
- package/esm/react-theme/ThemeProvider.js.flow +0 -25
- package/esm/react-theme/ThemeProvider.js.map +0 -1
- package/esm/react-theme/__tests__/ThemeProvider.spec.js.flow +0 -84
- package/esm/react-theme/__tests__/createTheme.spec.js.flow +0 -172
- package/esm/react-theme/createTheme.js +0 -108
- package/esm/react-theme/createTheme.js.flow +0 -118
- package/esm/react-theme/createTheme.js.map +0 -1
- package/esm/react-theme/index.js +0 -10
- package/esm/react-theme/index.js.flow +0 -15
- package/esm/react-theme/index.js.map +0 -1
- package/esm/react-theme/types.js +0 -2
- package/esm/react-theme/types.js.flow +0 -16
- package/esm/react-theme/types.js.map +0 -1
- package/esm/react-theme/useTheme.js +0 -9
- package/esm/react-theme/useTheme.js.flow +0 -13
- package/esm/react-theme/useTheme.js.map +0 -1
- package/esm/react-theme/utils/__tests__/background.spec.js.flow +0 -30
- package/esm/react-theme/utils/__tests__/colors.spec.js.flow +0 -30
- package/esm/react-theme/utils/__tests__/contrast.spec.js.flow +0 -44
- package/esm/react-theme/utils/__tests__/corners.spec.js.flow +0 -27
- package/esm/react-theme/utils/__tests__/spacers.spec.js.flow +0 -44
- package/esm/react-theme/utils/__tests__/themeProps.spec.js.flow +0 -72
- package/esm/react-theme/utils/background.js +0 -15
- package/esm/react-theme/utils/background.js.flow +0 -20
- package/esm/react-theme/utils/background.js.map +0 -1
- package/esm/react-theme/utils/colors.js +0 -37
- package/esm/react-theme/utils/colors.js.flow +0 -47
- package/esm/react-theme/utils/colors.js.map +0 -1
- package/esm/react-theme/utils/contrast.js +0 -86
- package/esm/react-theme/utils/contrast.js.flow +0 -117
- package/esm/react-theme/utils/contrast.js.map +0 -1
- package/esm/react-theme/utils/corners.js +0 -28
- package/esm/react-theme/utils/corners.js.flow +0 -37
- package/esm/react-theme/utils/corners.js.map +0 -1
- package/esm/react-theme/utils/spacers.js +0 -81
- package/esm/react-theme/utils/spacers.js.flow +0 -65
- package/esm/react-theme/utils/spacers.js.map +0 -1
- package/esm/react-theme/utils/themeProps.js +0 -64
- package/esm/react-theme/utils/themeProps.js.flow +0 -90
- package/esm/react-theme/utils/themeProps.js.map +0 -1
- package/esm/redux/_i18n/I18nActions.js +0 -28
- package/esm/redux/_i18n/I18nActions.js.flow +0 -38
- package/esm/redux/_i18n/I18nActions.js.map +0 -1
- package/esm/redux/_i18n/I18nReducer.js +0 -78
- package/esm/redux/_i18n/I18nReducer.js.flow +0 -91
- package/esm/redux/_i18n/I18nReducer.js.map +0 -1
- package/esm/redux/_i18n/__tests__/actions.spec.js.flow +0 -37
- package/esm/redux/_i18n/__tests__/reducer.spec.js.flow +0 -29
- package/esm/redux/_i18n/index.js +0 -3
- package/esm/redux/_i18n/index.js.flow +0 -6
- package/esm/redux/_i18n/index.js.map +0 -1
- package/esm/redux/_i18n/types.js +0 -2
- package/esm/redux/_i18n/types.js.flow +0 -20
- package/esm/redux/_i18n/types.js.map +0 -1
- package/esm/redux/_modularui/ModularUIActions.js +0 -168
- package/esm/redux/_modularui/ModularUIActions.js.flow +0 -227
- package/esm/redux/_modularui/ModularUIActions.js.map +0 -1
- package/esm/redux/_modularui/ModularUIConnector.js +0 -116
- package/esm/redux/_modularui/ModularUIConnector.js.flow +0 -155
- package/esm/redux/_modularui/ModularUIConnector.js.map +0 -1
- package/esm/redux/_modularui/ModularUIMiddleware.js +0 -99
- package/esm/redux/_modularui/ModularUIMiddleware.js.flow +0 -182
- package/esm/redux/_modularui/ModularUIMiddleware.js.map +0 -1
- package/esm/redux/_modularui/ModularUIReducer.js +0 -151
- package/esm/redux/_modularui/ModularUIReducer.js.flow +0 -169
- package/esm/redux/_modularui/ModularUIReducer.js.map +0 -1
- package/esm/redux/_modularui/ModularUISelectors.js +0 -252
- package/esm/redux/_modularui/ModularUISelectors.js.flow +0 -322
- package/esm/redux/_modularui/ModularUISelectors.js.map +0 -1
- package/esm/redux/_modularui/ModularUIUtils.js +0 -75
- package/esm/redux/_modularui/ModularUIUtils.js.flow +0 -96
- package/esm/redux/_modularui/ModularUIUtils.js.map +0 -1
- package/esm/redux/_modularui/__tests__/actions.spec.js.flow +0 -159
- package/esm/redux/_modularui/__tests__/reducer.spec.js.flow +0 -134
- package/esm/redux/_modularui/__tests__/selectors.spec.js.flow +0 -153
- package/esm/redux/_modularui/index.js +0 -8
- package/esm/redux/_modularui/index.js.flow +0 -11
- package/esm/redux/_modularui/index.js.map +0 -1
- package/esm/redux/_modularui/types.js +0 -2
- package/esm/redux/_modularui/types.js.flow +0 -121
- package/esm/redux/_modularui/types.js.map +0 -1
- package/esm/redux/_modularui/withModularUI.js +0 -34
- package/esm/redux/_modularui/withModularUI.js.flow +0 -85
- package/esm/redux/_modularui/withModularUI.js.map +0 -1
- package/esm/redux/_router/RouterActions.js +0 -55
- package/esm/redux/_router/RouterActions.js.flow +0 -75
- package/esm/redux/_router/RouterActions.js.map +0 -1
- package/esm/redux/_router/RouterConnectors.js +0 -37
- package/esm/redux/_router/RouterConnectors.js.flow +0 -97
- package/esm/redux/_router/RouterConnectors.js.map +0 -1
- package/esm/redux/_router/RouterMiddleware.js +0 -31
- package/esm/redux/_router/RouterMiddleware.js.flow +0 -37
- package/esm/redux/_router/RouterMiddleware.js.map +0 -1
- package/esm/redux/_router/RouterReducer.js +0 -15
- package/esm/redux/_router/RouterReducer.js.flow +0 -21
- package/esm/redux/_router/RouterReducer.js.map +0 -1
- package/esm/redux/_router/__tests__/actions.spec.js.flow +0 -109
- package/esm/redux/_router/__tests__/hooks.spec.js.flow +0 -98
- package/esm/redux/_router/__tests__/middleware.spec.js.flow +0 -62
- package/esm/redux/_router/__tests__/reducer.spec.js.flow +0 -26
- package/esm/redux/_router/index.js +0 -5
- package/esm/redux/_router/index.js.flow +0 -8
- package/esm/redux/_router/index.js.map +0 -1
- package/esm/redux/_router/types.js +0 -2
- package/esm/redux/_router/types.js.flow +0 -43
- package/esm/redux/_router/types.js.map +0 -1
- package/esm/redux/actions/Application.js +0 -30
- package/esm/redux/actions/Application.js.flow +0 -45
- package/esm/redux/actions/Application.js.map +0 -1
- package/esm/redux/actions/Authorization.js +0 -47
- package/esm/redux/actions/Authorization.js.flow +0 -65
- package/esm/redux/actions/Authorization.js.map +0 -1
- package/esm/redux/actions/Error.js +0 -65
- package/esm/redux/actions/Error.js.flow +0 -95
- package/esm/redux/actions/Error.js.map +0 -1
- package/esm/redux/actions/Form.js +0 -30
- package/esm/redux/actions/Form.js.flow +0 -42
- package/esm/redux/actions/Form.js.map +0 -1
- package/esm/redux/actions/FormAttributeSet.js +0 -62
- package/esm/redux/actions/FormAttributeSet.js.flow +0 -98
- package/esm/redux/actions/FormAttributeSet.js.map +0 -1
- package/esm/redux/actions/FormAttributeSetRepeatable.js +0 -26
- package/esm/redux/actions/FormAttributeSetRepeatable.js.flow +0 -45
- package/esm/redux/actions/FormAttributeSetRepeatable.js.map +0 -1
- package/esm/redux/actions/FormAutosave.js +0 -52
- package/esm/redux/actions/FormAutosave.js.flow +0 -73
- package/esm/redux/actions/FormAutosave.js.map +0 -1
- package/esm/redux/actions/FormAutosubmit.js +0 -30
- package/esm/redux/actions/FormAutosubmit.js.flow +0 -43
- package/esm/redux/actions/FormAutosubmit.js.map +0 -1
- package/esm/redux/actions/FormAutoupdate.js +0 -29
- package/esm/redux/actions/FormAutoupdate.js.flow +0 -47
- package/esm/redux/actions/FormAutoupdate.js.map +0 -1
- package/esm/redux/actions/FormValidations.js +0 -43
- package/esm/redux/actions/FormValidations.js.flow +0 -71
- package/esm/redux/actions/FormValidations.js.map +0 -1
- package/esm/redux/actions/Modals.js +0 -14
- package/esm/redux/actions/Modals.js.flow +0 -16
- package/esm/redux/actions/Modals.js.map +0 -1
- package/esm/redux/actions/ModelCatalog.js +0 -8
- package/esm/redux/actions/ModelCatalog.js.flow +0 -12
- package/esm/redux/actions/ModelCatalog.js.map +0 -1
- package/esm/redux/actions/Notification.js +0 -66
- package/esm/redux/actions/Notification.js.flow +0 -101
- package/esm/redux/actions/Notification.js.map +0 -1
- package/esm/redux/actions/Preferences.js +0 -115
- package/esm/redux/actions/Preferences.js.flow +0 -173
- package/esm/redux/actions/Preferences.js.map +0 -1
- package/esm/redux/actions/ProgressIndicator.js +0 -32
- package/esm/redux/actions/ProgressIndicator.js.flow +0 -39
- package/esm/redux/actions/ProgressIndicator.js.map +0 -1
- package/esm/redux/actions/SignIn.js +0 -77
- package/esm/redux/actions/SignIn.js.flow +0 -102
- package/esm/redux/actions/SignIn.js.map +0 -1
- package/esm/redux/actions/SignOut.js +0 -21
- package/esm/redux/actions/SignOut.js.flow +0 -29
- package/esm/redux/actions/SignOut.js.map +0 -1
- package/esm/redux/actions/__tests__/Application.spec.js.flow +0 -52
- package/esm/redux/actions/__tests__/Authorization.spec.js.flow +0 -121
- package/esm/redux/actions/__tests__/CustomErrorResponseHandler.spec.js.flow +0 -72
- package/esm/redux/actions/__tests__/Error-server.spec.js.flow +0 -134
- package/esm/redux/actions/__tests__/Error.spec.js.flow +0 -116
- package/esm/redux/actions/__tests__/Form.spec.js.flow +0 -39
- package/esm/redux/actions/__tests__/Modals.spec.js.flow +0 -34
- package/esm/redux/actions/__tests__/Notification.spec.js.flow +0 -94
- package/esm/redux/actions/__tests__/Preferences.spec.js.flow +0 -71
- package/esm/redux/actions/__tests__/ProgressIndicator.spec.js.flow +0 -53
- package/esm/redux/actions/index.js +0 -17
- package/esm/redux/actions/index.js.flow +0 -17
- package/esm/redux/actions/index.js.map +0 -1
- package/esm/redux/connectors/Application.js +0 -7
- package/esm/redux/connectors/Application.js.flow +0 -14
- package/esm/redux/connectors/Application.js.map +0 -1
- package/esm/redux/connectors/Breadcrumb.js +0 -10
- package/esm/redux/connectors/Breadcrumb.js.flow +0 -28
- package/esm/redux/connectors/Breadcrumb.js.map +0 -1
- package/esm/redux/connectors/CaseView.js +0 -12
- package/esm/redux/connectors/CaseView.js.flow +0 -14
- package/esm/redux/connectors/CaseView.js.map +0 -1
- package/esm/redux/connectors/ConceptDetail.js +0 -13
- package/esm/redux/connectors/ConceptDetail.js.flow +0 -12
- package/esm/redux/connectors/ConceptDetail.js.map +0 -1
- package/esm/redux/connectors/ContentBrowser.js +0 -12
- package/esm/redux/connectors/ContentBrowser.js.flow +0 -14
- package/esm/redux/connectors/ContentBrowser.js.map +0 -1
- package/esm/redux/connectors/ContentDetail.js +0 -13
- package/esm/redux/connectors/ContentDetail.js.flow +0 -13
- package/esm/redux/connectors/ContentDetail.js.map +0 -1
- package/esm/redux/connectors/ContentDetailSection.js +0 -15
- package/esm/redux/connectors/ContentDetailSection.js.flow +0 -17
- package/esm/redux/connectors/ContentDetailSection.js.map +0 -1
- package/esm/redux/connectors/Form.js +0 -36
- package/esm/redux/connectors/Form.js.flow +0 -83
- package/esm/redux/connectors/Form.js.map +0 -1
- package/esm/redux/connectors/FormAttributeSet.js +0 -21
- package/esm/redux/connectors/FormAttributeSet.js.flow +0 -85
- package/esm/redux/connectors/FormAttributeSet.js.map +0 -1
- package/esm/redux/connectors/ListDetail.js +0 -14
- package/esm/redux/connectors/ListDetail.js.flow +0 -16
- package/esm/redux/connectors/ListDetail.js.map +0 -1
- package/esm/redux/connectors/Modal.js +0 -20
- package/esm/redux/connectors/Modal.js.flow +0 -47
- package/esm/redux/connectors/Modal.js.map +0 -1
- package/esm/redux/connectors/ModelCatalog.js +0 -12
- package/esm/redux/connectors/ModelCatalog.js.flow +0 -14
- package/esm/redux/connectors/ModelCatalog.js.map +0 -1
- package/esm/redux/connectors/Notification.js +0 -16
- package/esm/redux/connectors/Notification.js.flow +0 -47
- package/esm/redux/connectors/Notification.js.map +0 -1
- package/esm/redux/connectors/PanelRenderer.js +0 -22
- package/esm/redux/connectors/PanelRenderer.js.flow +0 -29
- package/esm/redux/connectors/PanelRenderer.js.map +0 -1
- package/esm/redux/connectors/Preferences.js +0 -22
- package/esm/redux/connectors/Preferences.js.flow +0 -53
- package/esm/redux/connectors/Preferences.js.map +0 -1
- package/esm/redux/connectors/Progress.js +0 -13
- package/esm/redux/connectors/Progress.js.flow +0 -35
- package/esm/redux/connectors/Progress.js.map +0 -1
- package/esm/redux/connectors/ProgressIndicator.js +0 -13
- package/esm/redux/connectors/ProgressIndicator.js.flow +0 -35
- package/esm/redux/connectors/ProgressIndicator.js.map +0 -1
- package/esm/redux/connectors/QuickSearch.js +0 -20
- package/esm/redux/connectors/QuickSearch.js.flow +0 -36
- package/esm/redux/connectors/QuickSearch.js.map +0 -1
- package/esm/redux/connectors/SignIn.js +0 -18
- package/esm/redux/connectors/SignIn.js.flow +0 -47
- package/esm/redux/connectors/SignIn.js.map +0 -1
- package/esm/redux/connectors/SignOut.js +0 -14
- package/esm/redux/connectors/SignOut.js.flow +0 -38
- package/esm/redux/connectors/SignOut.js.map +0 -1
- package/esm/redux/connectors/Tab.js +0 -12
- package/esm/redux/connectors/Tab.js.flow +0 -14
- package/esm/redux/connectors/Tab.js.map +0 -1
- package/esm/redux/connectors/index.js +0 -22
- package/esm/redux/connectors/index.js.flow +0 -22
- package/esm/redux/connectors/index.js.map +0 -1
- package/esm/redux/index.js +0 -24
- package/esm/redux/index.js.flow +0 -27
- package/esm/redux/index.js.map +0 -1
- package/esm/redux/reducers/AuthReducer.js +0 -53
- package/esm/redux/reducers/AuthReducer.js.flow +0 -56
- package/esm/redux/reducers/AuthReducer.js.map +0 -1
- package/esm/redux/reducers/ErrorReducer.js +0 -16
- package/esm/redux/reducers/ErrorReducer.js.flow +0 -22
- package/esm/redux/reducers/ErrorReducer.js.map +0 -1
- package/esm/redux/reducers/ModalsReducer.js +0 -51
- package/esm/redux/reducers/ModalsReducer.js.flow +0 -58
- package/esm/redux/reducers/ModalsReducer.js.map +0 -1
- package/esm/redux/reducers/ModelCatalogReducer.js +0 -27
- package/esm/redux/reducers/ModelCatalogReducer.js.flow +0 -34
- package/esm/redux/reducers/ModelCatalogReducer.js.map +0 -1
- package/esm/redux/reducers/NotificationReducer.js +0 -37
- package/esm/redux/reducers/NotificationReducer.js.flow +0 -45
- package/esm/redux/reducers/NotificationReducer.js.map +0 -1
- package/esm/redux/reducers/PreferencesReducer.js +0 -24
- package/esm/redux/reducers/PreferencesReducer.js.flow +0 -31
- package/esm/redux/reducers/PreferencesReducer.js.map +0 -1
- package/esm/redux/reducers/ProgressIndicatorReducer.js +0 -49
- package/esm/redux/reducers/ProgressIndicatorReducer.js.flow +0 -60
- package/esm/redux/reducers/ProgressIndicatorReducer.js.map +0 -1
- package/esm/redux/reducers/__tests__/AuthReducer.spec.js.flow +0 -95
- package/esm/redux/reducers/__tests__/ErrorReducer.spec.js.flow +0 -17
- package/esm/redux/reducers/__tests__/ModalsReducer.spec.js.flow +0 -34
- package/esm/redux/reducers/__tests__/ModelCatalogReducer.spec.js.flow +0 -23
- package/esm/redux/reducers/__tests__/NotificationReducer.spec.js.flow +0 -53
- package/esm/redux/reducers/__tests__/PreferencesReducer.spec.js.flow +0 -31
- package/esm/redux/reducers/__tests__/ProgressIndicatorReducer.spec.js.flow +0 -82
- package/esm/redux/reducers/createReducer.js +0 -25
- package/esm/redux/reducers/createReducer.js.flow +0 -55
- package/esm/redux/reducers/createReducer.js.map +0 -1
- package/esm/redux/reducers/index.js +0 -9
- package/esm/redux/reducers/index.js.flow +0 -10
- package/esm/redux/reducers/index.js.map +0 -1
- package/esm/redux/selectors/i18n.js +0 -12
- package/esm/redux/selectors/i18n.js.flow +0 -15
- package/esm/redux/selectors/i18n.js.map +0 -1
- package/esm/redux/selectors/index.js +0 -3
- package/esm/redux/selectors/index.js.flow +0 -3
- package/esm/redux/selectors/index.js.map +0 -1
- package/esm/redux/selectors/modelcatalog.js +0 -7
- package/esm/redux/selectors/modelcatalog.js.flow +0 -11
- package/esm/redux/selectors/modelcatalog.js.map +0 -1
- package/esm/redux/store/__tests__/beforeRenderHooks.spec.js.flow +0 -13
- package/esm/redux/store/beforeRenderHooks.js +0 -17
- package/esm/redux/store/beforeRenderHooks.js.flow +0 -26
- package/esm/redux/store/beforeRenderHooks.js.map +0 -1
- package/esm/redux/store/configureStore.js +0 -30
- package/esm/redux/store/configureStore.js.flow +0 -59
- package/esm/redux/store/configureStore.js.map +0 -1
- package/esm/redux/types.js +0 -2
- package/esm/redux/types.js.flow +0 -241
- package/esm/redux/types.js.map +0 -1
- package/esm/utils/browser/Cache.js +0 -144
- package/esm/utils/browser/Cache.js.flow +0 -157
- package/esm/utils/browser/Cache.js.map +0 -1
- package/esm/utils/browser/Cookies.js +0 -28
- package/esm/utils/browser/Cookies.js.flow +0 -44
- package/esm/utils/browser/Cookies.js.map +0 -1
- package/esm/utils/browser/__tests__/Cookies.spec.js.flow +0 -51
- package/esm/utils/datetime/DateTimeUtil.js +0 -643
- package/esm/utils/datetime/DateTimeUtil.js.flow +0 -858
- package/esm/utils/datetime/DateTimeUtil.js.map +0 -1
- package/esm/utils/datetime/__tests__/DateTime.spec.js.flow +0 -873
- package/esm/utils/datetime/__tests__/DateTimeFormat.spec.js.flow +0 -146
- package/esm/utils/fetch/__mocks__/universalFetch.js.flow +0 -38
- package/esm/utils/fetch/__tests__/xhr.spec.js.flow +0 -281
- package/esm/utils/fetch/serverFetch.js +0 -25
- package/esm/utils/fetch/serverFetch.js.flow +0 -33
- package/esm/utils/fetch/serverFetch.js.map +0 -1
- package/esm/utils/fetch/types.js +0 -2
- package/esm/utils/fetch/types.js.flow +0 -46
- package/esm/utils/fetch/types.js.map +0 -1
- package/esm/utils/fetch/universalFetch.js +0 -87
- package/esm/utils/fetch/universalFetch.js.flow +0 -106
- package/esm/utils/fetch/universalFetch.js.map +0 -1
- package/esm/utils/fetch/xhr.js +0 -351
- package/esm/utils/fetch/xhr.js.flow +0 -409
- package/esm/utils/fetch/xhr.js.map +0 -1
- package/esm/utils/helpers/__tests__/checkResource.spec.js.flow +0 -60
- package/esm/utils/helpers/__tests__/createHash.spec.js.flow +0 -11
- package/esm/utils/helpers/__tests__/createHref.spec.js.flow +0 -39
- package/esm/utils/helpers/__tests__/objects.spec.js.flow +0 -50
- package/esm/utils/helpers/__tests__/sanitizeHTML.spec.js.flow +0 -69
- package/esm/utils/helpers/checkResource.js +0 -38
- package/esm/utils/helpers/checkResource.js.flow +0 -43
- package/esm/utils/helpers/checkResource.js.map +0 -1
- package/esm/utils/helpers/createHash.js +0 -22
- package/esm/utils/helpers/createHash.js.flow +0 -28
- package/esm/utils/helpers/createHash.js.map +0 -1
- package/esm/utils/helpers/createHref.js +0 -91
- package/esm/utils/helpers/createHref.js.flow +0 -117
- package/esm/utils/helpers/createHref.js.map +0 -1
- package/esm/utils/helpers/createUUID.js +0 -12
- package/esm/utils/helpers/createUUID.js.flow +0 -13
- package/esm/utils/helpers/createUUID.js.map +0 -1
- package/esm/utils/helpers/index.js +0 -9
- package/esm/utils/helpers/index.js.flow +0 -9
- package/esm/utils/helpers/index.js.map +0 -1
- package/esm/utils/helpers/objects.js +0 -28
- package/esm/utils/helpers/objects.js.flow +0 -33
- package/esm/utils/helpers/objects.js.map +0 -1
- package/esm/utils/helpers/repositoryResource.js +0 -19
- package/esm/utils/helpers/repositoryResource.js.flow +0 -22
- package/esm/utils/helpers/repositoryResource.js.map +0 -1
- package/esm/utils/helpers/sanitizeHtml.js +0 -38
- package/esm/utils/helpers/sanitizeHtml.js.flow +0 -55
- package/esm/utils/helpers/sanitizeHtml.js.map +0 -1
- package/esm/utils/helpers/text.js +0 -17
- package/esm/utils/helpers/text.js.flow +0 -23
- package/esm/utils/helpers/text.js.map +0 -1
- package/esm/utils/index.js +0 -19
- package/esm/utils/index.js.flow +0 -22
- package/esm/utils/index.js.map +0 -1
- package/esm/utils/number/DecimalFormat.js +0 -326
- package/esm/utils/number/DecimalFormat.js.flow +0 -410
- package/esm/utils/number/DecimalFormat.js.map +0 -1
- package/esm/utils/number/__tests__/formatValue.spec.js.flow +0 -36
- package/esm/utils/number/__tests__/parseNumbers.spec.js.flow +0 -50
- package/esm/utils/number/formatValue.js +0 -41
- package/esm/utils/number/formatValue.js.flow +0 -60
- package/esm/utils/number/formatValue.js.map +0 -1
- package/esm/utils/number/parseNumbers.js +0 -63
- package/esm/utils/number/parseNumbers.js.flow +0 -94
- package/esm/utils/number/parseNumbers.js.map +0 -1
- package/lib/builder/index.js +0 -18
- package/lib/builder/index.js.map +0 -1
- package/lib/builder/mergeLayoutHintConfigurations.js +0 -60
- package/lib/builder/mergeLayoutHintConfigurations.js.map +0 -1
- package/lib/constants/Constants.js +0 -189
- package/lib/constants/Constants.js.map +0 -1
- package/lib/constants/LayoutHintConfig.js +0 -173
- package/lib/constants/LayoutHintConfig.js.map +0 -1
- package/lib/constants/LayoutHints.js +0 -135
- package/lib/constants/LayoutHints.js.map +0 -1
- package/lib/constants/Settings.js +0 -225
- package/lib/constants/Settings.js.map +0 -1
- package/lib/constants/index.js +0 -40
- package/lib/constants/index.js.map +0 -1
- package/lib/exceptions/ConfigurationException.js +0 -17
- package/lib/exceptions/ConfigurationException.js.map +0 -1
- package/lib/exceptions/FetchException.js +0 -72
- package/lib/exceptions/FetchException.js.map +0 -1
- package/lib/exceptions/IllegalArgumentException.js +0 -17
- package/lib/exceptions/IllegalArgumentException.js.map +0 -1
- package/lib/exceptions/IllegalReturnException.js +0 -16
- package/lib/exceptions/IllegalReturnException.js.map +0 -1
- package/lib/exceptions/IllegalStateException.js +0 -17
- package/lib/exceptions/IllegalStateException.js.map +0 -1
- package/lib/exceptions/JsonParseException.js +0 -17
- package/lib/exceptions/JsonParseException.js.map +0 -1
- package/lib/exceptions/MissingPropertyException.js +0 -17
- package/lib/exceptions/MissingPropertyException.js.map +0 -1
- package/lib/exceptions/NetworkException.js +0 -23
- package/lib/exceptions/NetworkException.js.map +0 -1
- package/lib/exceptions/NotAllowedUriException.js +0 -17
- package/lib/exceptions/NotAllowedUriException.js.map +0 -1
- package/lib/exceptions/NotFoundException.js +0 -26
- package/lib/exceptions/NotFoundException.js.map +0 -1
- package/lib/exceptions/ServerRequestException.js +0 -17
- package/lib/exceptions/ServerRequestException.js.map +0 -1
- package/lib/exceptions/ThemePropertyException.js +0 -17
- package/lib/exceptions/ThemePropertyException.js.map +0 -1
- package/lib/exceptions/TimeoutException.js +0 -17
- package/lib/exceptions/TimeoutException.js.map +0 -1
- package/lib/exceptions/UnauthorizedException.js +0 -25
- package/lib/exceptions/UnauthorizedException.js.map +0 -1
- package/lib/exceptions/UnsupportedOperationException.js +0 -17
- package/lib/exceptions/UnsupportedOperationException.js.map +0 -1
- package/lib/exceptions/index.js +0 -112
- package/lib/exceptions/index.js.map +0 -1
- package/lib/hooks/index.js +0 -183
- package/lib/hooks/index.js.map +0 -1
- package/lib/hooks/useAllFormsOnModel.js +0 -81
- package/lib/hooks/useAllFormsOnModel.js.map +0 -1
- package/lib/hooks/useAuthentication.js +0 -66
- package/lib/hooks/useAuthentication.js.map +0 -1
- package/lib/hooks/useContent.js +0 -49
- package/lib/hooks/useContent.js.map +0 -1
- package/lib/hooks/useDeepCompareEffect.js +0 -34
- package/lib/hooks/useDeepCompareEffect.js.map +0 -1
- package/lib/hooks/useForm.js +0 -98
- package/lib/hooks/useForm.js.map +0 -1
- package/lib/hooks/useI18n.js +0 -42
- package/lib/hooks/useI18n.js.map +0 -1
- package/lib/hooks/useModal.js +0 -43
- package/lib/hooks/useModal.js.map +0 -1
- package/lib/hooks/useModelCatalog.js +0 -218
- package/lib/hooks/useModelCatalog.js.map +0 -1
- package/lib/hooks/useModels.js +0 -45
- package/lib/hooks/useModels.js.map +0 -1
- package/lib/hooks/useModularUI.js +0 -69
- package/lib/hooks/useModularUI.js.map +0 -1
- package/lib/hooks/useModularUIBasic.js +0 -81
- package/lib/hooks/useModularUIBasic.js.map +0 -1
- package/lib/hooks/useModularUIModel.js +0 -128
- package/lib/hooks/useModularUIModel.js.map +0 -1
- package/lib/hooks/useModularUIRequest.js +0 -25
- package/lib/hooks/useModularUIRequest.js.map +0 -1
- package/lib/hooks/useNotification.js +0 -39
- package/lib/hooks/useNotification.js.map +0 -1
- package/lib/hooks/usePreference.js +0 -23
- package/lib/hooks/usePreference.js.map +0 -1
- package/lib/hooks/useProgressIndicator.js +0 -23
- package/lib/hooks/useProgressIndicator.js.map +0 -1
- package/lib/hooks/useRouter.js +0 -42
- package/lib/hooks/useRouter.js.map +0 -1
- package/lib/i18n/Locale.js +0 -128
- package/lib/i18n/Locale.js.map +0 -1
- package/lib/i18n/Locales.js +0 -140
- package/lib/i18n/Locales.js.map +0 -1
- package/lib/i18n/Message.js +0 -50
- package/lib/i18n/Message.js.map +0 -1
- package/lib/i18n/index.js +0 -56
- package/lib/i18n/index.js.map +0 -1
- package/lib/i18n/languages.js +0 -212
- package/lib/i18n/languages.js.map +0 -1
- package/lib/i18n/translations/beinformed_error_messages_en.nl.js +0 -104
- package/lib/i18n/translations/beinformed_error_messages_en.nl.js.map +0 -1
- package/lib/i18n/translations/beinformed_error_messages_nl.nl.js +0 -104
- package/lib/i18n/translations/beinformed_error_messages_nl.nl.js.map +0 -1
- package/lib/i18n/types.js +0 -2
- package/lib/i18n/types.js.map +0 -1
- package/lib/i18n/withMessage.js +0 -27
- package/lib/i18n/withMessage.js.map +0 -1
- package/lib/index.js +0 -73
- package/lib/index.js.map +0 -1
- package/lib/models/actions/ActionCollection.js +0 -90
- package/lib/models/actions/ActionCollection.js.map +0 -1
- package/lib/models/actions/ActionModel.js +0 -194
- package/lib/models/actions/ActionModel.js.map +0 -1
- package/lib/models/application/ApplicationModel.js +0 -135
- package/lib/models/application/ApplicationModel.js.map +0 -1
- package/lib/models/attributes/AttributeCollection.js +0 -282
- package/lib/models/attributes/AttributeCollection.js.map +0 -1
- package/lib/models/attributes/AttributeContent.js +0 -203
- package/lib/models/attributes/AttributeContent.js.map +0 -1
- package/lib/models/attributes/AttributeDataHelper.js +0 -267
- package/lib/models/attributes/AttributeDataHelper.js.map +0 -1
- package/lib/models/attributes/AttributeModel.js +0 -824
- package/lib/models/attributes/AttributeModel.js.map +0 -1
- package/lib/models/attributes/AttributeSetModel.js +0 -105
- package/lib/models/attributes/AttributeSetModel.js.map +0 -1
- package/lib/models/attributes/BooleanAttributeModel.js +0 -295
- package/lib/models/attributes/BooleanAttributeModel.js.map +0 -1
- package/lib/models/attributes/CaptchaAttributeModel.js +0 -60
- package/lib/models/attributes/CaptchaAttributeModel.js.map +0 -1
- package/lib/models/attributes/ChoiceAttributeModel.js +0 -411
- package/lib/models/attributes/ChoiceAttributeModel.js.map +0 -1
- package/lib/models/attributes/ChoiceAttributeOptionCollection.js +0 -313
- package/lib/models/attributes/ChoiceAttributeOptionCollection.js.map +0 -1
- package/lib/models/attributes/ChoiceAttributeOptionModel.js +0 -342
- package/lib/models/attributes/ChoiceAttributeOptionModel.js.map +0 -1
- package/lib/models/attributes/CompositeAttributeChildCollection.js +0 -189
- package/lib/models/attributes/CompositeAttributeChildCollection.js.map +0 -1
- package/lib/models/attributes/CompositeAttributeModel.js +0 -381
- package/lib/models/attributes/CompositeAttributeModel.js.map +0 -1
- package/lib/models/attributes/DatetimeAttributeModel.js +0 -465
- package/lib/models/attributes/DatetimeAttributeModel.js.map +0 -1
- package/lib/models/attributes/HelptextAttributeModel.js +0 -55
- package/lib/models/attributes/HelptextAttributeModel.js.map +0 -1
- package/lib/models/attributes/LabelAttributeModel.js +0 -41
- package/lib/models/attributes/LabelAttributeModel.js.map +0 -1
- package/lib/models/attributes/MemoAttributeModel.js +0 -49
- package/lib/models/attributes/MemoAttributeModel.js.map +0 -1
- package/lib/models/attributes/MoneyAttributeModel.js +0 -49
- package/lib/models/attributes/MoneyAttributeModel.js.map +0 -1
- package/lib/models/attributes/NumberAttributeModel.js +0 -201
- package/lib/models/attributes/NumberAttributeModel.js.map +0 -1
- package/lib/models/attributes/PasswordAttributeModel.js +0 -217
- package/lib/models/attributes/PasswordAttributeModel.js.map +0 -1
- package/lib/models/attributes/StringAttributeModel.js +0 -284
- package/lib/models/attributes/StringAttributeModel.js.map +0 -1
- package/lib/models/attributes/UploadAttributeModel.js +0 -223
- package/lib/models/attributes/UploadAttributeModel.js.map +0 -1
- package/lib/models/attributes/XMLAttributeModel.js +0 -53
- package/lib/models/attributes/XMLAttributeModel.js.map +0 -1
- package/lib/models/attributes/_createAttribute.js +0 -93
- package/lib/models/attributes/_createAttribute.js.map +0 -1
- package/lib/models/attributes/input-constraints/BSNConstraint.js +0 -72
- package/lib/models/attributes/input-constraints/BSNConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/ConstraintCollection.js +0 -50
- package/lib/models/attributes/input-constraints/ConstraintCollection.js.map +0 -1
- package/lib/models/attributes/input-constraints/ConstraintModel.js +0 -74
- package/lib/models/attributes/input-constraints/ConstraintModel.js.map +0 -1
- package/lib/models/attributes/input-constraints/DateBoundaryConstraint.js +0 -205
- package/lib/models/attributes/input-constraints/DateBoundaryConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/DateTimeDateFormatConstraint.js +0 -76
- package/lib/models/attributes/input-constraints/DateTimeDateFormatConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/DateTimeTimeFormatConstraint.js +0 -76
- package/lib/models/attributes/input-constraints/DateTimeTimeFormatConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/DatetimeFormatConstraint.js +0 -122
- package/lib/models/attributes/input-constraints/DatetimeFormatConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/FileExtensionConstraint.js +0 -66
- package/lib/models/attributes/input-constraints/FileExtensionConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/FileSizeConstraint.js +0 -98
- package/lib/models/attributes/input-constraints/FileSizeConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/IBANConstraint.js +0 -49
- package/lib/models/attributes/input-constraints/IBANConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/MandatoryConstraint.js +0 -53
- package/lib/models/attributes/input-constraints/MandatoryConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/MandatoryRangeConstraint.js +0 -85
- package/lib/models/attributes/input-constraints/MandatoryRangeConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/NumberBoundaryConstraint.js +0 -177
- package/lib/models/attributes/input-constraints/NumberBoundaryConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/NumberFormatConstraint.js +0 -132
- package/lib/models/attributes/input-constraints/NumberFormatConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/NumberGroupingConstraint.js +0 -126
- package/lib/models/attributes/input-constraints/NumberGroupingConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/PasswordConfirmConstraint.js +0 -72
- package/lib/models/attributes/input-constraints/PasswordConfirmConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/PasswordLowerAndUpperCaseConstraint.js +0 -47
- package/lib/models/attributes/input-constraints/PasswordLowerAndUpperCaseConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/PasswordMinNumericCharactersConstraint.js +0 -64
- package/lib/models/attributes/input-constraints/PasswordMinNumericCharactersConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/PasswordMinSpecialCharactersConstraint.js +0 -64
- package/lib/models/attributes/input-constraints/PasswordMinSpecialCharactersConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/PasswordThreeConsecutiveCharactersNotAllowedConstraint.js +0 -78
- package/lib/models/attributes/input-constraints/PasswordThreeConsecutiveCharactersNotAllowedConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/RangeConstraint.js +0 -143
- package/lib/models/attributes/input-constraints/RangeConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/RegexConstraint.js +0 -67
- package/lib/models/attributes/input-constraints/RegexConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/StringLengthConstraint.js +0 -178
- package/lib/models/attributes/input-constraints/StringLengthConstraint.js.map +0 -1
- package/lib/models/attributes/input-constraints/XMLConstraint.js +0 -62
- package/lib/models/attributes/input-constraints/XMLConstraint.js.map +0 -1
- package/lib/models/attributes/layouthint-rules/BaseLayoutHintRule.js +0 -66
- package/lib/models/attributes/layouthint-rules/BaseLayoutHintRule.js.map +0 -1
- package/lib/models/attributes/layouthint-rules/DependentAttribute.js +0 -200
- package/lib/models/attributes/layouthint-rules/DependentAttribute.js.map +0 -1
- package/lib/models/attributes/layouthint-rules/LayoutHintRuleCollection.js +0 -88
- package/lib/models/attributes/layouthint-rules/LayoutHintRuleCollection.js.map +0 -1
- package/lib/models/attributes/layouthint-rules/RemainingTotalUploadSize.js +0 -51
- package/lib/models/attributes/layouthint-rules/RemainingTotalUploadSize.js.map +0 -1
- package/lib/models/base/BaseCollection.js +0 -186
- package/lib/models/base/BaseCollection.js.map +0 -1
- package/lib/models/base/BaseModel.js +0 -149
- package/lib/models/base/BaseModel.js.map +0 -1
- package/lib/models/base/ResourceCollection.js +0 -41
- package/lib/models/base/ResourceCollection.js.map +0 -1
- package/lib/models/base/ResourceModel.js +0 -209
- package/lib/models/base/ResourceModel.js.map +0 -1
- package/lib/models/caseview/CaseViewModel.js +0 -163
- package/lib/models/caseview/CaseViewModel.js.map +0 -1
- package/lib/models/concepts/BusinessScenarioModel.js +0 -122
- package/lib/models/concepts/BusinessScenarioModel.js.map +0 -1
- package/lib/models/concepts/ConceptDetailModel.js +0 -281
- package/lib/models/concepts/ConceptDetailModel.js.map +0 -1
- package/lib/models/concepts/ConceptIndexModel.js +0 -150
- package/lib/models/concepts/ConceptIndexModel.js.map +0 -1
- package/lib/models/concepts/ConceptLinkModel.js +0 -172
- package/lib/models/concepts/ConceptLinkModel.js.map +0 -1
- package/lib/models/concepts/ConceptRelationCollection.js +0 -82
- package/lib/models/concepts/ConceptRelationCollection.js.map +0 -1
- package/lib/models/concepts/ConceptRelationModel.js +0 -115
- package/lib/models/concepts/ConceptRelationModel.js.map +0 -1
- package/lib/models/concepts/ConceptTypeDetailModel.js +0 -128
- package/lib/models/concepts/ConceptTypeDetailModel.js.map +0 -1
- package/lib/models/concepts/SourceReferenceCollection.js +0 -35
- package/lib/models/concepts/SourceReferenceCollection.js.map +0 -1
- package/lib/models/concepts/SourceReferenceModel.js +0 -100
- package/lib/models/concepts/SourceReferenceModel.js.map +0 -1
- package/lib/models/content/ContentIndexModel.js +0 -142
- package/lib/models/content/ContentIndexModel.js.map +0 -1
- package/lib/models/content/ContentLinkModel.js +0 -258
- package/lib/models/content/ContentLinkModel.js.map +0 -1
- package/lib/models/content/ContentModel.js +0 -207
- package/lib/models/content/ContentModel.js.map +0 -1
- package/lib/models/content/ContentTOCModel.js +0 -212
- package/lib/models/content/ContentTOCModel.js.map +0 -1
- package/lib/models/content/ContentTypeModel.js +0 -74
- package/lib/models/content/ContentTypeModel.js.map +0 -1
- package/lib/models/content/SectionModel.js +0 -200
- package/lib/models/content/SectionModel.js.map +0 -1
- package/lib/models/content/SubSectionModel.js +0 -167
- package/lib/models/content/SubSectionModel.js.map +0 -1
- package/lib/models/contentconfiguration/ContentConfiguration.js +0 -75
- package/lib/models/contentconfiguration/ContentConfiguration.js.map +0 -1
- package/lib/models/contentconfiguration/ContentConfigurationElements.js +0 -143
- package/lib/models/contentconfiguration/ContentConfigurationElements.js.map +0 -1
- package/lib/models/contentconfiguration/ContentConfigurationEndResults.js +0 -49
- package/lib/models/contentconfiguration/ContentConfigurationEndResults.js.map +0 -1
- package/lib/models/contentconfiguration/ContentConfigurationQuestions.js +0 -54
- package/lib/models/contentconfiguration/ContentConfigurationQuestions.js.map +0 -1
- package/lib/models/contentconfiguration/ContentConfigurationResults.js +0 -103
- package/lib/models/contentconfiguration/ContentConfigurationResults.js.map +0 -1
- package/lib/models/detail/DetailModel.js +0 -219
- package/lib/models/detail/DetailModel.js.map +0 -1
- package/lib/models/error/ErrorCollection.js +0 -111
- package/lib/models/error/ErrorCollection.js.map +0 -1
- package/lib/models/error/ErrorModel.js +0 -81
- package/lib/models/error/ErrorModel.js.map +0 -1
- package/lib/models/error/ErrorResponse.js +0 -304
- package/lib/models/error/ErrorResponse.js.map +0 -1
- package/lib/models/filters/AssignmentFilterModel.js +0 -161
- package/lib/models/filters/AssignmentFilterModel.js.map +0 -1
- package/lib/models/filters/BaseFilterModel.js +0 -210
- package/lib/models/filters/BaseFilterModel.js.map +0 -1
- package/lib/models/filters/ConceptIndexFilterModel.js +0 -37
- package/lib/models/filters/ConceptIndexFilterModel.js.map +0 -1
- package/lib/models/filters/FilterCollection.js +0 -155
- package/lib/models/filters/FilterCollection.js.map +0 -1
- package/lib/models/filters/FilterModel.js +0 -13
- package/lib/models/filters/FilterModel.js.map +0 -1
- package/lib/models/filters/RangeFilterModel.js +0 -44
- package/lib/models/filters/RangeFilterModel.js.map +0 -1
- package/lib/models/filters/StringFilterModel.js +0 -147
- package/lib/models/filters/StringFilterModel.js.map +0 -1
- package/lib/models/form/FormModel.js +0 -1038
- package/lib/models/form/FormModel.js.map +0 -1
- package/lib/models/form/FormObjectModel.js +0 -477
- package/lib/models/form/FormObjectModel.js.map +0 -1
- package/lib/models/grouping/GroupingModel.js +0 -191
- package/lib/models/grouping/GroupingModel.js.map +0 -1
- package/lib/models/href/Href.js +0 -497
- package/lib/models/href/Href.js.map +0 -1
- package/lib/models/href/ListHref.js +0 -135
- package/lib/models/href/ListHref.js.map +0 -1
- package/lib/models/index.js +0 -686
- package/lib/models/index.js.map +0 -1
- package/lib/models/layouthint/LayoutHintCollection.js +0 -118
- package/lib/models/layouthint/LayoutHintCollection.js.map +0 -1
- package/lib/models/links/LinkCollection.js +0 -171
- package/lib/models/links/LinkCollection.js.map +0 -1
- package/lib/models/links/LinkModel.js +0 -216
- package/lib/models/links/LinkModel.js.map +0 -1
- package/lib/models/links/normalizeLinkJSON.js +0 -107
- package/lib/models/links/normalizeLinkJSON.js.map +0 -1
- package/lib/models/list/ListDetailModel.js +0 -267
- package/lib/models/list/ListDetailModel.js.map +0 -1
- package/lib/models/list/ListHeaderModel.js +0 -95
- package/lib/models/list/ListHeaderModel.js.map +0 -1
- package/lib/models/list/ListItemCollection.js +0 -67
- package/lib/models/list/ListItemCollection.js.map +0 -1
- package/lib/models/list/ListItemModel.js +0 -95
- package/lib/models/list/ListItemModel.js.map +0 -1
- package/lib/models/list/ListModel.js +0 -386
- package/lib/models/list/ListModel.js.map +0 -1
- package/lib/models/lookup/LookupOptionCollection.js +0 -45
- package/lib/models/lookup/LookupOptionCollection.js.map +0 -1
- package/lib/models/lookup/LookupOptionsModel.js +0 -71
- package/lib/models/lookup/LookupOptionsModel.js.map +0 -1
- package/lib/models/modelcatalog/ModelCatalogModel.js +0 -69
- package/lib/models/modelcatalog/ModelCatalogModel.js.map +0 -1
- package/lib/models/modelcatalog/ModelCategoryCollection.js +0 -24
- package/lib/models/modelcatalog/ModelCategoryCollection.js.map +0 -1
- package/lib/models/modelcatalog/ModelCategoryModel.js +0 -60
- package/lib/models/modelcatalog/ModelCategoryModel.js.map +0 -1
- package/lib/models/paging/PagesizeModel.js +0 -50
- package/lib/models/paging/PagesizeModel.js.map +0 -1
- package/lib/models/paging/PagingModel.js +0 -95
- package/lib/models/paging/PagingModel.js.map +0 -1
- package/lib/models/panels/GroupingPanelModel.js +0 -143
- package/lib/models/panels/GroupingPanelModel.js.map +0 -1
- package/lib/models/parameter/Parameter.js +0 -108
- package/lib/models/parameter/Parameter.js.map +0 -1
- package/lib/models/process/ProcessStatusSettingsModel.js +0 -85
- package/lib/models/process/ProcessStatusSettingsModel.js.map +0 -1
- package/lib/models/resolveModel.js +0 -57
- package/lib/models/resolveModel.js.map +0 -1
- package/lib/models/search/CaseSearchModel.js +0 -47
- package/lib/models/search/CaseSearchModel.js.map +0 -1
- package/lib/models/sorting/SortOptionModel.js +0 -106
- package/lib/models/sorting/SortOptionModel.js.map +0 -1
- package/lib/models/sorting/SortingModel.js +0 -112
- package/lib/models/sorting/SortingModel.js.map +0 -1
- package/lib/models/tab/TabModel.js +0 -143
- package/lib/models/tab/TabModel.js.map +0 -1
- package/lib/models/taskgroup/TaskGroupCollection.js +0 -21
- package/lib/models/taskgroup/TaskGroupCollection.js.map +0 -1
- package/lib/models/taskgroup/TaskGroupModel.js +0 -87
- package/lib/models/taskgroup/TaskGroupModel.js.map +0 -1
- package/lib/models/types.js +0 -2
- package/lib/models/types.js.map +0 -1
- package/lib/models/user/UserModel.js +0 -59
- package/lib/models/user/UserModel.js.map +0 -1
- package/lib/models/user/UserProfileModel.js +0 -55
- package/lib/models/user/UserProfileModel.js.map +0 -1
- package/lib/models/user/UserServicesModel.js +0 -126
- package/lib/models/user/UserServicesModel.js.map +0 -1
- package/lib/modularui/Authenticate.js +0 -183
- package/lib/modularui/Authenticate.js.map +0 -1
- package/lib/modularui/CaptchaRequest.js +0 -71
- package/lib/modularui/CaptchaRequest.js.map +0 -1
- package/lib/modularui/ModularUIError.js +0 -30
- package/lib/modularui/ModularUIError.js.map +0 -1
- package/lib/modularui/ModularUIRequest.js +0 -719
- package/lib/modularui/ModularUIRequest.js.map +0 -1
- package/lib/modularui/ModularUIResponse.js +0 -147
- package/lib/modularui/ModularUIResponse.js.map +0 -1
- package/lib/modularui/UploadRequest.js +0 -104
- package/lib/modularui/UploadRequest.js.map +0 -1
- package/lib/modularui/index.js +0 -42
- package/lib/modularui/index.js.map +0 -1
- package/lib/modularui/types.js +0 -2
- package/lib/modularui/types.js.map +0 -1
- package/lib/react/ErrorBoundary.js +0 -56
- package/lib/react/ErrorBoundary.js.map +0 -1
- package/lib/react/ErrorBoundaryFallback.js +0 -41
- package/lib/react/ErrorBoundaryFallback.js.map +0 -1
- package/lib/react/index.js +0 -29
- package/lib/react/index.js.map +0 -1
- package/lib/react/utils.js +0 -32
- package/lib/react/utils.js.map +0 -1
- package/lib/react-client/Init.js +0 -44
- package/lib/react-client/Init.js.map +0 -1
- package/lib/react-client/client.js +0 -236
- package/lib/react-client/client.js.map +0 -1
- package/lib/react-client/contextPath.js +0 -26
- package/lib/react-client/contextPath.js.map +0 -1
- package/lib/react-client/index.js +0 -40
- package/lib/react-client/index.js.map +0 -1
- package/lib/react-client/rehydrate.js +0 -73
- package/lib/react-client/rehydrate.js.map +0 -1
- package/lib/react-server/contextPath.js +0 -10
- package/lib/react-server/contextPath.js.map +0 -1
- package/lib/react-server/createSSRComplete.js +0 -61
- package/lib/react-server/createSSRComplete.js.map +0 -1
- package/lib/react-server/htmlpage.js +0 -54
- package/lib/react-server/htmlpage.js.map +0 -1
- package/lib/react-server/index.js +0 -82
- package/lib/react-server/index.js.map +0 -1
- package/lib/react-server/renderSSRComplete.js +0 -91
- package/lib/react-server/renderSSRComplete.js.map +0 -1
- package/lib/react-server/renderSSRMinimal.js +0 -47
- package/lib/react-server/renderSSRMinimal.js.map +0 -1
- package/lib/react-server/requestInformation.js +0 -64
- package/lib/react-server/requestInformation.js.map +0 -1
- package/lib/react-server/serverNoSSR.js +0 -63
- package/lib/react-server/serverNoSSR.js.map +0 -1
- package/lib/react-server/serverSSR.js +0 -51
- package/lib/react-server/serverSSR.js.map +0 -1
- package/lib/react-server/serverUtil.js +0 -217
- package/lib/react-server/serverUtil.js.map +0 -1
- package/lib/react-theme/ThemeProvider.js +0 -33
- package/lib/react-theme/ThemeProvider.js.map +0 -1
- package/lib/react-theme/createTheme.js +0 -115
- package/lib/react-theme/createTheme.js.map +0 -1
- package/lib/react-theme/index.js +0 -110
- package/lib/react-theme/index.js.map +0 -1
- package/lib/react-theme/types.js +0 -2
- package/lib/react-theme/types.js.map +0 -1
- package/lib/react-theme/useTheme.js +0 -15
- package/lib/react-theme/useTheme.js.map +0 -1
- package/lib/react-theme/utils/background.js +0 -21
- package/lib/react-theme/utils/background.js.map +0 -1
- package/lib/react-theme/utils/colors.js +0 -45
- package/lib/react-theme/utils/colors.js.map +0 -1
- package/lib/react-theme/utils/contrast.js +0 -95
- package/lib/react-theme/utils/contrast.js.map +0 -1
- package/lib/react-theme/utils/corners.js +0 -34
- package/lib/react-theme/utils/corners.js.map +0 -1
- package/lib/react-theme/utils/spacers.js +0 -89
- package/lib/react-theme/utils/spacers.js.map +0 -1
- package/lib/react-theme/utils/themeProps.js +0 -75
- package/lib/react-theme/utils/themeProps.js.map +0 -1
- package/lib/redux/_i18n/I18nActions.js +0 -37
- package/lib/redux/_i18n/I18nActions.js.map +0 -1
- package/lib/redux/_i18n/I18nReducer.js +0 -86
- package/lib/redux/_i18n/I18nReducer.js.map +0 -1
- package/lib/redux/_i18n/index.js +0 -29
- package/lib/redux/_i18n/index.js.map +0 -1
- package/lib/redux/_i18n/types.js +0 -2
- package/lib/redux/_i18n/types.js.map +0 -1
- package/lib/redux/_modularui/ModularUIActions.js +0 -185
- package/lib/redux/_modularui/ModularUIActions.js.map +0 -1
- package/lib/redux/_modularui/ModularUIConnector.js +0 -123
- package/lib/redux/_modularui/ModularUIConnector.js.map +0 -1
- package/lib/redux/_modularui/ModularUIMiddleware.js +0 -107
- package/lib/redux/_modularui/ModularUIMiddleware.js.map +0 -1
- package/lib/redux/_modularui/ModularUIReducer.js +0 -159
- package/lib/redux/_modularui/ModularUIReducer.js.map +0 -1
- package/lib/redux/_modularui/ModularUISelectors.js +0 -270
- package/lib/redux/_modularui/ModularUISelectors.js.map +0 -1
- package/lib/redux/_modularui/ModularUIUtils.js +0 -85
- package/lib/redux/_modularui/ModularUIUtils.js.map +0 -1
- package/lib/redux/_modularui/index.js +0 -86
- package/lib/redux/_modularui/index.js.map +0 -1
- package/lib/redux/_modularui/types.js +0 -2
- package/lib/redux/_modularui/types.js.map +0 -1
- package/lib/redux/_modularui/withModularUI.js +0 -41
- package/lib/redux/_modularui/withModularUI.js.map +0 -1
- package/lib/redux/_router/RouterActions.js +0 -67
- package/lib/redux/_router/RouterActions.js.map +0 -1
- package/lib/redux/_router/RouterConnectors.js +0 -42
- package/lib/redux/_router/RouterConnectors.js.map +0 -1
- package/lib/redux/_router/RouterMiddleware.js +0 -38
- package/lib/redux/_router/RouterMiddleware.js.map +0 -1
- package/lib/redux/_router/RouterReducer.js +0 -22
- package/lib/redux/_router/RouterReducer.js.map +0 -1
- package/lib/redux/_router/index.js +0 -51
- package/lib/redux/_router/index.js.map +0 -1
- package/lib/redux/_router/types.js +0 -2
- package/lib/redux/_router/types.js.map +0 -1
- package/lib/redux/actions/Application.js +0 -38
- package/lib/redux/actions/Application.js.map +0 -1
- package/lib/redux/actions/Authorization.js +0 -55
- package/lib/redux/actions/Authorization.js.map +0 -1
- package/lib/redux/actions/Error.js +0 -74
- package/lib/redux/actions/Error.js.map +0 -1
- package/lib/redux/actions/Form.js +0 -39
- package/lib/redux/actions/Form.js.map +0 -1
- package/lib/redux/actions/FormAttributeSet.js +0 -69
- package/lib/redux/actions/FormAttributeSet.js.map +0 -1
- package/lib/redux/actions/FormAttributeSetRepeatable.js +0 -35
- package/lib/redux/actions/FormAttributeSetRepeatable.js.map +0 -1
- package/lib/redux/actions/FormAutosave.js +0 -60
- package/lib/redux/actions/FormAutosave.js.map +0 -1
- package/lib/redux/actions/FormAutosubmit.js +0 -38
- package/lib/redux/actions/FormAutosubmit.js.map +0 -1
- package/lib/redux/actions/FormAutoupdate.js +0 -37
- package/lib/redux/actions/FormAutoupdate.js.map +0 -1
- package/lib/redux/actions/FormValidations.js +0 -51
- package/lib/redux/actions/FormValidations.js.map +0 -1
- package/lib/redux/actions/Modals.js +0 -22
- package/lib/redux/actions/Modals.js.map +0 -1
- package/lib/redux/actions/ModelCatalog.js +0 -15
- package/lib/redux/actions/ModelCatalog.js.map +0 -1
- package/lib/redux/actions/Notification.js +0 -76
- package/lib/redux/actions/Notification.js.map +0 -1
- package/lib/redux/actions/Preferences.js +0 -128
- package/lib/redux/actions/Preferences.js.map +0 -1
- package/lib/redux/actions/ProgressIndicator.js +0 -42
- package/lib/redux/actions/ProgressIndicator.js.map +0 -1
- package/lib/redux/actions/SignIn.js +0 -90
- package/lib/redux/actions/SignIn.js.map +0 -1
- package/lib/redux/actions/SignOut.js +0 -30
- package/lib/redux/actions/SignOut.js.map +0 -1
- package/lib/redux/actions/index.js +0 -183
- package/lib/redux/actions/index.js.map +0 -1
- package/lib/redux/connectors/Application.js +0 -14
- package/lib/redux/connectors/Application.js.map +0 -1
- package/lib/redux/connectors/Breadcrumb.js +0 -16
- package/lib/redux/connectors/Breadcrumb.js.map +0 -1
- package/lib/redux/connectors/CaseView.js +0 -19
- package/lib/redux/connectors/CaseView.js.map +0 -1
- package/lib/redux/connectors/ConceptDetail.js +0 -20
- package/lib/redux/connectors/ConceptDetail.js.map +0 -1
- package/lib/redux/connectors/ContentBrowser.js +0 -19
- package/lib/redux/connectors/ContentBrowser.js.map +0 -1
- package/lib/redux/connectors/ContentDetail.js +0 -20
- package/lib/redux/connectors/ContentDetail.js.map +0 -1
- package/lib/redux/connectors/ContentDetailSection.js +0 -22
- package/lib/redux/connectors/ContentDetailSection.js.map +0 -1
- package/lib/redux/connectors/Form.js +0 -43
- package/lib/redux/connectors/Form.js.map +0 -1
- package/lib/redux/connectors/FormAttributeSet.js +0 -27
- package/lib/redux/connectors/FormAttributeSet.js.map +0 -1
- package/lib/redux/connectors/ListDetail.js +0 -21
- package/lib/redux/connectors/ListDetail.js.map +0 -1
- package/lib/redux/connectors/Modal.js +0 -27
- package/lib/redux/connectors/Modal.js.map +0 -1
- package/lib/redux/connectors/ModelCatalog.js +0 -19
- package/lib/redux/connectors/ModelCatalog.js.map +0 -1
- package/lib/redux/connectors/Notification.js +0 -22
- package/lib/redux/connectors/Notification.js.map +0 -1
- package/lib/redux/connectors/PanelRenderer.js +0 -29
- package/lib/redux/connectors/PanelRenderer.js.map +0 -1
- package/lib/redux/connectors/Preferences.js +0 -29
- package/lib/redux/connectors/Preferences.js.map +0 -1
- package/lib/redux/connectors/Progress.js +0 -19
- package/lib/redux/connectors/Progress.js.map +0 -1
- package/lib/redux/connectors/ProgressIndicator.js +0 -19
- package/lib/redux/connectors/ProgressIndicator.js.map +0 -1
- package/lib/redux/connectors/QuickSearch.js +0 -27
- package/lib/redux/connectors/QuickSearch.js.map +0 -1
- package/lib/redux/connectors/SignIn.js +0 -24
- package/lib/redux/connectors/SignIn.js.map +0 -1
- package/lib/redux/connectors/SignOut.js +0 -20
- package/lib/redux/connectors/SignOut.js.map +0 -1
- package/lib/redux/connectors/Tab.js +0 -19
- package/lib/redux/connectors/Tab.js.map +0 -1
- package/lib/redux/connectors/index.js +0 -153
- package/lib/redux/connectors/index.js.map +0 -1
- package/lib/redux/index.js +0 -102
- package/lib/redux/index.js.map +0 -1
- package/lib/redux/reducers/AuthReducer.js +0 -59
- package/lib/redux/reducers/AuthReducer.js.map +0 -1
- package/lib/redux/reducers/ErrorReducer.js +0 -22
- package/lib/redux/reducers/ErrorReducer.js.map +0 -1
- package/lib/redux/reducers/ModalsReducer.js +0 -58
- package/lib/redux/reducers/ModalsReducer.js.map +0 -1
- package/lib/redux/reducers/ModelCatalogReducer.js +0 -34
- package/lib/redux/reducers/ModelCatalogReducer.js.map +0 -1
- package/lib/redux/reducers/NotificationReducer.js +0 -43
- package/lib/redux/reducers/NotificationReducer.js.map +0 -1
- package/lib/redux/reducers/PreferencesReducer.js +0 -30
- package/lib/redux/reducers/PreferencesReducer.js.map +0 -1
- package/lib/redux/reducers/ProgressIndicatorReducer.js +0 -55
- package/lib/redux/reducers/ProgressIndicatorReducer.js.map +0 -1
- package/lib/redux/reducers/createReducer.js +0 -33
- package/lib/redux/reducers/createReducer.js.map +0 -1
- package/lib/redux/reducers/index.js +0 -78
- package/lib/redux/reducers/index.js.map +0 -1
- package/lib/redux/selectors/i18n.js +0 -20
- package/lib/redux/selectors/i18n.js.map +0 -1
- package/lib/redux/selectors/index.js +0 -29
- package/lib/redux/selectors/index.js.map +0 -1
- package/lib/redux/selectors/modelcatalog.js +0 -14
- package/lib/redux/selectors/modelcatalog.js.map +0 -1
- package/lib/redux/store/beforeRenderHooks.js +0 -24
- package/lib/redux/store/beforeRenderHooks.js.map +0 -1
- package/lib/redux/store/configureStore.js +0 -37
- package/lib/redux/store/configureStore.js.map +0 -1
- package/lib/redux/types.js +0 -2
- package/lib/redux/types.js.map +0 -1
- package/lib/utils/browser/Cache.js +0 -151
- package/lib/utils/browser/Cache.js.map +0 -1
- package/lib/utils/browser/Cookies.js +0 -38
- package/lib/utils/browser/Cookies.js.map +0 -1
- package/lib/utils/datetime/DateTimeUtil.js +0 -649
- package/lib/utils/datetime/DateTimeUtil.js.map +0 -1
- package/lib/utils/fetch/serverFetch.js +0 -32
- package/lib/utils/fetch/serverFetch.js.map +0 -1
- package/lib/utils/fetch/types.js +0 -2
- package/lib/utils/fetch/types.js.map +0 -1
- package/lib/utils/fetch/universalFetch.js +0 -94
- package/lib/utils/fetch/universalFetch.js.map +0 -1
- package/lib/utils/fetch/xhr.js +0 -358
- package/lib/utils/fetch/xhr.js.map +0 -1
- package/lib/utils/helpers/checkResource.js +0 -46
- package/lib/utils/helpers/checkResource.js.map +0 -1
- package/lib/utils/helpers/createHash.js +0 -30
- package/lib/utils/helpers/createHash.js.map +0 -1
- package/lib/utils/helpers/createHref.js +0 -101
- package/lib/utils/helpers/createHref.js.map +0 -1
- package/lib/utils/helpers/createUUID.js +0 -18
- package/lib/utils/helpers/createUUID.js.map +0 -1
- package/lib/utils/helpers/index.js +0 -102
- package/lib/utils/helpers/index.js.map +0 -1
- package/lib/utils/helpers/objects.js +0 -36
- package/lib/utils/helpers/objects.js.map +0 -1
- package/lib/utils/helpers/repositoryResource.js +0 -26
- package/lib/utils/helpers/repositoryResource.js.map +0 -1
- package/lib/utils/helpers/sanitizeHtml.js +0 -44
- package/lib/utils/helpers/sanitizeHtml.js.map +0 -1
- package/lib/utils/helpers/text.js +0 -23
- package/lib/utils/helpers/text.js.map +0 -1
- package/lib/utils/index.js +0 -106
- package/lib/utils/index.js.map +0 -1
- package/lib/utils/number/DecimalFormat.js +0 -333
- package/lib/utils/number/DecimalFormat.js.map +0 -1
- package/lib/utils/number/formatValue.js +0 -47
- package/lib/utils/number/formatValue.js.map +0 -1
- package/lib/utils/number/parseNumbers.js +0 -70
- package/lib/utils/number/parseNumbers.js.map +0 -1
- package/src/builder/__tests__/LayoutHintConfig.json +0 -20
- package/src/builder/__tests__/mergeLayoutHintConfigurations.spec.js +0 -71
- package/src/builder/__tests__/subdir/LayoutHintConfig.json +0 -20
- package/src/builder/index.js +0 -2
- package/src/builder/mergeLayoutHintConfigurations.js +0 -62
- package/src/constants/Constants.js +0 -190
- package/src/constants/LayoutHintConfig.js +0 -186
- package/src/constants/LayoutHints.js +0 -134
- package/src/constants/Settings.js +0 -269
- package/src/constants/index.js +0 -4
- package/src/exceptions/ConfigurationException.js +0 -13
- package/src/exceptions/FetchException.js +0 -101
- package/src/exceptions/IllegalArgumentException.js +0 -12
- package/src/exceptions/IllegalReturnException.js +0 -11
- package/src/exceptions/IllegalStateException.js +0 -12
- package/src/exceptions/JsonParseException.js +0 -12
- package/src/exceptions/MissingPropertyException.js +0 -13
- package/src/exceptions/NetworkException.js +0 -20
- package/src/exceptions/NotAllowedUriException.js +0 -12
- package/src/exceptions/NotFoundException.js +0 -20
- package/src/exceptions/ServerRequestException.js +0 -12
- package/src/exceptions/ThemePropertyException.js +0 -12
- package/src/exceptions/TimeoutException.js +0 -13
- package/src/exceptions/UnauthorizedException.js +0 -26
- package/src/exceptions/UnsupportedOperationException.js +0 -12
- package/src/exceptions/index.js +0 -16
- package/src/hooks/__tests__/UseModularUIModel.spec.js +0 -193
- package/src/hooks/__tests__/useAuthentication.spec.js +0 -122
- package/src/hooks/__tests__/useForm.spec.js +0 -300
- package/src/hooks/__tests__/useI18n.spec.js +0 -30
- package/src/hooks/__tests__/useModal.spec.js +0 -67
- package/src/hooks/__tests__/useModelCatalog.spec.js +0 -180
- package/src/hooks/__tests__/useModels.spec.js +0 -138
- package/src/hooks/__tests__/useModularUIBasic.spec.js +0 -126
- package/src/hooks/__tests__/useNotification.spec.js +0 -47
- package/src/hooks/__tests__/usePreference.spec.js +0 -72
- package/src/hooks/__tests__/useProgressIndicator.spec.js +0 -67
- package/src/hooks/index.js +0 -17
- package/src/hooks/useAllFormsOnModel.js +0 -92
- package/src/hooks/useAuthentication.js +0 -98
- package/src/hooks/useContent.js +0 -48
- package/src/hooks/useDeepCompareEffect.js +0 -34
- package/src/hooks/useForm.js +0 -153
- package/src/hooks/useI18n.js +0 -46
- package/src/hooks/useModal.js +0 -46
- package/src/hooks/useModelCatalog.js +0 -256
- package/src/hooks/useModels.js +0 -50
- package/src/hooks/useModularUI.js +0 -90
- package/src/hooks/useModularUIBasic.js +0 -101
- package/src/hooks/useModularUIModel.js +0 -165
- package/src/hooks/useModularUIRequest.js +0 -25
- package/src/hooks/useNotification.js +0 -48
- package/src/hooks/usePreference.js +0 -27
- package/src/hooks/useProgressIndicator.js +0 -33
- package/src/hooks/useRouter.js +0 -64
- package/src/i18n/Locale.js +0 -157
- package/src/i18n/Locales.js +0 -171
- package/src/i18n/Message.js +0 -66
- package/src/i18n/__tests__/Locale.spec.js +0 -108
- package/src/i18n/__tests__/Locales.spec.js +0 -137
- package/src/i18n/index.js +0 -12
- package/src/i18n/languages.js +0 -207
- package/src/i18n/translations/beinformed_error_messages_en.nl.js +0 -98
- package/src/i18n/translations/beinformed_error_messages_nl.nl.js +0 -98
- package/src/i18n/types.js +0 -23
- package/src/i18n/withMessage.js +0 -47
- package/src/index.js +0 -7
- package/src/models/__tests__/resolveModel.spec.js +0 -34
- package/src/models/actions/ActionCollection.js +0 -100
- package/src/models/actions/ActionModel.js +0 -207
- package/src/models/actions/__mock__/action.js +0 -35
- package/src/models/actions/__tests__/ActionCollection.spec.js +0 -98
- package/src/models/actions/__tests__/ActionModel.spec.js +0 -75
- package/src/models/application/ApplicationModel.js +0 -151
- package/src/models/application/__mock__/application.js +0 -14
- package/src/models/application/__mock__/contributions.json +0 -312
- package/src/models/application/__mock__/data.json +0 -263
- package/src/models/application/__tests__/Application.spec.js +0 -99
- package/src/models/application/__tests__/webapp.json +0 -42
- package/src/models/application/__tests__/webappContributions.json +0 -43
- package/src/models/attributes/AttributeCollection.js +0 -306
- package/src/models/attributes/AttributeContent.js +0 -233
- package/src/models/attributes/AttributeDataHelper.js +0 -323
- package/src/models/attributes/AttributeModel.js +0 -1007
- package/src/models/attributes/AttributeSetModel.js +0 -117
- package/src/models/attributes/BooleanAttributeModel.js +0 -319
- package/src/models/attributes/CaptchaAttributeModel.js +0 -51
- package/src/models/attributes/ChoiceAttributeModel.js +0 -499
- package/src/models/attributes/ChoiceAttributeOptionCollection.js +0 -372
- package/src/models/attributes/ChoiceAttributeOptionModel.js +0 -415
- package/src/models/attributes/CompositeAttributeChildCollection.js +0 -254
- package/src/models/attributes/CompositeAttributeModel.js +0 -439
- package/src/models/attributes/DatetimeAttributeModel.js +0 -566
- package/src/models/attributes/HelptextAttributeModel.js +0 -54
- package/src/models/attributes/LabelAttributeModel.js +0 -36
- package/src/models/attributes/MemoAttributeModel.js +0 -43
- package/src/models/attributes/MoneyAttributeModel.js +0 -45
- package/src/models/attributes/NumberAttributeModel.js +0 -255
- package/src/models/attributes/PasswordAttributeModel.js +0 -245
- package/src/models/attributes/StringAttributeModel.js +0 -314
- package/src/models/attributes/UploadAttributeModel.js +0 -261
- package/src/models/attributes/XMLAttributeModel.js +0 -51
- package/src/models/attributes/__mock__/_ActionFieldsContributions.json +0 -12
- package/src/models/attributes/__mock__/_ActionFieldsData.json +0 -7
- package/src/models/attributes/__mock__/_FormCollectionContribution.json +0 -419
- package/src/models/attributes/__mock__/_FormCollectionData.json +0 -122
- package/src/models/attributes/__mock__/_InstrumentQuestionContributions.json +0 -178
- package/src/models/attributes/__mock__/_ListAttributeContributions.json +0 -82
- package/src/models/attributes/__mock__/_ListAttributeData.json +0 -70
- package/src/models/attributes/__mock__/_ListDetailContributions.json +0 -75
- package/src/models/attributes/__mock__/_ListDetailData.json +0 -38
- package/src/models/attributes/__mock__/_TreeFormAttributeContribution.json +0 -117
- package/src/models/attributes/__mock__/_TreeFormAttributeData.json +0 -27
- package/src/models/attributes/__mock__/form.contributions.json +0 -410
- package/src/models/attributes/__mock__/form.data.json +0 -113
- package/src/models/attributes/__mock__/form.js +0 -6
- package/src/models/attributes/__mock__/list.contributions.json +0 -110
- package/src/models/attributes/__mock__/list.data.json +0 -84
- package/src/models/attributes/__mock__/list.js +0 -6
- package/src/models/attributes/__tests__/AttributeCollection.spec.js +0 -160
- package/src/models/attributes/__tests__/AttributeCollectionComposite.spec.js +0 -146
- package/src/models/attributes/__tests__/AttributeContent.spec.js +0 -225
- package/src/models/attributes/__tests__/AttributeDataHelper.spec.js +0 -634
- package/src/models/attributes/__tests__/AttributeModel.spec.js +0 -274
- package/src/models/attributes/__tests__/AttributeSetModel.spec.js +0 -39
- package/src/models/attributes/__tests__/BooleanAttributeModel.spec.js +0 -107
- package/src/models/attributes/__tests__/CaptchaAttributeModel.spec.js +0 -13
- package/src/models/attributes/__tests__/ChoiceAttributeModel.spec.js +0 -750
- package/src/models/attributes/__tests__/ChoiceAttributeOptionCollection.spec.js +0 -507
- package/src/models/attributes/__tests__/ChoiceAttributeOptionModel.spec.js +0 -107
- package/src/models/attributes/__tests__/CompositeAttributeModel.spec.js +0 -467
- package/src/models/attributes/__tests__/DateAttributeModel.spec.js +0 -134
- package/src/models/attributes/__tests__/DatetimeAttributeModel.spec.js +0 -206
- package/src/models/attributes/__tests__/DatetimeAttributeModel_offset.spec.js +0 -345
- package/src/models/attributes/__tests__/HelptextAttributeModel.spec.js +0 -64
- package/src/models/attributes/__tests__/LabelAttributeModel.spec.js +0 -13
- package/src/models/attributes/__tests__/LookupAttributeModel.spec.js +0 -47
- package/src/models/attributes/__tests__/MemoAttributeModel.spec.js +0 -28
- package/src/models/attributes/__tests__/MoneyAttributeModel.spec.js +0 -22
- package/src/models/attributes/__tests__/NumberAttributeModel.spec.js +0 -67
- package/src/models/attributes/__tests__/PasswordAttributeModel.spec.js +0 -49
- package/src/models/attributes/__tests__/StringAttributeModel.spec.js +0 -125
- package/src/models/attributes/__tests__/TimeAttributeModel.spec.js +0 -57
- package/src/models/attributes/__tests__/TimestampModel.spec.js +0 -43
- package/src/models/attributes/__tests__/UploadAttributeModel.spec.js +0 -67
- package/src/models/attributes/__tests__/XMLAttributeModel.spec.js +0 -17
- package/src/models/attributes/__tests__/_createAttribute.spec.js +0 -106
- package/src/models/attributes/__tests__/createAttributeComposite.spec.js +0 -151
- package/src/models/attributes/__tests__/createAttributeDynamicSchema.spec.js +0 -134
- package/src/models/attributes/_createAttribute.js +0 -147
- package/src/models/attributes/input-constraints/BSNConstraint.js +0 -80
- package/src/models/attributes/input-constraints/ConstraintCollection.js +0 -65
- package/src/models/attributes/input-constraints/ConstraintModel.js +0 -76
- package/src/models/attributes/input-constraints/DateBoundaryConstraint.js +0 -240
- package/src/models/attributes/input-constraints/DateTimeDateFormatConstraint.js +0 -72
- package/src/models/attributes/input-constraints/DateTimeTimeFormatConstraint.js +0 -72
- package/src/models/attributes/input-constraints/DatetimeFormatConstraint.js +0 -132
- package/src/models/attributes/input-constraints/FileExtensionConstraint.js +0 -60
- package/src/models/attributes/input-constraints/FileSizeConstraint.js +0 -101
- package/src/models/attributes/input-constraints/IBANConstraint.js +0 -46
- package/src/models/attributes/input-constraints/MandatoryConstraint.js +0 -54
- package/src/models/attributes/input-constraints/MandatoryRangeConstraint.js +0 -84
- package/src/models/attributes/input-constraints/NumberBoundaryConstraint.js +0 -213
- package/src/models/attributes/input-constraints/NumberFormatConstraint.js +0 -153
- package/src/models/attributes/input-constraints/NumberGroupingConstraint.js +0 -140
- package/src/models/attributes/input-constraints/PasswordConfirmConstraint.js +0 -68
- package/src/models/attributes/input-constraints/PasswordLowerAndUpperCaseConstraint.js +0 -44
- package/src/models/attributes/input-constraints/PasswordMinNumericCharactersConstraint.js +0 -60
- package/src/models/attributes/input-constraints/PasswordMinSpecialCharactersConstraint.js +0 -60
- package/src/models/attributes/input-constraints/PasswordThreeConsecutiveCharactersNotAllowedConstraint.js +0 -74
- package/src/models/attributes/input-constraints/RangeConstraint.js +0 -161
- package/src/models/attributes/input-constraints/RegexConstraint.js +0 -72
- package/src/models/attributes/input-constraints/StringLengthConstraint.js +0 -179
- package/src/models/attributes/input-constraints/XMLConstraint.js +0 -62
- package/src/models/attributes/input-constraints/__tests__/BSNConstraint.spec.js +0 -25
- package/src/models/attributes/input-constraints/__tests__/ConstraintCollection.spec.js +0 -9
- package/src/models/attributes/input-constraints/__tests__/ConstraintModel.spec.js +0 -35
- package/src/models/attributes/input-constraints/__tests__/DateBoundaryConstraint.spec.js +0 -117
- package/src/models/attributes/input-constraints/__tests__/DateTimeDateFormatConstraint.spec.js +0 -30
- package/src/models/attributes/input-constraints/__tests__/DateTimeTimeFormatConstraint.spec.js +0 -54
- package/src/models/attributes/input-constraints/__tests__/DatetimeFormatConstraint.spec.js +0 -79
- package/src/models/attributes/input-constraints/__tests__/FileExtensionConstraint.spec.js +0 -20
- package/src/models/attributes/input-constraints/__tests__/FileSizeConstraint.spec.js +0 -53
- package/src/models/attributes/input-constraints/__tests__/IBANConstraint.spec.js +0 -12
- package/src/models/attributes/input-constraints/__tests__/MandatoryConstraint.spec.js +0 -14
- package/src/models/attributes/input-constraints/__tests__/NumberBoundaryConstraint.spec.js +0 -46
- package/src/models/attributes/input-constraints/__tests__/NumberFormatConstraint.spec.js +0 -137
- package/src/models/attributes/input-constraints/__tests__/NumberGroupingConstraint.spec.js +0 -85
- package/src/models/attributes/input-constraints/__tests__/PasswordConfirmConstraint.spec.js +0 -21
- package/src/models/attributes/input-constraints/__tests__/PasswordLowerAndUpperCaseConstraint.spec.js +0 -14
- package/src/models/attributes/input-constraints/__tests__/PasswordMinNumericCharactersConstraint.spec.js +0 -11
- package/src/models/attributes/input-constraints/__tests__/PasswordMinSpecialCharactersConstraint.spec.js +0 -11
- package/src/models/attributes/input-constraints/__tests__/PasswordThreeConsecutiveCharactersNotAllowedConstraint.spec.js +0 -22
- package/src/models/attributes/input-constraints/__tests__/RegexConstraint.spec.js +0 -42
- package/src/models/attributes/input-constraints/__tests__/StringLengthConstraint.spec.js +0 -102
- package/src/models/attributes/input-constraints/__tests__/XMLConstraint.spec.js +0 -15
- package/src/models/attributes/layouthint-rules/BaseLayoutHintRule.js +0 -74
- package/src/models/attributes/layouthint-rules/DependentAttribute.js +0 -246
- package/src/models/attributes/layouthint-rules/LayoutHintRuleCollection.js +0 -101
- package/src/models/attributes/layouthint-rules/RemainingTotalUploadSize.js +0 -67
- package/src/models/attributes/layouthint-rules/__mock__/MockedCollectionFactory.js +0 -54
- package/src/models/attributes/layouthint-rules/__tests__/BaseLayoutHintRule.spec.js +0 -29
- package/src/models/attributes/layouthint-rules/__tests__/DependentAttribute.spec.js +0 -310
- package/src/models/attributes/layouthint-rules/__tests__/LayoutHintRuleCollection.spec.js +0 -58
- package/src/models/attributes/layouthint-rules/__tests__/RemainingTotalUploadSize.spec.js +0 -24
- package/src/models/base/BaseCollection.js +0 -191
- package/src/models/base/BaseModel.js +0 -155
- package/src/models/base/ResourceCollection.js +0 -42
- package/src/models/base/ResourceModel.js +0 -246
- package/src/models/base/__tests__/BaseCollection.spec.js +0 -108
- package/src/models/base/__tests__/BaseModel.spec.js +0 -85
- package/src/models/base/__tests__/ResourceCollection.spec.js +0 -51
- package/src/models/base/__tests__/ResourceModel.spec.js +0 -100
- package/src/models/base/__tests__/webapp.json +0 -52
- package/src/models/caseview/CaseViewModel.js +0 -188
- package/src/models/caseview/__mock__/caseview.js +0 -14
- package/src/models/caseview/__mock__/contributions.json +0 -146
- package/src/models/caseview/__mock__/data.json +0 -21
- package/src/models/caseview/__tests__/CaseViewModel.spec.js +0 -132
- package/src/models/caseview/__tests__/caseview.json +0 -49
- package/src/models/caseview/__tests__/caseviewContributions.json +0 -118
- package/src/models/caseview/__tests__/caseview_local_taskgroup.json +0 -57
- package/src/models/concepts/BusinessScenarioModel.js +0 -176
- package/src/models/concepts/ConceptDetailModel.js +0 -343
- package/src/models/concepts/ConceptIndexModel.js +0 -170
- package/src/models/concepts/ConceptLinkModel.js +0 -208
- package/src/models/concepts/ConceptRelationCollection.js +0 -95
- package/src/models/concepts/ConceptRelationModel.js +0 -129
- package/src/models/concepts/ConceptTypeDetailModel.js +0 -128
- package/src/models/concepts/SourceReferenceCollection.js +0 -32
- package/src/models/concepts/SourceReferenceModel.js +0 -114
- package/src/models/concepts/__mock__/business_scenario.js +0 -26
- package/src/models/concepts/__mock__/business_scenario_data.json +0 -234
- package/src/models/concepts/__mock__/business_scenario_step.json +0 -64
- package/src/models/concepts/__mock__/conceptdetail.js +0 -27
- package/src/models/concepts/__mock__/conceptdetail_contributions.json +0 -156
- package/src/models/concepts/__mock__/conceptdetail_data.json +0 -164
- package/src/models/concepts/__mock__/conceptindex.js +0 -15
- package/src/models/concepts/__mock__/conceptindex_contributions.json +0 -86
- package/src/models/concepts/__mock__/conceptindex_data.json +0 -329
- package/src/models/concepts/__mock__/concepttype.js +0 -13
- package/src/models/concepts/__mock__/concepttype_Calculation.json +0 -75
- package/src/models/concepts/__mock__/concepttype_contributions.json +0 -139
- package/src/models/concepts/__mock__/concepttype_data.json +0 -32
- package/src/models/concepts/__mock__/concepttype_hierarchy.js +0 -13
- package/src/models/concepts/__mock__/concepttype_hierarchy.json +0 -32
- package/src/models/concepts/__mock__/related_concepts.js +0 -12
- package/src/models/concepts/__mock__/related_concepts_contributions.json +0 -41
- package/src/models/concepts/__mock__/related_concepts_data.json +0 -2408
- package/src/models/concepts/__mock__/relation_with_props_and_tf_data.js +0 -27
- package/src/models/concepts/__mock__/relation_with_props_and_tf_data.json +0 -67
- package/src/models/concepts/__tests__/BusinessScenarioModel.spec.js +0 -28
- package/src/models/concepts/__tests__/ConceptDetailModel.spec.js +0 -65
- package/src/models/concepts/__tests__/ConceptIndexModel.spec.js +0 -42
- package/src/models/concepts/__tests__/ConceptLinkModel.spec.js +0 -9
- package/src/models/concepts/__tests__/ConceptRelationCollection.spec.js +0 -9
- package/src/models/concepts/__tests__/ConceptRelationModel.spec.js +0 -53
- package/src/models/concepts/__tests__/ConceptTypeDetailModel.spec.js +0 -31
- package/src/models/concepts/__tests__/RelatedConcepts.spec.js +0 -58
- package/src/models/concepts/__tests__/SourceReferenceCollection.spec.js +0 -9
- package/src/models/concepts/__tests__/SourceReferenceModel.spec.js +0 -108
- package/src/models/content/ContentIndexModel.js +0 -160
- package/src/models/content/ContentLinkModel.js +0 -308
- package/src/models/content/ContentModel.js +0 -226
- package/src/models/content/ContentTOCModel.js +0 -233
- package/src/models/content/ContentTypeModel.js +0 -71
- package/src/models/content/SectionModel.js +0 -236
- package/src/models/content/SubSectionModel.js +0 -181
- package/src/models/content/__tests__/ContentIndexModel.spec.js +0 -40
- package/src/models/content/__tests__/ContentLinkModel.spec.js +0 -129
- package/src/models/content/__tests__/ContentModel.spec.js +0 -241
- package/src/models/content/__tests__/Formalsource.spec.js +0 -133
- package/src/models/content/__tests__/content-index-contributions.json +0 -50
- package/src/models/content/__tests__/content-index.json +0 -164
- package/src/models/content/__tests__/content-with-childsections.json +0 -105
- package/src/models/content/__tests__/content-with-sections.json +0 -105
- package/src/models/content/__tests__/content-with-subsections.json +0 -119
- package/src/models/content/__tests__/content-with-subsections2.json +0 -79
- package/src/models/content/__tests__/content.json +0 -31
- package/src/models/content/__tests__/contributions.json +0 -84
- package/src/models/content/__tests__/formalsource-complete.json +0 -235
- package/src/models/content/__tests__/formalsource-contributions.json +0 -110
- package/src/models/content/__tests__/formalsource-section-contributions.json +0 -84
- package/src/models/content/__tests__/formalsource-section.json +0 -60
- package/src/models/content/__tests__/formalsource-toc.json +0 -122
- package/src/models/contentconfiguration/ContentConfiguration.js +0 -70
- package/src/models/contentconfiguration/ContentConfigurationElements.js +0 -152
- package/src/models/contentconfiguration/ContentConfigurationEndResults.js +0 -45
- package/src/models/contentconfiguration/ContentConfigurationQuestions.js +0 -60
- package/src/models/contentconfiguration/ContentConfigurationResults.js +0 -105
- package/src/models/contentconfiguration/__tests__/ContentConfigurationElements.spec.js +0 -29
- package/src/models/contentconfiguration/__tests__/ContentConfigurationResults.spec.js +0 -101
- package/src/models/detail/DetailModel.js +0 -241
- package/src/models/detail/__tests__/DetailModel.spec.js +0 -41
- package/src/models/detail/__tests__/detail.json +0 -37
- package/src/models/detail/__tests__/detailContributions.json +0 -124
- package/src/models/error/ErrorCollection.js +0 -127
- package/src/models/error/ErrorModel.js +0 -83
- package/src/models/error/ErrorResponse.js +0 -343
- package/src/models/error/__tests__/ErrorCollection.spec.js +0 -41
- package/src/models/error/__tests__/ErrorModel.spec.js +0 -24
- package/src/models/filters/AssignmentFilterModel.js +0 -195
- package/src/models/filters/BaseFilterModel.js +0 -236
- package/src/models/filters/ConceptIndexFilterModel.js +0 -40
- package/src/models/filters/FilterCollection.js +0 -192
- package/src/models/filters/FilterModel.js +0 -6
- package/src/models/filters/RangeFilterModel.js +0 -36
- package/src/models/filters/StringFilterModel.js +0 -159
- package/src/models/filters/__tests__/AssignmentFilterModel.spec.js +0 -140
- package/src/models/filters/__tests__/FilterCollection.spec.js +0 -68
- package/src/models/filters/__tests__/FilterModel.spec.js +0 -65
- package/src/models/filters/__tests__/RangeFilterModel.spec.js +0 -55
- package/src/models/filters/__tests__/ZipcodeFilter.spec.js +0 -145
- package/src/models/filters/__tests__/filters.json +0 -91
- package/src/models/filters/__tests__/filtersContributions.json +0 -110
- package/src/models/form/FormModel.js +0 -1280
- package/src/models/form/FormObjectModel.js +0 -590
- package/src/models/form/__mock__/contributions.json +0 -525
- package/src/models/form/__mock__/data.json +0 -78
- package/src/models/form/__mock__/form.js +0 -17
- package/src/models/form/__tests__/FormContributions.json +0 -495
- package/src/models/form/__tests__/FormContributionsUnknownRepeat.json +0 -67
- package/src/models/form/__tests__/FormInstrumentContributions.json +0 -183
- package/src/models/form/__tests__/FormModel.getters.spec.js +0 -149
- package/src/models/form/__tests__/FormModel.instrument.spec.js +0 -202
- package/src/models/form/__tests__/FormModel.repeating.spec.js +0 -65
- package/src/models/form/__tests__/FormModel.selfhref.spec.js +0 -84
- package/src/models/form/__tests__/FormModel.spec.js +0 -752
- package/src/models/form/__tests__/FormModel.unknown-repeat.spec.js +0 -52
- package/src/models/form/__tests__/FormObjectModel.spec.js +0 -180
- package/src/models/form/__tests__/FormResultData.spec.js +0 -86
- package/src/models/form/__tests__/FormValidation.spec.js +0 -79
- package/src/models/form/__tests__/FormValidationContributions.json +0 -45
- package/src/models/form/__tests__/FormValidationDataInitial.json +0 -33
- package/src/models/form/__tests__/FormValidationDataUpdate1.json +0 -25
- package/src/models/form/__tests__/FormValidationDataUpdate2.json +0 -33
- package/src/models/form/__tests__/FormWithContent.spec.js +0 -71
- package/src/models/form/__tests__/FormWithContentContributions.json +0 -242
- package/src/models/form/__tests__/FormWithContentData.json +0 -244
- package/src/models/grouping/GroupingModel.js +0 -232
- package/src/models/grouping/__tests__/GroupingModel.spec.js +0 -80
- package/src/models/href/Href.js +0 -564
- package/src/models/href/ListHref.js +0 -146
- package/src/models/href/__tests__/Href.spec.js +0 -184
- package/src/models/href/__tests__/ListHref.spec.js +0 -61
- package/src/models/href/__tests__/list.json +0 -2417
- package/src/models/href/__tests__/listContributions.json +0 -330
- package/src/models/index.js +0 -177
- package/src/models/layouthint/LayoutHintCollection.js +0 -116
- package/src/models/layouthint/__tests__/LayoutHintCollection.spec.js +0 -89
- package/src/models/links/LinkCollection.js +0 -169
- package/src/models/links/LinkModel.js +0 -229
- package/src/models/links/__tests__/LinkCollection.spec.js +0 -426
- package/src/models/links/__tests__/LinkModel.spec.js +0 -103
- package/src/models/links/__tests__/normalizeLinkJSON.spec.js +0 -212
- package/src/models/links/normalizeLinkJSON.js +0 -121
- package/src/models/list/ListDetailModel.js +0 -330
- package/src/models/list/ListHeaderModel.js +0 -96
- package/src/models/list/ListItemCollection.js +0 -80
- package/src/models/list/ListItemModel.js +0 -111
- package/src/models/list/ListModel.js +0 -438
- package/src/models/list/__mock__/caselist.contributions.json +0 -372
- package/src/models/list/__mock__/caselist.data.json +0 -519
- package/src/models/list/__mock__/caselist.js +0 -14
- package/src/models/list/__tests__/ListDetailModel.hierarchy.spec.js +0 -88
- package/src/models/list/__tests__/ListDetailModel.spec.js +0 -96
- package/src/models/list/__tests__/ListItemCollection.spec.js +0 -22
- package/src/models/list/__tests__/ListModel.spec.js +0 -152
- package/src/models/list/__tests__/ListResultDetail.spec.js +0 -37
- package/src/models/list/__tests__/caselist-34.contributions.json +0 -146
- package/src/models/list/__tests__/caselist-34.data.json +0 -21
- package/src/models/list/__tests__/hierarchy.json +0 -185
- package/src/models/list/__tests__/hierarchyContributions.json +0 -582
- package/src/models/list/__tests__/instrument-detail-contributions.json +0 -761
- package/src/models/list/__tests__/instrument-detail-data.json +0 -66
- package/src/models/list/__tests__/list.json +0 -2426
- package/src/models/list/__tests__/listContributions.json +0 -349
- package/src/models/list/__tests__/related-contributions.json +0 -42
- package/src/models/list/__tests__/related-data.json +0 -32
- package/src/models/lookup/LookupOptionCollection.js +0 -54
- package/src/models/lookup/LookupOptionsModel.js +0 -81
- package/src/models/lookup/__tests__/LookupOptionCollection.spec.js +0 -80
- package/src/models/lookup/__tests__/LookupOptionsModel.spec.js +0 -82
- package/src/models/lookup/__tests__/_LookupOptionsContributions.json +0 -29
- package/src/models/lookup/__tests__/_LookupOptionsData.json +0 -34
- package/src/models/lookup/__tests__/_LookupOptionsListContributions.json +0 -129
- package/src/models/lookup/__tests__/_LookupOptionsListData.json +0 -134
- package/src/models/lookup/__tests__/_TaxonomyAttributeData.json +0 -42
- package/src/models/modelcatalog/ModelCatalogModel.js +0 -73
- package/src/models/modelcatalog/ModelCategoryCollection.js +0 -22
- package/src/models/modelcatalog/ModelCategoryModel.js +0 -63
- package/src/models/modelcatalog/__mock__/contributions.json +0 -6
- package/src/models/modelcatalog/__mock__/data.json +0 -29
- package/src/models/modelcatalog/__mock__/modelcatalog.js +0 -14
- package/src/models/modelcatalog/__tests__/ModelCatalogModel.spec.js +0 -49
- package/src/models/paging/PagesizeModel.js +0 -44
- package/src/models/paging/PagingModel.js +0 -94
- package/src/models/paging/__tests__/PageSizeModel.spec.js +0 -31
- package/src/models/paging/__tests__/PagingModel.spec.js +0 -40
- package/src/models/paging/__tests__/list.json +0 -8
- package/src/models/paging/__tests__/listContributions.json +0 -7
- package/src/models/panels/GroupingPanelModel.js +0 -164
- package/src/models/panels/__tests__/GroupingPanelModel.spec.js +0 -142
- package/src/models/panels/__tests__/groupingPanel.json +0 -49
- package/src/models/panels/__tests__/groupingPanelContributions.json +0 -59
- package/src/models/parameter/Parameter.js +0 -117
- package/src/models/parameter/__tests__/Parameter.spec.js +0 -125
- package/src/models/process/ProcessStatusSettingsModel.js +0 -88
- package/src/models/process/__tests__/ProcessStatusSettingsModel.spec.js +0 -52
- package/src/models/resolveModel.js +0 -92
- package/src/models/search/CaseSearchModel.js +0 -46
- package/src/models/search/__tests__/CaseSearchModel.spec.js +0 -10
- package/src/models/sorting/SortOptionModel.js +0 -107
- package/src/models/sorting/SortingModel.js +0 -128
- package/src/models/sorting/__tests__/SortingModel.spec.js +0 -96
- package/src/models/tab/TabModel.js +0 -160
- package/src/models/tab/__mock__/contributions.json +0 -77
- package/src/models/tab/__mock__/data.json +0 -20
- package/src/models/tab/__mock__/personContributions.json +0 -35
- package/src/models/tab/__mock__/personData.json +0 -21
- package/src/models/tab/__mock__/tab.js +0 -14
- package/src/models/tab/__mock__/tabPerson.js +0 -14
- package/src/models/tab/__tests__/TabModel.spec.js +0 -72
- package/src/models/tab/__tests__/tab.json +0 -37
- package/src/models/tab/__tests__/tabContributions.json +0 -39
- package/src/models/taskgroup/TaskGroupCollection.js +0 -16
- package/src/models/taskgroup/TaskGroupModel.js +0 -102
- package/src/models/taskgroup/__mock__/contributions.json +0 -18
- package/src/models/taskgroup/__mock__/data.json +0 -21
- package/src/models/taskgroup/__mock__/taskgroup.js +0 -14
- package/src/models/taskgroup/__tests__/TaskGroupModel.spec.js +0 -26
- package/src/models/taskgroup/__tests__/taskgroup.json +0 -25
- package/src/models/taskgroup/__tests__/taskgroupContributions.json +0 -23
- package/src/models/types.js +0 -275
- package/src/models/user/UserModel.js +0 -57
- package/src/models/user/UserProfileModel.js +0 -54
- package/src/models/user/UserServicesModel.js +0 -136
- package/src/models/user/__mock__/contributions.json +0 -148
- package/src/models/user/__mock__/data.json +0 -22
- package/src/models/user/__tests__/UserModel.spec.js +0 -43
- package/src/models/user/__tests__/UserProfileModel.spec.js +0 -45
- package/src/models/user/__tests__/UserServicesModel.spec.js +0 -55
- package/src/modularui/Authenticate.js +0 -195
- package/src/modularui/CaptchaRequest.js +0 -104
- package/src/modularui/ModularUIError.js +0 -25
- package/src/modularui/ModularUIRequest.js +0 -872
- package/src/modularui/ModularUIResponse.js +0 -160
- package/src/modularui/UploadRequest.js +0 -151
- package/src/modularui/__tests__/CustomContextPath.spec.js +0 -61
- package/src/modularui/__tests__/ModularUIError.spec.js +0 -22
- package/src/modularui/__tests__/ModularUIRequest.spec.js +0 -495
- package/src/modularui/__tests__/contributions.json +0 -312
- package/src/modularui/__tests__/data.json +0 -263
- package/src/modularui/index.js +0 -6
- package/src/modularui/types.js +0 -4
- package/src/react/ErrorBoundary.js +0 -61
- package/src/react/ErrorBoundaryFallback.js +0 -46
- package/src/react/index.js +0 -3
- package/src/react/utils.js +0 -33
- package/src/react-client/Init.js +0 -46
- package/src/react-client/client.js +0 -309
- package/src/react-client/contextPath.js +0 -30
- package/src/react-client/index.js +0 -4
- package/src/react-client/rehydrate.js +0 -94
- package/src/react-server/__tests__/htmlpage.spec.js +0 -75
- package/src/react-server/__tests__/requestInformation.spec.js +0 -266
- package/src/react-server/__tests__/serverUtil.spec.js +0 -183
- package/src/react-server/contextPath.js +0 -8
- package/src/react-server/createSSRComplete.js +0 -63
- package/src/react-server/htmlpage.js +0 -55
- package/src/react-server/index.js +0 -13
- package/src/react-server/renderSSRComplete.js +0 -111
- package/src/react-server/renderSSRMinimal.js +0 -54
- package/src/react-server/requestInformation.js +0 -68
- package/src/react-server/serverNoSSR.js +0 -87
- package/src/react-server/serverSSR.js +0 -70
- package/src/react-server/serverUtil.js +0 -279
- package/src/react-theme/ThemeProvider.js +0 -25
- package/src/react-theme/__tests__/ThemeProvider.spec.js +0 -84
- package/src/react-theme/__tests__/createTheme.spec.js +0 -172
- package/src/react-theme/createTheme.js +0 -118
- package/src/react-theme/index.js +0 -15
- package/src/react-theme/types.js +0 -16
- package/src/react-theme/useTheme.js +0 -13
- package/src/react-theme/utils/__tests__/background.spec.js +0 -30
- package/src/react-theme/utils/__tests__/colors.spec.js +0 -30
- package/src/react-theme/utils/__tests__/contrast.spec.js +0 -44
- package/src/react-theme/utils/__tests__/corners.spec.js +0 -27
- package/src/react-theme/utils/__tests__/spacers.spec.js +0 -44
- package/src/react-theme/utils/__tests__/themeProps.spec.js +0 -72
- package/src/react-theme/utils/background.js +0 -20
- package/src/react-theme/utils/colors.js +0 -47
- package/src/react-theme/utils/contrast.js +0 -117
- package/src/react-theme/utils/corners.js +0 -37
- package/src/react-theme/utils/spacers.js +0 -65
- package/src/react-theme/utils/themeProps.js +0 -90
- package/src/redux/_i18n/I18nActions.js +0 -38
- package/src/redux/_i18n/I18nReducer.js +0 -91
- package/src/redux/_i18n/__tests__/actions.spec.js +0 -37
- package/src/redux/_i18n/__tests__/reducer.spec.js +0 -29
- package/src/redux/_i18n/index.js +0 -6
- package/src/redux/_i18n/types.js +0 -20
- package/src/redux/_modularui/ModularUIActions.js +0 -227
- package/src/redux/_modularui/ModularUIConnector.js +0 -155
- package/src/redux/_modularui/ModularUIMiddleware.js +0 -182
- package/src/redux/_modularui/ModularUIReducer.js +0 -169
- package/src/redux/_modularui/ModularUISelectors.js +0 -322
- package/src/redux/_modularui/ModularUIUtils.js +0 -96
- package/src/redux/_modularui/__tests__/actions.spec.js +0 -159
- package/src/redux/_modularui/__tests__/reducer.spec.js +0 -134
- package/src/redux/_modularui/__tests__/selectors.spec.js +0 -153
- package/src/redux/_modularui/index.js +0 -11
- package/src/redux/_modularui/types.js +0 -121
- package/src/redux/_modularui/withModularUI.js +0 -85
- package/src/redux/_router/RouterActions.js +0 -75
- package/src/redux/_router/RouterConnectors.js +0 -97
- package/src/redux/_router/RouterMiddleware.js +0 -37
- package/src/redux/_router/RouterReducer.js +0 -21
- package/src/redux/_router/__tests__/actions.spec.js +0 -109
- package/src/redux/_router/__tests__/hooks.spec.js +0 -98
- package/src/redux/_router/__tests__/middleware.spec.js +0 -62
- package/src/redux/_router/__tests__/reducer.spec.js +0 -26
- package/src/redux/_router/index.js +0 -8
- package/src/redux/_router/types.js +0 -43
- package/src/redux/actions/Application.js +0 -45
- package/src/redux/actions/Authorization.js +0 -65
- package/src/redux/actions/Error.js +0 -95
- package/src/redux/actions/Form.js +0 -42
- package/src/redux/actions/FormAttributeSet.js +0 -98
- package/src/redux/actions/FormAttributeSetRepeatable.js +0 -45
- package/src/redux/actions/FormAutosave.js +0 -73
- package/src/redux/actions/FormAutosubmit.js +0 -43
- package/src/redux/actions/FormAutoupdate.js +0 -47
- package/src/redux/actions/FormValidations.js +0 -71
- package/src/redux/actions/Modals.js +0 -16
- package/src/redux/actions/ModelCatalog.js +0 -12
- package/src/redux/actions/Notification.js +0 -101
- package/src/redux/actions/Preferences.js +0 -173
- package/src/redux/actions/ProgressIndicator.js +0 -39
- package/src/redux/actions/SignIn.js +0 -102
- package/src/redux/actions/SignOut.js +0 -29
- package/src/redux/actions/__tests__/Application.spec.js +0 -52
- package/src/redux/actions/__tests__/Authorization.spec.js +0 -121
- package/src/redux/actions/__tests__/CustomErrorResponseHandler.spec.js +0 -72
- package/src/redux/actions/__tests__/Error-server.spec.js +0 -134
- package/src/redux/actions/__tests__/Error.spec.js +0 -116
- package/src/redux/actions/__tests__/Form.spec.js +0 -39
- package/src/redux/actions/__tests__/Modals.spec.js +0 -34
- package/src/redux/actions/__tests__/Notification.spec.js +0 -94
- package/src/redux/actions/__tests__/Preferences.spec.js +0 -71
- package/src/redux/actions/__tests__/ProgressIndicator.spec.js +0 -53
- package/src/redux/actions/index.js +0 -17
- package/src/redux/connectors/Application.js +0 -14
- package/src/redux/connectors/Breadcrumb.js +0 -28
- package/src/redux/connectors/CaseView.js +0 -14
- package/src/redux/connectors/ConceptDetail.js +0 -12
- package/src/redux/connectors/ContentBrowser.js +0 -14
- package/src/redux/connectors/ContentDetail.js +0 -13
- package/src/redux/connectors/ContentDetailSection.js +0 -17
- package/src/redux/connectors/Form.js +0 -83
- package/src/redux/connectors/FormAttributeSet.js +0 -85
- package/src/redux/connectors/ListDetail.js +0 -16
- package/src/redux/connectors/Modal.js +0 -47
- package/src/redux/connectors/ModelCatalog.js +0 -14
- package/src/redux/connectors/Notification.js +0 -47
- package/src/redux/connectors/PanelRenderer.js +0 -29
- package/src/redux/connectors/Preferences.js +0 -53
- package/src/redux/connectors/Progress.js +0 -35
- package/src/redux/connectors/ProgressIndicator.js +0 -35
- package/src/redux/connectors/QuickSearch.js +0 -36
- package/src/redux/connectors/SignIn.js +0 -47
- package/src/redux/connectors/SignOut.js +0 -38
- package/src/redux/connectors/Tab.js +0 -14
- package/src/redux/connectors/index.js +0 -22
- package/src/redux/index.js +0 -27
- package/src/redux/reducers/AuthReducer.js +0 -56
- package/src/redux/reducers/ErrorReducer.js +0 -22
- package/src/redux/reducers/ModalsReducer.js +0 -58
- package/src/redux/reducers/ModelCatalogReducer.js +0 -34
- package/src/redux/reducers/NotificationReducer.js +0 -45
- package/src/redux/reducers/PreferencesReducer.js +0 -31
- package/src/redux/reducers/ProgressIndicatorReducer.js +0 -60
- package/src/redux/reducers/__tests__/AuthReducer.spec.js +0 -95
- package/src/redux/reducers/__tests__/ErrorReducer.spec.js +0 -17
- package/src/redux/reducers/__tests__/ModalsReducer.spec.js +0 -34
- package/src/redux/reducers/__tests__/ModelCatalogReducer.spec.js +0 -23
- package/src/redux/reducers/__tests__/NotificationReducer.spec.js +0 -53
- package/src/redux/reducers/__tests__/PreferencesReducer.spec.js +0 -31
- package/src/redux/reducers/__tests__/ProgressIndicatorReducer.spec.js +0 -82
- package/src/redux/reducers/createReducer.js +0 -55
- package/src/redux/reducers/index.js +0 -10
- package/src/redux/selectors/i18n.js +0 -15
- package/src/redux/selectors/index.js +0 -3
- package/src/redux/selectors/modelcatalog.js +0 -11
- package/src/redux/store/__tests__/beforeRenderHooks.spec.js +0 -13
- package/src/redux/store/beforeRenderHooks.js +0 -26
- package/src/redux/store/configureStore.js +0 -59
- package/src/redux/types.js +0 -241
- package/src/utils/browser/Cache.js +0 -157
- package/src/utils/browser/Cookies.js +0 -44
- package/src/utils/browser/__tests__/Cookies.spec.js +0 -51
- package/src/utils/datetime/DateTimeUtil.js +0 -858
- package/src/utils/datetime/__tests__/DateTime.spec.js +0 -873
- package/src/utils/datetime/__tests__/DateTimeFormat.spec.js +0 -146
- package/src/utils/fetch/__mocks__/applicationContributions.json +0 -323
- package/src/utils/fetch/__mocks__/applicationData.json +0 -216
- package/src/utils/fetch/__mocks__/formContributions.json +0 -527
- package/src/utils/fetch/__mocks__/formData.json +0 -21
- package/src/utils/fetch/__mocks__/universalFetch.js +0 -38
- package/src/utils/fetch/__tests__/xhr.spec.js +0 -281
- package/src/utils/fetch/serverFetch.js +0 -33
- package/src/utils/fetch/types.js +0 -46
- package/src/utils/fetch/universalFetch.js +0 -106
- package/src/utils/fetch/xhr.js +0 -409
- package/src/utils/helpers/__tests__/checkResource.spec.js +0 -60
- package/src/utils/helpers/__tests__/createHash.spec.js +0 -11
- package/src/utils/helpers/__tests__/createHref.spec.js +0 -39
- package/src/utils/helpers/__tests__/objects.spec.js +0 -50
- package/src/utils/helpers/__tests__/sanitizeHTML.spec.js +0 -69
- package/src/utils/helpers/checkResource.js +0 -43
- package/src/utils/helpers/createHash.js +0 -28
- package/src/utils/helpers/createHref.js +0 -117
- package/src/utils/helpers/createUUID.js +0 -13
- package/src/utils/helpers/index.js +0 -9
- package/src/utils/helpers/objects.js +0 -33
- package/src/utils/helpers/repositoryResource.js +0 -22
- package/src/utils/helpers/sanitizeHtml.js +0 -55
- package/src/utils/helpers/text.js +0 -23
- package/src/utils/index.js +0 -22
- package/src/utils/number/DecimalFormat.js +0 -410
- package/src/utils/number/__tests__/formatValue.spec.js +0 -36
- package/src/utils/number/__tests__/parseNumbers.spec.js +0 -50
- package/src/utils/number/formatValue.js +0 -60
- package/src/utils/number/parseNumbers.js +0 -94
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayPush.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_isFlattenable.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseFlatten.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/flattenDeep.js","../src/models/base/ResourceCollection.ts","../src/models/layouthint/LayoutHintCollection.ts","../src/models/contentconfiguration/ContentConfigurationElements.ts","../src/models/base/BaseModel.ts","../src/modularui/ModularUIResponse.ts","../src/models/links/LinkModel.ts","../src/models/links/normalizeLinkJSON.ts","../src/models/links/LinkCollection.ts","../src/models/process/ProcessStatusSettingsModel.ts","../src/models/base/ResourceModel.ts","../src/models/concepts/ConceptTypeDetailModel.ts","../src/models/concepts/ConceptLinkModel.ts","../src/models/concepts/ConceptRelationModel.ts","../src/models/concepts/ConceptRelationCollection.ts","../src/models/content/ContentTypeModel.ts","../src/models/content/ContentLinkModel.ts","../src/models/concepts/SourceReferenceModel.ts","../src/models/concepts/SourceReferenceCollection.ts","../src/models/concepts/ConceptDetailModel.ts","../src/models/error/ErrorModel.ts","../src/models/error/ErrorCollection.ts","../src/models/content/SubSectionModel.ts","../src/models/content/SectionModel.ts","../src/models/attributes/AttributeContent.ts","../src/models/attributes/input-constraints/GenericConstraintModel.ts","../src/models/attributes/input-constraints/ConstraintCollection.ts","../src/models/attributes/input-constraints/MandatoryConstraint.ts","../src/models/attributes/input-constraints/StringLengthConstraint.ts","../src/models/attributes/BaseAttributeModel.ts","../src/models/list/ListHeaderModel.ts","../src/models/attributes/AttributeFactory.ts","../src/models/attributes/AttributeCollection.ts","../src/models/attributes/CompositeAttributeChildCollection.ts","../src/models/attributes/constants.ts","../src/models/attributes/CompositeAttributeModel.ts","../src/models/attributes/ChoiceAttributeOptionModel.ts","../src/models/attributes/ChoiceAttributeOptionCollection.ts","../src/models/attributes/ChoiceAttributeModel.ts","../src/models/attributes/BooleanAttributeModel.ts","../src/models/attributes/CaptchaAttributeModel.ts","../src/models/attributes/input-constraints/DateBoundaryConstraint.ts","../src/models/attributes/input-constraints/DateTimeDateFormatConstraint.ts","../src/models/attributes/input-constraints/DatetimeFormatConstraint.ts","../src/models/attributes/input-constraints/DateTimeTimeFormatConstraint.ts","../src/models/attributes/DatetimeAttributeModel.ts","../src/models/attributes/HelptextAttributeModel.ts","../src/models/attributes/LabelAttributeModel.ts","../src/models/attributes/layouthint-rules/BaseLayoutHintRule.ts","../src/models/attributes/layouthint-rules/DependentAttribute.ts","../src/models/attributes/input-constraints/FileExtensionConstraint.ts","../src/models/attributes/input-constraints/FileSizeConstraint.ts","../src/models/attributes/UploadAttributeModel.ts","../src/models/attributes/layouthint-rules/RemainingTotalUploadSize.ts","../src/models/attributes/layouthint-rules/LayoutHintRuleCollection.ts","../src/models/attributes/input-constraints/BSNConstraint.ts","../src/models/attributes/input-constraints/IBANConstraint.ts","../src/models/attributes/input-constraints/RegexConstraint.ts","../src/models/attributes/StringAttributeModel.ts","../src/models/attributes/MemoAttributeModel.ts","../src/models/attributes/NumberAttributeModel.ts","../src/models/attributes/input-constraints/NumberBoundaryConstraint.ts","../src/models/attributes/input-constraints/NumberFormatConstraint.ts","../src/models/attributes/input-constraints/NumberGroupingConstraint.ts","../src/models/attributes/MoneyAttributeModel.ts","../src/models/attributes/input-constraints/PasswordConfirmConstraint.ts","../src/models/attributes/input-constraints/PasswordLowerAndUpperCaseConstraint.ts","../src/models/attributes/input-constraints/PasswordMinNumericCharactersConstraint.ts","../src/models/attributes/input-constraints/PasswordMinSpecialCharactersConstraint.ts","../src/models/attributes/input-constraints/PasswordThreeConsecutiveCharactersNotAllowedConstraint.ts","../src/models/attributes/PasswordAttributeModel.ts","../src/models/attributes/input-constraints/MandatoryRangeConstraint.ts","../src/models/attributes/input-constraints/RangeConstraint.ts","../src/models/attributes/RangeAttributeModel.ts","../src/models/attributes/input-constraints/XMLConstraint.ts","../src/models/attributes/XMLAttributeModel.ts","../src/models/actions/ActionModel.ts","../src/models/actions/ActionCollection.ts","../src/models/user/UserModel.ts","../src/models/user/UserServicesModel.ts","../src/models/application/ApplicationModel.ts","../src/models/attributes/AttributeSetModel.ts","../src/models/detail/DetailModel.ts","../src/models/taskgroup/TaskGroupCollection.ts","../src/models/taskgroup/TaskGroupModel.ts","../src/models/caseview/CaseViewModel.ts","../src/models/filters/BaseFilterModel.ts","../src/models/filters/AssignmentFilterModel.ts","../src/models/filters/ConceptIndexFilterModel.ts","../src/models/filters/RangeFilterModel.ts","../src/models/filters/StringFilterModel.ts","../src/models/filters/FilterFactory.ts","../src/models/filters/FilterCollection.ts","../src/models/concepts/ConceptLinkCollection.ts","../src/models/concepts/ConceptIndexModel.ts","../src/models/content/ContentLinkCollection.ts","../src/models/content/ContentIndexModel.ts","../src/models/content/ContentModel.ts","../src/models/content/ContentTOCModel.ts","../src/models/contentconfiguration/ContentConfigurationResults.ts","../src/models/contentconfiguration/ContentConfigurationEndResults.ts","../src/models/contentconfiguration/ContentConfigurationQuestions.ts","../src/models/contentconfiguration/ContentConfiguration.ts","../src/models/error/ErrorResponse.ts","../src/models/form/FormObjectModel.ts","../src/models/form/FormModel.ts","../src/models/list/detail/ListDetailModel.ts","../src/models/list/grouping/GroupingModel.ts","../src/models/list/ListHref.ts","../src/models/list/ListItemModel.ts","../src/models/list/ListItemCollection.ts","../src/models/list/paging/PagesizeModel.ts","../src/models/list/paging/PagingModel.ts","../src/models/list/sorting/SortOptionModel.ts","../src/models/list/sorting/SortingModel.ts","../src/models/list/ListModel.ts","../src/models/lookup/LookupOptionCollection.ts","../src/models/lookup/LookupOptionsModel.ts","../src/models/modelcatalog/ModelCategoryModel.ts","../src/models/modelcatalog/ModelCategoryCollection.ts","../src/models/modelcatalog/ModelCatalogModel.ts","../src/models/panels/GroupingPanelModel.ts","../src/models/search/CaseSearchModel.ts","../src/models/tab/TabModel.ts","../src/models/user/UserProfileModel.ts","../src/models/resolveModel.ts"],"sourcesContent":["/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n","var baseFlatten = require('./_baseFlatten');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\nfunction flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n}\n\nmodule.exports = flattenDeep;\n","import { BaseCollection } from \"./BaseCollection\";\n\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { LinkModel } from \"../links/LinkModel\";\nimport type { ModelWithChildModels } from \"../types\";\n\n/**\n * The ResourceCollection makes it possible to add child models to a collection of models\n * These child models are fetched using the ModularUI util\n */\nexport abstract class ResourceCollection<T extends ModelWithChildModels>\n extends BaseCollection<T>\n implements ModelWithChildModels\n{\n /**\n * Retrieve all child model links and flatten it into an array with single entries, removing all undefined items\n */\n getInitialChildModelLinks() {\n const initialChildModelLinks: LinkModel[] = [];\n\n this.collection.forEach((item: T) => {\n if (typeof item?.getInitialChildModelLinks === \"function\") {\n initialChildModelLinks.push(...item.getInitialChildModelLinks());\n }\n });\n\n return initialChildModelLinks;\n }\n\n /**\n * Pass through models for setchildmodels to items of this collection\n */\n setChildModels(models: ModelWithChildModels[], errors: ErrorResponse[]) {\n this.collection.forEach((item) => {\n if (typeof item[\"setChildModels\"] === \"function\") {\n item.setChildModels(models, errors);\n }\n });\n }\n}\n","import { IllegalArgumentException } from \"../../exceptions/IllegalArgumentException\";\nimport { BaseCollection } from \"../base/BaseCollection\";\n\nexport class LayoutHintCollection extends BaseCollection<string> {\n constructor(layouthint: string[] = []) {\n super(layouthint);\n\n if (!Array.isArray(layouthint)) {\n throw new IllegalArgumentException(`${layouthint} is not an Array`);\n }\n }\n\n get layouthint() {\n return this.collection;\n }\n\n /**\n * Checks if a specific layouthint exists in the component configuration\n * This method matches all exact matches and hints starting with. For example\n * when calling layouth.has(\"hide\"), this will return true for both \"hide\" and \"hide-when-empty\".<br>\n * If only exact matches are required, use the method {@link LayoutHintCollection#hasExact}.\n */\n has(...hints: string[]) {\n const hintArray = hints.length > 0 ? [...hints] : [];\n\n return hintArray\n .flat()\n .some(\n (hint) =>\n this.layouthint.includes(hint) ||\n this.layouthint.some((hint2) => hint2.startsWith(hint)),\n );\n }\n\n /**\n * Checks if a specific layouthint exists in the component configuration,\n * only checks on exact matches.<br>\n * If layouthints that start with the given hint should also match, use {@link LayoutHintCollection#has}.\n */\n hasExact(...hints: string[]) {\n const hintArray = hints.length > 0 ? [...hints] : [];\n return hintArray.flat().some((hint) => this.layouthint.includes(hint));\n }\n\n /**\n * Retrieve the first layouthint starting with hint\n */\n getByLayoutHint(\n hint: ((value: string, index: number, obj: string[]) => boolean) | string,\n ) {\n let foundHint = null;\n\n if (typeof hint === \"function\") {\n foundHint = this.layouthint.find(hint);\n }\n\n if (typeof hint === \"string\") {\n foundHint = this.layouthint.find((hint2) =>\n hint2.startsWith(hint.toString()),\n );\n }\n\n return foundHint || null;\n }\n\n /**\n * Get the value of a specific hint\n * Format: hint=value\n */\n getLayoutHintValue(hint: string) {\n const checkHint = hint.endsWith(\":\")\n ? hint.substr(0, hint.length - 1)\n : hint;\n\n const match = this.getByLayoutHint((hint2: string) => {\n return (\n hint2.startsWith(`${checkHint}=`) || hint2.startsWith(`${checkHint}:`)\n );\n });\n\n if (!match) {\n return null;\n }\n\n return match.substr(checkHint.length + 1);\n }\n\n /**\n * Get an array of multiple values from a specific hint\n * Format: hint=value1;value2;value3\n */\n getLayoutHintValues(hint: string) {\n if (!this.has(hint)) {\n return null;\n }\n\n const value = this.getLayoutHintValue(hint);\n\n if (!value) {\n return [];\n }\n\n return value.split(\";\");\n }\n}\n","import { hasAllContentInData } from \"../../settings/Settings\";\nimport { LayoutHintCollection } from \"../layouthint/LayoutHintCollection\";\n\nimport type { ConceptDetailModel } from \"../concepts/ConceptDetailModel\";\nimport type { ConfigurationElements } from \"./types\";\n\nexport class ContentConfigurationElements {\n private _configuration: ConfigurationElements;\n private _hasConfiguration = false;\n\n constructor(configuration?: ConfigurationElements) {\n this._hasConfiguration = Array.isArray(configuration);\n this._configuration = configuration ?? [];\n }\n\n includeLayoutHints(hints: string[]) {\n const contentIncludeLayoutHint = this._configuration.filter(\n (configElement) => {\n const [key] = Object.keys(configElement);\n const config = configElement[key];\n\n if (!config.layouthint) {\n return false;\n }\n\n return config.layouthint.some((hint) => hints.includes(hint));\n },\n );\n\n return new ContentConfigurationElements(contentIncludeLayoutHint);\n }\n\n excludeLayoutHints(hints: string[]) {\n const contentExcludeLayoutHint = this._configuration.filter(\n (configElement) => {\n const [key] = Object.keys(configElement);\n const config = configElement[key];\n\n if (!config.layouthint) {\n return true;\n }\n\n return !config.layouthint.some((hint) => hints.includes(hint));\n },\n );\n\n return new ContentConfigurationElements(contentExcludeLayoutHint);\n }\n\n get config() {\n return this._configuration.map((elementConfig) => {\n const [key] = Object.keys(elementConfig);\n const config = elementConfig[key];\n\n let types: string[] = [];\n if (\"labelTypes\" in config) {\n types = config.labelTypes;\n } else if (\"propertyTypes\" in config) {\n types = config.propertyTypes;\n } else if (\"sectionReferenceTypes\" in config) {\n types = config.sectionReferenceTypes;\n } else if (\"textFragmentTypes\" in config) {\n types = config.textFragmentTypes;\n }\n\n return {\n type: key,\n label: config.label,\n types,\n layouthint: new LayoutHintCollection(config.layouthint),\n icon: \"icon\" in config ? config.icon : \"\",\n };\n });\n }\n\n hasConfig() {\n return this._hasConfiguration;\n }\n\n hasContent() {\n return this.config.some(\n (configElement) => configElement.type === \"configElement\",\n );\n }\n\n /**\n * Retrieve if the configuration has an element that has a specific layouthint,\n * makes it easy to indicate that the content needs to be presented in a certain way.\n */\n hasLayoutHint(hint: string) {\n return this.config.some((configElement) =>\n configElement.layouthint.has(hint),\n );\n }\n\n /**\n * Returns config elements by given types\n */\n byTypes(types: string[] = []) {\n if (!types || types.length === 0) {\n return this.config;\n }\n\n return this.config.filter((config) => types.includes(config.type));\n }\n\n /**\n * Get label config elements\n */\n get labelConfig() {\n return this.config.filter((config) => config.type === \"labelElement\");\n }\n\n /**\n * Get all section reference types\n */\n getAllSectionReferenceTypes() {\n return this.config\n .filter((item) => item.type === \"contentElement\")\n .flatMap((item) => item.types);\n }\n\n /**\n * Retrieve all content element configuration by content type\n */\n getContentElementConfigBySectionReferenceType(type: string) {\n return this.config.filter(\n (config) =>\n config.type === \"contentElement\" && config.types.includes(type),\n );\n }\n\n /**\n * Retrieve the first permitted label to render when a concept and contentConfiguration is available\n * Be aware that permission could be in place for labels from a concept.\n */\n getContentConfiguredLabel(concept?: ConceptDetailModel, defaultLabel = \"\") {\n const configuredLabelProperties =\n this.labelConfig.length > 0 ? this.labelConfig[0].types : [];\n\n if (concept && configuredLabelProperties.length > 0) {\n const configuredLabels = concept\n .getLabelElementByIds(configuredLabelProperties)\n .filter(\n (configuredLabel) =>\n configuredLabel.value && configuredLabel.value !== \"\",\n );\n\n if (configuredLabels.length > 0) {\n const contentConfiguredLabels = configuredLabelProperties\n .filter((configuredLabelProperty) => {\n configuredLabels.some(\n (configuredLabel) =>\n configuredLabelProperty === configuredLabel._id,\n );\n return false;\n })\n .map((configuredLabelProperty) => {\n const found = configuredLabels.find(\n (configuredLabel) =>\n configuredLabel._id === configuredLabelProperty,\n );\n return found;\n });\n\n if (\n contentConfiguredLabels.length > 0 &&\n contentConfiguredLabels[0] !== undefined\n ) {\n return contentConfiguredLabels[0].value;\n }\n }\n }\n\n return defaultLabel;\n }\n\n /**\n * Indicates if content comes from the data service\n */\n get hasContentFromData() {\n return hasAllContentInData();\n }\n}\n","import { immerable } from \"immer\";\nimport { klona } from \"klona/full\";\nimport { get } from \"lodash\";\n\nimport { getContextPathModularUI } from \"../../settings/Paths\";\nimport { LayoutHintCollection } from \"../layouthint/LayoutHintCollection\";\n\nimport type { Contributions, Data } from \"../../types/types\";\nimport type { ModelOptions } from \"../types\";\n\n/**\n * Base model, this is the foundation of a model,\n * it contains data that is needed for all models like, data, contributions and layout hint\n *\n * Extend this for non modular ui resources, for modular ui resource start with the resourceModel\n */\nexport abstract class BaseModel<\n D extends Data = Data,\n C extends Contributions = Contributions,\n> {\n static [immerable] = true;\n\n private _data: D;\n private readonly _contributions: C;\n private readonly _layouthint: LayoutHintCollection;\n private _modelOptions: ModelOptions;\n\n constructor(\n data?: D,\n contributions?: C,\n options: ModelOptions = {\n origin: \"\",\n contextPath: getContextPathModularUI(),\n },\n ) {\n if (typeof data === \"object\" && data != null) {\n this._data = data;\n } else {\n this._data = {} as D;\n }\n\n if (typeof contributions === \"object\" && contributions != null) {\n this._contributions = contributions;\n } else {\n this._contributions = {} as C;\n }\n\n this._modelOptions = options;\n\n const hints = this.getContributionAsArray<string>(\"layouthint\", []);\n this._layouthint = new LayoutHintCollection(hints);\n }\n\n get data() {\n return this._data;\n }\n\n protected replaceData(data: D) {\n this._data = data;\n }\n\n get contributions() {\n return this._contributions;\n }\n\n get modelOptions() {\n return this._modelOptions;\n }\n\n get origin() {\n return this._modelOptions.origin;\n }\n\n get contextPath() {\n return this._modelOptions.contextPath;\n }\n\n get layouthint() {\n return this._layouthint;\n }\n\n /**\n * Retrieve property from the data object of the model, mostly used internal\n */\n protected getData<T>(propName: string, defaultValue?: T) {\n if (defaultValue) {\n return get<D, string, T>(this.data, propName, defaultValue);\n }\n return get<D, string>(this.data, propName);\n }\n\n protected getDataAsString<T extends string | undefined>(\n propName: string,\n defaultValue?: T,\n ): T extends string ? string : undefined {\n const dataAsString = this.getData<string>(propName, defaultValue);\n\n if (typeof dataAsString === \"string\") {\n return dataAsString as T extends string ? string : undefined;\n }\n\n return defaultValue as T extends string ? string : undefined;\n }\n\n protected getDataAsNumber<T extends number | undefined>(\n propName: string,\n defaultValue?: T,\n ): T extends number ? number : undefined {\n const dataAsNumber = this.getData<number>(propName, defaultValue);\n\n if (typeof dataAsNumber === \"number\") {\n return dataAsNumber as T extends number ? number : undefined;\n }\n\n return defaultValue as T extends number ? number : undefined;\n }\n\n protected getDataAsBoolean<T extends boolean | undefined>(\n propName: string,\n defaultValue?: T,\n ): T extends boolean ? boolean : undefined {\n const dataAsBoolean = this.getData<boolean>(propName, defaultValue);\n\n if (typeof dataAsBoolean === \"boolean\") {\n return dataAsBoolean as T extends boolean ? boolean : undefined;\n }\n\n return defaultValue as T extends boolean ? boolean : undefined;\n }\n\n protected getDataAsArray<T>(\n propName: string,\n defaultValue?: T[],\n ): T[] | undefined {\n const dataAsArray = this.getData<T[]>(propName, defaultValue);\n if (Array.isArray(dataAsArray)) {\n return dataAsArray;\n }\n return defaultValue;\n }\n\n protected getDataAsObject<T extends object | undefined>(\n propName: string,\n defaultValue?: T,\n ): T extends object ? object : undefined {\n const dataAsObject = this.getData<T>(propName, defaultValue);\n\n if (typeof dataAsObject === \"object\") {\n return dataAsObject as T extends object ? T : undefined;\n }\n\n return defaultValue as T extends object ? T : undefined;\n }\n\n protected getContribution(propName: string, defaultValue?: unknown) {\n return get(this.contributions, propName, defaultValue);\n }\n\n protected getContributionAsArray<T>(\n propName: string,\n defaultValue: T[],\n ): T[] {\n const contributionAsArray = this.getContribution(propName, defaultValue);\n if (Array.isArray(contributionAsArray)) {\n return contributionAsArray;\n }\n return defaultValue;\n }\n\n protected getContributionAsObject<T extends object | undefined>(\n propName: string,\n defaultValue?: T,\n ): T extends object ? T : undefined {\n const contributionAObject = this.getContribution(propName, defaultValue);\n\n if (typeof contributionAObject === \"object\") {\n return contributionAObject as T extends object ? T : undefined;\n }\n\n return defaultValue as T extends object ? T : undefined;\n }\n\n protected getContributionAsString<T extends string | undefined>(\n propName: string,\n defaultValue?: T,\n ): T extends string ? string : undefined {\n const contributionAsString = this.getContribution(propName, defaultValue);\n\n if (typeof contributionAsString === \"string\") {\n return contributionAsString as T extends string ? string : undefined;\n }\n\n return defaultValue as T extends string ? string : undefined;\n }\n\n protected getContributionAsBoolean<T extends boolean | undefined>(\n propName: string,\n defaultValue?: T,\n ): T extends boolean ? boolean : undefined {\n const contributionAsBoolean = this.getContribution(propName, defaultValue);\n\n if (typeof contributionAsBoolean === \"boolean\") {\n return contributionAsBoolean as T extends boolean ? boolean : undefined;\n }\n\n return defaultValue as T extends boolean ? boolean : undefined;\n }\n\n protected getContributionAsNumber<T extends number | undefined>(\n propName: string,\n defaultValue?: T,\n ): T extends number ? number : undefined {\n const contributionAsNumber = this.getContribution(propName, defaultValue);\n\n if (typeof contributionAsNumber === \"number\") {\n return contributionAsNumber as T extends number ? number : undefined;\n }\n\n return defaultValue as T extends number ? number : undefined;\n }\n\n hasData() {\n return Object.keys(this.data).length > 0;\n }\n\n public clone(): this {\n return klona(this) as this;\n }\n}\n","import { immerable } from \"immer\";\nimport has from \"lodash/has\";\n\nimport { getContextPathModularUI } from \"../settings/Paths\";\n\nimport type { Href } from \"../models/href/Href\";\nimport type { Parameter } from \"../models/parameter/Parameter\";\nimport type { ModelOptions } from \"../models/types\";\nimport type { Contributions, Data } from \"../types/types\";\n\n/**\n * Class contains the combined responses of data and contribution services of the Be Informed Modular UI.\n */\nexport class ModularUIResponse {\n [immerable] = true;\n\n private _key: string;\n private _data?: Data;\n private _contributions?: Contributions;\n private _locale = \"en\";\n private _parameters: Parameter[] | undefined;\n private _origin: string | undefined;\n private _contextPath: string | undefined = getContextPathModularUI();\n private _requestHref: Href | undefined;\n\n constructor(\n key?: string,\n data?: Data,\n contributions?: Contributions,\n locale?: string,\n ) {\n this._key = key ?? \"unknown\";\n this._data = data;\n this._contributions = contributions;\n this._locale = locale ?? \"en\";\n }\n\n static create(input: {\n key: string;\n data: Record<string, Data>;\n contributions: Record<string, Contributions>;\n origin?: string | undefined;\n contextPath?: string | undefined;\n }) {\n const response = new ModularUIResponse();\n\n if (has(input, \"data\") && has(input, \"contributions\")) {\n const [dataKey] = Object.keys(input.data);\n const [contributionsKey] = Object.keys(input.contributions);\n\n response.key = input.key ?? contributionsKey;\n response.data = input.data?.[dataKey];\n response.contributions = input.contributions?.[contributionsKey];\n response.origin = input.origin;\n response.contextPath = input.contextPath;\n }\n\n return response;\n }\n\n get resourcetype() {\n const resourcetype = this.contributions?.resourcetype;\n if (typeof resourcetype === \"string\") {\n return resourcetype;\n }\n return \"\";\n }\n\n get modelOptions(): ModelOptions {\n return {\n origin: this.origin,\n contextPath: this.contextPath,\n };\n }\n\n set origin(origin: string | undefined) {\n this._origin = origin ?? \"\";\n }\n\n get origin() {\n return this._origin;\n }\n\n set contextPath(contextPath: string | undefined) {\n this._contextPath = contextPath ?? getContextPathModularUI();\n }\n\n get contextPath() {\n return this._contextPath;\n }\n\n set locale(locale: string) {\n this._locale = locale;\n }\n\n get locale() {\n return this._locale;\n }\n\n set key(key: string) {\n this._key = key;\n }\n\n get key() {\n return this._key;\n }\n\n set data(data: Data | undefined) {\n this._data = data;\n }\n\n get data() {\n return this._data;\n }\n\n set contributions(contributions: Contributions | undefined) {\n this._contributions = contributions;\n }\n\n get contributions() {\n return this._contributions;\n }\n\n set parameters(parameters: Parameter[] | undefined) {\n this._parameters = parameters;\n }\n\n get parameters() {\n return this._parameters;\n }\n\n set requestHref(requestHref: Href | undefined) {\n this._requestHref = requestHref;\n }\n\n get requestHref() {\n return this._requestHref;\n }\n\n static rehydrate(data: {\n key: string;\n locale: string;\n data: Data;\n contributions: Contributions;\n origin?: string;\n contextPath?: string;\n }) {\n const modelData = new ModularUIResponse();\n\n modelData.origin = data.origin;\n modelData.contextPath = data.contextPath;\n modelData.locale = data.locale;\n modelData.key = data.key;\n modelData.data = data.data;\n modelData.contributions = data.contributions;\n\n return modelData;\n }\n}\n","import { INITIAL_FILTER } from \"../../layouthints/LayoutHints\";\nimport { BaseModel } from \"../base/BaseModel\";\nimport { Href } from \"../href/Href\";\nimport { Parameter } from \"../parameter/Parameter\";\nimport { ProcessStatusSettingsModel } from \"../process/ProcessStatusSettingsModel\";\nimport { LinkCollection } from \"./LinkCollection\";\n\nimport type { TargetModel } from \"../../modularui/types\";\nimport type { ModelOptions } from \"../types\";\nimport type { NormalizedLinkContributions, NormalizedLinkData } from \"./types\";\n\nexport class LinkModel extends BaseModel<\n NormalizedLinkData,\n NormalizedLinkContributions\n> {\n private _href: Href;\n private _icon?: string;\n private _targetModel?: TargetModel | undefined;\n private _isCacheable = false;\n\n constructor(\n data?: NormalizedLinkData,\n contributions?: NormalizedLinkContributions,\n modelOptions?: ModelOptions,\n ) {\n super(data, contributions, modelOptions);\n\n this._href = this.createHref();\n }\n\n static create(\n name: string,\n href: string | Href,\n label: string,\n modelOptions?: ModelOptions,\n ) {\n return new LinkModel(\n { name, href: href.toString() },\n { name, label },\n modelOptions,\n );\n }\n\n private createHref() {\n const href = new Href(\n this.getDataAsString(\"href\", \"\"),\n this.resourcetype,\n this.modelOptions,\n );\n this.handleInitialFilters(href);\n return href;\n }\n\n /**\n * Handle initial filter hints\n * @private\n */\n private handleInitialFilters(href: Href) {\n if (this.layouthint.has(INITIAL_FILTER)) {\n const filters: Record<string, string[]> = {};\n const hintStart = INITIAL_FILTER.length;\n for (const hint of this.layouthint.filter((hint) =>\n hint.startsWith(INITIAL_FILTER),\n )) {\n const param = hint.substring(hintStart);\n const p = Parameter.fromString(param);\n if (p.name) {\n if (!filters[p.name]) {\n filters[p.name] = [];\n }\n\n if (typeof p.value === \"string\") {\n filters[p.name].push(p.value);\n }\n }\n }\n\n Object.keys(filters).forEach((key) => {\n const value = filters[key].join(\",\");\n href.addParameter(key, value);\n });\n }\n }\n\n /**\n * Getting the key/name of this link\n */\n get key() {\n return this.getDataAsString(\"name\", \"\");\n }\n\n /**\n * Getting the label of the link\n */\n get label() {\n return this.getContributionAsString(\"label\", this.key);\n }\n\n /**\n * Getting the type of the link\n */\n get resourcetype() {\n return this.getContributionAsString(\"resourcetype\", \"\");\n }\n\n /**\n * Getting link group\n */\n get group() {\n return this.getContributionAsString(\n \"group\",\n this.getDataAsString(\"group\", \"\"),\n );\n }\n\n get href() {\n return this._href;\n }\n\n set href(href: Href) {\n this._href = href;\n }\n\n /**\n * retrieve sublinks of this link\n */\n get links() {\n if (\"components\" in this.data && \"components\" in this.contributions) {\n return new LinkCollection(\n { components: this.data.components },\n { components: this.contributions.components },\n );\n }\n\n return new LinkCollection();\n }\n\n /**\n * Check if the href startswith the URI of the given href\n */\n isActive(link: LinkModel) {\n return link.href.startsWith(this.href);\n }\n\n /**\n * Setter for icon of LinkModel\n */\n set icon(icon) {\n this._icon = icon;\n }\n\n /**\n * Retrieve icon of LinkModel\n */\n get icon() {\n return this._icon;\n }\n\n get targetModel() {\n return this._targetModel;\n }\n\n set targetModel(targetModel) {\n this._targetModel = targetModel;\n }\n\n get isCacheable() {\n return this._isCacheable;\n }\n\n set isCacheable(isCacheable) {\n this._isCacheable = isCacheable;\n }\n\n get filterName() {\n const filter = this.getDataAsObject(\"filter\");\n if (filter && \"name\" in filter && typeof filter.name === \"string\") {\n return filter.name;\n }\n return undefined;\n }\n\n get hasProcessStatusSettings() {\n return (\n \"processStatus\" in this.data && \"processStatus\" in this.contributions\n );\n }\n\n get processStatus() {\n if (this.hasProcessStatusSettings) {\n return new ProcessStatusSettingsModel(\n this.data.processStatus,\n this.contributions.processStatus,\n );\n }\n return undefined;\n }\n}\n","import type { NormalizedLinkContributions, NormalizedLinkData } from \"./types\";\n\ntype LinksData = Record<\n string,\n { href: string } | { href?: string; name: string }[]\n>;\n\ntype LinksContribution = Record<\n string,\n | {\n href?: string;\n label?: string;\n resourcetype?: string;\n layouthint?: string[];\n }\n | {\n href?: string;\n name: string;\n label: string;\n resourcetype?: string;\n layouthint?: string[];\n }[]\n>;\n\ninterface NormalizedLink {\n data: NormalizedLinkData;\n contributions: NormalizedLinkContributions;\n}\n\nexport const normalizeLinkJSON = (\n data?: object,\n contribution?: object,\n): NormalizedLink[] => {\n if (!data && !contribution) {\n return [];\n }\n\n const links = [];\n\n if (data) {\n const linksData = data as LinksData;\n for (const key of Object.keys(linksData)) {\n const linkData = linksData[key];\n if (Array.isArray(linkData)) {\n // group of links\n for (const link of linkData) {\n links.push({\n data: {\n group: key,\n ...link,\n },\n contributions: { name: link.name },\n });\n }\n } else {\n // single link\n links.push({\n data: {\n name: key,\n group: key,\n ...linkData,\n },\n contributions: { name: key },\n });\n }\n }\n }\n\n if (contribution) {\n const linksContribution = contribution as LinksContribution;\n for (const key of Object.keys(linksContribution)) {\n const linkContribution = linksContribution[key];\n if (Array.isArray(linkContribution)) {\n for (const link of linkContribution) {\n const idx: number = links.findIndex(\n (l) => l.data?.name === link.name,\n );\n if (idx > -1) {\n links[idx] = {\n ...links[idx],\n contributions: { ...link, group: key },\n };\n }\n }\n } else {\n const idx: number = links.findIndex((l) => l.data?.name === key);\n if (idx > -1) {\n links[idx] = {\n ...links[idx],\n contributions: { name: key, ...linkContribution },\n };\n } else if (\"href\" in linkContribution) {\n links.push({\n data: { name: key, href: linkContribution.href },\n contributions: { name: key },\n });\n }\n }\n }\n }\n\n return links;\n};\n","import { HIDE_IN_USER_INTERFACE } from \"../../layouthints/LayoutHints\";\nimport { BaseCollection } from \"../base/BaseCollection\";\nimport { LinkModel } from \"./LinkModel\";\nimport { normalizeLinkJSON } from \"./normalizeLinkJSON\";\n\nimport type { Contributions, Data } from \"../../types/types\";\nimport type { Href } from \"../href/Href\";\nimport type { ModelOptions } from \"../types\";\n\nexport class LinkCollection extends BaseCollection<LinkModel> {\n constructor(\n data?: Record<string, unknown>,\n contributions?: Record<string, unknown>,\n modelOptions?: ModelOptions,\n ) {\n super();\n\n const links = normalizeLinkJSON(data, contributions);\n\n this.collection = links\n .filter(\n (link) =>\n !link.contributions.layouthint?.includes(HIDE_IN_USER_INTERFACE),\n )\n .map(\n (link) => new LinkModel(link.data, link.contributions, modelOptions),\n );\n }\n\n static create(\n data: Data,\n contributions?: Contributions | null,\n selflinkResourceType?: string,\n modelOptions?: ModelOptions,\n ) {\n const linksData = \"_links\" in data ? data._links : null;\n const linksContributions =\n typeof contributions === \"object\" &&\n contributions !== null &&\n \"_links\" in contributions &&\n typeof contributions._links === \"object\"\n ? { ...contributions._links }\n : {};\n\n return new LinkCollection(\n Array.isArray(linksData) ? linksData[0] : linksData,\n {\n self: {\n resourcetype: selflinkResourceType,\n },\n ...linksContributions,\n },\n modelOptions,\n );\n }\n\n get links() {\n return this.collection;\n }\n\n set links(links: LinkModel[]) {\n this.collection = links;\n }\n\n /**\n * Get a link by it's key, handy for getting the self link\n */\n getLinkByKey(key: string) {\n return this.find((link) => link.key === key);\n }\n\n /**\n * Indicate if a link by key exists\n */\n hasLinkByKey(key: string) {\n return this.all.some((link) => link.key === key);\n }\n\n /**\n * Get a link by it's Href\n */\n getLinkByHref(href: Href | string) {\n return this.find((link) => link.href.equals(href));\n }\n\n /**\n * Getting the links by group key. For instance getting all 'tab' links of the web application.\n * Returns a new LinkCollection\n */\n getLinksByGroup(...args: string[]) {\n const groupsToFind = args.length > 0 ? [...args] : [];\n const groupLinks = this.filter((link) => groupsToFind.includes(link.group));\n\n const linkCollection = new LinkCollection();\n linkCollection.links = groupLinks;\n return linkCollection;\n }\n\n /**\n * Retrieve links by resource type\n * Returns a new LinkCollection\n */\n getLinkByResourceType(resourceType: string) {\n const linkCollection = new LinkCollection();\n\n linkCollection.collection = this.filter(\n (link) => link.resourcetype === resourceType,\n );\n\n return linkCollection;\n }\n\n /**\n * Retrieve links including a layout hint\n * Returns a new LinkCollection\n */\n getLinksByLayoutHint(hint: string) {\n const newCollection = new LinkCollection();\n\n newCollection.collection = this.filter((link) => link.layouthint.has(hint));\n\n return newCollection;\n }\n\n /**\n * Indicates if a link with layout hint exists\n */\n hasLinksByLayoutHint(hint: string) {\n return this.some((link) => link.layouthint.has(hint));\n }\n\n /**\n * Get all link Href's in this LinkCollection as an array\n */\n toHrefArray() {\n return this.map((link) => link.href);\n }\n\n /**\n * Check if link exists in collection\n */\n hasLink(link: LinkModel) {\n return this.some((l) => l.href.equals(link.href));\n }\n\n /**\n * Updates this LinkCollection with a new link, when the link to update does not exist, it is added to the collection\n * This mutates the current LinkCollection\n */\n update(newLink: LinkModel) {\n const oldIndex = this.links.findIndex((link) => link.key === newLink.key);\n\n if (oldIndex === -1) {\n this.collection = [...this.collection, newLink];\n\n return this;\n }\n\n this.collection = [\n ...this.links.slice(0, oldIndex),\n newLink,\n ...this.links.slice(oldIndex + 1),\n ];\n\n return this;\n }\n\n /**\n * Retrieve a path pattern from all links in the collection,\n * that can be used in a React Router route to match against an URL to determine of the route matches that URL\n */\n get routePath(): string {\n if (this.length === 0) {\n // when a react router route has no path it matches on all url, this is to prevent this behavior\n return \"__NON_EXISTING_ROUTE__\";\n }\n\n const path = this.map((link) => link.href.path).join(\"|\");\n return this.length > 1 ? `(${path})` : path;\n }\n}\n","import { TIMEVERSION_FILTER_NAME } from \"../../constants/Constants\";\nimport { DateUtil } from \"../../utils/datetime/DateTimeUtil\";\nimport { BaseModel } from \"../base/BaseModel\";\nimport { LinkCollection } from \"../links/LinkCollection\";\n\nimport type { ISO_DATE } from \"../../types/types\";\nimport type {\n ProcessStatusSettingsContributions,\n ProcessStatusSettingsData,\n} from \"./types\";\n\nexport class ProcessStatusSettingsModel extends BaseModel<\n ProcessStatusSettingsData,\n ProcessStatusSettingsContributions\n> {\n get concequenceType() {\n return this.getContributionAsString(\"consequenceType\", \"\").toLowerCase();\n }\n\n get transition() {\n return this.getContributionAsString(\"transition\", \"\").toLowerCase();\n }\n\n get isApplicable() {\n return this.getDataAsBoolean(\"applicable\", false);\n }\n\n get isCompleted() {\n return this.getDataAsBoolean(\"completed\", false);\n }\n\n get isNeeded() {\n const needed = this.getDataAsString(\"needed\", \"unknown\");\n\n if (needed === \"unknown\") {\n // if the value in the data is unknown, this should also return null;\n return null;\n }\n\n return needed === \"true\";\n }\n\n get state() {\n return this.getDataAsString(\"state\", \"\");\n }\n\n get canComplete(): boolean | null {\n return this.getDataAsBoolean(\"canComplete\", true);\n }\n\n get links(): LinkCollection {\n return LinkCollection.create(\n this.contributions,\n null,\n \"process-status\",\n this.modelOptions,\n );\n }\n\n get referenceDate(): ISO_DATE {\n return DateUtil.now();\n }\n\n /**\n * Retrieve concept link of attribute when available\n */\n get conceptLink() {\n const conceptLink = this.links.getLinkByKey(\"concept\");\n if (conceptLink) {\n conceptLink.href = conceptLink.href.addParameter(\n TIMEVERSION_FILTER_NAME,\n this.referenceDate,\n );\n\n conceptLink.isCacheable = true;\n }\n\n return conceptLink;\n }\n}\n","import { IllegalArgumentException } from \"../../exceptions/IllegalArgumentException\";\nimport { IllegalStateException } from \"../../exceptions/IllegalStateException\";\nimport { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport { LinkCollection } from \"../links/LinkCollection\";\nimport { BaseModel } from \"./BaseModel\";\n\nimport type { Contributions, ResourceData } from \"../../types/types\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { LinkModel } from \"../links/LinkModel\";\nimport type {\n ModelWithChildModels,\n ModularUIModel,\n ModularUIModelWithChildModels,\n} from \"../types\";\n\nexport abstract class ResourceModel<\n D extends ResourceData = ResourceData,\n C extends Contributions = Contributions,\n >\n extends BaseModel<D, C>\n implements ModularUIModel, ModelWithChildModels\n{\n private _key: string;\n private readonly _locale: string;\n private _lastServerUpdate: number;\n private readonly _links: LinkCollection;\n private _childModels: ModelWithChildModels[] = [];\n private _modularuiResponse: ModularUIResponse;\n private _connectKey: string | undefined;\n\n constructor(modularuiResponse: ModularUIResponse = new ModularUIResponse()) {\n super(\n modularuiResponse.data as D,\n modularuiResponse.contributions as C,\n modularuiResponse.modelOptions,\n );\n\n this._modularuiResponse = modularuiResponse;\n\n this._key = modularuiResponse.key;\n this._locale = modularuiResponse.locale;\n\n this._lastServerUpdate = Date.now();\n this._links = LinkCollection.create(\n this.data,\n this.contributions,\n this.resourcetype,\n this.modelOptions,\n );\n }\n\n get modularuiResponse() {\n return this._modularuiResponse;\n }\n\n set connectKey(key: string | undefined) {\n this._connectKey = key;\n }\n\n get connectKey() {\n return this._connectKey;\n }\n\n /**\n * Indicates the type of model\n */\n abstract get type(): string;\n\n /**\n * Property to render name of a model, is original name before compilation, transpilation, minification, etc\n */\n static get modelName(): string {\n throw new IllegalStateException(`No modelName set on the resource model`);\n }\n\n /**\n * Returns true when the model is supported based on configuration found in contributions\n */\n static isApplicableModel(data?: ModularUIResponse) {\n if (!(data instanceof ModularUIResponse)) {\n throw new IllegalArgumentException(\n \"Given argument for isApplicableModel is not a ModularUIResponse\",\n );\n }\n\n throw new Error(\n `No isApplicableModel condition set on model: ${this.modelName}`,\n );\n }\n\n get lastServerUpdate() {\n return this._lastServerUpdate;\n }\n\n set lastServerUpdate(lastServerUpdate) {\n this._lastServerUpdate = lastServerUpdate;\n }\n\n get locale() {\n return this._locale;\n }\n\n /**\n * Retrieve key\n */\n get key() {\n return this._key;\n }\n\n set key(key: string) {\n this._key = key;\n }\n\n /**\n * Retrieve type of resource\n */\n get resourcetype() {\n return this.getContributionAsString(\"resourcetype\", \"unknown\");\n }\n\n get label() {\n return this.getContributionAsString(\"label\", \"\");\n }\n\n /**\n * Getting the links of the resource\n */\n get links() {\n return this._links;\n }\n\n get selflink() {\n const selflink = this.links.getLinkByKey(\"self\");\n if (selflink == undefined) {\n throw new IllegalStateException(\n `Could not find self link for ${\n this.key === null ? \"unknown\" : this.key\n }`,\n );\n }\n return selflink;\n }\n\n /**\n * Return the href of the self link of this resource\n */\n get selfhref() {\n return this.selflink?.href;\n }\n\n // Below methods are used when a resource is requested using the ModularUIRequest, it retrieves any child models and adds them to this resource\n\n /**\n * Add links to expand on initialization of this model\n */\n getInitialChildModelLinks(): LinkModel[] {\n return [];\n }\n\n /**\n * Retrieve links of expanded child models\n */\n get childModels() {\n return this._childModels;\n }\n\n /**\n * Add child models to this model\n */\n addChildModels(\n models: ModularUIModelWithChildModels[] = [],\n errors: ErrorResponse[] = [],\n ) {\n const flattenModels = models?.flat();\n const flattenErrors = errors?.flat();\n\n this._childModels = flattenModels;\n\n this.setChildModels(flattenModels, flattenErrors);\n return this;\n }\n\n /**\n * Template to set expanded child models\n * Use this hook to separate the retrieved child models into the correct models.\n * @abstract\n */\n setChildModels(models: ModelWithChildModels[], errors: ErrorResponse[]) {\n if (!models && !errors) {\n throw new IllegalArgumentException(\"No models send to setChildModels\");\n }\n }\n}\n","import { ResourceModel } from \"../base/ResourceModel\";\n\nimport type { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport type {\n ConceptTypeDetailData,\n LabelType,\n PropertyType,\n SectionReferenceType,\n TextFragmentType,\n} from \"./types\";\n\n/**\n * Model for concept type details, available through modelcatalog\n */\nexport class ConceptTypeDetailModel extends ResourceModel<ConceptTypeDetailData> {\n get type(): string {\n return \"ConceptTypeDetail\";\n }\n\n static override get modelName(): string {\n return \"ConceptTypeDetailModel\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n return data.resourcetype === \"ConceptTypeDetail\";\n }\n\n override get key() {\n return this.getDataAsString(\"_id\", \"concepttype\");\n }\n\n /**\n * Get concept type label\n */\n override get label() {\n return this.getDataAsString(\"label\", \"\");\n }\n\n get isCoreTaxonomy() {\n return this.getDataAsBoolean(\"coreTaxonomy\", false);\n }\n\n /**\n * Get concept type icon\n */\n get icon() {\n return this.getDataAsString(\"icon\", \"\");\n }\n\n /**\n * Get concept type text color\n */\n get textColor() {\n return this.getDataAsString(\"textColor\", \"#000\");\n }\n\n /**\n * Get concept type background color\n */\n get backgroundColor() {\n return this.getDataAsString(\"backgroundColor\", \"#fff\");\n }\n\n /**\n * Get concept line color\n */\n get borderColor() {\n return this.getDataAsString(\"lineColor\", \"#000\");\n }\n\n /**\n * Get label types\n */\n get labelTypes(): LabelType[] {\n return this.getDataAsArray<LabelType>(\"labelTypes\") || [];\n }\n\n /**\n * Get propertyTypes\n */\n get propertyTypes(): PropertyType[] {\n return this.getDataAsArray(\"propertyTypes\") || [];\n }\n\n /**\n * Get textFragmentTypes\n */\n get textFragmentTypes(): TextFragmentType[] {\n return this.getDataAsArray(\"textFragmentTypes\") || [];\n }\n\n /**\n * Get sectionReferenceTypes\n */\n get sectionReferenceTypes(): SectionReferenceType[] {\n return this.getDataAsArray(\"sectionReferenceTypes\") || [];\n }\n\n isOfConceptType(conceptTypeHref: string) {\n return this.selfhref?.equals(conceptTypeHref);\n }\n}\n","import { TIMEVERSION_FILTER_NAME } from \"../../constants/Constants\";\nimport { BaseModel } from \"../base/BaseModel\";\nimport { LinkCollection } from \"../links/LinkCollection\";\nimport { LinkModel } from \"../links/LinkModel\";\nimport { ConceptTypeDetailModel } from \"./ConceptTypeDetailModel\";\n\nimport type { ISO_DATE } from \"../../types/types\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ModelOptions, ModelWithChildModels } from \"../types\";\nimport type { ConceptLinkData } from \"./types\";\n\nexport class ConceptLinkModel\n extends BaseModel<ConceptLinkData>\n implements ModelWithChildModels\n{\n private _entryDate: ISO_DATE | undefined;\n private _links: LinkCollection;\n private _conceptType: ConceptTypeDetailModel | undefined;\n\n constructor(\n data?: ConceptLinkData,\n entryDate?: ISO_DATE,\n modelOptions?: ModelOptions,\n ) {\n super(data, {}, modelOptions);\n this._entryDate = entryDate;\n this._links = LinkCollection.create(\n data ?? {},\n null,\n \"concept\",\n this.modelOptions,\n );\n }\n\n get type() {\n return \"ConceptLinkModel\";\n }\n\n getInitialChildModelLinks() {\n if (this.conceptTypeLink) {\n this.conceptTypeLink.isCacheable = true;\n return [this.conceptTypeLink];\n }\n\n return [];\n }\n\n setChildModels(models: ModelWithChildModels[], _errors: ErrorResponse[]) {\n if (this.conceptTypeLink) {\n const href = this.conceptTypeLink.href;\n const conceptTypeModel = models.find((model) => {\n if (model instanceof ConceptTypeDetailModel) {\n return model.selfhref?.equalsWithParameters(href);\n }\n return false;\n });\n this.conceptType = conceptTypeModel as ConceptTypeDetailModel | undefined;\n }\n }\n\n /**\n * Retrieve concept type\n */\n get conceptType() {\n return this._conceptType;\n }\n\n /**\n * Set concept type\n */\n set conceptType(conceptType: ConceptTypeDetailModel | undefined) {\n this._conceptType = conceptType;\n }\n\n /**\n * Retrieve key\n */\n get key() {\n return this.getDataAsString(\"_id\", \"\");\n }\n\n /**\n * Retrieve label\n */\n get label() {\n const label = this.getDataAsString(\"label\");\n\n if (label) {\n return label;\n }\n\n return this.getDataAsString(\"conceptLabel\", \"\");\n }\n\n /**\n * Getting the links of the resource\n */\n get links() {\n return this._links;\n }\n\n /**\n * Get self link of model\n */\n get selflink() {\n const selflink = this.links.getLinkByKey(\"self\");\n\n if (selflink === null) {\n throw new Error(\n `Could not find self link for ${\n this.key === null ? \"unknown\" : this.key\n }`,\n );\n }\n\n return selflink;\n }\n\n /**\n * Self href of concept\n */\n get selfhref() {\n if (this._entryDate) {\n return this.selflink?.href.addParameter(\n TIMEVERSION_FILTER_NAME,\n this._entryDate,\n );\n }\n\n return this.selflink?.href;\n }\n\n get conceptTypeLink() {\n return this.links.getLinkByKey(\"concepttype\");\n }\n\n /**\n * Concept type href of concept\n */\n get concepttypeHref() {\n return this.conceptTypeLink?.href ?? null;\n }\n\n get taxonomyType() {\n return \"default\";\n }\n\n get modelCategory() {\n return this.getDataAsString(\"modelCategory\");\n }\n\n get sectionId() {\n return this.data.section?._id;\n }\n\n get fragment() {\n return this.data.section?.fragment;\n }\n\n asLinkModel() {\n const link = LinkModel.create(this.key, \"\", this.label, this.modelOptions);\n if (this.selfhref) {\n link.href = this.selfhref;\n }\n return link;\n }\n}\n","import { BaseModel } from \"../base/BaseModel\";\nimport { ConceptLinkModel } from \"./ConceptLinkModel\";\n\nimport type { ISO_DATE } from \"../../types/types\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { Href } from \"../href/Href\";\nimport type { ModelOptions, ModelWithChildModels } from \"../types\";\nimport type {\n RelationData,\n RelationDirection,\n RelationTypeType,\n} from \"./types\";\n\nexport class ConceptRelationModel\n extends BaseModel<RelationData>\n implements ModelWithChildModels\n{\n private _concept: ConceptLinkModel;\n\n constructor(\n relation: RelationData,\n entryDate?: ISO_DATE,\n modelOptions?: ModelOptions,\n ) {\n super(relation, undefined, modelOptions);\n\n this._concept = new ConceptLinkModel(\n relation?.concept,\n entryDate,\n this.modelOptions,\n );\n }\n\n get selfhref(): Href | undefined {\n throw new Error(\"Method not implemented.\");\n }\n\n getInitialChildModelLinks() {\n return this.concept.getInitialChildModelLinks();\n }\n\n setChildModels(models: ModelWithChildModels[], errors: ErrorResponse[]) {\n this.concept.setChildModels(models, errors);\n }\n\n get type() {\n return this.getDataAsString(\"relationType\", \"\");\n }\n\n /**\n * Get key of relation\n */\n get key() {\n return this.type;\n }\n\n /**\n * Get Label of relation\n */\n get label() {\n return this.getDataAsString(\"relationLabel\");\n }\n\n /**\n * Get direction of relation\n */\n get direction() {\n return this.getDataAsString(\"relationDirection\") as RelationDirection;\n }\n\n /**\n * Get type of relation type,\n */\n get relationTypeType() {\n return this.getDataAsString(\"relationTypeType\", \"None\") as RelationTypeType;\n }\n\n get condition() {\n return this.getDataAsString(\"relationCondition\");\n }\n\n get properties() {\n return this.getDataAsArray(\"properties\");\n }\n\n /**\n * Get Text fragments\n */\n get textfragments() {\n return this.getDataAsArray(\"textFragments\");\n }\n\n /**\n * Get other concept\n */\n get concept() {\n return this._concept;\n }\n\n /**\n * Set concept information\n */\n set concept(concept) {\n this._concept = concept;\n }\n}\n","import { getContextPathModularUI } from \"../../settings/Paths\";\nimport { ResourceCollection } from \"../base/ResourceCollection\";\nimport { ConceptRelationModel } from \"./ConceptRelationModel\";\n\nimport type { ISO_DATE } from \"../../types/types\";\nimport type { ModelOptions } from \"../types\";\nimport type { RelationData } from \"./types\";\n\nexport class ConceptRelationCollection extends ResourceCollection<ConceptRelationModel> {\n private _entryDate: ISO_DATE | undefined;\n private _modelOptions: ModelOptions;\n\n constructor(\n relations: (RelationData | ConceptRelationModel)[] | RelationData,\n entryDate: ISO_DATE | undefined,\n modelOptions?: ModelOptions,\n ) {\n super();\n\n this._entryDate = entryDate;\n this._modelOptions = modelOptions || {\n origin: \"\",\n contextPath: getContextPathModularUI(),\n };\n\n if (relations) {\n this.createCollection(relations, entryDate);\n }\n }\n\n private createCollection(\n relations: (RelationData | ConceptRelationModel)[] | RelationData,\n entryDate: ISO_DATE | undefined,\n ) {\n if (Array.isArray(relations)) {\n relations.forEach((relation) => {\n if (relation instanceof ConceptRelationModel) {\n this.add(relation);\n } else {\n this.add(\n new ConceptRelationModel(relation, entryDate, this._modelOptions),\n );\n }\n });\n } else {\n this.add(\n new ConceptRelationModel(relations, entryDate, this._modelOptions),\n );\n }\n }\n\n /**\n * Get unique list of relation types\n */\n get types() {\n return this.collection\n .filter(\n (relation, pos, arr) =>\n arr.findIndex((item) => item.key === relation.key) === pos,\n )\n .map((relation) => ({\n key: relation.key,\n label: relation.label,\n }));\n }\n\n /**\n * Get relation by its type\n */\n byType(type: string) {\n return new ConceptRelationCollection(\n this.filter((relation) => relation.key === type),\n this._entryDate,\n this._modelOptions,\n );\n }\n\n get incoming(): ConceptRelationCollection {\n return new ConceptRelationCollection(\n this.filter((relation) => relation.direction === \"incoming\"),\n this._entryDate,\n this._modelOptions,\n );\n }\n\n get outgoing(): ConceptRelationCollection {\n return new ConceptRelationCollection(\n this.filter((relation) => relation.direction === \"outgoing\"),\n this._entryDate,\n this._modelOptions,\n );\n }\n\n hasIncoming() {\n return this.incoming.length > 0;\n }\n\n hasOutgoing() {\n return this.outgoing.length > 0;\n }\n}\n","import { ResourceModel } from \"../base/ResourceModel\";\n\nimport type { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport type { ContentTypeContributions, ContentTypeData } from \"./types\";\n\nexport class ContentTypeModel extends ResourceModel<\n ContentTypeData,\n ContentTypeContributions\n> {\n get type() {\n return \"ContentType\";\n }\n\n static override get modelName() {\n return \"ContentTypeModel\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n return data.resourcetype === \"ContentTypeDetail\";\n }\n\n override get label() {\n return this.getDataAsString(\"label\", \"\");\n }\n\n get icon() {\n return this.iconLarge;\n }\n\n get iconSmall() {\n return this.getDataAsString(\"iconSmall\");\n }\n\n get iconMedium() {\n return this.getDataAsString(\"iconMedium\");\n }\n\n get iconLarge() {\n return this.getDataAsString(\"iconLarge\");\n }\n\n get description() {\n return this.getDataAsString(\"description\");\n }\n}\n","import { TIMEVERSION_FILTER_NAME } from \"../../constants/Constants\";\nimport { getSetting } from \"../../settings/Settings\";\nimport { BaseModel } from \"../base/BaseModel\";\nimport { Href } from \"../href/Href\";\nimport { LinkCollection } from \"../links/LinkCollection\";\nimport { ContentTypeModel } from \"./ContentTypeModel\";\n\nimport type { ISO_DATE } from \"../../types/types\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { LinkModel } from \"../links/LinkModel\";\nimport type {\n ModelOptions,\n ModelWithChildModels,\n ModularUIModel,\n} from \"../types\";\nimport type { ContentLinkData } from \"./types\";\n\n/**\n * Link to a concept\n */\nexport class ContentLinkModel\n extends BaseModel<ContentLinkData>\n implements ModelWithChildModels\n{\n private _links: LinkCollection;\n private _entryDate: ISO_DATE | undefined;\n private _contentType: ContentTypeModel | undefined;\n private _items: ContentLinkModel[];\n\n constructor(\n data: ContentLinkData,\n entryDate?: ISO_DATE,\n modelOptions?: ModelOptions,\n ) {\n super(data, {}, modelOptions);\n\n this._entryDate = entryDate;\n this._links = LinkCollection.create(\n this.data,\n this.contributions,\n \"content\",\n this.modelOptions,\n );\n this._items = [];\n }\n\n get type() {\n return \"ContentLinkModel\";\n }\n\n getInitialChildModelLinks(): LinkModel[] {\n if (this.contentTypeLink) {\n this.contentTypeLink.isCacheable = true;\n return [this.contentTypeLink];\n }\n\n return [];\n }\n\n setChildModels(models: ModelWithChildModels[], _errors: ErrorResponse[]) {\n if (this.contentTypeLink) {\n const href = this.contentTypeLink.href;\n this.contentType = models.find((model): model is ContentTypeModel => {\n if (model instanceof ContentTypeModel) {\n return model.selfhref?.equalsWithParameters(href);\n }\n return false;\n });\n }\n }\n\n /**\n * Retrieve content type\n */\n get contentType() {\n return this._contentType;\n }\n\n /**\n * Set concept type\n */\n set contentType(contentType: ModularUIModel | undefined) {\n this._contentType =\n contentType instanceof ContentTypeModel ? contentType : undefined;\n }\n\n set entryDate(entryDate: ISO_DATE) {\n this._entryDate = entryDate;\n }\n\n /**\n * Retrieve key\n */\n get key() {\n return this.getDataAsString(\"_id\", \"\");\n }\n\n /**\n * Retrieve label\n */\n get label() {\n return this.getDataAsString(\"label\", \"\");\n }\n\n /**\n * Retrieve the label of the source a link to a section belongs to\n */\n get sourceLabel() {\n return this.getDataAsString(\"sourceLabel\");\n }\n\n get abbreviation() {\n return (\n this.getDataAsString(\"abbreviation\") ||\n this.getDataAsString(\"sourceAbbreviation\")\n );\n }\n\n get section() {\n return this.data.section;\n }\n\n /**\n * Encode the content-identifier of the path to the content resource.\n * This makes it a single uri part, which can be used on routes to make nested routes\n */\n get encodedHref() {\n const startURI = \"/content/\";\n const selfHref = new Href(this.selfhref.path, \"\", this.modelOptions);\n const href = selfHref.path;\n\n const sourceId = this.section\n ? href.substring(startURI.length, href.lastIndexOf(\"/\"))\n : href.substring(startURI.length);\n\n if (this.section != null) {\n const encodedSection = encodeURIComponent(this.section);\n selfHref.path = `${startURI}${encodeURIComponent(sourceId)}/${encodedSection}`;\n } else {\n selfHref.path = `${startURI}${encodeURIComponent(sourceId)}`;\n }\n\n if (this._entryDate !== null) {\n selfHref.addParameter(TIMEVERSION_FILTER_NAME, this._entryDate);\n }\n\n return selfHref;\n }\n\n /**\n * Getting the links of the resource\n */\n get links() {\n return this._links;\n }\n\n /**\n * Get self link of model\n */\n get selflink() {\n let selflink = this.links.getLinkByKey(\"self\");\n\n if (getSetting(\"COMPLETE_SOURCE\", false)) {\n if (this.links.hasLinkByKey(\"content\")) {\n selflink = this.links.getLinkByKey(\"content\");\n }\n\n if (\n this.section != null &&\n selflink &&\n !selflink.href.path.endsWith(encodeURIComponent(this.section))\n ) {\n selflink.href.addParameter(\"complete\", \"true\");\n selflink.href.hash = this.section || \"\";\n }\n }\n\n if (!selflink) {\n throw new Error(\n `Could not find self link for '${this.key || \"unknown\"}'`,\n );\n }\n\n if (!selflink.href.state) {\n selflink.href.state = {\n fragment: this.fragment,\n };\n } else {\n // @ts-expect-error not sure how to define state here\n selflink.href.state.fragment = this.fragment;\n }\n\n return selflink;\n }\n\n get contentHref(): Href {\n let href = this.data._links.self.href;\n if (this.data._links.content) {\n href = this.data._links.content.href;\n } else if (this.section) {\n const section = encodeURIComponent(this.section);\n if (href.endsWith(section)) {\n href = href.substring(0, href.lastIndexOf(\"/\" + section));\n }\n }\n\n return new Href(href)\n .addParameter(\"complete\", \"true\")\n .addParameter(TIMEVERSION_FILTER_NAME, this._entryDate);\n }\n\n get sectionHref(): Href | null {\n const section = this.section;\n if (section) {\n const contentHref = this.contentHref;\n const sectionHref = new Href(\n contentHref.path + \"/\" + encodeURIComponent(this.section),\n );\n return sectionHref.addParameter(TIMEVERSION_FILTER_NAME, this._entryDate);\n }\n return null;\n }\n\n /**\n * Self href of concept\n */\n get selfhref() {\n if (this._entryDate) {\n return this.selflink.href.addParameter(\n TIMEVERSION_FILTER_NAME,\n this._entryDate,\n );\n }\n\n return this.selflink.href;\n }\n\n get subSectionID() {\n return this.selfhref.hash;\n }\n\n get contentTypeLink() {\n return this.links.getLinkByKey(\"contenttype\");\n }\n\n /**\n * Concept type href of concept\n */\n get contentTypeHref() {\n return this.contentTypeLink?.href;\n }\n\n get fragment() {\n return this.data.sectionFragment;\n }\n\n /**\n * Children of link model in TOC\n */\n set items(items: ContentLinkModel[]) {\n this._items = items;\n }\n\n get items() {\n return this._items;\n }\n}\n","import { createHashFromHref } from \"../../utils/helpers/createHash\";\nimport { BaseModel } from \"../base/BaseModel\";\nimport { ContentLinkModel } from \"../content/ContentLinkModel\";\nimport { LinkCollection } from \"../links/LinkCollection\";\n\nimport type { ISO_DATE } from \"../../types/types\";\nimport type { SectionFragment, SourceReferenceData } from \"./types\";\n\nexport class SourceReferenceModel extends BaseModel<SourceReferenceData> {\n private _entryDate: ISO_DATE | undefined;\n private _links: LinkCollection;\n\n constructor(sourceReference?: SourceReferenceData, entryDate?: ISO_DATE) {\n super(sourceReference);\n\n this._links = LinkCollection.create(\n this.data,\n null,\n \"concept\",\n this.modelOptions,\n );\n this._entryDate = entryDate;\n }\n\n get links() {\n return this._links;\n }\n\n get link() {\n const selfhref = this.selfhref?.path;\n const content = this.links.getLinkByKey(\"content\")?.href.path;\n\n if (selfhref && content) {\n return new ContentLinkModel(\n {\n ...this.data,\n label: this.label,\n section: this.sectionId,\n sectionFragment: this.fragment,\n },\n this._entryDate,\n this.modelOptions,\n );\n }\n\n return;\n }\n\n get selflink() {\n return this.links.getLinkByKey(\"self\");\n }\n\n get selfhref() {\n return this.selflink?.href;\n }\n\n get type() {\n return this.getDataAsString(\"type\", \"\");\n }\n\n get label() {\n return this.getDataAsString(\"label\");\n }\n\n get sourceLabel() {\n return this.getDataAsString(\"sourceLabel\");\n }\n\n get sourceAbbreviation() {\n return this.getDataAsString(\"sourceAbbreviation\");\n }\n\n get referenceHash() {\n if (this.selfhref) {\n return createHashFromHref(this.selfhref);\n }\n return;\n }\n\n get sectionId() {\n return this.getDataAsString(\"sectionId\");\n }\n\n get fragment() {\n return this.getDataAsObject(\"sectionFragment\") as SectionFragment;\n }\n}\n","import { BaseCollection } from \"../base/BaseCollection\";\nimport { SourceReferenceModel } from \"./SourceReferenceModel\";\n\nimport type { ISO_DATE } from \"../../types/types\";\nimport type { SourceReferenceData } from \"./types\";\n\nexport class SourceReferenceCollection extends BaseCollection<SourceReferenceModel> {\n constructor(sourceReference?: SourceReferenceData[], entryDate?: ISO_DATE) {\n super();\n\n this.collection = this.createSourceReferences(\n sourceReference || [],\n entryDate,\n );\n }\n\n private createSourceReferences(\n sourceReference: SourceReferenceData[],\n entryDate?: ISO_DATE,\n ) {\n return sourceReference.map(\n (sourceReference) => new SourceReferenceModel(sourceReference, entryDate),\n );\n }\n\n byTypes(types: string) {\n return this.filter((sourceRef) => types.includes(sourceRef.type));\n }\n}\n","import { TIMEVERSION_FILTER_NAME } from \"../../constants/Constants\";\nimport { ResourceModel } from \"../base/ResourceModel\";\nimport { ConceptRelationCollection } from \"./ConceptRelationCollection\";\nimport { ConceptTypeDetailModel } from \"./ConceptTypeDetailModel\";\nimport { SourceReferenceCollection } from \"./SourceReferenceCollection\";\n\nimport type { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport type { ISO_DATE } from \"../../types/types\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ModelWithChildModels } from \"../types\";\nimport type {\n ConceptDetailData,\n LabelData,\n PropertyData,\n SourceReferenceData,\n TaxonomyType,\n TextFragmentData,\n} from \"./types\";\n\n/**\n * Model for concept details, available through modelcatalog\n */\nexport class ConceptDetailModel extends ResourceModel<ConceptDetailData> {\n private _conceptType: ConceptTypeDetailModel | undefined;\n private _relations: ConceptRelationCollection;\n private _sourceReferences: SourceReferenceCollection | undefined;\n\n constructor(modularuiResponse: ModularUIResponse) {\n super(modularuiResponse);\n\n this._relations = new ConceptRelationCollection(\n this.data.relations,\n this.entryDate,\n this.modelOptions,\n );\n }\n\n get type() {\n return \"ConceptDetail\";\n }\n\n static override get modelName() {\n return \"ConceptDetailModel\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n return data.resourcetype === \"ConceptDetail\";\n }\n\n override getInitialChildModelLinks() {\n const conceptTypeLink = this.links.getLinkByKey(\"concepttype\");\n const relationsCollectionLinks =\n this.relationsCollection.getInitialChildModelLinks();\n\n if (conceptTypeLink) {\n conceptTypeLink.isCacheable = true;\n return [conceptTypeLink, ...relationsCollectionLinks];\n }\n\n return relationsCollectionLinks;\n }\n\n override setChildModels(\n models: ModelWithChildModels[],\n errors: ErrorResponse[],\n ) {\n const conceptTypeModel = models.find(\n (model) => model instanceof ConceptTypeDetailModel,\n );\n\n if (conceptTypeModel instanceof ConceptTypeDetailModel) {\n this.conceptType = conceptTypeModel;\n }\n\n this.relationsCollection.setChildModels(models, errors);\n }\n\n /**\n * Retrieve concept detail identifier as key for this model\n */\n override get key() {\n return this.getDataAsString(\"_id\", \"concept\");\n }\n\n /**\n * Getting the self link of this Concept\n */\n override get selfhref() {\n const { href } = this.selflink;\n\n if (this.entryDate) {\n href.setParameter(TIMEVERSION_FILTER_NAME, this.entryDate);\n } else {\n href.removeParameter(TIMEVERSION_FILTER_NAME);\n }\n\n return href;\n }\n\n /**\n * Available diagrams for the concept, most of the time just one\n */\n get diagramLinks() {\n return this.links.getLinksByGroup(\"diagram\");\n }\n\n /**\n * Get conceptType of concept\n */\n get conceptType() {\n return this._conceptType;\n }\n\n set conceptType(conceptType) {\n this._conceptType = conceptType;\n }\n\n /**\n * Get concept label\n */\n override get label() {\n return this.getDataAsString(\"conceptLabel\", \"\");\n }\n\n /**\n * Get model category of the concept\n */\n get modelCategory() {\n return this.getDataAsString(\"modelCategory\", \"\");\n }\n\n /**\n * Get taxonomy type\n */\n get taxonomyType() {\n return this.getDataAsString(\"taxonomyType\") as TaxonomyType | undefined;\n }\n\n /**\n * Get concept relations collection\n */\n get relationsCollection() {\n return this._relations;\n }\n\n /**\n * Get concept formula\n */\n get formula() {\n return this.getDataAsString(\"formula\");\n }\n\n /**\n * Get additional labels of concept\n */\n get labels() {\n if (this.conceptType?.labelTypes) {\n const labels = this.getDataAsArray(\"labels\", []) as LabelData[];\n\n return this.conceptType.labelTypes.map((labelType) => {\n const labelData = labels.find((l) => l.type === labelType._id);\n\n return {\n ...labelType,\n ...labelData,\n };\n });\n }\n\n return [];\n }\n\n /**\n * Get label elements by id\n */\n getLabelElementByIds(ids: string[]) {\n return this.labels.filter((label) => ids.includes(label._id));\n }\n\n /**\n * Get concept properties\n */\n get conceptProperties() {\n if (this.conceptType?.propertyTypes) {\n const properties = this.getDataAsArray(\n \"properties\",\n [],\n ) as PropertyData[];\n\n return this.conceptType.propertyTypes.map((propertyType) => {\n const setting = properties.find(\n (property) => property.type === propertyType._id,\n );\n\n return {\n ...propertyType,\n ...setting,\n };\n });\n }\n\n return [];\n }\n\n /**\n * Get concept properties by id\n */\n getConceptPropertiesByIds(ids: string[]) {\n return this.conceptProperties.filter((property) =>\n ids.includes(property._id),\n );\n }\n\n /**\n * Get Text fragments\n */\n get textfragments() {\n const textFragments = this.getDataAsArray(\n \"textFragments\",\n [],\n ) as TextFragmentData[];\n\n const configuredTextFragments = textFragments.map((textFragment) => {\n const textFragmentConfig = this.conceptType?.textFragmentTypes.find(\n (textFragmentType) => textFragment.type === textFragmentType._id,\n );\n\n return {\n ...textFragmentConfig,\n ...textFragment,\n };\n });\n\n const notConfiguredTextFragments = this.conceptType?.textFragmentTypes\n ? this.conceptType.textFragmentTypes.filter((textFragmentType) => {\n return !textFragments.some(\n (textfragment) => textfragment.type === textFragmentType._id,\n );\n })\n : [];\n\n return [...configuredTextFragments, ...notConfiguredTextFragments];\n }\n\n /**\n * Get text fragments by id\n */\n getTextFragmentByKeys(keys: string[]) {\n return this.textfragments.filter(\n (textfragment) =>\n \"type\" in textfragment &&\n typeof textfragment.type === \"string\" &&\n keys.includes(textfragment.type),\n );\n }\n\n /**\n * Get source reference collection\n */\n getSourceReferenceCollection(availableLocales: string[] = []) {\n if (!this._sourceReferences) {\n this._sourceReferences = new SourceReferenceCollection(\n this.getSourceReferencesForCurrentLanguage(availableLocales),\n this.entryDate,\n );\n }\n\n return this._sourceReferences;\n }\n\n /*\n * Retrieve all sourceReferenceTypes that are valid for the current language\n * Used by sourceRef collection\n */\n getSourceReferencesForCurrentLanguage(availableLocales: string[]) {\n const sourceReferences = this.getDataAsArray(\n \"sourceReferences\",\n [],\n ) as SourceReferenceData[];\n if (sourceReferences.length === 0) {\n return [];\n }\n\n const LANGUAGE_POSTFIX_LENGTH = 3;\n const availableLanguagesInSourceReferences = sourceReferences.map(\n (sourceReference) =>\n sourceReference.type.substring(\n sourceReference.type.length - LANGUAGE_POSTFIX_LENGTH,\n ),\n );\n\n const currentLanguagePostfix = `_${this.locale}`;\n\n if (availableLanguagesInSourceReferences.includes(currentLanguagePostfix)) {\n // return all sourceReferences that end with language that is selected\n return sourceReferences.filter((sourceReference) =>\n sourceReference.type.endsWith(currentLanguagePostfix),\n );\n }\n\n const availableLanguages = availableLocales.map(\n (locale) => `_${locale.split(\"-\")[0]}`,\n );\n\n // return all sourceReferences that do not end with language postfix\n return sourceReferences.filter((sourceReference) => {\n const lang = sourceReference.type.substring(\n sourceReference.type.length - LANGUAGE_POSTFIX_LENGTH,\n );\n return !availableLanguages.includes(lang);\n });\n }\n /**\n * Retrieve entrydate of content toc\n */\n get entryDate() {\n return this.getDataAsString(\n `filter.${TIMEVERSION_FILTER_NAME}.value`,\n ) as ISO_DATE;\n }\n\n /**\n * Indicates if the given concept type id or href exists in the hierarchy of concept types for this concept\n */\n isOfConceptType(conceptTypeId: string) {\n return this.conceptType?.isOfConceptType(conceptTypeId) ?? false;\n }\n}\n","import { immerable } from \"immer\";\n\nimport { LayoutHintCollection } from \"../layouthint/LayoutHintCollection\";\n\nimport type { MessageParameters } from \"../../types/types\";\n\nexport class ErrorModel {\n [immerable] = true;\n\n private _id: string;\n private _defaultMessage: string | undefined;\n private _parameters: MessageParameters | undefined;\n private _isClientConstraint: boolean;\n private _layouthint: LayoutHintCollection;\n\n constructor(\n id: string,\n defaultMessage?: string,\n parameters?: MessageParameters,\n isClientConstraint = false,\n layouthint: string[] | LayoutHintCollection = new LayoutHintCollection(),\n ) {\n this._id = id;\n this._parameters = parameters;\n this._defaultMessage = defaultMessage;\n this._isClientConstraint = isClientConstraint;\n this._layouthint = Array.isArray(layouthint)\n ? new LayoutHintCollection(layouthint)\n : layouthint;\n }\n\n /**\n * Get id of error\n */\n get id(): string {\n return this._id;\n }\n\n get defaultMessage() {\n return this._defaultMessage;\n }\n\n get parameters() {\n return this._parameters;\n }\n\n get isClientConstraint() {\n return this._isClientConstraint ?? false;\n }\n\n get layouthint() {\n return this._layouthint;\n }\n\n get isMandatoryConstraint() {\n return this.id === \"Constraint.Mandatory\";\n }\n\n /**\n * Returns a message object from the error\n */\n getMessage() {\n return {\n id: this.id,\n defaultMessage: this.defaultMessage ?? \"\",\n parameters: this.parameters ?? {},\n };\n }\n}\n","import { BaseCollection } from \"../base/BaseCollection\";\nimport { ErrorModel } from \"./ErrorModel\";\n\nimport type { MessageParameters } from \"../../types/types\";\nimport type { ConstraintModel } from \"../attributes/types\";\nimport type { LayoutHintCollection } from \"../layouthint/LayoutHintCollection\";\n\nexport enum ErrorCollectionType {\n FORM,\n FORMOBJECT,\n ATTRIBUTE,\n COMPOSITE_CHILDREN,\n}\n\nexport class ErrorCollection extends BaseCollection<ErrorModel> {\n private _type: string | ErrorCollectionType | undefined;\n\n constructor(\n type?: string | ErrorCollectionType,\n errorCollection?: ErrorCollection,\n ) {\n super();\n\n this._type = type;\n this.collection = [];\n\n if (errorCollection) {\n this.collection = [...errorCollection.collection];\n }\n }\n\n get type(): string | ErrorCollectionType | undefined {\n return this._type;\n }\n\n get serverErrors() {\n return this.collection.filter((error) => !error.isClientConstraint);\n }\n\n findById(id: string) {\n return this.collection.findIndex((item) => item.id === id);\n }\n\n /**\n * Add an error to the collection\n */\n addError(\n id: string,\n defaultMessage?: string,\n parameters?: MessageParameters,\n layouthint?: string[] | LayoutHintCollection,\n ) {\n const itemIdx = this.findById(id);\n\n if (itemIdx > -1) {\n this.removeByIndex(itemIdx);\n }\n\n this.add(new ErrorModel(id, defaultMessage, parameters, false, layouthint));\n }\n\n removeError(id: string) {\n const itemIdx = this.findById(id);\n this.removeByIndex(itemIdx);\n }\n\n /**\n * Add a server error to the collection\n */\n addServerError(\n id: string,\n defaultMessage?: string,\n parameters?: MessageParameters,\n layouthint?: string[] | LayoutHintCollection,\n ) {\n if (parameters) {\n this.addError(id, defaultMessage, parameters, layouthint);\n } else {\n this.addError(id, defaultMessage, undefined, layouthint);\n }\n }\n\n removeServerError(id: string) {\n this.removeError(id);\n }\n\n removeServerErrors() {\n this.serverErrors.forEach((error) => {\n this.removeError(error.id);\n });\n }\n\n addErrors(errors: ErrorModel[]) {\n this.collection = [...this.collection, ...errors];\n }\n\n /**\n * Add constraints to error collection\n */\n addConstraints(constraints: ConstraintModel[]) {\n this.collection = [\n ...this.collection,\n ...constraints.map(\n (constraint) =>\n new ErrorModel(\n constraint.id,\n constraint.defaultMessage,\n constraint.parameters as MessageParameters,\n true,\n ),\n ),\n ];\n }\n\n /**\n * Indicates if a mandatory constraint is available and if it is in error.\n * Rationale: When a mandatory constraint is in error other constraint probably don't mather because there is no value to check\n */\n hasMandatoryError() {\n return this.collection.some((error) => error.isMandatoryConstraint);\n }\n}\n","import { createHashFromHref } from \"../../utils/helpers/createHash\";\nimport { retrieveText } from \"../../utils/helpers/text\";\nimport { BaseModel } from \"../base/BaseModel\";\nimport { LinkCollection } from \"../links/LinkCollection\";\n\nimport type { ISO_DATE } from \"../../types/types\";\nimport type { ModelOptions } from \"../types\";\nimport type { SubSectionData } from \"./types\";\n\n/**\n * Link to a concept\n */\nexport class SubSectionModel extends BaseModel<SubSectionData> {\n private _entryDate: ISO_DATE | undefined;\n private _links: LinkCollection;\n\n constructor(\n data: SubSectionData,\n entryDate: ISO_DATE | undefined,\n modelOptions?: ModelOptions,\n ) {\n super(data, {}, modelOptions);\n\n this._entryDate = entryDate;\n this._links = LinkCollection.create(\n this.data,\n this.contributions,\n \"subsection\",\n this.modelOptions,\n );\n }\n\n get referred() {\n return this.getDataAsBoolean(\"referred\", false);\n }\n\n get id() {\n if (\"id\" in this.data) {\n return this.getDataAsString(\"id\");\n }\n return this.getDataAsString(\"_id\");\n }\n\n /**\n * Retrieve key of subsection\n */\n get key() {\n return this.id;\n }\n\n /**\n * Retrieve html body\n */\n get body() {\n return retrieveText(this.data.body);\n }\n\n /**\n * Retrieve number of section\n */\n get number() {\n return this.getDataAsString(\"number\");\n }\n\n /**\n * Retrieve label of section\n */\n get label() {\n return this.getDataAsString(\"label\", \"\");\n }\n\n /**\n * Get sub sections\n */\n get subSections() {\n return this.data.subSections\n ? this.data.subSections.map(\n (subSection) =>\n new SubSectionModel(subSection, this.entryDate, this.modelOptions),\n )\n : [];\n }\n\n /**\n * Retrieve links of section\n */\n get links() {\n return this._links;\n }\n\n /**\n * Get self link of model\n */\n get selflink() {\n return this.links.getLinkByKey(\"self\");\n }\n\n /**\n * Return default self link of resource\n */\n get selfhref() {\n return this.selflink?.href;\n }\n\n get entryDate() {\n return this._entryDate;\n }\n\n get relatedConceptsHrefs() {\n const hrefs = [];\n if (this.relatedConceptsHref) {\n hrefs.push(this.relatedConceptsHref);\n }\n\n this.subSections.forEach((subSection) => {\n hrefs.push(...subSection.relatedConceptsHrefs);\n });\n\n return hrefs;\n }\n\n /**\n * Get related concepts link\n */\n get relatedConceptsHref() {\n const relatedConceptsLink = this.links.getLinkByKey(\"relatedConcepts\");\n\n if (relatedConceptsLink) {\n const { href } = relatedConceptsLink;\n\n if (href.hash.includes(\"/relatedConcepts\")) {\n const firstPart = href.path.substring(0, href.path.lastIndexOf(\"/\"));\n href.path = firstPart + \"/\" + href.hash;\n href.hash = href.hash.includes(\"#\")\n ? href.hash.substring(href.hash.indexOf(\"#\"))\n : \"\";\n }\n\n href.addParameter(\"entryDate\", this.entryDate);\n href.setReferenceHash(this.referenceHash);\n\n return href;\n }\n\n return undefined;\n }\n\n get referenceHash() {\n return createHashFromHref(this.selfhref);\n }\n\n getReferredSections(): SubSectionModel[] {\n const sections = [];\n\n for (const subSection of this.subSections) {\n if (subSection.referred) {\n sections.push(subSection);\n }\n\n const referredChilds = subSection.getReferredSections();\n sections.push(...referredChilds);\n }\n\n return sections;\n }\n}\n","import { createHashFromHref } from \"../../utils/helpers/createHash\";\nimport { retrieveText } from \"../../utils/helpers/text\";\nimport { BaseModel } from \"../base/BaseModel\";\nimport { LinkModel } from \"../links/LinkModel\";\nimport { ContentLinkModel } from \"./ContentLinkModel\";\nimport { SubSectionModel } from \"./SubSectionModel\";\n\nimport type { ISO_DATE } from \"../../types/types\";\nimport type { ModelOptions } from \"../types\";\nimport type { SectionData } from \"./types\";\n\nexport class SectionModel extends BaseModel<SectionData> {\n private _entryDate: ISO_DATE | undefined;\n private _selflink: LinkModel | undefined;\n private _childSections: SectionModel[];\n\n constructor(\n data: SectionData,\n entryDate?: ISO_DATE,\n modelOptions?: ModelOptions,\n ) {\n super(data, {}, modelOptions);\n\n this._entryDate = entryDate;\n this._selflink = this.createSelfLink();\n this._childSections = this.createChildSections();\n }\n\n get referred() {\n return this.getDataAsBoolean(\"referred\", false);\n }\n\n get selflink() {\n return this._selflink;\n }\n\n createSelfLink() {\n const selflink = this.getDataAsString(\"_links.self.href\");\n if (typeof selflink !== \"undefined\") {\n return LinkModel.create(\n this.key || \"unknown\",\n selflink,\n this.label,\n this.modelOptions,\n );\n }\n return;\n }\n\n get selfhref() {\n return this.selflink?.href;\n }\n\n get entryDate() {\n return this._entryDate;\n }\n\n get type() {\n return this.getDataAsString(\"type\");\n }\n\n get sourceLabel() {\n return this.getDataAsString(\"sourceLabel\");\n }\n\n get id() {\n const id = this.getDataAsString(\"id\");\n if (id) {\n return id;\n }\n return this.getDataAsString(\"_id\", \"unknown\");\n }\n\n get key() {\n return this.id;\n }\n\n /**\n * Get content label\n */\n get label() {\n return this.getDataAsString(\"label\", \"\");\n }\n\n /**\n * Retrieve number of section\n */\n get number() {\n return this.getDataAsString(\"number\");\n }\n\n /**\n * Get content body\n */\n get body() {\n const body = this.data.body;\n\n if (body) {\n return retrieveText(body as string);\n }\n\n return;\n }\n\n /**\n * Retrieve child section links\n */\n get childSectionLinks(): ContentLinkModel[] {\n let sections: SectionData[] = [];\n if (this.data.childSections) {\n sections = this.data.childSections as SectionData[];\n } else if (this.data.sections) {\n sections = this.data.sections;\n }\n\n return sections.map((section) => {\n const id = section.id || section._id;\n const _links = section._links as {\n self: { href: string };\n contenttype: { href: string };\n };\n\n return new ContentLinkModel(\n {\n section: id as string,\n _id: id as string,\n label: section.label,\n sourceLabel: section.sourceLabel as string,\n _links,\n },\n this.entryDate,\n this.modelOptions,\n );\n });\n }\n\n get selfContentLink() {\n const _links = this.data._links as {\n self: { href: string };\n contenttype: { href: string };\n };\n\n return new ContentLinkModel(\n {\n section: this.id,\n _id: this.id,\n label: this.label,\n sourceLabel: this.sourceLabel,\n _links,\n },\n this.entryDate,\n this.modelOptions,\n );\n }\n\n private createChildSections() {\n let sections: SectionData[] = [];\n if (this.data.childSections) {\n sections = this.data.childSections as SectionData[];\n } else if (this.data.sections) {\n sections = this.data.sections;\n }\n\n return sections\n .filter((childSection) => \"body\" in childSection)\n .map(\n (childSection) =>\n new SectionModel(childSection, this.entryDate, this.modelOptions),\n );\n }\n\n /**\n * Get tree of child sections\n */\n get childSections() {\n return this._childSections;\n }\n\n /**\n * set resolved child sections\n */\n set childSections(sections: SectionModel[]) {\n this._childSections = sections || [];\n }\n\n get sections() {\n if (this.data.sections) {\n return this.data.sections.map(\n (section) =>\n new SectionModel(section, this.entryDate, this.modelOptions),\n );\n }\n return [];\n }\n\n /**\n * Get sub sections\n */\n get subSections() {\n return Array.isArray(this.data.subSections)\n ? this.data.subSections.map(\n (subSection) =>\n new SubSectionModel(subSection, this.entryDate, this.modelOptions),\n )\n : [];\n }\n\n get referenceHash() {\n return createHashFromHref(this.selfhref);\n }\n\n getReferredSections(): (SubSectionModel | SectionModel)[] {\n const sections = [];\n\n for (const subSection of this.subSections) {\n if (subSection.referred) {\n sections.push(subSection);\n }\n\n const referredChilds = subSection.getReferredSections();\n sections.push(...referredChilds);\n }\n\n for (const childSection of this.childSections) {\n if (childSection.referred) {\n sections.push(childSection);\n }\n\n const referredChilds = childSection.getReferredSections();\n sections.push(...referredChilds);\n }\n\n return sections;\n }\n}\n","import { immerable } from \"immer\";\n\nimport { hasAllContentInData } from \"../../settings/Settings\";\nimport { retrieveText } from \"../../utils/helpers/text\";\nimport { SectionModel } from \"../content/SectionModel\";\nimport { LayoutHintCollection } from \"../layouthint/LayoutHintCollection\";\n\nimport type {\n AttributeContentElement,\n AttributePropertyElement,\n AttributeTextFragmentElement,\n ContentData,\n} from \"./types\";\n\ninterface MappedContentElement {\n contentElement: {\n label: string;\n layouthint: LayoutHintCollection;\n sections: SectionModel[];\n };\n}\n\nexport class AttributeContent {\n [immerable] = true;\n private _content: ContentData | undefined;\n\n constructor(content?: ContentData) {\n this._content = content;\n }\n\n static create(content: unknown) {\n if (\n typeof content === \"object\" &&\n content !== null &&\n \"elements\" in content &&\n Array.isArray(content.elements)\n ) {\n return new AttributeContent(content as ContentData);\n }\n return new AttributeContent();\n }\n\n get fromData() {\n return hasAllContentInData();\n }\n\n get header() {\n let headerLabel = null;\n let headerDescription = null;\n\n const label = this._content?.header?.label;\n if (label) {\n headerLabel = label;\n }\n\n const description = this._content?.header?.description;\n if (description) {\n if (typeof description === \"object\" && \"message\" in description) {\n headerDescription = description.message;\n } else if (typeof description === \"string\") {\n headerDescription = description;\n }\n }\n\n return { label: headerLabel, description: headerDescription };\n }\n\n mapToPropertyElement(element: AttributePropertyElement) {\n const contentElement = element.propertyElement;\n return {\n propertyElement: {\n label: contentElement.label,\n layouthint: new LayoutHintCollection(contentElement.layouthint),\n properties:\n \"properties\" in contentElement ? contentElement.properties : [],\n },\n };\n }\n\n mapToTextFragmentElement(element: AttributeTextFragmentElement) {\n const contentElement = element.textFragmentElement;\n return {\n textFragmentElement: {\n label: contentElement.label,\n layouthint: new LayoutHintCollection(contentElement.layouthint),\n textfragments:\n \"textfragments\" in contentElement\n ? contentElement.textfragments.map((textfragment) => {\n return typeof textfragment === \"object\"\n ? {\n ...textfragment,\n text: retrieveText(textfragment.text) || \"\",\n }\n : textfragment;\n })\n : [],\n },\n };\n }\n\n mapToContentElement(element: AttributeContentElement) {\n const contentElement = element.contentElement;\n return {\n contentElement: {\n label: contentElement.label,\n layouthint: new LayoutHintCollection(contentElement.layouthint),\n sections:\n \"sections\" in contentElement\n ? contentElement.sections.map(\n (section) => new SectionModel(section),\n )\n : [],\n },\n };\n }\n\n get elements() {\n if (Array.isArray(this._content?.elements)) {\n return this._content.elements\n .filter((element) => element != undefined)\n .map((element) => {\n const key = Object.keys(element)[0];\n switch (key) {\n case \"propertyElement\":\n return this.mapToPropertyElement(\n element as AttributePropertyElement,\n );\n case \"textFragmentElement\":\n return this.mapToTextFragmentElement(\n element as AttributeTextFragmentElement,\n );\n case \"contentElement\":\n return this.mapToContentElement(\n element as AttributeContentElement,\n );\n default:\n return element;\n }\n });\n }\n return [];\n }\n\n get label() {\n return this._content?.label;\n }\n\n get properties() {\n return this.elements\n .filter((element) => {\n const key = Object.keys(element)[0];\n return key === \"propertyElement\";\n })\n .map((element) => {\n const { propertyElement } = element as AttributePropertyElement;\n if (\"properties\" in propertyElement) {\n return propertyElement.properties;\n }\n return [];\n })\n .flat();\n }\n\n /**\n * Get concept properties by property element label\n */\n getConceptPropertiesByLabels(labels: string[] | string) {\n return this.elements\n .filter((element) => {\n const key = Object.keys(element)[0];\n return key === \"propertyElement\";\n })\n .map((element) => (element as AttributePropertyElement).propertyElement)\n .filter((element) => {\n if (Array.isArray(labels)) {\n return labels.includes(element.label);\n }\n return labels === element.label;\n })\n .map((element) => (\"properties\" in element ? element.properties : []))\n .flat();\n }\n\n get textfragments() {\n return this.elements\n .filter((element) => {\n const key = Object.keys(element)[0];\n return key === \"textFragmentElement\";\n })\n .map((element) => {\n const { textFragmentElement } = element as AttributeTextFragmentElement;\n if (\"textfragments\" in textFragmentElement) {\n return textFragmentElement.textfragments;\n }\n return [];\n })\n .flat();\n }\n\n /**\n * Get concept text fragments by text fragment element label\n */\n getTextFragmentsByLabels(labels: string[] | string) {\n return this.elements\n .filter((element) => {\n const key = Object.keys(element)[0];\n return key === \"textFragmentElement\";\n })\n .map(\n (element) =>\n (element as AttributeTextFragmentElement).textFragmentElement,\n )\n .filter((element) => {\n if (Array.isArray(labels)) {\n return labels.includes(element.label);\n }\n return labels === element.label;\n })\n .map((element) =>\n \"textfragments\" in element ? element.textfragments : [],\n )\n .flat();\n }\n\n get sections() {\n return this.elements\n .filter((element) => {\n const key = Object.keys(element)[0];\n return key === \"contentElement\";\n })\n .map(\n (element) => (element as MappedContentElement).contentElement.sections,\n )\n .flat();\n }\n\n getSectionsByType(types: string[] | string) {\n return this.sections.filter((section) => {\n const sectionType = section.type;\n if (!sectionType) {\n return false;\n }\n return Array.isArray(types)\n ? types.includes(sectionType)\n : types === sectionType;\n });\n }\n\n /**\n * Get concept text fragments by text fragment element label\n */\n getSectionsByLabels(labels: string[] | string) {\n return this.elements\n .filter((element) => {\n const key = Object.keys(element)[0];\n return key === \"contentElement\";\n })\n .map((element) => (element as MappedContentElement).contentElement)\n .filter((element) => {\n if (Array.isArray(labels)) {\n return labels.includes(element.label);\n }\n return labels === element.label;\n })\n .map((element) => element.sections)\n .flat();\n }\n\n getReferredSections() {\n const referredSections = [];\n\n for (const section of this.sections) {\n referredSections.push(...section.getReferredSections());\n }\n\n return referredSections;\n }\n}\n","import { getBooleanSetting } from \"../../../settings/Settings\";\n\nimport type { ConstraintModel, MaybeAttributeValue } from \"../types\";\n\nexport class GenericConstraintModel implements ConstraintModel {\n private _id: string;\n private _validateMethod:\n | ((value: MaybeAttributeValue) => boolean)\n | undefined;\n private _defaultMessage: string | undefined;\n private _parameters: object | undefined;\n private _useClientsideValidation: boolean;\n\n constructor(\n id: string,\n validateMethod?: ((value: MaybeAttributeValue) => boolean) | undefined,\n defaultMessage?: string,\n parameters?: object,\n useClientsideValidation: boolean = getBooleanSetting(\n \"USE_CLIENTSIDE_VALIDATION\",\n ),\n ) {\n this._id = id;\n this._validateMethod = validateMethod;\n this._defaultMessage = defaultMessage;\n this._parameters = parameters;\n this._useClientsideValidation = useClientsideValidation;\n }\n\n /**\n * Retreive type of constraint\n */\n get id() {\n return this._id;\n }\n\n get defaultMessage() {\n return this._defaultMessage || \"Missing default message\";\n }\n\n /**\n * Returns available data for constraint\n */\n get parameters() {\n return this._parameters;\n }\n\n /**\n * Inidicates if validation message is present\n */\n hasValidation() {\n return this._validateMethod != null;\n }\n\n /**\n * Validate constraint with value\n */\n validate(value: MaybeAttributeValue) {\n const validateMethod = this._validateMethod;\n\n if (this._useClientsideValidation && validateMethod) {\n return validateMethod(value);\n }\n\n return true;\n }\n\n get isMandatoryConstraint() {\n return this._id === \"mandatory\" || this._id === \"Constraint.Mandatory\";\n }\n}\n","import { getBooleanSetting } from \"../../../settings/Settings\";\nimport { BaseCollection } from \"../../base/BaseCollection\";\nimport { GenericConstraintModel } from \"./GenericConstraintModel\";\n\nimport type { ConstraintModel, MaybeAttributeValue } from \"../types\";\n\n/**\n * Attribute constraints\n */\nexport class ConstraintCollection extends BaseCollection<ConstraintModel> {\n addConstraint(\n id: string,\n validateMethod: ((value: MaybeAttributeValue) => boolean) | undefined,\n defaultMessage: string,\n data: object = {},\n useClientsideValidation: boolean = getBooleanSetting(\n \"USE_CLIENTSIDE_VALIDATION\",\n ),\n ) {\n this.add(\n new GenericConstraintModel(\n id,\n validateMethod,\n defaultMessage,\n data,\n useClientsideValidation,\n ),\n );\n }\n\n /**\n * Validate if complete collection is valid\n */\n validate(value: MaybeAttributeValue) {\n return (\n this.isEmpty() ||\n this.collection.every((constraint) => constraint.validate(value))\n );\n }\n\n /**\n * Indicates if a mandatory constraint exists in the collection\n */\n hasMandatoryConstraint() {\n return this.collection.some(\n (constraint) => constraint.isMandatoryConstraint,\n );\n }\n\n /**\n * Retrieve all invalid constraints\n */\n invalidConstraints(value: MaybeAttributeValue) {\n if (value === \"\" && !this.hasMandatoryConstraint()) {\n return [];\n }\n\n return this.collection.filter((constraint) => !constraint.validate(value));\n }\n}\n","import type { ConstraintModel, MaybeAttributeValue } from \"../types\";\n\nexport class MandatoryConstraint implements ConstraintModel {\n get id() {\n return \"Constraint.Mandatory\";\n }\n\n hasValidation() {\n return true;\n }\n\n get defaultMessage() {\n return \"Field is mandatory\";\n }\n\n get parameters() {\n return {};\n }\n\n validate(value: MaybeAttributeValue) {\n if (value == null) {\n return false;\n }\n\n if (typeof value !== \"string\") {\n throw new TypeError(\n `isNotEmptyString: Not comparing to string: ${typeof value}`,\n );\n }\n\n return value !== \"\";\n }\n\n get isMandatoryConstraint() {\n return true;\n }\n}\n","import type { ConstraintModel } from \"../types\";\n\nconst INVALID_LENGTH_ID = \"Constraint.InvalidLengthExact\";\nconst INVALID_LENGTH_BETWEEN_ID = \"Constraint.InvalidLengthBetween\";\nconst INVALID_LENGTH_TOO_SHORT_ID = \"Constraint.InvalidLengthTooShort\";\nconst INVALID_LENGTH_TOO_LONG_ID = \"Constraint.InvalidLengthTooLong\";\n\nexport class StringLengthConstraint implements ConstraintModel {\n private _minLength: number | null | undefined;\n private _maxLength: number | null | undefined;\n\n constructor(minLength?: number | null, maxLength?: number | null) {\n this._minLength = minLength;\n this._maxLength = maxLength;\n }\n\n get id(): string {\n if (this.minLength && this.maxLength && this.minLength === this.maxLength) {\n return INVALID_LENGTH_ID;\n } else if (this.minLength && this.maxLength) {\n return INVALID_LENGTH_BETWEEN_ID;\n } else if (this.minLength) {\n return INVALID_LENGTH_TOO_SHORT_ID;\n } else if (this.maxLength) {\n return INVALID_LENGTH_TOO_LONG_ID;\n }\n\n return \"Constraint.NoLengthConstraint\";\n }\n\n get minLength() {\n return this._minLength;\n }\n\n get maxLength() {\n return this._maxLength;\n }\n\n hasValidation() {\n return true;\n }\n\n isExactLength(value: string) {\n if (typeof value !== \"string\") {\n throw new TypeError(\"isExactLength: Not comparing to string\");\n }\n\n if (this.minLength == undefined) {\n throw new Error(\"isExactLength: Min and max length not set\");\n }\n\n return value.length === this.minLength;\n }\n\n isBetween(value: string) {\n if (typeof value !== \"string\") {\n throw new TypeError(\"isBetween: Not comparing to string\");\n }\n\n if (this.minLength == undefined || this.maxLength == undefined) {\n throw new Error(\"isBetween: Min or max length not set\");\n }\n\n return this.isLongEnough(value) && this.isSmallEnough(value);\n }\n\n isLongEnough(value: string) {\n if (typeof value !== \"string\") {\n throw new TypeError(\"isLongEnough: Not comparing to string\");\n }\n\n if (!this.minLength) {\n throw new Error(\"isLongEnough: Min length not set\");\n }\n\n return value.length >= this.minLength;\n }\n\n isSmallEnough(value: string) {\n if (typeof value !== \"string\") {\n throw new TypeError(\"isSmallEnough: Not comparing to string\");\n }\n\n if (!this.maxLength) {\n throw new Error(\"isSmallEnough: Max length not set\");\n }\n\n return value.length <= this.maxLength;\n }\n\n get defaultMessage() {\n switch (this.id) {\n case INVALID_LENGTH_ID:\n return \"Length must be precisely ${length} characters\"; // NOSONAR\n case INVALID_LENGTH_BETWEEN_ID:\n return \"Length must be between ${min-length} and ${max-length} characters\"; // NOSONAR\n case INVALID_LENGTH_TOO_SHORT_ID:\n return \"The length of the value must be larger than ${min-length}\"; // NOSONAR\n case INVALID_LENGTH_TOO_LONG_ID:\n return \"The length of the value must be smaller than ${max-length}\"; // NOSONAR\n default:\n return \"\";\n }\n }\n\n get parameters() {\n switch (this.id) {\n case INVALID_LENGTH_ID:\n return {\n length: this.minLength,\n };\n case INVALID_LENGTH_BETWEEN_ID:\n return {\n \"min-length\": this.minLength,\n \"max-length\": this.maxLength,\n };\n case INVALID_LENGTH_TOO_SHORT_ID:\n return {\n \"min-length\": this.minLength,\n };\n case INVALID_LENGTH_TOO_LONG_ID:\n return {\n \"max-length\": this.maxLength,\n };\n default:\n return {};\n }\n }\n\n validate(value: string) {\n switch (this.id) {\n case INVALID_LENGTH_ID:\n return this.isExactLength(value);\n case INVALID_LENGTH_BETWEEN_ID:\n return this.isBetween(value);\n case INVALID_LENGTH_TOO_SHORT_ID:\n return this.isLongEnough(value);\n case INVALID_LENGTH_TOO_LONG_ID:\n return this.isSmallEnough(value);\n default:\n return true;\n }\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import {\n ATTRIBUTE_WIDTH,\n TIMEVERSION_FILTER_NAME,\n} from \"../../constants/Constants\";\nimport { IllegalArgumentException } from \"../../exceptions/IllegalArgumentException\";\nimport { DISABLED, MANDATORY } from \"../../layouthints/LayoutHints\";\nimport {\n getBooleanSetting,\n hasAllContentInData,\n} from \"../../settings/Settings\";\nimport { DateUtil } from \"../../utils/datetime/DateTimeUtil\";\nimport { BaseModel } from \"../base/BaseModel\";\nimport { ConceptDetailModel } from \"../concepts/ConceptDetailModel\";\nimport { ErrorCollection, ErrorCollectionType } from \"../error/ErrorCollection\";\nimport { LinkCollection } from \"../links/LinkCollection\";\nimport { AttributeContent } from \"./AttributeContent\";\nimport { ConstraintCollection } from \"./input-constraints/ConstraintCollection\";\nimport { MandatoryConstraint } from \"./input-constraints/MandatoryConstraint\";\nimport { StringLengthConstraint } from \"./input-constraints/StringLengthConstraint\";\n\nimport type {\n ErrorMessage,\n ISO_DATE,\n MessageParameters,\n} from \"../../types/types\";\nimport type { ContentConfiguration } from \"../contentconfiguration/ContentConfiguration\";\nimport type { ContentConfigurationElements } from \"../contentconfiguration/ContentConfigurationElements\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ErrorObjectData } from \"../form/types\";\nimport type { ModelOptions, ModelWithChildModels } from \"../types\";\nimport type { AttributeCollection } from \"./AttributeCollection\";\nimport type { ATTRIBUTE_TYPE } from \"./constants\";\nimport type { LayoutHintRuleCollection } from \"./layouthint-rules/LayoutHintRuleCollection\";\nimport type {\n AttributeContributions,\n AttributeData,\n AttributeModel,\n BaseAttributeContributions,\n ContentData,\n MaybeAttributeValue,\n} from \"./types\";\n\nexport abstract class BaseAttributeModel<\n C extends BaseAttributeContributions = BaseAttributeContributions,\n> extends BaseModel<AttributeData, C> {\n private _label: string;\n private _links: LinkCollection;\n private _parentKey: string | undefined;\n\n private _hasContentConfiguration = false;\n private _content: AttributeContent | undefined;\n\n private _concept: ConceptDetailModel | undefined;\n protected attributeReferenceDate: ISO_DATE;\n\n protected _lastModification = 0;\n\n private _initvalue: MaybeAttributeValue;\n private _value: MaybeAttributeValue;\n protected _inputvalue: MaybeAttributeValue;\n private _previouslyValidatedValue: MaybeAttributeValue;\n\n protected attributeErrors: ErrorCollection;\n private _serverConstraints: ConstraintCollection = new ConstraintCollection();\n private _useClientsideValidation: boolean = getBooleanSetting(\n \"USE_CLIENTSIDE_VALIDATION\",\n true,\n );\n protected _isValid = true;\n\n private _mandatory: boolean;\n private _readonly = false;\n private _disabled = false;\n protected _isResult: boolean;\n\n private _isHidden = false;\n private _isEditable = false;\n\n private _layoutHintRules?: LayoutHintRuleCollection;\n\n private _placeholder: string | undefined;\n\n constructor(\n data?: AttributeData,\n contributions?: C,\n modelOptions?: ModelOptions,\n ) {\n super(data, contributions as C, modelOptions);\n\n this.attributeReferenceDate = this.getDataAsString(\n \"referenceDate\",\n DateUtil.now(),\n );\n this._links = LinkCollection.create(\n this.data,\n this.contributions,\n \"attribute\",\n this.modelOptions,\n );\n\n this._content = this.createAttributeContent();\n this._label = this.createLabel();\n this._placeholder = this.getContributionAsString(\"placeholder\");\n\n this._initvalue = this.data.value;\n this._inputvalue = this.getInitialInputValue(this.data.value);\n this._value = this.data.value;\n\n this._isResult = this.getDataAsBoolean(\"isResult\", false);\n this._mandatory =\n this.layouthint.has(MANDATORY) ||\n this.getContributionAsBoolean(\"mandatory\", false);\n this._disabled = this.layouthint.has(DISABLED);\n\n this.attributeErrors = this.createErrorCollection(this.data.message);\n }\n\n /**\n * Abstract reset method which should be implemented on each attribute that has this attribute as a base class.\n * @abstract\n */\n abstract reset(): void;\n\n /**\n * Update method which should be implemented on each attribute that has this attribute as a base class.\n */\n abstract update(\n value: MaybeAttributeValue,\n changedAttribute?: AttributeModel,\n ): this;\n\n /**\n * updateByAttribute method which should be implemented on each attribute that has this attribute as a base class.\n */\n abstract updateByAttribute(otherAttribute: AttributeModel): void;\n\n private createLabel() {\n if (this.hasContentFromData() && this.content?.label) {\n this._label = this.content.label;\n }\n return this.getContributionAsString(\"label\", \"\");\n }\n\n private createErrorCollection(message: ErrorMessage | undefined) {\n const errorCollection = new ErrorCollection(ErrorCollectionType.ATTRIBUTE);\n if (typeof message === \"object\" && message != null) {\n errorCollection.addServerError(\n message.id,\n message.message,\n message.properties,\n message.layouthint,\n );\n }\n return errorCollection;\n }\n\n static isApplicableModel(contributions: AttributeContributions) {\n if (typeof contributions !== \"object\") {\n throw new IllegalArgumentException(\n \"Given argument for isApplicableModel is not a contributions object\",\n );\n }\n\n throw new Error(\"isApplicableModel must be implemented on an attribute\");\n }\n\n get key() {\n return this.getDataAsString(\"key\", \"unknown\");\n }\n\n get parentKey() {\n return this._parentKey || \"\";\n }\n\n set parentKey(parentKey) {\n this._parentKey = parentKey;\n }\n\n /**\n * Getting the attribute name\n */\n get name() {\n return this.key;\n }\n\n /**\n * Getting the type of the attribute\n */\n abstract get type(): ATTRIBUTE_TYPE;\n\n /**\n * Getting the label of the attribute\n */\n get label(): string {\n return this._label;\n }\n\n /**\n * Set the label of this attribute\n */\n set label(label: string) {\n this._label = label;\n }\n\n /**\n * Get placeholder text\n */\n get placeholder() {\n return this._placeholder;\n }\n\n /**\n * Set placeholder text\n */\n set placeholder(placeholder) {\n this._placeholder = placeholder;\n }\n\n /**\n * Indicate if attribute is editable\n */\n get isEditable() {\n return this._isEditable;\n }\n\n set isEditable(isEditable: boolean) {\n this._isEditable = isEditable;\n }\n\n /**\n * Indicates if the attribute is visible\n */\n get isVisible() {\n return !this._isHidden;\n }\n\n get isHidden() {\n return this._isHidden;\n }\n\n set isHidden(isHidden: boolean) {\n this._isHidden = isHidden;\n }\n\n /**\n * Explicitly toggle visibility of this attribute\n */\n show() {\n this.isHidden = false;\n }\n\n /**\n * Explicitly toggle visibility of this attribute\n */\n hide() {\n this.isHidden = true;\n }\n\n /**\n * LINKS\n */\n\n get links() {\n return this._links;\n }\n\n get downloadLink() {\n const downloadLink = this.links.getLinksByGroup(\"download\").first;\n\n if (downloadLink && downloadLink.key === this.key) {\n return downloadLink;\n }\n\n return undefined;\n }\n\n /**\n * CONCEPTS\n */\n\n getInitialChildModelLinks() {\n if (\n !this.hasContentFromData() &&\n this.hasContentConfiguration() &&\n this.conceptLink\n ) {\n return [this.conceptLink];\n }\n return [];\n }\n\n setChildModels(models: ModelWithChildModels[], _errors: ErrorResponse[]) {\n const conceptHref = this.conceptLink?.href;\n if (conceptHref) {\n const concept = models.find((model) => {\n if (model instanceof ConceptDetailModel) {\n return model.selfhref.equalsWithParameters(conceptHref);\n }\n return false;\n });\n\n this.concept = concept as ConceptDetailModel | undefined;\n }\n }\n\n /**\n * Retrieve concept link of attribute when available\n */\n get conceptLink() {\n const conceptLink = this.links.getLinkByKey(\"concept\");\n\n if (conceptLink) {\n conceptLink.href = conceptLink.href.addParameter(\n TIMEVERSION_FILTER_NAME,\n this.referenceDate,\n );\n\n conceptLink.isCacheable = true;\n }\n\n return conceptLink;\n }\n\n /**\n * Get concept information\n */\n get concept() {\n return this._concept;\n }\n\n /**\n * Set the concept\n */\n set concept(concept: ConceptDetailModel | undefined) {\n this._concept = concept;\n }\n\n /**\n * Retrieve reference date of attribute which can be used as entryDate for content\n * to get information in correct time version\n */\n get referenceDate() {\n return this.attributeReferenceDate;\n }\n\n /**\n * Set reference date for concepts and content\n */\n set referenceDate(date: ISO_DATE) {\n this.attributeReferenceDate = date;\n }\n\n /**\n * CONTENT\n */\n\n /**\n * Indicates if content comes from the data service\n */\n hasContentFromData() {\n return hasAllContentInData();\n }\n\n setHasContentConfiguration(hasContentConfiguration: boolean) {\n this._hasContentConfiguration = hasContentConfiguration;\n }\n\n hasContentConfiguration() {\n return this._hasContentConfiguration;\n }\n\n private createAttributeContent() {\n if (\"content\" in this.data) {\n return new AttributeContent(this.data.content as ContentData);\n }\n return undefined;\n }\n\n get content() {\n return this._content;\n }\n\n indicateContentConfiguration(contentConfiguration: ContentConfiguration) {\n if (contentConfiguration) {\n const hasQuestionConfig = contentConfiguration.questions?.hasConfig();\n\n const hasEndResultConfig =\n contentConfiguration.isConfiguredEndResultAttribute(this.key);\n const hasIntermediateResultConfig =\n contentConfiguration.isConfiguredIntermediateResultAttribute(this.key);\n\n this.setHasContentConfiguration(\n hasQuestionConfig || hasEndResultConfig || hasIntermediateResultConfig,\n );\n }\n }\n\n /**\n * Retrieve the first permitted label to render when a concept and contentConfiguration is available\n * Be aware that permission could be in place for labels from a concept.\n */\n getContentConfiguredLabel(\n contentConfiguration: ContentConfigurationElements,\n ) {\n if (this.hasContentFromData()) {\n return this.content?.label ?? this.label;\n }\n\n return contentConfiguration.getContentConfiguredLabel(\n this.concept,\n this.label,\n );\n }\n\n /**\n * Visualization\n */\n get defaultAlignment(): \"left\" | \"center\" | \"right\" {\n return \"left\";\n }\n\n /**\n * Handles layout hint align-left, align-center and align-right\n */\n get alignment(): \"left\" | \"center\" | \"right\" {\n const alignmentHints = this.layouthint.getByLayoutHint(\"align-\");\n\n // return alignment based on layouthint or the default alignment for the attribute\n const alignment = alignmentHints\n ? alignmentHints.substring(\"align-\".length)\n : this.defaultAlignment;\n\n if (\n alignment === \"left\" ||\n alignment === \"center\" ||\n alignment === \"right\"\n ) {\n return alignment;\n }\n\n return this.defaultAlignment;\n }\n\n /**\n * Readonly attribute width indicates the proposed width of this attribute\n */\n get readonlyWidth(): ATTRIBUTE_WIDTH {\n return ATTRIBUTE_WIDTH.MEDIUM;\n }\n\n /**\n * LAYOUT HINT RULES\n */\n\n get layoutHintRules(): LayoutHintRuleCollection | undefined {\n return this._layoutHintRules;\n }\n\n set layoutHintRules(rules: LayoutHintRuleCollection) {\n this._layoutHintRules = rules;\n }\n\n processLayoutHintRules(attributes: AttributeCollection) {\n if (this.layoutHintRules) {\n this.layoutHintRules.process<C>(this, attributes);\n }\n }\n\n /**\n * VALUES\n */\n\n get lastModification() {\n return this._lastModification;\n }\n\n set lastModification(lastModification: number) {\n this._lastModification = lastModification;\n }\n\n /**\n * Set last modification to current timestamp\n */\n updateLastModification() {\n this.lastModification = Date.now();\n }\n\n /**\n * Inidicates if attribute is changed since a given timestamp (Date.now)\n */\n isChangedSince(timestamp: number) {\n return this.lastModification > timestamp;\n }\n\n /**\n * Retrieve initial input value\n */\n getInitialInputValue(value: MaybeAttributeValue) {\n return value;\n }\n\n /**\n * Initial value received from the modular ui service\n */\n get initvalue() {\n return this.getInitValue();\n }\n\n getInitValue() {\n return this._initvalue;\n }\n\n setInitValue(initvalue: MaybeAttributeValue) {\n this._initvalue = initvalue;\n }\n\n hasValue() {\n return this._value != null && this._value !== \"\";\n }\n\n getValue() {\n return this.hasValue() ? this._value : null;\n }\n\n setValue(value: MaybeAttributeValue) {\n this._value = value;\n }\n\n get value() {\n return this.getValue();\n }\n\n /**\n * Setting a value in the element\n */\n set value(value) {\n this.updateLastModification();\n\n this._value = value;\n }\n\n /**\n * Retrieve input value\n */\n getInputValue() {\n const inputvalue = this._inputvalue;\n return inputvalue ? inputvalue.toString() : \"\";\n }\n\n setInputvalue(inputvalue: MaybeAttributeValue) {\n this._inputvalue = inputvalue;\n }\n\n /**\n * Returns the value as entered by the user. This can differ from the internal iso value that is stored\n */\n get inputvalue() {\n return this.getInputValue();\n }\n\n /**\n * Sets the input value to the value entered by the user\n */\n set inputvalue(value: MaybeAttributeValue) {\n this._inputvalue = value;\n this.value = value;\n\n this.validate(value);\n }\n\n formatValue(value: MaybeAttributeValue) {\n return JSON.stringify(value);\n }\n\n /**\n * Getting the readonly value, iso value converted for human reading\n */\n get readonlyvalue() {\n return this.value ? this.value.toString() : \"\";\n }\n\n /**\n * Value that is used when retrieving an error collection of this attribute\n * Mostly this is the input value, but sometimes a different value is needed,\n * for example iban and postcode need to validate length without spaces\n */\n get validateValue() {\n return this.inputvalue;\n }\n\n /**\n * VALIDATE\n */\n\n /**\n * Getting mandatory status of attribute\n */\n get mandatory() {\n return this._mandatory || false;\n }\n\n /**\n * Set mandatory status of attribute\n */\n set mandatory(mandatory: boolean) {\n if (mandatory !== this._mandatory) {\n this._previouslyValidatedValue = null;\n }\n this._mandatory = mandatory;\n }\n\n get configuredMandatory() {\n return (\n this.layouthint.has(MANDATORY) ??\n this.getContributionAsBoolean(\"mandatory\")\n );\n }\n\n get readonly() {\n return (\n this._readonly ||\n this.getContributionAsBoolean(\"readonly\") === true ||\n this.getDataAsBoolean(\"static\") === true ||\n this.isResult\n );\n }\n\n set readonly(readonly: boolean) {\n this._readonly = readonly;\n }\n\n get disabled() {\n return this._disabled;\n }\n\n set disabled(disabled: boolean) {\n this._disabled = disabled;\n }\n\n get isResult() {\n return this._isResult;\n }\n\n set isResult(isResult: boolean) {\n this._isResult = isResult;\n }\n\n /**\n * Getting the display and input format of an attribute\n */\n get format() {\n return this.getContributionAsString(\"format\");\n }\n\n get formatLabel() {\n return this.format;\n }\n\n /**\n * Get minimum string length\n */\n get minLength() {\n return this.getContributionAsNumber(\"minLength\");\n }\n\n /**\n * Get maximum string length\n */\n get maxLength() {\n return this.getContributionAsNumber(\"maxLength\");\n }\n\n get operator() {\n return this.getContributionAsString(\"operator\", \"\");\n }\n\n /**\n * Get assistant message\n */\n get assistantMessage() {\n return this.getContributionAsString(\"assistant\");\n }\n\n /**\n * Get valid status\n */\n get isValid() {\n return this.validate(this.validateValue);\n }\n\n getIsValid() {\n return this._isValid;\n }\n\n setIsValid(isValid: boolean) {\n this._isValid = isValid;\n }\n\n getServerConstraints() {\n return this._serverConstraints;\n }\n\n /**\n * Retrieve applicable constraint for this attribute\n */\n get constraintCollection(): ConstraintCollection {\n const constraints = new ConstraintCollection();\n\n constraints.add(this._serverConstraints);\n\n // Mandatory constraint\n if (this.mandatory) {\n constraints.add(new MandatoryConstraint());\n }\n\n if (this.minLength || this.maxLength) {\n constraints.add(\n new StringLengthConstraint(this.minLength, this.maxLength),\n );\n }\n\n constraints.add(this.addConstraints());\n\n return constraints;\n }\n\n /**\n * Template method for class extending this model to add extra constraints\n * @abstract\n */\n addConstraints(): ConstraintCollection {\n return new ConstraintCollection();\n }\n\n /**\n * Used to programmatically overwrite the setting USE_CLIENTSIDE_VALIDATION\n */\n setUseClientsideValidation(enabled: boolean) {\n this._useClientsideValidation = enabled;\n }\n\n /**\n * Indicates if client side validation is enabled\n */\n useClientsideValidation() {\n return this._useClientsideValidation ?? true;\n }\n\n /**\n * Validate input on client side constraint\n */\n validate(value: MaybeAttributeValue) {\n // when client side validation is disabled, this attribute is always valid\n if (!this.useClientsideValidation()) {\n return true;\n }\n\n if (this.isOptionalAndEmpty(value)) {\n this._isValid = true;\n } else if (this.getPreviouslyValidatedValue() !== value) {\n this._isValid = this.constraintCollection.validate(value);\n }\n this.setPreviouslyValidatedValue(value);\n\n return this._isValid;\n }\n\n setPreviouslyValidatedValue(previouslyValidatedValue: MaybeAttributeValue) {\n this._previouslyValidatedValue = previouslyValidatedValue;\n }\n\n getPreviouslyValidatedValue() {\n return this._previouslyValidatedValue;\n }\n\n /**\n * Indicates if attribute is optional and empty\n */\n isOptionalAndEmpty(value: MaybeAttributeValue) {\n if (value === undefined) {\n throw new IllegalArgumentException(\n \"isOptionalAndEmpty method needs value argument\",\n );\n }\n\n return !this.mandatory && value === \"\";\n }\n\n /**\n * Retrieve error messages of this attribute\n */\n get errorCollection() {\n const collection = new ErrorCollection(\n ErrorCollectionType.ATTRIBUTE,\n this.attributeErrors,\n );\n\n collection.addConstraints(\n this.constraintCollection.invalidConstraints(this.validateValue),\n );\n\n return collection;\n }\n\n /**\n * Check if attribute is in error\n */\n inError() {\n return !this._isValid && this.isChangedSince(0);\n }\n\n /**\n * Reset static error messages on attribute\n */\n resetErrors() {\n this.attributeErrors.clear();\n }\n\n /**\n * Registers an error that was received from a server response\n */\n addServerError(error: ErrorObjectData) {\n this.attributeErrors.addServerError(\n error.id,\n error.message,\n error.properties,\n error.layouthint,\n );\n }\n\n removeServerError(id: string) {\n this.attributeErrors.removeServerError(id);\n }\n\n hasServerErrors() {\n return this.errorCollection.serverErrors.length > 0;\n }\n\n hasErrors() {\n return this.errorCollection.hasItems();\n }\n\n /**\n * Registers a missing error that was received from the server\n */\n addMissingError(_receivedAttribute?: AttributeModel) {\n this.attributeErrors.addServerError(\"Constraint.Missing\");\n }\n\n removeMissingError() {\n this.removeServerError(\"Constraint.Missing\");\n }\n\n addServerConstraint(\n id: string,\n defaultMessage?: string,\n parameters?: MessageParameters,\n ) {\n this._serverConstraints.addConstraint(\n id,\n undefined,\n defaultMessage || \"\",\n parameters,\n this.useClientsideValidation(),\n );\n }\n\n formatParameters(parameters?: MessageParameters) {\n if (!parameters) {\n return {};\n }\n\n const params: Record<string, string | number> = {};\n\n Object.keys(parameters).forEach((paramKey: string) => {\n const paramValue = parameters[paramKey];\n if (paramKey.endsWith(\"-number\") || paramKey.endsWith(\"-date\")) {\n params[paramKey] = this.formatValue(paramValue);\n } else {\n params[paramKey] = paramValue;\n }\n });\n\n return params;\n }\n\n get hasDynamicValidationData() {\n return true;\n }\n\n updateValidations(errors: ErrorObjectData[]) {\n if (\n errors.some((error) => error.id === \"Constraint.Mandatory\") ||\n this.layouthint.has(MANDATORY)\n ) {\n this.mandatory = true;\n } else if (!this.hasValue()) {\n this.mandatory = false;\n }\n\n this._serverConstraints = new ConstraintCollection();\n this.resetErrors();\n\n errors\n .filter(\n (error) => error.id !== \"Constraint.Mandatory\" || !this.hasValue(),\n )\n .forEach((error) => {\n if (this.hasValue()) {\n this.attributeErrors.addServerError(\n error.id,\n error.message,\n this.formatParameters(error.properties),\n error.layouthint,\n );\n } else {\n this.addServerConstraint(\n error.id,\n error.message,\n this.formatParameters(error.properties),\n );\n }\n });\n }\n\n /**\n * Mutate\n */\n /**\n * Merge old attribute with the attribute from the server.\n * Readonly attributes always need to show the value from the server\n */\n mergeAttribute(oldAttribute: AttributeModel) {\n this.concept = oldAttribute.concept;\n\n if (\n !oldAttribute.readonly &&\n oldAttribute.isValid &&\n oldAttribute.inputvalue !== null\n ) {\n this.update(oldAttribute.inputvalue);\n }\n }\n\n /**\n * FORMDATA\n */\n\n /**\n * Getting data ready to be send to the modular ui\n * Returns null when the attribute should not be send to the server\n */\n getFormData() {\n if (this.inError()) {\n return null;\n }\n\n return {\n [this.name]: this.value,\n };\n }\n\n get formdata() {\n return this.getFormData();\n }\n\n getEmptyFormData() {\n return { [this.name]: null };\n }\n\n /**\n * OTHER\n */\n equals(otherAttribute: AttributeModel) {\n return (\n this.key === otherAttribute.key &&\n this.parentKey === otherAttribute.parentKey\n );\n }\n}\n","import { immerable } from \"immer\";\n\nimport { ATTRIBUTE_WIDTH } from \"../../constants/Constants\";\nimport { AttributeFactory } from \"../attributes/AttributeFactory\";\nimport { LayoutHintCollection } from \"../layouthint/LayoutHintCollection\";\n\nimport type { AttributeContributions } from \"../attributes/types\";\nimport type { SortingModel } from \"./sorting/SortingModel\";\nimport type { SortOptionModel } from \"./sorting/SortOptionModel\";\n\n/**\n * One header item of the list\n */\nexport class ListHeaderModel {\n [immerable] = true;\n private _key: string;\n private _header: {\n label: string;\n type: string;\n layouthint?: string[];\n };\n private _sortOption: SortOptionModel | undefined;\n private _readonlyWidth: ATTRIBUTE_WIDTH;\n\n /**\n * constructor\n */\n constructor(\n header: Record<string, AttributeContributions>,\n sorting?: SortingModel,\n ) {\n const [headerKey] = Object.keys(header);\n\n const attribute = AttributeFactory.createAttribute(\n headerKey,\n { elementid: headerKey },\n header[headerKey],\n );\n this._readonlyWidth = attribute.readonlyWidth;\n this._key = headerKey;\n this._header = header[headerKey];\n this._sortOption = sorting?.find(\n (sortOption) => sortOption.key === headerKey,\n );\n }\n\n get key() {\n return this._key;\n }\n\n /**\n * Getting the label of this header item\n */\n get label() {\n return this._header.label;\n }\n\n /**\n * Getting the type of this header item. For instance string, date, etc.\n */\n get type() {\n return this._header.type;\n }\n\n /**\n * Getting the layout hints of this header item\n */\n get layouthint() {\n return new LayoutHintCollection(this._header.layouthint);\n }\n\n /**\n * Get alignment of header label\n */\n get alignment() {\n const alignment = this.layouthint.getByLayoutHint(\"align-\");\n return alignment === null ? \"left\" : alignment.substring(\"align-\".length);\n }\n\n get readonlyWidth(): ATTRIBUTE_WIDTH {\n return this._readonlyWidth ?? ATTRIBUTE_WIDTH.MEDIUM;\n }\n\n equals(listHeader: ListHeaderModel) {\n return listHeader.key === this.key;\n }\n\n get sortOption() {\n return this._sortOption;\n }\n\n hasSorting() {\n return this.sortOption != null;\n }\n}\n","import { pick } from \"lodash\";\nimport isPlainObject from \"lodash/isPlainObject\";\n\nimport { BooleanAttributeModel } from \"./BooleanAttributeModel\";\nimport { CaptchaAttributeModel } from \"./CaptchaAttributeModel\";\nimport { ChoiceAttributeModel } from \"./ChoiceAttributeModel\";\nimport { CompositeAttributeModel } from \"./CompositeAttributeModel\";\nimport { ATTRIBUTE_TYPE } from \"./constants\";\nimport { DatetimeAttributeModel } from \"./DatetimeAttributeModel\";\nimport { HelptextAttributeModel } from \"./HelptextAttributeModel\";\nimport { LabelAttributeModel } from \"./LabelAttributeModel\";\nimport { LayoutHintRuleCollection } from \"./layouthint-rules/LayoutHintRuleCollection\";\nimport { MemoAttributeModel } from \"./MemoAttributeModel\";\nimport { MoneyAttributeModel } from \"./MoneyAttributeModel\";\nimport { NumberAttributeModel } from \"./NumberAttributeModel\";\nimport { PasswordAttributeModel } from \"./PasswordAttributeModel\";\nimport { RangeAttributeModel } from \"./RangeAttributeModel\";\nimport { StringAttributeModel } from \"./StringAttributeModel\";\nimport { UploadAttributeModel } from \"./UploadAttributeModel\";\nimport { XMLAttributeModel } from \"./XMLAttributeModel\";\n\nimport type { Data, ErrorMessage } from \"../../types/types\";\nimport type { ActionFieldData } from \"../actions/types\";\nimport type { DetailData } from \"../detail/types\";\nimport type { FilterData } from \"../filters/types\";\nimport type { AnchorElementData } from \"../form/types\";\nimport type { ListDetailAttributeData } from \"../list/types\";\nimport type { ModelOptions } from \"../types\";\nimport type { UserData } from \"../user/types\";\nimport type {\n AnonymousDynamicSchema,\n AttributeContributions,\n AttributeData,\n AttributeModel,\n AttributeModularUIData,\n AttributeValue,\n ChildrenKey,\n CompositeDynamicSchema,\n DynamicSchema,\n MaybeAttributeValue,\n NamedDynamicSchema,\n} from \"./types\";\n\ntype BaseAttributeModelConstructor = new (\n attributeData: AttributeData,\n contributions: AttributeContributions,\n modelOptions?: ModelOptions,\n) => AttributeModel;\n\nexport class AttributeFactory {\n static get ATTRIBUTE_MODELS() {\n return [\n ChoiceAttributeModel,\n BooleanAttributeModel,\n HelptextAttributeModel,\n LabelAttributeModel,\n XMLAttributeModel,\n MemoAttributeModel,\n StringAttributeModel,\n DatetimeAttributeModel,\n MoneyAttributeModel,\n NumberAttributeModel,\n PasswordAttributeModel,\n UploadAttributeModel,\n CompositeAttributeModel,\n RangeAttributeModel,\n CaptchaAttributeModel,\n ];\n }\n\n static createAttribute<T extends AttributeModel = AttributeModel>(\n key: string,\n data: AttributeModularUIData,\n contributions: AttributeContributions,\n modelOptions?: ModelOptions,\n ): T {\n const Model = this.getAttributeModel(contributions);\n\n if (!Model) {\n throw new Error(\n \"Could not find model for contributions: \" + contributions,\n );\n }\n\n const children = contributions.children as Record<\n string,\n AttributeContributions\n >[];\n\n const attributeData = new AttributeDataMapper(\n key,\n data,\n Array.isArray(children)\n ? AttributeDataMapper.getChildrenKeys(children)\n : [],\n ).getData();\n\n const attribute = new Model(attributeData, contributions, modelOptions);\n\n LayoutHintRuleCollection.setLayoutHintRules(attribute);\n\n return attribute as T;\n }\n\n static getAttributeModel(\n contributions: AttributeContributions,\n ): BaseAttributeModelConstructor | undefined {\n return this.ATTRIBUTE_MODELS.find((model) =>\n model.isApplicableModel(contributions),\n ) as BaseAttributeModelConstructor | undefined;\n }\n}\n\nexport class AttributeDataMapper {\n private _key: string;\n private _data:\n | Data\n | AnchorElementData\n | FilterData\n | ListDetailAttributeData\n | UserData\n | DetailData\n | ActionFieldData;\n private _value: MaybeAttributeValue;\n private _links: Record<string, { href: string }>;\n private _children: AttributeData[] | AttributeData[][];\n\n constructor(\n key: string,\n data: AttributeModularUIData,\n childrenKeys: ChildrenKey[],\n ) {\n this._key = key;\n this._data = this.getAttributeData(key, data);\n this._value = this.getValue();\n this._links = this.getLinks();\n this._children = this.createChildren(data, childrenKeys);\n }\n\n private get key() {\n return this._key;\n }\n\n private get data() {\n return this._data;\n }\n\n get value() {\n return this._value;\n }\n\n get links() {\n return this._links;\n }\n\n get children() {\n return this._children;\n }\n\n private getAttributeData(key: string, data: AttributeModularUIData) {\n if (Array.isArray(data)) {\n return (\n data.find((attr) => {\n return (\n (\"elementid\" in attr && attr.elementid === key) ||\n (\"name\" in attr && attr.name === key) ||\n (\"param\" in attr && attr.param === key)\n );\n }) || ({} as AnchorElementData)\n );\n }\n return data;\n }\n\n private getValue() {\n let value;\n\n if (this.key in this.data) {\n value = this.data[this.key];\n } else if (\"values\" in this.data) {\n value = this.data.values;\n } else if (\"value\" in this.data) {\n value = this.data.value;\n } else if (\"suggestions\" in this.data) {\n value = this.data.suggestions;\n } else if (\"suggestion\" in this.data) {\n value = this.data.suggestion;\n } else if (\"options\" in this.data && Array.isArray(this.data.options)) {\n value = this.data.options\n .filter((option) => option.selected)\n .map((option) => option.code || option.key);\n }\n\n return value as MaybeAttributeValue;\n }\n\n private getDynamicschemaFromData() {\n if (\"dynamicschema\" in this.data) {\n const { dynamicschema } = this.data;\n if (Array.isArray(dynamicschema)) {\n return dynamicschema as AnonymousDynamicSchema | CompositeDynamicSchema;\n }\n return dynamicschema as NamedDynamicSchema;\n }\n return null;\n }\n\n /**\n * retrieve the dynamischema by the dynamischemaId\n * mentioned in the contributions of the attribute\n */\n private getDynamicSchema() {\n const dynamicschema = this.getDynamicschemaFromData();\n if (!dynamicschema) {\n return undefined;\n }\n\n if (Array.isArray(dynamicschema)) {\n return dynamicschema;\n }\n\n const dynamicschemaId = this.getDynamicSchemaId();\n if (typeof dynamicschemaId === \"string\") {\n if (\n dynamicschemaId in dynamicschema &&\n Array.isArray(dynamicschema[dynamicschemaId])\n ) {\n return dynamicschema[dynamicschemaId].map((attrDS) => {\n if (\"elements\" in attrDS) {\n return {\n ...attrDS,\n elements: {\n ...attrDS.elements,\n dynamicschema,\n },\n };\n }\n return attrDS;\n });\n }\n }\n\n return undefined;\n }\n\n private getDynamicSchemaId() {\n if (\n typeof this.data.dynamicschemaId === \"string\" ||\n typeof this.data.dynamicschemaId === \"number\"\n ) {\n return this.data.dynamicschemaId;\n }\n return this.key;\n }\n\n private getStatic() {\n return typeof this.data.static === \"boolean\" ? this.data.static : false;\n }\n\n private getLinks() {\n return pick(this.data._links, [\n \"concept\",\n \"download\",\n \"lookupOptions\",\n \"lookupList\",\n ]);\n }\n\n private getOptions() {\n return this.data.options;\n }\n\n private getMessage() {\n return this.data.message as ErrorMessage | undefined;\n }\n\n private isResult() {\n if (typeof this.data.isResult === \"boolean\") {\n return this.data.isResult;\n }\n return false;\n }\n\n private getReferenceDate() {\n if (typeof this.data.referenceDate === \"string\") {\n return this.data.referenceDate;\n }\n return undefined;\n }\n\n private getContent() {\n if (\"content\" in this.data) {\n const pickedContent = pick(this.data.content, [\n \"header\",\n \"label\",\n \"elements\",\n \"layouthint\",\n \"text\",\n ]);\n\n if (Object.keys(pickedContent).length > 0) {\n return pickedContent;\n }\n }\n return null;\n }\n\n getData(): AttributeData {\n return {\n key: this.key,\n value: this.value,\n static: this.getStatic(),\n _links: this.links,\n dynamicschema: this.getDynamicSchema(),\n dynamicschemaId: this.getDynamicSchemaId(),\n options: this.getOptions(),\n message: this.getMessage(),\n isResult: this.isResult(),\n referenceDate: this.getReferenceDate(),\n content: this.getContent(),\n children: this.children,\n };\n }\n\n static getChildrenKeys(\n children: Record<string, AttributeContributions>[],\n ): ChildrenKey[] {\n return children.map((child) => {\n const [childKey] = Object.keys(child);\n\n const isComposite =\n child[childKey].type === ATTRIBUTE_TYPE.RANGE ||\n child[childKey].type === ATTRIBUTE_TYPE.COMPOSITE;\n\n const dynamicschemaId = child[childKey].dynamicschemaId as\n | string\n | number;\n const childChildren = (\n isComposite ? child[childKey]?.children : []\n ) as Record<string, AttributeContributions>[];\n\n return {\n key: childKey,\n dynamicschemaId,\n children: this.getChildrenKeys(childChildren),\n };\n });\n }\n\n createChildren(data: AttributeModularUIData, childrenKeys: ChildrenKey[]) {\n // Check if the original data explicitly contains the key and is explicitly null.\n const keyExplicitlyNull = this.value === null;\n if (keyExplicitlyNull) {\n // Handling for when the value is explicitly null: set childData to null.\n return childrenKeys.map((keyObject: ChildrenKey) => {\n return this.createChild(data, { [keyObject.key]: null }, keyObject);\n });\n }\n\n const values = this.value;\n if (Array.isArray(values)) {\n return values.map((value) => {\n return childrenKeys.map((keyObject) => {\n const childData = this.childData(\n value as Record<string, AttributeValue>,\n this.key,\n keyObject.key,\n );\n return this.createChild(data, childData, keyObject);\n });\n });\n }\n\n return childrenKeys.map((keyObject) => {\n const childData = this.childData(data, this.key, keyObject.key);\n return this.createChild(data, childData, keyObject);\n });\n }\n\n private getDataContent(\n content: Record<string, AttributeData> | undefined,\n childKey: string,\n ) {\n if (content && childKey in content) {\n return content[childKey];\n }\n return undefined;\n }\n\n childData(data: AttributeModularUIData, parentKey: string, childKey: string) {\n if (Array.isArray(data)) {\n if (Array.isArray(this.data.elements)) {\n return this.data.elements.find(\n (element) => element.elementid === childKey,\n );\n }\n } else if (parentKey in data && isPlainObject(data[parentKey])) {\n const parentData = data[parentKey] as AttributeData;\n const dataContent = this.getDataContent(\n data.content as Record<string, AttributeData> | undefined,\n childKey,\n );\n return { ...parentData, content: dataContent };\n } else if (childKey in data && isPlainObject(data[childKey])) {\n return data[childKey];\n }\n\n if (isPlainObject(data)) {\n return data;\n }\n return {};\n }\n\n createChild(\n data: AttributeModularUIData,\n childData: AttributeModularUIData,\n keyObject: ChildrenKey,\n ) {\n const dynamicschema =\n \"dynamicschema\" in data\n ? (data.dynamicschema as DynamicSchema)\n : undefined;\n\n let dynamicschemaId = null;\n if (keyObject.dynamicschemaId) {\n dynamicschemaId = keyObject.dynamicschemaId;\n } else if (keyObject.key && typeof data === \"object\") {\n if (\"key\" in data && typeof data.key === \"string\") {\n dynamicschemaId = `${data.key}.${keyObject.key}`;\n }\n }\n\n return new AttributeDataMapper(\n keyObject.key,\n {\n ...childData,\n dynamicschema,\n dynamicschemaId,\n },\n keyObject.children,\n ).getData();\n }\n}\n","import has from \"lodash/has\";\n\nimport { ConfigurationException } from \"../../exceptions/ConfigurationException\";\nimport { ResourceCollection } from \"../base/ResourceCollection\";\nimport { AttributeFactory } from \"./AttributeFactory\";\nimport { ChoiceAttributeModel } from \"./ChoiceAttributeModel\";\nimport { CompositeAttributeModel } from \"./CompositeAttributeModel\";\n\nimport type { ContentConfiguration } from \"../contentconfiguration/ContentConfiguration\";\nimport type { ErrorObjectData } from \"../form/types\";\nimport type { ModelOptions } from \"../types\";\nimport type {\n AttributeCollectionContributions,\n AttributeModel,\n AttributeModularUIData,\n} from \"./types\";\n\ninterface AttributeCollectionOptions extends ModelOptions {\n isReadonly: boolean;\n}\n\nexport class AttributeCollection extends ResourceCollection<AttributeModel> {\n constructor(\n data: AttributeModularUIData = { elementid: \"none\" },\n contributions: AttributeCollectionContributions = [],\n modelOptions?: AttributeCollectionOptions,\n ) {\n super();\n\n contributions.forEach((contribution) => {\n const [key, contributionValue] = Object.entries(contribution)[0];\n\n const attribute = AttributeFactory.createAttribute(\n key,\n data,\n contributionValue,\n {\n origin: modelOptions?.origin,\n contextPath: modelOptions?.contextPath,\n },\n );\n\n if (attribute !== null) {\n // when readonly is not explicitly set in the contributions, follow argument\n if (modelOptions?.isReadonly && !has(contributionValue, \"readonly\")) {\n attribute.readonly = true;\n }\n\n this.collection.push(attribute);\n }\n });\n\n this.processLayoutHintRules();\n }\n\n /**\n * Retrieve all attributes in this collection<br>\n * This getter processes layout hints, this is different from the standard {@link BaseCollection#all} property\n */\n get attributes() {\n this.processLayoutHintRules();\n return this.all;\n }\n\n /**\n * Replace attributes with a new array of attributes\n */\n set attributes(attributes: AttributeModel[]) {\n this.collection = attributes;\n }\n\n processLayoutHintRules() {\n this.all.forEach((attribute) => {\n attribute.processLayoutHintRules(this);\n });\n }\n\n /**\n * Retrieve only visible attributes from the collection\n */\n get visible() {\n return this.attributes.filter((attribute) => !attribute.isHidden);\n }\n\n get questions() {\n return this.visible.filter((attribute) => !attribute.isResult);\n }\n\n get results() {\n return this.visible.filter((attribute) => attribute.isResult);\n }\n\n getAttributeByAttribute(attribute: AttributeModel) {\n return this.find((attr) => {\n if (attr.equals(attribute)) {\n return true;\n } else if (attribute instanceof CompositeAttributeModel) {\n return attribute.getChildByAttribute(attr);\n }\n return false;\n });\n }\n\n /**\n * Get a single attribute by it's key\n */\n getAttributeByKey(key: string) {\n return this.find((attribute) => {\n if (attribute.key === key) {\n return true;\n } else if (attribute instanceof CompositeAttributeModel) {\n return attribute.getChildByKey(key);\n }\n return false;\n });\n }\n\n /**\n * Indicates if attribute with key exists in collection\n */\n hasAttributeByKey(key: string) {\n return this.getAttributeByKey(key) != null;\n }\n\n /**\n * Getting the first attribute having the supplied layout hint\n */\n getAttributeByLayoutHint(...hints: string[]) {\n return this.find((attribute) => attribute.layouthint.has(...hints));\n }\n\n /**\n * Getting a choice attribute by layouthint, returns undefined when not found or not a choice attribute\n */\n getChoiceAttributeByLayoutHint(layoutHint: string) {\n const attribute = this.getAttributeByLayoutHint(layoutHint);\n if (attribute instanceof ChoiceAttributeModel) {\n return attribute;\n }\n return undefined;\n }\n\n /**\n * Getting all attributes having the supplied layout hint\n */\n getAttributesByLayoutHint(...hints: string[]) {\n return this.filter((attribute) => attribute.layouthint.has(...hints));\n }\n\n /**\n * Replace an attribute instance in the collection with a new attribute instance\n */\n replace(oldAttribute: AttributeModel, newAttribute: AttributeModel) {\n this.replaceByKey(oldAttribute.key, newAttribute);\n }\n\n /**\n * Replace an attribute by the key of the attribute\n */\n replaceByKey(key: string, newAttribute: AttributeModel) {\n this.forEach((attribute, index) => {\n if (attribute.key === key) {\n this.collection[index] = newAttribute;\n }\n });\n }\n\n /**\n * Set reference date by replacing an old attribute with a new attribute with a reference Date\n * Date is a string in ISO format yyyy-MM-dd\n */\n setReferenceDate(date: string) {\n this.forEach((attribute) => {\n attribute.referenceDate = date;\n });\n }\n\n hasServerErrors() {\n return this.collection.some((attribute) => attribute.hasServerErrors());\n }\n\n addServerError(error: ErrorObjectData) {\n const elementid = error?.anchor?.elementid;\n\n if (elementid) {\n const attribute = this.getAttributeByKey(elementid);\n if (attribute) {\n attribute.addServerError(error);\n } else {\n throw new ConfigurationException(\n `Could not add error to missing attribute with id ${elementid}`,\n );\n }\n }\n }\n\n hasErrors() {\n return this.visible.some((attribute) => attribute.hasErrors());\n }\n\n updateValidations(errors: ErrorObjectData[]) {\n this.all\n .filter((attribute) => attribute.hasDynamicValidationData)\n .forEach((attribute) => {\n const attributeErrors = errors.filter(\n (error) => error.anchor?.elementid === attribute.key,\n );\n attribute.updateValidations(attributeErrors);\n\n if (attribute instanceof CompositeAttributeModel) {\n const compositeChildErrors = errors.filter((error) => {\n const elementId = error.anchor?.elementid;\n return elementId && elementId.startsWith(`${attribute.key}.`);\n });\n\n attribute.children.updateValidations(\n `${attribute.key}.`,\n compositeChildErrors,\n );\n }\n });\n\n return this;\n }\n\n indicateContentConfiguration(contentConfiguration: ContentConfiguration) {\n if (contentConfiguration) {\n this.all.forEach((attribute) => {\n attribute.indicateContentConfiguration(contentConfiguration);\n });\n }\n }\n\n /**\n * Generate formdata object for current collection based on formdata of attributes\n * Skip attributes that are readonly, the confirmation password or null\n */\n get formdata() {\n return this.getFormData(false);\n }\n\n getFormData(validationData = false) {\n const attributesFormData = this.attributes\n .filter(\n (attribute) =>\n attribute.formdata !== null &&\n !attribute.readonly &&\n (!validationData || attribute.hasDynamicValidationData),\n )\n .map((attribute) => {\n // make attribute empty when it is not (or no longer) visible\n if (attribute.isVisible) {\n return attribute.formdata;\n }\n\n return attribute.getEmptyFormData();\n });\n\n let data = {};\n attributesFormData.forEach((attributeFormData) => {\n data = {\n ...data,\n ...attributeFormData,\n };\n });\n\n return data;\n }\n}\n","import { ResourceCollection } from \"../base/ResourceCollection\";\nimport { ErrorCollection, ErrorCollectionType } from \"../error/ErrorCollection\";\nimport { AttributeFactory } from \"./AttributeFactory\";\nimport { BaseAttributeModel } from \"./BaseAttributeModel\";\nimport { CompositeAttributeModel } from \"./CompositeAttributeModel\";\n\nimport type { ErrorObjectData } from \"../form/types\";\nimport type { ModelOptions, ModelWithChildModels } from \"../types\";\nimport type { AttributeModel, MaybeAttributeValue } from \"./types\";\n\nexport class CompositeAttributeChildCollection\n extends ResourceCollection<AttributeModel | CompositeAttributeChildCollection>\n implements ModelWithChildModels\n{\n get type() {\n return \"composite-collection\";\n }\n\n get selfhref() {\n return undefined;\n }\n\n static create(\n data: object,\n contributions: object,\n modelOptions?: ModelOptions,\n ) {\n if (\n \"children\" in data &&\n \"children\" in contributions &&\n Array.isArray(contributions.children) &&\n Array.isArray(data.children)\n ) {\n // a composite with multiple data elements and one contributions element\n // multiple 'composites' are returned\n const isMultipleTableRows = Array.isArray(data.children[0]);\n if (isMultipleTableRows) {\n return CompositeAttributeChildCollection.createMultiData(\n data,\n contributions,\n modelOptions,\n );\n }\n\n return CompositeAttributeChildCollection.createStandard(\n data,\n contributions,\n modelOptions,\n );\n }\n\n return new CompositeAttributeChildCollection();\n }\n\n static createStandard(\n data: object,\n contributions: object,\n modelOptions?: ModelOptions,\n ) {\n const compositeChildCollection = new CompositeAttributeChildCollection();\n\n if (\n \"children\" in contributions &&\n \"children\" in data &&\n Array.isArray(contributions.children) &&\n Array.isArray(data.children)\n ) {\n compositeChildCollection.collection = contributions.children\n .map((contribution) => {\n const [key] = Object.keys(contribution);\n\n const attributeData = Array.isArray(data.children)\n ? data.children.find((attr) => attr.key === key)\n : {};\n\n const attributeContribution = contribution[key];\n\n if (\n \"type\" in contributions &&\n typeof contributions.type === \"string\" &&\n contributions.type.includes(\"range\") &&\n !attributeContribution.type\n ) {\n attributeContribution.type = contributions.type.replace(\n \"range\",\n \"\",\n );\n }\n\n const attribute = AttributeFactory.createAttribute(\n key,\n {\n ...attributeData,\n dynamicschema: attributeData?.dynamicschema,\n },\n {\n ...attributeContribution,\n readonly:\n attributeContribution.readonly ?? \"readonly\" in contributions,\n },\n modelOptions,\n );\n\n if (attribute && \"key\" in data && typeof data.key === \"string\") {\n attribute.parentKey = data.key;\n }\n\n return attribute;\n })\n .filter((attribute) => attribute !== null);\n }\n\n return compositeChildCollection;\n }\n\n /*\n * Creates a composite for each child data element using the same contributions\n */\n static createMultiData(\n data: object,\n contributions: object,\n modelOptions?: ModelOptions,\n ) {\n const compositeChildCollection = new CompositeAttributeChildCollection();\n\n if (\"children\" in data && Array.isArray(data.children)) {\n compositeChildCollection.collection = data.children.map((childData) =>\n CompositeAttributeChildCollection.create(\n {\n ...data,\n children: childData,\n },\n contributions,\n modelOptions,\n ),\n );\n }\n\n return compositeChildCollection;\n }\n\n /**\n * Get input value of contributions\n */\n getInputValue(): string {\n return this.collection.map((child) => child.inputvalue).join(\",\");\n }\n\n get inputvalue() {\n return this.getInputValue();\n }\n\n /**\n * Validate input\n */\n validate() {\n return this.collection.every((child) => child.isValid);\n }\n\n /**\n * Retrieve error messages of this attribute\n */\n get errorCollection() {\n return new ErrorCollection(ErrorCollectionType.COMPOSITE_CHILDREN);\n }\n\n hasServerErrors(): boolean {\n return (\n this.errorCollection.serverErrors.length > 0 ||\n this.collection.some((child) => child.hasServerErrors())\n );\n }\n\n hasErrors(): boolean {\n return (\n this.errorCollection.hasItems() ??\n this.collection.some((child) => child.hasErrors())\n );\n }\n\n isValid() {\n return !this.hasErrors();\n }\n\n /**\n * Reset attribute to empty string\n */\n reset() {\n this.collection.forEach((child) => {\n child.reset();\n });\n }\n\n get initvalue(): MaybeAttributeValue | Record<string, MaybeAttributeValue> {\n const childrenObject: Record<string, MaybeAttributeValue> = {};\n const childrenArray: MaybeAttributeValue[] = [];\n\n for (const child of this.collection) {\n if (child instanceof CompositeAttributeChildCollection) {\n childrenArray.push(child.initvalue as MaybeAttributeValue);\n } else if (child.initvalue !== null) {\n childrenObject[child.key] = child.initvalue;\n }\n }\n\n if (\n childrenArray.length === 0 &&\n Object.keys(childrenObject).length === 0\n ) {\n return undefined;\n }\n\n if (childrenArray.length > 0) {\n return childrenArray;\n }\n\n return childrenObject;\n }\n\n get value(): unknown[] | Record<string, unknown> | undefined {\n if (this.first instanceof CompositeAttributeChildCollection) {\n return this.collection.map((collection) => collection.value);\n }\n\n let children: Record<string, unknown> = {};\n\n this.collection.forEach((attribute) => {\n if (attribute instanceof CompositeAttributeChildCollection) {\n return attribute.value;\n } else {\n if (attribute.formdata !== null && !attribute.readonly) {\n children = {\n ...children,\n ...attribute.formdata,\n };\n }\n return;\n }\n });\n\n if (Object.keys(children).length === 0) {\n return undefined;\n }\n\n return children;\n }\n\n get readonlyvalue(): string {\n if (this.first instanceof CompositeAttributeChildCollection) {\n return this.collection\n .map((collection) => collection.readonlyvalue)\n .join(\" | \");\n }\n\n return this.collection\n .filter((child) => child.value !== null)\n .map((child) => child.readonlyvalue)\n .join(\", \");\n }\n\n updateValidations(prefix: string, errors: ErrorObjectData[]) {\n this.collection.forEach((child) => {\n if (child instanceof CompositeAttributeChildCollection) {\n child.updateValidations(prefix, errors);\n } else {\n const attributeErrors = errors.filter(\n (error) => error.anchor?.elementid === `${prefix}${child.key}`,\n );\n\n child.updateValidations(attributeErrors);\n }\n });\n }\n\n setUseClientsideValidation(enabled: boolean) {\n this.collection.forEach((child) => {\n child.setUseClientsideValidation(enabled);\n });\n }\n\n hasValue(): boolean {\n return this.collection.some((child) => child.hasValue());\n }\n\n getChildByAttribute(attribute: AttributeModel) {\n return this.collection.find((child) => {\n if (child instanceof BaseAttributeModel && child.equals(attribute)) {\n return true;\n } else if (child instanceof CompositeAttributeModel) {\n return child.getChildByAttribute(attribute);\n }\n\n return false;\n });\n }\n\n getChildByKey(key: string) {\n return this.collection.find((child) => {\n if (child instanceof BaseAttributeModel && child.key === key) {\n return true;\n } else if (child instanceof CompositeAttributeModel) {\n return child.getChildByKey(key);\n }\n\n return false;\n });\n }\n}\n","export enum ATTRIBUTE_TYPE {\n STRING = \"string\",\n NUMBER = \"number\",\n INTEGER = \"integer\",\n BOOLEAN = \"boolean\",\n MEMO = \"memo\",\n DATE = \"date\",\n DATETIME = \"datetime\",\n TIME = \"time\",\n TIMESTAMP = \"timestamp\",\n ARRAY = \"array\",\n BINARY = \"binary\",\n COMPOSITE = \"composite\",\n CAPTCHA = \"captcha\",\n PASSWORD = \"password\",\n\n // below are not present in modular ui responses\n CHOICE = \"choice\",\n LOOKUP = \"lookup\",\n RANGE = \"range\",\n HELPTEXT = \"helptext\",\n LABEL = \"label\",\n MONEY = \"money\",\n XML = \"xml\",\n UPLOAD = \"upload\",\n ASSIGNMENT = \"assignment\",\n}\n\nexport enum FILTER_TYPE {\n STRING = \"string\",\n CHOICE = \"choice\",\n DATE = \"date\",\n DATETIME = \"datetime\",\n ASSIGNMENT = \"assignment\",\n DATERANGE = \"daterange\",\n DATETIMERANGE = \"datetimerange\",\n NUMBER = \"number\",\n NUMBERRANGE = \"numberrange\",\n}\n\nexport enum OPTION_MODE {\n STATIC = \"static\",\n DYNAMIC = \"dynamic\",\n DYNAMIC_WITH_THRESHOLD = \"dynamicWithThreshold\",\n LOOKUP = \"lookup\",\n}\n","import { ATTRIBUTE_WIDTH } from \"../../constants/Constants\";\nimport { IllegalArgumentException } from \"../../exceptions/IllegalArgumentException\";\nimport { BaseAttributeModel } from \"./BaseAttributeModel\";\nimport { CompositeAttributeChildCollection } from \"./CompositeAttributeChildCollection\";\nimport { ATTRIBUTE_TYPE } from \"./constants\";\nimport { ConstraintCollection } from \"./input-constraints/ConstraintCollection\";\n\nimport type { ContentConfiguration } from \"../contentconfiguration/ContentConfiguration\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ModelOptions, ModelWithChildModels } from \"../types\";\nimport type {\n AttributeContributions,\n AttributeData,\n AttributeModel,\n CompositeAttributeContributions,\n MaybeAttributeValue,\n} from \"./types\";\n\nexport class CompositeAttributeModel<\n C extends CompositeAttributeContributions = CompositeAttributeContributions,\n> extends BaseAttributeModel<CompositeAttributeContributions> {\n private _children: CompositeAttributeChildCollection;\n\n constructor(\n data?: AttributeData,\n contributions?: C,\n modelOptions?: ModelOptions,\n ) {\n super(data, contributions, modelOptions);\n\n this._children = CompositeAttributeChildCollection.create(\n data ?? {},\n contributions ?? {},\n modelOptions,\n );\n\n this.setChildrenOptionality();\n }\n\n static override isApplicableModel(contributions: AttributeContributions) {\n return (\n contributions.type === ATTRIBUTE_TYPE.COMPOSITE ||\n (contributions.type === ATTRIBUTE_TYPE.ARRAY &&\n \"children\" in contributions)\n );\n }\n\n override getInitialChildModelLinks() {\n return this.children.getInitialChildModelLinks();\n }\n\n override setChildModels(\n models: ModelWithChildModels[],\n errors: ErrorResponse[],\n ) {\n this.children.setChildModels(models, errors);\n }\n\n override get type() {\n return ATTRIBUTE_TYPE.COMPOSITE;\n }\n\n get children() {\n return this._children;\n }\n\n set children(children: CompositeAttributeChildCollection) {\n this._children = children;\n }\n\n get start() {\n return this.children.all[0];\n }\n\n get end() {\n return this.children.all[this.children.size - 1];\n }\n\n /**\n * Get input value of attribute\n */\n override getInputValue() {\n return this.children.getInputValue();\n }\n\n /**\n * Check if at least one child has value\n */\n override hasValue(): boolean {\n return this.children.some((child) => child.hasValue());\n }\n\n override get constraintCollection() {\n const constraints = new ConstraintCollection();\n\n constraints.add(this.getServerConstraints());\n constraints.add(this.addConstraints());\n\n return constraints;\n }\n\n /**\n * Used to programmatically overwrite the setting USE_CLIENTSIDE_VALIDATION\n */\n override setUseClientsideValidation(enabled: boolean) {\n super.setUseClientsideValidation(enabled);\n\n this.children.all.forEach((child) =>\n child.setUseClientsideValidation(enabled),\n );\n }\n\n /**\n * Validate input\n */\n override validate(value: MaybeAttributeValue) {\n // when client side validation is disabled, this attribute is always valid\n if (!this.useClientsideValidation()) {\n return true;\n }\n\n this._isValid = this.children.validate();\n\n if (this._isValid) {\n this._isValid = this.constraintCollection.validate(value);\n }\n\n return this._isValid;\n }\n\n /**\n * Indicates if attribute input is valid\n */\n override get isValid() {\n return this.validate(\"\");\n }\n\n override hasServerErrors(): boolean {\n return (\n this.errorCollection.serverErrors.length > 0 ||\n this.children.some((child) => child.hasServerErrors())\n );\n }\n\n override hasErrors(): boolean {\n return (\n this.errorCollection.hasItems() ??\n this.children.some((child) => child.hasErrors())\n );\n }\n\n /**\n * Reset attribute to empty string\n */\n override reset() {\n this.children.reset();\n }\n\n getChildByAttribute(attribute: AttributeModel): AttributeModel | undefined {\n return this.children.find((child): boolean => {\n if (child instanceof CompositeAttributeChildCollection) {\n return false;\n }\n return child.equals(attribute);\n }) as AttributeModel;\n }\n\n getChildByKey(key: string) {\n return this.children.find((child): boolean => {\n if (child instanceof BaseAttributeModel && child.key === key) {\n return true;\n } else if (\n child instanceof CompositeAttributeModel ||\n child instanceof CompositeAttributeChildCollection\n ) {\n return child.getChildByKey(key) !== undefined;\n }\n\n return false;\n });\n }\n\n override mergeAttribute(oldAttribute: AttributeModel) {\n this.concept = oldAttribute.concept;\n\n this.children.forEach((child) => {\n if (\n oldAttribute instanceof CompositeAttributeModel &&\n child instanceof BaseAttributeModel\n ) {\n const withChildAttribute = oldAttribute.getChildByKey(child.key);\n if (withChildAttribute) {\n child.mergeAttribute(withChildAttribute as AttributeModel);\n }\n }\n });\n }\n\n override update(\n value: MaybeAttributeValue,\n changedAttribute?: AttributeModel,\n ) {\n if (!changedAttribute) {\n throw new IllegalArgumentException(\n \"Composite attribute needs changed attribute on update call\",\n );\n }\n\n this.updateLastModification();\n\n this.children.forEach((child) => {\n if (child instanceof CompositeAttributeModel) {\n child.update(value, changedAttribute);\n } else if (\n child instanceof BaseAttributeModel &&\n child.equals(changedAttribute)\n ) {\n child.update(value);\n }\n });\n\n this.setChildrenOptionality();\n\n this.validate(value as string);\n\n return this;\n }\n\n override updateByAttribute(otherAttribute: AttributeModel) {\n if (otherAttribute instanceof CompositeAttributeModel) {\n otherAttribute.children.forEach((otherChild) => {\n if (!(otherChild instanceof CompositeAttributeChildCollection)) {\n const child = this.getChildByAttribute(otherChild);\n if (child) {\n child.updateByAttribute(otherChild);\n }\n }\n });\n } else {\n console.error(\n `update of composite attribute with ${otherAttribute.type} not supported`,\n );\n }\n }\n\n setChildrenOptionality() {\n const childrenAreOptional =\n !this.mandatory && this.children.every((child) => child.value === null);\n\n this.children.forEach((child) => {\n if (child instanceof BaseAttributeModel) {\n child.mandatory =\n childrenAreOptional || !child.configuredMandatory\n ? false\n : child.configuredMandatory;\n }\n });\n }\n\n override get readonly() {\n return (\n super.readonly ??\n this.children.every(\n (child) => child instanceof BaseAttributeModel && child.readonly,\n )\n );\n }\n\n override set readonly(readonly: boolean) {\n super.readonly = readonly;\n }\n\n override get readonlyvalue() {\n return this.children.readonlyvalue;\n }\n\n override get initvalue() {\n return this.children.initvalue;\n }\n\n override getFormData() {\n return { [this.name]: this.value };\n }\n\n override getValue(): MaybeAttributeValue {\n return this.children.value as MaybeAttributeValue;\n }\n\n getChildrenIds() {\n const values = this.data.value;\n if (Array.isArray(values)) {\n return values.map((val) => {\n if (typeof val === \"object\" && val != null && \"_id\" in val) {\n return val._id;\n }\n return undefined;\n });\n } else if (values != null) {\n if (typeof values === \"object\" && \"_id\" in values) {\n return [values._id];\n }\n }\n return [];\n }\n\n override get isResult() {\n return this._isResult;\n }\n\n override set isResult(isResult: boolean) {\n this._isResult = isResult;\n\n this.children.forEach((child) => {\n if (!(child instanceof CompositeAttributeChildCollection)) {\n child.isResult = isResult;\n }\n });\n }\n\n override indicateContentConfiguration(\n contentConfiguration: ContentConfiguration,\n ) {\n if (contentConfiguration) {\n this.children.forEach((child) => {\n if (!(child instanceof CompositeAttributeChildCollection)) {\n child.indicateContentConfiguration(contentConfiguration);\n }\n });\n }\n }\n\n override equals(otherAttribute: AttributeModel): boolean {\n return (\n (this.key === otherAttribute.key &&\n this.parentKey === otherAttribute.parentKey) ||\n this.children.some(\n (child) =>\n child instanceof BaseAttributeModel && child.equals(otherAttribute),\n )\n );\n }\n\n override get readonlyWidth(): ATTRIBUTE_WIDTH {\n if (this.type === \"composite\") {\n return ATTRIBUTE_WIDTH.LARGE;\n }\n\n // range\n const type =\n this.start instanceof BaseAttributeModel ? this.start.type : \"\";\n switch (type) {\n case \"datetime\":\n return ATTRIBUTE_WIDTH.LARGE;\n case \"timestamp\":\n return ATTRIBUTE_WIDTH.EXTRA_LARGE;\n default:\n return ATTRIBUTE_WIDTH.MEDIUM;\n }\n }\n}\n","import { TIMEVERSION_FILTER_NAME } from \"../../constants/Constants\";\nimport { TITLE } from \"../../layouthints/LayoutHints\";\nimport { hasAllContentInData } from \"../../settings/Settings\";\nimport { BaseModel } from \"../base/BaseModel\";\nimport { ConceptDetailModel } from \"../concepts/ConceptDetailModel\";\nimport { LinkCollection } from \"../links/LinkCollection\";\nimport { AttributeCollection } from \"./AttributeCollection\";\nimport { AttributeContent } from \"./AttributeContent\";\nimport { ChoiceAttributeOptionCollection } from \"./ChoiceAttributeOptionCollection\";\n\nimport type { Contributions, ISO_DATE } from \"../../types/types\";\nimport type { ContentConfigurationElements } from \"../contentconfiguration/ContentConfigurationElements\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ListItemModel } from \"../list/ListItemModel\";\nimport type { ModelOptions, ModelWithChildModels } from \"../types\";\n\nexport interface ChoiceAttributeOptionModelOptions extends ModelOptions {\n referenceDate: ISO_DATE;\n}\n\nexport class ChoiceAttributeOptionModel\n extends BaseModel\n implements ModelWithChildModels\n{\n private _code: string;\n private _isSelected: boolean;\n\n private _concept: ConceptDetailModel | undefined;\n private _referenceDate: ISO_DATE;\n\n private _level: number;\n\n private _attributeCollection: AttributeCollection;\n private _children: ChoiceAttributeOptionCollection;\n\n private _links: LinkCollection;\n\n private _content: AttributeContent;\n private _isUser = false;\n\n constructor(\n selectedValues: string[] = [],\n option: Contributions = {},\n modelOptions?: ChoiceAttributeOptionModelOptions,\n ) {\n super({}, option);\n\n this._code = this.getContributionAsString(\n \"code\",\n this.getContributionAsString(\"key\", \"\"),\n );\n this._isSelected = selectedValues.includes(this.code);\n this._referenceDate =\n modelOptions?.referenceDate || new Date().toISOString().split(\"T\")[0];\n\n this._level = 0;\n this._attributeCollection = this.createAttributeCollection(modelOptions);\n this._children = this.addChildren(selectedValues, option, modelOptions);\n this._links = new LinkCollection(\n this.contributions._links as Record<string, unknown>,\n {},\n { origin: modelOptions?.origin, contextPath: modelOptions?.contextPath },\n );\n this._content = this.createContent();\n this._isUser = \"optionType\" in option && option.optionType === \"user\";\n }\n\n get type() {\n return \"option\";\n }\n\n static createFromListItemModel(listitem: ListItemModel) {\n const option = new ChoiceAttributeOptionModel();\n option.code = listitem.id?.toString() ?? \"\";\n // TODO: how to handle this\n // option.attributeCollection = listitem.attributeCollection.clone();\n // option.links = listitem.links.clone();\n return option;\n }\n\n /**\n * Indicates that this a choice attribute option model, used when adding options to a choice attribute\n * @returns {boolean}\n */\n get isChoiceAttributeOptionModel() {\n return true;\n }\n\n getInitialChildModelLinks() {\n const initialLinks = [];\n\n if (!this.hasContentFromData() && this.conceptLink) {\n initialLinks.push(this.conceptLink);\n }\n\n if (this.children) {\n initialLinks.push(...this.children.getInitialChildModelLinks());\n }\n\n return initialLinks;\n }\n\n setChildModels(models: ModelWithChildModels[], errors: ErrorResponse[] = []) {\n const conceptHref = this.conceptLink?.href;\n if (conceptHref) {\n const concept = models.find((model) => {\n if (model instanceof ConceptDetailModel) {\n return model.selfhref.equalsWithParameters(conceptHref);\n }\n return false;\n });\n\n this.concept = concept as ConceptDetailModel | undefined;\n }\n\n if (this.children) {\n this.children.setChildModels(models, errors);\n }\n }\n\n /**\n * Get code of option\n */\n get code() {\n return this._code;\n }\n\n set code(code: string) {\n this._code = code;\n }\n\n equals(model: ChoiceAttributeOptionModel) {\n return this.code.toString() === model.code.toString();\n }\n\n createAttributeCollection(modelOptions?: ChoiceAttributeOptionModelOptions) {\n const contributions = this.getContributionAsArray(\n \"elementsContributions\",\n [],\n );\n const data = this.getContributionAsObject(\"elements\", {}) as Record<\n string,\n unknown\n >;\n return new AttributeCollection(data, contributions, {\n origin: modelOptions?.origin,\n contextPath: modelOptions?.contextPath,\n isReadonly: true,\n });\n }\n\n /**\n * Retrieve attributes for Composite codemaps (e.g. table and case list codemaps)\n */\n get attributeCollection() {\n return this._attributeCollection;\n }\n\n set attributeCollection(attributeCollection: AttributeCollection) {\n this._attributeCollection = attributeCollection;\n }\n\n /**\n * Get label of option for simple codemaps (e.g. static codemap)\n */\n get label(): string {\n const contributionsLabel = this.getContributionAsString(\"label\");\n if (contributionsLabel) {\n return contributionsLabel;\n }\n\n if (this.attributeCollection.hasItems()) {\n const title = this.attributeCollection.getAttributeByLayoutHint(TITLE);\n\n if (title) {\n return title.readonlyvalue;\n }\n\n if (this.attributeCollection.first) {\n return this.attributeCollection.first.readonlyvalue;\n }\n }\n\n return \"\";\n }\n\n /**\n * Retrieve the first permitted label to render when a concept and contentConfiguration is available\n * Be aware that permission could be in place for labels from a concept.\n */\n getContentConfiguredLabel(\n contentConfiguration?: ContentConfigurationElements,\n ) {\n if (this.hasContentFromData()) {\n return this.content?.label || this.label;\n }\n\n if (contentConfiguration) {\n return contentConfiguration.getContentConfiguredLabel(\n this.concept,\n this.label,\n );\n }\n\n return undefined;\n }\n\n /**\n * Indicates if content comes from the data service\n */\n hasContentFromData() {\n return hasAllContentInData();\n }\n\n get content() {\n return this._content;\n }\n\n addChildren(\n selectedValues: string[] = [],\n option: object = {},\n modelOptions?: ChoiceAttributeOptionModelOptions,\n ) {\n // When contributions contain elements this is a list not nested options\n if (\"elements\" in option) {\n return new ChoiceAttributeOptionCollection();\n }\n\n const children = \"children\" in option ? option.children : [];\n\n return ChoiceAttributeOptionCollection.create(\n {\n value: selectedValues,\n },\n { options: children ?? [] },\n modelOptions,\n );\n }\n\n get children() {\n return this._children;\n }\n\n createContent() {\n return AttributeContent.create(this.getContributionAsObject(\"content\"));\n }\n\n /**\n * Indicates if option is selected\n */\n get selected() {\n return this._isSelected;\n }\n\n /**\n * Set selected property of option\n */\n set selected(selected: boolean) {\n this._isSelected = selected;\n }\n\n /**\n * Retrieve count of filter for option\n */\n get count() {\n return this.getContributionAsNumber(\"count\");\n }\n\n /**\n * Retrieve links of attribute\n */\n get links() {\n return this._links;\n }\n\n set links(links: LinkCollection) {\n this._links = links;\n }\n\n get selfhref() {\n return this.links.getLinkByKey(\"self\")?.href;\n }\n\n /**\n * referenceDate received from attribute\n */\n get referenceDate() {\n return this._referenceDate;\n }\n\n /**\n */\n set referenceDate(date: ISO_DATE) {\n this._referenceDate = date;\n }\n\n /**\n * Retrieve concept link of attribute when available\n */\n get conceptLink() {\n const conceptLink = this.links.getLinkByKey(\"concept\");\n\n if (conceptLink) {\n conceptLink.href = conceptLink.href.addParameter(\n TIMEVERSION_FILTER_NAME,\n this.referenceDate,\n );\n\n conceptLink.isCacheable = true;\n }\n\n return conceptLink;\n }\n\n /**\n * Get concept information\n */\n get concept() {\n return this._concept;\n }\n\n /**\n * Set the concept\n */\n set concept(concept) {\n this._concept = concept;\n }\n\n /**\n * Get level of option, used in tree view choice attributes (taxonomy)\n */\n get level() {\n return this._level;\n }\n\n /**\n * Set level of option\n */\n set level(level: number) {\n this._level = level;\n }\n\n get isBooleanType() {\n return this.getContributionAsBoolean(\"isBooleanType\", false);\n }\n\n get hasAlternativeLabel() {\n return this.getContributionAsBoolean(\"hasAlternativeLabel\", false);\n }\n\n get isUser() {\n return this._isUser;\n }\n\n mergeOption(withOption: ChoiceAttributeOptionModel) {\n this.concept = withOption.concept;\n\n if (this.children != null && withOption.children != null) {\n this.children.mergeOptions(withOption.children);\n }\n }\n}\n","import { getContextPathModularUI } from \"../../settings/Paths\";\nimport { ResourceCollection } from \"../base/ResourceCollection\";\nimport { ListHeaderModel } from \"../list/ListHeaderModel\";\nimport { ChoiceAttributeOptionModel } from \"./ChoiceAttributeOptionModel\";\n\nimport type { Contributions, ISO_DATE } from \"../../types/types\";\nimport type { ChoiceAttributeOptionModelOptions } from \"./ChoiceAttributeOptionModel\";\nimport type { AttributeContributions, MaybeAttributeValue } from \"./types\";\n\nexport class ChoiceAttributeOptionCollection extends ResourceCollection<ChoiceAttributeOptionModel> {\n private _modelOptions: ChoiceAttributeOptionModelOptions;\n private _headers: ListHeaderModel[] = [];\n private _sortOptions = false;\n\n constructor(modelOptions?: ChoiceAttributeOptionModelOptions) {\n super();\n this._modelOptions = modelOptions || {\n origin: \"\",\n contextPath: getContextPathModularUI(),\n referenceDate: new Date().toISOString().split(\"T\")[0],\n };\n }\n\n set sortOptions(sortOptions: boolean) {\n this._sortOptions = sortOptions;\n\n this.collection.forEach((option) => {\n if (option.children) {\n option.children.sortOptions = sortOptions;\n }\n });\n }\n\n get sortOptions() {\n return this._sortOptions;\n }\n\n static create(\n data: object = {},\n contributions: object = {},\n modelOptions?: ChoiceAttributeOptionModelOptions,\n ): ChoiceAttributeOptionCollection {\n const collection = new ChoiceAttributeOptionCollection(modelOptions);\n\n if (\"type\" in contributions && contributions.type === \"boolean\") {\n const value = \"value\" in data ? data.value : undefined;\n collection.addBooleanOptions(value as MaybeAttributeValue, contributions);\n } else if (\"dynamicschema\" in data && data.dynamicschema != null) {\n collection.addDynamicSchema(data, contributions);\n } else if (\"options\" in contributions && contributions.options != null) {\n collection.addOptions(data, contributions);\n }\n\n if (\"children\" in contributions && Array.isArray(contributions.children)) {\n collection.addHeaders(contributions.children);\n }\n\n return collection;\n }\n\n /**\n * Retrieve all items in collection\n */\n override get all() {\n return this.sortOptions\n ? this.collection.sort((a, b) => a.label.localeCompare(b.label))\n : this.collection;\n }\n\n private getSelectedOptions(data: object) {\n const selectedOptions = [];\n\n if (\"options\" in data && Array.isArray(data.options)) {\n selectedOptions.push(\n ...data.options\n .filter((option) => option.selected)\n .map((option) => option.key),\n );\n } else if (\"value\" in data) {\n if (\"value\" in data && Array.isArray(data.value)) {\n selectedOptions.push(...data.value);\n } else if (typeof data.value === \"boolean\") {\n selectedOptions.push(data.value.toString());\n } else {\n selectedOptions.push(data.value);\n }\n }\n\n return selectedOptions;\n }\n\n private getOptionCount(code: string, options: object[]) {\n if (Array.isArray(options)) {\n const foundOption = options.find(\n (option) => \"key\" in option && option.key === code,\n );\n if (foundOption) {\n return \"count\" in foundOption && typeof foundOption.count === \"number\"\n ? foundOption.count\n : undefined;\n }\n }\n\n return undefined;\n }\n\n /**\n */\n addOptions(\n data: object,\n contributions: object,\n ): ChoiceAttributeOptionCollection {\n const selectedValues = this.getSelectedOptions(data);\n\n if (\"options\" in contributions && Array.isArray(contributions.options)) {\n const options =\n \"options\" in data && Array.isArray(data.options) ? data.options : [];\n\n contributions.options.forEach((optionContributions) => {\n const optionCode = optionContributions.code || optionContributions.key;\n const optionType =\n \"optionType\" in contributions ? contributions.optionType : \"generic\";\n\n this.addOption(selectedValues, {\n ...optionContributions,\n count: this.getOptionCount(optionCode, options),\n optionType: optionType,\n });\n });\n }\n\n return this;\n }\n\n /**\n * Create options based on data and dynamischema\n */\n addDynamicSchema(\n data: object,\n contributions: object,\n ): ChoiceAttributeOptionCollection {\n const selectedValues = this.getSelectedOptions(data);\n\n if (\"dynamicschema\" in data && Array.isArray(data.dynamicschema)) {\n const options =\n \"options\" in data && Array.isArray(data.options) ? data.options : [];\n const children =\n \"children\" in contributions ? contributions.children : undefined;\n const optionType =\n \"optionType\" in contributions ? contributions.optionType : \"generic\";\n\n data.dynamicschema.forEach((optionDynamicschema) => {\n this.addOption(selectedValues, {\n ...optionDynamicschema,\n count: this.getOptionCount(optionDynamicschema.code, options),\n optionType,\n elementsContributions: children,\n });\n });\n }\n\n return this;\n }\n\n addBooleanOption(\n code: \"true\" | \"false\",\n defaultLabel: string,\n data: string | string[],\n options: object[] = [],\n ) {\n const foundOption = options.find(\n (option) => \"code\" in option && option.code === code,\n );\n\n const label =\n foundOption && \"label\" in foundOption ? foundOption.label : defaultLabel;\n\n this.addOption(data, {\n code,\n label,\n isBooleanType: true,\n hasAlternativeLabel: foundOption != null,\n });\n }\n\n /**\n * Create two static options for true and false,\n * there might be alternative labels configured for each option value\n */\n addBooleanOptions(value: MaybeAttributeValue, contributions: Contributions) {\n const optionValue = value == null ? [] : [value.toString()];\n\n const options =\n \"options\" in contributions && Array.isArray(contributions.options)\n ? contributions.options\n : [];\n\n this.addBooleanOption(\"true\", \"Yes\", optionValue, options);\n this.addBooleanOption(\"false\", \"No\", optionValue, options);\n\n return this;\n }\n\n /**\n */\n addOption(\n data: string | string[],\n contributions: Record<string, unknown>,\n ): ChoiceAttributeOptionCollection {\n const optionModel = new ChoiceAttributeOptionModel(\n Array.isArray(data) ? data : [data],\n contributions,\n this._modelOptions,\n );\n\n this.add(optionModel);\n\n return this;\n }\n\n getOptionByCode(code: string) {\n return this.collection.find((option) => option.code === code);\n }\n\n hasOptionByCode(code: string) {\n return this.collection.some((option) => option.code === code);\n }\n\n /**\n * Get all options that have selected property true\n */\n get selected() {\n const selectedOptions: ChoiceAttributeOptionModel[] = [];\n\n this.collection.forEach((option: ChoiceAttributeOptionModel) => {\n if (option.selected && option.selected === true) {\n selectedOptions.push(option);\n }\n\n if (option.children) {\n selectedOptions.push(...option.children.selected);\n }\n });\n\n return selectedOptions;\n }\n\n /**\n * Deselect all options\n */\n deselectAll() {\n this.collection = this.collection.map((option) => {\n option.selected = false;\n\n if (option.children) {\n option.children.deselectAll();\n }\n\n return option;\n });\n }\n\n /**\n * Select an option by it's code\n */\n select(optionCode: string) {\n this.toggle(optionCode, \"select\");\n }\n\n /**\n * Deselect an option by it's code\n */\n deselect(optionCode: string) {\n this.toggle(optionCode, \"deselect\");\n }\n\n /**\n * Toggle an option by it's code\n */\n toggle(optionCode: string, action: \"select\" | \"deselect\") {\n this.collection = this.collection.map((option) => {\n if (option.code === optionCode) {\n option.selected = action === \"select\";\n } else if (option.children) {\n option.children.toggle(optionCode, action);\n }\n\n return option;\n });\n }\n\n setReferenceDate(date: ISO_DATE) {\n return this.collection.map((option) => {\n option.referenceDate = date;\n if (option.children) {\n option.children.referenceDate = date;\n }\n\n return option;\n });\n }\n\n set referenceDate(date: ISO_DATE) {\n this.collection = this.setReferenceDate(date);\n }\n\n addHeaders(headers: Record<string, unknown>[]) {\n this._headers = headers.map(\n (child) =>\n new ListHeaderModel(child as Record<string, AttributeContributions>),\n );\n }\n\n get headers() {\n if (this._headers) {\n return this._headers;\n }\n\n return [];\n }\n\n /**\n */\n mergeOptions(\n withOptions: ChoiceAttributeOptionCollection,\n addNotExistingOptions = false,\n removeNotExistingOptions = false,\n ) {\n const newCollection: ChoiceAttributeOptionModel[] = [];\n\n this.collection.forEach((option) => {\n const foundOption = withOptions.find(\n (withOption) => withOption.code === option.code,\n );\n if (foundOption) {\n option.mergeOption(foundOption);\n newCollection.push(option);\n } else if (!removeNotExistingOptions) {\n newCollection.push(option);\n }\n });\n\n if (addNotExistingOptions) {\n this.collection = [\n ...newCollection,\n ...withOptions.filter(\n (option) => !this.collection.some((opt) => opt.code === option.code),\n ),\n ];\n } else {\n this.collection = newCollection;\n }\n }\n\n override some(\n callbackfn: (\n value: ChoiceAttributeOptionModel,\n index: number,\n array: ChoiceAttributeOptionModel[],\n ) => boolean,\n thisArg?: never,\n ): boolean {\n return this.collection.some((option, optionIndex, collectionArray) => {\n const result = callbackfn(option, optionIndex, collectionArray);\n if (!result && option.children) {\n return option.children.some(callbackfn, thisArg);\n }\n return result;\n });\n }\n}\n","import { ATTRIBUTE_WIDTH } from \"../../constants/Constants\";\nimport {\n RENDER_SECTION_LABEL,\n SORT_OPTIONS,\n} from \"../../layouthints/LayoutHints\";\nimport { ConceptDetailModel } from \"../concepts/ConceptDetailModel\";\nimport { ContentConfigurationElements } from \"../contentconfiguration/ContentConfigurationElements\";\nimport { BaseAttributeModel } from \"./BaseAttributeModel\";\nimport { ChoiceAttributeOptionCollection } from \"./ChoiceAttributeOptionCollection\";\nimport { ChoiceAttributeOptionModel } from \"./ChoiceAttributeOptionModel\";\nimport { CompositeAttributeModel } from \"./CompositeAttributeModel\";\nimport { ATTRIBUTE_TYPE } from \"./constants\";\n\nimport type { ISO_DATE } from \"../../types/types\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ErrorObjectData } from \"../form/types\";\nimport type { ModelOptions, ModelWithChildModels } from \"../types\";\nimport type {\n AttributeContributions,\n AttributeData,\n AttributeModel,\n ChoiceAttributeContributions,\n MaybeAttributeValue,\n} from \"./types\";\n\nexport enum CHOICETYPE {\n CHECKBOX = \"checkbox\",\n RADIOBUTTON = \"radiobutton\",\n COMBOBOX = \"combobox\",\n LIST = \"list\",\n LISTVIEW = \"listview\",\n TABLE = \"table\",\n LONGLIST = \"longlist\",\n TOGGLE = \"toggle\",\n}\n\n/**\n * Model for a choice attribute\n */\nexport class ChoiceAttributeModel<\n C extends ChoiceAttributeContributions = ChoiceAttributeContributions,\n> extends BaseAttributeModel<C> {\n private _options: ChoiceAttributeOptionCollection;\n\n constructor(\n attribute?: AttributeData,\n attributeContributions?: C,\n modelOptions?: ModelOptions,\n ) {\n super(attribute, attributeContributions, modelOptions);\n\n this.attributeReferenceDate = this.getDataAsString(\n \"referenceDate\",\n new Date().toISOString().split(\"T\")[0],\n );\n this._options = ChoiceAttributeOptionCollection.create(\n attribute,\n attributeContributions,\n { ...modelOptions, referenceDate: this.referenceDate },\n );\n\n if (this.layouthint.has(SORT_OPTIONS)) {\n this._options.sortOptions = true;\n }\n }\n\n static override isApplicableModel(contributions: AttributeContributions) {\n let type = \"\";\n if (\"type\" in contributions && typeof contributions.type === \"string\") {\n type = contributions.type;\n }\n\n if (type === \"choice\" || type === \"array\") {\n return true;\n }\n\n if (type !== \"composite\" && type !== \"boolean\") {\n return \"enumerated\" in contributions || \"options\" in contributions;\n }\n\n return false;\n }\n\n override get type() {\n const optionMode = this.getContributionAsString(\"optionMode\", \"\");\n const hasLookupLink = this.lookupLink || this.lookupListLink;\n\n if (\n optionMode === \"lookup\" ||\n (optionMode === \"dynamicWithThreshold\" && hasLookupLink)\n ) {\n return ATTRIBUTE_TYPE.LOOKUP;\n }\n\n return ATTRIBUTE_TYPE.CHOICE;\n }\n\n override getInitialChildModelLinks() {\n const links = [];\n\n if (this.hasContentConfiguration()) {\n if (!this.hasContentFromData() && this.conceptLink) {\n links.push(this.conceptLink);\n }\n\n links.push(...this.options.getInitialChildModelLinks());\n }\n\n return links;\n }\n\n override setChildModels(\n models: ModelWithChildModels[],\n errors: ErrorResponse[],\n ) {\n const conceptLinkHref = this.conceptLink?.href;\n if (conceptLinkHref) {\n const model = models.find((model) => {\n if (model instanceof ConceptDetailModel) {\n return model.selfhref?.equalsWithParameters(conceptLinkHref);\n }\n return false;\n });\n this.concept = model as ConceptDetailModel | undefined;\n }\n this.options.setChildModels(models, errors);\n }\n\n get optionType() {\n return this.contributions?.optionType ?? \"generic\";\n }\n\n get isUser() {\n return this.optionType === \"user\";\n }\n\n /**\n * Retrieve lookup service link\n */\n get lookupLink() {\n return this.links.getLinkByKey(\"lookupOptions\");\n }\n\n /**\n * Retrieve lookup service as list link\n */\n get lookupListLink() {\n return this.links.getLinkByKey(\"lookupList\");\n }\n\n get lookupListLabel() {\n return this.contributions.lookupList?.label ?? \"\";\n }\n\n /**\n * Retrieve reference date of attribute which can be used as entryDate for content\n */\n override get referenceDate(): ISO_DATE {\n return this.attributeReferenceDate;\n }\n\n /**\n * Set reference date for concepts and content\n */\n override set referenceDate(date: string) {\n this.attributeReferenceDate = date;\n this.options.referenceDate = date;\n }\n\n /**\n * Retrieve available choice options\n */\n get options() {\n return this._options;\n }\n\n /**\n * Getting all enabled options\n */\n get selected() {\n return this.options.selected.map(\n (option: ChoiceAttributeOptionModel) => option.code,\n );\n }\n\n /**\n * Flatten options and filter out the options that are not selected\n */\n override get readonlyvalue() {\n return this.options.selected.map((option) => option.label).join(\", \");\n }\n\n override get initvalue() {\n const initvalue = this.getInitValue();\n if (Array.isArray(initvalue) && initvalue.length !== 0) {\n return initvalue;\n }\n return initvalue;\n }\n\n /**\n * Retrieve list of selected options, joined with comma\n */\n override getValue() {\n return this.options.selected.length > 0\n ? this.options.selected.map((option) => option.code).join(\",\")\n : null;\n }\n\n override hasValue() {\n return this.options.selected.length > 0;\n }\n\n /**\n * Get input value of attribute\n */\n override getInputValue() {\n return this.selected.join(\",\");\n }\n\n /**\n * Setting an option selected or unselected based on the current state\n */\n toggleOption(code: string) {\n if (this.selected.includes(code)) {\n this.disableOption(code);\n } else {\n this.enableOption(code);\n }\n }\n\n /**\n * Enable a option\n */\n enableOption(code: string) {\n if (!this.isMultiple) {\n this.options.deselectAll();\n }\n\n this.options.select(code);\n this.inputvalue = this.getInputValue();\n }\n\n /**\n * Disable a option\n */\n disableOption(code: string) {\n this.options.deselect(code);\n this.inputvalue = this.getInputValue();\n }\n\n /**\n * Add a new option to the collection of lookup options\n */\n addOption(option: Record<string, unknown>) {\n if (!this.isMultiple) {\n this.options.deselectAll();\n }\n\n const code =\n \"code\" in option && typeof option.code === \"string\" ? option.code : \"\";\n\n if (this.options.find((opt) => opt.code === code) === undefined) {\n this.options.addOption(code, option);\n }\n }\n\n /**\n * Getting the type of choice filter. For instance checkbox, radiobutton, combobox.\n */\n get choicetype() {\n return (\n [\n CHOICETYPE.CHECKBOX,\n CHOICETYPE.RADIOBUTTON,\n CHOICETYPE.COMBOBOX,\n CHOICETYPE.LIST,\n CHOICETYPE.LISTVIEW,\n CHOICETYPE.TABLE,\n CHOICETYPE.LONGLIST,\n CHOICETYPE.TOGGLE,\n ].find((hint) => this.layouthint.has(hint)) ?? CHOICETYPE.CHECKBOX\n );\n }\n\n /**\n * Can multiple options be selected\n */\n get isMultiple() {\n return (\n this.getContributionAsBoolean(\"multiplechoice\") ??\n this.choicetype === CHOICETYPE.CHECKBOX\n );\n }\n\n /**\n * Check if options need to be rendered as tree\n */\n get isTree() {\n return this.getContributionAsArray(\"options\", []).some(\n (option) => \"children\" in option,\n );\n }\n\n /**\n * Reset choice attribute to unselected list\n */\n reset() {\n this.options.deselectAll();\n }\n\n override mergeAttribute(\n oldAttribute: AttributeModel,\n addNotExistingOptions = false,\n removeNotExistingOptions = false,\n ) {\n // when attribute is readonly, don't merge the options no modifications necessary\n if (!this.readonly && oldAttribute instanceof ChoiceAttributeModel) {\n this.concept = oldAttribute.concept;\n this.options.mergeOptions(\n oldAttribute.options,\n addNotExistingOptions ?? this.type === \"lookup\",\n removeNotExistingOptions,\n );\n this.options.deselectAll();\n\n if (oldAttribute.isValid && oldAttribute.inputvalue !== null) {\n this.update(oldAttribute.inputvalue);\n }\n }\n }\n\n /**\n * Update attribute by name and value\n */\n update(value: MaybeAttributeValue) {\n if (this.readonly) {\n return this;\n }\n\n this.updateLastModification();\n\n let values;\n\n if (Array.isArray(value)) {\n values = value;\n } else if (typeof value === \"string\" && this.isMultiple) {\n values = value.split(\",\");\n } else {\n values = [value];\n }\n values.forEach((val) => {\n if (val instanceof ChoiceAttributeOptionModel) {\n // option does not exist in existing options, add it. This can happen when lookup list has other options then lookup options\n if (!this.options.some((option) => option.equals(val))) {\n this.options.add(val);\n }\n\n this.toggleOption(val.code);\n } else if (\n typeof val === \"string\" &&\n this.options.some((option) => option.code.toString() === val)\n ) {\n this.toggleOption(val);\n }\n });\n\n return this;\n }\n\n updateByAttribute(otherAttribute: AttributeModel) {\n this.reset();\n if (\n otherAttribute instanceof ChoiceAttributeModel ||\n otherAttribute instanceof CompositeAttributeModel\n ) {\n let otherValue;\n if (otherAttribute instanceof ChoiceAttributeModel) {\n otherValue = otherAttribute.options.selected;\n } else if (otherAttribute instanceof CompositeAttributeModel) {\n otherValue = otherAttribute.getChildrenIds();\n }\n if (otherValue != null) {\n this.update(otherValue as MaybeAttributeValue);\n }\n } else {\n console.error(\n `update of choice attribute with ${otherAttribute.type} not supported`,\n );\n }\n }\n\n /**\n * Registers a missing error that was received from the server\n */\n override addMissingError(receivedAttribute?: AttributeModel) {\n if (this.isChangedSince(0)) {\n this.attributeErrors.addServerError(\"Constraint.Missing\");\n }\n // update choice options\n if (receivedAttribute instanceof ChoiceAttributeModel) {\n this.mergeAttribute(receivedAttribute, true, true);\n }\n }\n\n override setHasContentConfiguration(hasContentConfiguration: boolean) {\n super.setHasContentConfiguration(\n this.contentConfiguration != undefined || hasContentConfiguration,\n );\n }\n\n /**\n * Get content configuration configured on the attribute.\n * Only applicable for taxonomy element and knowledge codemaps,\n * content configuration for instrument questions is available on the form object\n */\n get contentConfiguration() {\n if (!this.contributions.content?.optionElements) {\n return undefined;\n }\n\n // Add RENDER_SECTION_LABEL to all content configuration to make sure the label of a section is always rendered on taxonomy and knowlege codemaps\n const optionElementConfig = this.contributions.content.optionElements.map(\n (optionElement) => {\n if (\"contentElement\" in optionElement) {\n return {\n contentElement: {\n layouthint: [RENDER_SECTION_LABEL],\n ...optionElement.contentElement,\n },\n };\n }\n\n return optionElement;\n },\n );\n\n return new ContentConfigurationElements(optionElementConfig);\n }\n\n /**\n * Get placeholder text\n */\n override get placeholder() {\n return this.getContributionAsString(\"placeholder\", \"\");\n }\n\n /**\n * Registers an error that was received from a server response\n */\n override addServerError(error: ErrorObjectData) {\n const { id, message, properties, layouthint } = error;\n\n const ANSWER_OPTION_KEY = \"answer-option-key\";\n\n if (properties && ANSWER_OPTION_KEY in properties) {\n const optionKey = properties[ANSWER_OPTION_KEY];\n const foundOption = this.options.find(\n (option) => option.code === optionKey,\n );\n if (foundOption) {\n properties[ANSWER_OPTION_KEY] =\n foundOption.getContentConfiguredLabel(\n this.contentConfiguration ?? undefined,\n ) ?? \"\";\n }\n }\n\n this.attributeErrors.addServerError(id, message, properties, layouthint);\n }\n\n override get readonlyWidth(): ATTRIBUTE_WIDTH {\n return ATTRIBUTE_WIDTH.MEDIUM;\n }\n}\n","import { ATTRIBUTE_WIDTH } from \"../../constants/Constants\";\nimport { RENDER_SECTION_LABEL } from \"../../layouthints/LayoutHints\";\nimport { DateUtil } from \"../../utils/datetime/DateTimeUtil\";\nimport { ContentConfigurationElements } from \"../contentconfiguration/ContentConfigurationElements\";\nimport { BaseAttributeModel } from \"./BaseAttributeModel\";\nimport { CHOICETYPE } from \"./ChoiceAttributeModel\";\nimport { ChoiceAttributeOptionCollection } from \"./ChoiceAttributeOptionCollection\";\nimport { ChoiceAttributeOptionModel } from \"./ChoiceAttributeOptionModel\";\nimport { ATTRIBUTE_TYPE } from \"./constants\";\n\nimport type { Contributions, ISO_DATE } from \"../../types/types\";\nimport type { ModelOptions } from \"../types\";\nimport type {\n AttributeData,\n AttributeModel,\n BooleanAttributeContributions,\n MaybeAttributeValue,\n} from \"./types\";\n\nexport class BooleanAttributeModel extends BaseAttributeModel<BooleanAttributeContributions> {\n private _referenceDate: ISO_DATE;\n private _options: ChoiceAttributeOptionCollection;\n\n constructor(\n data?: AttributeData,\n contributions?: BooleanAttributeContributions,\n modelOptions?: ModelOptions,\n ) {\n super(data, contributions, modelOptions);\n\n this._referenceDate = this.getDataAsString(\n \"referenceDate\",\n DateUtil.now(),\n ) as ISO_DATE;\n this._options = ChoiceAttributeOptionCollection.create(\n data,\n contributions,\n { ...modelOptions, referenceDate: this.referenceDate },\n );\n }\n\n static override isApplicableModel(contributions: Contributions) {\n return \"type\" in contributions && contributions.type === \"boolean\";\n }\n\n override get type() {\n return ATTRIBUTE_TYPE.BOOLEAN;\n }\n\n /**\n * Retrieve reference date of attribute which can be used as entryDate for content\n */\n override get referenceDate() {\n return this._referenceDate as ISO_DATE;\n }\n\n /**\n * Set reference date for concepts and content\n */\n override set referenceDate(date: ISO_DATE) {\n this._referenceDate = date;\n\n this.options.referenceDate = date;\n }\n\n /**\n * Getting the type of choice filter. For instance checkbox, radiobutton, combobox.\n */\n get choicetype(): CHOICETYPE {\n return (\n [\n CHOICETYPE.CHECKBOX,\n CHOICETYPE.RADIOBUTTON,\n CHOICETYPE.COMBOBOX,\n CHOICETYPE.TOGGLE,\n ].find((hint) => this.layouthint.has(hint)) ?? CHOICETYPE.RADIOBUTTON\n );\n }\n\n /**\n * Can multiple options be selected\n */\n get isMultiple() {\n return false;\n }\n\n /**\n * Check if options need to be rendered as tree\n */\n get isTree() {\n return false;\n }\n\n override setHasContentConfiguration(hasContentConfiguration: boolean) {\n super.setHasContentConfiguration(\n this.contentConfiguration !== null || hasContentConfiguration,\n );\n }\n\n /**\n * Get content configuration configured on the attribute.\n * Only applicable for taxonomy element and knowledge codemaps,\n * content configuration for instrument questions is available on the form object\n */\n get contentConfiguration() {\n if (\n \"content\" in this.contributions &&\n typeof this.contributions.content === \"object\" &&\n this.contributions.content !== null &&\n \"optionElements\" in this.contributions.content &&\n Array.isArray(this.contributions.content.optionElements)\n ) {\n // Add RENDER_SECTION_LABEL to all content configuration to make sure the label of a section is always rendered on taxonomy and knowlege codemaps\n const optionElementConfig = this.contributions.content.optionElements.map(\n (optionElement) => {\n if (\"contentElement\" in optionElement) {\n return {\n contentElement: {\n ...optionElement.contentElement,\n layouthint: [RENDER_SECTION_LABEL],\n },\n };\n }\n\n return optionElement;\n },\n );\n\n return new ContentConfigurationElements(optionElementConfig);\n }\n return null;\n }\n\n /**\n * Retrieve available choice options\n */\n get options() {\n return this._options;\n }\n\n /**\n * Getting all enabled options\n */\n get selected() {\n return this.options.selected.map((option) => option.code);\n }\n\n /**\n * Flatten options and filter out the options that are not selected\n */\n override get readonlyvalue() {\n return this.options.selected.map((option) => option.label).join(\", \");\n }\n\n override get initvalue() {\n const initvalue = this.getInitValue();\n if (Array.isArray(initvalue) && initvalue.length !== 0) {\n return initvalue;\n }\n return initvalue;\n }\n\n /**\n * Retrieve list of selected options, joined with comma\n */\n override getValue() {\n const selected = this.options.selected;\n return selected.length > 0 ? selected[0].code : null;\n }\n\n override hasValue(): boolean {\n return this.options.selected.length > 0;\n }\n\n /**\n * Get input value of attribute\n */\n override getInputValue() {\n return this.selected.join(\",\");\n }\n\n /**\n * Setting an option selected or unselected based on the current state\n */\n toggleOption(code: string) {\n if (this.selected.includes(code)) {\n this.disableOption(code);\n } else {\n this.enableOption(code);\n }\n }\n\n /**\n * Enable a option\n */\n enableOption(code: string) {\n this.options.deselectAll();\n this.options.select(code);\n this.inputvalue = this.getInputValue();\n }\n\n /**\n * Disable a option\n */\n disableOption(code: string) {\n this.options.deselect(code);\n this.inputvalue = this.getInputValue();\n }\n\n /**\n * Reset boolean attribute to unselected list\n */\n reset() {\n this.options.deselectAll();\n }\n\n /**\n */\n override mergeAttribute(oldAttribute: AttributeModel) {\n // when attribute is readonly, don't merge the options no modifications necessary\n if (!this.readonly && oldAttribute instanceof BooleanAttributeModel) {\n this.concept = oldAttribute.concept;\n this.options.deselectAll();\n\n if (oldAttribute.isValid && oldAttribute.inputvalue !== null) {\n this.update(oldAttribute.inputvalue);\n }\n }\n }\n\n /**\n * Update attribute by name and value\n */\n override update(value: MaybeAttributeValue) {\n if (this.readonly) {\n return this;\n }\n\n this.updateLastModification();\n\n let values;\n\n if (Array.isArray(value)) {\n values = value;\n } else if (typeof value === \"string\" && this.isMultiple) {\n values = value.split(\",\");\n } else if (typeof value === \"string\") {\n values = [value === \"true\" ? \"true\" : \"false\"];\n } else {\n values = [JSON.stringify(value)];\n }\n\n values.forEach((val) => {\n if (val instanceof ChoiceAttributeOptionModel) {\n this.toggleOption(val.code);\n } else if (\n typeof val === \"string\" &&\n this.options.some((option) => option.code.toString() === val)\n ) {\n this.toggleOption(val);\n }\n });\n\n return this;\n }\n\n updateByAttribute(otherAttribute: AttributeModel) {\n this.reset();\n if (otherAttribute instanceof BooleanAttributeModel) {\n this.update(otherAttribute.value);\n } else {\n console.error(\n `update of boolean attribute with ${otherAttribute.type} not supported`,\n );\n }\n }\n\n override getFormData() {\n if (this.inError()) {\n return null;\n }\n\n if (!this.hasValue()) {\n // no value for checkbox and toggle is same as a false value\n if (this.choicetype === \"checkbox\" || this.choicetype === \"toggle\") {\n return { [this.name]: false };\n }\n\n return { [this.name]: null };\n }\n\n return { [this.name]: this.value === \"true\" };\n }\n\n override get readonlyWidth() {\n if (this.options.some((option) => option.hasAlternativeLabel)) {\n return ATTRIBUTE_WIDTH.SMALL;\n }\n\n return ATTRIBUTE_WIDTH.EXTRA_SMALL;\n }\n}\n","import { BaseAttributeModel } from \"./BaseAttributeModel\";\nimport { ATTRIBUTE_TYPE } from \"./constants\";\n\nimport type {\n AttributeContributions,\n AttributeModel,\n CaptchaAttributeContributions,\n MaybeAttributeValue,\n} from \"./types\";\n\nexport class CaptchaAttributeModel extends BaseAttributeModel<CaptchaAttributeContributions> {\n private _answer = \"\";\n\n static override isApplicableModel(contributions: AttributeContributions) {\n return contributions.type === ATTRIBUTE_TYPE.CAPTCHA;\n }\n\n override get type() {\n return ATTRIBUTE_TYPE.CAPTCHA;\n }\n\n /**\n * Update the attribute by name and value\n */\n update(value: MaybeAttributeValue) {\n this.updateLastModification();\n this.inputvalue = value;\n\n return this;\n }\n\n override updateByAttribute(_otherAttribute: AttributeModel) {\n // not supported\n }\n\n setAnswer(answer: string) {\n this._answer = answer;\n }\n\n /**\n * Retrieve the given answer for the captcha\n * The value of this attribute is the token id of the captcha\n */\n getAnswer() {\n return this._answer;\n }\n\n override get hasDynamicValidationData() {\n return false;\n }\n\n reset() {\n this._answer = \"\";\n this.inputvalue = \"\";\n }\n}\n","import { IllegalStateException } from \"../../../exceptions/IllegalStateException\";\nimport {\n DateTimeUtil,\n DateUtil,\n TimestampUtil,\n TimeUtil,\n} from \"../../../utils/datetime/DateTimeUtil\";\n\nimport type { ConstraintModel, MaybeAttributeValue } from \"../types\";\n\nconst INEXACT_DATE_ID = \"Constraint.Date.InexactDate\";\nconst OUT_OF_RANGE_ID = \"Constraint.Date.OutOfRange\";\nconst BELOW_MINIMUM_ID = \"Constraint.Date.BelowMinimum\";\nconst ABOVE_MAXIMUM_ID = \"Constraint.Date.AboveMaximum\";\n\nexport class DateBoundaryConstraint implements ConstraintModel {\n private _type: string;\n private _format: string;\n private _minDate: string | null;\n private _maxDate: string | null;\n\n constructor(\n type: string,\n minDate: string | null = null,\n maxDate: string | null = null,\n format = \"yyyy-MM-dd\",\n ) {\n this._type = type;\n this._format = format;\n this._minDate = minDate;\n this._maxDate = maxDate;\n }\n\n get type(): string {\n return this._type;\n }\n\n get id(): string {\n if (\n this.minDate !== null &&\n this.maxDate !== null &&\n this.minDate === this.maxDate\n ) {\n return INEXACT_DATE_ID;\n } else if (this.minDate !== null && this.maxDate !== null) {\n return OUT_OF_RANGE_ID;\n } else if (this.minDate !== null) {\n return BELOW_MINIMUM_ID;\n } else if (this.maxDate !== null) {\n return ABOVE_MAXIMUM_ID;\n }\n\n return \"Constraint.Date.NoBoundaryConstraint\";\n }\n\n get format(): string {\n return this._format;\n }\n\n get minDate(): string | null {\n return this._minDate;\n }\n\n get maxDate(): string | null {\n return this._maxDate;\n }\n\n get defaultMessage(): string {\n switch (this.id) {\n case INEXACT_DATE_ID:\n return \"Date must be precisely ${min-date}\"; // NOSONAR\n case OUT_OF_RANGE_ID:\n return \"Must be between ${min-date} and ${max-date}\"; // NOSONAR\n case BELOW_MINIMUM_ID:\n return \"Must be on or after ${min-date}\"; // NOSONAR\n case ABOVE_MAXIMUM_ID:\n return \"Must be on or before ${max-date}\"; // NOSONAR\n default:\n return \"\";\n }\n }\n\n get parameters(): { \"max-date\": string | null; \"min-date\": string | null } {\n return {\n \"min-date\": this.minDate\n ? this.formatUtil.toFormat(this.minDate, this.format)\n : null,\n \"max-date\": this.maxDate\n ? this.formatUtil.toFormat(this.maxDate, this.format)\n : null,\n };\n }\n\n hasValidation() {\n return true;\n }\n\n isExactDate(value: string) {\n if (this.minDate === null) {\n throw new IllegalStateException(\"isExactDate: Min and max date not set\");\n }\n\n return this.formatUtil.isSame(value, this.minDate, this.format);\n }\n\n isBetweenDates(value: string) {\n if (this.minDate === null || this.maxDate === null) {\n throw new IllegalStateException(\"isBetweenDate: Min or max date not set\");\n }\n\n return (\n this.isSameOrAfterMinDate(value) && this.isSameOrBeforeMaxDate(value)\n );\n }\n\n isSameOrAfterMinDate(value: string) {\n if (this.minDate == null) {\n throw new IllegalStateException(\"isSameOrAfterMinDate: Min date not set\");\n }\n\n return this.formatUtil.isSameOrAfter(value, this.minDate, this.format);\n }\n\n isSameOrBeforeMaxDate(value: string) {\n if (this.maxDate == null) {\n throw new IllegalStateException(\n \"isSameOrBeforeMaxDate: Max date not set\",\n );\n }\n\n return this.formatUtil.isSameOrBefore(value, this.maxDate, this.format);\n }\n\n get formatUtil():\n | typeof TimeUtil\n | typeof TimestampUtil\n | typeof DateTimeUtil\n | typeof DateUtil {\n switch (this.type) {\n case \"time\":\n return TimeUtil;\n case \"timestamp\":\n return TimestampUtil;\n case \"datetime\":\n return DateTimeUtil;\n default:\n return DateUtil;\n }\n }\n\n validate(value: MaybeAttributeValue) {\n if (typeof value !== \"string\") {\n throw new TypeError(\"isNotEmptyString: Not comparing to string\");\n }\n\n switch (this.id) {\n case INEXACT_DATE_ID:\n return this.isExactDate(value);\n case OUT_OF_RANGE_ID:\n return this.isBetweenDates(value);\n case BELOW_MINIMUM_ID:\n return this.isSameOrAfterMinDate(value);\n case ABOVE_MAXIMUM_ID:\n return this.isSameOrBeforeMaxDate(value);\n default:\n return true;\n }\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import { DateUtil } from \"../../../utils/datetime/DateTimeUtil\";\n\nimport type { ConstraintModel } from \"../types\";\n\nexport class DateTimeDateFormatConstraint implements ConstraintModel {\n private _format: string;\n private _formatLabel: string;\n\n constructor(format: string, formatLabel: string) {\n this._format = format;\n this._formatLabel = formatLabel;\n }\n\n get id(): string {\n return \"Constraint.DateFormat.InvalidFormat\";\n }\n\n get format(): string {\n return this._format;\n }\n\n get formatLabel(): string {\n return this._formatLabel;\n }\n\n hasValidation() {\n return true;\n }\n\n get defaultMessage(): string {\n return \"Date must be entered in the format ${format}\"; // NOSONAR\n }\n\n get parameters(): { format: string } {\n return { format: this.formatLabel };\n }\n\n validate(value: string) {\n if (!value) {\n return false;\n }\n\n return DateUtil.hasFormat(value, this.format);\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import { DATETIME_OFFSET_FORMAT } from \"../../../constants/Constants\";\nimport { isIncludeTimeOffsetInDateTimes } from \"../../../settings/Settings\";\nimport {\n DateTimeUtil,\n TimestampUtil,\n} from \"../../../utils/datetime/DateTimeUtil\";\n\nimport type { ConstraintModel } from \"../types\";\n\nexport class DatetimeFormatConstraint implements ConstraintModel {\n private _type: string;\n private _format: string;\n private _formatLabel: string;\n private _formatNoOffset: string;\n private _id = \"Constraint.DateTime.MissingValue\";\n\n constructor(type: string, format: string, formatLabel: string) {\n this._type = type;\n this._format = format;\n this._formatNoOffset = format.replace(DATETIME_OFFSET_FORMAT, \"\").trim();\n this._formatLabel = formatLabel;\n }\n\n get type(): string {\n return this._type;\n }\n\n get id(): string {\n return this._id;\n }\n\n get format(): string {\n return this._format;\n }\n\n get formatLabel(): string {\n return this._formatLabel;\n }\n\n hasValidation() {\n return true;\n }\n\n get defaultMessage(): string {\n return \"Date and time should both be entered\";\n }\n\n get parameters(): { format: string } {\n return { format: this.formatLabel };\n }\n\n get formatUtil(): typeof TimestampUtil | typeof DateTimeUtil {\n if (this.type === \"timestamp\") {\n return TimestampUtil;\n }\n\n return DateTimeUtil;\n }\n\n validate(value: string) {\n if (!value) {\n return false;\n }\n\n if (this.formatUtil.hasFormat(value, this.format)) {\n return true;\n }\n\n if (isIncludeTimeOffsetInDateTimes()) {\n const hasDateTime = this.formatUtil.hasFormat(\n value,\n this._formatNoOffset,\n );\n if (!hasDateTime) {\n this._id = \"Constraint.DateTime.MissingValue\";\n return false;\n } else if (!new RegExp(\"[+-](0[0-9]|1[0-4]):[0-5][0-9]\").test(value)) {\n this._id = \"Constraint.DateTime.MissingOffset\";\n return false;\n }\n }\n\n return false;\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import { TimeUtil } from \"../../../utils/datetime/DateTimeUtil\";\n\nimport type { ConstraintModel } from \"../types\";\n\nexport class DateTimeTimeFormatConstraint implements ConstraintModel {\n private _format: string;\n private _formatLabel: string;\n\n constructor(format: string, formatLabel: string) {\n this._format = format;\n this._formatLabel = formatLabel;\n }\n\n get id(): string {\n return \"Constraint.TimeFormat.InvalidFormat\";\n }\n\n get format(): string {\n return this._format;\n }\n\n get formatLabel(): string {\n return this._formatLabel;\n }\n\n hasValidation() {\n return true;\n }\n\n get defaultMessage(): string {\n return \"Time must be entered in the format ${format}\"; // NOSONAR\n }\n\n get parameters(): { format: string } {\n return { format: this.formatLabel };\n }\n\n validate(value: string) {\n if (!value) {\n return false;\n }\n\n return TimeUtil.hasFormat(value, this.format);\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import {\n ATTRIBUTE_WIDTH,\n DATETIME_OFFSET_FORMAT,\n ISO_DATE_FORMAT,\n} from \"../../constants/Constants\";\nimport { isIncludeTimeOffsetInDateTimes } from \"../../settings/Settings\";\nimport {\n DateTimeUtil,\n DateUtil,\n TimestampUtil,\n TimeUtil,\n} from \"../../utils/datetime/DateTimeUtil\";\nimport { BaseAttributeModel } from \"./BaseAttributeModel\";\nimport { ATTRIBUTE_TYPE } from \"./constants\";\nimport { ConstraintCollection } from \"./input-constraints/ConstraintCollection\";\nimport { DateBoundaryConstraint } from \"./input-constraints/DateBoundaryConstraint\";\nimport { DateTimeDateFormatConstraint } from \"./input-constraints/DateTimeDateFormatConstraint\";\nimport { DatetimeFormatConstraint } from \"./input-constraints/DatetimeFormatConstraint\";\nimport { DateTimeTimeFormatConstraint } from \"./input-constraints/DateTimeTimeFormatConstraint\";\n\nimport type { OffsetInfo } from \"../../utils/datetime/DateTimeUtil\";\nimport type { ErrorObjectData } from \"../form/types\";\nimport type { ModelOptions } from \"../types\";\nimport type {\n AttributeContributions,\n AttributeData,\n AttributeModel,\n DatetimeAttributeContributions,\n MaybeAttributeValue,\n} from \"./types\";\n\nexport class DatetimeAttributeModel<\n C extends DatetimeAttributeContributions = DatetimeAttributeContributions,\n> extends BaseAttributeModel<C> {\n private _dateInputFormat: string;\n\n constructor(\n attribute?: AttributeData,\n attributeContributions?: C,\n modelOptions?: ModelOptions,\n ) {\n super(attribute, attributeContributions, modelOptions);\n this._inputvalue = \"\";\n this._dateInputFormat = \"\";\n this.updateInitValue();\n }\n\n override get type() {\n return this.getContributionAsString(\"type\", \"date\") as ATTRIBUTE_TYPE;\n }\n\n static override isApplicableModel(contributions: AttributeContributions) {\n return (\n contributions.type === ATTRIBUTE_TYPE.DATE ||\n contributions.type === ATTRIBUTE_TYPE.TIME ||\n contributions.type === ATTRIBUTE_TYPE.DATETIME ||\n contributions.type === ATTRIBUTE_TYPE.TIMESTAMP\n );\n }\n\n get formatUtil() {\n switch (this.type) {\n case \"time\":\n return TimeUtil;\n case \"timestamp\":\n return TimestampUtil;\n case \"datetime\":\n return DateTimeUtil;\n default:\n return DateUtil;\n }\n }\n\n override getInitValue() {\n let value = this.getDataAsString(\"value\");\n if (value) {\n if (this.type === \"time\" && value.length === 5) {\n value = `${value}:00`;\n }\n\n // handle old datetime values, which contained ms\n if (this.type === \"datetime\" && value.includes(\".\")) {\n value = TimestampUtil.toFormat(value, DateTimeUtil.getIsoFormat());\n } else {\n value = this.formatUtil.toISO(value);\n }\n\n if (this.hasTime) {\n value = this.getTimeValue(value);\n }\n }\n\n return value;\n }\n\n getTimeValue(value: string): string {\n let timeValue = value;\n if (!this.timeInputFormat.toLowerCase().includes(\"h\")) {\n timeValue = this.formatUtil.setHour(value, 0);\n }\n if (!this.timeInputFormat.includes(\"m\")) {\n timeValue = this.formatUtil.setMinute(value, 0);\n }\n if (!this.timeInputFormat.includes(\"s\")) {\n timeValue = this.formatUtil.setSecond(value, 0);\n }\n if (this.type === \"timestamp\" && !this.timeInputFormat.includes(\"S\")) {\n timeValue = this.formatUtil.setMilliseconds(value, 0);\n }\n\n if (isIncludeTimeOffsetInDateTimes()) {\n // https://github.com/date-fns/date-fns/issues/3579\n const oldOffset = this.formatUtil.toFormat(value, DATETIME_OFFSET_FORMAT);\n const newOffset = this.formatUtil.toFormat(\n timeValue,\n DATETIME_OFFSET_FORMAT,\n );\n timeValue = timeValue.replace(newOffset, oldOffset);\n }\n return timeValue;\n }\n\n /**\n * Set time in the correct value based on available elements in the time format\n */\n updateInitValue() {\n const value = this.getInitValue();\n if (value != null) {\n this.setInitValue(value);\n const formattedValue = this.getInitialInputValue(value);\n this._inputvalue = formattedValue;\n this.setValue(value);\n }\n }\n\n /**\n * Get initial user input value\n */\n override getInitialInputValue(value?: string) {\n if (!(typeof value === \"string\")) {\n return \"\";\n }\n\n let initValue = value;\n if (this.type === \"time\" && value.length === 5) {\n initValue = `${value}:00`;\n }\n\n return this.formatUtil.toFormat(initValue, this.inputFormat);\n }\n\n override getInputValue(): string {\n return this._inputvalue ? this._inputvalue.toString() : \"\";\n }\n\n /**\n * Sets the input value to the value entered by the user\n */\n\n override get inputvalue(): string {\n return this.getInputValue();\n }\n\n override set inputvalue(value: string) {\n this.validate(value);\n this._inputvalue = value;\n this.value =\n value !== null && value !== \"\"\n ? this.formatUtil.toISO(value, this.inputFormat)\n : null;\n }\n\n reset() {\n this.inputvalue = \"\";\n }\n\n /**\n * Get date format\n */\n override get format() {\n const format = this.getContributionAsString(\"format\", \"\");\n return this.formatUtil.convertFormat(format);\n }\n\n override get formatLabel() {\n switch (this.type) {\n case \"date\":\n return this.dateInputFormat.toLowerCase();\n case \"time\":\n return this.timeInputFormat.toLowerCase();\n default:\n return this.format.toLowerCase();\n }\n }\n\n get hasDate() {\n return (\n this.type === \"date\" ||\n this.type === \"datetime\" ||\n this.type === \"timestamp\"\n );\n }\n\n get hasTime() {\n return (\n this.type === \"time\" ||\n this.type === \"datetime\" ||\n this.type === \"timestamp\"\n );\n }\n\n get inputFormatWithoutOffset(): string {\n if (this.hasDate && this.hasTime) {\n return `${this.dateInputFormat} ${this.timeInputFormat}`.trim();\n }\n\n if (this.hasDate) {\n return this.dateInputFormat;\n }\n\n if (this.hasTime) {\n return this.timeInputFormat;\n }\n\n return \"\";\n }\n\n get inputFormat() {\n if (\n isIncludeTimeOffsetInDateTimes() &&\n this.dateInputFormat !== \"\" &&\n this.timeInputFormat !== \"\"\n ) {\n return `${this.inputFormatWithoutOffset} ${DATETIME_OFFSET_FORMAT}`;\n }\n\n return this.inputFormatWithoutOffset;\n }\n\n extractDateInputFormat(): string {\n const dateEraChars = new Set(\"yMLdQDEewGu\");\n const timeOffsetChars = new Set(\"HhaKmsSZzXxO\");\n\n const format = this.format;\n let inputFormat = \"\";\n\n let isInQuotes = false;\n let keep = false;\n\n for (let i = 0; i < format.length; i++) {\n const prevChar = i > 0 ? format[i - 1] : \"\";\n const nextChar = i < format.length ? format[i + 1] : \"\";\n const char = format[i];\n\n if (char === \"'\") {\n isInQuotes = prevChar === \"'\" || nextChar === \"'\" || !isInQuotes;\n } else if (!isInQuotes && dateEraChars.has(char)) {\n keep = true;\n } else if (!isInQuotes && timeOffsetChars.has(char)) {\n keep = false;\n }\n\n if (keep) {\n inputFormat += char;\n }\n }\n\n return inputFormat.trim();\n }\n\n get dateInputFormat() {\n if (!this.hasDate) {\n return \"\";\n }\n\n if (!this._dateInputFormat) {\n this._dateInputFormat = this.extractDateInputFormat();\n }\n\n return this._dateInputFormat;\n }\n\n get dateReadonlyFormat() {\n if (!this.hasDate) {\n return \"\";\n }\n\n return this.hasTime\n ? this.format.replace(this.timeInputFormat, \"\").trim()\n : this.format;\n }\n\n /**\n * return attribute placeholder or return formatlabel without time input format from contributions\n */\n override get placeholder() {\n if (super.placeholder) {\n return super.placeholder;\n }\n\n const formatLabel = this.getContributionAsString(\"formatlabel\");\n if (this.hasDate && this.hasTime && formatLabel?.includes(\" \")) {\n // return first part of formatlabel to keep placeholder matching date input\n return formatLabel.split(\" \")[0];\n }\n\n return formatLabel;\n }\n\n /**\n * Creates an iso time format based on the elements present in the attribute format\n */\n createTimeInputFormat() {\n if (!this.hasTime) {\n return \"\";\n }\n\n const format = this.format;\n\n const timeFormatParts = [];\n if (format.includes(\"H\")) {\n timeFormatParts.push(\"HH\");\n } else if (format.includes(\"h\")) {\n timeFormatParts.push(\"hh\");\n }\n if (format.includes(\"m\")) {\n timeFormatParts.push(\"mm\");\n }\n if (format.includes(\"s\")) {\n timeFormatParts.push(\"ss\");\n }\n\n let timeFormat = timeFormatParts.join(\":\");\n if (format.includes(\"S\")) {\n timeFormat = `${timeFormat}.SSS`;\n }\n if (format.includes(\"a\")) {\n return `${timeFormat} a`;\n }\n\n return timeFormat;\n }\n\n get timeInputFormat() {\n return this.createTimeInputFormat();\n }\n\n get timeReadonlyFormat() {\n return this.createTimeInputFormat();\n }\n\n get dateInputValue() {\n return typeof this.value === \"string\" && this.dateInputFormat !== \"\"\n ? this.formatUtil.toFormat(this.value, this.dateInputFormat)\n : \"\";\n }\n\n get timeInputValue() {\n return typeof this.value === \"string\" && this.timeInputFormat !== \"\"\n ? this.formatUtil.toFormat(this.value, this.timeInputFormat)\n : \"\";\n }\n\n /**\n * format value in readonly rendering\n */\n override formatValue(value: string) {\n if (typeof value !== \"string\") {\n return \"\";\n }\n\n if (value === \"\") {\n return \"\";\n }\n\n // when the value is exactly an iso date, render as date\n if (\n (this.type === \"datetime\" || this.type === \"timestamp\") &&\n DateUtil.hasFormat(value, ISO_DATE_FORMAT)\n ) {\n return DateUtil.toFormat(value, this.dateReadonlyFormat);\n }\n\n if (this.type === \"date\") {\n return this.formatUtil.toFormat(value, this.dateReadonlyFormat);\n }\n\n return this.formatUtil.toFormat(value, this.format);\n }\n\n /**\n * Retrieve readonly value, the date in the configurated format\n */\n override get readonlyvalue() {\n if (typeof this.value === \"string\") {\n return this.formatValue(this.value);\n }\n\n return \"\";\n }\n\n get isAmbiguous() {\n if (typeof this.value === \"string\") {\n return this.formatUtil.isAmbiguous(this.value);\n }\n return false;\n }\n\n get offset(): OffsetInfo | null {\n if (typeof this.value === \"string\") {\n return this.formatUtil.getOffset(this.value);\n }\n return null;\n }\n\n /**\n * Get minimum date\n */\n get mindate() {\n return this.getContributionAsString(\"mindate\");\n }\n\n /**\n * Get maximum date\n */\n get maxdate() {\n return this.getContributionAsString(\"maxdate\");\n }\n\n /**\n * Registers an error that was received from a server response\n */\n override addServerError(error: ErrorObjectData) {\n const { id, message, properties, layouthint } = error;\n if (properties && \"format\" in properties && this.formatLabel) {\n properties.format = this.formatLabel;\n }\n\n this.attributeErrors.addServerError(id, message, properties, layouthint);\n }\n\n getFormatConstraint() {\n switch (this.type) {\n case \"date\":\n return new DateTimeDateFormatConstraint(\n this.dateInputFormat,\n this.formatLabel,\n );\n case \"time\":\n return new DateTimeTimeFormatConstraint(\n this.timeInputFormat,\n this.formatLabel,\n );\n default:\n return new DatetimeFormatConstraint(\n this.type,\n this.inputFormat,\n this.formatLabel,\n );\n }\n }\n\n /**\n * Add Date constraints for attribute\n */\n override addConstraints() {\n const constraints = new ConstraintCollection();\n\n constraints.add(this.getFormatConstraint());\n\n if (this.mindate || this.maxdate) {\n constraints.add(\n new DateBoundaryConstraint(\n this.type,\n this.mindate,\n this.maxdate,\n this.inputFormat,\n ),\n );\n }\n\n return constraints;\n }\n\n override get readonlyWidth(): ATTRIBUTE_WIDTH {\n if (this.type === \"date\" || this.type === \"time\") {\n return ATTRIBUTE_WIDTH.SMALL;\n }\n\n return ATTRIBUTE_WIDTH.MEDIUM;\n }\n\n update(value: MaybeAttributeValue) {\n if (this.inputvalue === value) {\n return this;\n }\n\n this.updateLastModification();\n this.inputvalue = value as string;\n\n return this;\n }\n\n updateByAttribute(otherAttribute: AttributeModel) {\n this.reset();\n if (otherAttribute instanceof DatetimeAttributeModel) {\n const otherValue = otherAttribute.value as string;\n if (otherValue != null) {\n const inputValue = this.formatUtil.toFormat(\n otherValue,\n this.inputFormat,\n );\n this.update(inputValue);\n }\n } else {\n console.error(\n `update of datetime attribute with ${otherAttribute.type} not supported`,\n );\n }\n }\n}\n","import { BaseAttributeModel } from \"./BaseAttributeModel\";\nimport { ATTRIBUTE_TYPE } from \"./constants\";\n\nimport type {\n AttributeContributions,\n AttributeModel,\n MaybeAttributeValue,\n StringAttributeContributions,\n} from \"./types\";\n\ninterface DataContent {\n text?: {\n message?: string;\n };\n}\ntype ContributionText =\n | string\n | {\n message?: string;\n };\n\nexport class HelptextAttributeModel extends BaseAttributeModel<StringAttributeContributions> {\n static override isApplicableModel(contributions: AttributeContributions) {\n return (\n // @ts-expect-error kept for backwards compatibility\n contributions.type === ATTRIBUTE_TYPE.HELPTEXT ||\n (\"readonly\" in contributions && \"text\" in contributions)\n );\n }\n\n override get type() {\n return ATTRIBUTE_TYPE.HELPTEXT;\n }\n\n /**\n * Get helptext text\n */\n get text() {\n const dataContent = this.getData(\"content\") as DataContent;\n const message = dataContent?.text?.message;\n if (message) {\n return message;\n }\n\n const contributionText = this.getContribution(\"text\") as ContributionText;\n if (contributionText != null) {\n return typeof contributionText === \"string\"\n ? contributionText\n : contributionText.message;\n }\n\n return null;\n }\n\n update(_value: MaybeAttributeValue) {\n return this;\n }\n\n override updateByAttribute(_otherAttribute: AttributeModel) {\n // not supported\n }\n\n override getFormData() {\n return null;\n }\n\n reset() {\n // nothing to reset\n }\n}\n","import { BaseAttributeModel } from \"./BaseAttributeModel\";\nimport { ATTRIBUTE_TYPE } from \"./constants\";\n\nimport type {\n AttributeContributions,\n AttributeModel,\n MaybeAttributeValue,\n StringAttributeContributions,\n} from \"./types\";\n\nexport class LabelAttributeModel extends BaseAttributeModel<StringAttributeContributions> {\n static override isApplicableModel(contributions: AttributeContributions) {\n if (\n \"layouthint\" in contributions &&\n Array.isArray(contributions.layouthint)\n ) {\n return contributions.layouthint.includes(\"label\");\n }\n\n return false;\n }\n\n override get type() {\n return ATTRIBUTE_TYPE.LABEL;\n }\n\n update(_value: MaybeAttributeValue) {\n return this;\n }\n\n override updateByAttribute(_otherAttribute: AttributeModel) {\n // not supported\n }\n\n override getFormData() {\n return null;\n }\n\n reset() {\n // nothing to reset\n }\n}\n","import { immerable } from \"immer\";\n\nimport { IllegalStateException } from \"../../../exceptions/IllegalStateException\";\n\nimport type { AttributeCollection } from \"../AttributeCollection\";\nimport type { BaseAttributeModel } from \"../BaseAttributeModel\";\nimport type {\n AttributeModel,\n BaseAttributeContributions,\n LayoutHintRule,\n} from \"../types\";\n\n/**\n * Abstract class for layout hint rules\n */\nexport abstract class BaseLayoutHintRule implements LayoutHintRule {\n [immerable] = true;\n\n /**\n * Indicates if the rule implements the isApplicableForHint method\n * @type {boolean}\n * @default false\n */\n static checkHintApplicability = false;\n\n /**\n * Indicates if the rule instance is applicable for a specific attribute<br>\n */\n static isApplicableForAttribute(_attribute: AttributeModel) {\n return true;\n }\n\n /**\n * Indicates if the rule instance is applicable for a specific hint<br>\n * Is required when checkHintApplicability is true\n */\n static isApplicableForHint(_hint: string): boolean {\n throw new IllegalStateException(\n `Missing isApplicableForHint implementation on layout hint rule`,\n );\n }\n\n /**\n * Initialize the rule when isApplicableForAttribute is true and checkHintApplicability is false\n */\n static initAttribute(_attribute?: AttributeModel): LayoutHintRule {\n throw new IllegalStateException(\n `Missing initAttribute implementation on layout hint rule`,\n );\n }\n\n /**\n * Initialize the rule when isApplicableForAttribute and isApplicableForHint are both true,\n * it receives the hint. Allows a rule to be instantiated multiple times for an attribute,\n * but once for each hint entry\n */\n static initHint(_hint: string): LayoutHintRule {\n throw new IllegalStateException(\n `Missing initHint implementation on layout hint rule`,\n );\n }\n\n /**\n * Abstract method, implements process of layout hint rule,\n * use this to enhance the applicable attribute or the attribute collection\n */\n abstract process<C extends BaseAttributeContributions>(\n attribute: BaseAttributeModel<C>,\n attributes: AttributeCollection,\n ): void;\n}\n","import { ConfigurationException } from \"../../../exceptions/ConfigurationException\";\nimport {\n DEPENDENT_ATTRIBUTE,\n DEPENDENT_ATTRIBUTE_CONTROL,\n} from \"../../../layouthints/LayoutHints\";\nimport { BaseLayoutHintRule } from \"./BaseLayoutHintRule\";\n\nimport type { AttributeCollection } from \"../AttributeCollection\";\nimport type { BaseAttributeModel } from \"../BaseAttributeModel\";\nimport type { BooleanAttributeModel } from \"../BooleanAttributeModel\";\nimport type { ChoiceAttributeModel } from \"../ChoiceAttributeModel\";\nimport type { AttributeModel, BaseAttributeContributions } from \"../types\";\n\ntype EnumerateAttributeModel = BooleanAttributeModel | ChoiceAttributeModel;\n\nconst EQUALS = \"equals\";\nconst INCLUDES = \"includes\";\nconst NOT_EQUALS = \"notEquals\";\nconst NOT_INCLUDES = \"notIncludes\";\nconst NOT_IS_EMPTY = \"notIsEmpty\";\nconst IS_EMPTY = \"isEmpty\";\n\nconst SHOW = \"show\";\nconst HIDE = \"hide\";\n\n/**\n * Depending attributes hint logic\n */\nexport class DependentAttribute extends BaseLayoutHintRule {\n private _action = \"\";\n private _control = \"\";\n private _operator = \"\";\n private _options: string[] = [];\n\n static override checkHintApplicability = true;\n\n static override isApplicableForHint(hint: string) {\n const regex = new RegExp(\n `^${DEPENDENT_ATTRIBUTE}\\\\s?(${SHOW}|${HIDE})`,\n \"i\",\n );\n\n return regex.test(hint);\n }\n\n /**\n * Used on initHint to create an instance of this rule\n */\n static getRuleInstance(): DependentAttribute {\n return new DependentAttribute();\n }\n\n static override initHint(hint: string) {\n const rule = this.getRuleInstance();\n\n const OPERATORS = `${EQUALS}|${INCLUDES}|${NOT_EQUALS}|${NOT_INCLUDES}|${NOT_IS_EMPTY}|${IS_EMPTY}`;\n const regex = new RegExp(\n `${DEPENDENT_ATTRIBUTE}\\\\s?(\\\\S*)\\\\swhen ${DEPENDENT_ATTRIBUTE_CONTROL}:\\\\s?(.*?)\\\\s*(${OPERATORS})\\\\s(.*)`,\n \"i\",\n );\n const isEmpyNotIsEmptRegex = new RegExp(\n `${DEPENDENT_ATTRIBUTE}\\\\s?(\\\\S*)\\\\swhen ${DEPENDENT_ATTRIBUTE_CONTROL}:\\\\s?(.*?)\\\\s*(${OPERATORS})`,\n \"i\",\n );\n\n const result = hint.match(regex)\n ? hint.match(regex)\n : hint.match(isEmpyNotIsEmptRegex);\n\n if (result) {\n rule.action = result[1];\n rule.control = result[2];\n rule.operator = result[3];\n rule.options = !result[4] ? \"\" : result[4];\n } else {\n throw new ConfigurationException(\n `No dependent information found on layout hint: ${hint}`,\n );\n }\n\n return rule;\n }\n\n get action(): string | undefined {\n return this._action;\n }\n\n set action(action: string) {\n this._action = action;\n }\n\n get control(): string | undefined {\n return this._control;\n }\n\n set control(control: string) {\n this._control = control;\n }\n\n get operator(): string | undefined {\n return this._operator;\n }\n\n set operator(operator: string) {\n this._operator = operator;\n }\n\n get options(): string[] {\n return this._options;\n }\n\n set options(options: string) {\n this._options = options.split(\"|\").map((option) => option.trim());\n }\n\n processEqualsOptions(controlAttribute: AttributeModel) {\n if (\n \"selected\" in controlAttribute &&\n Array.isArray(controlAttribute.selected)\n ) {\n const selected = controlAttribute.selected;\n return this.options.every((option) => selected.includes(option));\n }\n\n throw new ConfigurationException(\n \"Dependent control in combination with equals operator must be a choice, string or number attribute\",\n );\n }\n\n processIncludesOptions(controlAttribute: EnumerateAttributeModel) {\n if (controlAttribute.type === \"choice\") {\n return this.options.some((option) =>\n controlAttribute.selected.includes(option),\n );\n }\n\n throw new ConfigurationException(\n \"Dependent control in combination with includes operator must be a choice attribute\",\n );\n }\n\n handleOperator(controlAttribute: EnumerateAttributeModel) {\n switch (this.operator) {\n case EQUALS:\n return this.processEqualsOptions(controlAttribute);\n case INCLUDES:\n return this.processIncludesOptions(controlAttribute);\n case NOT_EQUALS:\n return !this.processEqualsOptions(controlAttribute);\n case NOT_INCLUDES:\n return !this.processIncludesOptions(controlAttribute);\n case NOT_IS_EMPTY:\n return controlAttribute?.selected.length !== 0;\n case IS_EMPTY:\n return controlAttribute?.selected.length === 0;\n default:\n throw new ConfigurationException(\n `Unsupported operator for dependent question: ${this.operator}`,\n );\n }\n }\n\n getControlAttribute(\n attributes: AttributeCollection,\n ): EnumerateAttributeModel | null {\n const attribute = attributes.getAttributeByLayoutHint(\n `${DEPENDENT_ATTRIBUTE_CONTROL}:${this.control}`,\n `${DEPENDENT_ATTRIBUTE_CONTROL}: ${this.control}`,\n );\n\n if (\n typeof attribute !== \"undefined\" &&\n attribute != null &&\n \"selected\" in attribute &&\n Array.isArray(attribute.selected)\n ) {\n return attribute as EnumerateAttributeModel;\n }\n\n return null;\n }\n\n process<C extends BaseAttributeContributions>(\n attribute: BaseAttributeModel<C>,\n attributes: AttributeCollection,\n ) {\n const controlAttribute = this.getControlAttribute(attributes);\n if (!controlAttribute) {\n return;\n }\n\n controlAttribute.processLayoutHintRules(attributes);\n if (controlAttribute.isHidden) {\n attribute.hide();\n return;\n }\n\n const result = this.handleOperator(controlAttribute);\n if (this.action === SHOW) {\n attribute.isHidden = !result;\n } else if (this.action === HIDE) {\n attribute.isHidden = result;\n } else {\n throw new ConfigurationException(\n `Unsupported action ${this.action} for dependent question on attribute: ${attribute.label}`,\n );\n }\n }\n}\n","import type { ConstraintModel, FiletypeConstraintsType } from \"../types\";\n\nexport class FileExtensionConstraint implements ConstraintModel {\n private _filetypeConstraints: FiletypeConstraintsType;\n\n constructor(filetypeConstraints: FiletypeConstraintsType) {\n this._filetypeConstraints = filetypeConstraints;\n }\n\n get id(): string {\n return \"Constraint.File.InvalidExtension\";\n }\n\n get extensions(): string {\n return this._filetypeConstraints\n .map((filetypeConstraint) => filetypeConstraint.extensions.join(\", \"))\n .join(\", \");\n }\n\n hasValidation() {\n return false;\n }\n\n get defaultMessage(): string {\n return \"Allowed extensions are: ${extensions}\"; // NOSONAR\n }\n\n get parameters(): { extensions: string } {\n return { extensions: this.extensions };\n }\n\n validate() {\n return true;\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import filesize from \"file-size\";\n\nimport type { ConstraintModel, FilesizeConstraintsType } from \"../types\";\n\nconst MAX_TOTAL_FILE_SIZE_ID = \"Constraint.File.MaxTotalFileSize\";\nconst MAX_FILE_SIZE_ID = \"Constraint.File.MaxFileSize\";\n\nexport class FileSizeConstraint implements ConstraintModel {\n private _filesizeConstraint: FilesizeConstraintsType;\n\n constructor(filesizeConstraint: FilesizeConstraintsType) {\n this._filesizeConstraint = filesizeConstraint;\n }\n\n get id(): string {\n if (this.filesizeConstraint.isMaxTotal) {\n return MAX_TOTAL_FILE_SIZE_ID;\n } else if (this.filesizeConstraint.fileSize !== undefined) {\n return MAX_FILE_SIZE_ID;\n }\n\n return \"\";\n }\n\n get filesizeConstraint(): FilesizeConstraintsType {\n return this._filesizeConstraint;\n }\n\n hasValidation() {\n return false;\n }\n\n get defaultMessage(): string {\n if (this.id === MAX_TOTAL_FILE_SIZE_ID) {\n return \"{filesize-left} van {max-total-filesize} over van totaal toegestaan upload bestandsgrootte\"; // NOSONAR\n } else if (this.id === MAX_FILE_SIZE_ID) {\n return \"Maximale bestandsgroote is ${max-filesize}\"; // NOSONAR\n }\n\n return \"\";\n }\n\n get filesize() {\n return filesize(this.filesizeConstraint.fileSize ?? 0).human(\"jedec\");\n }\n\n get maxTotalFileSize() {\n if (this.filesizeConstraint.maxTotalFileSize) {\n return filesize(this.filesizeConstraint.maxTotalFileSize).human(\"jedec\");\n }\n\n return undefined;\n }\n\n get parameters() {\n if (this.id === MAX_TOTAL_FILE_SIZE_ID) {\n return {\n \"filesize-left\": this.filesize,\n \"max-total-filesize\": this.maxTotalFileSize,\n };\n } else if (this.id === MAX_FILE_SIZE_ID) {\n return {\n \"max-filesize\": this.filesize,\n };\n }\n\n return {};\n }\n\n validate() {\n return true;\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import { BaseAttributeModel } from \"./BaseAttributeModel\";\nimport { ATTRIBUTE_TYPE } from \"./constants\";\nimport { ConstraintCollection } from \"./input-constraints/ConstraintCollection\";\nimport { FileExtensionConstraint } from \"./input-constraints/FileExtensionConstraint\";\nimport { FileSizeConstraint } from \"./input-constraints/FileSizeConstraint\";\n\nimport type {\n AttributeContributions,\n AttributeModel,\n BinaryAttributeContributions,\n FilesizeConstraintsType,\n FilesType,\n FiletypeConstraintsType,\n MaybeAttributeValue,\n} from \"./types\";\n\nconst UNCHANGED = \"UNCHANGED\";\n\nexport class UploadAttributeModel extends BaseAttributeModel<BinaryAttributeContributions> {\n private _files: FilesType | undefined;\n private _initialTotalFileSize = 0;\n private _maxTotalFileSize: number | undefined;\n\n static override isApplicableModel(contributions: AttributeContributions) {\n return contributions.type === ATTRIBUTE_TYPE.BINARY;\n }\n\n override get type() {\n return ATTRIBUTE_TYPE.UPLOAD;\n }\n\n /**\n * Retrieve single or multi upload\n */\n get multiple() {\n return this.getContributionAsBoolean(\"multiple\", false);\n }\n\n get initialTotalFileSize() {\n return this._initialTotalFileSize ?? 0;\n }\n\n set initialTotalFileSize(initialTotalFileSize: number) {\n this._initialTotalFileSize = initialTotalFileSize;\n }\n\n get maxTotalFileSize() {\n return this._maxTotalFileSize;\n }\n\n set maxTotalFileSize(maxTotalFileSize: number | undefined) {\n this._maxTotalFileSize = maxTotalFileSize;\n }\n\n get currentFilesize() {\n return this.initialTotalFileSize + this.uploadedFileSize;\n }\n\n get maxFileSize() {\n if (this.maxTotalFileSize) {\n const uploadMaxFileSize = this.maxTotalFileSize - this.currentFilesize;\n if (uploadMaxFileSize < 0) {\n return 0;\n }\n\n return uploadMaxFileSize;\n }\n\n return this.getContributionAsNumber(\"uploadMaxFileSize\");\n }\n\n get uploadedFileSize() {\n if (Object.keys(this.files).length === 0) {\n return 0;\n }\n\n let accumulatedFileSize = 0;\n Object.keys(this.files).forEach((fileName) => {\n const file = this.files[fileName];\n if (file.size) {\n accumulatedFileSize += file.size;\n }\n });\n return accumulatedFileSize;\n }\n\n /**\n * Upload constraints\n */\n get uploadConstraints(): {\n fileTypes: FiletypeConstraintsType;\n maxFileSize: FilesizeConstraintsType;\n acceptedFiles: string[];\n } {\n const mimeTypes = this.getContributionAsArray(\n \"allowedMimeTypes\",\n [],\n ).filter((mimeType) => mimeType !== \"[...]\");\n\n const extensions = this.getContributionAsArray(\n \"allowedExtensions\",\n [],\n ).filter((extension) => extension !== \"[...]\");\n\n const fileTypes: FiletypeConstraintsType = extensions.map((extension) => ({\n extensions: [extension],\n mimeTypes,\n }));\n\n return {\n fileTypes,\n maxFileSize: {\n fileSize: this.maxFileSize,\n maxTotalFileSize: this.maxTotalFileSize,\n isMaxTotal: this.maxTotalFileSize !== undefined,\n },\n acceptedFiles: this.acceptedFiles,\n };\n }\n\n /**\n * Array of accepted file extensions and mime types.\n * Convenience method for accept attribute of file input html control\n */\n get acceptedFiles(): string[] {\n const mimeTypes = this.getContributionAsArray(\n \"allowedMimeTypes\",\n [],\n ).filter((mimeType) => mimeType !== \"[...]\");\n\n const extensions = this.getContributionAsArray(\n \"allowedExtensions\",\n [],\n ).filter((extension) => extension !== \"[...]\");\n return [...extensions, ...mimeTypes];\n }\n\n /**\n * Add upload constraints\n */\n override addConstraints() {\n const constraints = new ConstraintCollection();\n\n if (this.uploadConstraints.fileTypes.length > 0) {\n constraints.add(\n new FileExtensionConstraint(this.uploadConstraints.fileTypes),\n );\n }\n\n const hasFilesizeConstraint =\n this.uploadConstraints.maxFileSize.isMaxTotal ||\n this.uploadConstraints.maxFileSize.fileSize !== undefined;\n\n if (hasFilesizeConstraint) {\n constraints.add(\n new FileSizeConstraint(this.uploadConstraints.maxFileSize),\n );\n }\n\n return constraints;\n }\n\n get files(): FilesType {\n return this._files ?? {};\n }\n\n set files(files: FilesType) {\n this._files = files;\n }\n\n private getFilesTypeFromValue(value: MaybeAttributeValue) {\n if (typeof value === \"object\") {\n return value as unknown as FilesType;\n } else if (typeof value === \"string\") {\n try {\n return JSON.parse(value) as FilesType;\n } catch (_e) {\n console.warn(`Can't parse upload value: ${value}`);\n }\n }\n return null;\n }\n\n /**\n * Update the attribute\n */\n update(value: MaybeAttributeValue) {\n if (!value) {\n return this;\n }\n\n const files = this.getFilesTypeFromValue(value);\n if (files == null) {\n this.inputvalue = value;\n } else {\n this.files = files;\n this.inputvalue = Object.keys(files)\n .map((fileName) => files[fileName].token)\n .join(\",\");\n }\n\n this.updateLastModification();\n\n return this;\n }\n\n override updateByAttribute(_otherAttribute: AttributeModel) {\n // not supported\n }\n\n override get readonlyvalue() {\n if (this.initvalue) {\n return this.initvalue.toString();\n }\n\n return \"\";\n }\n\n /**\n * Getting the value of the attribute, return unchanged when the uploaded file has not changed\n */\n override getValue() {\n if (!this.hasValue()) {\n return null;\n }\n\n if (this.initvalue === this.inputvalue) {\n return UNCHANGED;\n }\n\n return super.getValue();\n }\n\n override mergeAttribute(oldAttribute: AttributeModel) {\n if (\n oldAttribute instanceof UploadAttributeModel &&\n oldAttribute.isValid &&\n oldAttribute.inputvalue !== null\n ) {\n this.update(JSON.stringify(oldAttribute.files));\n }\n }\n\n reset() {\n this._files = {};\n }\n}\n","import {\n INITIAL_TOTAL_FILESIZE,\n MAX_TOTAL_FILESIZE,\n} from \"../../../layouthints/LayoutHints\";\nimport { ATTRIBUTE_TYPE } from \"../constants\";\nimport { UploadAttributeModel } from \"../UploadAttributeModel\";\nimport { BaseLayoutHintRule } from \"./BaseLayoutHintRule\";\n\nimport type { AttributeCollection } from \"../AttributeCollection\";\nimport type { BaseAttributeModel } from \"../BaseAttributeModel\";\nimport type { AttributeModel, BaseAttributeContributions } from \"../types\";\n\n/**\n * This pattern enables showing the upload file size remaining when uploading resources<br>\n * The rule depends on other attributes with the INITIAL_TOTAL_FILESIZE and MAX_TOTAL_FILESIZE layout hints\n */\nexport class RemainingTotalUploadSize extends BaseLayoutHintRule {\n static override isApplicableForAttribute(attribute: AttributeModel) {\n return attribute.type === ATTRIBUTE_TYPE.UPLOAD;\n }\n\n static override initAttribute() {\n return new RemainingTotalUploadSize();\n }\n\n processUploadInformation(\n attribute: UploadAttributeModel,\n attributes: AttributeCollection,\n ) {\n const initialTotalFileSizeAttributes = attributes.getAttributesByLayoutHint(\n INITIAL_TOTAL_FILESIZE,\n );\n const maxTotalFileSizeAttributes =\n attributes.getAttributesByLayoutHint(MAX_TOTAL_FILESIZE);\n\n if (\n initialTotalFileSizeAttributes.length > 0 &&\n maxTotalFileSizeAttributes.length > 0\n ) {\n const initialTotalFileSize = initialTotalFileSizeAttributes[0].value;\n const maxTotalFileSize = maxTotalFileSizeAttributes[0].value;\n\n attribute.initialTotalFileSize = Number(initialTotalFileSize);\n attribute.maxTotalFileSize = Number(maxTotalFileSize);\n }\n }\n\n /**\n * Sets thresholds for initial and maximum upload file size\n */\n process<C extends BaseAttributeContributions>(\n attribute: BaseAttributeModel<C>,\n attributes: AttributeCollection,\n ) {\n if (attribute instanceof UploadAttributeModel) {\n this.processUploadInformation(attribute, attributes);\n }\n }\n}\n","import { IllegalReturnException } from \"../../../exceptions/IllegalReturnException\";\nimport { BaseCollection } from \"../../base/BaseCollection\";\nimport { DependentAttribute } from \"./DependentAttribute\";\nimport { RemainingTotalUploadSize } from \"./RemainingTotalUploadSize\";\n\nimport type { AttributeCollection } from \"../AttributeCollection\";\nimport type { BaseAttributeModel } from \"../BaseAttributeModel\";\nimport type {\n AttributeModel,\n BaseAttributeContributions,\n LayoutHintRule,\n} from \"../types\";\nimport type { BaseLayoutHintRule } from \"./BaseLayoutHintRule\";\n\n/**\n * Array of available layout hint rules\n * @private\n */\nlet layoutHintRules: (typeof BaseLayoutHintRule)[] = [\n DependentAttribute,\n RemainingTotalUploadSize,\n];\n\n/**\n * Add custom layout hint rules\n */\nexport const addLayoutHintRule = (rule: typeof BaseLayoutHintRule) => {\n layoutHintRules.push(rule);\n};\n\nexport type LayoutHintRulesUpdater = (\n rules: (typeof BaseLayoutHintRule)[],\n) => (typeof BaseLayoutHintRule)[];\n\n/**\n * Update existing array of layout hint rules, use this to update or remove standard rules\n *\n * @example\n * // remove RemainingTotalUploadSize rule\n * updateLayoutHintRules((rules) => {\n * return rules.filter(rule => rule !== RemainingTotalUploadSize));\n * });\n */\nexport const updateLayoutHintRules = (updater: LayoutHintRulesUpdater) => {\n const newRules = updater(layoutHintRules);\n if (Array.isArray(newRules)) {\n layoutHintRules = newRules;\n } else {\n throw new IllegalReturnException(\n \"Result of updater of updateLayoutHintRules is not an array\",\n );\n }\n};\n\n/**\n * Collection of layout hint rules\n */\nexport class LayoutHintRuleCollection extends BaseCollection<LayoutHintRule> {\n /**\n * Retrieve all rules available in the collection\n */\n get allRules(): (typeof BaseLayoutHintRule)[] {\n return layoutHintRules;\n }\n\n /**\n * Set layout hint rules on the applicable attributes\n */\n static setLayoutHintRules(attribute: AttributeModel) {\n const rules = new LayoutHintRuleCollection();\n\n layoutHintRules.forEach((rule) => {\n if (rule.isApplicableForAttribute(attribute)) {\n if (rule.checkHintApplicability) {\n attribute.layouthint.forEach((hint) => {\n if (rule.isApplicableForHint(hint)) {\n rules.add(rule.initHint(hint));\n }\n });\n } else {\n rules.add(rule.initAttribute(attribute));\n }\n }\n });\n\n attribute.layoutHintRules = rules;\n\n return attribute;\n }\n\n /**\n * Process layout hint rules in the collection\n */\n process<C extends BaseAttributeContributions>(\n attribute: BaseAttributeModel<C>,\n attributes: AttributeCollection,\n ) {\n this.all.forEach((rule) => {\n rule.process<C>(attribute, attributes);\n });\n }\n}\n","import type { ConstraintModel } from \"../types\";\n\nexport class BSNConstraint implements ConstraintModel {\n get id() {\n return \"Constraint.BSN.InvalidFormat\";\n }\n\n hasValidation() {\n return true;\n }\n\n get defaultMessage() {\n return \"Must be a valid BSN\";\n }\n\n get parameters() {\n return {};\n }\n\n isValidBSN(bsn: string) {\n // if remove invalid characters and check if this is still the same length to find out if unwanted characters are used\n // valid characters are: numbers\n if (bsn.replace(/[^\\d]/gu, \"\").length !== bsn.length) {\n return false;\n }\n\n const bsnNumber = bsn.replace(/\\D/gu, \"\");\n\n const bsnLength = bsnNumber.length;\n const MINBSNLENGTH = 8;\n const MAXBSNLENGTH = 9;\n\n if (\n bsnLength < MINBSNLENGTH ||\n bsnLength > MAXBSNLENGTH ||\n Number.isNaN(bsnNumber)\n ) {\n return false;\n }\n\n let pos = 0;\n let result = 0;\n\n for (let i = bsnLength; i > 0; i--) {\n const digit = parseInt(bsnNumber.charAt(pos), 10);\n\n result += i === 1 ? digit * -1 : digit * i;\n pos += 1;\n }\n\n return result % 11 === 0;\n }\n\n validate(value: string) {\n return this.isValidBSN(value);\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import IBAN from \"iban\";\n\nimport type { ConstraintModel } from \"../types\";\n\nexport class IBANConstraint implements ConstraintModel {\n get id(): string {\n return \"Constraint.IBAN.InvalidFormat\";\n }\n\n hasValidation() {\n return true;\n }\n\n get defaultMessage(): string {\n return \"Must be a valid IBAN number\";\n }\n\n get parameters() {\n return {};\n }\n\n validate(value: string) {\n return IBAN.isValid(value);\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import type { ConstraintModel } from \"../types\";\n\nexport interface RegexObject {\n messageKey: string;\n defaultMessage?: string | undefined;\n regex: string | RegExp;\n}\n\nexport class RegexConstraint implements ConstraintModel {\n private _regexConstraint: RegexObject;\n\n constructor(regexConstraint: RegexObject) {\n this._regexConstraint = regexConstraint;\n }\n\n get id() {\n return this.regexConstraint.messageKey;\n }\n\n get regexConstraint() {\n return this._regexConstraint;\n }\n\n hasValidation() {\n return true;\n }\n\n get defaultMessage() {\n return (\n this.regexConstraint.defaultMessage || this.regexConstraint.messageKey\n );\n }\n\n get parameters() {\n return {\n regex: this.regexConstraint.regex,\n };\n }\n\n validate(value: string) {\n if (this.regexConstraint.regex instanceof RegExp) {\n return this.regexConstraint.regex.test(value);\n }\n\n return new RegExp(this.regexConstraint.regex).test(value);\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import { ATTRIBUTE_WIDTH } from \"../../constants/Constants\";\nimport { BaseAttributeModel } from \"./BaseAttributeModel\";\nimport { ATTRIBUTE_TYPE } from \"./constants\";\nimport { BSNConstraint } from \"./input-constraints/BSNConstraint\";\nimport { ConstraintCollection } from \"./input-constraints/ConstraintCollection\";\nimport { IBANConstraint } from \"./input-constraints/IBANConstraint\";\nimport { RegexConstraint } from \"./input-constraints/RegexConstraint\";\n\nimport type {\n AttributeContributions,\n AttributeModel,\n BaseStringAttributeContributions,\n MaybeAttributeValue,\n StringAttributeContributions,\n} from \"./types\";\n\nexport class StringAttributeModel<\n C extends BaseStringAttributeContributions = StringAttributeContributions,\n> extends BaseAttributeModel<C> {\n override get type() {\n return ATTRIBUTE_TYPE.STRING;\n }\n\n static override isApplicableModel(contributions: AttributeContributions) {\n if (\"type\" in contributions && contributions.type === \"string\") {\n return true;\n }\n\n if (\n \"layouthint\" in contributions &&\n Array.isArray(contributions.layouthint)\n ) {\n return contributions.layouthint.includes(\"string\");\n }\n\n return false;\n }\n\n /**\n * Retrieve initial input value\n */\n override getInitialInputValue(value: string) {\n return this.formatValue(value);\n }\n\n /**\n * Get Regexp pattern\n */\n get regexp() {\n return this.getContributionAsString(\"regexp\");\n }\n\n get regexpvalidationmessage() {\n return this.getContributionAsString(\"regexpValidationMessage\");\n }\n\n /**\n * Get postfix text\n */\n get postfix() {\n return this.getContributionAsString(\"postfix\", \"\");\n }\n\n /**\n * Get prefix text\n */\n get prefix() {\n return this.getContributionAsString(\"prefix\", \"\");\n }\n\n isBSN() {\n return this.layouthint.has(\"bsn\");\n }\n\n isIBAN() {\n return this.layouthint.has(\"iban\");\n }\n\n isZipcode() {\n return this.layouthint.has(\"zipcode\");\n }\n\n isEmail() {\n return this.layouthint.has(\"email\");\n }\n\n override addConstraints() {\n const constraints = new ConstraintCollection();\n\n if (this.isBSN()) {\n constraints.add(new BSNConstraint());\n } else if (this.isIBAN()) {\n constraints.add(new IBANConstraint());\n }\n\n if (this.isZipcode()) {\n // validate zip when regex is set is set or exact or isNot\n constraints.add(\n new RegexConstraint({\n messageKey: \"Constraint.ZipCode.InvalidFormat\",\n defaultMessage: \"Must be a valid Dutch ZIP code, e.g. 1234 AB\",\n regex: new RegExp(\"^[1-9][0-9]{3} ?[a-zA-Z]{2}$\", \"gi\"),\n }),\n );\n } else if (this.isEmail() && this.regexp) {\n constraints.add(\n new RegexConstraint({\n messageKey: \"Constraint.Email.InvalidFormat\",\n defaultMessage: \"Must be a valid e-mail address\",\n regex: new RegExp(this.regexp, \"gi\"),\n }),\n );\n } else if (this.regexp) {\n constraints.add(\n new RegexConstraint({\n messageKey: \"Constraint.String.InvalidRegex\",\n defaultMessage: this.regexpvalidationmessage,\n regex: this.regexp,\n }),\n );\n }\n\n return constraints;\n }\n\n /**\n * Reset attribute to empty string\n */\n reset() {\n this.inputvalue = \"\";\n }\n\n formatIBAN(value: string) {\n const noFormat = this.removeFormat(value);\n\n const groups = noFormat.replace(/\\s/g, \"\").match(/.{1,4}/g);\n return groups == null ? \"\" : groups.join(\" \");\n }\n\n formatZipcode(value: string) {\n const noFormat = this.removeFormat(value);\n if (noFormat.length === 6) {\n return (\n noFormat.substring(0, 4) + \" \" + noFormat.substring(4).toUpperCase()\n );\n }\n return noFormat;\n }\n\n formatBSN(value: string) {\n return this.removeFormat(value);\n }\n\n override formatValue(value: string) {\n if (value == null || value.toString() === \"\") {\n return \"\";\n }\n\n if (typeof value === \"string\") {\n if (this.isIBAN()) {\n return this.formatIBAN(value);\n }\n\n if (this.isZipcode()) {\n return this.formatZipcode(value);\n }\n\n if (this.isBSN()) {\n return this.formatBSN(value);\n }\n\n // fix for rendering of multiple spaces\n return value.replace(/ {2}/gi, \" \\u00A0\");\n }\n\n return JSON.stringify(value);\n }\n\n removeFormat(value: MaybeAttributeValue) {\n if (value == null || value.toString() === \"\") {\n return \"\";\n }\n\n if (typeof value === \"string\") {\n if (this.isIBAN() || this.isZipcode() || this.isBSN()) {\n return value.replace(/[^a-z0-9,]/gi, \"\");\n }\n return value;\n }\n\n return JSON.stringify(value);\n }\n\n override get validateValue(): string {\n return this.removeFormat(this.inputvalue);\n }\n\n override get inputvalue(): string {\n return this.getInputValue();\n }\n\n /**\n * Sets the input value to the value entered by the user\n */\n override set inputvalue(value: MaybeAttributeValue) {\n this.setInputvalue(value);\n\n if (value == null) {\n this.value = value;\n } else {\n this.value = this.removeFormat(value);\n }\n\n this.validate(this.validateValue);\n }\n\n override get readonlyvalue() {\n if (typeof this.value === \"string\") {\n const formattedValue = this.formatValue(this.value);\n // fix for rendering of multiple spaces\n return formattedValue.replace(/ {2}/gi, \" \\u00A0\");\n }\n\n return this.value == null ? \"\" : JSON.stringify(this.value);\n }\n\n /**\n * Update the attribute by name and value\n */\n update(value: MaybeAttributeValue) {\n if (this.inputvalue === value) {\n return this;\n }\n\n this.updateLastModification();\n this.inputvalue = value;\n\n return this;\n }\n\n updateByAttribute(otherAttribute: AttributeModel) {\n this.reset();\n if (otherAttribute instanceof StringAttributeModel) {\n this.update(otherAttribute.value);\n } else {\n console.error(\n `update of string attribute with ${otherAttribute.type} not supported`,\n );\n }\n }\n\n override get readonlyWidth(): ATTRIBUTE_WIDTH {\n if (this.isZipcode() || this.isBSN()) {\n return ATTRIBUTE_WIDTH.SMALL;\n }\n\n if (this.isIBAN()) {\n return ATTRIBUTE_WIDTH.LARGE;\n }\n\n // default value (also applied for email address + download attribute)\n return ATTRIBUTE_WIDTH.MEDIUM;\n }\n}\n","import { ATTRIBUTE_WIDTH } from \"../../constants/Constants\";\nimport { ATTRIBUTE_TYPE } from \"./constants\";\nimport { StringAttributeModel } from \"./StringAttributeModel\";\n\nimport type {\n AttributeContributions,\n MemoAttributeContributions,\n} from \"./types\";\n\nexport class MemoAttributeModel extends StringAttributeModel<MemoAttributeContributions> {\n static override isApplicableModel(contributions: AttributeContributions) {\n if (\n \"type\" in contributions &&\n typeof contributions.type === \"string\" &&\n contributions.type === ATTRIBUTE_TYPE.MEMO\n ) {\n return true;\n }\n\n if (\"rows\" in contributions && typeof contributions.rows === \"number\") {\n return contributions.rows > 1;\n }\n\n return false;\n }\n\n override get type() {\n return ATTRIBUTE_TYPE.MEMO;\n }\n\n /**\n * Retrieve number of rows to render in a textarea and wysiwyg input\n */\n get rows() {\n const DEFAULT_ROWS_TO_RENDER = 10;\n return this.getContributionAsNumber(\"rows\", DEFAULT_ROWS_TO_RENDER);\n }\n\n /**\n * Get formatted switch\n */\n get formatted() {\n return this.getContributionAsBoolean(\"formatted\", false);\n }\n\n override get readonlyWidth(): ATTRIBUTE_WIDTH {\n return ATTRIBUTE_WIDTH.LARGE;\n }\n}\n","import isPlainObject from \"lodash/isPlainObject\";\n\nimport { ATTRIBUTE_WIDTH } from \"../../constants/Constants\";\nimport {\n CASEVIEW_LINK,\n INITIAL_TOTAL_FILESIZE,\n MAX_TOTAL_FILESIZE,\n} from \"../../layouthints/LayoutHints\";\nimport { NumberUtil } from \"../../utils/number/NumberUtil\";\nimport { BaseAttributeModel } from \"./BaseAttributeModel\";\nimport { ATTRIBUTE_TYPE } from \"./constants\";\nimport { ConstraintCollection } from \"./input-constraints/ConstraintCollection\";\nimport { NumberBoundaryConstraint } from \"./input-constraints/NumberBoundaryConstraint\";\nimport { NumberFormatConstraint } from \"./input-constraints/NumberFormatConstraint\";\nimport { NumberGroupingConstraint } from \"./input-constraints/NumberGroupingConstraint\";\n\nimport type {\n AttributeContributions,\n AttributeModel,\n MaybeAttributeValue,\n NumberAttributeContributions,\n} from \"./types\";\n\nexport class NumberAttributeModel<\n C extends AttributeContributions = NumberAttributeContributions,\n> extends BaseAttributeModel<C> {\n static override isApplicableModel(contributions: AttributeContributions) {\n if (\"type\" in contributions && typeof contributions.type === \"string\") {\n return (\n contributions.type === ATTRIBUTE_TYPE.NUMBER ||\n contributions.type === ATTRIBUTE_TYPE.INTEGER\n );\n }\n return false;\n }\n\n override get type() {\n return ATTRIBUTE_TYPE.NUMBER;\n }\n\n /**\n * Get initial value\n */\n override getInitialInputValue(value?: MaybeAttributeValue) {\n if (value == null) {\n return \"\";\n }\n\n return this.formatValue(value);\n }\n\n /**\n * Get grouping separator\n */\n get groupingSeparator() {\n return this.getContributionAsString(\"groupingSeparator\", \"\");\n }\n\n /**\n * Get decimal separator\n */\n get decimalSeparator() {\n return this.getContributionAsString(\"decimalSeparator\", \"\");\n }\n\n /**\n * Get minimum value\n */\n get minNumber() {\n return this.getContributionAsNumber(\"minimum\");\n }\n\n /**\n * Get maximum value\n */\n get maxNumber() {\n return this.getContributionAsNumber(\"maximum\");\n }\n\n /**\n * Gets the maximum digits based on the format\n */\n get maxDigits() {\n const format = this.format;\n\n if (format != null && format.includes(\".\")) {\n return format.split(\".\")[1].length;\n }\n\n return 0;\n }\n\n /**\n * Get unit text\n */\n get unit() {\n return this.getContributionAsString(\"unit\", \"\");\n }\n\n /**\n * Add number constraints\n */\n override addConstraints() {\n const constraints = new ConstraintCollection();\n\n constraints.add(\n new NumberFormatConstraint(\n this.groupingSeparator,\n this.decimalSeparator,\n this.format,\n ),\n );\n constraints.add(\n new NumberGroupingConstraint(\n this.groupingSeparator,\n this.decimalSeparator,\n this.format ?? undefined,\n ),\n );\n constraints.add(\n new NumberBoundaryConstraint(\n this.minNumber,\n this.maxNumber,\n this.groupingSeparator,\n this.decimalSeparator,\n this.format ?? undefined,\n ),\n );\n\n return constraints;\n }\n\n /**\n * Reset attribute to empty string\n */\n reset() {\n this.inputvalue = \"\";\n }\n\n /**\n * Getting the display and input format of an attribute\n */\n override get format() {\n return this.getContributionAsString(\"format\", \"0\");\n }\n\n override formatValue(value: MaybeAttributeValue) {\n if (typeof value === \"string\" || typeof value === \"number\") {\n return NumberUtil.formatNumber(\n value,\n this.format,\n this.groupingSeparator,\n this.decimalSeparator,\n );\n }\n\n return \"\";\n }\n\n override get readonlyvalue() {\n if (!isPlainObject(this.value)) {\n return this.formatValue(this.value);\n }\n\n return JSON.stringify(this.value);\n }\n\n /**\n * Returns the value as entered by the user. This can differ from the internal iso value that is stored\n */\n override get inputvalue() {\n return this.getInputValue();\n }\n\n /**\n * Sets the input value to the value entered by the user\n */\n override set inputvalue(value: MaybeAttributeValue) {\n this.setInputvalue(value);\n this.validate(value);\n\n const outputNumber = NumberUtil.parseToNumber(\n value,\n this.groupingSeparator,\n this.decimalSeparator,\n );\n\n this.value = isNaN(outputNumber)\n ? null\n : NumberUtil.parseNumberToString(outputNumber);\n }\n\n /**\n * Getting the value of the attribute\n */\n override getValue(): number | null {\n const value = super.getValue();\n return value == null || value === \"\" ? null : Number(value);\n }\n\n /**\n * Update the attribute by name and value\n */\n update(value: MaybeAttributeValue) {\n if (value === this.inputvalue) {\n return this;\n }\n\n this.updateLastModification();\n this.inputvalue = value;\n\n return this;\n }\n\n updateByAttribute(otherAttribute: AttributeModel) {\n this.reset();\n if (otherAttribute instanceof NumberAttributeModel) {\n this.update(otherAttribute.value);\n } else {\n console.error(\n `update of number attribute with ${otherAttribute.type} not supported`,\n );\n }\n }\n\n override get isHidden() {\n return (\n super.isHidden ||\n this.layouthint.has(\n INITIAL_TOTAL_FILESIZE,\n MAX_TOTAL_FILESIZE,\n CASEVIEW_LINK,\n )\n );\n }\n\n override set isHidden(isHidden: boolean) {\n super.isHidden = isHidden;\n }\n\n override get readonlyWidth(): ATTRIBUTE_WIDTH {\n return ATTRIBUTE_WIDTH.SMALL;\n }\n}\n","import { NumberUtil } from \"../../../utils/number/NumberUtil\";\n\nimport type { ConstraintModel } from \"../types\";\n\nconst INEXACT_NUMBER_ID = \"Constraint.Number.InexactNumber\";\nconst OUT_OF_RANGE_ID = \"Constraint.Number.OutOfRange\";\nconst BELOW_MINIMUM_ID = \"Constraint.Number.BelowMinimum\";\nconst ABOVE_MAXIMUM_ID = \"Constraint.Number.AboveMaximum\";\n\nexport class NumberBoundaryConstraint implements ConstraintModel {\n private _minNumber: number | null;\n private _maxNumber: number | null;\n private _groupingSeparator = \",\";\n private _decimalSeparator = \".\";\n private _format = \"\";\n\n constructor(\n minNumber: number | null = null,\n maxNumber: number | null = null,\n groupingSeparator = \",\",\n decimalSeparator = \".\",\n format?: string,\n ) {\n this._format = format ?? \"\";\n this._groupingSeparator = groupingSeparator;\n this._decimalSeparator = decimalSeparator;\n this._minNumber = minNumber;\n this._maxNumber = maxNumber;\n }\n\n get id(): string {\n if (\n this.minNumber !== null &&\n this.maxNumber !== null &&\n this.minNumber === this.maxNumber\n ) {\n return INEXACT_NUMBER_ID;\n } else if (this.minNumber !== null && this.maxNumber !== null) {\n return OUT_OF_RANGE_ID;\n } else if (this.minNumber !== null) {\n return BELOW_MINIMUM_ID;\n } else if (this.maxNumber !== null) {\n return ABOVE_MAXIMUM_ID;\n }\n\n return \"Constraint.Number.NoBoundaryConstraint\";\n }\n\n get minNumber(): number | null {\n return this._minNumber;\n }\n\n get maxNumber(): number | null {\n return this._maxNumber;\n }\n\n get format(): string {\n return this._format;\n }\n\n get groupingSeparator(): string {\n return this._groupingSeparator;\n }\n\n get decimalSeparator(): string {\n return this._decimalSeparator;\n }\n\n hasValidation() {\n return true;\n }\n\n get defaultMessage(): string {\n switch (this.id) {\n case INEXACT_NUMBER_ID:\n return \"Number must be precisely ${min-number}\"; // NOSONAR\n case OUT_OF_RANGE_ID:\n return \"Must be between ${min-number} and ${max-number}\"; // NOSONAR\n case BELOW_MINIMUM_ID:\n return \"The number must be larger than ${min-number}\"; // NOSONAR\n case ABOVE_MAXIMUM_ID:\n return \"The number must be smaller than ${max-number}\"; // NOSONAR\n default:\n return \"\";\n }\n }\n\n get parameters(): {\n \"max-number\": null | string;\n \"min-number\": null | string;\n } {\n return {\n \"min-number\":\n this.minNumber === null\n ? null\n : NumberUtil.formatNumber(\n this.minNumber,\n this.format,\n this.groupingSeparator,\n this.decimalSeparator,\n ),\n \"max-number\":\n this.maxNumber === null\n ? null\n : NumberUtil.formatNumber(\n this.maxNumber,\n this.format,\n this.groupingSeparator,\n this.decimalSeparator,\n ),\n };\n }\n\n isExactNumber(value: string) {\n const parsedNumber = NumberUtil.parseToNumber(\n value,\n this.groupingSeparator,\n this.decimalSeparator,\n );\n return parsedNumber === this.minNumber;\n }\n\n isSameOrAboveMinNumber(value: string) {\n const parsedNumber = NumberUtil.parseToNumber(\n value,\n this.groupingSeparator,\n this.decimalSeparator,\n );\n\n if (isNaN(parsedNumber) || parsedNumber == null) {\n return false;\n }\n\n return this.minNumber != null && parsedNumber >= this.minNumber;\n }\n\n isSameOrBelowMaxNumber(value: string) {\n const parsedNumber = NumberUtil.parseToNumber(\n value,\n this.groupingSeparator,\n this.decimalSeparator,\n );\n\n if (isNaN(parsedNumber) || parsedNumber == null) {\n return false;\n }\n\n return this.maxNumber != null && parsedNumber <= this.maxNumber;\n }\n\n isBetweenNumbers(value: string) {\n return (\n this.isSameOrAboveMinNumber(value) && this.isSameOrBelowMaxNumber(value)\n );\n }\n\n validate(value: string) {\n switch (this.id) {\n case INEXACT_NUMBER_ID:\n return this.isExactNumber(value);\n case OUT_OF_RANGE_ID:\n return this.isBetweenNumbers(value);\n case BELOW_MINIMUM_ID:\n return this.isSameOrAboveMinNumber(value);\n case ABOVE_MAXIMUM_ID:\n return this.isSameOrBelowMaxNumber(value);\n default:\n return true;\n }\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import { DecimalFormat } from \"../../../utils/number/DecimalFormat\";\nimport { NumberUtil } from \"../../../utils/number/NumberUtil\";\n\nimport type { ConstraintModel } from \"../types\";\n\nconst INVALID_INTEGER_ID = \"Constraint.Number.InvalidInteger\";\n\nexport class NumberFormatConstraint implements ConstraintModel {\n private _decimalSeparator = \",\";\n private _groupingSeparator = \".\";\n private _format = \"0\";\n\n constructor(\n groupingSeparator = \",\",\n decimalSeparator = \".\",\n format: string | null = \"0\",\n ) {\n this._decimalSeparator = decimalSeparator;\n this._groupingSeparator = groupingSeparator;\n this._format = format ?? \"0\";\n }\n\n get id(): string {\n if (this.maxDigits === 0) {\n return INVALID_INTEGER_ID;\n }\n\n return \"Constraint.Number.InvalidDecimal\";\n }\n\n get decimalSeparator(): string {\n return this._decimalSeparator;\n }\n\n get groupingSeparator(): string {\n return this._groupingSeparator;\n }\n\n get format(): string {\n return this._format;\n }\n\n get maxDigits(): number {\n return this.format ? new DecimalFormat(this.format).maxFrac : 0;\n }\n\n hasValidation() {\n return true;\n }\n\n get defaultMessage(): string {\n if (this.id === INVALID_INTEGER_ID) {\n return \"Must be a whole number\";\n }\n\n return \"The value is not correct numeric format\";\n }\n\n get parameters(): { \"max-digits\": number } {\n return {\n \"max-digits\": this.maxDigits,\n };\n }\n\n isInteger(value: number) {\n return Number.isInteger(value);\n }\n\n getNumberOfDigits(value: number): number {\n if (Math.floor(value) === value) {\n return 0;\n }\n\n const stringValue = NumberUtil.parseNumberToString(value);\n return stringValue.split(\".\")[1].length;\n }\n\n isValidDecimal(value: number) {\n if (isNaN(value)) {\n return false;\n }\n\n const numberOfDigits = this.getNumberOfDigits(value);\n\n return (\n !isNaN(parseFloat(String(value))) &&\n isFinite(value) &&\n numberOfDigits <= this.maxDigits\n );\n }\n\n validate(value: string | number) {\n if (\n this.maxDigits === 0 &&\n this.decimalSeparator !== \"\" &&\n value.toString().includes(this.decimalSeparator)\n ) {\n return false;\n }\n\n const parsedNumber = NumberUtil.parseToNumber(\n value,\n this.groupingSeparator,\n this.decimalSeparator,\n );\n\n if (this.id === INVALID_INTEGER_ID) {\n return this.isInteger(parsedNumber);\n }\n\n return this.isValidDecimal(parsedNumber);\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import { DecimalFormat } from \"../../../utils/number/DecimalFormat\";\n\nimport type { ConstraintModel } from \"../types\";\n\nconst DEFAULT_GROUPING_SIZE = 3;\n\nexport class NumberGroupingConstraint implements ConstraintModel {\n private _decimalSeparator: string;\n private _groupingSeparator: string;\n private _format: string;\n\n constructor(\n groupingSeparator = \",\",\n decimalSeparator = \".\",\n format: string | null = \"0\",\n ) {\n this._decimalSeparator = decimalSeparator;\n this._groupingSeparator = groupingSeparator;\n this._format = format ?? \"0\";\n }\n\n get id(): string {\n return \"Constraint.Number.GroupingSeparator\";\n }\n\n get decimalSeparator(): string {\n return this._decimalSeparator;\n }\n\n get groupingSeparator(): string {\n return this._groupingSeparator;\n }\n\n get format(): string {\n return this._format;\n }\n\n get groupSize(): number {\n if (this.format) {\n const fromFormat = new DecimalFormat(this.format).comma;\n if (fromFormat > 0) {\n return fromFormat;\n }\n }\n\n return DEFAULT_GROUPING_SIZE;\n }\n\n hasValidation() {\n return true;\n }\n\n get defaultMessage(): string {\n return \"Group divider '${group-divider}' must be correctly placed\"; // NOSONAR\n }\n\n get parameters(): { \"group-divider\": string } {\n return { \"group-divider\": this.groupingSeparator };\n }\n\n // $FlowFixMe\n hasCorrectGrouping(value: string) {\n // A negative or a negative value may cause an incorrect group length compared to groupSize. To avoid this, the negative or positive sign must be removed from the value.\n const absStringValue = value.replace(\"-\", \"\").replace(\"+\", \"\");\n\n if (!absStringValue.includes(this.groupingSeparator)) {\n return true;\n }\n\n let integer = absStringValue;\n if (\n this.decimalSeparator !== \"\" &&\n absStringValue.includes(this.decimalSeparator)\n ) {\n // decimal before grouping\n if (\n absStringValue.indexOf(this.decimalSeparator) <\n absStringValue.indexOf(this.groupingSeparator)\n ) {\n return false;\n }\n\n integer = absStringValue.substring(\n 0,\n absStringValue.indexOf(this.decimalSeparator),\n );\n }\n\n let groups = integer.split(this.groupingSeparator);\n\n // when the first item is smaller than group size, remove it from check\n if (groups[0].length < this.groupSize) {\n groups = groups.slice(1);\n }\n\n return groups.every((group) => group.length === this.groupSize);\n }\n\n validate(value: string | number) {\n return (\n this.groupingSeparator === \"\" ||\n typeof value !== \"string\" ||\n !value.includes(this.groupingSeparator) ||\n this.hasCorrectGrouping(value)\n );\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import { ATTRIBUTE_WIDTH } from \"../../constants/Constants\";\nimport { ATTRIBUTE_TYPE } from \"./constants\";\nimport { NumberAttributeModel } from \"./NumberAttributeModel\";\n\nimport type {\n AttributeContributions,\n MoneyAttributeContributions,\n} from \"./types\";\n\nexport class MoneyAttributeModel extends NumberAttributeModel<MoneyAttributeContributions> {\n static override isApplicableModel(contributions: AttributeContributions) {\n if (\n \"type\" in contributions &&\n typeof contributions.type === \"string\" &&\n // @ts-expect-error not sure if money is a type that could occur in the contributions, kept this for backwards compatibility\n contributions.type === ATTRIBUTE_TYPE.MONEY\n ) {\n return true;\n }\n\n if (\n \"layouthint\" in contributions &&\n Array.isArray(contributions.layouthint)\n ) {\n return contributions.layouthint.includes(\"money\");\n }\n\n return false;\n }\n\n override get type() {\n return ATTRIBUTE_TYPE.MONEY;\n }\n\n /**\n * Retrieve currency symbol\n */\n get currencySymbol() {\n return this.getContributionAsString(\"currencySymbol\", \"\");\n }\n\n /**\n * Retrieve currency symbol as prefix\n */\n get prefix() {\n return this.currencySymbol;\n }\n\n override get readonlyWidth() {\n return ATTRIBUTE_WIDTH.SMALL;\n }\n}\n","import type { ConstraintModel } from \"../types\";\n\nexport class PasswordConfirmConstraint implements ConstraintModel {\n private _otherPasswordLabel: string;\n private _otherPasswordValue: string;\n\n constructor(otherPasswordValue: string, otherPasswordLabel: string) {\n this._otherPasswordLabel = otherPasswordLabel;\n this._otherPasswordValue = otherPasswordValue;\n }\n\n get id(): string {\n return \"Constraint.Password.ConfirmMismatch\";\n }\n\n get otherPasswordLabel(): string {\n return this._otherPasswordLabel;\n }\n\n get otherPasswordValue(): string {\n return this._otherPasswordValue;\n }\n\n hasValidation() {\n return true;\n }\n\n get defaultMessage(): string {\n return \"Must match ${other} field\"; // NOSONAR\n }\n\n get parameters(): { other: string } {\n return {\n other: this.otherPasswordLabel,\n };\n }\n\n validate(value: string) {\n return value === this.otherPasswordValue;\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import type { ConstraintModel } from \"../types\";\n\nexport class PasswordLowerAndUpperCaseConstraint implements ConstraintModel {\n get id(): string {\n return \"Constraint.Password.LowerAndUpperCaseMandatory\";\n }\n\n hasValidation() {\n return true;\n }\n\n get defaultMessage(): string {\n return \"Must contain both upper and lowercase characters\";\n }\n\n get parameters() {\n return {};\n }\n\n validate(value: string) {\n return /[a-z]/u.test(value) && /[A-Z]/u.test(value);\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import type { ConstraintModel } from \"../types\";\n\nexport class PasswordMinNumericCharactersConstraint implements ConstraintModel {\n private _minNumeric: number;\n\n constructor(minNumeric: number) {\n this._minNumeric = minNumeric;\n }\n\n get id(): string {\n return \"Constraint.Password.MinNumericCharactersMandatory\";\n }\n\n get minNumeric(): number {\n return this._minNumeric;\n }\n\n hasValidation() {\n return true;\n }\n\n get defaultMessage(): string {\n return \"Must contain ${min-numeric} or more numerical characters\"; // NOSONAR\n }\n\n get parameters(): { \"min-numeric\": number } {\n return {\n \"min-numeric\": this.minNumeric,\n };\n }\n\n validate(value: string) {\n return value.replace(/\\D/gu, \"\").length >= this.minNumeric;\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import type { ConstraintModel } from \"../types\";\n\nexport class PasswordMinSpecialCharactersConstraint implements ConstraintModel {\n private _minSpecial: number;\n\n constructor(minSpecial: number) {\n this._minSpecial = minSpecial;\n }\n\n get id(): string {\n return \"Constraint.Password.MinSpecialCharactersMandatory\";\n }\n\n get minSpecial(): number {\n return this._minSpecial;\n }\n\n hasValidation() {\n return true;\n }\n\n get defaultMessage(): string {\n return \"Must contain ${min-special} or more special characters\"; // NOSONAR\n }\n\n get parameters(): { \"min-special\": number } {\n return {\n \"min-special\": this.minSpecial,\n };\n }\n\n validate(value: string) {\n return value.replace(/[\\da-z]/giu, \"\").length >= this.minSpecial;\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import type { ConstraintModel } from \"../types\";\n\nexport class PasswordThreeConsecutiveCharactersNotAllowedConstraint\n implements ConstraintModel\n{\n private _maxSequence: number;\n\n constructor(maxSequence = 2) {\n this._maxSequence = maxSequence;\n }\n\n get id(): string {\n return \"Constraint.Password.ThreeConsecutiveCharactersNotAllowed\";\n }\n\n get maxSequence(): number {\n return this._maxSequence;\n }\n\n hasValidation() {\n return true;\n }\n\n get defaultMessage(): string {\n return \"Must not contain any character more than twice consecutively\";\n }\n\n get parameters(): { \"max-sequence\": number } {\n return {\n \"max-sequence\": this.maxSequence,\n };\n }\n\n hasNoSequenceOfIdenticalCharacters(value: string) {\n return !value\n .split(\"\")\n .filter((char, i) => value.indexOf(char) === i)\n .some((char) => {\n const sequence = char.repeat(this.maxSequence + 1);\n return value.includes(sequence);\n });\n }\n\n validate(value: string) {\n return this.hasNoSequenceOfIdenticalCharacters(value);\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import { CONFIRM_PASSWORD } from \"../../layouthints/LayoutHints\";\nimport { ATTRIBUTE_TYPE } from \"./constants\";\nimport { ConstraintCollection } from \"./input-constraints/ConstraintCollection\";\nimport { PasswordConfirmConstraint } from \"./input-constraints/PasswordConfirmConstraint\";\nimport { PasswordLowerAndUpperCaseConstraint } from \"./input-constraints/PasswordLowerAndUpperCaseConstraint\";\nimport { PasswordMinNumericCharactersConstraint } from \"./input-constraints/PasswordMinNumericCharactersConstraint\";\nimport { PasswordMinSpecialCharactersConstraint } from \"./input-constraints/PasswordMinSpecialCharactersConstraint\";\nimport { PasswordThreeConsecutiveCharactersNotAllowedConstraint } from \"./input-constraints/PasswordThreeConsecutiveCharactersNotAllowedConstraint\";\nimport { RegexConstraint } from \"./input-constraints/RegexConstraint\";\nimport { StringAttributeModel } from \"./StringAttributeModel\";\n\nimport type { RegexObject } from \"./input-constraints/RegexConstraint\";\nimport type {\n AttributeContributions,\n MaybeAttributeValue,\n PasswordAttributeContributions,\n} from \"./types\";\n\ninterface PasswordConstraints {\n upperAndLowerCaseMandatory?: boolean;\n maxSequenceOfIdenticalCharacters?: number;\n maxSequenceOfUsernameCharacters?: number;\n minNumberOfNumericCharacters?: number;\n minNumberOfSpecialCharacters?: number;\n regexConstraint?: RegexObject[];\n}\n\nexport class PasswordAttributeModel extends StringAttributeModel<PasswordAttributeContributions> {\n private _confirmValue: string | undefined;\n private _isConfirmPassword = false;\n private _otherLabel = \"\";\n\n static override isApplicableModel(contributions: AttributeContributions) {\n if (contributions.type === ATTRIBUTE_TYPE.PASSWORD) {\n return true;\n }\n\n if (\n \"layouthint\" in contributions &&\n Array.isArray(contributions.layouthint)\n ) {\n return contributions.layouthint.includes(\"password\");\n }\n\n return false;\n }\n\n override get type() {\n return ATTRIBUTE_TYPE.PASSWORD;\n }\n\n /**\n * Update the attribute by name and value\n */\n override update(value: MaybeAttributeValue) {\n this.updateLastModification();\n this.inputvalue = value;\n\n return this;\n }\n\n get constraints(): PasswordConstraints {\n return this.getContributionAsObject(\"constraints\", {});\n }\n\n get upperAndLowerCaseMandatory() {\n return this.constraints.upperAndLowerCaseMandatory;\n }\n\n get maxSequenceOfIdenticalCharacters() {\n return this.constraints.maxSequenceOfIdenticalCharacters;\n }\n\n get maxSequenceOfUsernameCharacters() {\n return this.constraints.maxSequenceOfUsernameCharacters;\n }\n\n get minNumberOfNumericCharacters() {\n return this.constraints.minNumberOfNumericCharacters;\n }\n\n get minNumberOfSpecialCharacters() {\n return this.constraints.minNumberOfSpecialCharacters;\n }\n\n get regexConstraint() {\n return this.constraints.regexConstraint;\n }\n\n /**\n * Add password constraints\n */\n override addConstraints() {\n if (this.isConfirmPassword) {\n return this.getConfirmPasswordConstraints();\n }\n return this.getStandardPasswordConstraints();\n }\n\n /**\n * Constraints for a confirmation password\n */\n getConfirmPasswordConstraints() {\n const constraints = new ConstraintCollection();\n constraints.add(\n new PasswordConfirmConstraint(this.confirmValue, this.otherLabel),\n );\n return constraints;\n }\n\n /**\n * Constrains for a standard password\n */\n getStandardPasswordConstraints() {\n const constraints = new ConstraintCollection();\n\n if (this.upperAndLowerCaseMandatory) {\n constraints.add(new PasswordLowerAndUpperCaseConstraint());\n }\n\n if (this.maxSequenceOfIdenticalCharacters) {\n constraints.add(\n new PasswordThreeConsecutiveCharactersNotAllowedConstraint(\n this.maxSequenceOfIdenticalCharacters,\n ),\n );\n }\n\n if (this.minNumberOfNumericCharacters) {\n constraints.add(\n new PasswordMinNumericCharactersConstraint(\n this.minNumberOfNumericCharacters,\n ),\n );\n }\n\n if (this.minNumberOfSpecialCharacters) {\n constraints.add(\n new PasswordMinSpecialCharactersConstraint(\n this.minNumberOfSpecialCharacters,\n ),\n );\n }\n\n if (this.regexConstraint && this.regexConstraint.length > 0) {\n this.regexConstraint.forEach((regexConstraint) => {\n constraints.add(new RegexConstraint(regexConstraint));\n });\n }\n\n if (\n this.layouthint.has(CONFIRM_PASSWORD) &&\n this.isConfirmPassword == null\n ) {\n constraints.add(\n new PasswordConfirmConstraint(this.confirmValue, this.otherLabel),\n );\n }\n\n return constraints;\n }\n\n /**\n * Retrieve applicable constraint for this attribute\n */\n override get constraintCollection() {\n if (this.isConfirmPassword) {\n // confirm password only needs local constraints, no server constraints\n return this.getConfirmPasswordConstraints();\n }\n\n return super.constraintCollection;\n }\n\n get isConfirmPassword() {\n return this._isConfirmPassword;\n }\n\n set isConfirmPassword(isConfirmPassword: boolean) {\n this._isConfirmPassword = isConfirmPassword;\n }\n\n get confirmValue() {\n return this._confirmValue ?? \"\";\n }\n\n set confirmValue(confirmValue: string) {\n this._confirmValue = confirmValue;\n this.validate(this.inputvalue);\n }\n\n get otherLabel() {\n return this._otherLabel;\n }\n\n set otherLabel(otherLabel: string) {\n this._otherLabel = otherLabel;\n }\n\n /**\n * Validate input\n */\n override validate(value: string) {\n // when client side validation is disabled, this attribute is always valid\n if (!this.useClientsideValidation()) {\n return true;\n }\n\n if (this.isOptionalAndEmpty(value)) {\n this.setIsValid(true);\n } else if (\n this.getPreviouslyValidatedValue() !== `${this.confirmValue}-${value}`\n ) {\n this.setIsValid(this.constraintCollection.validate(value));\n }\n this.setPreviouslyValidatedValue(`${this.confirmValue}-${value}`);\n\n return this.getIsValid();\n }\n\n override getFormData() {\n if (this.isConfirmPassword || this.inError()) {\n return null;\n }\n\n return {\n [this.name]: this.value,\n };\n }\n}\n","import type { DatetimeAttributeModel } from \"../DatetimeAttributeModel\";\nimport type { NumberAttributeModel } from \"../NumberAttributeModel\";\nimport type { ConstraintModel } from \"../types\";\n\ntype RangeChild = DatetimeAttributeModel | NumberAttributeModel;\n\nexport class MandatoryRangeConstraint implements ConstraintModel {\n private _type: string;\n private _start: RangeChild;\n private _end?: RangeChild;\n\n constructor(type: string, start: RangeChild, end?: RangeChild) {\n this._type = type;\n this._start = start;\n this._end = end;\n }\n\n get type(): string {\n return this._type;\n }\n\n get id(): string {\n switch (this.type) {\n case \"date\":\n return \"Constraint.DateRange.Mandatory\";\n case \"time\":\n return \"Constraint.TimeRange.Mandatory\";\n case \"datetime\":\n return \"Constraint.DateTimeRange.Mandatory\";\n case \"timestamp\":\n return \"Constraint.TimeStampRange.Mandatory\";\n default:\n return \"Constraint.Range.Mandatory\";\n }\n }\n\n hasValidation() {\n return true;\n }\n\n get defaultMessage(): string {\n return \"Field is mandatory: must contain at least a start or end value\";\n }\n\n get parameters() {\n return {};\n }\n\n validate() {\n // only validate when no children are in error\n if (this._start.hasErrors() || (this._end?.hasErrors() ?? false)) {\n return true;\n }\n\n return this._start.hasValue() || (this._end?.hasValue() ?? false);\n }\n\n get isMandatoryConstraint() {\n return true;\n }\n}\n","import {\n DateTimeUtil,\n DateUtil,\n TimestampUtil,\n TimeUtil,\n} from \"../../../utils/datetime/DateTimeUtil\";\nimport { NumberUtil } from \"../../../utils/number/NumberUtil\";\n\nimport type {\n AttributeModel,\n ConstraintModel,\n MaybeAttributeValue,\n} from \"../types\";\n\nexport class RangeConstraint implements ConstraintModel {\n private _start: AttributeModel;\n private _end: AttributeModel;\n\n constructor(startAttribute: AttributeModel, endAttribute: AttributeModel) {\n this._start = startAttribute;\n this._end = endAttribute;\n }\n\n get id(): string {\n const id = this.hasInclusiveBounds\n ? \"InvalidRangeInclusive\"\n : \"InvalidRange\";\n\n switch (this.rangeType) {\n case \"time\":\n return `Constraint.TimeRange.${id}`;\n case \"date\":\n return `Constraint.DateRange.${id}`;\n case \"datetime\":\n return `Constraint.DateTimeRange.${id}`;\n case \"timestamp\":\n return `Constraint.TimeStampRange.${id}`;\n default:\n return `Constraint.NumberRange.${id}`;\n }\n }\n\n get defaultMessage(): string {\n const inclusivePart = this.hasInclusiveBounds ? \" or equal to the\" : \"\";\n\n switch (this.rangeType) {\n case \"time\":\n return `Start time must be before${inclusivePart} end time`;\n case \"date\":\n return `Start date must be before${inclusivePart} end date`;\n case \"datetime\":\n return `Start value must be before${inclusivePart} end value`;\n case \"timestamp\":\n return `Start value must be before${inclusivePart} end value`;\n default:\n return `Start value must be less than${inclusivePart} the end value`;\n }\n }\n\n hasValidation() {\n return true;\n }\n\n get parameters() {\n return {};\n }\n\n get start() {\n return this._start;\n }\n\n get end() {\n return this._end;\n }\n\n get rangeType(): string {\n return this.start.type;\n }\n\n get hasInclusiveBounds() {\n return (\n this.start.operator === \"greaterThanOrEqualTo\" &&\n this.end.operator === \"lessThanOrEqualTo\"\n );\n }\n\n getDateTimeUtil() {\n switch (this.rangeType) {\n case \"time\":\n return TimeUtil;\n case \"date\":\n return DateUtil;\n case \"timestamp\":\n return TimestampUtil;\n default:\n return DateTimeUtil;\n }\n }\n\n doValidate(startValue: MaybeAttributeValue, endValue: MaybeAttributeValue) {\n if (typeof startValue === \"number\" && typeof endValue === \"number\") {\n return this.hasInclusiveBounds\n ? NumberUtil.isSameOrBefore(startValue, endValue)\n : NumberUtil.isBefore(startValue, endValue);\n } else if (typeof startValue === \"string\" && typeof endValue === \"string\") {\n return this.hasInclusiveBounds\n ? this.getDateTimeUtil().isSameOrBefore(startValue, endValue)\n : this.getDateTimeUtil().isBefore(startValue, endValue);\n }\n\n return false;\n }\n\n validate() {\n // only validate range when both attributes are valid\n if (this.start.inError() || this.end.inError()) {\n return true;\n }\n\n return this.doValidate(this.start.value, this.end.value);\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import { ATTRIBUTE_WIDTH } from \"../../constants/Constants\";\nimport { IllegalArgumentException } from \"../../exceptions/IllegalArgumentException\";\nimport { AttributeFactory } from \"./AttributeFactory\";\nimport { BaseAttributeModel } from \"./BaseAttributeModel\";\nimport { ATTRIBUTE_TYPE } from \"./constants\";\nimport { ConstraintCollection } from \"./input-constraints/ConstraintCollection\";\nimport { MandatoryRangeConstraint } from \"./input-constraints/MandatoryRangeConstraint\";\nimport { RangeConstraint } from \"./input-constraints/RangeConstraint\";\n\nimport type { ContentConfiguration } from \"../contentconfiguration/ContentConfiguration\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ModelOptions, ModelWithChildModels } from \"../types\";\nimport type { DatetimeAttributeModel } from \"./DatetimeAttributeModel\";\nimport type { NumberAttributeModel } from \"./NumberAttributeModel\";\nimport type {\n AttributeContributions,\n AttributeData,\n AttributeModel,\n MaybeAttributeValue,\n RangeAttributeContributions,\n} from \"./types\";\n\ntype RangeChild = DatetimeAttributeModel | NumberAttributeModel;\n\nexport class RangeAttributeModel<\n C extends RangeAttributeContributions = RangeAttributeContributions,\n> extends BaseAttributeModel<RangeAttributeContributions> {\n private _startAttribute: RangeChild;\n private _endAttribute: RangeChild;\n\n constructor(\n data?: AttributeData,\n contributions?: C,\n modelOptions?: ModelOptions,\n ) {\n super(data, contributions, modelOptions);\n\n if (!Array.isArray(contributions?.children)) {\n throw new Error(\n `Problem reading contributions of range attribute: ${this.key}, the children property must be an array.`,\n );\n }\n\n this._startAttribute = this.createChild(0);\n this._endAttribute = this.createChild(1);\n\n this.setChildrenOptionality();\n }\n\n get start() {\n return this._startAttribute;\n }\n\n get end() {\n return this._endAttribute;\n }\n\n override get type() {\n return ATTRIBUTE_TYPE.RANGE;\n }\n\n static override isApplicableModel(contributions: AttributeContributions) {\n return contributions.type.includes(\"range\");\n }\n\n override getInitialChildModelLinks() {\n return [\n ...this.start.getInitialChildModelLinks(),\n ...this.end.getInitialChildModelLinks(),\n ];\n }\n\n override setChildModels(\n models: ModelWithChildModels[],\n errors: ErrorResponse[],\n ) {\n this.start.setChildModels(models, errors);\n this.end.setChildModels(models, errors);\n }\n\n /**\n * Get input value of attribute\n */\n override getInputValue() {\n return [this.start.getInputValue(), this.end.getInputValue()].join(\",\");\n }\n\n /**\n * Check if at least one child has value\n */\n override hasValue(): boolean {\n return this.start.hasValue() || this.end.hasValue();\n }\n\n override get constraintCollection() {\n const constraints = new ConstraintCollection();\n\n constraints.add(this.getServerConstraints());\n constraints.add(this.addConstraints());\n\n return constraints;\n }\n\n /**\n * Used to programmatically overwrite the setting USE_CLIENTSIDE_VALIDATION\n */\n override setUseClientsideValidation(enabled: boolean) {\n super.setUseClientsideValidation(enabled);\n\n this.start.setUseClientsideValidation(enabled);\n this.end.setUseClientsideValidation(enabled);\n }\n\n /**\n * Validate input\n */\n override validate(value: MaybeAttributeValue) {\n // when client side validation is disabled, this attribute is always valid\n if (!this.useClientsideValidation()) {\n return true;\n }\n\n this._isValid = this.start.isValid && this.end.isValid;\n\n if (this._isValid) {\n this._isValid = this.constraintCollection.validate(value);\n }\n\n return this._isValid;\n }\n\n /**\n * Add Date constraints for attribute\n */\n override addConstraints() {\n const constraints = new ConstraintCollection();\n\n if (this.start.hasValue() && this.end.hasValue()) {\n constraints.add(new RangeConstraint(this.start, this.end));\n }\n if (this.mandatory) {\n if (!this.start.mandatory && !this.end.mandatory) {\n constraints.add(\n new MandatoryRangeConstraint(this.start.type, this.start, this.end),\n );\n }\n }\n\n return constraints;\n }\n\n /**\n * Indicates if attribute input is valid\n */\n override get isValid() {\n return this.validate(\"\");\n }\n\n override hasServerErrors(): boolean {\n return (\n this.errorCollection.serverErrors.length > 0 ||\n this.start.hasServerErrors() ||\n this.end.hasServerErrors()\n );\n }\n\n override hasErrors(): boolean {\n return (\n this.errorCollection.hasItems() ||\n this.start.hasErrors() ||\n this.end.hasErrors()\n );\n }\n\n /**\n * Reset attribute to empty string\n */\n override reset() {\n this.start.reset();\n this.end.reset();\n }\n\n override mergeAttribute(oldAttribute: AttributeModel) {\n this.concept = oldAttribute.concept;\n\n if (oldAttribute instanceof RangeAttributeModel) {\n this.start.mergeAttribute(oldAttribute.start);\n this.end.mergeAttribute(oldAttribute.end);\n }\n }\n\n override update(\n value: MaybeAttributeValue,\n changedAttribute?: AttributeModel,\n ) {\n if (!changedAttribute) {\n throw new IllegalArgumentException(\n \"Range attribute needs changed attribute on update call\",\n );\n }\n\n this.updateLastModification();\n\n if (this.start.equals(changedAttribute)) {\n this.start.update(value);\n }\n if (this.end.equals(changedAttribute)) {\n this.end.update(value);\n }\n\n this.setChildrenOptionality();\n\n this.validate(value as string);\n\n return this;\n }\n\n override updateByAttribute(otherAttribute: AttributeModel) {\n if (otherAttribute instanceof RangeAttributeModel) {\n this.start.updateByAttribute(otherAttribute.start);\n this.end.updateByAttribute(otherAttribute.end);\n } else {\n console.error(\n `update of range attribute with ${otherAttribute.type} not supported`,\n );\n }\n }\n\n override get readonly() {\n return super.readonly ?? (this.start.readonly && this.end.readonly);\n }\n\n override set readonly(readonly: boolean) {\n super.readonly = readonly;\n }\n\n override get readonlyvalue() {\n const value = [];\n if (this.start.value !== null) {\n value.push(this.start.value);\n }\n if (this.end.value !== null) {\n value.push(this.end.value);\n }\n return value.join(\", \");\n }\n\n get initvalue() {\n return {\n [this.start.key]: this.start.initvalue,\n [this.end.key]: this.end.initvalue,\n };\n }\n\n override getFormData() {\n return { [this.name]: this.value };\n }\n\n override getValue(): MaybeAttributeValue {\n return {\n ...this.start.formdata,\n ...this.end.formdata,\n };\n }\n\n override get isResult() {\n return this._isResult;\n }\n\n override set isResult(isResult: boolean) {\n this._isResult = isResult;\n\n this.start.isResult = isResult;\n this.end.isResult = isResult;\n }\n\n override indicateContentConfiguration(\n contentConfiguration: ContentConfiguration,\n ) {\n if (contentConfiguration) {\n this.start.indicateContentConfiguration(contentConfiguration);\n this.end.indicateContentConfiguration(contentConfiguration);\n }\n }\n\n override equals(otherAttribute: AttributeModel): boolean {\n return (\n (this.key === otherAttribute.key &&\n this.parentKey === otherAttribute.parentKey) ||\n this.start.equals(otherAttribute) ||\n this.end.equals(otherAttribute)\n );\n }\n\n override get readonlyWidth(): ATTRIBUTE_WIDTH {\n switch (this.start.type) {\n case \"datetime\":\n return ATTRIBUTE_WIDTH.LARGE;\n case \"timestamp\":\n return ATTRIBUTE_WIDTH.EXTRA_LARGE;\n default:\n return ATTRIBUTE_WIDTH.MEDIUM;\n }\n }\n\n private createChild(index: number) {\n let data = this.data.children?.[index];\n if (Array.isArray(data)) {\n data = undefined;\n }\n\n const childContributions = this.contributions.children[index];\n\n const [key] = Object.keys(childContributions);\n const contributions = childContributions[key];\n\n const attribute = AttributeFactory.createAttribute<RangeChild>(\n key,\n data ?? {},\n contributions,\n this.modelOptions,\n );\n\n if (attribute && data && \"key\" in data) {\n attribute.parentKey = data.key;\n }\n\n return attribute;\n }\n\n private setChildrenOptionality() {\n const childrenAreOptional =\n !this.mandatory && this.start.value === null && this.end.value === null;\n\n if (this.start) {\n this.start.mandatory =\n childrenAreOptional || this.start.configuredMandatory\n ? false\n : this.start.configuredMandatory;\n }\n if (this.end) {\n this.end.mandatory =\n childrenAreOptional || this.end.configuredMandatory\n ? false\n : this.end.configuredMandatory;\n }\n }\n}\n","import type { ConstraintModel } from \"../types\";\n\nexport class XMLConstraint implements ConstraintModel {\n get id(): string {\n return \"Constraint.XML.InvalidFormat\";\n }\n\n hasValidation() {\n return true;\n }\n\n get defaultMessage(): string {\n return \"Must be well-formed XML\";\n }\n\n get parameters() {\n return {};\n }\n\n isValidXML(value: string) {\n const oParser = new DOMParser();\n\n try {\n const oDom = oParser.parseFromString(value, \"text/xml\");\n\n if (oDom.querySelectorAll(\"parsererror\").length > 0) {\n return false;\n }\n } catch (_error) {\n return false;\n }\n\n return true;\n }\n\n validate(value: string) {\n return this.isValidXML(value);\n }\n\n get isMandatoryConstraint() {\n return false;\n }\n}\n","import { ATTRIBUTE_WIDTH } from \"../../constants/Constants\";\nimport { ATTRIBUTE_TYPE } from \"./constants\";\nimport { ConstraintCollection } from \"./input-constraints/ConstraintCollection\";\nimport { XMLConstraint } from \"./input-constraints/XMLConstraint\";\nimport { StringAttributeModel } from \"./StringAttributeModel\";\n\nimport type { AttributeContributions } from \"./types\";\n\nexport class XMLAttributeModel extends StringAttributeModel {\n static override isApplicableModel(contributions: AttributeContributions) {\n if (\n \"type\" in contributions &&\n typeof contributions.type === \"string\" &&\n // @ts-expect-error kept for backwards compatibility\n contributions.type === ATTRIBUTE_TYPE.XML\n ) {\n return true;\n }\n\n if (\n \"layouthint\" in contributions &&\n Array.isArray(contributions.layouthint)\n ) {\n return contributions.layouthint.includes(\"xml\");\n }\n\n return false;\n }\n\n override get type() {\n return ATTRIBUTE_TYPE.XML;\n }\n\n /**\n * Retrieve number of rows to render\n */\n get rows() {\n return 10;\n }\n\n /**\n * Add constraints\n */\n override addConstraints() {\n const constraints = new ConstraintCollection();\n\n constraints.add(new XMLConstraint());\n\n return constraints;\n }\n\n override get readonlyWidth(): ATTRIBUTE_WIDTH {\n return ATTRIBUTE_WIDTH.EXTRA_LARGE;\n }\n}\n","import has from \"lodash/has\";\n\nimport { HTTP_METHODS } from \"../../constants/Constants\";\nimport {\n CREATE_ACTION,\n DELETE_ACTION,\n UPDATE_ACTION,\n} from \"../../layouthints/LayoutHints\";\nimport { AttributeCollection } from \"../attributes/AttributeCollection\";\nimport { BaseModel } from \"../base/BaseModel\";\nimport { Href } from \"../href/Href\";\nimport { ProcessStatusSettingsModel } from \"../process/ProcessStatusSettingsModel\";\n\nimport type { AttributeContributions } from \"../attributes/types\";\nimport type {\n ProcessStatusSettingsContributions,\n ProcessStatusSettingsData,\n} from \"../process/types\";\nimport type { ModelOptions } from \"../types\";\nimport type { ActionContributions, ActionData } from \"./types\";\n\nexport class ActionModel extends BaseModel<ActionData, ActionContributions> {\n private _fieldCollection: AttributeCollection;\n private _selfhref: Href | undefined;\n private _icon: string | undefined;\n\n constructor(\n data?: ActionData,\n contributions?: ActionContributions,\n modelOptions?: ModelOptions,\n ) {\n super(data, contributions, modelOptions);\n\n this._fieldCollection = this.createFieldCollection(modelOptions);\n }\n\n static create(\n name: string,\n href: string,\n label: string,\n type = \"form\",\n origin?: string,\n contextPath?: string,\n ) {\n const data = { name, href };\n const contributions = { name, label: label ?? name, type };\n return new ActionModel(data, contributions, { origin, contextPath });\n }\n\n private createFieldCollection(modelOptions?: ModelOptions) {\n let fieldsData = {};\n let fieldsContributions = [] as Record<string, AttributeContributions>[];\n\n if (\n \"fields\" in this.data &&\n typeof this.data.fields === \"object\" &&\n this.data.fields != null\n ) {\n fieldsData = this.data.fields;\n }\n\n if (\n \"fields\" in this.contributions &&\n Array.isArray(this.contributions.fields)\n ) {\n fieldsContributions = this.contributions.fields;\n }\n\n return new AttributeCollection(fieldsData, fieldsContributions, {\n ...modelOptions,\n isReadonly: true,\n });\n }\n\n get isDisabled() {\n return !this.data.href;\n }\n\n get selfhref() {\n return (\n this._selfhref ??\n new Href(\n `${this.data.href}?${this.querystring}`,\n \"Form\",\n this.modelOptions,\n )\n );\n }\n\n set selfhref(href: Href) {\n this._selfhref = href;\n }\n\n /**\n * retrieve request method\n */\n get method() {\n const method = this.getDataAsString(\"method\", HTTP_METHODS.POST);\n return HTTP_METHODS[method as keyof typeof HTTP_METHODS];\n }\n\n /**\n * Retrieve type of method\n */\n get type() {\n if (this.layouthint.has(CREATE_ACTION)) {\n return \"create\";\n }\n if (this.layouthint.has(UPDATE_ACTION)) {\n return \"update\";\n }\n if (this.layouthint.has(DELETE_ACTION)) {\n return \"delete\";\n }\n\n return this.getContributionAsString(\"type\", \"general\");\n }\n\n /**\n * Retrieve name of action\n */\n get name() {\n return this.getDataAsString(\"name\", \"unknown\");\n }\n\n /**\n * retrieve the collection of field attributes as an array\n */\n get fields() {\n return this._fieldCollection.all;\n }\n\n /**\n * Retrieve the field collection\n */\n get fieldCollection() {\n return this._fieldCollection;\n }\n\n set fieldCollection(fieldCollection: AttributeCollection) {\n this._fieldCollection = fieldCollection;\n }\n\n /**\n * Retrieve querystring of action\n */\n get querystring() {\n return this.fields\n .filter((attribute) => attribute.value != null && attribute.value !== \"\")\n .map((attribute) => {\n const { value } = attribute;\n if (value !== null) {\n return `${attribute.name}=${value}`;\n }\n return attribute.name;\n })\n .join(\"&\");\n }\n\n /**\n * Retrieve a field by it's key\n */\n getFieldByKey(key: string) {\n return this._fieldCollection.getAttributeByKey(key);\n }\n\n /**\n * Indicates if field exists by the given key\n */\n hasFieldByKey(key: string) {\n const f = this.getFieldByKey(key);\n return f != null;\n }\n\n /**\n * Getting the key/name of this action\n */\n get key() {\n return this.getDataAsString(\"name\");\n }\n\n /**\n * Getting the label of the action\n */\n get label() {\n return this.getContributionAsString(\"label\", this.key);\n }\n\n get isProcessTask() {\n return has(this.contributions, \"processTask\");\n }\n\n get processStatus() {\n if (this.isProcessTask) {\n const d = this.data.processStatus || {};\n const c = this.contributions.processTask || {};\n\n return new ProcessStatusSettingsModel(\n d as ProcessStatusSettingsData,\n c as ProcessStatusSettingsContributions,\n this.modelOptions,\n );\n }\n return undefined;\n }\n\n get icon() {\n return this._icon;\n }\n\n set icon(icon: string | undefined) {\n this._icon = icon;\n }\n}\n","import { BaseCollection } from \"../base/BaseCollection\";\nimport { ActionModel } from \"./ActionModel\";\n\nimport type { ModelOptions } from \"../types\";\nimport type { ActionContributions, ActionData } from \"./types\";\n\nexport class ActionCollection extends BaseCollection<ActionModel> {\n constructor(\n data?: ActionData[],\n contributions?: ActionContributions[],\n modelOptions?: ModelOptions,\n ) {\n super();\n this.collection = this.createCollection(data, contributions, modelOptions);\n }\n\n createCollection(\n data?: ActionData[],\n contributions?: ActionContributions[],\n modelOptions?: ModelOptions,\n ) {\n const actionModels = [];\n\n if (\n data &&\n contributions &&\n Array.isArray(data) &&\n Array.isArray(contributions)\n ) {\n for (const action of data) {\n const contribution = contributions.find((c) => {\n if (\n typeof c === \"object\" &&\n c !== null &&\n \"name\" in c &&\n \"type\" in c &&\n \"name\" in action\n ) {\n return c.name === action.name && c.type !== \"service-operation\";\n }\n return;\n });\n\n if (contribution) {\n actionModels.push(\n new ActionModel(action, contribution, modelOptions),\n );\n }\n }\n }\n\n return actionModels;\n }\n\n /**\n * Retrieve action by key\n */\n getActionByKey(key: string) {\n const newCollection = new ActionCollection();\n\n newCollection.collection = this.filter((action) => action.key === key);\n\n return newCollection.first;\n }\n\n /**\n * Retrieve actions by type\n */\n getActionsByType(type: string | string[]) {\n const newCollection = new ActionCollection();\n\n newCollection.collection = this.filter((action) =>\n Array.isArray(type) ? type.includes(action.type) : action.type === type,\n );\n\n return newCollection;\n }\n\n /**\n * Retrieve actions including a layout hint\n */\n getActionsByLayoutHint(...hints: string[]) {\n const newCollection = new ActionCollection();\n\n newCollection.collection = this.filter((action) =>\n action.layouthint.has(...hints),\n );\n\n return newCollection;\n }\n\n /**\n * Indicates if an action with layout hint exists\n */\n hasActionsByLayoutHint(...hints: string[]) {\n return this.getActionsByLayoutHint(...hints).length > 0;\n }\n\n /**\n * Use as path regex for react router routes\n */\n get routePath() {\n const enabledRoutes = this.collection.filter(\n (action) => !action.isDisabled,\n );\n\n if (enabledRoutes.length === 0) {\n return \"__NON_EXISTING_ROUTE__\";\n }\n\n const path = enabledRoutes.map((action) => action.selfhref.path).join(\"|\");\n\n return this.length > 1 ? `(${path})` : path;\n }\n}\n","import { ResourceModel } from \"../base/ResourceModel\";\n\nimport type { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport type { UserContributions, UserData } from \"./types\";\n\nexport class UserModel extends ResourceModel<UserData, UserContributions> {\n override get type() {\n return \"User\";\n }\n\n static override get modelName() {\n return \"UserModel\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n const contributions = data.contributions;\n\n if (\n contributions &&\n \"resourcetype\" in contributions &&\n contributions.resourcetype &&\n typeof contributions.resourcetype === \"string\"\n ) {\n return contributions.resourcetype === \"userdata\";\n }\n\n return false;\n }\n\n get username() {\n return this.getDataAsString(\"Username\", \"Guest\");\n }\n\n get fullname() {\n return this.getDataAsString(\"Fullname\", \"Guest\");\n }\n}\n","import { Cache } from \"../../utils/storage/Cache\";\nimport { ResourceModel } from \"../base/ResourceModel\";\nimport { UserModel } from \"./UserModel\";\n\nimport type { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ModelWithChildModels } from \"../types\";\nimport type { UserServicesContributions, UserServicesData } from \"./types\";\n\nexport class UserServicesModel extends ResourceModel<\n UserServicesData,\n UserServicesContributions\n> {\n private _user?: UserModel;\n private _mustChangePassword = false;\n\n static override get modelName() {\n return \"UserServicesModel\";\n }\n\n get type() {\n return \"UserServices\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n return data.resourcetype === \"user_services\";\n }\n\n override getInitialChildModelLinks() {\n const userLink = this.userLink;\n return userLink ? [userLink] : [];\n }\n\n override setChildModels(\n models: ModelWithChildModels[],\n _errors: ErrorResponse[],\n ) {\n this.user = models.find((model) => model instanceof UserModel);\n }\n\n get userLink() {\n return this.links.getLinkByKey(\"Userdata\");\n }\n\n get user() {\n return this._user;\n }\n\n set user(user: UserModel | undefined) {\n this._user = user;\n }\n\n get changePassword() {\n return this.links.getLinkByKey(\"ChangePassword\")?.href;\n }\n\n get isLoggedIn() {\n const hasUser = this.user instanceof UserModel;\n\n // when more than three unsecure links are present (always present: self, contributions and api-docs),\n // the userservice is permitted and thus we have an indication the user is probably logged in\n const UNSECURE_LINK_COUNT = 3;\n return (\n this.links.length > UNSECURE_LINK_COUNT ||\n hasUser ||\n Cache.getItem(\"basic-ok\") === true\n );\n }\n\n set mustChangePassword(mustChangePassword: boolean) {\n this._mustChangePassword = mustChangePassword;\n }\n\n get mustChangePassword(): boolean {\n return this._mustChangePassword;\n }\n}\n","import { DEFAULT_AUTHENTICATION_TYPE } from \"../../constants/Constants\";\nimport { NotAllowedUriException } from \"../../exceptions/NotAllowedUriException\";\nimport { ResourceModel } from \"../base/ResourceModel\";\nimport { LinkModel } from \"../links/LinkModel\";\nimport { UserServicesModel } from \"../user/UserServicesModel\";\n\nimport type { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport type { AuthenticationType } from \"../../modularui/types\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ModelWithChildModels } from \"../types\";\nimport type { ApplicationContributions, ApplicationData } from \"./types\";\n\nexport class ApplicationModel extends ResourceModel<\n ApplicationData,\n ApplicationContributions\n> {\n private _userServices?: UserServicesModel;\n\n static override get modelName() {\n return \"ApplicationModel\";\n }\n\n get type() {\n return \"Application\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n return data.resourcetype === \"Application\";\n }\n\n /**\n * Getting the tab links\n */\n get tabs() {\n return this.links.getLinksByGroup(\"tab\");\n }\n\n /**\n * Get modelcatalog link\n */\n get modelcatalog() {\n return LinkModel.create(\n \"modelcatalog\",\n \"/modelcatalog\",\n \"Model catalog\",\n this.modelOptions,\n );\n }\n\n get userServices() {\n return this._userServices;\n }\n\n set userServices(userServices) {\n this._userServices = userServices;\n }\n\n get user() {\n return this.userServices?.user;\n }\n\n get userHref() {\n return this.userServices?.userLink?.href;\n }\n\n override getInitialChildModelLinks() {\n const userService = this.links.getLinkByKey(\"UserServices\");\n if (userService && userService.href.path === \"/login\") {\n throw new NotAllowedUriException(\n \"The user service (Login panel) should not have the uri '/login', use a different URI because this uri matches the login service.\",\n );\n }\n\n return userService ? [userService] : [];\n }\n\n override setChildModels(\n models: ModelWithChildModels[],\n _errors: ErrorResponse[],\n ) {\n this.userServices = models.find(\n (model) => model instanceof UserServicesModel,\n );\n }\n\n /**\n * Indicates if the user is logged in\n */\n get isLoggedIn() {\n return this.userServices?.isLoggedIn ?? false;\n }\n\n get userMustChangePassword() {\n return this.userServices?.mustChangePassword ?? false;\n }\n\n /**\n * Getting the authentication types of the application\n */\n get authenticationTypes(): AuthenticationType[] {\n const authenticationTypes = this.getContributionAsArray(\"security\", [\n DEFAULT_AUTHENTICATION_TYPE,\n ]);\n\n if (authenticationTypes) {\n //put primary first\n return authenticationTypes?.sort((a, b) =>\n a.isPrimary === b.isPrimary ? 0 : a.isPrimary ? -1 : 1,\n );\n }\n\n return [DEFAULT_AUTHENTICATION_TYPE];\n }\n}\n","import { has } from \"lodash\";\n\nimport { BaseModel } from \"../base/BaseModel\";\nimport { AttributeCollection } from \"./AttributeCollection\";\n\nimport type { Data } from \"../../types/types\";\nimport type { ModelOptions } from \"../types\";\nimport type { AttributeSetContributions } from \"./types\";\n\nexport class AttributeSetModel extends BaseModel<\n Data,\n AttributeSetContributions\n> {\n private _key: string;\n private _attributeCollection: AttributeCollection;\n\n constructor(\n key = \"\",\n data: Data,\n contributions: AttributeSetContributions,\n modelOptions?: ModelOptions,\n ) {\n super(data, contributions, modelOptions);\n\n const attributeContributions = this.contributions.attributes\n ? this.contributions.attributes.filter((contribution) => {\n const [contributionKey] = Object.keys(contribution);\n return has(this.data, contributionKey);\n })\n : [];\n\n this._attributeCollection = new AttributeCollection(\n this.data,\n attributeContributions,\n { ...modelOptions, isReadonly: true },\n );\n\n this._key = key;\n }\n\n get key() {\n return this._key;\n }\n\n set key(key: string) {\n this._key = key;\n }\n\n get label() {\n return this.contributions.label;\n }\n\n /**\n * Retrieve attribute collection\n */\n get attributeCollection() {\n return this._attributeCollection;\n }\n\n /**\n * Set the attributes with a new AttributeCollection\n */\n set attributeCollection(collection: AttributeCollection) {\n this._attributeCollection = collection;\n }\n\n private createChildAttributeSetModel(\n key: string,\n dataObject: object,\n index?: number,\n ) {\n type objects = Record<string, AttributeSetContributions>;\n const objects = this.contributions.objects as objects;\n\n return new AttributeSetModel(\n index ? `${key}-${index + 1}` : key,\n {\n ...dataObject,\n dynamicschema: this.data.dynamicschema,\n },\n objects?.[key],\n this.modelOptions,\n );\n }\n\n /**\n * Retrieve child {@code AttributeSetModel}s\n */\n getChildAttributeSets() {\n if (!this.contributions.objects) {\n return [];\n }\n\n const childAttributeSets = [];\n for (const key of Object.keys(this.contributions.objects)) {\n if (key in this.data) {\n const attributeData = this.data[key];\n if (Array.isArray(attributeData)) {\n for (const [i, dataObject] of attributeData.entries()) {\n childAttributeSets.push(\n this.createChildAttributeSetModel(key, dataObject, i),\n );\n }\n } else {\n childAttributeSets.push(\n this.createChildAttributeSetModel(key, attributeData as Data),\n );\n }\n }\n }\n return childAttributeSets;\n }\n}\n","import { TITLE } from \"../../layouthints/LayoutHints\";\nimport { ActionCollection } from \"../actions/ActionCollection\";\nimport { AttributeCollection } from \"../attributes/AttributeCollection\";\nimport { ResourceModel } from \"../base/ResourceModel\";\n\nimport type { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ModelWithChildModels, ModularUIModel } from \"../types\";\nimport type {\n BaseDetailContributions,\n DetailData,\n DetailPanelContributions,\n} from \"./types\";\n\n/**\n * Base class for details<br/>\n * For instance the details of case 1<br/>\n * For instance the details of record 12<br/>\n */\nexport class DetailModel<\n D extends DetailData = DetailData,\n C extends BaseDetailContributions = DetailPanelContributions,\n> extends ResourceModel<D, C> {\n private _attributeCollection: AttributeCollection;\n private _metadataCollection: AttributeCollection;\n private _actionCollection: ActionCollection;\n\n constructor(modularuiResponse?: ModularUIResponse) {\n super(modularuiResponse);\n\n this._attributeCollection = this.createAttributeCollection();\n this._metadataCollection = this.createMetadataCollection();\n this._actionCollection = this.createActionCollection();\n }\n\n get type() {\n return \"Detail\";\n }\n\n static override get modelName() {\n return \"DetailModel\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n const resourceType = data.resourcetype;\n const endsWithDetailPanel = resourceType.endsWith(\"DetailPanel\");\n const otherPanel = [\n \"Detail\",\n \"CasePropertiesPanel\",\n \"CasePropertiesPanelDetail\",\n ].includes(resourceType);\n\n return endsWithDetailPanel || otherPanel;\n }\n\n override getInitialChildModelLinks() {\n return this._attributeCollection.getInitialChildModelLinks();\n }\n\n override setChildModels(\n models: ModelWithChildModels[],\n errors: ErrorResponse[],\n ) {\n this._attributeCollection.setChildModels(models, errors);\n }\n\n /**\n * Getting the unique identifier of the details\n */\n get id() {\n const id = this.getDataAsNumber(\"_id\");\n if (id) {\n return id;\n }\n return this.getDataAsString(\"_id\", this.key);\n }\n\n override get label() {\n return this.getContributionAsString(\"label\", \"\");\n }\n\n /**\n * Attribute collection\n */\n createAttributeCollection() {\n const attributeContributions = this.getContributionAsArray(\n \"attributes\",\n [],\n ).filter((contribution: object) => {\n const [key] = Object.keys(contribution);\n return key in this.data;\n });\n\n return new AttributeCollection(this.data, attributeContributions, {\n ...this.modelOptions,\n isReadonly: true,\n });\n }\n\n get attributeCollection() {\n return this._attributeCollection;\n }\n\n set attributeCollection(collection: AttributeCollection) {\n this._attributeCollection = collection;\n }\n\n /**\n * Retrieve list of visible attributes\n */\n get attributes() {\n return this.attributeCollection.all.filter(\n (attribute) => !attribute.layouthint.has(TITLE) && !attribute.isHidden,\n );\n }\n\n /**\n * Retrieve an attribute by it's key\n */\n getAttributeByKey(key: string) {\n return this._attributeCollection.getAttributeByKey(key);\n }\n\n /**\n * Metadata collection\n */\n createMetadataCollection() {\n const metadata: object = this.getContributionAsObject(\"metadata\", {});\n\n const metadataContributions = Object.entries(metadata).map(\n ([key, value]) => ({ [key]: value }),\n );\n\n return new AttributeCollection(this.data, metadataContributions, {\n ...this.modelOptions,\n isReadonly: true,\n });\n }\n\n get metadataCollection() {\n return this._metadataCollection;\n }\n\n set metadataCollection(collection: AttributeCollection) {\n this._metadataCollection = collection;\n }\n\n /**\n * Action collection\n */\n createActionCollection() {\n const actionsData = this.getDataAsArray(\"actions\", []);\n const actionsContributions = this.getContributionAsArray(\"actions\", []);\n\n return new ActionCollection(actionsData, actionsContributions);\n }\n\n get actionCollection() {\n return this._actionCollection;\n }\n\n set actionCollection(actionCollection: ActionCollection) {\n this._actionCollection = actionCollection;\n }\n\n /**\n * Determines if this is a case\n */\n get isCase() {\n return this.getContributionAsString(\"resourcetype\") === \"CaseView\";\n }\n\n /**\n * Getting the attribute that has as layout hint 'title'\n */\n get titleAttribute() {\n return this._attributeCollection.getAttributeByLayoutHint(TITLE);\n }\n\n /**\n * Update current detail with a new detail model and return a cloned version of the model\n */\n update(model: ModularUIModel) {\n if (model instanceof DetailModel) {\n const clonedModel = new DetailModel(model.modularuiResponse);\n\n clonedModel.attributeCollection = model.attributeCollection;\n clonedModel.metadataCollection = model.metadataCollection;\n clonedModel.actionCollection = model.actionCollection;\n\n return clonedModel;\n }\n\n return this;\n }\n\n equals(model: DetailModel) {\n return this.id?.toString() === model.id?.toString();\n }\n}\n","import { BaseCollection } from \"../base/BaseCollection\";\n\nimport type { TaskGroupModel } from \"./TaskGroupModel\";\n\nexport class TaskGroupCollection extends BaseCollection<TaskGroupModel> {\n /**\n * Indicates if the taskgroup collection has has tasks\n */\n hasTasks() {\n return this.collection.some((taskgroup) => taskgroup.hasTasks());\n }\n}\n","import { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport { ActionCollection } from \"../actions/ActionCollection\";\nimport { ResourceModel } from \"../base/ResourceModel\";\n\nimport type { ModelOptions } from \"../types\";\nimport type { TaskGroupContributions, TaskGroupData } from \"./types\";\n\nexport class TaskGroupModel extends ResourceModel<\n TaskGroupData,\n TaskGroupContributions\n> {\n private _actionCollection: ActionCollection;\n\n constructor(response?: ModularUIResponse) {\n super(response);\n\n const actionsData =\n this.data.actions && Array.isArray(this.data.actions)\n ? this.data.actions\n : [];\n const actionsContributions =\n this.contributions.actions && Array.isArray(this.contributions.actions)\n ? this.contributions.actions\n : [];\n\n this._actionCollection = new ActionCollection(\n actionsData,\n actionsContributions,\n );\n\n try {\n const selfHref = this.selflink.href.href;\n if (selfHref) {\n this.key = selfHref.substring(selfHref.lastIndexOf(\"/\") + 1);\n }\n } catch {\n this.key = this.getDataAsString(\"name\", \"unknown\");\n }\n }\n\n static create(\n key: string,\n data: TaskGroupData,\n contributions: TaskGroupContributions,\n modelOptions?: ModelOptions,\n ) {\n const taskgroup = new ModularUIResponse();\n taskgroup.key = key;\n taskgroup.data = data;\n taskgroup.contributions = contributions;\n taskgroup.origin = modelOptions?.origin;\n taskgroup.contextPath = modelOptions?.contextPath;\n\n return new TaskGroupModel(taskgroup);\n }\n\n get type() {\n return \"TaskGroup\";\n }\n\n static override get modelName() {\n return \"TaskGroupModel\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n return data.resourcetype === \"TaskGroup\";\n }\n\n hasTasks() {\n return this.actionCollection.length > 0;\n }\n\n get actionCollection() {\n return this._actionCollection;\n }\n}\n","import { IllegalStateException } from \"../../exceptions/IllegalStateException\";\nimport { TITLE } from \"../../layouthints/LayoutHints\";\nimport { DetailModel } from \"../detail/DetailModel\";\nimport { TaskGroupCollection } from \"../taskgroup/TaskGroupCollection\";\nimport { TaskGroupModel } from \"../taskgroup/TaskGroupModel\";\n\nimport type { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport type { ActionContributions, ActionData } from \"../actions/types\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ModelWithChildModels } from \"../types\";\nimport type { CaseViewContributions, CaseViewData } from \"./types\";\n\n/**\n * Model containing the details of one case.\n */\nexport class CaseViewModel extends DetailModel<\n CaseViewData,\n CaseViewContributions\n> {\n private _taskGroupCollection: TaskGroupCollection;\n\n constructor(caseviewData?: ModularUIResponse) {\n super(caseviewData);\n\n this._taskGroupCollection = this.createTaskGroupCollection();\n }\n\n override get type() {\n return \"CaseView\";\n }\n\n static override get modelName() {\n return \"CaseViewModel\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n return data.resourcetype === \"CaseView\";\n }\n\n override getInitialChildModelLinks() {\n return this.links.getLinksByGroup(\"taskgroup\").all;\n }\n\n /**\n * Getting panel links\n */\n get panelLinks() {\n return this.links.getLinksByGroup(\"panel\");\n }\n\n override setChildModels(\n models: ModelWithChildModels[],\n errors: ErrorResponse[],\n ) {\n super.setChildModels(models, errors);\n\n const taskGroupModels = models.filter(\n (model): model is TaskGroupModel => model instanceof TaskGroupModel,\n );\n\n this.taskGroupCollection.add(taskGroupModels);\n }\n\n /**\n * Getting the case name\n */\n get casename() {\n return this.attributeCollection.getAttributeByLayoutHint(TITLE);\n }\n\n /**\n * Retrieve the case label, this can be configured with a case property with the layout hint 'title'\n */\n override get label() {\n return this.casename?.readonlyvalue || \"\";\n }\n\n /**\n * Retrieve the label that was configured on the caseview\n */\n get viewLabel() {\n return this.getContributionAsString(\"label\", \"\");\n }\n\n /**\n * Check if an introtext exists for this caseview\n */\n hasIntroText() {\n return this.introtext !== \"\";\n }\n\n /**\n * Getting the introduction text configured on the case view\n */\n get introtext() {\n const content = this.data._content;\n\n if (\n content &&\n \"text\" in content &&\n typeof content.text === \"object\" &&\n content.text != null &&\n \"message\" in content.text\n ) {\n return content.text.message;\n }\n\n const contributions = this.contributions;\n if (contributions.text) {\n if (\n typeof contributions.text === \"object\" &&\n \"message\" in contributions.text &&\n typeof contributions.text.message === \"string\"\n ) {\n return contributions.text.message;\n }\n return contributions.text;\n }\n\n if (Array.isArray(contributions.texts)) {\n return contributions.texts[0].text;\n }\n\n return \"\";\n }\n\n /**\n * Getting the self href\n */\n override get selfhref() {\n const selfLink = this.links.getLinkByKey(\"self\");\n\n if (selfLink == null) {\n throw new IllegalStateException(\"No self href available\");\n }\n\n return selfLink.href;\n }\n\n private createTaskGroupCollection() {\n const data = this.getDataAsArray(\"taskgroups\", []) as {\n actions: ActionData[];\n name: string;\n }[];\n const contributions = this.getContributionAsArray(\"taskgroups\", []) as {\n name: string;\n label: string;\n actions: ActionContributions[];\n }[];\n\n const taskgroups = [];\n\n for (const taskgroupData of data) {\n const name = taskgroupData.name;\n const taskgroupContributions = contributions.find(\n (taskgroupContribution) => taskgroupContribution.name === name,\n );\n\n if (taskgroupContributions) {\n const taskgroup = TaskGroupModel.create(\n name,\n taskgroupData,\n taskgroupContributions,\n this.modelOptions,\n );\n taskgroups.push(taskgroup);\n }\n }\n\n return new TaskGroupCollection(taskgroups);\n }\n\n set taskGroupCollection(taskgroups: TaskGroupCollection) {\n this._taskGroupCollection = taskgroups;\n }\n\n get taskGroupCollection() {\n return this._taskGroupCollection;\n }\n\n hasTaskGroups() {\n return this.taskGroupCollection && this.taskGroupCollection.hasItems();\n }\n}\n","import { PARAMETER_SEPARATOR } from \"../../constants/Constants\";\nimport { AttributeFactory } from \"../attributes/AttributeFactory\";\nimport { ATTRIBUTE_TYPE, FILTER_TYPE } from \"../attributes/constants\";\nimport { BaseModel } from \"../base/BaseModel\";\n\nimport type {\n AttributeContributions,\n AttributeModel,\n MaybeAttributeValue,\n} from \"../attributes/types\";\nimport type { GroupingContributions } from \"../list/types\";\nimport type { ModelOptions } from \"../types\";\nimport type { FilterContribution, FilterData, FilterModel } from \"./types\";\n\nexport class BaseFilterModel<\n A extends AttributeModel = AttributeModel,\n D extends FilterData = FilterData,\n C extends FilterContribution = FilterContribution,\n >\n extends BaseModel<D, C>\n implements FilterModel\n{\n private _attribute: A | undefined;\n private _context: GroupingContributions | undefined;\n private _listKey: string | undefined;\n\n constructor(data?: D, contributions?: C, modelOptions?: ModelOptions) {\n super(data, contributions, modelOptions);\n\n this._attribute = this.createAttribute(\n this.type,\n this.param || \"\",\n this.data,\n this.contributions,\n );\n\n this._listKey = this.getContributionAsString(\"listKey\");\n }\n\n get attribute() {\n return this._attribute;\n }\n\n get type() {\n const type = this.getContributionAsString(\"type\", \"string\");\n return type.replace(\"filter\", \"\") as FILTER_TYPE;\n }\n\n /**\n * Getting the name of the filter\n */\n get name() {\n if (this.listkey) {\n return this.listkey + PARAMETER_SEPARATOR + this.param;\n }\n return this.param;\n }\n\n get param() {\n return this.getDataAsString(\"param\") ?? this.getDataAsString(\"name\", \"\");\n }\n\n /**\n * Inidiates if filter is multiplechoice\n */\n get isMultiple() {\n return this.getContributionAsBoolean(\"multiplechoice\", false);\n }\n\n /**\n * Getting context information\n */\n get context() {\n return this._context;\n }\n\n /**\n * Set context of filter\n */\n set context(context) {\n this._context = context;\n }\n\n setContext(context: GroupingContributions) {\n this.context = context;\n }\n\n /**\n * Getting the context label\n */\n get contextLabel() {\n return this.context?.label ?? \"\";\n }\n\n /**\n * Getting key of the list these filters apply to\n */\n get listkey() {\n return this._listKey;\n }\n\n /**\n * Set key of list this filter belongs to\n */\n set listkey(key) {\n this._listKey = key;\n }\n\n /**\n * Getting the label of the filter\n */\n get label() {\n return this.getContributionAsString(\"label\", \"\");\n }\n\n /**\n * Retrieve the parameters with it's value for this filter\n */\n get params() {\n if (!this.param) {\n return [];\n }\n\n return [\n {\n name: this.param,\n value: this.attribute?.value,\n },\n ];\n }\n\n /**\n * Getting the value of the filter\n */\n get value() {\n return this.attribute?.value;\n }\n\n /**\n * Getting the inputvalue of the filter\n */\n get inputvalue() {\n return this.attribute?.inputvalue ?? \"\";\n }\n\n private getAttributeType(type: FILTER_TYPE) {\n switch (type) {\n case FILTER_TYPE.CHOICE:\n return ATTRIBUTE_TYPE.CHOICE;\n case FILTER_TYPE.DATE:\n return ATTRIBUTE_TYPE.DATE;\n case FILTER_TYPE.DATETIME:\n return ATTRIBUTE_TYPE.DATETIME;\n case FILTER_TYPE.DATERANGE:\n case FILTER_TYPE.DATETIMERANGE:\n return ATTRIBUTE_TYPE.RANGE;\n case FILTER_TYPE.NUMBER:\n case FILTER_TYPE.NUMBERRANGE:\n return ATTRIBUTE_TYPE.RANGE;\n default:\n return ATTRIBUTE_TYPE.STRING;\n }\n }\n\n private getChildType(type: FILTER_TYPE) {\n switch (type) {\n case FILTER_TYPE.DATERANGE:\n return ATTRIBUTE_TYPE.DATE;\n case FILTER_TYPE.DATETIMERANGE:\n return ATTRIBUTE_TYPE.DATETIME;\n case FILTER_TYPE.NUMBERRANGE:\n return ATTRIBUTE_TYPE.NUMBER;\n default:\n return ATTRIBUTE_TYPE.STRING;\n }\n }\n\n createAttribute<AD extends FilterData = D, AC extends FilterContribution = C>(\n type: FILTER_TYPE,\n param: string,\n data: AD,\n contributions: AC,\n ) {\n if (type === FILTER_TYPE.ASSIGNMENT) {\n return undefined;\n }\n\n const attributeType: ATTRIBUTE_TYPE = this.getAttributeType(type);\n\n const attributeContributions: AC = {\n ...contributions,\n type: attributeType,\n };\n if (\n attributeType === ATTRIBUTE_TYPE.RANGE &&\n \"children\" in attributeContributions &&\n Array.isArray(attributeContributions.children)\n ) {\n const childType: ATTRIBUTE_TYPE = this.getChildType(type);\n attributeContributions.children = attributeContributions.children.map(\n (child) => {\n const key = Object.keys(child)[0];\n return {\n [key]: {\n ...child[key],\n type: childType,\n },\n };\n },\n );\n }\n\n return AttributeFactory.createAttribute<A>(\n param,\n data,\n attributeContributions as unknown as AttributeContributions,\n this.modelOptions,\n );\n }\n\n /**\n * Reset the value of this filter to undefined\n */\n reset() {\n this.attribute?.reset();\n return this;\n }\n\n /**\n * Update this filter with input name and value\n */\n update(_attribute: AttributeModel | undefined, value: MaybeAttributeValue) {\n this.attribute?.update(value);\n }\n\n /**\n * Inidicates if filter is a quick search filter\n */\n isQuickSearch() {\n return this.getContributionAsBoolean(\"quicksearch\", false);\n }\n\n /**\n * Inidiates if filter is active\n */\n isActive() {\n return this.attribute?.initvalue != null;\n }\n\n /**\n * Inidiates if filter is valid\n */\n get isValid() {\n return this.attribute?.isValid ?? false;\n }\n\n get readonlyvalue() {\n return this.attribute?.readonlyvalue ?? \"\";\n }\n\n /**\n * Get assistant message\n */\n get assistantMessage() {\n return this.getContributionAsString(\"assistant\");\n }\n}\n","import { IllegalStateException } from \"../../exceptions/IllegalStateException\";\nimport { FILTER_TYPE, OPTION_MODE } from \"../attributes/constants\";\nimport { BaseFilterModel } from \"./BaseFilterModel\";\n\nimport type { AttributeModel, NamedDynamicSchema } from \"../attributes/types\";\nimport type { ModelOptions } from \"../types\";\nimport type {\n AssignmentFilterContribution,\n AssignmentFilterData,\n ChoiceFilterContribution,\n ChoiceFilterData,\n} from \"./types\";\n\n/**\n * Assignment filter consists of two filters: assignment type and user filter\n */\nexport class AssignmentFilterModel extends BaseFilterModel<\n AttributeModel,\n AssignmentFilterData,\n AssignmentFilterContribution\n> {\n private _assignmenttype: AttributeModel;\n private _user: AttributeModel;\n\n constructor(\n data?: AssignmentFilterData,\n contributions?: AssignmentFilterContribution,\n modelOptions?: ModelOptions,\n ) {\n super(data, contributions, modelOptions);\n\n this._assignmenttype = this.createAssignmentTypeModel();\n this._user = this.createUserModel();\n }\n\n get key() {\n return this.getDataAsString(\"name\", \"\");\n }\n\n get contextid() {\n return this.getContributionAsString(\"contextid\", \"\");\n }\n\n /**\n * Creates an assignmenttype model when assignmenttype json is present\n */\n createAssignmentTypeModel() {\n const key = `${this.contextid}ASSIGNMENTTYPE`;\n const assignmentTypeData = this.data[key] as ChoiceFilterData;\n\n if (typeof assignmentTypeData === \"undefined\") {\n throw new IllegalStateException(\n `Missing assignment type data for ${key}`,\n );\n }\n const dynamicschema = this.data.dynamicschema as NamedDynamicSchema;\n if (dynamicschema) {\n assignmentTypeData.dynamicschema = {\n [key]: dynamicschema[key],\n };\n }\n\n const contributionsByKey = this.contributions[\n key\n ] as ChoiceFilterContribution;\n const assignmentTypeContributions = {\n ...contributionsByKey,\n enumerated: true,\n optionMode: assignmentTypeData._links\n ? OPTION_MODE.LOOKUP\n : OPTION_MODE.STATIC,\n };\n\n const param = assignmentTypeData.name || assignmentTypeData.param;\n\n return this.createAttribute(\n FILTER_TYPE.CHOICE,\n param,\n assignmentTypeData,\n assignmentTypeContributions,\n ) as AttributeModel;\n }\n\n /**\n * Creates an assignmenttype model when userkey json is present\n */\n createUserModel() {\n const key = `${this.contextid}USERKEY`;\n const userData = this.data[key] as ChoiceFilterData;\n\n const dynamicschema = this.data.dynamicschema as NamedDynamicSchema;\n if (dynamicschema && dynamicschema[key]) {\n userData.dynamicschema = {\n [key]: dynamicschema[key],\n };\n }\n const contributionsByKey = this.contributions[\n key\n ] as ChoiceFilterContribution;\n const userContributions = {\n ...contributionsByKey,\n optionMode: userData._links ? OPTION_MODE.LOOKUP : OPTION_MODE.STATIC,\n };\n\n const param = userData.name || userData.param;\n\n return this.createAttribute(\n FILTER_TYPE.CHOICE,\n param,\n userData,\n userContributions,\n ) as AttributeModel;\n }\n\n /**\n * The assignment filter consists of two part. This method return the assignment type attribute\n */\n get assignmenttype() {\n return this._assignmenttype;\n }\n\n /**\n * The assignment filter consists of two part. This method return the user identifier attribute\n */\n get user() {\n return this._user;\n }\n\n /**\n * Getting the parameters of this filter\n */\n override get params(): { name: string; value: string }[] {\n if (this.assignmenttype && this.user) {\n return [\n {\n name: this.assignmenttype.name,\n value: this.assignmenttype.value as string,\n },\n {\n name: this.user.name,\n value: this.user.value as string,\n },\n ];\n }\n\n return [];\n }\n\n /**\n * Reset the values within the filter\n */\n override reset() {\n if (this.assignmenttype) {\n this.assignmenttype.reset();\n }\n if (this.user) {\n this.user.reset();\n }\n\n return this;\n }\n\n /**\n * Update this filter\n */\n override update(attribute: AttributeModel, value: string) {\n if (this.user != null && this.user.key === attribute.key) {\n this.user.update(value);\n } else if (\n this.assignmenttype != null &&\n this.assignmenttype.key === attribute.key\n ) {\n this.assignmenttype.update(value);\n }\n }\n\n /**\n * Inidiates if filter is active\n */\n override isActive() {\n return (\n (this.assignmenttype != null && this.assignmenttype.initvalue !== null) ||\n (this.user != null && this.user.initvalue !== null)\n );\n }\n\n /**\n * Inidiates if filter is valid\n */\n override get isValid() {\n return (\n this.assignmenttype != null &&\n this.assignmenttype.isValid &&\n this.user != null &&\n this.user.isValid\n );\n }\n}\n","import { BaseFilterModel } from \"./BaseFilterModel\";\n\nimport type { ChoiceAttributeModel } from \"../attributes/ChoiceAttributeModel\";\nimport type { ModelOptions } from \"../types\";\nimport type { ChoiceFilterData, FilterContribution } from \"./types\";\n\n/**\n * The concept index model is a special filter used to index all first concept label letters in de modelcatalog.\n */\nexport class ConceptIndexFilterModel extends BaseFilterModel<\n ChoiceAttributeModel,\n ChoiceFilterData\n> {\n constructor(\n data: ChoiceFilterData,\n contributions: FilterContribution,\n modelOptions?: ModelOptions,\n ) {\n super(data, contributions, modelOptions);\n\n if (\n data &&\n \"options\" in data &&\n data.options &&\n Array.isArray(data.options)\n ) {\n const selectedValues = data.options\n .filter((option) => option.selected)\n .map((option) => option.key);\n\n data.options.forEach((option) => {\n this.attribute?.options.addOption(selectedValues, {\n code: option.key,\n label: option.key,\n });\n });\n }\n }\n}\n","import { RangeAttributeModel } from \"../attributes/RangeAttributeModel\";\nimport { BaseFilterModel } from \"./BaseFilterModel\";\n\nimport type { AttributeModel } from \"../attributes/types\";\n\n/**\n * Range filter, for instance a date range filter or a number range filter\n */\nexport class RangeFilterModel extends BaseFilterModel<RangeAttributeModel> {\n override update(attribute: AttributeModel | undefined, value: string) {\n if (this.attribute instanceof RangeAttributeModel) {\n this.attribute.update(value, attribute);\n } else {\n super.update(attribute, value);\n }\n }\n\n override get params() {\n if (this.attribute) {\n return [\n { name: this.attribute.start.name, value: this.attribute.start.value },\n { name: this.attribute.end.name, value: this.attribute.end.value },\n ];\n }\n return [];\n }\n}\n","import { BaseFilterModel } from \"./BaseFilterModel\";\n\nimport type { StringAttributeModel } from \"../attributes/StringAttributeModel\";\nimport type { AttributeValue, MaybeAttributeValue } from \"../attributes/types\";\nimport type { ModelOptions } from \"../types\";\nimport type { StringFilterContributions, StringFilterData } from \"./types\";\n\n/**\n * StringFilterModel can handle string filters with multiple setting\n */\nexport class StringFilterModel extends BaseFilterModel<\n StringAttributeModel,\n StringFilterData,\n StringFilterContributions\n> {\n private _isValid = true;\n private _value: MaybeAttributeValue;\n private _inputvalue: AttributeValue;\n\n constructor(\n data: StringFilterData,\n contributions: StringFilterContributions,\n modelOptions?: ModelOptions,\n ) {\n super(data, contributions, modelOptions);\n\n if (this.attribute) {\n const value = this.getDataAsString(\"value\", \"\");\n this.update(this.attribute, value);\n }\n\n // when formatted value set, make input value the initial input value\n this._inputvalue = this._value ?? \"\";\n }\n\n /**\n * Retrieve the parameters with its value for this filter\n */\n override get params() {\n if (!this.param) {\n return [];\n }\n\n return [\n {\n name: this.param,\n value: this.removeFormat(this.value ?? \"\"),\n },\n ];\n }\n\n /**\n * Getting the value of the filter\n */\n override get value() {\n return this._value;\n }\n\n override get inputvalue() {\n return this._inputvalue;\n }\n\n /**\n * Reset the value of this filter to undefined\n */\n override reset() {\n this._inputvalue = \"\";\n this._value = undefined;\n\n return this;\n }\n\n override get isValid() {\n return this._isValid;\n }\n\n /**\n * Update this filter with input name and value\n */\n override update(\n _attribute: StringAttributeModel | undefined,\n value: MaybeAttributeValue,\n ) {\n this._isValid = true;\n this._inputvalue = typeof value !== \"string\" ? String(value) : value;\n\n if (this.shouldHandleFormat()) {\n const values = this.isMultiple\n ? this._inputvalue.split(\",\").map((val) => val.trim())\n : [this._inputvalue.trim()];\n\n const outputValues = [];\n for (const val of values) {\n const formattedValue = this.formatValue(val);\n if (formattedValue !== \"\") {\n outputValues.push(formattedValue);\n\n if (!this.attribute?.validate(formattedValue)) {\n this._isValid = false;\n }\n }\n }\n\n this._value = outputValues.join(\",\");\n } else {\n this._value = value;\n }\n }\n\n get operator() {\n return this.getContributionAsString(\"operator\", \"\");\n }\n\n formatValue(value: string) {\n if (this.shouldHandleFormat()) {\n return this.attribute?.formatValue(value) || \"\";\n }\n return value;\n }\n\n isBSN() {\n return this.layouthint.has(\"bsn\");\n }\n\n isIBAN() {\n return this.layouthint.has(\"iban\");\n }\n\n isZipcode() {\n return this.layouthint.has(\"zipcode\");\n }\n\n removeFormat(value: MaybeAttributeValue) {\n if (value == null || value.toString() === \"\") {\n return \"\";\n }\n\n if (typeof value === \"string\" && this.shouldHandleFormat()) {\n return value.replace(/[^a-z0-9,]/gi, \"\");\n }\n\n return value;\n }\n\n shouldHandleFormat() {\n return (\n (this.operator === \"exactly\" || this.operator === \"isNot\") &&\n (this.isIBAN() || this.isZipcode() || this.isBSN())\n );\n }\n}\n","import { AssignmentFilterModel } from \"./AssignmentFilterModel\";\nimport { BaseFilterModel } from \"./BaseFilterModel\";\nimport { ConceptIndexFilterModel } from \"./ConceptIndexFilterModel\";\nimport { RangeFilterModel } from \"./RangeFilterModel\";\nimport { StringFilterModel } from \"./StringFilterModel\";\n\nimport type { ModelOptions } from \"../types\";\nimport type {\n AssignmentFilterContribution,\n AssignmentFilterData,\n ChoiceFilterData,\n ContributionsForFilterCollection,\n FilterContribution,\n FilterData,\n FilterModel,\n StringFilterContributions,\n StringFilterData,\n} from \"./types\";\n\nexport class FilterFactory {\n static createFilter(\n filterKey: string,\n data: FilterData,\n contributions: FilterContribution,\n modelOptions: ModelOptions,\n ) {\n const type = contributions.type ?? \"stringfilter\";\n if (type === \"choicefilter\" && filterKey === \"index\") {\n return new ConceptIndexFilterModel(\n data as ChoiceFilterData,\n contributions,\n modelOptions,\n );\n }\n\n if (type.includes(\"rangefilter\")) {\n return new RangeFilterModel(data, contributions, modelOptions);\n }\n\n if (type === \"assignmentfilter\") {\n return new AssignmentFilterModel(\n data as AssignmentFilterData,\n contributions as AssignmentFilterContribution,\n modelOptions,\n );\n }\n\n if (type === \"stringfilter\") {\n return new StringFilterModel(\n data as StringFilterData,\n contributions as StringFilterContributions,\n modelOptions,\n );\n }\n\n return new BaseFilterModel(data, contributions, modelOptions);\n }\n\n static setListKey(\n filter: FilterModel,\n contributions: ContributionsForFilterCollection,\n ) {\n if (\n \"listkey\" in contributions &&\n typeof contributions.listkey === \"string\"\n ) {\n filter.listkey = contributions.listkey;\n }\n }\n\n static setFilterContext(\n filter: FilterModel,\n contextId: string,\n contributions: ContributionsForFilterCollection,\n ) {\n if (contributions.contexts) {\n const filterContext = contributions.contexts.find(\n (context) => context.id === contextId,\n );\n if (filterContext) {\n filter.setContext(filterContext);\n }\n }\n }\n}\n","import { RangeAttributeModel } from \"../attributes/RangeAttributeModel\";\nimport { BaseCollection } from \"../base/BaseCollection\";\nimport { AssignmentFilterModel } from \"./AssignmentFilterModel\";\nimport { FilterFactory } from \"./FilterFactory\";\nimport { RangeFilterModel } from \"./RangeFilterModel\";\n\nimport type { AttributeModel, MaybeAttributeValue } from \"../attributes/types\";\nimport type { ModelOptions } from \"../types\";\nimport type {\n ContributionsForFilterCollection,\n FilterCollectionData,\n FilterModel,\n} from \"./types\";\n\n/**\n * Contains a collection of filters\n */\nexport class FilterCollection extends BaseCollection<FilterModel> {\n constructor(\n data: FilterCollectionData = {},\n contributions?: ContributionsForFilterCollection,\n modelOptions?: ModelOptions,\n ) {\n super();\n\n this.collection = this.createCollection(data, contributions, modelOptions);\n }\n\n private createCollection(\n data: FilterCollectionData,\n contributions?: ContributionsForFilterCollection,\n modelOptions?: ModelOptions,\n ) {\n const collection = [];\n\n if (\n contributions &&\n \"filter\" in contributions &&\n Array.isArray(contributions.filter)\n ) {\n for (const filterContribution of contributions.filter) {\n const [filterKey] = Object.keys(filterContribution);\n\n const filterDataByKey = data[filterKey];\n const filterContributionByKey = filterContribution[filterKey];\n\n const filter = FilterFactory.createFilter(\n filterKey,\n filterDataByKey,\n filterContributionByKey,\n {\n origin: modelOptions?.origin,\n contextPath: modelOptions?.contextPath,\n },\n );\n\n FilterFactory.setListKey(filter, contributions);\n\n if (filterContributionByKey.contextid) {\n FilterFactory.setFilterContext(\n filter,\n filterContributionByKey.contextid,\n contributions,\n );\n }\n\n collection.push(filter);\n }\n }\n\n return collection;\n }\n\n /**\n * Call the reset function on all filters\n */\n reset() {\n this.collection = this.collection.map((filter) => filter.reset());\n\n return this;\n }\n\n /**\n * Checks if range attribute key equals key\n */\n checkRangeFilterByAttributeKey(filter: RangeFilterModel, key: string) {\n const rangeAttribute = filter.attribute;\n\n if (rangeAttribute instanceof RangeAttributeModel) {\n const start = rangeAttribute.start as AttributeModel;\n const end = rangeAttribute.end as AttributeModel;\n\n return (\n rangeAttribute.key === key || start?.name === key || end?.name === key\n );\n }\n\n return false;\n }\n\n /**\n * Check if assignment filter attribute matches key\n */\n checkAssignmentFilterByAttributeKey(\n filter: AssignmentFilterModel,\n key: string,\n ) {\n return (\n filter.key === key ||\n filter.user?.key === key ||\n filter.assignmenttype?.key === key\n );\n }\n\n /**\n * Getting the filter by name\n */\n getFilterByAttributeKey(key: string) {\n return this.find((filter) => {\n if (filter instanceof RangeFilterModel) {\n return this.checkRangeFilterByAttributeKey(filter, key);\n }\n\n if (filter instanceof AssignmentFilterModel) {\n return this.checkAssignmentFilterByAttributeKey(filter, key);\n }\n\n return filter.attribute?.key === key;\n });\n }\n\n /**\n * Update Filter by input name and value\n */\n update(attribute: AttributeModel, value: MaybeAttributeValue) {\n const filterToUpdate = attribute.parentKey\n ? this.getFilterByAttributeKey(attribute.parentKey)\n : this.getFilterByAttributeKey(attribute.key);\n\n if (!filterToUpdate) {\n throw new Error(`Can not find filter by attribute key: ${attribute.key}`);\n }\n\n filterToUpdate.update(attribute, value);\n\n this.collection = this.collection.map((filter) => {\n if (filter.name === filterToUpdate.name) {\n return filterToUpdate;\n }\n\n return filter;\n });\n }\n\n /**\n * Retrieve if all filters are valid\n */\n get isValid() {\n return this.collection.every((filter) => filter.isValid);\n }\n\n /**\n * Indicates if an active filter is present in the collection\n */\n hasActiveFilters() {\n return this.collection.some((filter) => filter.isActive());\n }\n}\n","import { ResourceCollection } from \"../base/ResourceCollection\";\n\nimport type { ConceptLinkModel } from \"./ConceptLinkModel\";\n\nexport class ConceptLinkCollection extends ResourceCollection<ConceptLinkModel> {}\n","import { TIMEVERSION_FILTER_NAME } from \"../../constants/Constants\";\nimport { DateUtil } from \"../../utils/datetime/DateTimeUtil\";\nimport { ResourceModel } from \"../base/ResourceModel\";\nimport { FilterCollection } from \"../filters/FilterCollection\";\nimport { ConceptLinkCollection } from \"./ConceptLinkCollection\";\nimport { ConceptLinkModel } from \"./ConceptLinkModel\";\n\nimport type { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ModelWithChildModels } from \"../types\";\nimport type { ConceptIndexContributions, ConceptIndexData } from \"./types\";\n\n/**\n * Get Index of concepts, to filter model catalog\n */\nexport class ConceptIndexModel extends ResourceModel<\n ConceptIndexData,\n ConceptIndexContributions\n> {\n private _filterCollection: FilterCollection;\n private _concepts: ConceptLinkCollection;\n\n constructor(modularuiResponse: ModularUIResponse) {\n super(modularuiResponse);\n\n this._filterCollection = new FilterCollection(\n this.data.filter,\n {\n filter: this.contributions.filter,\n dynamicschema: this.data.dynamicschema,\n },\n this.modelOptions,\n );\n\n this._concepts = new ConceptLinkCollection();\n this._concepts.collection = this.data._embedded\n ? this.data._embedded.results.map(\n (concept) =>\n new ConceptLinkModel(\n concept.concept,\n this.entryDate,\n this.modelOptions,\n ),\n )\n : [];\n }\n\n get type() {\n if (this.resourcetype.toLowerCase() === \"relatedconcepts\") {\n return \"RelatedConcepts\";\n }\n\n return \"ConceptIndex\";\n }\n\n static override get modelName() {\n return \"ConceptIndexModel\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n const resourceType = data.resourcetype;\n return (\n resourceType === \"ConceptSearch\" ||\n resourceType.toLowerCase() === \"relatedconcepts\"\n );\n }\n\n override getInitialChildModelLinks() {\n return this.items.getInitialChildModelLinks();\n }\n\n override setChildModels(\n models: ModelWithChildModels[],\n errors: ErrorResponse[],\n ) {\n this.items.setChildModels(models, errors);\n }\n\n /**\n * Getting the self link of this list\n */\n override get selfhref() {\n const { href } = this.selflink;\n\n if (this.filterCollection.hasItems()) {\n this.filterCollection.forEach((filter) => {\n filter.params.forEach((param) => {\n if (param.value) {\n href.setParameter(param.name, param.value);\n } else {\n href.removeParameter(param.name);\n }\n });\n });\n }\n\n return href;\n }\n\n override get label() {\n return this.getContributionAsString(\"label\", \"\");\n }\n\n /**\n * Retrieve filters of conceptindex model\n */\n get filterCollection() {\n return this._filterCollection;\n }\n\n /**\n * Get index filter\n */\n get indexfilter() {\n return this.filterCollection.getFilterByAttributeKey(\"index\");\n }\n\n /**\n * Retrieve modelcatalog.js of content toc\n */\n get entryDate() {\n const timeversionFilter = this.filterCollection.getFilterByAttributeKey(\n TIMEVERSION_FILTER_NAME,\n );\n if (timeversionFilter && timeversionFilter.attribute) {\n return timeversionFilter.attribute.value as string;\n }\n\n return DateUtil.now();\n }\n\n /**\n * get searchterm filter\n */\n get searchtermfilter() {\n return this.filterCollection.getFilterByAttributeKey(\"label\");\n }\n\n /**\n * Get model category filter\n */\n get modelCategoryFilter() {\n return this.filterCollection.getFilterByAttributeKey(\"modelCategory\");\n }\n\n /**\n * Get concept links found by index filter\n */\n get items() {\n return this._concepts;\n }\n\n /**\n * Replace the items collection\n */\n set items(itemCollection) {\n this._concepts = itemCollection;\n }\n}\n","import { ResourceCollection } from \"../base/ResourceCollection\";\n\nimport type { ContentLinkModel } from \"./ContentLinkModel\";\n\nexport class ContentLinkCollection extends ResourceCollection<ContentLinkModel> {}\n","import { ChoiceAttributeModel } from \"../attributes/ChoiceAttributeModel\";\nimport { ResourceModel } from \"../base/ResourceModel\";\nimport { FilterCollection } from \"../filters/FilterCollection\";\nimport { Href } from \"../href/Href\";\nimport { ContentLinkCollection } from \"./ContentLinkCollection\";\nimport { ContentLinkModel } from \"./ContentLinkModel\";\n\nimport type { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ModelWithChildModels } from \"../types\";\nimport type { ContentIndexContributions, ContentIndexData } from \"./types\";\n\n/**\n * Get Index of concepts, to filter model catalog\n */\nexport class ContentIndexModel extends ResourceModel<\n ContentIndexData,\n ContentIndexContributions\n> {\n private _filterCollection: FilterCollection;\n private _content: ContentLinkCollection;\n\n constructor(modularuiResponse: ModularUIResponse) {\n super(modularuiResponse);\n\n this._filterCollection = new FilterCollection(\n this.data.filter,\n {\n filter: this.contributions.filter,\n dynamicschema: this.data.dynamicschema,\n },\n this.modelOptions,\n );\n\n this._content = new ContentLinkCollection();\n this._content.collection = this.data._embedded\n ? this.data._embedded.results.map(\n (content) =>\n new ContentLinkModel(content.content, undefined, this.modelOptions),\n )\n : [];\n }\n\n get type() {\n return \"ContentIndex\";\n }\n\n static override get modelName() {\n return \"ContentIndexModel\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n return data.resourcetype === \"ContentSearch\";\n }\n\n override getInitialChildModelLinks() {\n return this.items.getInitialChildModelLinks();\n }\n\n override setChildModels(\n models: ModelWithChildModels[],\n errors: ErrorResponse[],\n ) {\n this.items.setChildModels(models, errors);\n }\n\n /**\n * Getting the self link of this list\n */\n override get selfhref() {\n const href = this.selflink.href;\n\n this.filterCollection.forEach((filter) => {\n filter.params.forEach((param) => {\n if (param.value) {\n href.setParameter(param.name, param.value);\n } else {\n href.removeParameter(param.name);\n }\n });\n });\n\n return href;\n }\n\n override get label() {\n return this.getContributionAsString(\"label\", \"unknown\");\n }\n\n /**\n * Retrieve filters of conceptindex model\n */\n get filterCollection() {\n return this._filterCollection;\n }\n\n /**\n * Get index filter\n */\n get indexfilter() {\n return this._filterCollection.getFilterByAttributeKey(\"index\");\n }\n\n /**\n * Retrieve content collection\n */\n get items() {\n return this._content;\n }\n\n hasIndexFilter() {\n const filterAttribute = this.indexfilter?.attribute;\n\n return (\n filterAttribute instanceof ChoiceAttributeModel &&\n filterAttribute.options.length > 0\n );\n }\n\n hasFiltersSet() {\n return this.filterCollection.some((filter) => filter.isActive());\n }\n\n hasNoFiltersSet() {\n return !this.hasFiltersSet();\n }\n\n getFirstCharHref() {\n const filterAttribute = this.indexfilter?.attribute;\n\n let firstChar = \"#\";\n if (filterAttribute instanceof ChoiceAttributeModel) {\n firstChar = filterAttribute.options.filter(\n (option) => option.code !== \"0\",\n )[0].code;\n }\n\n return new Href(this.selfhref).addParameter(\"index\", firstChar);\n }\n}\n","import { TIMEVERSION_FILTER_NAME } from \"../../constants/Constants\";\nimport { ResourceModel } from \"../base/ResourceModel\";\nimport { FilterCollection } from \"../filters/FilterCollection\";\nimport { ContentTypeModel } from \"./ContentTypeModel\";\nimport { SectionModel } from \"./SectionModel\";\n\nimport type { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport type { ISO_DATE } from \"../../types/types\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ModelWithChildModels } from \"../types\";\nimport type { ContentDetailContributions, ContentDetailData } from \"./types\";\n\n/**\n * Content detail model, represents one section of a source\n */\nexport class ContentModel extends ResourceModel<\n ContentDetailData,\n ContentDetailContributions\n> {\n private _section: SectionModel;\n private _contentType: ContentTypeModel | undefined;\n private _filterCollection: FilterCollection;\n\n constructor(response: ModularUIResponse) {\n super(response);\n\n this._filterCollection = new FilterCollection(\n this.data.filter,\n {\n filter: this.contributions.filter,\n },\n this.modelOptions,\n );\n\n this._section = new SectionModel(\n this.data,\n this.entryDate,\n this.modelOptions,\n );\n }\n\n get type() {\n return \"Content\";\n }\n\n static override get modelName() {\n return \"ContentModel\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n return data.resourcetype === \"ContentDetail\";\n }\n\n override getInitialChildModelLinks() {\n const contentTypeLink = this.links.getLinkByKey(\"contenttype\");\n\n if (contentTypeLink) {\n return [contentTypeLink];\n }\n\n return [];\n }\n\n override setChildModels(\n models: ModelWithChildModels[],\n _errors: ErrorResponse[],\n ) {\n this.contentType = models.find(\n (model) => model instanceof ContentTypeModel,\n );\n }\n\n get section() {\n return this._section;\n }\n\n get id() {\n return this.data._id;\n }\n\n /**\n * Retrieve available filters on concept toc\n */\n get filterCollection() {\n return this._filterCollection;\n }\n\n /**\n * Retrieve modelcatalog.js of content toc\n */\n get entryDate() {\n const entryDateFilter = this.filterCollection?.getFilterByAttributeKey(\n TIMEVERSION_FILTER_NAME,\n );\n if (entryDateFilter && entryDateFilter.attribute) {\n return entryDateFilter.attribute.value as ISO_DATE;\n }\n\n return undefined;\n }\n\n /**\n * Get conceptType of concept\n */\n get contentType() {\n return this._contentType;\n }\n\n /**\n * Set concept type\n */\n set contentType(contentType: ContentTypeModel | undefined) {\n this._contentType = contentType;\n }\n\n /**\n * Get content label\n */\n override get label() {\n return this.section.label;\n }\n\n /**\n * Retrieve number of section\n */\n get number() {\n return this.section.number;\n }\n\n /**\n * Get content body\n */\n get body() {\n return this.section.body;\n }\n\n /**\n * Retrieve child section links\n */\n get childSectionLinks() {\n return this.section.childSectionLinks;\n }\n\n get selfContentLink() {\n return this.section.selfContentLink;\n }\n\n /**\n * Get tree of child sections\n */\n get childSections() {\n return this.section.childSections;\n }\n\n /**\n * set resolved child sections\n */\n set childSections(sections: SectionModel[]) {\n this.section.childSections = sections || [];\n }\n\n /**\n * Get sub sections\n */\n get subSections() {\n return this.section.subSections;\n }\n\n get relatedConceptsHrefs() {\n const hrefs = [];\n if (this.relatedConceptsHref) {\n hrefs.push(this.relatedConceptsHref);\n }\n\n this.subSections.forEach((subSection) => {\n hrefs.push(...subSection.relatedConceptsHrefs);\n });\n\n return hrefs;\n }\n\n /**\n * Get related concepts link\n */\n get relatedConceptsHref() {\n const relatedConceptsLink = this.links.getLinkByKey(\"relatedConcepts\");\n\n if (relatedConceptsLink) {\n const { href } = relatedConceptsLink;\n href.addParameter(\"entryDate\", this.entryDate);\n href.setReferenceHash(this.referenceHash);\n return href;\n }\n\n return null;\n }\n\n get referenceHash(): number {\n return this.section.referenceHash;\n }\n}\n","import { TIMEVERSION_FILTER_NAME } from \"../../constants/Constants\";\nimport { ResourceModel } from \"../base/ResourceModel\";\nimport { FilterCollection } from \"../filters/FilterCollection\";\nimport { Href } from \"../href/Href\";\nimport { ContentLinkModel } from \"./ContentLinkModel\";\nimport { ContentTypeModel } from \"./ContentTypeModel\";\nimport { SectionModel } from \"./SectionModel\";\n\nimport type { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ModelWithChildModels } from \"../types\";\nimport type {\n ContentContributions,\n ContentDataItem,\n ContentDataSection,\n ContentLinkData,\n ContentTOCData,\n SectionData,\n} from \"./types\";\n\n/**\n * Content detail model\n */\nexport class ContentTOCModel extends ResourceModel<\n ContentTOCData,\n ContentContributions\n> {\n private _contentType: ContentTypeModel | undefined;\n private _filterCollection: FilterCollection;\n\n constructor(modularuiResponse: ModularUIResponse) {\n super(modularuiResponse);\n\n this._filterCollection = new FilterCollection(\n this.data.filter,\n {\n filter: this.contributions.filter,\n },\n this.modelOptions,\n );\n }\n\n get type() {\n return \"ContentTOC\";\n }\n\n static override get modelName() {\n return \"ContentTOCModel\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n return data.resourcetype === \"ContentTOC\";\n }\n\n override getInitialChildModelLinks() {\n const contentTypeLink = this.links.getLinkByKey(\"contenttype\");\n\n if (contentTypeLink) {\n return [contentTypeLink];\n }\n\n return [];\n }\n\n override setChildModels(\n models: ModelWithChildModels[],\n _errors: ErrorResponse[],\n ) {\n this.contentType = models.find(\n (model) => model instanceof ContentTypeModel,\n );\n }\n\n /**\n * Get content label\n */\n override get label() {\n return this.getDataAsString(\"label\", \"\");\n }\n\n get abbreviation() {\n return this.getDataAsString(\"abbreviation\");\n }\n\n /**\n * Getting the self link of this list\n */\n override get selfhref() {\n const href = new Href(this.selflink.href);\n\n this.filterCollection.forEach((filter) => {\n filter.params.forEach((param) => {\n if (param.value) {\n href.setParameter(param.name, param.value);\n } else {\n href.removeParameter(param.name);\n }\n });\n });\n\n return href;\n }\n\n /**\n * Get related concepts link\n */\n get relatedConceptsHref() {\n const relatedConceptsLink = this.links.getLinkByKey(\"relatedConcepts\");\n\n if (relatedConceptsLink) {\n const { href } = relatedConceptsLink;\n href.addParameter(\"entryDate\", this.entryDate);\n return href;\n }\n\n return;\n }\n\n get selfContentLink() {\n return new ContentLinkModel(this.data, this.entryDate, this.modelOptions);\n }\n\n private getItems(items: ContentDataItem[]) {\n return items.map((item) => {\n const link = new ContentLinkModel(\n item,\n this.entryDate,\n this.modelOptions,\n );\n if (typeof item.items !== \"undefined\") {\n link.items = this.getItems(item.items);\n }\n return link;\n });\n }\n\n private getSectionItems(sections: ContentDataSection[]) {\n return sections.map((section) => {\n const link = new ContentLinkModel(\n section,\n this.entryDate,\n this.modelOptions,\n );\n if (typeof section.sections !== \"undefined\") {\n link.items = this.getItems(section.sections);\n }\n return link;\n });\n }\n\n /**\n * Get sub items of toc\n */\n get items() {\n if (Array.isArray(this.data.items)) {\n return this.getItems(this.data.items);\n }\n\n if (Array.isArray(this.data.sections)) {\n return this.getSectionItems(this.data.sections);\n }\n\n return [];\n }\n\n get sections() {\n if (this.data.sections) {\n const sections = this.data.sections as SectionData[];\n return sections.map(\n (section) =>\n new SectionModel(section, this.entryDate, this.modelOptions),\n );\n }\n return [];\n }\n\n /**\n * get categories of content\n */\n get categories() {\n if (Array.isArray(this.data.categories)) {\n return this.data.categories.map(\n (category) =>\n new ContentLinkModel(\n category as ContentLinkData,\n undefined,\n this.modelOptions,\n ),\n );\n }\n\n return [];\n }\n\n /**\n * Retrieve content type model\n */\n get contentType() {\n return this._contentType;\n }\n\n set contentType(contentType: ContentTypeModel | undefined) {\n this._contentType = contentType;\n }\n\n /**\n * Retrieve available filters on concept toc\n */\n get filterCollection(): FilterCollection {\n return this._filterCollection;\n }\n\n /**\n * Retrieve modelcatalog.js of content toc\n */\n get entryDate() {\n const timeversionFilter = this.filterCollection.getFilterByAttributeKey(\n TIMEVERSION_FILTER_NAME,\n );\n\n return timeversionFilter?.attribute?.value as string | undefined;\n }\n\n get isCompleteSource(): boolean {\n const completeFilter =\n this.filterCollection.getFilterByAttributeKey(\"complete\");\n return completeFilter?.attribute?.value === \"true\";\n }\n}\n","import { LayoutHintCollection } from \"../layouthint/LayoutHintCollection\";\nimport { ContentConfigurationElements } from \"./ContentConfigurationElements\";\n\nimport type { ResultsConfiguration } from \"./types\";\n\nexport class ContentConfigurationResults {\n private _configuration: ResultsConfiguration | null;\n private _layouthint: LayoutHintCollection;\n private _calculatedResults: ContentConfigurationElements;\n private _positiveResults: ContentConfigurationElements;\n private _negativeResults: ContentConfigurationElements;\n private _results: ContentConfigurationElements;\n\n constructor(configuration?: ResultsConfiguration) {\n this._configuration = configuration || null;\n this._layouthint = new LayoutHintCollection(configuration?.layouthint);\n\n this._calculatedResults = new ContentConfigurationElements(\n configuration?.calculatedResultElements,\n );\n this._positiveResults = new ContentConfigurationElements(\n configuration?.positiveResultElements,\n );\n this._negativeResults = new ContentConfigurationElements(\n configuration?.negativeResultElements,\n );\n this._results = new ContentConfigurationElements(\n configuration?.resultElements,\n );\n }\n\n get label() {\n return this._configuration?.label;\n }\n\n get description() {\n const description = this._configuration?.description;\n if (typeof description === \"object\" && \"message\" in description) {\n return description.message;\n }\n return description;\n }\n\n get layouthint() {\n return this._layouthint;\n }\n\n get attributes() {\n if (this._configuration === null) {\n return [];\n }\n\n // An issue with mapped attributes is giving us the wrong attribute keys in the attributes property\n // as a temporary fix a layouthint with the correct mapped attribute key can be set in the configuration of the end results\n return [\n ...this._configuration.attributes,\n ...this.layouthint.all\n .filter((hint) => hint.includes(\"attribute:\"))\n .map((hint) => hint.substring(\"attribute:\".length)),\n ];\n }\n\n get calculatedResultElements() {\n return this._calculatedResults;\n }\n\n get positiveResultElements() {\n return this._positiveResults;\n }\n\n get negativeResultElements() {\n return this._negativeResults;\n }\n\n get resultElements() {\n return this._results;\n }\n}\n","import { ContentConfigurationResults } from \"./ContentConfigurationResults\";\n\nimport type { EndResultsConfiguration } from \"./types\";\n\nexport class ContentConfigurationEndResults {\n private _configuration: EndResultsConfiguration;\n\n constructor(configuration: EndResultsConfiguration) {\n this._configuration = configuration || [];\n }\n\n get config() {\n return this._configuration\n .filter((configElement) => {\n const [key] = Object.keys(configElement);\n\n return (\n key === \"decisionResult\" ||\n key === \"classificationResult\" ||\n key === \"calculatorResult\"\n );\n })\n .map((configElement) => {\n const [key] = Object.keys(configElement);\n return new ContentConfigurationResults(configElement[key]);\n });\n }\n}\n","import { ContentConfigurationElements } from \"./ContentConfigurationElements\";\n\nimport type { QuestionConfiguration } from \"./types\";\n\nexport class ContentConfigurationQuestions {\n private _question: ContentConfigurationElements;\n private _options: ContentConfigurationElements;\n private _answers: ContentConfigurationElements;\n\n constructor(configuration: QuestionConfiguration) {\n this._question = new ContentConfigurationElements(\n configuration.questionElements,\n );\n this._options = new ContentConfigurationElements(\n configuration.optionElements,\n );\n this._answers = new ContentConfigurationElements(\n configuration.givenAnswerElements,\n );\n }\n\n hasConfig() {\n return (\n this._question.hasConfig() ||\n this._options.hasConfig() ||\n this._answers.hasConfig()\n );\n }\n\n get question() {\n return this._question;\n }\n\n get options() {\n return this._options;\n }\n\n get answers() {\n return this._answers;\n }\n}\n","import { immerable } from \"immer\";\n\nimport { ContentConfigurationEndResults } from \"./ContentConfigurationEndResults\";\nimport { ContentConfigurationQuestions } from \"./ContentConfigurationQuestions\";\nimport { ContentConfigurationResults } from \"./ContentConfigurationResults\";\n\nimport type { ContentConfigurationContributions } from \"./types\";\n\n/**\n * Content definition for questions, results, given answers etc.\n * Mostly maps to the Instrument questions configuration of Be Informed\n */\nexport class ContentConfiguration {\n [immerable] = true;\n\n private _questions: ContentConfigurationQuestions | undefined;\n private _intermediateResults: ContentConfigurationResults | undefined;\n private _endResults: ContentConfigurationEndResults | undefined;\n\n constructor(configuration?: ContentConfigurationContributions) {\n this._questions = this.createQuestionConfiguration(configuration);\n this._intermediateResults =\n this.createIntermedidateResultsConfiguration(configuration);\n this._endResults = this.createEndResultsConfiguration(configuration);\n }\n\n private createQuestionConfiguration(\n configuration?: ContentConfigurationContributions,\n ) {\n if (\n configuration &&\n \"questions\" in configuration &&\n typeof configuration.questions === \"object\"\n ) {\n return new ContentConfigurationQuestions(configuration.questions);\n }\n return undefined;\n }\n\n private createIntermedidateResultsConfiguration(\n configuration?: ContentConfigurationContributions,\n ) {\n if (\n configuration &&\n \"intermediateResults\" in configuration &&\n typeof configuration.intermediateResults === \"object\"\n ) {\n return new ContentConfigurationResults(configuration.intermediateResults);\n }\n\n return undefined;\n }\n\n private createEndResultsConfiguration(\n configuration?: ContentConfigurationContributions,\n ) {\n if (\n configuration &&\n \"results\" in configuration &&\n typeof configuration.results === \"object\"\n ) {\n return new ContentConfigurationEndResults(configuration.results);\n }\n\n return undefined;\n }\n\n get questions() {\n return this._questions;\n }\n\n isConfiguredIntermediateResultAttribute(attributeKey: string) {\n return this.intermediateResults?.attributes.includes(attributeKey) ?? false;\n }\n\n get intermediateResults() {\n return this._intermediateResults;\n }\n\n isConfiguredEndResultAttribute(attributeKey: string) {\n if (!this.endResults) {\n return false;\n }\n return this.endResults?.config.some((item) =>\n item.attributes.includes(attributeKey),\n );\n }\n\n get endResults() {\n return this._endResults;\n }\n}\n","import { immerable } from \"immer\";\n\nimport { getContextPathModularUI } from \"../../settings/Paths\";\nimport { Href } from \"../href/Href\";\nimport { LayoutHintCollection } from \"../layouthint/LayoutHintCollection\";\n\nimport type { FetchException } from \"../../exceptions/FetchException\";\nimport type { ModelOptions } from \"../types\";\nimport type { ModularUIErrorResponse } from \"./types\";\n\n/**\n * Error response model\n */\nexport class ErrorResponse {\n [immerable] = true;\n\n private _originalError: ModularUIErrorResponse | FetchException | Error;\n private _connectKey: string | undefined;\n private _modelOptions: ModelOptions | undefined;\n\n constructor(\n error: ModularUIErrorResponse | FetchException | Error,\n connectKey?: string,\n modelOptions?: ModelOptions,\n ) {\n this._originalError = error;\n this._connectKey = connectKey;\n this._modelOptions = modelOptions;\n }\n\n set connectKey(key: string | undefined) {\n this._connectKey = key;\n }\n\n get connectKey() {\n return this._connectKey;\n }\n\n get origin() {\n return this._modelOptions?.origin || \"\";\n }\n\n get contextPath() {\n return this._modelOptions?.contextPath || getContextPathModularUI();\n }\n\n /**\n * Return error information\n */\n get error() {\n return this._originalError;\n }\n\n /**\n * Get request status code\n */\n get status() {\n const NO_RESPONSE_CODE = 0;\n const DECIMAL_RADIX = 10;\n\n const error = this.error;\n\n if (\"status\" in error) {\n return parseInt(error.status as string, DECIMAL_RADIX);\n }\n\n return NO_RESPONSE_CODE;\n }\n\n /**\n * Return error type information\n */\n get id() {\n if (\n this.isResourceNotFound &&\n \"id\" in this.error &&\n this.error.id !== \"Error.NotAuthorized\"\n ) {\n return \"Error.ResourceNotFound\";\n }\n\n if (\"id\" in this.error && typeof this.error.id === \"string\") {\n return this.error.id;\n }\n\n return this.error.name || \"Error.GeneralError\";\n }\n\n get message() {\n const error = this.error;\n\n if (\"message\" in error) {\n return error.message;\n }\n\n return this.id;\n }\n\n /**\n * Return response error message\n */\n get responseMessage() {\n if (this.response && \"message\" in this.response) {\n return this.response.message;\n }\n\n return \"\";\n }\n\n /**\n * Return response error title\n */\n get title() {\n if (this.response && \"title\" in this.response) {\n return this.response.title;\n }\n\n return { id: \"\" };\n }\n\n /**\n * Return response error title message\n */\n get titleMessage() {\n if (\"title\" in this.error) {\n return this.error.title?.message;\n }\n return undefined;\n }\n\n /**\n * Return response error title Id\n */\n get titleId() {\n return this.response?.title?.id;\n }\n\n /**\n * Return response error title properties\n */\n get titleProperties() {\n return this.response?.title?.properties;\n }\n\n /**\n * Return response error redirect\n */\n get redirect() {\n return this.response?.redirect;\n }\n /**\n * Return response error redirect text\n */\n get redirectText() {\n if (this.redirect && \"text\" in this.redirect) {\n return this.redirect?.text;\n }\n return undefined;\n }\n\n /**\n * Return response error redirect text id\n */\n get redirectTextID() {\n return this.redirectText?.id;\n }\n\n /**\n * Return response error redirect text properties\n */\n get redirectTextProperties() {\n return this.redirectText?.properties;\n }\n\n /**\n * Return response error redirect text message\n */\n get redirectMessage() {\n return this.redirectText?.message;\n }\n\n /**\n * Return response error redirect href\n */\n get redirectHref() {\n if (this.redirect && \"href\" in this.redirect) {\n const redirectHref = this.redirect?.href;\n if (redirectHref) {\n return new Href(redirectHref);\n }\n }\n return undefined;\n }\n\n /**\n * Return error response layouthint\n */\n get layouthint() {\n if (this.response && Array.isArray(this.response.layouthint)) {\n return new LayoutHintCollection(this.response.layouthint);\n }\n return new LayoutHintCollection();\n }\n\n get response() {\n const error = this.error;\n\n if (\"response\" in error && typeof error.response === \"object\") {\n return error.response;\n }\n\n return undefined;\n }\n\n get properties() {\n const error = this.error;\n\n if (\"properties\" in error) {\n return error.properties;\n }\n\n return undefined;\n }\n\n /**\n * Return error parameters\n */\n get parameters() {\n const error = this.error;\n\n if (\"parameters\" in error) {\n return error.parameters;\n }\n\n return undefined;\n }\n\n get isResourceNotFound() {\n const RESOURCE_NOT_FOUND_RESPONSE_CODE = 404;\n\n return this.status === RESOURCE_NOT_FOUND_RESPONSE_CODE;\n }\n\n get isResourceNotFoundAfterReload() {\n const error = this.error;\n\n if (\"isReload\" in error && typeof error.isReload === \"boolean\") {\n return this.isResourceNotFound && error.isReload;\n }\n\n return false;\n }\n\n /**\n * Check if the error message is an authorization error\n */\n get isUnauthorized() {\n const UNAUTHORIZED_RESPONSE_CODE = 401;\n\n const hasUnauthorizedStatus = this.status === UNAUTHORIZED_RESPONSE_CODE;\n const hasUnauthorizedErrorId =\n this.id === \"Error.NotAuthorized\" ||\n this.id === \"Error.Authentication.Required\" ||\n this.id === \"Error.Authentication.InvalidCredentials\";\n\n const error = this.error;\n\n const hasLoginAction =\n \"action\" in error &&\n typeof error.action === \"object\" &&\n error.action !== null &&\n \"name\" in error.action &&\n error.action.name === \"login\";\n\n return hasUnauthorizedStatus || hasUnauthorizedErrorId || hasLoginAction;\n }\n\n get isChangePassword() {\n return this.id === \"Error.ChangePasswordRequired\";\n }\n\n get isConcurrentUser() {\n return this.id === \"Error.Authentication.ConcurrentUser\";\n }\n\n get isConcurrentError() {\n return (\n this.id === \"Error.Case.ConcurrentModification\" ||\n this.id === \"Error.DataStore.ConcurrentModification\" ||\n this.id === \"Error.DataStore.RecordAlreadyExists\" ||\n this.id === \"Error.DataStore.RowCannotBeLocked\"\n );\n }\n\n get isBlocked() {\n return this.id === \"Error.Authentication.BlockedUser\";\n }\n\n get isInvalidCredentials() {\n return this.id === \"Error.Authentication.InvalidCredentials\";\n }\n\n get isInvalidUsername() {\n return this.id === \"Error.Authentication.InvalidUsername\";\n }\n\n get isTimeoutError() {\n return this.id === \"Error.CodemapLookup.InvalidToken\";\n }\n\n /**\n * A RemoteServiceException occurs when an exception occurs connecting to an external system,\n * for example when using the service list panels\n */\n get isRemoteServiceException() {\n return this.id === \"Error.RemoteServiceException\";\n }\n\n /**\n * Get response url\n */\n get changePasswordHref() {\n const properties = this.properties;\n\n if (properties && \"redirect\" in properties) {\n return new Href(properties.redirect as string);\n }\n\n return undefined;\n }\n\n /**\n * When no action information is present in the unauthorized response, for now we assume it is Basic Authentication\n */\n get isBasicAuthentication() {\n const UNAUTHORIZED_RESPONSE_CODE = 401;\n\n const error = this.error;\n\n if (\"error\" in error) {\n return (\n this.isUnauthorized &&\n this.status === UNAUTHORIZED_RESPONSE_CODE &&\n error.error === \"No responseText\"\n );\n }\n\n return false;\n }\n\n /**\n * Retrieve a failed login attempt\n */\n get loginFailed() {\n return (\n this.id === \"Error.Authentication.Required\" ||\n this.id === \"Error.Authentication.InvalidCredentials\"\n );\n }\n\n get shouldThrowOnServer() {\n return !this.isChangePassword && !this.isBlocked && !this.isConcurrentUser;\n }\n}\n","import { has } from \"lodash\";\n\nimport { IllegalArgumentException } from \"../../exceptions/IllegalArgumentException\";\nimport { AttributeCollection } from \"../attributes/AttributeCollection\";\nimport { CompositeAttributeModel } from \"../attributes/CompositeAttributeModel\";\nimport { BaseModel } from \"../base/BaseModel\";\nimport { ContentConfiguration } from \"../contentconfiguration/ContentConfiguration\";\nimport { ErrorCollection } from \"../error/ErrorCollection\";\nimport { LayoutHintCollection } from \"../layouthint/LayoutHintCollection\";\n\nimport type { TextWithPlaceholders } from \"../../types/types\";\nimport type {\n AttributeContributions,\n AttributeModel,\n MaybeAttributeValue,\n} from \"../attributes/types\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ModelOptions, ModelWithChildModels } from \"../types\";\nimport type {\n AnchorElementData,\n ErrorObjectData,\n FormData,\n FormObjectContributions,\n FormObjectData,\n MissingObjectData,\n} from \"./types\";\n\nexport class FormObjectModel\n extends BaseModel<FormObjectData, FormObjectContributions>\n implements ModelWithChildModels\n{\n private _attributeCollection: AttributeCollection;\n private _contentConfiguration: ContentConfiguration;\n private _errorCollection: ErrorCollection;\n private _repeatIndex: number | undefined;\n private _dynamicValidationsLoaded = false;\n\n constructor(\n object: FormObjectData,\n objectContributions: FormObjectContributions,\n modelOptions?: ModelOptions,\n ) {\n super(object, objectContributions, modelOptions);\n\n if (object && this.getElements().length > 0) {\n this._attributeCollection = new AttributeCollection(\n this.getElements(),\n this.getApplicableAttributeContributions(),\n { ...modelOptions, isReadonly: false },\n );\n } else {\n this._attributeCollection = new AttributeCollection();\n }\n\n this._contentConfiguration = new ContentConfiguration(\n objectContributions ? objectContributions.content : {},\n );\n\n this._errorCollection = new ErrorCollection(\"formobject\");\n\n const referenceData = this.getDataAsString(\"referenceDate\");\n if (referenceData) {\n this.attributeCollection.setReferenceDate(referenceData);\n }\n\n this.attributeCollection.indicateContentConfiguration(\n this.contentConfiguration,\n );\n }\n\n static createEmpty(formObjectModel: FormObjectModel) {\n if (!formObjectModel) {\n throw new IllegalArgumentException(\n \"createEmpty method needs a FormObjectModel as input argument to create a new version of the object\",\n );\n }\n return new FormObjectModel(\n formObjectModel.data,\n formObjectModel.contributions,\n formObjectModel.modelOptions,\n );\n }\n\n equals(object: FormObjectModel | null, withRepeatIndex = true) {\n if (!object || this.key !== object.key) {\n return false;\n }\n\n const objectContainsOneOfTheAttributes = this.attributeCollection.all\n .filter((attribute) => !attribute.isResult)\n .some(\n (attribute) =>\n object && object.attributeCollection.hasAttributeByKey(attribute.key),\n );\n\n const hasSameRepeatIndex = withRepeatIndex\n ? this.repeatIndex === object.repeatIndex\n : true;\n\n return hasSameRepeatIndex && objectContainsOneOfTheAttributes;\n }\n\n getAttributeByAttribute(attribute: AttributeModel) {\n return this.attributeCollection.getAttributeByAttribute(attribute);\n }\n\n getAttributeByKey(key: string) {\n return this.attributeCollection.getAttributeByKey(key);\n }\n\n hasAttributeByKey(key: string) {\n return this.attributeCollection.hasAttributeByKey(key);\n }\n\n /**\n * Get elements from both the missing attributes and the result attributes\n */\n private getElements() {\n const elements: AnchorElementData[] = [];\n\n if (Array.isArray(this.data.elements)) {\n elements.push(...this.data.elements);\n }\n\n if (Array.isArray(this.data.results)) {\n const dataResults = this.data.results.map((result) => ({\n ...result,\n isResult: true,\n }));\n\n elements.push(...dataResults);\n }\n\n if (this.data.elementid) {\n elements.push({\n ...(this.data as AnchorElementData),\n });\n }\n\n return elements;\n }\n\n /**\n * Map available contributions on the available data. Only use contributions that are needed for the data\n */\n private getApplicableAttributeContributions(): Record<\n string,\n AttributeContributions\n >[] {\n if (this.data && this.contributions) {\n const dataElementIds = this.getElements().map(\n (element) => element.elementid,\n );\n\n const contributions = this.getAttributesInData(\n dataElementIds,\n this.contributions.attributes,\n );\n\n // set all attribute mandatory for dynamic object\n if (this.isDynamic) {\n return contributions.map((attribute) => {\n const [attributeKey] = Object.keys(attribute);\n return {\n [attributeKey]: {\n ...attribute[attributeKey],\n mandatory: true,\n },\n };\n });\n }\n\n return contributions;\n }\n\n return [];\n }\n\n /**\n * Recursevily check if an attribute id occurs in the tree of attribute contributions.\n * The complete leaf of the tree is returned when an attribute id matches\n */\n getAttributesInData(\n dataElementIds: string[],\n attributesContributions: Record<string, AttributeContributions>[] = [],\n ) {\n return attributesContributions.filter((attributeContributions) => {\n const [attributeKey] = Object.keys(attributeContributions);\n\n return dataElementIds.some(\n (dataElementId) => dataElementId.split(\".\")[0] === attributeKey,\n );\n });\n }\n\n getInitialChildModelLinks() {\n return this._attributeCollection.getInitialChildModelLinks();\n }\n\n setChildModels(models: ModelWithChildModels[], errors: ErrorResponse[]) {\n this._attributeCollection.setChildModels(models, errors);\n }\n\n /**\n * get key\n */\n get key() {\n return this.data.objectid || \"unknown\";\n }\n\n /**\n * Get content configuration for form objects\n */\n get contentConfiguration(): ContentConfiguration {\n return this._contentConfiguration;\n }\n\n /**\n */\n get hasEndResultConfiguration() {\n return this.contributions.content?.results != null;\n }\n\n /**\n * Indicates if object is dynamic.\n *\n * A subtle difference exists between objects for wizard style instrument dialogs and other objects.\n * In the 'missing object' response, wizard style objects will include only the first attribute(s) to be answered,\n * while other objects will include the complete set of attributes of that object.\n *\n * This difference is condensed in the term of 'dynamic objects': these objects start (in the 'missing object' response)\n * with a very select set of attributes to be answered, and each successive 'missing elements' response will include next attributes to be answered.\n * When an object is dynamic, the form contributions will mention a \"dynamicObject\": true property.\n */\n get isDynamic() {\n return this.getContributionAsBoolean(\"dynamicObject\", false);\n }\n\n /**\n */\n get hasDynamicValidations() {\n return this.getContributionAsBoolean(\"dynamicValidations\", false);\n }\n\n /**\n * Indicates if object is repeatable\n */\n get isRepeatable() {\n return this.getContributionAsBoolean(\"repeatable\", false);\n }\n\n get repeatIndex() {\n return this._repeatIndex ?? this.data.index ?? 1;\n }\n\n set repeatIndex(repeatIndex: number) {\n this._repeatIndex = repeatIndex;\n }\n\n get maxRepeats() {\n if (this.isRepeatable) {\n return this.getDataAsNumber(\"numberofrepeats\", -1);\n }\n return 1;\n }\n\n get hasFixedNrOfRepeats() {\n return this.maxRepeats > -1;\n }\n\n get isRepeatWithUnknownTotal() {\n return this.isRepeatable && this.maxRepeats === -1;\n }\n\n get isLastRepeat() {\n if (this.isRepeatable) {\n return this.getDataAsBoolean(\"last\", false);\n }\n return true;\n }\n\n get repeatIndexLabel() {\n return this.getDataAsString(\"index-identifier\");\n }\n\n /**\n * Get label of form object\n */\n get label() {\n return this.getContributionAsString(\"label\");\n }\n\n /**\n * Get introText of form object\n */\n get introText() {\n if (typeof this.data.content === \"object\" && this.data.content != null) {\n if (\"text\" in this.data.content) {\n const { message } = this.data.content.text as TextWithPlaceholders;\n return message;\n }\n }\n\n if (this.contributions.text?.message) {\n return this.contributions.text.message;\n }\n\n return this.contributions.introText;\n }\n\n /**\n * Get assistent of form object\n */\n get assistent() {\n return this.contributions.assistent;\n }\n\n /**\n * Get button labels\n */\n get buttonLabels() {\n return this.getContributionAsObject<Record<string, string>>(\n \"buttonLabels\",\n {},\n );\n }\n\n /**\n * get attribute collection\n */\n get attributeCollection() {\n return this._attributeCollection;\n }\n\n set attributeCollection(attributeCollection: AttributeCollection) {\n this._attributeCollection = attributeCollection;\n }\n\n mergeObject(oldObject: FormObjectModel) {\n this.attributeCollection.forEach((attribute) => {\n const mergeWithAttribute = oldObject.getAttributeByAttribute(attribute);\n if (mergeWithAttribute) {\n attribute.mergeAttribute(mergeWithAttribute);\n }\n });\n\n this.repeatIndex = oldObject.repeatIndex;\n }\n\n /**\n * Update attribute\n */\n updateAttribute(attribute: AttributeModel, value: MaybeAttributeValue) {\n const attributeToUpdate =\n this.attributeCollection.getAttributeByAttribute(attribute);\n\n if (attributeToUpdate == null) {\n throw new Error(`Attribute with name: ${attribute.name} not found.`);\n }\n\n if (attributeToUpdate instanceof CompositeAttributeModel) {\n attributeToUpdate.update(value, attribute);\n } else {\n attributeToUpdate.update(value);\n }\n\n return attributeToUpdate;\n }\n\n /**\n * Inidicates if Form is changed since a given timestamp (Date.now)\n */\n isChangedSince(timestamp: number) {\n return (\n this.attributeCollection.find((attribute) =>\n attribute.isChangedSince(timestamp),\n ) != null\n );\n }\n\n /**\n * Reset all errors on Form Object\n */\n resetErrors() {\n this._errorCollection.clear();\n this.attributeCollection.forEach((attribute) => attribute.resetErrors());\n }\n\n /**\n * Get error messages\n */\n get errorCollection() {\n return this._errorCollection;\n }\n\n /**\n * Registers an error that was received from a server response\n */\n addServerError(error: ErrorObjectData) {\n if (error.anchor?.elementid != null) {\n this.attributeCollection.addServerError(error);\n } else {\n this._errorCollection.addServerError(\n error.id,\n error.message,\n error.properties,\n error.layouthint,\n );\n }\n }\n\n hasServerErrors() {\n return (\n this.errorCollection.hasItems() ||\n this.attributeCollection.hasServerErrors()\n );\n }\n\n hasErrors() {\n return (\n this.errorCollection.hasItems() || this.attributeCollection.hasErrors()\n );\n }\n\n get isValid() {\n return (\n this.attributeCollection.visible.every(\n (attribute) => attribute.isValid,\n ) && !this.errorCollection.hasItems()\n );\n }\n\n get dynamicValidationsLoaded() {\n return this._dynamicValidationsLoaded;\n }\n\n set dynamicValidationsLoaded(dynamicValidationsLoaded: boolean) {\n this._dynamicValidationsLoaded = dynamicValidationsLoaded;\n }\n\n /**\n * Convert error json from a form service to validation messages on the form object and attributes\n */\n handleErrorValidations(errors: ErrorObjectData[]) {\n const attributeErrors: ErrorObjectData[] = [];\n\n errors\n .filter((error) => error.anchor?.objectid === this.key)\n .forEach((error) => {\n if (has(error.anchor, \"elementid\")) {\n attributeErrors.push(error);\n } else {\n this.errorCollection.addServerError(\n error.id,\n error.message,\n error.properties,\n new LayoutHintCollection(error.layouthint),\n );\n }\n });\n\n this.attributeCollection.updateValidations(attributeErrors);\n }\n\n /**\n * Convert missing json from a form service to mandatory validation constraints and messages\n */\n handleMissingValidations(\n missing: {\n anchors: (MissingObjectData | AnchorElementData)[];\n },\n errors?: ErrorObjectData[],\n ) {\n const attributeErrors: ErrorObjectData[] = [];\n\n for (const anchor of missing.anchors) {\n if (!anchor.objectid || anchor.objectid === this.key) {\n if (Array.isArray(anchor.elements)) {\n for (const element of anchor.elements) {\n attributeErrors.push({\n anchor: {\n objectid: element.objectid || \"\",\n elementid: element.elementid,\n },\n id: \"Constraint.Mandatory\",\n });\n }\n } else {\n attributeErrors.push({\n anchor: {\n ...anchor,\n objectid: anchor.objectid || \"\",\n },\n id: \"Constraint.Mandatory\",\n });\n }\n }\n }\n\n if (Array.isArray(errors)) {\n errors\n .filter(\n (error) =>\n error.id === \"Constraint.Mandatory\" &&\n error.anchor?.objectid === this.key &&\n has(error.anchor, \"elementid\"),\n )\n .forEach((error) => {\n attributeErrors.push(error);\n });\n }\n\n this.attributeCollection.updateValidations(attributeErrors);\n }\n\n updateValidations(data: FormData): FormObjectModel {\n this.resetErrors();\n\n if (Array.isArray(data.errors)) {\n this.handleErrorValidations(data.errors);\n }\n\n // missing attribute errors\n if (Array.isArray(data.missing?.anchors)) {\n this.handleMissingValidations(data.missing, data.errors);\n }\n\n this.dynamicValidationsLoaded = true;\n\n return this;\n }\n\n /**\n * Generate formdata object for current formobject based on formdata of attributes\n */\n get formdata() {\n return this.attributeCollection.formdata;\n }\n\n getFormData(validationData = false) {\n return this.attributeCollection.getFormData(validationData);\n }\n}\n","import deepmerge from \"deepmerge\";\nimport { has } from \"lodash\";\nimport flattenDeep from \"lodash/flattenDeep\";\n\nimport { HTTP_METHODS } from \"../../constants/Constants\";\nimport { IllegalArgumentException } from \"../../exceptions/IllegalArgumentException\";\nimport {\n CREATE_ACTION,\n DELETE_ACTION,\n UPDATE_ACTION,\n} from \"../../layouthints/LayoutHints\";\nimport { getBooleanSetting, getSetting } from \"../../settings/Settings\";\nimport { AttributeSetModel } from \"../attributes/AttributeSetModel\";\nimport { ResourceModel } from \"../base/ResourceModel\";\nimport { ErrorCollection, ErrorCollectionType } from \"../error/ErrorCollection\";\nimport { Href } from \"../href/Href\";\nimport { Parameter } from \"../parameter/Parameter\";\nimport { ParameterCollection } from \"../parameter/ParameterCollection\";\nimport { FormObjectModel } from \"./FormObjectModel\";\n\nimport type { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport type { Data } from \"../../types/types\";\nimport type {\n AttributeModel,\n AttributeSetContributions,\n NamedDynamicSchema,\n} from \"../attributes/types\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ModelWithChildModels } from \"../types\";\nimport type {\n AnchorElementData,\n ErrorObjectData,\n FormContributions,\n FormData,\n FormObjectData,\n SuccessData,\n} from \"./types\";\n\nexport class FormModel extends ResourceModel<FormData, FormContributions> {\n private _lastUpdate: number;\n private _completedFormObjects: FormObjectModel[] = [];\n private _currentFormObject: FormObjectModel | null = null;\n private _previouslyEnteredFormObjects: FormObjectModel[] = [];\n\n private _mergePreviouslyEnteredObjects = true;\n\n private _endResultFormObjects: FormObjectModel[] = [];\n private _previousEndResultKeys: string[] = [];\n\n private _useClientsideValidation: boolean = getBooleanSetting(\n \"USE_CLIENTSIDE_VALIDATION\",\n );\n\n private _errorCollection: ErrorCollection = new ErrorCollection(\n ErrorCollectionType.FORM,\n );\n\n private _redirectLocation: Href | undefined;\n\n private _commit = false;\n private _isFinished = false;\n private _isComplete = false;\n private _success: SuccessData | undefined;\n\n private _parameters: ParameterCollection = new ParameterCollection();\n private _tokens: string[] = [];\n\n constructor(modularuiResponse?: ModularUIResponse) {\n super(modularuiResponse);\n\n this._lastUpdate = 0;\n\n this.currentFormObject = this.createFormObject();\n this.endResultFormObjects = this.setEndResultFormObjects();\n\n this.parameters = this.setParameters(modularuiResponse?.parameters);\n\n this.isComplete = this.getDataAsBoolean(\"complete\", false);\n\n if (Array.isArray(this.data.errors)) {\n this.handleRootErrors(this.data.errors);\n }\n\n this.createSuccess();\n\n this.setTokens();\n }\n\n get type() {\n return \"Form\";\n }\n\n get actiontype() {\n if (this.layouthint.has(CREATE_ACTION)) {\n return \"create\";\n }\n if (this.layouthint.has(UPDATE_ACTION)) {\n return \"update\";\n }\n if (this.layouthint.has(DELETE_ACTION)) {\n return \"delete\";\n }\n\n return this.getContributionAsString(\"actiontype\", \"form\");\n }\n\n static override get modelName() {\n return \"FormModel\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n return data.resourcetype === \"Form\";\n }\n\n override getInitialChildModelLinks() {\n const endResultChildLinks = flattenDeep(\n this.endResultFormObjects.map((endResultFormObject) =>\n endResultFormObject.getInitialChildModelLinks(),\n ),\n );\n\n if (this.currentFormObject == undefined) {\n return endResultChildLinks;\n }\n\n return [\n ...this.currentFormObject.getInitialChildModelLinks(),\n ...endResultChildLinks,\n ];\n }\n\n override setChildModels(\n models: ModelWithChildModels[],\n errors: ErrorResponse[],\n ) {\n if (this.currentFormObject) {\n this.currentFormObject.setChildModels(models, errors);\n }\n\n this.endResultFormObjects.forEach((endResultFormObject) => {\n endResultFormObject.setChildModels(models, errors);\n });\n }\n\n override get label() {\n return this.getContributionAsString(\"label\", \"\");\n }\n\n /**\n * Get form level button labels\n */\n get buttonLabels() {\n return this.getContributionAsObject(\"buttonLabels\", {}) as Record<\n string,\n string\n >;\n }\n\n /**\n * @returns button label from contributions;\n */\n getButtonLabel(buttonType: \"cancel\" | \"previous\" | \"next\" | \"finish\") {\n // cancel button labels are defined on the form\n if (buttonType === \"cancel\" && \"cancel\" in this.buttonLabels) {\n return this.buttonLabels.cancel;\n }\n\n // all other form related button labels are defined on the object\n const formObjectButtonLabels = this.currentFormObject?.buttonLabels;\n if (formObjectButtonLabels && buttonType in formObjectButtonLabels) {\n return formObjectButtonLabels[buttonType];\n }\n\n return undefined;\n }\n\n /**\n * Get all applicable objects\n */\n get allObjects() {\n if (this.currentFormObject == undefined) {\n return this.completedFormObjects;\n }\n\n return [...this.completedFormObjects, this.currentFormObject];\n }\n\n get objectKeys() {\n const formObjects = this.getContributionAsObject(\"objects\", {});\n return Object.keys(formObjects);\n }\n\n get numberOfExpectedQuestions() {\n return this.objectKeys.length;\n }\n\n /**\n * Has questions configured on form\n */\n get hasNoQuestionsConfigured() {\n return (\n this.isComplete &&\n (this.objectKeys.length === 0 ||\n (!(\"missing\" in this.data) &&\n !(\"results\" in this.data) &&\n !(\"errors\" in this.data)))\n );\n }\n\n private addDynamicSchemaToElements(\n elements: AnchorElementData[],\n dynamicschema: NamedDynamicSchema,\n ) {\n return elements?.map((element) => {\n return {\n ...element,\n dynamicschema: element.dynamicschema\n ? element.dynamicschema.map((item) => {\n const dsElements = \"elements\" in item ? item.elements : [];\n if (dsElements.length) {\n return {\n ...item,\n elements: { ...dsElements, dynamicschema },\n };\n }\n return item;\n })\n : undefined,\n };\n });\n }\n\n private getMissingAnchors() {\n const missingAnchors = this.data.missing?.anchors ?? [];\n\n // Add intermediate result data to anchor\n return missingAnchors.map((anchor) => {\n if (this.data.results) {\n const resultObject = this.data.results.find(\n (result) =>\n result.objectid === anchor.objectid && \"elements\" in result,\n );\n\n if (resultObject) {\n anchor.results = resultObject.elements;\n }\n }\n\n if (anchor.elements && this.data.dynamicschema) {\n return {\n ...anchor,\n elements: this.addDynamicSchemaToElements(\n anchor.elements,\n this.data.dynamicschema,\n ),\n };\n }\n\n return anchor;\n });\n }\n\n /**\n * Create form object based on the data and contributions available in this form\n */\n createFormObject() {\n if (this.data && this.contributions.objects) {\n const missingAnchors = this.getMissingAnchors();\n\n if (missingAnchors.length) {\n const firstAnchor = missingAnchors[0];\n // Get object id from first anchor\n const objectId = missingAnchors[0].objectid;\n if (objectId) {\n const objectContributions = this.contributions.objects[objectId];\n if (objectContributions) {\n return new FormObjectModel(\n firstAnchor as FormObjectData,\n objectContributions,\n );\n }\n }\n }\n }\n\n return null;\n }\n\n addEmptyFormObject(\n formObjectModel: FormObjectModel | null = this.currentFormObject,\n ) {\n if (formObjectModel) {\n const emptyFormObject = FormObjectModel.createEmpty(formObjectModel);\n\n emptyFormObject.repeatIndex =\n this.getHighestRepeatIndex(formObjectModel) + 1;\n\n this.addFormObject(emptyFormObject);\n }\n }\n\n getHighestRepeatIndex(formObjectModel: FormObjectModel) {\n return Math.max(\n ...this.allObjects\n .filter((formObject) => formObject.equals(formObjectModel, false))\n .map((formObject) => formObject.repeatIndex),\n );\n }\n\n addFormObject(formObjectModel: FormObjectModel) {\n if (!formObjectModel) {\n throw new IllegalArgumentException(\"Missing form object to add\");\n }\n\n this.completedFormObjects = [...this.allObjects];\n this.currentFormObject = formObjectModel;\n }\n\n /**\n * Retrieve a form object by the key\n */\n getFormObjectByKey(key: string) {\n return this.allObjects.find((formObject) => formObject.key === key);\n }\n\n /**\n * Retrieve a form object by a layouthint\n */\n getFormObjectByLayoutHint(hint: string) {\n return this.allObjects.find((formObject) =>\n formObject.layouthint.has(hint),\n );\n }\n\n removeFormObject(formObjectModel?: FormObjectModel | null) {\n if (!formObjectModel) {\n throw new IllegalArgumentException(\"Missing form object to remove\");\n }\n if (\n this.currentFormObject &&\n this.currentFormObject.equals(formObjectModel)\n ) {\n throw new IllegalArgumentException(\n \"Can not remove the current form object\",\n );\n }\n\n this.completedFormObjects = this.completedFormObjects.filter(\n (formObject) => !formObject.equals(formObjectModel),\n );\n }\n\n get currentFormObject() {\n return this._currentFormObject;\n }\n\n set currentFormObject(formObject: FormObjectModel | null) {\n this._currentFormObject = formObject;\n }\n\n /**\n * Completed objects are previously entered questions\n */\n get completedFormObjects() {\n return this._completedFormObjects;\n }\n\n /**\n */\n set completedFormObjects(formObjects: FormObjectModel[]) {\n this._completedFormObjects = formObjects;\n }\n\n /**\n * Previously entered objects are questions that have been entered before,\n * but are currently not applicable for the form.\n * For example because of previous navigation\n */\n get previouslyEnteredFormObjects() {\n return this._previouslyEnteredFormObjects;\n }\n\n /**\n */\n set previouslyEnteredFormObjects(formObjects: FormObjectModel[]) {\n this._previouslyEnteredFormObjects = formObjects;\n }\n\n /**\n * Handle end results\n */\n setEndResultFormObjects() {\n if (this.data && this.data.results && Array.isArray(this.data.results)) {\n const missingObjects = Array.isArray(this.data.missing?.anchors)\n ? this.data.missing?.anchors\n : [];\n const missingObjectIds = missingObjects.map((anchor) => anchor.objectid);\n\n // Filter out intermediate results and rename elements property to result property\n\n const endResultAnchors = this.data.results\n .filter((result) => !missingObjectIds.includes(result.objectid))\n .map((result) => {\n const { elements, ...otherProps } = result;\n\n return {\n ...otherProps,\n results: elements,\n };\n });\n\n if (endResultAnchors.length > 0) {\n return endResultAnchors\n .map((endResult) => {\n const endResultContribution =\n this.contributions.objects?.[endResult.objectid];\n if (endResultContribution) {\n return new FormObjectModel(endResult, endResultContribution);\n }\n return null;\n })\n .filter((o) => o != null);\n }\n }\n\n return [];\n }\n\n get expectsEndResultFormObjects() {\n const endResultKeys = this.endResultFormObjects.map(\n (endResult) => endResult.key,\n );\n\n return this.objectKeys.some((objectKey) => {\n const formObject = this.contributions.objects?.[objectKey];\n return formObject?.content?.results && !endResultKeys.includes(objectKey);\n });\n }\n\n get endResultFormObjects() {\n return this._endResultFormObjects;\n }\n\n set endResultFormObjects(endResultFormObjects: FormObjectModel[]) {\n this.previousEndResultKeys = this.endResultFormObjects.map(\n (endResult) => endResult.key,\n );\n this._endResultFormObjects = endResultFormObjects;\n }\n\n getEndResultFormObjects() {\n return this.endResultFormObjects.filter(\n (endResult) => !this.previousEndResultKeys.includes(endResult.key),\n );\n }\n\n get previousEndResultKeys() {\n return this._previousEndResultKeys;\n }\n\n set previousEndResultKeys(endResultFormObjectKeys: string[]) {\n this._previousEndResultKeys = endResultFormObjectKeys;\n }\n\n /**\n * Error handling\n */\n get isValid() {\n if (this.currentFormObject) {\n if (this.currentFormObject.isRepeatable) {\n if (!this.currentFormObject.hasFixedNrOfRepeats) {\n // For unknown repeats, initially valid\n return true;\n }\n // repeating objects need at least one valid form object\n const hasOneValidQuestion = this.allObjects\n .filter(\n (object) =>\n this.currentFormObject != null &&\n object.equals(this.currentFormObject, false),\n )\n .find((object) => object.isValid);\n\n if (hasOneValidQuestion) {\n return true;\n }\n }\n\n return this.currentFormObject?.isValid ?? true;\n }\n\n return true;\n }\n\n hasServerErrors() {\n if (this.errorCollection.hasItems()) {\n return true;\n }\n\n if (this.currentFormObject) {\n return this.currentFormObject.hasServerErrors();\n }\n\n return false;\n }\n\n hasErrors() {\n if (this.errorCollection.hasItems()) {\n return true;\n }\n\n if (this.currentFormObject) {\n return this.currentFormObject.hasErrors();\n }\n\n return false;\n }\n\n /**\n * Add an error to the error collection of this form\n */\n addServerError(error: ErrorObjectData | ErrorResponse) {\n this.errorCollection.addServerError(\n error.id,\n error.message,\n error.properties,\n error.layouthint,\n );\n }\n\n /**\n * Reset error messages\n */\n resetErrors() {\n this._errorCollection.clear();\n\n if (this.currentFormObject) {\n this.currentFormObject.resetErrors();\n }\n }\n\n get errorCollection() {\n return this._errorCollection;\n }\n\n set errorCollection(errorCollection: ErrorCollection) {\n this._errorCollection = errorCollection;\n }\n\n /**\n * Indicates if the form needs to be committed\n */\n get commit() {\n return this._commit || false;\n }\n\n /**\n */\n set commit(commit: boolean) {\n this._commit = commit;\n }\n\n /**\n * Inidicates if form is finished: Form is completely entered and committed\n */\n get isFinished() {\n return this._isFinished || this.success != undefined;\n }\n\n set isFinished(isFinished: boolean) {\n this._isFinished = isFinished;\n }\n\n /**\n * Indicates if form is completely entered\n */\n get isComplete() {\n return this._isComplete;\n }\n\n set isComplete(isComplete: boolean) {\n this._isComplete = isComplete;\n }\n\n /**\n * Handle success redirects\n */\n get successRedirect() {\n return this.isFinished && this.success?.redirect\n ? new Href(this.success.redirect)\n : undefined;\n }\n\n get redirectLocation() {\n return this._redirectLocation || this.successRedirect;\n }\n\n /**\n * Get the result data as plain json object\n */\n getSuccessData() {\n return this.success?.data;\n }\n\n /**\n * Retrieve an object where each property is a result data attribute set\n */\n getResultData() {\n const resultdata: Record<string, AttributeSetModel> = {};\n\n if (this.contributions.resultdata) {\n const resultContributions = this.contributions.resultdata;\n const resultDataKeys = Object.keys(resultContributions);\n const successData = this.getSuccessData();\n\n for (const resultDataKey of resultDataKeys) {\n const d = successData?.[resultDataKey] || {};\n const c =\n resultDataKey in resultContributions\n ? resultContributions[resultDataKey]\n : {};\n\n resultdata[resultDataKey] = new AttributeSetModel(\n resultDataKey,\n d as Data,\n c as AttributeSetContributions,\n );\n }\n }\n\n return resultdata;\n }\n\n get resultData() {\n return this.getSuccessData();\n }\n\n setParameters(parameters: Parameter[] | undefined) {\n const params = parameters\n ? parameters.map((par) => new Parameter(par.prefix, par.name, par.value))\n : [];\n return new ParameterCollection(params);\n }\n\n get parameters() {\n return this._parameters;\n }\n\n set parameters(parameters: ParameterCollection) {\n this._parameters = parameters;\n }\n\n selfhrefNoCommitParam() {\n const filteredParameters = this.parameters.filter(\n (parameter) => parameter.name !== \"commit\",\n );\n\n const selfhref = this.selflink?.href;\n if (selfhref) {\n selfhref.method = HTTP_METHODS.POST;\n selfhref.parameters = new ParameterCollection(filteredParameters);\n return selfhref;\n }\n\n return new Href();\n }\n\n selfhrefWithCommitParam() {\n const selfhref = this.selfhrefNoCommitParam();\n\n if (this.expectsEndResultFormObjects && !this.isComplete && !this.commit) {\n selfhref.addParameter(\"commit\", \"false\");\n }\n\n return selfhref;\n }\n\n /**\n * Create a selfhref including the parameters that are used to start this form\n */\n override get selfhref() {\n if (!this.selflink) {\n throw new Error(\"No self link found for form\");\n }\n\n if (getSetting(\"ALWAYS_COMMIT_FORM\")) {\n return this.selfhrefNoCommitParam();\n }\n\n return this.selfhrefWithCommitParam();\n }\n\n /**\n * Handle form tokens to indicate concurrent form use\n */\n get tokens() {\n if (!this._tokens) {\n const tokens = this.data?.tokens;\n this._tokens = Array.isArray(tokens) ? tokens : [];\n }\n return this._tokens;\n }\n\n /**\n * Replaces all tokens with the given collection of tokens\n */\n set tokens(tokens: string[]) {\n this._tokens = tokens;\n }\n\n /**\n * Removes all tokens from the form\n */\n removeTokens() {\n this._tokens = [];\n }\n\n setTokens() {\n const tokens = this.data?.tokens;\n this._tokens = Array.isArray(tokens) ? tokens : [];\n }\n\n /**\n * Keep track of changed form\n */\n isChanged() {\n return (\n this.currentFormObject !== null &&\n this.currentFormObject.isChangedSince(this.lastUpdate)\n );\n }\n\n get lastUpdate() {\n return this._lastUpdate;\n }\n\n set lastUpdate(lastUpdate: number) {\n this._lastUpdate = lastUpdate;\n }\n\n getFormDataObjects(validOnly = true, validationData = false) {\n const formObjects = this.allObjects.filter((formObject) => {\n // repeatabe object without fixed nr of repeats, remove last form object from formdata,\n // because this is the formobject that is used as a placeholder for the create object\n // of the collection of repeats\n\n if (formObject.isRepeatable && !formObject.hasFixedNrOfRepeats) {\n const hasValue = formObject.attributeCollection.some(\n (attr) => attr.value !== null,\n );\n if (!hasValue) {\n return false;\n }\n }\n\n return formObject.isValid || !validOnly;\n });\n\n const formdata: {\n key: string;\n repeatIndex?: number;\n formdata: object;\n }[] = [];\n\n formObjects.forEach((formObject) => {\n const objectFormData = formObject.getFormData(validationData);\n\n if (!objectFormData) {\n return;\n }\n\n const hasNonNullValues =\n objectFormData &&\n Object.values(objectFormData).some((value) => value !== null);\n\n const shouldInclude = formObject.isDynamic ? hasNonNullValues : true;\n\n if (shouldInclude) {\n const existingObjectIndex = formdata.findIndex(\n (obj) =>\n obj.key === formObject.key &&\n obj.repeatIndex === formObject.repeatIndex,\n );\n /*\n * when the object already exists in the formdata with the same key and index,\n * merge the attributes of both objects together\n */\n if (existingObjectIndex > -1) {\n formdata[existingObjectIndex].formdata = deepmerge(\n formdata[existingObjectIndex].formdata,\n objectFormData,\n );\n } else {\n formdata.push({\n key: formObject.key,\n repeatIndex: formObject.repeatIndex,\n formdata: objectFormData,\n });\n }\n }\n });\n\n return formdata.map((obj) => ({ [obj.key]: obj.formdata }));\n }\n\n getFormData(\n validOnly = true,\n withConcurrencyToken = true,\n validationData = false,\n ) {\n if (withConcurrencyToken && this.tokens.length > 0) {\n return JSON.stringify({\n objects: this.getFormDataObjects(validOnly, validationData),\n tokens: this.tokens,\n });\n }\n\n return JSON.stringify({\n objects: this.getFormDataObjects(validOnly, validationData),\n });\n }\n\n /**\n * Used to programmatically overwrite the setting USE_CLIENTSIDE_VALIDATION\n */\n setUseClientsideValidation(enabled: boolean) {\n this._useClientsideValidation = enabled;\n\n this.allObjects.forEach((formObject) => {\n formObject.attributeCollection.all.forEach((item: AttributeModel) =>\n item.setUseClientsideValidation(enabled),\n );\n });\n }\n\n /**\n * Indicates if client side validation is enabled\n */\n useClientsideValidation() {\n return this._useClientsideValidation ?? true;\n }\n\n /**\n * Get form data for submitting\n */\n get formdata() {\n return this.getFormData(this.useClientsideValidation());\n }\n\n get validationData() {\n return this.getFormData(false, false, true);\n }\n\n /**\n * Form navigation: Go one object back (previous button)\n */\n get hasPreviousStep() {\n const currentFormObjectKey =\n this.currentFormObject != null ? this.currentFormObject.key : \"\";\n\n return (\n this.completedFormObjects.filter(\n (formObject) =>\n !formObject.isRepeatWithUnknownTotal ||\n formObject.key !== currentFormObjectKey,\n ).length > 0\n );\n }\n\n /**\n * Go one form-object back,\n * for repeating object this means go back until we get at a form object that had\n * a different key than the current form object\n */\n setPreviousObject() {\n this.isComplete = false;\n this.isFinished = false;\n this.success = undefined;\n\n const oldCurrentFormObject = this.currentFormObject;\n\n if (this.currentFormObject != undefined) {\n this.previouslyEnteredFormObjects = [\n this.currentFormObject,\n ...this.previouslyEnteredFormObjects,\n ];\n }\n\n this.currentFormObject =\n this.completedFormObjects[this.completedFormObjects.length - 1];\n this.completedFormObjects = this.completedFormObjects.slice(0, -1);\n\n const completedFormObjectKeys = this.completedFormObjects\n .map((formObject) => formObject.key)\n .filter((formObjectKey) => formObjectKey !== this.currentFormObject?.key);\n\n this.endResultFormObjects = this._endResultFormObjects.filter((endResult) =>\n completedFormObjectKeys.includes(endResult.key),\n );\n this.previousEndResultKeys = this.endResultFormObjects.map(\n (endResult) => endResult.key,\n );\n\n // while we are at the same repeating form object, go a step back\n if (\n this.currentFormObject &&\n this.currentFormObject.equals(\n oldCurrentFormObject,\n this.currentFormObject.hasFixedNrOfRepeats,\n )\n ) {\n this.setPreviousObject();\n }\n }\n\n /**\n * Form navigation: has next step or is last\n */\n get hasNextStep() {\n if (\n this.isComplete ||\n this.isFinished ||\n this.hasNoQuestionsConfigured ||\n !this.contributions.objects\n ) {\n return false;\n }\n\n // current object is a dynamic object\n if (this.currentFormObject && this.currentFormObject.isDynamic) {\n return true;\n }\n\n if (this.expectsEndResultFormObjects) {\n return true;\n }\n\n const currentObjectIndex = this.objectKeys.findIndex(\n (objectKey) => objectKey === this.currentFormObject?.key,\n );\n const isLastObject = this.objectKeys.length - 1 === currentObjectIndex;\n\n // current object is a repeating question but it is not the last one\n if (\n isLastObject &&\n this.currentFormObject &&\n this.currentFormObject.isRepeatable &&\n !this.currentFormObject.isLastRepeat\n ) {\n return true;\n }\n\n // current object is not repeatable and the last object\n if (isLastObject) {\n return false;\n }\n\n // can't determine if this is te last, render a next button\n return true;\n }\n\n /**\n * Merge existing form with new form\n */\n update(receivedForm: FormModel) {\n if (receivedForm instanceof FormModel) {\n this.resetErrors();\n\n this.lastUpdate = Date.now();\n this.lastServerUpdate = receivedForm.lastServerUpdate;\n\n this.tokens = receivedForm.tokens;\n\n this.isComplete = receivedForm.isComplete;\n this.isFinished = receivedForm.isFinished;\n this.success = receivedForm.success;\n\n const receivedFormData = receivedForm.data ?? {};\n const hasMissing = has(receivedFormData, \"missing\");\n const hasErrors = has(receivedFormData, \"errors\");\n\n if (!hasMissing && !hasErrors) {\n this.handleFinished(receivedForm);\n }\n\n if (hasErrors) {\n this.handleErrors(receivedForm);\n }\n\n if (hasMissing) {\n this.handleMissing(receivedForm);\n }\n }\n\n return this;\n }\n\n /**\n * Updates the current form object with new information about the object,\n * like for example a new dynamicschema. Used for autoupdate functionality that makes it possible\n * to update the options of a next missing attribute in a form-tree iq question\n */\n updateCurrentFormObject(receivedForm: FormModel) {\n if (receivedForm instanceof FormModel) {\n const receivedFormData = receivedForm.data ?? {};\n const hasMissing = has(receivedFormData, \"missing\");\n const hasErrors = has(receivedFormData, \"errors\");\n\n if (hasErrors) {\n this.handleErrors(receivedForm);\n }\n\n if (hasMissing) {\n this.handleMissing(receivedForm);\n }\n }\n }\n\n updateValidations(data: FormData) {\n if (this.currentFormObject) {\n this.currentFormObject.updateValidations(data);\n }\n return this;\n }\n\n /**\n * Retrieve success information from response\n */\n get success() {\n return this._success;\n }\n\n /**\n * Set success information, contains redirect and event data\n */\n set success(success: SuccessData | undefined) {\n this._success = success;\n }\n\n createSuccess() {\n this._success = this.data.success;\n }\n\n /**\n * Process finished form\n */\n handleFinished(receivedForm: FormModel) {\n if (this.currentFormObject) {\n this.completedFormObjects = [\n ...this.completedFormObjects,\n this.currentFormObject,\n ];\n }\n\n this.currentFormObject = receivedForm.currentFormObject;\n this.endResultFormObjects = receivedForm.endResultFormObjects;\n\n // Create a new object with the updated data\n this.replaceData({ ...this.data, ...receivedForm.data });\n }\n\n handleRootErrors(errors: ErrorObjectData[]) {\n errors\n .filter((error) => !error.anchor)\n .forEach((error) => {\n this.errorCollection.addServerError(\n error.id,\n error.message,\n error.properties,\n error.layouthint,\n );\n });\n }\n\n /**\n * Process errors from received form§\n */\n handleErrors(receivedForm: FormModel) {\n const receivedErrorAnchors = Array.isArray(receivedForm.data.errors)\n ? receivedForm.data.errors\n : [];\n\n if (receivedErrorAnchors) {\n receivedErrorAnchors.forEach((receivedError: ErrorObjectData) => {\n if (\n receivedError.anchor &&\n this.currentFormObject &&\n this.currentFormObject.key === receivedError.anchor.objectid\n ) {\n this.currentFormObject.addServerError(receivedError);\n } else {\n this.errorCollection.addServerError(\n receivedError.id,\n receivedError.message,\n receivedError.properties,\n receivedError.layouthint,\n );\n }\n });\n }\n }\n\n /**\n * Process missing from received form\n */\n handleMissing(receivedForm: FormModel) {\n if (\n this.currentFormObject &&\n this.currentFormObject.equals(receivedForm.currentFormObject)\n ) {\n this.handleMissingErrors(receivedForm);\n } else {\n this.handleNewFormObject(receivedForm);\n }\n }\n\n /**\n * Received missing anchors in the response with an object id that is the current form object\n */\n processMissingErrors(receivedForm: FormModel) {\n if (this.currentFormObject === null) {\n return null;\n }\n\n this.currentFormObject.attributeCollection.map((attribute) => {\n const receivedAttribute =\n receivedForm.currentFormObject?.getAttributeByKey(attribute.key);\n\n if (receivedAttribute) {\n attribute.addMissingError(receivedAttribute);\n } else {\n attribute.removeMissingError();\n }\n\n return attribute;\n });\n\n return this.currentFormObject;\n }\n\n handleMissingErrors(receivedForm: FormModel) {\n this.currentFormObject = this.processMissingErrors(receivedForm);\n }\n\n handleNewFormObject(receivedForm: FormModel) {\n this.endResultFormObjects = receivedForm.endResultFormObjects;\n const receivedCurrentFormObject = receivedForm.currentFormObject;\n\n if (receivedCurrentFormObject === null) {\n this.completedFormObjects = [...this.allObjects];\n this.currentFormObject = null;\n } else {\n if (this.currentFormObject?.isRepeatable) {\n this.completedFormObjects = [\n ...this.completedFormObjects,\n this.currentFormObject,\n ];\n } else if (this.currentFormObject) {\n this.completedFormObjects = [...this.allObjects];\n }\n\n this.currentFormObject = receivedCurrentFormObject;\n }\n }\n\n /**\n * Indicate if a new form object model should be merged with a previousled entered form object model\n * Set this property to false on the form that receives the new form to skip the merge behavior\n */\n get mergePreviouslyEnteredObjects() {\n return this._mergePreviouslyEnteredObjects;\n }\n\n set mergePreviouslyEnteredObjects(mergePreviouslyEnteredObjects: boolean) {\n this._mergePreviouslyEnteredObjects = mergePreviouslyEnteredObjects;\n }\n\n handlePreviouslyEnteredFormObjects(\n receivedCurrentFormObject: FormObjectModel,\n previouslyEnteredFormObjects: FormObjectModel[],\n ) {\n previouslyEnteredFormObjects.forEach((previouslyEnteredFormObject) => {\n const mergedObject = this.mergePreviouslyEnteredObjects\n ? this.mergeObjects(\n receivedCurrentFormObject,\n previouslyEnteredFormObject,\n )\n : receivedCurrentFormObject;\n\n this.addFormObject(mergedObject);\n });\n\n // remove the previously entered form object\n this.previouslyEnteredFormObjects =\n this.previouslyEnteredFormObjects.filter((formObject) => {\n const hasPreviouslyEnteredObject = previouslyEnteredFormObjects.find(\n (previouslyEnteredFormObject) =>\n formObject.equals(previouslyEnteredFormObject),\n );\n\n return !hasPreviouslyEnteredObject;\n });\n }\n\n mergeObjects(newObject: FormObjectModel, oldObject: FormObjectModel) {\n const mergedFormObject = FormObjectModel.createEmpty(newObject);\n mergedFormObject.mergeObject(oldObject);\n return mergedFormObject;\n }\n\n findAttribute(findMethod: (item: AttributeModel) => boolean) {\n return this.allObjects\n .flatMap((formObject) => formObject.attributeCollection.all)\n .find((attribute) => findMethod(attribute));\n }\n}\n","import { has } from \"lodash\";\n\nimport { AttributeFactory } from \"../../attributes/AttributeFactory\";\nimport { AttributeSetModel } from \"../../attributes/AttributeSetModel\";\nimport { CompositeAttributeModel } from \"../../attributes/CompositeAttributeModel\";\nimport { ContentConfiguration } from \"../../contentconfiguration/ContentConfiguration\";\nimport { DetailModel } from \"../../detail/DetailModel\";\n\nimport type { ModularUIResponse } from \"../../../modularui/ModularUIResponse\";\nimport type {\n AttributeData,\n CompositeAttributeContributions,\n} from \"../../attributes/types\";\nimport type { ErrorResponse } from \"../../error/ErrorResponse\";\nimport type { ModelWithChildModels } from \"../../types\";\nimport type { ListItemModel } from \"../ListItemModel\";\nimport type { ListDetailContributions, ListDetailData } from \"../types\";\n\n/**\n * Detail of a list item\n */\nexport class ListDetailModel extends DetailModel<\n ListDetailData,\n ListDetailContributions\n> {\n private _contentConfiguration: ContentConfiguration;\n private _listitem: ListItemModel | undefined;\n private _givenAnswers: CompositeAttributeModel | undefined;\n private _results: CompositeAttributeModel | undefined;\n private _eventdata: AttributeSetModel[];\n\n constructor(modularUIResponse?: ModularUIResponse) {\n super(modularUIResponse);\n\n this._contentConfiguration = new ContentConfiguration(\n this.contributions ? this.contributions.content : {},\n );\n\n this.setResultSection();\n this._eventdata = this.setEventData();\n }\n\n /**\n * Add links to expand on initialization of this model\n */\n override getInitialChildModelLinks() {\n const listitemPanels = this.listitem\n ? this.listitem.links.getLinksByGroup(\"panel\").all\n : [];\n\n const links = [...super.getInitialChildModelLinks(), ...listitemPanels];\n\n if (this.hasResults) {\n if (this.results) {\n links.push(...this.results.getInitialChildModelLinks());\n }\n if (this.givenAnswers) {\n links.push(...this.givenAnswers.getInitialChildModelLinks());\n }\n }\n\n return links;\n }\n\n override setChildModels(\n models: ModelWithChildModels[],\n errors: ErrorResponse[],\n ) {\n this.attributeCollection.setChildModels(models, errors);\n\n if (this.results) {\n this.results.setChildModels(models, errors);\n }\n\n if (this.givenAnswers) {\n this.givenAnswers.setChildModels(models, errors);\n }\n }\n\n override get type() {\n return \"ListDetail\";\n }\n\n static override get modelName() {\n return \"ListDetailModel\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n let resourcetype = data.resourcetype ?? \"unknown\";\n resourcetype = resourcetype.toLowerCase();\n\n return (\n resourcetype.endsWith(\"listdetail\") ||\n resourcetype.endsWith(\"listpaneldetail\") ||\n resourcetype.endsWith(\"datastorepaneldetail\")\n );\n }\n\n /**\n * Set listitem of this listdetail and transfer listitem actions to listdetail actions\n */\n set listitem(listitem: ListItemModel | undefined) {\n this._listitem = listitem;\n if (listitem) {\n this.actionCollection = listitem.actionCollection;\n }\n }\n\n get listitem() {\n return this._listitem;\n }\n\n /**\n * Getting panel links\n */\n get panelLinks() {\n return this.listitem?.links.getLinksByGroup(\"panel\");\n }\n\n /**\n * Getting the contentConfiguration\n */\n get contentConfiguration() {\n return this._contentConfiguration;\n }\n\n set contentConfiguration(configuration: ContentConfiguration) {\n this._contentConfiguration = configuration;\n }\n\n /**\n * Getting the introduction text configured on the case view\n */\n get introtext() {\n if (this.data._content) {\n return this.data._content.text.message;\n }\n\n if (this.contributions.text) {\n return this.contributions.text.message ?? this.contributions.text;\n }\n\n if (Array.isArray(this.contributions.texts)) {\n return this.contributions.texts[0].text;\n }\n\n return \"\";\n }\n\n setResultSection() {\n const resultSectionContributions = this.contributions.resultSection;\n const resultSectionData = this.data.resultSection;\n\n if (resultSectionData && resultSectionContributions) {\n this.setResults(\n resultSectionData.results,\n resultSectionContributions.results,\n );\n this.setGivenAnswers(\n resultSectionData.givenAnswers,\n resultSectionContributions.givenAnswers,\n );\n }\n }\n\n setResults(\n resultsData: undefined | Record<string, AttributeData>,\n resultsContributions: undefined | CompositeAttributeContributions,\n ) {\n if (resultsData && resultsContributions) {\n if (resultsContributions.type === \"composite\") {\n resultsContributions.children = resultsContributions.children.filter(\n (child) => {\n const childKey = Object.keys(child)[0];\n return childKey in resultsData;\n },\n );\n }\n\n const results = AttributeFactory.createAttribute(\n \"results\",\n {\n key: \"results\",\n dynamicschema: this.data.dynamicschema,\n content: this.data.content?.results,\n ...this.data.resultSection,\n },\n resultsContributions,\n this.modelOptions,\n );\n\n if (results instanceof CompositeAttributeModel) {\n results.isResult = true;\n results.indicateContentConfiguration(this.contentConfiguration);\n this._results = results;\n }\n }\n }\n\n setGivenAnswers(\n givenAnswersData: undefined | Record<string, AttributeData>,\n givenAnswersContributions: undefined | CompositeAttributeContributions,\n ) {\n if (givenAnswersData && givenAnswersContributions) {\n const filteredContributions = {\n ...givenAnswersContributions,\n children: givenAnswersContributions.children.filter((child) => {\n const childKey = Object.keys(child)[0];\n return childKey in givenAnswersData;\n }),\n };\n\n const givenAnswers = AttributeFactory.createAttribute(\n \"givenAnswers\",\n {\n key: \"givenAnswers\",\n dynamicschema: this.data.dynamicschema,\n content: this.data.content?.givenAnswers,\n ...this.data.resultSection,\n },\n filteredContributions,\n this.modelOptions,\n );\n\n if (givenAnswers instanceof CompositeAttributeModel) {\n givenAnswers.isResult = true;\n this._givenAnswers = givenAnswers;\n }\n }\n }\n\n get givenAnswers() {\n return this._givenAnswers;\n }\n\n get hasResults() {\n return has(this.contributions, \"resultSection\");\n }\n\n get results() {\n return this._results;\n }\n\n get hasEventData() {\n return (\n has(this.contributions, \"eventdata\") &&\n has(this.data, \"eventdata\") &&\n this.data.eventdata != null &&\n this.contributions.eventdata != null\n );\n }\n\n setEventData() {\n if (!this.data.eventdata || !this.contributions.eventdata) {\n return [];\n }\n\n const eventdata: AttributeSetModel[] = [];\n\n const { eventdata: eventdataData, dynamicschema } = this.data;\n const eventdataContributions = this.contributions.eventdata;\n\n eventdataContributions.forEach((attributeset) => {\n for (const attributesetKey of Object.keys(attributeset)) {\n const attributesetContributions = attributeset[attributesetKey];\n const attributesetData = eventdataData[attributesetKey];\n\n if (!attributesetData) continue;\n\n if (Array.isArray(attributesetData)) {\n attributesetData.forEach((item, index) => {\n const key = `${attributesetKey}-${index + 1}`;\n eventdata.push(\n new AttributeSetModel(\n key,\n { ...item, dynamicschema },\n attributesetContributions,\n this.modelOptions,\n ),\n );\n });\n } else {\n eventdata.push(\n new AttributeSetModel(\n attributesetKey,\n { ...attributesetData, dynamicschema },\n attributesetContributions,\n this.modelOptions,\n ),\n );\n }\n }\n });\n\n return eventdata;\n }\n\n get eventdata() {\n return this._eventdata;\n }\n}\n","import { immerable } from \"immer\";\n\nimport { AttributeCollection } from \"../../attributes/AttributeCollection\";\n\nimport type {\n AttributeModel,\n NamedDynamicSchema,\n} from \"../../attributes/types\";\nimport type { ModelOptions } from \"../../types\";\nimport type { GroupData, GroupingContributions, GroupingData } from \"../types\";\n\n/**\n * Group information model\n * Put GroupModel here because of possible circular dependency with GroupingModel below\n */\nexport class GroupModel {\n private _group: GroupData & {\n dynamicschema: NamedDynamicSchema | undefined;\n };\n private _context: GroupingContributions | undefined;\n private _attributeCollection: AttributeCollection;\n private _grouping: GroupingModel | undefined;\n\n constructor(\n group: GroupData & {\n dynamicschema: NamedDynamicSchema | undefined;\n },\n context: GroupingContributions | undefined,\n allContexts: GroupingContributions[] | undefined,\n modelOptions?: ModelOptions,\n ) {\n this._group = group;\n this._context = context;\n\n this._attributeCollection = new AttributeCollection(\n group,\n context?.attributes,\n { ...modelOptions, isReadonly: true },\n );\n\n if (group.grouping) {\n this._grouping = new GroupingModel(\n { ...group.grouping, dynamicschema: group.dynamicschema },\n allContexts,\n modelOptions,\n );\n }\n }\n\n get type() {\n return this._group.type;\n }\n\n get id() {\n return this._group._id || \"unknown\";\n }\n\n get label() {\n return this._context?.label;\n }\n\n get attributeCollection() {\n return this._attributeCollection;\n }\n\n get grouping() {\n return this._grouping;\n }\n\n /**\n * Retrieve array of reference id's\n */\n get reference() {\n return this._group.reference || [];\n }\n\n hasAttributeByKey(key: string) {\n if (this.attributeCollection.hasAttributeByKey(key)) {\n return true;\n }\n\n if (this.grouping) {\n return this.grouping.hasAttributeByKey(key);\n }\n\n return false;\n }\n\n getAttributeByKey(key: string): AttributeModel | undefined {\n const attribute = this.attributeCollection.getAttributeByKey(key);\n if (attribute) {\n return attribute;\n }\n\n if (this.grouping) {\n return this.grouping.getAttributeByKey(key);\n }\n\n return undefined;\n }\n}\n\n/**\n * Grouping model to group lists\n */\nexport class GroupingModel {\n [immerable] = true;\n\n private _prefix: string | undefined;\n private _groups: GroupModel[] = [];\n\n constructor(\n data: GroupingData & {\n dynamicschema?: NamedDynamicSchema;\n },\n contexts: GroupingContributions[] | undefined,\n modelOptions?: ModelOptions,\n ) {\n this._prefix = data?.prefix;\n\n if (data?.group) {\n this._groups = this.createGroup(data, contexts, modelOptions);\n }\n }\n\n createGroup(\n data: GroupingData & {\n dynamicschema?: NamedDynamicSchema;\n },\n contexts: GroupingContributions[] | undefined,\n modelOptions?: ModelOptions,\n ) {\n if (!data.group) {\n return [];\n }\n\n const context = this.getContextFromContributionsByPrefix(\n contexts,\n this._prefix,\n );\n\n return data.group.map((group) => {\n const dynamicschema = this.getDynamicSchema(\n group.type,\n data.dynamicschema,\n );\n\n const d = {\n ...group,\n dynamicschema,\n } as GroupData & {\n dynamicschema: NamedDynamicSchema | undefined;\n };\n\n return new GroupModel(d, context, contexts, modelOptions);\n });\n }\n\n /**\n * add grouped prefix to the dynamicschema\n */\n getDynamicSchema(\n groupType: string,\n dynamicschema: NamedDynamicSchema | undefined,\n ) {\n if (dynamicschema) {\n if (\n this._prefix &&\n dynamicschema[groupType] &&\n !dynamicschema[this._prefix + groupType]\n ) {\n dynamicschema[this._prefix + groupType] = dynamicschema[groupType];\n }\n return dynamicschema;\n }\n return undefined;\n }\n\n /**\n * Retrieve groups of grouping\n */\n get groups() {\n return this._groups;\n }\n\n /**\n * Inidicates if Grouping has one or more groups\n */\n hasGroups() {\n return this._groups.length > 0;\n }\n\n /**\n * Get context of grouping\n */\n getContextFromContributionsByPrefix(\n contexts?: GroupingContributions[],\n prefix?: string,\n ) {\n if (contexts && prefix) {\n return contexts.find((context) => context.prefix === prefix);\n }\n return undefined;\n }\n\n hasAttributeByKey(key: string): boolean {\n return this.groups.some((group: GroupModel) =>\n group.hasAttributeByKey(key),\n );\n }\n\n getAttributeByKey(key: string) {\n const groupByKey = this.groups.find((group: GroupModel) =>\n group.hasAttributeByKey(key),\n );\n\n if (groupByKey) {\n return groupByKey.getAttributeByKey(key);\n }\n\n return undefined;\n }\n\n getGroupByAttributeKey(key: string) {\n return this.groups.find((group) => group.hasAttributeByKey(key));\n }\n}\n","import { Href } from \"../href/Href\";\n\nimport type { HistoryLocation } from \"../../types/types\";\nimport type { FilterCollection } from \"../filters/FilterCollection\";\nimport type { Parameter } from \"../parameter/Parameter\";\nimport type { ListModel } from \"./ListModel\";\n\n/**\n * Class representing the href of a list. It adds paging, sorting and filter parameters where necessary\n */\nexport class ListHref extends Href {\n private _isPrefixed: boolean;\n private _prefix: string | undefined;\n private _pagingName: string | undefined;\n private _pagesizeName: string | undefined;\n private _sortingName: string | undefined;\n\n constructor(\n href?: Href | string | HistoryLocation,\n list?: ListModel,\n isPrefixed = true,\n ) {\n super(href, undefined);\n\n this._isPrefixed = isPrefixed;\n\n if (list) {\n this.setParameterNamesFromListModel(list);\n } else if (href != null && href instanceof ListHref) {\n this.setParameterNamesFromHref(href);\n }\n }\n\n /**\n * Retrieve parameter names from Href\n */\n setParameterNamesFromHref(href: ListHref) {\n this._prefix = this._isPrefixed ? href.prefix : undefined;\n this._pagingName = href.pagingName;\n this._pagesizeName = href.pagesizeName;\n this._sortingName = href.sortingName;\n }\n\n /**\n * Retrieve parameter names and settings from List model\n */\n setParameterNamesFromListModel(list: ListModel) {\n this._prefix = this._isPrefixed ? list.key : undefined;\n\n this._pagingName = list.paging ? list.paging.name : \"\";\n this._pagesizeName =\n list.paging && list.paging.pagesize ? list.paging.pagesize.name : \"\";\n\n this._sortingName = list.sorting ? list.sorting.name : \"\";\n\n this.page = list.paging?.page;\n this.pagesize =\n list.paging && list.paging.pagesize.options.length > 0\n ? list.paging.pagesize.value\n : undefined;\n\n this.sort = list.sorting?.param;\n\n this.filterCollection = list.filterCollection;\n }\n\n /**\n * Getting prefix\n */\n get prefix() {\n return this._prefix;\n }\n\n /**\n * Getting paging name\n */\n get pagingName() {\n return this._pagingName;\n }\n\n /**\n * Getting pagesize name\n */\n get pagesizeName() {\n return this._pagesizeName;\n }\n\n /**\n * Getting sorting name\n */\n get sortingName() {\n return this._sortingName;\n }\n\n /**\n * Setting the current page\n */\n set page(page: number | undefined) {\n if (this.pagingName) {\n this.setParameter(this.pagingName, page?.toString(), this.prefix);\n }\n }\n\n get page(): Parameter | undefined {\n return this.pagingName\n ? this.getParameter(this.pagingName, this.prefix)\n : undefined;\n }\n\n /**\n * Setting the sort value\n */\n set sort(sort: string | undefined) {\n if (this.sortingName) {\n this.setParameter(this.sortingName, sort, this.prefix);\n }\n }\n\n /**\n * Setting the page size\n */\n set pagesize(pagesize: number | undefined) {\n if (this.pagesizeName) {\n this.setParameter(this.pagesizeName, pagesize?.toString(), this.prefix);\n }\n }\n\n /**\n * Add filter parameters to the parameter collection\n */\n set filterCollection(filters: FilterCollection) {\n if (!filters) {\n return;\n }\n\n filters.forEach((filter) => {\n filter.params.forEach((param) => {\n if (param.value != null) {\n this.setParameter(param.name, param.value, this.prefix);\n } else {\n this.removeParameter(param.name, this.prefix);\n }\n });\n });\n }\n}\n","import { CASEVIEW_LINK } from \"../../layouthints/LayoutHints\";\nimport { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport { DetailModel } from \"../detail/DetailModel\";\nimport { Href } from \"../href/Href\";\n\nimport type { ChoiceAttributeOptionModel } from \"../attributes/ChoiceAttributeOptionModel\";\nimport type { BaseDetailContributions, DetailData } from \"../detail/types\";\nimport type { ModelOptions } from \"../types\";\n\nexport class ListItemModel extends DetailModel<\n DetailData,\n BaseDetailContributions\n> {\n static createFromListResult(\n key: string,\n data: DetailData,\n contributions: BaseDetailContributions,\n modelOptions?: ModelOptions,\n ): ListItemModel {\n const listitemInput = new ModularUIResponse();\n listitemInput.key = key;\n listitemInput.data = data;\n listitemInput.contributions = contributions;\n listitemInput.origin = modelOptions?.origin;\n listitemInput.contextPath = modelOptions?.contextPath;\n return new ListItemModel(listitemInput);\n }\n\n static createFromChoiceAttributeOption(option: ChoiceAttributeOptionModel) {\n const listitemInput = new ModularUIResponse();\n listitemInput.key = option.code;\n\n const item = new ListItemModel(listitemInput);\n item.attributeCollection = option.attributeCollection;\n return item;\n }\n\n override get selfhref() {\n const selflink = this.links.getLinkByKey(\"self\");\n\n if (selflink) {\n return selflink.href;\n }\n\n return new Href(\"#\");\n }\n\n get caseviewHref() {\n const caseviewLinkAttribute =\n this.attributeCollection.getAttributeByLayoutHint(CASEVIEW_LINK);\n\n if (caseviewLinkAttribute) {\n const caseviewLinkKey = caseviewLinkAttribute.name;\n const caseviewLink = this.links.getLinkByKey(caseviewLinkKey);\n\n if (caseviewLink) {\n return caseviewLink.href;\n }\n }\n\n return this.selfhref;\n }\n\n /**\n * Getting panel links\n */\n get panelLinks() {\n return this.links.getLinksByGroup(\"panel\");\n }\n\n /**\n * Check if list item has panel links\n */\n hasPanelLinks() {\n return this.panelLinks.length > -1;\n }\n\n /**\n * Retrieve all actions by type\n */\n getActionsByType(actionType: string) {\n return this.actionCollection.getActionsByType(actionType);\n }\n\n get additionalDetailRoutePath() {\n const additionalDetailLinks = this.panelLinks;\n\n if (additionalDetailLinks.length === 0) {\n return \"__NON_EXISTING_ROUTE__\";\n }\n\n return additionalDetailLinks.map((link) => link.href.path).join(\"|\");\n }\n}\n","import { ConfigurationException } from \"../../exceptions/ConfigurationException\";\nimport { ActionCollection } from \"../actions/ActionCollection\";\nimport { BaseCollection } from \"../base/BaseCollection\";\nimport { ListItemModel } from \"./ListItemModel\";\n\nimport type { ListModel } from \"./ListModel\";\n\nexport class ListItemCollection extends BaseCollection<ListItemModel> {\n /**\n * Create a list item collection from the given list\n */\n static createFromList(list: ListModel) {\n const _embedded = list.data._embedded;\n if (_embedded) {\n if (Array.isArray(_embedded)) {\n throw new ConfigurationException(\n `One record panel with multiple tables is not supported, place all types in one panel for the panel with key ${list.key}`,\n );\n }\n\n const dynamicschema = list.data.dynamicschema;\n\n const collection = _embedded.results.map((resultItem) => {\n const [key] = Object.keys(resultItem);\n const listitemData = resultItem[key];\n listitemData.dynamicschema = dynamicschema;\n\n const listitemContributions = list.contributions.results[key];\n\n return ListItemModel.createFromListResult(\n key,\n listitemData,\n listitemContributions,\n list.modelOptions,\n );\n });\n\n return new ListItemCollection(collection);\n }\n\n return new ListItemCollection();\n }\n\n get additionalDetailRoutePath() {\n if (this.isEmpty()) {\n return \"__NON_EXISTING_ROUTE__\";\n }\n\n const allRoutes = this.all\n .map((listItem) => listItem.additionalDetailRoutePath)\n .join(\"|\");\n\n if (allRoutes.includes(\"|\")) {\n return `(${allRoutes})`;\n }\n\n return allRoutes;\n }\n\n get actionCollection() {\n const actions = new ActionCollection();\n\n this.all.forEach((listItem) => {\n actions.collection.push(...listItem.actionCollection.all);\n });\n\n return actions;\n }\n}\n","import { immerable } from \"immer\";\n\nexport class PagesizeModel {\n [immerable] = true;\n\n private _pagesize: number | undefined;\n private _options: number[];\n\n constructor(\n pagesize: number | undefined,\n pagesizeContributions:\n | {\n options: number[];\n }\n | undefined,\n ) {\n this._pagesize = pagesize;\n this._options = pagesizeContributions?.options || [];\n }\n\n /**\n * Getting the name\n */\n get name() {\n return \"pagesize\";\n }\n\n /**\n * Geting the value\n */\n get value() {\n return this._pagesize;\n }\n\n /**\n * Setting the page size\n */\n set value(pagesize: number | undefined) {\n this._pagesize = pagesize;\n }\n\n /**\n * Getting available pagesize options\n */\n get options() {\n return this._options;\n }\n}\n","import { immerable } from \"immer\";\n\nimport { PagesizeModel } from \"./PagesizeModel\";\n\nimport type { PagingContributions, PagingData } from \"../types\";\n\nexport class PagingModel {\n [immerable] = true;\n\n private _data: PagingData | null;\n private _contributions: PagingContributions | undefined;\n\n private _page: number | undefined;\n private _pagesize: PagesizeModel;\n\n constructor(\n data: PagingData | null,\n contributions: PagingContributions | undefined,\n ) {\n this._data = data;\n this._contributions = contributions;\n\n this._page = this._data?.page;\n this._pagesize = new PagesizeModel(\n this._data?.pagesize,\n this._contributions?.pagesize,\n );\n }\n\n get isEnabled() {\n return typeof this.page !== \"undefined\";\n }\n\n /**\n * Get the paging parameter name\n */\n get name() {\n return \"page\";\n }\n\n /**\n * Getting paging value\n */\n get value() {\n return this.page;\n }\n\n /**\n * Get maximum pages\n */\n get maxpages() {\n return this._data?.maxpages;\n }\n\n /**\n * Get current page\n */\n get page() {\n return this._page;\n }\n\n set page(page: number | undefined) {\n this._page = page;\n }\n\n /**\n * Get the total number of results\n */\n get totalResults() {\n return this._data?.totalresults || -1;\n }\n\n get pagesize() {\n return this._pagesize;\n }\n}\n","import { immerable } from \"immer\";\n\nimport { ListHref } from \"../ListHref\";\n\nimport type { GroupModel } from \"../grouping/GroupingModel\";\n\nexport enum SORT_ORDER {\n ASC = \"asc\",\n DESC = \"desc\",\n}\n\nexport class SortOptionModel {\n [immerable] = true;\n\n private _key: string;\n private _label: string;\n private _group: GroupModel | undefined;\n private _sortorder: SORT_ORDER = SORT_ORDER.DESC;\n private _selected = false;\n\n constructor(key: string, label?: string, group?: GroupModel) {\n this._key = key;\n this._group = group;\n\n this._label = this.setLabel(key, label, group);\n }\n\n private setLabel(key: string, label?: string, group?: GroupModel) {\n if (label) {\n this._label = label;\n } else if (group) {\n const attribute = group.getAttributeByKey(key);\n if (attribute) {\n this._label = attribute.label;\n }\n }\n return \"\";\n }\n\n get selected() {\n return this._selected;\n }\n\n set selected(selected: boolean) {\n this._selected = selected;\n }\n\n get key() {\n return this._key;\n }\n\n get value() {\n return `${this.key} ${this.sortorder}`;\n }\n\n get oppositeDirection() {\n return this.sortorder === SORT_ORDER.DESC\n ? SORT_ORDER.ASC\n : SORT_ORDER.DESC;\n }\n\n get oppositeValue() {\n return `${this.key} ${this.oppositeDirection}`;\n }\n\n get label() {\n return this._label;\n }\n\n get sortorder() {\n return this._sortorder;\n }\n\n set sortorder(sortorder: SORT_ORDER) {\n this._sortorder = sortorder;\n }\n\n get group() {\n return this._group;\n }\n\n getHref(listHref: ListHref) {\n const listhref = new ListHref(listHref);\n const hasPage = listhref.prefix\n ? listhref.hasParameter(\"page\", listhref.prefix)\n : listhref.hasParameter(\"page\");\n if (hasPage) {\n listhref.page = 1;\n }\n listhref.sort = this.oppositeValue;\n\n return listhref;\n }\n}\n","import { IllegalArgumentException } from \"../../../exceptions/IllegalArgumentException\";\nimport { BaseCollection } from \"../../base/BaseCollection\";\nimport { ListHref } from \"../ListHref\";\nimport { SORT_ORDER, SortOptionModel } from \"./SortOptionModel\";\n\nimport type { GroupingModel } from \"../grouping/GroupingModel\";\nimport type { ListContributions } from \"../types\";\n\nexport class SortingModel extends BaseCollection<SortOptionModel> {\n constructor(\n contributions: ListContributions,\n labels: Record<string, string>,\n grouping: GroupingModel,\n currentSort: string | undefined,\n ) {\n super();\n\n const sortAttributes = contributions?.sorting?.attributes;\n\n if (sortAttributes) {\n this.collection = sortAttributes.map((attributeKey) => {\n const label = labels[attributeKey];\n const group = grouping && grouping.getGroupByAttributeKey(attributeKey);\n return new SortOptionModel(attributeKey, label, group);\n });\n\n this.setSelected(currentSort);\n }\n }\n\n get name() {\n return \"sort\";\n }\n\n get value() {\n return this.filter((option) => option.selected)\n .map((option) => option.value)\n .join(\",\");\n }\n\n get param() {\n return this.value;\n }\n\n get options() {\n return this.collection;\n }\n\n setSelected(currentSort = \"\") {\n currentSort.split(\",\").forEach((sortItem) => {\n const [key, direction] = sortItem.split(\" \");\n\n this.collection.forEach((option) => {\n if (option.key === key) {\n option.selected = true;\n if (direction === SORT_ORDER.ASC) {\n option.sortorder = SORT_ORDER.ASC;\n } else if (direction === SORT_ORDER.DESC) {\n option.sortorder = SORT_ORDER.DESC;\n }\n }\n });\n });\n }\n\n /**\n * Retrieve a sort option from the model that can be used in the querystring to set it in the opposite direction\n * For example a sort option in the model with key books and direction descending will be retrieved as 'Books asc'\n */\n getUpdateQuerystring(optionKey: string) {\n if (!optionKey) {\n throw new IllegalArgumentException(\n \"Missing option key as input argument\",\n );\n }\n\n return this.filter((option) => option.key === optionKey)\n .map((option) =>\n option.key === optionKey ? option.oppositeValue : option.value,\n )\n .join(\",\");\n }\n\n /**\n * @see {@link SortingModel#getUpdateQuerystring}\n */\n getUpdateQuerystringBySortOption(sortOption: SortOptionModel) {\n if (!(sortOption instanceof SortOptionModel)) {\n throw new IllegalArgumentException(\n \"Missing SortOptionModel as input argument\",\n );\n }\n\n return this.getUpdateQuerystring(sortOption.key);\n }\n\n createListHref(listHref: ListHref, sortOption: SortOptionModel) {\n const listhref = new ListHref(listHref);\n const hasPage = listhref.prefix\n ? listhref.hasParameter(\"page\", listhref.prefix)\n : listhref.hasParameter(\"page\");\n if (hasPage) {\n listhref.page = 1;\n }\n listhref.sort = this.getUpdateQuerystringBySortOption(sortOption);\n\n return listhref;\n }\n}\n","import {\n CASEVIEW_LINK,\n HIDE_WHEN_EMPTY,\n SHOW_ONE_RESULT_AS_DETAIL,\n} from \"../../layouthints/LayoutHints\";\nimport { ActionCollection } from \"../actions/ActionCollection\";\nimport { ResourceModel } from \"../base/ResourceModel\";\nimport { FilterCollection } from \"../filters/FilterCollection\";\nimport { ListDetailModel } from \"./detail/ListDetailModel\";\nimport { GroupingModel } from \"./grouping/GroupingModel\";\nimport { ListHeaderModel } from \"./ListHeaderModel\";\nimport { ListHref } from \"./ListHref\";\nimport { ListItemCollection } from \"./ListItemCollection\";\nimport { PagingModel } from \"./paging/PagingModel\";\nimport { SortingModel } from \"./sorting/SortingModel\";\n\nimport type { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport type { TargetModel } from \"../../modularui/types\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ModelWithChildModels } from \"../types\";\nimport type { ListContributions, ListData } from \"./types\";\n\nexport class ListModel extends ResourceModel<ListData, ListContributions> {\n private _detail: ListDetailModel | undefined;\n private _headers: ListHeaderModel[];\n private _paging: PagingModel;\n private _filterCollection: FilterCollection;\n private _sorting: SortingModel;\n private _actionCollection: ActionCollection;\n private _listItemCollection: ListItemCollection;\n private _grouping: GroupingModel;\n private _selfhref: ListHref;\n\n constructor(modularuiResponse: ModularUIResponse) {\n super(modularuiResponse);\n\n this._headers = this.setHeaders();\n this._paging = this.setPaging();\n this._filterCollection = this.setFilters();\n this._sorting = this.setSorting();\n this._actionCollection = this.setActionCollection();\n this._grouping = this.setGrouping();\n this._selfhref = this.setSelfHref();\n this._listItemCollection = this._listItemCollection =\n ListItemCollection.createFromList(this);\n }\n\n get type() {\n return \"List\";\n }\n\n static override get modelName() {\n return \"ListModel\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n const resourceType = data.resourcetype;\n return (\n resourceType.endsWith(\"List\") ||\n resourceType.endsWith(\"ListPanel\") ||\n resourceType.endsWith(\"RelatedDataStorePanel\") ||\n resourceType.endsWith(\"RelatedDatastorePanel\") ||\n [\n \"list-related-cases\",\n \"RecordPanel\",\n \"EventHistoryPanel\",\n \"NotePanel\",\n \"AppointmentPanel\",\n \"DocumentPanel\",\n \"AssignmentPanel\",\n ].includes(resourceType)\n );\n }\n\n override getInitialChildModelLinks() {\n if (\n this.layouthint.has(SHOW_ONE_RESULT_AS_DETAIL) &&\n this.listItemCollection.length === 1\n ) {\n return this.listItemCollection.map((listItem) => {\n const listDetailLink = listItem.selflink;\n listDetailLink.targetModel = ListDetailModel as TargetModel;\n return listDetailLink;\n });\n }\n return [];\n }\n\n override setChildModels(\n models: ModelWithChildModels[],\n _errors: ErrorResponse[],\n ) {\n this.detail = models.find(\n (childModel) => childModel instanceof ListDetailModel,\n );\n }\n\n /**\n * Getting the label of the list\n */\n override get label() {\n return this.contributions.label;\n }\n\n /**\n * Getting the introduction text\n */\n get introtext() {\n if (this.data.content) {\n return this.data.content.text.message;\n }\n\n if (this.contributions.text) {\n return this.contributions.text.message ?? this.contributions.text;\n }\n\n if (Array.isArray(this.contributions.texts)) {\n return this.contributions.texts[0].text;\n }\n\n return \"\";\n }\n\n /**\n * Getting the results\n */\n get listItemCollection() {\n return this._listItemCollection;\n }\n\n /**\n * Set results\n */\n set listItemCollection(listItemCollection: ListItemCollection) {\n this._listItemCollection = listItemCollection;\n }\n\n /**\n * Getting the detail\n */\n get detail() {\n return this._detail;\n }\n\n /**\n * Add detail model to the {ListModel}\n */\n set detail(detail: ListDetailModel | undefined) {\n const listitem = this.listItemCollection.find((listItem) =>\n listItem.selfhref.equals(detail?.selfhref),\n );\n\n if (listitem && detail) {\n detail.listitem = listitem;\n }\n\n this._detail = detail;\n\n this.setSelfHref();\n }\n\n /**\n * Retrieve grouping information\n */\n get grouping() {\n return this._grouping;\n }\n\n setGrouping() {\n return new GroupingModel(\n { ...this.data.grouping, dynamicschema: this.data.dynamicschema },\n this.contributions.contexts,\n this.modelOptions,\n );\n }\n\n hasGrouping() {\n return this.grouping.hasGroups();\n }\n\n /**\n * Check if list has results\n */\n hasResults() {\n return this.listItemCollection.hasItems;\n }\n\n isEmpty() {\n return !this.hasResults();\n }\n\n get shouldHide() {\n return (\n this.layouthint.has(HIDE_WHEN_EMPTY) &&\n this.isEmpty() &&\n this.actionCollection.isEmpty() &&\n !this.filterCollection.hasActiveFilters()\n );\n }\n\n /**\n * Get list item by ID\n */\n getListItemById(id: string | number) {\n const decodedId = decodeURIComponent(id.toString());\n return this.listItemCollection.find(\n (result) => result.id.toString() === decodedId,\n );\n }\n\n /**\n * Get list item by Href\n */\n getListItemByHref(href: ListHref) {\n return this.listItemCollection.find((result) =>\n result.selfhref.equals(href),\n );\n }\n\n /**\n * Getting paging information\n */\n get paging() {\n return this._paging;\n }\n\n setPaging() {\n return new PagingModel(this.data.paging, this.contributions.paging);\n }\n\n /**\n * Getting sorting information\n */\n get sorting() {\n return this._sorting;\n }\n\n setSorting() {\n return new SortingModel(\n this.contributions,\n this.getSortingLabels(),\n this.grouping,\n this.data.sorting,\n );\n }\n\n /**\n * Getting the filters\n */\n get filterCollection() {\n return this._filterCollection;\n }\n\n /**\n * Set filterCollection\n */\n set filterCollection(filterCollection: FilterCollection) {\n this._filterCollection = filterCollection;\n }\n\n setFilters() {\n return new FilterCollection(\n this.data.filter,\n {\n listkey: this.key,\n filter: this.contributions.filter || {},\n contexts: this.contributions.contexts,\n dynamicschema: this.data.dynamicschema,\n },\n this.modelOptions,\n );\n }\n\n /**\n * Indicates if list results are filtered\n */\n isFiltered() {\n return this.filterCollection.hasActiveFilters();\n }\n\n /**\n * Getting actions\n */\n get actionCollection() {\n return this._actionCollection;\n }\n\n setActionCollection() {\n return new ActionCollection(\n this.data.actions,\n this.contributions.actions,\n this.modelOptions,\n );\n }\n\n /**\n * Contains this model list data\n */\n hasList() {\n return this.key != null;\n }\n\n /**\n * Sets self href from links collection\n */\n setSelfHref() {\n const selfLink = this.links.getLinkByKey(\"self\");\n return new ListHref(selfLink?.href, this);\n }\n\n /**\n * Getting the self link of this list\n */\n override get selfhref() {\n return this._selfhref;\n }\n\n /**\n * Getting the headers of this list\n */\n get headers() {\n return this._headers;\n }\n\n /**\n * Set initial headers of list\n */\n setHeaders() {\n const tempHeaders: ListHeaderModel[] = [];\n\n if (this.contributions.results) {\n const { results } = this.contributions;\n\n Object.keys(results).forEach((key) => {\n results[key].attributes.forEach((attribute) => {\n const listHeader = new ListHeaderModel(attribute, this.sorting);\n\n const exists = tempHeaders.some((tempHeader) =>\n tempHeader.equals(listHeader),\n );\n\n if (!exists && !listHeader.layouthint.has(CASEVIEW_LINK)) {\n tempHeaders.push(listHeader);\n }\n });\n });\n }\n\n return tempHeaders;\n }\n\n getSortingLabels() {\n const sortingLabels: Record<string, string> = {};\n\n if (this.contributions.results) {\n Object.values(this.contributions.results).forEach((result) => {\n result.attributes.forEach((attribute) => {\n const attributeKey = Object.keys(attribute)[0];\n const attributeLabel = attribute[attributeKey].label;\n sortingLabels[attributeKey] = attributeLabel;\n });\n });\n }\n\n return sortingLabels;\n }\n\n /**\n * Retrieve all actions by type\n */\n getActionsByType(actionType: string) {\n return this.actionCollection.getActionsByType(actionType);\n }\n\n /**\n * Retrieves the label of the first additional detail link by resource type\n */\n getAdditionalDetailLabel(resourceType: string) {\n const resultTypes = Object.keys(this.contributions.results);\n\n for (const resultType of resultTypes) {\n const link = this.contributions.results[resultType]._links?.panel?.find(\n (panelLink) => panelLink.resourcetype === resourceType,\n );\n if (link) {\n return link.label;\n }\n }\n\n return undefined;\n }\n}\n","import { ChoiceAttributeOptionModel } from \"../attributes/ChoiceAttributeOptionModel\";\nimport { ResourceCollection } from \"../base/ResourceCollection\";\n\nimport type { ModelOptions } from \"../types\";\nimport type {\n LookupOptionData,\n LookupOptionsContributions,\n LookupOptionsData,\n} from \"./types\";\n\nexport class LookupOptionCollection extends ResourceCollection<ChoiceAttributeOptionModel> {\n static create(\n data: LookupOptionsData,\n contributions: LookupOptionsContributions,\n modelOptions?: ModelOptions,\n ) {\n const collection = new LookupOptionCollection();\n\n if (data.options && contributions.options) {\n data.options.forEach((option) => {\n collection.add(\n new ChoiceAttributeOptionModel(\n [],\n {\n ...option,\n optionType: this.getOptionType(option, contributions),\n elementsContributions: contributions.options[0].elements,\n },\n {\n ...modelOptions,\n referenceDate: new Date().toISOString().split(\"T\")[0],\n },\n ),\n );\n });\n }\n\n return collection;\n }\n\n static getOptionType(\n option: LookupOptionData,\n contributions: LookupOptionsContributions,\n ) {\n if (contributions.optionType) {\n return contributions.optionType;\n }\n if (option._links?.download?.[0].name === \"avatar\") {\n return \"user\";\n }\n return \"generic\";\n }\n}\n","import { ResourceModel } from \"../base/ResourceModel\";\nimport { FilterCollection } from \"../filters/FilterCollection\";\nimport { LookupOptionCollection } from \"./LookupOptionCollection\";\n\nimport type { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport type { FilterCollectionContributions } from \"../filters/types\";\nimport type { LookupOptionsContributions, LookupOptionsData } from \"./types\";\n\nexport class LookupOptionsModel extends ResourceModel<\n LookupOptionsData,\n LookupOptionsContributions\n> {\n private _options: LookupOptionCollection;\n private _filterCollection: FilterCollection;\n\n constructor(modularuiResponse: ModularUIResponse) {\n super(modularuiResponse);\n\n this._options = LookupOptionCollection.create(\n this.data,\n this.contributions,\n this.modelOptions,\n );\n\n this._filterCollection = this.createFilterCollection(\n this.data.filter,\n this.contributions.filter,\n );\n }\n\n get type() {\n return \"LookupOptions\";\n }\n\n static override get modelName() {\n return \"LookupOptionsModel\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n return data.resourcetype === \"lookupOptions\";\n }\n\n get options() {\n return this._options;\n }\n\n createFilterCollection(\n data: {\n name: \"labelFilter\";\n param: \"labelFilter\";\n value: string;\n },\n contributions: FilterCollectionContributions,\n ) {\n if (data && contributions) {\n return new FilterCollection(\n { [data.name]: data },\n { filter: contributions },\n this.modelOptions,\n );\n }\n return new FilterCollection();\n }\n\n /**\n * Getting the filters\n */\n get filterCollection() {\n return this._filterCollection;\n }\n}\n","import type { ModelCategory } from \"./types\";\n\nexport class ModelCategoryModel {\n private _modelCategory: ModelCategory;\n\n constructor(modelCategory: ModelCategory) {\n this._modelCategory = modelCategory;\n }\n\n /**\n * Id of the category\n */\n get key() {\n return this._modelCategory._id;\n }\n\n /**\n * Label of the category\n */\n get label() {\n return this._modelCategory.label;\n }\n\n /**\n * Description of the category\n */\n get description() {\n return this._modelCategory.description;\n }\n\n /**\n * Small icon of the category\n */\n get iconSmall() {\n return this._modelCategory.iconSmall;\n }\n\n /**\n * Medium icon of the category\n */\n get iconMedium() {\n return this._modelCategory.iconMedium;\n }\n\n /**\n * Large icon of the category\n */\n get iconLarge() {\n return this._modelCategory.iconLarge;\n }\n}\n","import { BaseCollection } from \"../base/BaseCollection\";\nimport { ModelCategoryModel } from \"./ModelCategoryModel\";\n\nimport type { ModelCategory } from \"./types\";\n\nexport class ModelCategoryCollection extends BaseCollection<ModelCategoryModel> {\n constructor(modelCategories: ModelCategory[] = []) {\n super();\n\n this.collection = modelCategories\n ? modelCategories.map(\n (modelCategory) => new ModelCategoryModel(modelCategory),\n )\n : [];\n }\n}\n","import { IllegalStateException } from \"../../exceptions/IllegalStateException\";\nimport { ResourceModel } from \"../base/ResourceModel\";\nimport { ModelCategoryCollection } from \"./ModelCategoryCollection\";\n\nimport type { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport type { ModelCatalogContributions, ModelCatalogData } from \"./types\";\n\n/**\n * The Application model\n */\nexport class ModelCatalogModel extends ResourceModel<\n ModelCatalogData,\n ModelCatalogContributions\n> {\n get type() {\n return \"ModelCatalog\";\n }\n\n static override get modelName() {\n return \"ModelCatalogModel\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n return data.resourcetype === \"ModelCatalog\";\n }\n\n override get label() {\n return this.locale === \"nl\" ? \"Model catalogus\" : \"Model catalog\";\n }\n\n /**\n * Retrieve link to Concept Index model\n */\n get conceptIndexLink() {\n const link = this.links.getLinkByKey(\"concepts\");\n if (!link) {\n throw new IllegalStateException(\n \"Missing concepts index link in model catalog\",\n );\n }\n return link;\n }\n\n /**\n * Retrieve link to Content Index model\n */\n get contentIndexLink() {\n const link = this.links.getLinkByKey(\"content\");\n if (!link) {\n throw new IllegalStateException(\n \"Missing content index link in model catalog\",\n );\n }\n return link;\n }\n\n /**\n * Retrieve model categories as a collection\n */\n get modelcategories() {\n return new ModelCategoryCollection(this.data.modelcategories);\n }\n}\n","import { ResourceModel } from \"../base/ResourceModel\";\nimport { TaskGroupCollection } from \"../taskgroup/TaskGroupCollection\";\nimport { TaskGroupModel } from \"../taskgroup/TaskGroupModel\";\n\nimport type { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport type { ActionContributions, ActionData } from \"../actions/types\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ModelWithChildModels } from \"../types\";\nimport type { GroupingPanelContributions, GroupingPanelData } from \"./types\";\n\n/**\n * Panel that groups other panels\n */\nexport class GroupingPanelModel extends ResourceModel<\n GroupingPanelData,\n GroupingPanelContributions\n> {\n private _taskGroupCollection: TaskGroupCollection;\n\n constructor(modularuiResponse: ModularUIResponse) {\n super(modularuiResponse);\n\n this._taskGroupCollection = this.createTaskGroupCollection();\n }\n\n get type() {\n return \"GroupingPanel\";\n }\n\n static override get modelName() {\n return \"GroupingPanelModel\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n return [\n \"GroupingPanel\",\n \"CaseTabGroupingPanel\",\n \"TabGroupingPanel\",\n ].includes(data.resourcetype);\n }\n\n /**\n * Getting the label of the panel\n */\n override get label() {\n return this.contributions.label;\n }\n\n override getInitialChildModelLinks() {\n return this.links.getLinksByGroup(\"taskgroup\").all;\n }\n\n get panelLinks() {\n return this.links.getLinksByGroup(\"panel\");\n }\n\n override setChildModels(\n models: ModelWithChildModels[],\n _errors: ErrorResponse[],\n ) {\n const taskGroups = models.filter(\n (model) => model instanceof TaskGroupModel,\n );\n this.taskGroupCollection.add(taskGroups);\n }\n\n /**\n * Check if an introtext exists for this caseview\n */\n hasIntroText() {\n return this.introtext !== \"\";\n }\n\n /**\n * Getting the introduction text configured on the grouping panel\n */\n get introtext() {\n if (this.data._content) {\n return this.data._content.text.message;\n }\n\n if (this.contributions.text) {\n return this.contributions.text.message ?? this.contributions.text;\n }\n\n if (Array.isArray(this.contributions.texts)) {\n return this.contributions.texts[0].text as string;\n }\n\n return \"\";\n }\n\n private createTaskGroupCollection() {\n const data = this.getDataAsArray(\"taskgroups\", []) as {\n actions: ActionData[];\n name: string;\n }[];\n const contributions = this.getContributionAsArray(\"taskgroups\", []) as {\n name: string;\n label: string;\n actions: ActionContributions[];\n }[];\n\n const taskgroups = [];\n\n for (const taskgroupData of data) {\n const name = taskgroupData.name;\n const taskgroupContributions = contributions.find(\n (taskgroupContribution) => taskgroupContribution.name === name,\n );\n\n if (taskgroupContributions) {\n const taskgroup = TaskGroupModel.create(\n name,\n taskgroupData,\n taskgroupContributions,\n this.modelOptions,\n );\n taskgroups.push(taskgroup);\n }\n }\n\n return new TaskGroupCollection(taskgroups);\n }\n\n /**\n * Setting the taskgroup panel collection\n */\n set taskGroupCollection(taskgroups: TaskGroupCollection) {\n this._taskGroupCollection = taskgroups;\n }\n\n /**\n * Getting the taskgrouppanels on the tab\n */\n get taskGroupCollection() {\n return this._taskGroupCollection;\n }\n\n /**\n * Has taskgroups\n */\n hasTaskGroups() {\n return this.taskGroupCollection && this.taskGroupCollection.hasItems();\n }\n\n /**\n * Has tasks\n */\n hasTasks() {\n return this.taskGroupCollection.hasTasks();\n }\n}\n","import { ListModel } from \"../list/ListModel\";\n\nimport type { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\n\n/**\n * Case search model\n */\nexport class CaseSearchModel extends ListModel {\n override get type() {\n return \"CaseSearch\";\n }\n\n static override get modelName() {\n return \"CaseSearchModel\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n return data.resourcetype === \"CaseSearch\";\n }\n\n /**\n * Retrieve quick search filters\n */\n getQuickSearchFilters() {\n return this.filterCollection\n ? this.filterCollection.filter((filter) => filter.isQuickSearch())\n : [];\n }\n\n hasQuickSearchFilters() {\n return this.getQuickSearchFilters().length > 0;\n }\n}\n","import { ActionCollection } from \"../actions/ActionCollection\";\nimport { ResourceModel } from \"../base/ResourceModel\";\nimport { TaskGroupCollection } from \"../taskgroup/TaskGroupCollection\";\nimport { TaskGroupModel } from \"../taskgroup/TaskGroupModel\";\n\nimport type { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport type { ActionContributions, ActionData } from \"../actions/types\";\nimport type { ErrorResponse } from \"../error/ErrorResponse\";\nimport type { ModelWithChildModels } from \"../types\";\nimport type { TabContributions, TabData } from \"./types\";\n\nexport class TabModel extends ResourceModel<TabData, TabContributions> {\n private _actionCollection: ActionCollection;\n private _taskGroupCollection: TaskGroupCollection;\n\n constructor(modularuiResponse: ModularUIResponse) {\n super(modularuiResponse);\n\n this._taskGroupCollection = this.createTaskGroupCollection();\n\n this._actionCollection = new ActionCollection(\n this.data.actions,\n this.contributions.actions,\n this.modelOptions,\n );\n }\n\n get type() {\n return \"Tab\";\n }\n\n static override get modelName() {\n return \"TabModel\";\n }\n\n static override isApplicableModel(data: ModularUIResponse) {\n return (\n data.resourcetype?.endsWith(\"Tab\") ||\n data.resourcetype?.endsWith(\"KnowledgeBank\")\n );\n }\n\n override getInitialChildModelLinks() {\n return this.links.getLinksByGroup(\"taskgroup\", \"actions\").all;\n }\n\n override setChildModels(\n models: ModelWithChildModels[],\n _errors: ErrorResponse[],\n ) {\n const taskGroups = models.filter(\n (model) => model instanceof TaskGroupModel,\n );\n this.taskGroupCollection.add(taskGroups);\n }\n\n get searchLink() {\n return this.links.getLinksByGroup(\"search\").first;\n }\n\n createTaskGroupCollection() {\n const data = this.getDataAsArray(\"taskgroups\", []) as {\n actions: ActionData[];\n name: string;\n }[];\n const contributions = this.getContributionAsArray(\"taskgroups\", []) as {\n name: string;\n label: string;\n actions: ActionContributions[];\n }[];\n\n const taskgroups = [];\n\n for (const taskgroupData of data) {\n const name = taskgroupData.name;\n const taskgroupContributions = contributions.find(\n (taskgroupContribution) => taskgroupContribution.name === name,\n );\n\n if (taskgroupContributions) {\n const taskgroup = TaskGroupModel.create(\n name,\n taskgroupData,\n taskgroupContributions,\n this.modelOptions,\n );\n taskgroups.push(taskgroup);\n }\n }\n\n return new TaskGroupCollection(taskgroups);\n }\n\n /**\n * Getting the taskgrouppanels on the tab\n */\n get taskGroupCollection() {\n return this._taskGroupCollection;\n }\n\n /**\n * Setting the taskgroup panel collection\n */\n set taskGroupCollection(taskgroups: TaskGroupCollection) {\n this._taskGroupCollection = taskgroups;\n }\n\n /**\n * Getting the label of the tab\n */\n override get label() {\n return this.getContributionAsString(\"label\", \"\");\n }\n\n /**\n * Getting the component links on the tab\n */\n get components() {\n return this.links.getLinksByGroup(\"component\", \"search\");\n }\n\n get actionCollection() {\n return this._actionCollection;\n }\n\n /**\n * Has component links\n */\n hasComponents() {\n return this.components.size > 0;\n }\n\n hasTaskGroups() {\n return this.taskGroupCollection && this.taskGroupCollection?.hasItems();\n }\n\n hasActions() {\n return this.actionCollection && this.actionCollection.hasItems();\n }\n}\n","import { has } from \"lodash\";\n\nimport { ModularUIResponse } from \"../../modularui/ModularUIResponse\";\nimport { AttributeCollection } from \"../attributes/AttributeCollection\";\nimport { UserModel } from \"./UserModel\";\n\nexport class UserProfileModel extends UserModel {\n private _attributeCollection?: AttributeCollection;\n\n constructor(modularuiResponse: ModularUIResponse = new ModularUIResponse()) {\n super(modularuiResponse);\n const contributions = this.contributions;\n\n if (\n contributions &&\n contributions.attributes &&\n Array.isArray(contributions.attributes)\n ) {\n const attributeContributions = contributions.attributes.filter(\n (contribution) => {\n const [key] = Object.keys(contribution);\n return key !== \"sessiondata\" && has(this.data, key);\n },\n );\n\n this._attributeCollection = new AttributeCollection(\n this.data,\n attributeContributions,\n {\n ...this.modelOptions,\n isReadonly: true,\n },\n );\n } else {\n this._attributeCollection = new AttributeCollection(this.data, [], {\n ...this.modelOptions,\n isReadonly: true,\n });\n }\n }\n\n override get type() {\n return \"UserProfile\";\n }\n\n /**\n * returns all the attributes from the attribute collection\n */\n get attributeCollection() {\n return this._attributeCollection;\n }\n\n static override get modelName() {\n return \"UserProfileModel\";\n }\n}\n","import { has } from \"lodash\";\n\nimport { IllegalArgumentException } from \"../exceptions/IllegalArgumentException\";\nimport { ApplicationModel } from \"./application/ApplicationModel\";\nimport { CaseViewModel } from \"./caseview/CaseViewModel\";\nimport { ConceptDetailModel } from \"./concepts/ConceptDetailModel\";\nimport { ConceptIndexModel } from \"./concepts/ConceptIndexModel\";\nimport { ConceptTypeDetailModel } from \"./concepts/ConceptTypeDetailModel\";\nimport { ContentIndexModel } from \"./content/ContentIndexModel\";\nimport { ContentModel } from \"./content/ContentModel\";\nimport { ContentTOCModel } from \"./content/ContentTOCModel\";\nimport { ContentTypeModel } from \"./content/ContentTypeModel\";\nimport { DetailModel } from \"./detail/DetailModel\";\nimport { FormModel } from \"./form/FormModel\";\nimport { ListDetailModel } from \"./list/detail/ListDetailModel\";\nimport { ListModel } from \"./list/ListModel\";\nimport { LookupOptionsModel } from \"./lookup/LookupOptionsModel\";\nimport { ModelCatalogModel } from \"./modelcatalog/ModelCatalogModel\";\nimport { GroupingPanelModel } from \"./panels/GroupingPanelModel\";\nimport { CaseSearchModel } from \"./search/CaseSearchModel\";\nimport { TabModel } from \"./tab/TabModel\";\nimport { TaskGroupModel } from \"./taskgroup/TaskGroupModel\";\nimport { UserModel } from \"./user/UserModel\";\nimport { UserProfileModel } from \"./user/UserProfileModel\";\nimport { UserServicesModel } from \"./user/UserServicesModel\";\n\nimport type { ModularUIResponse } from \"../modularui/ModularUIResponse\";\n\n/**\n * Mapping of models and resourcetypes\n */\nconst RESOURCE_MODELS = [\n ApplicationModel,\n TabModel,\n ListDetailModel,\n ListModel,\n GroupingPanelModel,\n CaseSearchModel,\n CaseViewModel,\n DetailModel,\n TaskGroupModel,\n FormModel,\n UserModel,\n UserProfileModel,\n UserServicesModel,\n ModelCatalogModel,\n ConceptIndexModel,\n ConceptDetailModel,\n ConceptTypeDetailModel,\n ContentIndexModel,\n ContentTOCModel,\n ContentModel,\n ContentTypeModel,\n LookupOptionsModel,\n];\n\n/**\n * Resolve a model by resource\n */\nexport const resolveModel = (\n response: ModularUIResponse,\n availableModels = RESOURCE_MODELS,\n) => {\n if (!response) {\n throw new IllegalArgumentException(\n `No data or contribution available, cannot resolve model`,\n );\n }\n\n if (!has(response.contributions, \"resourcetype\")) {\n throw new IllegalArgumentException(\n `Contributions has wrong format, missing resourcetype property in contributions of ${response.requestHref?.toString()}`,\n );\n }\n\n const resourceTypeModel = availableModels.find((resourceModel) =>\n resourceModel.isApplicableModel(response),\n );\n\n if (resourceTypeModel) {\n return resourceTypeModel;\n }\n\n return undefined;\n};\n"],"mappings":"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","names":["require_arrayPush","__commonJSMin","exports","module","arrayPush","array","values","index","length","offset","require_isFlattenable","__commonJSMin","exports","module","Symbol","isArguments","isArray","spreadableSymbol","isFlattenable","value","require_baseFlatten","__commonJSMin","exports","module","arrayPush","isFlattenable","baseFlatten","array","depth","predicate","isStrict","result","index","length","value","require_flattenDeep","__commonJSMin","exports","module","baseFlatten","INFINITY","flattenDeep","array","length","ResourceCollection","BaseCollection","initialChildModelLinks","item","models","errors","LayoutHintCollection","BaseCollection","layouthint","IllegalArgumentException","hints","hint","hint2","foundHint","checkHint","match","value","ContentConfigurationElements","_ContentConfigurationElements","configuration","hints","contentIncludeLayoutHint","configElement","key","config","hint","contentExcludeLayoutHint","elementConfig","types","LayoutHintCollection","item","type","concept","defaultLabel","configuredLabelProperties","configuredLabels","configuredLabel","contentConfiguredLabels","configuredLabelProperty","hasAllContentInData","import_lodash","immerable","klona","BaseModel","immerable","data","contributions","options","getContextPathModularUI","hints","LayoutHintCollection","propName","defaultValue","dataAsString","dataAsNumber","dataAsBoolean","dataAsArray","dataAsObject","contributionAsArray","contributionAObject","contributionAsString","contributionAsBoolean","contributionAsNumber","klona","import_has","immerable","ModularUIResponse","_ModularUIResponse","immerable","getContextPathModularUI","key","data","contributions","locale","input","response","has","dataKey","contributionsKey","resourcetype","origin","contextPath","parameters","requestHref","modelData","LinkModel","_LinkModel","BaseModel","data","contributions","modelOptions","name","href","label","Href","INITIAL_FILTER","filters","hintStart","hint","param","p","Parameter","key","value","LinkCollection","link","icon","targetModel","isCacheable","filter","ProcessStatusSettingsModel","normalizeLinkJSON","data","contribution","links","linksData","key","linkData","link","linksContribution","linkContribution","idx","l","LinkCollection","_LinkCollection","BaseCollection","data","contributions","modelOptions","links","normalizeLinkJSON","link","HIDE_IN_USER_INTERFACE","LinkModel","selflinkResourceType","linksData","linksContributions","key","href","args","groupsToFind","groupLinks","linkCollection","resourceType","hint","newCollection","l","newLink","oldIndex","path","ProcessStatusSettingsModel","BaseModel","needed","LinkCollection","DateUtil","conceptLink","TIMEVERSION_FILTER_NAME","ResourceModel","BaseModel","modularuiResponse","ModularUIResponse","LinkCollection","key","IllegalStateException","data","IllegalArgumentException","lastServerUpdate","selflink","models","errors","flattenModels","flattenErrors","ConceptTypeDetailModel","ResourceModel","data","conceptTypeHref","ConceptLinkModel","BaseModel","data","entryDate","modelOptions","LinkCollection","models","_errors","href","conceptTypeModel","model","ConceptTypeDetailModel","conceptType","label","selflink","TIMEVERSION_FILTER_NAME","link","LinkModel","ConceptRelationModel","BaseModel","relation","entryDate","modelOptions","ConceptLinkModel","models","errors","concept","ConceptRelationCollection","_ConceptRelationCollection","ResourceCollection","relations","entryDate","modelOptions","getContextPathModularUI","relation","ConceptRelationModel","pos","arr","item","type","ContentTypeModel","ResourceModel","data","ContentLinkModel","BaseModel","data","entryDate","modelOptions","LinkCollection","models","_errors","href","model","ContentTypeModel","contentType","startURI","selfHref","Href","sourceId","encodedSection","TIMEVERSION_FILTER_NAME","selflink","getSetting","section","contentHref","items","SourceReferenceModel","BaseModel","sourceReference","entryDate","LinkCollection","selfhref","content","ContentLinkModel","createHashFromHref","SourceReferenceCollection","BaseCollection","sourceReference","entryDate","SourceReferenceModel","types","sourceRef","ConceptDetailModel","ResourceModel","modularuiResponse","ConceptRelationCollection","data","conceptTypeLink","relationsCollectionLinks","models","errors","conceptTypeModel","model","ConceptTypeDetailModel","href","TIMEVERSION_FILTER_NAME","conceptType","labels","labelType","labelData","l","ids","label","properties","propertyType","setting","property","textFragments","configuredTextFragments","textFragment","textFragmentType","notConfiguredTextFragments","textfragment","keys","availableLocales","SourceReferenceCollection","sourceReferences","LANGUAGE_POSTFIX_LENGTH","availableLanguagesInSourceReferences","sourceReference","currentLanguagePostfix","availableLanguages","locale","lang","conceptTypeId","immerable","ErrorModel","immerable","id","defaultMessage","parameters","isClientConstraint","layouthint","LayoutHintCollection","ErrorCollectionType","ErrorCollection","BaseCollection","type","errorCollection","error","id","item","defaultMessage","parameters","layouthint","itemIdx","ErrorModel","errors","constraints","constraint","SubSectionModel","_SubSectionModel","BaseModel","data","entryDate","modelOptions","LinkCollection","retrieveText","subSection","hrefs","relatedConceptsLink","href","firstPart","createHashFromHref","sections","referredChilds","SectionModel","_SectionModel","BaseModel","data","entryDate","modelOptions","selflink","LinkModel","id","body","retrieveText","sections","section","_links","ContentLinkModel","childSection","subSection","SubSectionModel","createHashFromHref","referredChilds","immerable","AttributeContent","_AttributeContent","immerable","content","hasAllContentInData","headerLabel","headerDescription","label","description","element","contentElement","LayoutHintCollection","textfragment","retrieveText","section","SectionModel","propertyElement","labels","textFragmentElement","types","sectionType","referredSections","GenericConstraintModel","id","validateMethod","defaultMessage","parameters","useClientsideValidation","getBooleanSetting","value","ConstraintCollection","BaseCollection","id","validateMethod","defaultMessage","data","useClientsideValidation","getBooleanSetting","GenericConstraintModel","value","constraint","MandatoryConstraint","value","INVALID_LENGTH_ID","INVALID_LENGTH_BETWEEN_ID","INVALID_LENGTH_TOO_SHORT_ID","INVALID_LENGTH_TOO_LONG_ID","StringLengthConstraint","minLength","maxLength","value","BaseAttributeModel","BaseModel","ConstraintCollection","getBooleanSetting","data","contributions","modelOptions","DateUtil","LinkCollection","MANDATORY","DISABLED","message","errorCollection","ErrorCollection","IllegalArgumentException","parentKey","label","placeholder","isEditable","isHidden","downloadLink","models","_errors","conceptHref","concept","model","ConceptDetailModel","conceptLink","TIMEVERSION_FILTER_NAME","date","hasAllContentInData","hasContentConfiguration","AttributeContent","contentConfiguration","hasQuestionConfig","hasEndResultConfig","hasIntermediateResultConfig","alignmentHints","alignment","rules","attributes","lastModification","timestamp","value","initvalue","inputvalue","mandatory","readonly","disabled","isResult","isValid","constraints","MandatoryConstraint","StringLengthConstraint","enabled","previouslyValidatedValue","collection","error","id","_receivedAttribute","defaultMessage","parameters","params","paramKey","paramValue","errors","oldAttribute","otherAttribute","immerable","import_lodash","import_isPlainObject","import_has","CompositeAttributeChildCollection","_CompositeAttributeChildCollection","ResourceCollection","data","contributions","modelOptions","compositeChildCollection","contribution","key","attributeData","attr","attributeContribution","attribute","AttributeFactory","childData","child","ErrorCollection","childrenObject","childrenArray","collection","children","prefix","errors","attributeErrors","error","enabled","BaseAttributeModel","CompositeAttributeModel","ATTRIBUTE_TYPE","FILTER_TYPE","OPTION_MODE","CompositeAttributeModel","_CompositeAttributeModel","BaseAttributeModel","data","contributions","modelOptions","CompositeAttributeChildCollection","models","errors","children","child","constraints","ConstraintCollection","enabled","value","attribute","key","oldAttribute","withChildAttribute","changedAttribute","IllegalArgumentException","otherAttribute","otherChild","childrenAreOptional","readonly","values","val","isResult","contentConfiguration","AttributeCollection","ResourceCollection","data","contributions","modelOptions","contribution","key","contributionValue","attribute","AttributeFactory","has","attributes","attr","CompositeAttributeModel","hints","layoutHint","ChoiceAttributeModel","oldAttribute","newAttribute","index","date","error","elementid","ConfigurationException","errors","attributeErrors","compositeChildErrors","elementId","contentConfiguration","validationData","attributesFormData","attributeFormData","ChoiceAttributeOptionModel","_ChoiceAttributeOptionModel","BaseModel","selectedValues","option","modelOptions","LinkCollection","listitem","initialLinks","models","errors","conceptHref","concept","model","ConceptDetailModel","code","contributions","data","AttributeCollection","attributeCollection","contributionsLabel","title","TITLE","contentConfiguration","hasAllContentInData","ChoiceAttributeOptionCollection","children","AttributeContent","selected","links","date","conceptLink","TIMEVERSION_FILTER_NAME","level","withOption","ChoiceAttributeOptionCollection","_ChoiceAttributeOptionCollection","ResourceCollection","modelOptions","getContextPathModularUI","sortOptions","option","data","contributions","collection","value","a","b","selectedOptions","code","options","foundOption","selectedValues","optionContributions","optionCode","optionType","children","optionDynamicschema","defaultLabel","label","optionValue","optionModel","ChoiceAttributeOptionModel","action","date","headers","child","ListHeaderModel","withOptions","addNotExistingOptions","removeNotExistingOptions","newCollection","withOption","opt","callbackfn","thisArg","optionIndex","collectionArray","result","CHOICETYPE","ChoiceAttributeModel","_ChoiceAttributeModel","BaseAttributeModel","attribute","attributeContributions","modelOptions","ChoiceAttributeOptionCollection","SORT_OPTIONS","contributions","type","optionMode","hasLookupLink","links","models","errors","conceptLinkHref","model","ConceptDetailModel","date","option","initvalue","code","opt","hint","oldAttribute","addNotExistingOptions","removeNotExistingOptions","value","values","val","ChoiceAttributeOptionModel","otherAttribute","CompositeAttributeModel","otherValue","receivedAttribute","hasContentConfiguration","optionElementConfig","optionElement","RENDER_SECTION_LABEL","ContentConfigurationElements","error","id","message","properties","layouthint","ANSWER_OPTION_KEY","optionKey","foundOption","BooleanAttributeModel","_BooleanAttributeModel","BaseAttributeModel","data","contributions","modelOptions","DateUtil","ChoiceAttributeOptionCollection","date","hint","hasContentConfiguration","optionElementConfig","optionElement","RENDER_SECTION_LABEL","ContentConfigurationElements","option","initvalue","selected","code","oldAttribute","value","values","val","ChoiceAttributeOptionModel","otherAttribute","CaptchaAttributeModel","BaseAttributeModel","contributions","value","_otherAttribute","answer","INEXACT_DATE_ID","OUT_OF_RANGE_ID","BELOW_MINIMUM_ID","ABOVE_MAXIMUM_ID","DateBoundaryConstraint","type","minDate","maxDate","format","value","IllegalStateException","TimeUtil","TimestampUtil","DateTimeUtil","DateUtil","DateTimeDateFormatConstraint","format","formatLabel","value","DateUtil","DatetimeFormatConstraint","type","format","formatLabel","DATETIME_OFFSET_FORMAT","TimestampUtil","DateTimeUtil","value","isIncludeTimeOffsetInDateTimes","DateTimeTimeFormatConstraint","format","formatLabel","value","TimeUtil","DatetimeAttributeModel","_DatetimeAttributeModel","BaseAttributeModel","attribute","attributeContributions","modelOptions","contributions","TimeUtil","TimestampUtil","DateTimeUtil","DateUtil","value","timeValue","isIncludeTimeOffsetInDateTimes","oldOffset","DATETIME_OFFSET_FORMAT","newOffset","formattedValue","initValue","format","dateEraChars","timeOffsetChars","inputFormat","isInQuotes","keep","i","prevChar","nextChar","char","formatLabel","timeFormatParts","timeFormat","ISO_DATE_FORMAT","error","id","message","properties","layouthint","DateTimeDateFormatConstraint","DateTimeTimeFormatConstraint","DatetimeFormatConstraint","constraints","ConstraintCollection","DateBoundaryConstraint","otherAttribute","otherValue","inputValue","HelptextAttributeModel","BaseAttributeModel","contributions","message","contributionText","_value","_otherAttribute","LabelAttributeModel","BaseAttributeModel","contributions","_value","_otherAttribute","immerable","BaseLayoutHintRule","immerable","_attribute","_hint","IllegalStateException","EQUALS","INCLUDES","NOT_EQUALS","NOT_INCLUDES","NOT_IS_EMPTY","IS_EMPTY","SHOW","HIDE","DependentAttribute","_DependentAttribute","BaseLayoutHintRule","hint","DEPENDENT_ATTRIBUTE","rule","OPERATORS","regex","DEPENDENT_ATTRIBUTE_CONTROL","isEmpyNotIsEmptRegex","result","ConfigurationException","action","control","operator","options","option","controlAttribute","selected","attributes","attribute","FileExtensionConstraint","filetypeConstraints","filetypeConstraint","filesize","MAX_TOTAL_FILE_SIZE_ID","MAX_FILE_SIZE_ID","FileSizeConstraint","filesizeConstraint","UNCHANGED","UploadAttributeModel","_UploadAttributeModel","BaseAttributeModel","contributions","initialTotalFileSize","maxTotalFileSize","uploadMaxFileSize","accumulatedFileSize","fileName","file","mimeTypes","mimeType","extension","constraints","ConstraintCollection","FileExtensionConstraint","FileSizeConstraint","files","value","_otherAttribute","oldAttribute","RemainingTotalUploadSize","_RemainingTotalUploadSize","BaseLayoutHintRule","attribute","attributes","initialTotalFileSizeAttributes","INITIAL_TOTAL_FILESIZE","maxTotalFileSizeAttributes","MAX_TOTAL_FILESIZE","initialTotalFileSize","maxTotalFileSize","UploadAttributeModel","layoutHintRules","DependentAttribute","RemainingTotalUploadSize","addLayoutHintRule","rule","updateLayoutHintRules","updater","newRules","IllegalReturnException","LayoutHintRuleCollection","_LayoutHintRuleCollection","BaseCollection","attribute","rules","hint","attributes","BSNConstraint","bsn","bsnNumber","bsnLength","pos","result","i","digit","value","IBAN","IBANConstraint","value","RegexConstraint","regexConstraint","value","StringAttributeModel","_StringAttributeModel","BaseAttributeModel","contributions","value","constraints","ConstraintCollection","BSNConstraint","IBANConstraint","RegexConstraint","groups","noFormat","otherAttribute","MemoAttributeModel","StringAttributeModel","contributions","import_isPlainObject","INEXACT_NUMBER_ID","OUT_OF_RANGE_ID","BELOW_MINIMUM_ID","ABOVE_MAXIMUM_ID","NumberBoundaryConstraint","minNumber","maxNumber","groupingSeparator","decimalSeparator","format","NumberUtil","value","parsedNumber","INVALID_INTEGER_ID","NumberFormatConstraint","groupingSeparator","decimalSeparator","format","DecimalFormat","value","NumberUtil","numberOfDigits","parsedNumber","DEFAULT_GROUPING_SIZE","NumberGroupingConstraint","groupingSeparator","decimalSeparator","format","fromFormat","DecimalFormat","value","absStringValue","integer","groups","group","NumberAttributeModel","_NumberAttributeModel","BaseAttributeModel","contributions","value","format","constraints","ConstraintCollection","NumberFormatConstraint","NumberGroupingConstraint","NumberBoundaryConstraint","NumberUtil","isPlainObject","outputNumber","otherAttribute","INITIAL_TOTAL_FILESIZE","MAX_TOTAL_FILESIZE","CASEVIEW_LINK","isHidden","MoneyAttributeModel","NumberAttributeModel","contributions","PasswordConfirmConstraint","otherPasswordValue","otherPasswordLabel","value","PasswordLowerAndUpperCaseConstraint","value","PasswordMinNumericCharactersConstraint","minNumeric","value","PasswordMinSpecialCharactersConstraint","minSpecial","value","PasswordThreeConsecutiveCharactersNotAllowedConstraint","maxSequence","value","char","i","sequence","PasswordAttributeModel","StringAttributeModel","contributions","value","constraints","ConstraintCollection","PasswordConfirmConstraint","PasswordLowerAndUpperCaseConstraint","PasswordThreeConsecutiveCharactersNotAllowedConstraint","PasswordMinNumericCharactersConstraint","PasswordMinSpecialCharactersConstraint","regexConstraint","RegexConstraint","CONFIRM_PASSWORD","isConfirmPassword","confirmValue","otherLabel","MandatoryRangeConstraint","type","start","end","RangeConstraint","startAttribute","endAttribute","id","inclusivePart","TimeUtil","DateUtil","TimestampUtil","DateTimeUtil","startValue","endValue","NumberUtil","RangeAttributeModel","_RangeAttributeModel","BaseAttributeModel","data","contributions","modelOptions","models","errors","constraints","ConstraintCollection","enabled","value","RangeConstraint","MandatoryRangeConstraint","oldAttribute","changedAttribute","IllegalArgumentException","otherAttribute","readonly","isResult","contentConfiguration","index","childContributions","key","attribute","AttributeFactory","childrenAreOptional","XMLConstraint","value","oParser","XMLAttributeModel","StringAttributeModel","contributions","constraints","ConstraintCollection","XMLConstraint","AttributeFactory","ChoiceAttributeModel","BooleanAttributeModel","HelptextAttributeModel","LabelAttributeModel","XMLAttributeModel","MemoAttributeModel","StringAttributeModel","DatetimeAttributeModel","MoneyAttributeModel","NumberAttributeModel","PasswordAttributeModel","UploadAttributeModel","CompositeAttributeModel","RangeAttributeModel","CaptchaAttributeModel","key","data","contributions","modelOptions","Model","children","attributeData","AttributeDataMapper","attribute","LayoutHintRuleCollection","model","_AttributeDataMapper","childrenKeys","attr","value","option","dynamicschema","dynamicschemaId","attrDS","pickedContent","child","childKey","isComposite","childChildren","keyObject","values","childData","content","parentKey","element","isPlainObject","parentData","dataContent","ListHeaderModel","immerable","header","sorting","headerKey","attribute","AttributeFactory","sortOption","LayoutHintCollection","alignment","listHeader","import_has","ActionModel","_ActionModel","BaseModel","data","contributions","modelOptions","name","href","label","type","origin","contextPath","fieldsData","fieldsContributions","AttributeCollection","Href","method","HTTP_METHODS","CREATE_ACTION","UPDATE_ACTION","DELETE_ACTION","fieldCollection","attribute","value","key","has","d","c","ProcessStatusSettingsModel","icon","ActionCollection","_ActionCollection","BaseCollection","data","contributions","modelOptions","actionModels","action","contribution","c","ActionModel","key","newCollection","type","hints","enabledRoutes","path","UserModel","ResourceModel","data","contributions","UserServicesModel","ResourceModel","data","userLink","models","_errors","model","UserModel","user","hasUser","cacheInstance","mustChangePassword","ApplicationModel","ResourceModel","data","LinkModel","userServices","userService","NotAllowedUriException","models","_errors","model","UserServicesModel","authenticationTypes","DEFAULT_AUTHENTICATION_TYPE","a","b","import_lodash","AttributeSetModel","_AttributeSetModel","BaseModel","key","data","contributions","modelOptions","attributeContributions","contribution","contributionKey","AttributeCollection","collection","dataObject","index","objects","childAttributeSets","attributeData","DetailModel","_DetailModel","ResourceModel","modularuiResponse","data","resourceType","endsWithDetailPanel","otherPanel","models","errors","id","attributeContributions","contribution","key","AttributeCollection","collection","attribute","TITLE","metadata","metadataContributions","value","actionsData","actionsContributions","ActionCollection","actionCollection","model","clonedModel","TaskGroupCollection","BaseCollection","taskgroup","TaskGroupModel","_TaskGroupModel","ResourceModel","response","actionsData","actionsContributions","ActionCollection","selfHref","key","data","contributions","modelOptions","taskgroup","ModularUIResponse","CaseViewModel","DetailModel","caseviewData","data","models","errors","taskGroupModels","model","TaskGroupModel","TITLE","content","contributions","selfLink","IllegalStateException","taskgroups","taskgroupData","name","taskgroupContributions","taskgroupContribution","taskgroup","TaskGroupCollection","BaseFilterModel","BaseModel","data","contributions","modelOptions","PARAMETER_SEPARATOR","context","key","type","param","attributeType","attributeContributions","childType","child","AttributeFactory","_attribute","value","AssignmentFilterModel","BaseFilterModel","data","contributions","modelOptions","key","assignmentTypeData","IllegalStateException","dynamicschema","assignmentTypeContributions","param","userData","userContributions","attribute","value","ConceptIndexFilterModel","BaseFilterModel","data","contributions","modelOptions","selectedValues","option","RangeFilterModel","BaseFilterModel","attribute","value","RangeAttributeModel","StringFilterModel","BaseFilterModel","data","contributions","modelOptions","value","_attribute","values","val","outputValues","formattedValue","FilterFactory","filterKey","data","contributions","modelOptions","type","ConceptIndexFilterModel","RangeFilterModel","AssignmentFilterModel","StringFilterModel","BaseFilterModel","filter","contextId","filterContext","context","FilterCollection","BaseCollection","data","contributions","modelOptions","collection","filterContribution","filterKey","filterDataByKey","filterContributionByKey","filter","FilterFactory","key","rangeAttribute","RangeAttributeModel","start","end","RangeFilterModel","AssignmentFilterModel","attribute","value","filterToUpdate","ConceptLinkCollection","ResourceCollection","ConceptIndexModel","ResourceModel","modularuiResponse","FilterCollection","ConceptLinkCollection","concept","ConceptLinkModel","data","resourceType","models","errors","href","filter","param","timeversionFilter","TIMEVERSION_FILTER_NAME","DateUtil","itemCollection","ContentLinkCollection","ResourceCollection","ContentIndexModel","ResourceModel","modularuiResponse","FilterCollection","ContentLinkCollection","content","ContentLinkModel","data","models","errors","href","filter","param","filterAttribute","ChoiceAttributeModel","firstChar","option","Href","ContentModel","ResourceModel","response","FilterCollection","SectionModel","data","contentTypeLink","models","_errors","model","ContentTypeModel","entryDateFilter","TIMEVERSION_FILTER_NAME","contentType","sections","hrefs","subSection","relatedConceptsLink","href","ContentTOCModel","ResourceModel","modularuiResponse","FilterCollection","data","contentTypeLink","models","_errors","model","ContentTypeModel","href","Href","filter","param","relatedConceptsLink","ContentLinkModel","items","item","link","sections","section","SectionModel","category","contentType","TIMEVERSION_FILTER_NAME","ContentConfigurationResults","configuration","LayoutHintCollection","ContentConfigurationElements","description","hint","ContentConfigurationEndResults","configuration","configElement","key","ContentConfigurationResults","ContentConfigurationQuestions","configuration","ContentConfigurationElements","immerable","ContentConfiguration","immerable","configuration","ContentConfigurationQuestions","ContentConfigurationResults","ContentConfigurationEndResults","attributeKey","item","immerable","ErrorResponse","immerable","error","connectKey","modelOptions","key","getContextPathModularUI","redirectHref","Href","LayoutHintCollection","hasUnauthorizedStatus","hasUnauthorizedErrorId","hasLoginAction","properties","import_lodash","FormObjectModel","_FormObjectModel","BaseModel","object","objectContributions","modelOptions","AttributeCollection","ContentConfiguration","ErrorCollection","referenceData","formObjectModel","IllegalArgumentException","withRepeatIndex","objectContainsOneOfTheAttributes","attribute","key","elements","dataResults","result","dataElementIds","element","contributions","attributeKey","attributesContributions","attributeContributions","dataElementId","models","errors","repeatIndex","message","attributeCollection","oldObject","mergeWithAttribute","value","attributeToUpdate","CompositeAttributeModel","timestamp","error","dynamicValidationsLoaded","attributeErrors","LayoutHintCollection","missing","anchor","data","validationData","import_lodash","import_flattenDeep","deepmerge","FormModel","_FormModel","ResourceModel","getBooleanSetting","ErrorCollection","ParameterCollection","modularuiResponse","CREATE_ACTION","UPDATE_ACTION","DELETE_ACTION","data","endResultChildLinks","flattenDeep","endResultFormObject","models","errors","buttonType","formObjectButtonLabels","formObjects","elements","dynamicschema","element","item","dsElements","anchor","resultObject","result","missingAnchors","firstAnchor","objectId","objectContributions","FormObjectModel","formObjectModel","emptyFormObject","formObject","IllegalArgumentException","key","hint","missingObjectIds","endResultAnchors","otherProps","endResult","endResultContribution","o","endResultKeys","objectKey","endResultFormObjects","endResultFormObjectKeys","object","error","errorCollection","commit","isFinished","isComplete","Href","resultdata","resultContributions","resultDataKeys","successData","resultDataKey","d","c","AttributeSetModel","parameters","params","par","Parameter","filteredParameters","parameter","selfhref","getSetting","tokens","lastUpdate","validOnly","validationData","attr","formdata","objectFormData","hasNonNullValues","value","existingObjectIndex","obj","deepmerge","withConcurrencyToken","enabled","currentFormObjectKey","oldCurrentFormObject","completedFormObjectKeys","formObjectKey","currentObjectIndex","isLastObject","receivedForm","receivedFormData","hasMissing","hasErrors","success","receivedErrorAnchors","receivedError","attribute","receivedAttribute","receivedCurrentFormObject","mergePreviouslyEnteredObjects","previouslyEnteredFormObjects","previouslyEnteredFormObject","mergedObject","newObject","oldObject","mergedFormObject","findMethod","import_lodash","ListDetailModel","DetailModel","modularUIResponse","ContentConfiguration","listitemPanels","links","models","errors","data","resourcetype","listitem","configuration","resultSectionContributions","resultSectionData","resultsData","resultsContributions","child","results","AttributeFactory","CompositeAttributeModel","givenAnswersData","givenAnswersContributions","filteredContributions","givenAnswers","eventdata","eventdataData","dynamicschema","attributeset","attributesetKey","attributesetContributions","attributesetData","item","index","key","AttributeSetModel","immerable","GroupModel","group","context","allContexts","modelOptions","AttributeCollection","GroupingModel","key","attribute","immerable","data","contexts","dynamicschema","d","groupType","prefix","groupByKey","ListHref","_ListHref","Href","href","list","isPrefixed","page","sort","pagesize","filters","filter","param","ListItemModel","_ListItemModel","DetailModel","key","data","contributions","modelOptions","listitemInput","ModularUIResponse","option","item","selflink","Href","caseviewLinkAttribute","CASEVIEW_LINK","caseviewLinkKey","caseviewLink","actionType","additionalDetailLinks","link","ListItemCollection","_ListItemCollection","BaseCollection","list","_embedded","ConfigurationException","dynamicschema","collection","resultItem","key","listitemData","listitemContributions","ListItemModel","allRoutes","listItem","actions","ActionCollection","immerable","PagesizeModel","pagesize","pagesizeContributions","immerable","PagingModel","immerable","data","contributions","PagesizeModel","page","immerable","SORT_ORDER","SortOptionModel","immerable","key","label","group","attribute","selected","sortorder","listHref","listhref","ListHref","SortingModel","BaseCollection","contributions","labels","grouping","currentSort","sortAttributes","attributeKey","label","group","SortOptionModel","option","sortItem","key","direction","optionKey","IllegalArgumentException","sortOption","listHref","listhref","ListHref","ListModel","ResourceModel","modularuiResponse","ListItemCollection","data","resourceType","SHOW_ONE_RESULT_AS_DETAIL","listItem","listDetailLink","ListDetailModel","models","_errors","childModel","listItemCollection","detail","listitem","GroupingModel","HIDE_WHEN_EMPTY","id","decodedId","result","href","PagingModel","SortingModel","filterCollection","FilterCollection","ActionCollection","selfLink","ListHref","tempHeaders","results","key","attribute","listHeader","ListHeaderModel","tempHeader","CASEVIEW_LINK","sortingLabels","attributeKey","attributeLabel","actionType","resultTypes","resultType","link","panelLink","LookupOptionCollection","_LookupOptionCollection","ResourceCollection","data","contributions","modelOptions","collection","option","ChoiceAttributeOptionModel","LookupOptionsModel","ResourceModel","modularuiResponse","LookupOptionCollection","data","contributions","FilterCollection","ModelCategoryModel","modelCategory","ModelCategoryCollection","BaseCollection","modelCategories","modelCategory","ModelCategoryModel","ModelCatalogModel","ResourceModel","data","link","IllegalStateException","ModelCategoryCollection","GroupingPanelModel","ResourceModel","modularuiResponse","data","models","_errors","taskGroups","model","TaskGroupModel","contributions","taskgroups","taskgroupData","name","taskgroupContributions","taskgroupContribution","taskgroup","TaskGroupCollection","CaseSearchModel","ListModel","data","filter","TabModel","ResourceModel","modularuiResponse","ActionCollection","data","models","_errors","taskGroups","model","TaskGroupModel","contributions","taskgroups","taskgroupData","name","taskgroupContributions","taskgroupContribution","taskgroup","TaskGroupCollection","import_lodash","UserProfileModel","UserModel","modularuiResponse","ModularUIResponse","contributions","attributeContributions","contribution","key","AttributeCollection","import_lodash","RESOURCE_MODELS","ApplicationModel","TabModel","ListDetailModel","ListModel","GroupingPanelModel","CaseSearchModel","CaseViewModel","DetailModel","TaskGroupModel","FormModel","UserModel","UserProfileModel","UserServicesModel","ModelCatalogModel","ConceptIndexModel","ConceptDetailModel","ConceptTypeDetailModel","ContentIndexModel","ContentTOCModel","ContentModel","ContentTypeModel","LookupOptionsModel","resolveModel","response","availableModels","IllegalArgumentException","resourceTypeModel","resourceModel"]}
|