@beinformed/ui 1.58.4 → 1.59.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.
Files changed (60) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/esm/constants/Constants.js +10 -0
  3. package/esm/constants/Constants.js.map +1 -1
  4. package/esm/constants/Settings.js +5 -1
  5. package/esm/constants/Settings.js.map +1 -1
  6. package/esm/models/attributes/DatetimeAttributeModel.js +39 -4
  7. package/esm/models/attributes/DatetimeAttributeModel.js.map +1 -1
  8. package/esm/models/attributes/input-constraints/DatetimeFormatConstraint.js +31 -2
  9. package/esm/models/attributes/input-constraints/DatetimeFormatConstraint.js.map +1 -1
  10. package/esm/react-client/client.js +2 -1
  11. package/esm/react-client/client.js.map +1 -1
  12. package/esm/react-server/serverUtil.js +2 -1
  13. package/esm/react-server/serverUtil.js.map +1 -1
  14. package/esm/redux/actions/Preferences.js +15 -1
  15. package/esm/redux/actions/Preferences.js.map +1 -1
  16. package/esm/utils/datetime/DateTimeUtil.js +292 -94
  17. package/esm/utils/datetime/DateTimeUtil.js.map +1 -1
  18. package/lib/constants/Constants.js +11 -1
  19. package/lib/constants/Constants.js.flow +11 -0
  20. package/lib/constants/Constants.js.map +1 -1
  21. package/lib/constants/Settings.js +7 -2
  22. package/lib/constants/Settings.js.flow +6 -0
  23. package/lib/constants/Settings.js.map +1 -1
  24. package/lib/models/attributes/DatetimeAttributeModel.js +38 -3
  25. package/lib/models/attributes/DatetimeAttributeModel.js.flow +54 -4
  26. package/lib/models/attributes/DatetimeAttributeModel.js.map +1 -1
  27. package/lib/models/attributes/__tests__/DatetimeAttributeModel.spec.js.flow +9 -0
  28. package/lib/models/attributes/__tests__/DatetimeAttributeModel_offset.spec.js.flow +306 -0
  29. package/lib/models/attributes/input-constraints/DatetimeFormatConstraint.js +31 -2
  30. package/lib/models/attributes/input-constraints/DatetimeFormatConstraint.js.flow +42 -3
  31. package/lib/models/attributes/input-constraints/DatetimeFormatConstraint.js.map +1 -1
  32. package/lib/react-client/client.js +1 -0
  33. package/lib/react-client/client.js.flow +2 -0
  34. package/lib/react-client/client.js.map +1 -1
  35. package/lib/react-server/__tests__/serverUtil.spec.js.flow +12 -0
  36. package/lib/react-server/serverUtil.js +1 -0
  37. package/lib/react-server/serverUtil.js.flow +2 -0
  38. package/lib/react-server/serverUtil.js.map +1 -1
  39. package/lib/redux/actions/Preferences.js +17 -2
  40. package/lib/redux/actions/Preferences.js.flow +22 -0
  41. package/lib/redux/actions/Preferences.js.map +1 -1
  42. package/lib/redux/reducers/__tests__/ModelCatalogReducer.spec.js.flow +23 -0
  43. package/lib/utils/datetime/DateTimeUtil.js +292 -93
  44. package/lib/utils/datetime/DateTimeUtil.js.flow +482 -172
  45. package/lib/utils/datetime/DateTimeUtil.js.map +1 -1
  46. package/lib/utils/datetime/__tests__/DateTime.spec.js.flow +771 -483
  47. package/package.json +11 -9
  48. package/src/constants/Constants.js +11 -0
  49. package/src/constants/Settings.js +6 -0
  50. package/src/models/attributes/DatetimeAttributeModel.js +54 -4
  51. package/src/models/attributes/__tests__/DatetimeAttributeModel.spec.js +9 -0
  52. package/src/models/attributes/__tests__/DatetimeAttributeModel_offset.spec.js +306 -0
  53. package/src/models/attributes/input-constraints/DatetimeFormatConstraint.js +42 -3
  54. package/src/react-client/client.js +2 -0
  55. package/src/react-server/__tests__/serverUtil.spec.js +12 -0
  56. package/src/react-server/serverUtil.js +2 -0
  57. package/src/redux/actions/Preferences.js +22 -0
  58. package/src/redux/reducers/__tests__/ModelCatalogReducer.spec.js +23 -0
  59. package/src/utils/datetime/DateTimeUtil.js +482 -172
  60. package/src/utils/datetime/__tests__/DateTime.spec.js +771 -483
package/CHANGELOG.md CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4
4
 
5
+ ## [1.59.0](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.58.4...v1.59.0) (2024-12-06)
6
+
7
+
8
+ ### Features
9
+
10
+ * **constants:** add constant to indicate runtime is running on graalvm ([f43564b](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/f43564bc7b8ec97533bf726f93c8efe004a39e04))
11
+ * **offsets:** add support for offsets to datetime attribute ([293e35e](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/293e35e5ac6e84d74ed44e8d87eef3dcc55d92a5))
12
+ * **offsets:** add validation of offset in datetime and timestamp attribute ([d2777a0](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/d2777a04b706f6d5db6b900c9f0375858fda8c18))
13
+ * **timezones:** add offset in internal and formdata of date/time attribute ([e314f08](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/e314f08531610096b6306d1bdf6ebeaf918e0bc1))
14
+ * **timezones:** handle timezone preference ([b1d3a54](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/b1d3a54d03f97b755993309efa619d302ce87b53))
15
+ * **timezones:** handle timezone support in date/time utilities ([7f91342](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/7f9134264b07519b16bdd61bb8f5e4f68717e097))
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * **settings:** use correct boolean conversion ([b9650ef](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/b9650ef4fe22f9b99ebef076d0cb4976322655a6))
21
+
5
22
  ## [1.58.4](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.58.3...v1.58.4) (2024-11-26)
6
23
 
7
24
 
@@ -60,6 +60,10 @@ export const ISO_TIME_FORMAT = "HH:mm:ss";
60
60
  /**
61
61
  */
62
62
  export const ISO_TIMESTAMP_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS";
63
+ /**
64
+ * Offset format is appended to iso datetime and timestamp when isIncludeTimeOffsetInDateTimes = true
65
+ */
66
+ export const DATETIME_OFFSET_FORMAT = "xxx";
63
67
  /**
64
68
  * week starts on monday by default
65
69
  */
@@ -95,6 +99,11 @@ export const IS_SYNC = typeof dataFetcher !== "undefined";
95
99
  * @type {boolean}
96
100
  */
97
101
  export const IS_SERVER = IS_SYNC;
102
+ /**
103
+ * @type {boolean}
104
+ */
105
+ // $FlowExpectedError[cannot-resolve-name]
106
+ export const IS_GRAALJS = typeof Graal !== "undefined";
98
107
 
99
108
  /**
100
109
  * @type {{SUCCESS: string, ERROR: string, INFO: string, WARNING: string}}
@@ -155,6 +164,7 @@ export const ATTRIBUTE_WIDTH = {
155
164
  EXTRA_LARGE: "EXTRA_LARGE"
156
165
  };
157
166
  export const ALL_CONTENT_IN_DATA_SETTING = "hasAllContentInData";
167
+ export const INCLUDE_TIME_OFFSET = "isIncludeTimeOffsetInDateTimes";
158
168
  export const INTERNAL_LOGIN_TYPE = {
159
169
  JAAS: "JAAS",
160
170
  PAC4J_FORM: "PAC4J_FORM",
@@ -1 +1 @@
1
- {"version":3,"file":"Constants.js","names":["CONTENT_PATH","UPLOAD_PATH","CAPTCHA_PATH","CHANGEAVATAR_PATH","CHANGEPASSWORD_PATH","USERPROFILE_PATH","RESOURCE_PATH","PARAMETER_SEPARATOR","TIMEVERSION_FILTER_NAME","PARAMETER_OVERVIEW_VIEWTYPE","DEFAULT_UI_PARAMETERS","ISO_DATE_FORMAT","ISO_DATETIME_FORMAT","ISO_TIME_FORMAT","ISO_TIMESTAMP_FORMAT","DEFAULT_WEEK_STARTS_ON","DEFAULT_FIRST_WEEK_CONTAINS_DATE","KEYCODES","TAB","ENTER","ESCAPE","SPACE","PAGE_UP","PAGE_DOWN","ARROW_LEFT","ARROW_UP","ARROW_RIGHT","ARROW_DOWN","IS_SYNC","dataFetcher","IS_SERVER","NOTIFICATION_TYPES","SUCCESS","INFO","WARNING","ERROR","HTTP_METHODS","GET","POST","MODULARUI_STATUS","LOADING","FINISHED","AUTOSAVE_STATUS","START","INPUT_DEBOUNCE_TIMEOUT","VALIDATE_DEBOUNCE_TIMEOUT","ATTRIBUTE_WIDTH","EXTRA_SMALL","SMALL","MEDIUM","LARGE","EXTRA_LARGE","ALL_CONTENT_IN_DATA_SETTING","INTERNAL_LOGIN_TYPE","JAAS","PAC4J_FORM","PAC4J_BASIC","LOGIN_TYPE","LOGIN_PATH_SETTING","LOGIN_USERNAME_SETTING","LOGIN_PASSWORD_SETTING","LOGOUT_PATH_SETTING","DEFAULT_AUTHENTICATION_TYPE","name","authentication","isPrimary"],"sources":["../../src/constants/Constants.js"],"sourcesContent":["// @flow\n/**\n * path to content service\n */\nexport const CONTENT_PATH = `/content`;\n\n/**\n * Upload Path\n */\nexport const UPLOAD_PATH = `/uploadFile`;\n\n/**\n * Captcha Path\n */\nexport const CAPTCHA_PATH = `/captchaServices`;\n\n/**\n * Path to change avatar page / component\n */\nexport const CHANGEAVATAR_PATH = \"/change-avatar\";\n\n/**\n * Path to change password page / component\n */\nexport const CHANGEPASSWORD_PATH = \"/change-password\";\n\n/**\n * Path to user profile page / component\n */\nexport const USERPROFILE_PATH = \"/user\";\n\n/**\n * Path to resources in the Be Informed repository\n */\nexport const RESOURCE_PATH = \"/resource\";\n\n/**\n * Separator for parameters of a list, makes it possible to render multiple lists on a page in a non-js environment\n */\nexport const PARAMETER_SEPARATOR = \"~\";\n\n/**\n * Timeversion filter name\n */\nexport const TIMEVERSION_FILTER_NAME = \"entryDate\";\n\nconst PARAMETER_OVERVIEW_VIEWTYPE = \"viewType\";\n/**\n * Parameter name for the viewtype toggle\n */\nexport const DEFAULT_UI_PARAMETERS: Array<string> = [\n PARAMETER_OVERVIEW_VIEWTYPE,\n];\n\n/**\n */\nexport const ISO_DATE_FORMAT = \"yyyy-MM-dd\";\n/**\n */\nexport const ISO_DATETIME_FORMAT = \"yyyy-MM-dd'T'HH:mm:ss\";\n/**\n */\nexport const ISO_TIME_FORMAT = \"HH:mm:ss\";\n/**\n */\nexport const ISO_TIMESTAMP_FORMAT = \"yyyy-MM-dd'T'HH:mm:ss.SSS\";\n/**\n * week starts on monday by default\n */\nexport const DEFAULT_WEEK_STARTS_ON = 1;\n\n/**\n * first week indicated by the 1st of january\n */\nexport const DEFAULT_FIRST_WEEK_CONTAINS_DATE = 1;\n\n/**\n * Key codes\n * @type {{SPACE: number, PAGE_DOWN: number, TAB: number, ARROW_RIGHT: number, ARROW_DOWN: number, ENTER: number, ARROW_UP: number, ARROW_LEFT: number, PAGE_UP: number, ESCAPE: number}}\n */\nexport const KEYCODES = {\n TAB: 9,\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32,\n PAGE_UP: 33,\n PAGE_DOWN: 34,\n ARROW_LEFT: 37,\n ARROW_UP: 38,\n ARROW_RIGHT: 39,\n ARROW_DOWN: 40,\n};\n\n/**\n * @type {boolean}\n */\nexport const IS_SYNC = typeof dataFetcher !== \"undefined\";\n/**\n * @type {boolean}\n */\nexport const IS_SERVER = IS_SYNC;\n\n/**\n * @type {{SUCCESS: string, ERROR: string, INFO: string, WARNING: string}}\n */\nexport const NOTIFICATION_TYPES = {\n SUCCESS: \"SUCCESS\",\n INFO: \"INFO\",\n WARNING: \"WARNING\",\n ERROR: \"ERROR\",\n};\n\n/**\n * SUPPORTED HTTP METHODS\n * @type {{POST: string, GET: string}}\n */\nexport const HTTP_METHODS = {\n GET: \"GET\",\n POST: \"POST\",\n};\n\n/**\n * POSSIBLE MODULARUI STATUSSES\n * @type {{LOADING: string, ERROR: string, FINISHED: string}}\n */\nexport const MODULARUI_STATUS = {\n LOADING: \"LOADING\",\n FINISHED: \"FINISHED\",\n ERROR: \"ERROR\",\n};\n\n/**\n * POSSIBLE AUTOSAVE STATUSSES\n * @type {{START: string, FINISHED: string}}\n */\nexport const AUTOSAVE_STATUS = {\n START: \"START\",\n FINISHED: \"FINISHED\",\n};\n\n/**\n * DEBOUNCE INPUT TIMEOUT\n */\nexport const INPUT_DEBOUNCE_TIMEOUT = 100;\n\n/**\n * DEBOUNCE VALIDATION TIMEOUT\n */\nexport const VALIDATE_DEBOUNCE_TIMEOUT = 500;\n\n/**\n * ATTRIBUTE WIDTH\n */\nexport const ATTRIBUTE_WIDTH = {\n EXTRA_SMALL: \"EXTRA_SMALL\",\n SMALL: \"SMALL\",\n MEDIUM: \"MEDIUM\",\n LARGE: \"LARGE\",\n EXTRA_LARGE: \"EXTRA_LARGE\",\n};\n\nexport const ALL_CONTENT_IN_DATA_SETTING = \"hasAllContentInData\";\n\nexport const INTERNAL_LOGIN_TYPE = {\n JAAS: \"JAAS\",\n PAC4J_FORM: \"PAC4J_FORM\",\n PAC4J_BASIC: \"PAC4J_BASIC\",\n};\nexport const LOGIN_TYPE = \"security.clients\";\nexport const LOGIN_PATH_SETTING = \"FormClient.login_url\";\nexport const LOGIN_USERNAME_SETTING = \"FormClient.username_field_name\";\nexport const LOGIN_PASSWORD_SETTING = \"FormClient.password_field_name\";\nexport const LOGOUT_PATH_SETTING = \"FormClient.logout_url\";\n\nexport const DEFAULT_AUTHENTICATION_TYPE = {\n name: \"Form based authentication\",\n authentication: \"DefaultFormClient\",\n isPrimary: true,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Constants.js","names":["CONTENT_PATH","UPLOAD_PATH","CAPTCHA_PATH","CHANGEAVATAR_PATH","CHANGEPASSWORD_PATH","USERPROFILE_PATH","RESOURCE_PATH","PARAMETER_SEPARATOR","TIMEVERSION_FILTER_NAME","PARAMETER_OVERVIEW_VIEWTYPE","DEFAULT_UI_PARAMETERS","ISO_DATE_FORMAT","ISO_DATETIME_FORMAT","ISO_TIME_FORMAT","ISO_TIMESTAMP_FORMAT","DATETIME_OFFSET_FORMAT","DEFAULT_WEEK_STARTS_ON","DEFAULT_FIRST_WEEK_CONTAINS_DATE","KEYCODES","TAB","ENTER","ESCAPE","SPACE","PAGE_UP","PAGE_DOWN","ARROW_LEFT","ARROW_UP","ARROW_RIGHT","ARROW_DOWN","IS_SYNC","dataFetcher","IS_SERVER","IS_GRAALJS","Graal","NOTIFICATION_TYPES","SUCCESS","INFO","WARNING","ERROR","HTTP_METHODS","GET","POST","MODULARUI_STATUS","LOADING","FINISHED","AUTOSAVE_STATUS","START","INPUT_DEBOUNCE_TIMEOUT","VALIDATE_DEBOUNCE_TIMEOUT","ATTRIBUTE_WIDTH","EXTRA_SMALL","SMALL","MEDIUM","LARGE","EXTRA_LARGE","ALL_CONTENT_IN_DATA_SETTING","INCLUDE_TIME_OFFSET","INTERNAL_LOGIN_TYPE","JAAS","PAC4J_FORM","PAC4J_BASIC","LOGIN_TYPE","LOGIN_PATH_SETTING","LOGIN_USERNAME_SETTING","LOGIN_PASSWORD_SETTING","LOGOUT_PATH_SETTING","DEFAULT_AUTHENTICATION_TYPE","name","authentication","isPrimary"],"sources":["../../src/constants/Constants.js"],"sourcesContent":["// @flow\n/**\n * path to content service\n */\nexport const CONTENT_PATH = `/content`;\n\n/**\n * Upload Path\n */\nexport const UPLOAD_PATH = `/uploadFile`;\n\n/**\n * Captcha Path\n */\nexport const CAPTCHA_PATH = `/captchaServices`;\n\n/**\n * Path to change avatar page / component\n */\nexport const CHANGEAVATAR_PATH = \"/change-avatar\";\n\n/**\n * Path to change password page / component\n */\nexport const CHANGEPASSWORD_PATH = \"/change-password\";\n\n/**\n * Path to user profile page / component\n */\nexport const USERPROFILE_PATH = \"/user\";\n\n/**\n * Path to resources in the Be Informed repository\n */\nexport const RESOURCE_PATH = \"/resource\";\n\n/**\n * Separator for parameters of a list, makes it possible to render multiple lists on a page in a non-js environment\n */\nexport const PARAMETER_SEPARATOR = \"~\";\n\n/**\n * Timeversion filter name\n */\nexport const TIMEVERSION_FILTER_NAME = \"entryDate\";\n\nconst PARAMETER_OVERVIEW_VIEWTYPE = \"viewType\";\n/**\n * Parameter name for the viewtype toggle\n */\nexport const DEFAULT_UI_PARAMETERS: Array<string> = [\n PARAMETER_OVERVIEW_VIEWTYPE,\n];\n\n/**\n */\nexport const ISO_DATE_FORMAT = \"yyyy-MM-dd\";\n/**\n */\nexport const ISO_DATETIME_FORMAT = \"yyyy-MM-dd'T'HH:mm:ss\";\n/**\n */\nexport const ISO_TIME_FORMAT = \"HH:mm:ss\";\n/**\n */\nexport const ISO_TIMESTAMP_FORMAT = \"yyyy-MM-dd'T'HH:mm:ss.SSS\";\n/**\n * Offset format is appended to iso datetime and timestamp when isIncludeTimeOffsetInDateTimes = true\n */\nexport const DATETIME_OFFSET_FORMAT = \"xxx\";\n/**\n * week starts on monday by default\n */\nexport const DEFAULT_WEEK_STARTS_ON = 1;\n\n/**\n * first week indicated by the 1st of january\n */\nexport const DEFAULT_FIRST_WEEK_CONTAINS_DATE = 1;\n\n/**\n * Key codes\n * @type {{SPACE: number, PAGE_DOWN: number, TAB: number, ARROW_RIGHT: number, ARROW_DOWN: number, ENTER: number, ARROW_UP: number, ARROW_LEFT: number, PAGE_UP: number, ESCAPE: number}}\n */\nexport const KEYCODES = {\n TAB: 9,\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32,\n PAGE_UP: 33,\n PAGE_DOWN: 34,\n ARROW_LEFT: 37,\n ARROW_UP: 38,\n ARROW_RIGHT: 39,\n ARROW_DOWN: 40,\n};\n\n/**\n * @type {boolean}\n */\nexport const IS_SYNC = typeof dataFetcher !== \"undefined\";\n/**\n * @type {boolean}\n */\nexport const IS_SERVER = IS_SYNC;\n/**\n * @type {boolean}\n */\n// $FlowExpectedError[cannot-resolve-name]\nexport const IS_GRAALJS = typeof Graal !== \"undefined\";\n\n/**\n * @type {{SUCCESS: string, ERROR: string, INFO: string, WARNING: string}}\n */\nexport const NOTIFICATION_TYPES = {\n SUCCESS: \"SUCCESS\",\n INFO: \"INFO\",\n WARNING: \"WARNING\",\n ERROR: \"ERROR\",\n};\n\n/**\n * SUPPORTED HTTP METHODS\n * @type {{POST: string, GET: string}}\n */\nexport const HTTP_METHODS = {\n GET: \"GET\",\n POST: \"POST\",\n};\n\n/**\n * POSSIBLE MODULARUI STATUSSES\n * @type {{LOADING: string, ERROR: string, FINISHED: string}}\n */\nexport const MODULARUI_STATUS = {\n LOADING: \"LOADING\",\n FINISHED: \"FINISHED\",\n ERROR: \"ERROR\",\n};\n\n/**\n * POSSIBLE AUTOSAVE STATUSSES\n * @type {{START: string, FINISHED: string}}\n */\nexport const AUTOSAVE_STATUS = {\n START: \"START\",\n FINISHED: \"FINISHED\",\n};\n\n/**\n * DEBOUNCE INPUT TIMEOUT\n */\nexport const INPUT_DEBOUNCE_TIMEOUT = 100;\n\n/**\n * DEBOUNCE VALIDATION TIMEOUT\n */\nexport const VALIDATE_DEBOUNCE_TIMEOUT = 500;\n\n/**\n * ATTRIBUTE WIDTH\n */\nexport const ATTRIBUTE_WIDTH = {\n EXTRA_SMALL: \"EXTRA_SMALL\",\n SMALL: \"SMALL\",\n MEDIUM: \"MEDIUM\",\n LARGE: \"LARGE\",\n EXTRA_LARGE: \"EXTRA_LARGE\",\n};\n\nexport const ALL_CONTENT_IN_DATA_SETTING = \"hasAllContentInData\";\n\nexport const INCLUDE_TIME_OFFSET = \"isIncludeTimeOffsetInDateTimes\";\n\nexport const INTERNAL_LOGIN_TYPE = {\n JAAS: \"JAAS\",\n PAC4J_FORM: \"PAC4J_FORM\",\n PAC4J_BASIC: \"PAC4J_BASIC\",\n};\nexport const LOGIN_TYPE = \"security.clients\";\nexport const LOGIN_PATH_SETTING = \"FormClient.login_url\";\nexport const LOGIN_USERNAME_SETTING = \"FormClient.username_field_name\";\nexport const LOGIN_PASSWORD_SETTING = \"FormClient.password_field_name\";\nexport const LOGOUT_PATH_SETTING = \"FormClient.logout_url\";\n\nexport const DEFAULT_AUTHENTICATION_TYPE = {\n name: \"Form based authentication\",\n authentication: \"DefaultFormClient\",\n isPrimary: true,\n};\n"],"mappings":"AACA;AACA;AACA;AACA,OAAO,MAAMA,YAAY,GAAG,UAAU;;AAEtC;AACA;AACA;AACA,OAAO,MAAMC,WAAW,GAAG,aAAa;;AAExC;AACA;AACA;AACA,OAAO,MAAMC,YAAY,GAAG,kBAAkB;;AAE9C;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,GAAG,gBAAgB;;AAEjD;AACA;AACA;AACA,OAAO,MAAMC,mBAAmB,GAAG,kBAAkB;;AAErD;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,GAAG,OAAO;;AAEvC;AACA;AACA;AACA,OAAO,MAAMC,aAAa,GAAG,WAAW;;AAExC;AACA;AACA;AACA,OAAO,MAAMC,mBAAmB,GAAG,GAAG;;AAEtC;AACA;AACA;AACA,OAAO,MAAMC,uBAAuB,GAAG,WAAW;AAElD,MAAMC,2BAA2B,GAAG,UAAU;AAC9C;AACA;AACA;AACA,OAAO,MAAMC,qBAAoC,GAAG,CAClDD,2BAA2B,CAC5B;;AAED;AACA;AACA,OAAO,MAAME,eAAe,GAAG,YAAY;AAC3C;AACA;AACA,OAAO,MAAMC,mBAAmB,GAAG,uBAAuB;AAC1D;AACA;AACA,OAAO,MAAMC,eAAe,GAAG,UAAU;AACzC;AACA;AACA,OAAO,MAAMC,oBAAoB,GAAG,2BAA2B;AAC/D;AACA;AACA;AACA,OAAO,MAAMC,sBAAsB,GAAG,KAAK;AAC3C;AACA;AACA;AACA,OAAO,MAAMC,sBAAsB,GAAG,CAAC;;AAEvC;AACA;AACA;AACA,OAAO,MAAMC,gCAAgC,GAAG,CAAC;;AAEjD;AACA;AACA;AACA;AACA,OAAO,MAAMC,QAAQ,GAAG;EACtBC,GAAG,EAAE,CAAC;EACNC,KAAK,EAAE,EAAE;EACTC,MAAM,EAAE,EAAE;EACVC,KAAK,EAAE,EAAE;EACTC,OAAO,EAAE,EAAE;EACXC,SAAS,EAAE,EAAE;EACbC,UAAU,EAAE,EAAE;EACdC,QAAQ,EAAE,EAAE;EACZC,WAAW,EAAE,EAAE;EACfC,UAAU,EAAE;AACd,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMC,OAAO,GAAG,OAAOC,WAAW,KAAK,WAAW;AACzD;AACA;AACA;AACA,OAAO,MAAMC,SAAS,GAAGF,OAAO;AAChC;AACA;AACA;AACA;AACA,OAAO,MAAMG,UAAU,GAAG,OAAOC,KAAK,KAAK,WAAW;;AAEtD;AACA;AACA;AACA,OAAO,MAAMC,kBAAkB,GAAG;EAChCC,OAAO,EAAE,SAAS;EAClBC,IAAI,EAAE,MAAM;EACZC,OAAO,EAAE,SAAS;EAClBC,KAAK,EAAE;AACT,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,MAAMC,YAAY,GAAG;EAC1BC,GAAG,EAAE,KAAK;EACVC,IAAI,EAAE;AACR,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,GAAG;EAC9BC,OAAO,EAAE,SAAS;EAClBC,QAAQ,EAAE,UAAU;EACpBN,KAAK,EAAE;AACT,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,MAAMO,eAAe,GAAG;EAC7BC,KAAK,EAAE,OAAO;EACdF,QAAQ,EAAE;AACZ,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMG,sBAAsB,GAAG,GAAG;;AAEzC;AACA;AACA;AACA,OAAO,MAAMC,yBAAyB,GAAG,GAAG;;AAE5C;AACA;AACA;AACA,OAAO,MAAMC,eAAe,GAAG;EAC7BC,WAAW,EAAE,aAAa;EAC1BC,KAAK,EAAE,OAAO;EACdC,MAAM,EAAE,QAAQ;EAChBC,KAAK,EAAE,OAAO;EACdC,WAAW,EAAE;AACf,CAAC;AAED,OAAO,MAAMC,2BAA2B,GAAG,qBAAqB;AAEhE,OAAO,MAAMC,mBAAmB,GAAG,gCAAgC;AAEnE,OAAO,MAAMC,mBAAmB,GAAG;EACjCC,IAAI,EAAE,MAAM;EACZC,UAAU,EAAE,YAAY;EACxBC,WAAW,EAAE;AACf,CAAC;AACD,OAAO,MAAMC,UAAU,GAAG,kBAAkB;AAC5C,OAAO,MAAMC,kBAAkB,GAAG,sBAAsB;AACxD,OAAO,MAAMC,sBAAsB,GAAG,gCAAgC;AACtE,OAAO,MAAMC,sBAAsB,GAAG,gCAAgC;AACtE,OAAO,MAAMC,mBAAmB,GAAG,uBAAuB;AAE1D,OAAO,MAAMC,2BAA2B,GAAG;EACzCC,IAAI,EAAE,2BAA2B;EACjCC,cAAc,EAAE,mBAAmB;EACnCC,SAAS,EAAE;AACb,CAAC","ignoreList":[]}
@@ -2,7 +2,7 @@ import _Object$assign from "@babel/runtime-corejs3/core-js-stable/object/assign"
2
2
  import _startsWithInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/starts-with";
3
3
  import { isPlainObject, has } from "../utils/helpers/objects";
4
4
  import { getRepositoryResourceUrl } from "../utils/helpers/repositoryResource";
5
- import { ALL_CONTENT_IN_DATA_SETTING, INTERNAL_LOGIN_TYPE, LOGIN_TYPE, LOGIN_PATH_SETTING, LOGIN_USERNAME_SETTING, LOGIN_PASSWORD_SETTING, LOGOUT_PATH_SETTING, UPLOAD_PATH, CAPTCHA_PATH } from "./Constants";
5
+ import { ALL_CONTENT_IN_DATA_SETTING, INCLUDE_TIME_OFFSET, INTERNAL_LOGIN_TYPE, LOGIN_TYPE, LOGIN_PATH_SETTING, LOGIN_USERNAME_SETTING, LOGIN_PASSWORD_SETTING, LOGOUT_PATH_SETTING, UPLOAD_PATH, CAPTCHA_PATH } from "./Constants";
6
6
  const serverBase = typeof __CONTEXT_PATH__ === "undefined" ? null : __CONTEXT_PATH__;
7
7
  const defaultSettings = {
8
8
  // This uses contextPath set from property from server
@@ -138,6 +138,10 @@ export const getCaptchaPath = function () {
138
138
  */
139
139
  export const hasAllContentInData = () => getSetting(ALL_CONTENT_IN_DATA_SETTING, true);
140
140
 
141
+ /**
142
+ */
143
+ export const isIncludeTimeOffsetInDateTimes = () => getSetting(INCLUDE_TIME_OFFSET, false);
144
+
141
145
  /**
142
146
  * Login type, only available when pac4j is configured
143
147
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Settings.js","names":["isPlainObject","has","getRepositoryResourceUrl","ALL_CONTENT_IN_DATA_SETTING","INTERNAL_LOGIN_TYPE","LOGIN_TYPE","LOGIN_PATH_SETTING","LOGIN_USERNAME_SETTING","LOGIN_PASSWORD_SETTING","LOGOUT_PATH_SETTING","UPLOAD_PATH","CAPTCHA_PATH","serverBase","__CONTEXT_PATH__","defaultSettings","CONTEXT_PATH","window","contextPath","CACHE_CONTRIBUTIONS","DEBUG_I18N_MESSAGE_NOT_FOUND","HIDE_NOTIFICATION_TIMEOUT","ALWAYS_COMMIT_FORM","RENDER_QUESTION_LABELS","RENDER_MANDATORY_ATTRIBUTE_INDICATION","RENDER_OPTIONAL_ATTRIBUTE_INDICATION","AVAILABLE_LIST_VIEWS","USE_CLIENTSIDE_VALIDATION","USE_INSTANT_SERVER_VALIDATION","ENABLED_LOCALES","RENDER_GLOBAL_LOGIN_PAGE","RENDER_GLOBAL_LOGOUT_PAGE","RENDER_MULTI_LOGIN_ON_GLOBAL_LOGOUT_PAGE","LOGIN_PATH","ADMINISTRATOR_LOGIN_PATH","LOGOUT_PATH","RENDER_FORMS_IN_MODAL","SHOW_SUBMIT_WAIT_TIMEOUT","SWIM_LANE_DIAGRAM_CONFIGURATION","BUSINESS_SCENARIO_CONCEPT_TYPE","BUSINESS_SCENARIO_STEP_CONCEPT_TYPE","BUSINESS_SCENARIO_PERSONA_CONCEPT_TYPE","BUSINESS_SCENARIO_SYSTEM_CONCEPT_TYPE","CALENDAR_WEEK_STARTS_ON","CALENDAR_FIRST_WEEK_CONTAINS_DATE","UI_PARAMETERS","ALLOW_HIDE_WHEN_EMPTY_ON_TABS","PAGE_RELOAD_ON_UNAUTHORIZED_ERROR","XHR_TIMEOUT_MS","HIDE_WHEN_EMPTY_IGNORE_TASKS","SHOW_AVATARS","settings","setSettings","config","_Object$assign","getSetting","key","defaultValue","undefined","Error","setSetting","value","allSettings","cacheContributions","getBasePath","getBasePathModularUI","getBasePathServer","getUploadPath","arguments","length","origin","getCaptchaPath","hasAllContentInData","loginType","JAAS","loginPath","clientName","loginUsernameField","loginPasswordField","logoutPath","getSwimLaneDiagramConfiguration","configLocation","_startsWithInstanceProperty","call","setContextPath","BASE"],"sources":["../../src/constants/Settings.js"],"sourcesContent":["// @flow\nimport { isPlainObject, has } from \"../utils/helpers/objects\";\nimport { getRepositoryResourceUrl } from \"../utils/helpers/repositoryResource\";\nimport {\n ALL_CONTENT_IN_DATA_SETTING,\n INTERNAL_LOGIN_TYPE,\n LOGIN_TYPE,\n LOGIN_PATH_SETTING,\n LOGIN_USERNAME_SETTING,\n LOGIN_PASSWORD_SETTING,\n LOGOUT_PATH_SETTING,\n UPLOAD_PATH,\n CAPTCHA_PATH,\n} from \"./Constants\";\n\ntype Setting = boolean | string | number | Array<string>;\n\nconst serverBase =\n typeof __CONTEXT_PATH__ === \"undefined\" ? null : __CONTEXT_PATH__;\n\nconst defaultSettings: { [name: string]: Setting } = {\n // This uses contextPath set from property from server\n CONTEXT_PATH:\n serverBase ??\n (typeof window !== \"undefined\" && window.contextPath\n ? window.contextPath\n : \"/BeInformed\"),\n\n // Indicates if contributions should be cached\n CACHE_CONTRIBUTIONS: true,\n\n // Debug missing i18n messages in layout\n DEBUG_I18N_MESSAGE_NOT_FOUND: true,\n\n // Time to show the notification bar\n HIDE_NOTIFICATION_TIMEOUT: 5000,\n\n // Always commit form, does not show result pages for instruments\n ALWAYS_COMMIT_FORM: false,\n\n // Render instrument and event question labels on forms (might result in duplicate labels)\n RENDER_QUESTION_LABELS: true,\n\n // Render mandatory indications on attributes\n RENDER_MANDATORY_ATTRIBUTE_INDICATION: true,\n\n // Render optional indications on attributes\n RENDER_OPTIONAL_ATTRIBUTE_INDICATION: false,\n\n // Renders a toggle with supported list views, options are ListView and TableView\n AVAILABLE_LIST_VIEWS: [\"ListView\", \"TableView\"],\n\n // Toggle client side validation\n USE_CLIENTSIDE_VALIDATION: true,\n\n // Indicates if server validation should be used when a form field is changed\n USE_INSTANT_SERVER_VALIDATION: true,\n\n // Indicates which locales are enabled\n ENABLED_LOCALES: [\"en\", \"nl\"],\n\n // Renders the global log in page\n RENDER_GLOBAL_LOGIN_PAGE: false,\n\n // Renders the global log out page\n RENDER_GLOBAL_LOGOUT_PAGE: false,\n\n // Renders the login variants as option on the global logout page\n RENDER_MULTI_LOGIN_ON_GLOBAL_LOGOUT_PAGE: false,\n\n // Path to login page / component\n LOGIN_PATH: \"/signin\",\n\n // Path to administrator login page / component\n ADMINISTRATOR_LOGIN_PATH: \"\",\n\n // Path to logout page / component\n LOGOUT_PATH: \"/signout\",\n\n // Render forms in a modal\n RENDER_FORMS_IN_MODAL: true,\n\n // Wait timeout before rendering submit wait icon\n SHOW_SUBMIT_WAIT_TIMEOUT: 300,\n\n // Swim lane diagram configuration file\n SWIM_LANE_DIAGRAM_CONFIGURATION: \"/Library/Diagrams/Overviews.json\",\n\n // Business scenario concept types\n BUSINESS_SCENARIO_CONCEPT_TYPE: [\n \"/Library/KMTs/Business scenarios.bixml/BusinessScenario\",\n ],\n BUSINESS_SCENARIO_STEP_CONCEPT_TYPE: [\n \"/Library/KMTs/Business scenarios.bixml/ScenarioStep\",\n ],\n BUSINESS_SCENARIO_PERSONA_CONCEPT_TYPE: [\n \"/Library/KMTs/Business scenarios.bixml/Persona\",\n ],\n BUSINESS_SCENARIO_SYSTEM_CONCEPT_TYPE: [\n \"/Library/KMTs/Business scenarios.bixml/System\",\n ],\n\n // indicates on what day the week starts (0 = Sunday)\n CALENDAR_WEEK_STARTS_ON: 1,\n\n // indicates which date indicates the first week of the year\n CALENDAR_FIRST_WEEK_CONTAINS_DATE: 1,\n\n // parameters that are added for the ui state, but should not be send to the modular ui\n UI_PARAMETERS: [],\n\n // disable hide-when-empty hint for layouts running on Be Informed versions older than 21.1\n ALLOW_HIDE_WHEN_EMPTY_ON_TABS: true,\n\n // reload the complete page on signout, usefull when third party authentication is in place\n PAGE_RELOAD_ON_UNAUTHORIZED_ERROR: false,\n\n XHR_TIMEOUT_MS: 300000,\n\n HIDE_WHEN_EMPTY_IGNORE_TASKS: false,\n\n SHOW_AVATARS: true,\n};\n\nlet settings = defaultSettings;\n\n/**\n */\nexport const setSettings = (config: Object) => {\n if (isPlainObject(config)) {\n settings = Object.assign(defaultSettings, config);\n }\n};\n\n/**\n */\nexport const getSetting = (key: string, defaultValue?: any): any => {\n if (!has(settings, key) && defaultValue === undefined) {\n throw new Error(\n `Setting with name ${key} not found and no defaultValue given`,\n );\n }\n\n return settings[key] ?? defaultValue;\n};\n\n/**\n */\nexport const setSetting = (key: string, value: any) => {\n settings[key] = value;\n};\n\n/**\n */\nexport const allSettings = (): { [name: string]: Setting } => settings;\n\n/**\n * Indicates if contributions must be cached\n */\nexport const cacheContributions = (): boolean =>\n getSetting(\"CACHE_CONTRIBUTIONS\", true);\n\n/**\n * The context path is retrieved on the server using the context path property as set in the runtime properties\n * This can be manually override by setting the UI setting 'CONTEXT_PATH'\n */\nexport const getBasePath = (): string =>\n getSetting(\"CONTEXT_PATH\", \"/BeInformed\");\n\n/**\n * The context path to modular ui rest services\n */\nexport const getBasePathModularUI = (): string =>\n getSetting(\"CONTEXT_PATH_SERVER\", getBasePath());\n\n/**\n * Used to link the css and js files in the server templates\n */\nexport const getBasePathServer = (): string =>\n getSetting(\"CONTEXT_PATH_SERVER\", getBasePath());\n\n/**\n * Path to upload service\n */\nexport const getUploadPath = (\n contextPath: string = getBasePathModularUI(),\n origin: string = \"\",\n): string => `${origin}${contextPath}${UPLOAD_PATH}`;\n\n/**\n * Path to captcha service\n */\nexport const getCaptchaPath = (\n contextPath: string = getBasePathModularUI(),\n origin: string = \"\",\n): string => `${origin}${contextPath}${CAPTCHA_PATH}`;\n\n/**\n */\nexport const hasAllContentInData = (): boolean =>\n getSetting(ALL_CONTENT_IN_DATA_SETTING, true);\n\n/**\n * Login type, only available when pac4j is configured\n *\n * Preview does not support pac4j, thus is probably not configured when started, which results in login type JAAS\n */\nexport const loginType = (): string =>\n getSetting(LOGIN_TYPE, INTERNAL_LOGIN_TYPE.JAAS);\n\n/**\n */\nexport const loginPath = (clientName: string = \"FormClient\"): string =>\n getSetting(LOGIN_PATH_SETTING, `/callback?client_name=${clientName}`);\n/**\n */\nexport const loginUsernameField = (): string =>\n getSetting(LOGIN_USERNAME_SETTING, \"j_username\");\n/**\n */\nexport const loginPasswordField = (): string =>\n getSetting(LOGIN_PASSWORD_SETTING, \"j_password\");\n/**\n */\nexport const logoutPath = (): string =>\n getSetting(LOGOUT_PATH_SETTING, \"/logout\");\n\nexport const LOGIN_PATH: string = loginPath();\nexport const LOGOUT_PATH: string = logoutPath();\n\n/**\n * Model overview swim lane configuration\n */\nexport const getSwimLaneDiagramConfiguration: Object = () => {\n let configLocation = getSetting(\n \"SWIM_LANE_DIAGRAM_CONFIGURATION\",\n \"/Library/Diagrams/Overviews.json\",\n );\n if (!configLocation.startsWith(\"/\")) {\n configLocation = `/${configLocation}`;\n }\n return getRepositoryResourceUrl(configLocation);\n};\n\n/**\n * Set the context path for requests to be informed\n */\nexport const setContextPath = (contextPath: string) => {\n setSetting(\"CONTEXT_PATH\", contextPath);\n};\n\n/**\n * Backwards compatible export of BASE constant\n */\nexport const BASE: string = getBasePath();\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Settings.js","names":["isPlainObject","has","getRepositoryResourceUrl","ALL_CONTENT_IN_DATA_SETTING","INCLUDE_TIME_OFFSET","INTERNAL_LOGIN_TYPE","LOGIN_TYPE","LOGIN_PATH_SETTING","LOGIN_USERNAME_SETTING","LOGIN_PASSWORD_SETTING","LOGOUT_PATH_SETTING","UPLOAD_PATH","CAPTCHA_PATH","serverBase","__CONTEXT_PATH__","defaultSettings","CONTEXT_PATH","window","contextPath","CACHE_CONTRIBUTIONS","DEBUG_I18N_MESSAGE_NOT_FOUND","HIDE_NOTIFICATION_TIMEOUT","ALWAYS_COMMIT_FORM","RENDER_QUESTION_LABELS","RENDER_MANDATORY_ATTRIBUTE_INDICATION","RENDER_OPTIONAL_ATTRIBUTE_INDICATION","AVAILABLE_LIST_VIEWS","USE_CLIENTSIDE_VALIDATION","USE_INSTANT_SERVER_VALIDATION","ENABLED_LOCALES","RENDER_GLOBAL_LOGIN_PAGE","RENDER_GLOBAL_LOGOUT_PAGE","RENDER_MULTI_LOGIN_ON_GLOBAL_LOGOUT_PAGE","LOGIN_PATH","ADMINISTRATOR_LOGIN_PATH","LOGOUT_PATH","RENDER_FORMS_IN_MODAL","SHOW_SUBMIT_WAIT_TIMEOUT","SWIM_LANE_DIAGRAM_CONFIGURATION","BUSINESS_SCENARIO_CONCEPT_TYPE","BUSINESS_SCENARIO_STEP_CONCEPT_TYPE","BUSINESS_SCENARIO_PERSONA_CONCEPT_TYPE","BUSINESS_SCENARIO_SYSTEM_CONCEPT_TYPE","CALENDAR_WEEK_STARTS_ON","CALENDAR_FIRST_WEEK_CONTAINS_DATE","UI_PARAMETERS","ALLOW_HIDE_WHEN_EMPTY_ON_TABS","PAGE_RELOAD_ON_UNAUTHORIZED_ERROR","XHR_TIMEOUT_MS","HIDE_WHEN_EMPTY_IGNORE_TASKS","SHOW_AVATARS","settings","setSettings","config","_Object$assign","getSetting","key","defaultValue","undefined","Error","setSetting","value","allSettings","cacheContributions","getBasePath","getBasePathModularUI","getBasePathServer","getUploadPath","arguments","length","origin","getCaptchaPath","hasAllContentInData","isIncludeTimeOffsetInDateTimes","loginType","JAAS","loginPath","clientName","loginUsernameField","loginPasswordField","logoutPath","getSwimLaneDiagramConfiguration","configLocation","_startsWithInstanceProperty","call","setContextPath","BASE"],"sources":["../../src/constants/Settings.js"],"sourcesContent":["// @flow\nimport { isPlainObject, has } from \"../utils/helpers/objects\";\nimport { getRepositoryResourceUrl } from \"../utils/helpers/repositoryResource\";\nimport {\n ALL_CONTENT_IN_DATA_SETTING,\n INCLUDE_TIME_OFFSET,\n INTERNAL_LOGIN_TYPE,\n LOGIN_TYPE,\n LOGIN_PATH_SETTING,\n LOGIN_USERNAME_SETTING,\n LOGIN_PASSWORD_SETTING,\n LOGOUT_PATH_SETTING,\n UPLOAD_PATH,\n CAPTCHA_PATH,\n} from \"./Constants\";\n\ntype Setting = boolean | string | number | Array<string>;\n\nconst serverBase =\n typeof __CONTEXT_PATH__ === \"undefined\" ? null : __CONTEXT_PATH__;\n\nconst defaultSettings: { [name: string]: Setting } = {\n // This uses contextPath set from property from server\n CONTEXT_PATH:\n serverBase ??\n (typeof window !== \"undefined\" && window.contextPath\n ? window.contextPath\n : \"/BeInformed\"),\n\n // Indicates if contributions should be cached\n CACHE_CONTRIBUTIONS: true,\n\n // Debug missing i18n messages in layout\n DEBUG_I18N_MESSAGE_NOT_FOUND: true,\n\n // Time to show the notification bar\n HIDE_NOTIFICATION_TIMEOUT: 5000,\n\n // Always commit form, does not show result pages for instruments\n ALWAYS_COMMIT_FORM: false,\n\n // Render instrument and event question labels on forms (might result in duplicate labels)\n RENDER_QUESTION_LABELS: true,\n\n // Render mandatory indications on attributes\n RENDER_MANDATORY_ATTRIBUTE_INDICATION: true,\n\n // Render optional indications on attributes\n RENDER_OPTIONAL_ATTRIBUTE_INDICATION: false,\n\n // Renders a toggle with supported list views, options are ListView and TableView\n AVAILABLE_LIST_VIEWS: [\"ListView\", \"TableView\"],\n\n // Toggle client side validation\n USE_CLIENTSIDE_VALIDATION: true,\n\n // Indicates if server validation should be used when a form field is changed\n USE_INSTANT_SERVER_VALIDATION: true,\n\n // Indicates which locales are enabled\n ENABLED_LOCALES: [\"en\", \"nl\"],\n\n // Renders the global log in page\n RENDER_GLOBAL_LOGIN_PAGE: false,\n\n // Renders the global log out page\n RENDER_GLOBAL_LOGOUT_PAGE: false,\n\n // Renders the login variants as option on the global logout page\n RENDER_MULTI_LOGIN_ON_GLOBAL_LOGOUT_PAGE: false,\n\n // Path to login page / component\n LOGIN_PATH: \"/signin\",\n\n // Path to administrator login page / component\n ADMINISTRATOR_LOGIN_PATH: \"\",\n\n // Path to logout page / component\n LOGOUT_PATH: \"/signout\",\n\n // Render forms in a modal\n RENDER_FORMS_IN_MODAL: true,\n\n // Wait timeout before rendering submit wait icon\n SHOW_SUBMIT_WAIT_TIMEOUT: 300,\n\n // Swim lane diagram configuration file\n SWIM_LANE_DIAGRAM_CONFIGURATION: \"/Library/Diagrams/Overviews.json\",\n\n // Business scenario concept types\n BUSINESS_SCENARIO_CONCEPT_TYPE: [\n \"/Library/KMTs/Business scenarios.bixml/BusinessScenario\",\n ],\n BUSINESS_SCENARIO_STEP_CONCEPT_TYPE: [\n \"/Library/KMTs/Business scenarios.bixml/ScenarioStep\",\n ],\n BUSINESS_SCENARIO_PERSONA_CONCEPT_TYPE: [\n \"/Library/KMTs/Business scenarios.bixml/Persona\",\n ],\n BUSINESS_SCENARIO_SYSTEM_CONCEPT_TYPE: [\n \"/Library/KMTs/Business scenarios.bixml/System\",\n ],\n\n // indicates on what day the week starts (0 = Sunday)\n CALENDAR_WEEK_STARTS_ON: 1,\n\n // indicates which date indicates the first week of the year\n CALENDAR_FIRST_WEEK_CONTAINS_DATE: 1,\n\n // parameters that are added for the ui state, but should not be send to the modular ui\n UI_PARAMETERS: [],\n\n // disable hide-when-empty hint for layouts running on Be Informed versions older than 21.1\n ALLOW_HIDE_WHEN_EMPTY_ON_TABS: true,\n\n // reload the complete page on signout, usefull when third party authentication is in place\n PAGE_RELOAD_ON_UNAUTHORIZED_ERROR: false,\n\n XHR_TIMEOUT_MS: 300000,\n\n HIDE_WHEN_EMPTY_IGNORE_TASKS: false,\n\n SHOW_AVATARS: true,\n};\n\nlet settings = defaultSettings;\n\n/**\n */\nexport const setSettings = (config: Object) => {\n if (isPlainObject(config)) {\n settings = Object.assign(defaultSettings, config);\n }\n};\n\n/**\n */\nexport const getSetting = (key: string, defaultValue?: any): any => {\n if (!has(settings, key) && defaultValue === undefined) {\n throw new Error(\n `Setting with name ${key} not found and no defaultValue given`,\n );\n }\n\n return settings[key] ?? defaultValue;\n};\n\n/**\n */\nexport const setSetting = (key: string, value: any) => {\n settings[key] = value;\n};\n\n/**\n */\nexport const allSettings = (): { [name: string]: Setting } => settings;\n\n/**\n * Indicates if contributions must be cached\n */\nexport const cacheContributions = (): boolean =>\n getSetting(\"CACHE_CONTRIBUTIONS\", true);\n\n/**\n * The context path is retrieved on the server using the context path property as set in the runtime properties\n * This can be manually override by setting the UI setting 'CONTEXT_PATH'\n */\nexport const getBasePath = (): string =>\n getSetting(\"CONTEXT_PATH\", \"/BeInformed\");\n\n/**\n * The context path to modular ui rest services\n */\nexport const getBasePathModularUI = (): string =>\n getSetting(\"CONTEXT_PATH_SERVER\", getBasePath());\n\n/**\n * Used to link the css and js files in the server templates\n */\nexport const getBasePathServer = (): string =>\n getSetting(\"CONTEXT_PATH_SERVER\", getBasePath());\n\n/**\n * Path to upload service\n */\nexport const getUploadPath = (\n contextPath: string = getBasePathModularUI(),\n origin: string = \"\",\n): string => `${origin}${contextPath}${UPLOAD_PATH}`;\n\n/**\n * Path to captcha service\n */\nexport const getCaptchaPath = (\n contextPath: string = getBasePathModularUI(),\n origin: string = \"\",\n): string => `${origin}${contextPath}${CAPTCHA_PATH}`;\n\n/**\n */\nexport const hasAllContentInData = (): boolean =>\n getSetting(ALL_CONTENT_IN_DATA_SETTING, true);\n\n/**\n */\nexport const isIncludeTimeOffsetInDateTimes = (): boolean =>\n getSetting(INCLUDE_TIME_OFFSET, false);\n\n/**\n * Login type, only available when pac4j is configured\n *\n * Preview does not support pac4j, thus is probably not configured when started, which results in login type JAAS\n */\nexport const loginType = (): string =>\n getSetting(LOGIN_TYPE, INTERNAL_LOGIN_TYPE.JAAS);\n\n/**\n */\nexport const loginPath = (clientName: string = \"FormClient\"): string =>\n getSetting(LOGIN_PATH_SETTING, `/callback?client_name=${clientName}`);\n/**\n */\nexport const loginUsernameField = (): string =>\n getSetting(LOGIN_USERNAME_SETTING, \"j_username\");\n/**\n */\nexport const loginPasswordField = (): string =>\n getSetting(LOGIN_PASSWORD_SETTING, \"j_password\");\n/**\n */\nexport const logoutPath = (): string =>\n getSetting(LOGOUT_PATH_SETTING, \"/logout\");\n\nexport const LOGIN_PATH: string = loginPath();\nexport const LOGOUT_PATH: string = logoutPath();\n\n/**\n * Model overview swim lane configuration\n */\nexport const getSwimLaneDiagramConfiguration: Object = () => {\n let configLocation = getSetting(\n \"SWIM_LANE_DIAGRAM_CONFIGURATION\",\n \"/Library/Diagrams/Overviews.json\",\n );\n if (!configLocation.startsWith(\"/\")) {\n configLocation = `/${configLocation}`;\n }\n return getRepositoryResourceUrl(configLocation);\n};\n\n/**\n * Set the context path for requests to be informed\n */\nexport const setContextPath = (contextPath: string) => {\n setSetting(\"CONTEXT_PATH\", contextPath);\n};\n\n/**\n * Backwards compatible export of BASE constant\n */\nexport const BASE: string = getBasePath();\n"],"mappings":"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","ignoreList":[]}
@@ -8,7 +8,7 @@ import DateTimeDateFormatConstraint from "./input-constraints/DateTimeDateFormat
8
8
  import DateTimeTimeFormatConstraint from "./input-constraints/DateTimeTimeFormatConstraint";
9
9
  import DatetimeFormatConstraint from "./input-constraints/DatetimeFormatConstraint";
10
10
  import DateBoundaryConstraint from "./input-constraints/DateBoundaryConstraint";
11
- import { ATTRIBUTE_WIDTH, ISO_DATE_FORMAT } from "../../constants";
11
+ import { isIncludeTimeOffsetInDateTimes, ATTRIBUTE_WIDTH, DATETIME_OFFSET_FORMAT, ISO_DATE_FORMAT } from "../../constants";
12
12
  /**
13
13
  */
14
14
  class DatetimeAttributeModel extends StringAttributeModel {
@@ -52,7 +52,9 @@ class DatetimeAttributeModel extends StringAttributeModel {
52
52
 
53
53
  // handle old datetime values, which contained ms
54
54
  if (this.type === "datetime" && _includesInstanceProperty(value).call(value, ".")) {
55
- value = value.split(".")[0];
55
+ value = TimestampUtil.toFormat(value, DateTimeUtil.getIsoFormat());
56
+ } else {
57
+ value = this.formatUtil.toISO(value);
56
58
  }
57
59
  if (this.hasTime) {
58
60
  value = this.getTimeValue(value);
@@ -78,6 +80,12 @@ class DatetimeAttributeModel extends StringAttributeModel {
78
80
  if (this.type === "timestamp" && !_includesInstanceProperty(_context5 = this.timeInputFormat).call(_context5, "S")) {
79
81
  timeValue = this.formatUtil.setMilliseconds(value, 0);
80
82
  }
83
+ if (isIncludeTimeOffsetInDateTimes()) {
84
+ // https://github.com/date-fns/date-fns/issues/3579
85
+ const oldOffset = this.formatUtil.toFormat(value, DATETIME_OFFSET_FORMAT);
86
+ const newOffset = this.formatUtil.toFormat(timeValue, DATETIME_OFFSET_FORMAT);
87
+ timeValue = timeValue.replace(newOffset, oldOffset);
88
+ }
81
89
  return timeValue;
82
90
  }
83
91
 
@@ -172,7 +180,7 @@ class DatetimeAttributeModel extends StringAttributeModel {
172
180
 
173
181
  /**
174
182
  */
175
- get inputFormat() {
183
+ get inputFormatWithoutOffset() {
176
184
  if (this.hasDate && this.hasTime) {
177
185
  var _context6;
178
186
  return _trimInstanceProperty(_context6 = `${this.dateInputFormat} ${this.timeInputFormat}`).call(_context6);
@@ -186,6 +194,15 @@ class DatetimeAttributeModel extends StringAttributeModel {
186
194
  return "";
187
195
  }
188
196
 
197
+ /**
198
+ */
199
+ get inputFormat() {
200
+ if (isIncludeTimeOffsetInDateTimes() && this.dateInputFormat !== "" && this.timeInputFormat !== "") {
201
+ return `${this.inputFormatWithoutOffset} ${DATETIME_OFFSET_FORMAT}`;
202
+ }
203
+ return this.inputFormatWithoutOffset;
204
+ }
205
+
189
206
  /**
190
207
  */
191
208
  get dateInputFormat() {
@@ -278,8 +295,8 @@ class DatetimeAttributeModel extends StringAttributeModel {
278
295
  return typeof this.value === "string" && this.timeInputFormat !== "" ? this.formatUtil.toFormat(this.value, this.timeInputFormat) : "";
279
296
  }
280
297
 
281
- // format value in readonly rendering
282
298
  /**
299
+ * format value in readonly rendering
283
300
  */
284
301
  formatValue(value) {
285
302
  if (value == null || value.toString() === "") {
@@ -310,6 +327,24 @@ class DatetimeAttributeModel extends StringAttributeModel {
310
327
  return "";
311
328
  }
312
329
 
330
+ /**
331
+ */
332
+ get isAmbiguous() {
333
+ if (typeof this.value === "string") {
334
+ return this.formatUtil.isAmbiguous(this.value);
335
+ }
336
+ return false;
337
+ }
338
+
339
+ /**
340
+ */
341
+ get offset() {
342
+ if (typeof this.value === "string") {
343
+ return this.formatUtil.getOffset(this.value);
344
+ }
345
+ return null;
346
+ }
347
+
313
348
  /**
314
349
  * Get minimum date
315
350
  */
@@ -1 +1 @@
1
- {"version":3,"file":"DatetimeAttributeModel.js","names":["has","DateUtil","DateTimeUtil","TimeUtil","TimestampUtil","StringAttributeModel","ConstraintCollection","DateTimeDateFormatConstraint","DateTimeTimeFormatConstraint","DatetimeFormatConstraint","DateBoundaryConstraint","ATTRIBUTE_WIDTH","ISO_DATE_FORMAT","DatetimeAttributeModel","constructor","attribute","attributeContributions","modelOptions","updateInitValue","isApplicableModel","contributions","_context","_includesInstanceProperty","call","type","formatUtil","getInitValue","value","data","length","split","hasTime","getTimeValue","_context2","_context3","_context4","_context5","timeValue","timeInputFormat","toLowerCase","setHour","setMinute","setSecond","setMilliseconds","_initvalue","_inputvalue","getInitialInputValue","_value","initValue","toFormat","inputFormat","getContribution","getInputValue","toString","inputvalue","validate","toISO","format","convertFormat","hasDate","formatLabel","dateInputFormat","_context6","_trimInstanceProperty","_context7","replace","dateReadonlyFormat","_context8","placeholder","_placeholder","timeFormatParts","push","timeFormat","join","timeReadonlyFormat","dateInputValue","timeInputValue","formatValue","hasFormat","dateTimeReadonlyFormat","readonlyvalue","mindate","maxdate","addServerError","error","id","message","properties","layouthint","_errorCollection","getFormatConstraint","addConstraints","constraints","add","readonlyWidth","SMALL","MEDIUM","updateByAttribute","otherAttribute","reset","otherValue","inputValue","update","console"],"sources":["../../../src/models/attributes/DatetimeAttributeModel.js"],"sourcesContent":["// @flow\nimport { has } from \"../../utils/helpers/objects\";\n\nimport {\n DateUtil,\n DateTimeUtil,\n TimeUtil,\n TimestampUtil,\n} from \"../../utils/datetime/DateTimeUtil\";\n\nimport StringAttributeModel from \"./StringAttributeModel\";\n\nimport ConstraintCollection from \"./input-constraints/ConstraintCollection\";\nimport DateTimeDateFormatConstraint from \"./input-constraints/DateTimeDateFormatConstraint\";\nimport DateTimeTimeFormatConstraint from \"./input-constraints/DateTimeTimeFormatConstraint\";\nimport DatetimeFormatConstraint from \"./input-constraints/DatetimeFormatConstraint\";\nimport DateBoundaryConstraint from \"./input-constraints/DateBoundaryConstraint\";\n\nimport { ATTRIBUTE_WIDTH, ISO_DATE_FORMAT } from \"../../constants\";\n\nimport type {\n FormErrorAnchor,\n IConstraintModel,\n AttributeType,\n ModelOptions,\n} from \"../types\";\n\n/**\n */\nclass DatetimeAttributeModel extends StringAttributeModel {\n /**\n */\n constructor(\n attribute: Object,\n attributeContributions: Object,\n modelOptions?: ModelOptions,\n ) {\n super(attribute, attributeContributions, modelOptions);\n\n this.updateInitValue();\n }\n\n /**\n */\n static isApplicableModel(contributions: Object): boolean {\n return [\"date\", \"time\", \"datetime\", \"timestamp\"].includes(\n contributions.type,\n );\n }\n\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 /**\n */\n getInitValue(): string | null {\n let value = this.data.value;\n if (value != null) {\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 = value.split(\".\")[0];\n }\n\n if (this.hasTime) {\n value = this.getTimeValue(value);\n }\n }\n\n return value;\n }\n\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 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._initvalue = value;\n this._inputvalue = this.getInitialInputValue(value);\n this._value = value;\n }\n }\n\n /**\n * Get initial user input value\n */\n getInitialInputValue(value?: string): string {\n if (!value) {\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 /**\n * Set type to date\n */\n get type(): string {\n return this.getContribution(\"type\", \"date\");\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 getInputValue(): string {\n return this._inputvalue ? this._inputvalue.toString() : \"\";\n }\n\n /**\n * Get input value\n */\n get inputvalue(): string {\n return this.getInputValue();\n }\n\n /**\n * Sets the input value to the value entered by the user\n */\n set inputvalue(value: string) {\n this.validate(value);\n\n this._inputvalue = value;\n\n this.value =\n value !== null && value !== \"\"\n ? this.formatUtil.toISO(value, this.inputFormat)\n : null;\n }\n\n /**\n * Get date format\n */\n get format(): string {\n const format = this.getContribution(\"format\", \"\");\n return this.formatUtil.convertFormat(format);\n }\n\n /**\n */\n get hasDate(): boolean {\n return (\n this.type === \"date\" ||\n this.type === \"datetime\" ||\n this.type === \"timestamp\"\n );\n }\n\n /**\n */\n get hasTime(): boolean {\n return (\n this.type === \"time\" ||\n this.type === \"datetime\" ||\n this.type === \"timestamp\"\n );\n }\n\n /**\n */\n get formatLabel(): string {\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 /**\n */\n get inputFormat(): 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 /**\n */\n get dateInputFormat(): string {\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 */\n get dateReadonlyFormat(): string {\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 get placeholder(): string {\n if (this._placeholder !== \"\") {\n return this._placeholder;\n }\n\n const formatLabel = this.getContribution(\"formatlabel\", \"\");\n\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 * Set placeholder text\n */\n set placeholder(placeholder: string) {\n this._placeholder = placeholder;\n }\n\n /**\n */\n get timeInputFormat(): string {\n if (!this.hasTime) {\n return \"\";\n }\n\n const format = this.format;\n\n let 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 return timeFormat;\n }\n\n /**\n */\n get timeReadonlyFormat(): string {\n if (!this.hasTime) {\n return \"\";\n }\n\n return this.timeInputFormat;\n }\n\n /**\n */\n get dateInputValue(): string {\n return typeof this.value === \"string\" && this.dateInputFormat !== \"\"\n ? this.formatUtil.toFormat(this.value, this.dateInputFormat)\n : \"\";\n }\n\n /**\n */\n get timeInputValue(): string {\n return typeof this.value === \"string\" && this.timeInputFormat !== \"\"\n ? this.formatUtil.toFormat(this.value, this.timeInputFormat)\n : \"\";\n }\n\n // format value in readonly rendering\n /**\n */\n formatValue(value: ?string): string {\n if (value == null || value.toString() === \"\") {\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.hasDate && this.hasTime) {\n const dateTimeReadonlyFormat = `${this.dateReadonlyFormat} ${this.timeReadonlyFormat}`;\n return this.formatUtil.toFormat(value, dateTimeReadonlyFormat);\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 get readonlyvalue(): string {\n if (typeof this.value === \"string\") {\n return this.formatValue(this.value.toString());\n }\n\n return \"\";\n }\n\n /**\n * Get minimum date\n */\n get mindate(): string | null {\n return this.getContribution(\"mindate\");\n }\n\n /**\n * Get maximum date\n */\n get maxdate(): string | null {\n return this.getContribution(\"maxdate\");\n }\n\n /**\n * Registers an error that was received from a server response\n */\n addServerError(error: FormErrorAnchor) {\n const { id, message, properties, layouthint } = error;\n if (properties && has(properties, \"format\") && this.formatLabel) {\n properties.format = this.formatLabel;\n }\n\n this._errorCollection.addServerError(id, message, properties, layouthint);\n }\n\n /**\n */\n getFormatConstraint(): IConstraintModel {\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 addConstraints(): ConstraintCollection {\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 /**\n */\n get readonlyWidth(): $Keys<typeof 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 /**\n */\n updateByAttribute(otherAttribute: AttributeType): void {\n this.reset();\n if (otherAttribute instanceof DatetimeAttributeModel) {\n const otherValue = otherAttribute.value;\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\nexport default DatetimeAttributeModel;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"DatetimeAttributeModel.js","names":["has","DateUtil","DateTimeUtil","TimeUtil","TimestampUtil","StringAttributeModel","ConstraintCollection","DateTimeDateFormatConstraint","DateTimeTimeFormatConstraint","DatetimeFormatConstraint","DateBoundaryConstraint","isIncludeTimeOffsetInDateTimes","ATTRIBUTE_WIDTH","DATETIME_OFFSET_FORMAT","ISO_DATE_FORMAT","DatetimeAttributeModel","constructor","attribute","attributeContributions","modelOptions","updateInitValue","isApplicableModel","contributions","_context","_includesInstanceProperty","call","type","formatUtil","getInitValue","value","data","length","toFormat","getIsoFormat","toISO","hasTime","getTimeValue","_context2","_context3","_context4","_context5","timeValue","timeInputFormat","toLowerCase","setHour","setMinute","setSecond","setMilliseconds","oldOffset","newOffset","replace","_initvalue","_inputvalue","getInitialInputValue","_value","initValue","inputFormat","getContribution","getInputValue","toString","inputvalue","validate","format","convertFormat","hasDate","formatLabel","dateInputFormat","inputFormatWithoutOffset","_context6","_trimInstanceProperty","_context7","dateReadonlyFormat","_context8","placeholder","_placeholder","split","timeFormatParts","push","timeFormat","join","timeReadonlyFormat","dateInputValue","timeInputValue","formatValue","hasFormat","dateTimeReadonlyFormat","readonlyvalue","isAmbiguous","offset","getOffset","mindate","maxdate","addServerError","error","id","message","properties","layouthint","_errorCollection","getFormatConstraint","addConstraints","constraints","add","readonlyWidth","SMALL","MEDIUM","updateByAttribute","otherAttribute","reset","otherValue","inputValue","update","console"],"sources":["../../../src/models/attributes/DatetimeAttributeModel.js"],"sourcesContent":["// @flow\nimport { has } from \"../../utils/helpers/objects\";\n\nimport {\n DateUtil,\n DateTimeUtil,\n TimeUtil,\n TimestampUtil,\n} from \"../../utils/datetime/DateTimeUtil\";\n\nimport StringAttributeModel from \"./StringAttributeModel\";\n\nimport ConstraintCollection from \"./input-constraints/ConstraintCollection\";\nimport DateTimeDateFormatConstraint from \"./input-constraints/DateTimeDateFormatConstraint\";\nimport DateTimeTimeFormatConstraint from \"./input-constraints/DateTimeTimeFormatConstraint\";\nimport DatetimeFormatConstraint from \"./input-constraints/DatetimeFormatConstraint\";\nimport DateBoundaryConstraint from \"./input-constraints/DateBoundaryConstraint\";\n\nimport {\n isIncludeTimeOffsetInDateTimes,\n ATTRIBUTE_WIDTH,\n DATETIME_OFFSET_FORMAT,\n ISO_DATE_FORMAT,\n} from \"../../constants\";\n\nimport type {\n FormErrorAnchor,\n IConstraintModel,\n AttributeType,\n ModelOptions,\n} from \"../types\";\nimport type { OffsetInfo } from \"../../utils/datetime/DateTimeUtil\";\n\n/**\n */\nclass DatetimeAttributeModel extends StringAttributeModel {\n /**\n */\n constructor(\n attribute: Object,\n attributeContributions: Object,\n modelOptions?: ModelOptions,\n ) {\n super(attribute, attributeContributions, modelOptions);\n\n this.updateInitValue();\n }\n\n /**\n */\n static isApplicableModel(contributions: Object): boolean {\n return [\"date\", \"time\", \"datetime\", \"timestamp\"].includes(\n contributions.type,\n );\n }\n\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 /**\n */\n getInitValue(): string | null {\n let value = this.data.value;\n if (value != null) {\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 /**\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\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._initvalue = value;\n this._inputvalue = this.getInitialInputValue(value);\n this._value = value;\n }\n }\n\n /**\n * Get initial user input value\n */\n getInitialInputValue(value?: string): string {\n if (!value) {\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 /**\n * Set type to date\n */\n get type(): string {\n return this.getContribution(\"type\", \"date\");\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 getInputValue(): string {\n return this._inputvalue ? this._inputvalue.toString() : \"\";\n }\n\n /**\n * Get input value\n */\n get inputvalue(): string {\n return this.getInputValue();\n }\n\n /**\n * Sets the input value to the value entered by the user\n */\n set inputvalue(value: string) {\n this.validate(value);\n\n this._inputvalue = value;\n\n this.value =\n value !== null && value !== \"\"\n ? this.formatUtil.toISO(value, this.inputFormat)\n : null;\n }\n\n /**\n * Get date format\n */\n get format(): string {\n const format = this.getContribution(\"format\", \"\");\n return this.formatUtil.convertFormat(format);\n }\n\n /**\n */\n get hasDate(): boolean {\n return (\n this.type === \"date\" ||\n this.type === \"datetime\" ||\n this.type === \"timestamp\"\n );\n }\n\n /**\n */\n get hasTime(): boolean {\n return (\n this.type === \"time\" ||\n this.type === \"datetime\" ||\n this.type === \"timestamp\"\n );\n }\n\n /**\n */\n get formatLabel(): string {\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 /**\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 /**\n */\n get inputFormat(): string {\n if (\n isIncludeTimeOffsetInDateTimes() &&\n this.dateInputFormat !== \"\" &&\n this.timeInputFormat !== \"\"\n ) {\n return `${this.inputFormatWithoutOffset} ${DATETIME_OFFSET_FORMAT}`;\n }\n return this.inputFormatWithoutOffset;\n }\n\n /**\n */\n get dateInputFormat(): string {\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 */\n get dateReadonlyFormat(): string {\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 get placeholder(): string {\n if (this._placeholder !== \"\") {\n return this._placeholder;\n }\n\n const formatLabel = this.getContribution(\"formatlabel\", \"\");\n\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 * Set placeholder text\n */\n set placeholder(placeholder: string) {\n this._placeholder = placeholder;\n }\n\n /**\n */\n get timeInputFormat(): string {\n if (!this.hasTime) {\n return \"\";\n }\n\n const format = this.format;\n\n let 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 return timeFormat;\n }\n\n /**\n */\n get timeReadonlyFormat(): string {\n if (!this.hasTime) {\n return \"\";\n }\n\n return this.timeInputFormat;\n }\n\n /**\n */\n get dateInputValue(): string {\n return typeof this.value === \"string\" && this.dateInputFormat !== \"\"\n ? this.formatUtil.toFormat(this.value, this.dateInputFormat)\n : \"\";\n }\n\n /**\n */\n get timeInputValue(): string {\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 formatValue(value: ?string): string {\n if (value == null || value.toString() === \"\") {\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.hasDate && this.hasTime) {\n const dateTimeReadonlyFormat = `${this.dateReadonlyFormat} ${this.timeReadonlyFormat}`;\n return this.formatUtil.toFormat(value, dateTimeReadonlyFormat);\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 get readonlyvalue(): string {\n if (typeof this.value === \"string\") {\n return this.formatValue(this.value.toString());\n }\n\n return \"\";\n }\n\n /**\n */\n get isAmbiguous(): boolean {\n if (typeof this.value === \"string\") {\n return this.formatUtil.isAmbiguous(this.value);\n }\n return false;\n }\n\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(): string | null {\n return this.getContribution(\"mindate\");\n }\n\n /**\n * Get maximum date\n */\n get maxdate(): string | null {\n return this.getContribution(\"maxdate\");\n }\n\n /**\n * Registers an error that was received from a server response\n */\n addServerError(error: FormErrorAnchor) {\n const { id, message, properties, layouthint } = error;\n if (properties && has(properties, \"format\") && this.formatLabel) {\n properties.format = this.formatLabel;\n }\n\n this._errorCollection.addServerError(id, message, properties, layouthint);\n }\n\n /**\n */\n getFormatConstraint(): IConstraintModel {\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 addConstraints(): ConstraintCollection {\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 /**\n */\n get readonlyWidth(): $Keys<typeof 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 /**\n */\n updateByAttribute(otherAttribute: AttributeType): void {\n this.reset();\n if (otherAttribute instanceof DatetimeAttributeModel) {\n const otherValue = otherAttribute.value;\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\nexport default DatetimeAttributeModel;\n"],"mappings":"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","ignoreList":[]}
@@ -1,16 +1,22 @@
1
1
  import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
2
+ import _trimInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/trim";
2
3
  import { TimestampUtil, DateTimeUtil } from "../../../utils/datetime/DateTimeUtil";
4
+ import { DATETIME_OFFSET_FORMAT, isIncludeTimeOffsetInDateTimes } from "../../../constants";
3
5
  /**
4
6
  */
5
7
  class DatetimeFormatConstraint {
6
8
  /**
7
9
  */
8
10
  constructor(type, format, formatLabel) {
11
+ var _context;
9
12
  _defineProperty(this, "_type", void 0);
10
13
  _defineProperty(this, "_format", void 0);
14
+ _defineProperty(this, "_formatNoOffset", void 0);
11
15
  _defineProperty(this, "_formatLabel", void 0);
16
+ _defineProperty(this, "_id", "Constraint.DateTime.MissingValue");
12
17
  this._type = type;
13
18
  this._format = format;
19
+ this._formatNoOffset = _trimInstanceProperty(_context = format.replace(DATETIME_OFFSET_FORMAT, "")).call(_context);
14
20
  this._formatLabel = formatLabel;
15
21
  }
16
22
 
@@ -23,7 +29,7 @@ class DatetimeFormatConstraint {
23
29
  /**
24
30
  */
25
31
  get id() {
26
- return "Constraint.DateTime.MissingValue";
32
+ return this._id;
27
33
  }
28
34
 
29
35
  /**
@@ -47,12 +53,22 @@ class DatetimeFormatConstraint {
47
53
  /**
48
54
  */
49
55
  get defaultMessage() {
56
+ if (this._id === "Constraint.DateTime.MissingOffset") {
57
+ return "Please select ${daylight-label} or ${standard-label}";
58
+ }
50
59
  return "Date and time should both be entered";
51
60
  }
52
61
 
53
62
  /**
54
63
  */
55
64
  get parameters() {
65
+ if (this._id === "Constraint.DateTime.MissingOffset") {
66
+ const offsets = DateTimeUtil.getTimezoneOffsets();
67
+ return {
68
+ "daylight-label": offsets.daylight?.label,
69
+ "standard-label": offsets.standard?.label
70
+ };
71
+ }
56
72
  return {
57
73
  format: this.formatLabel
58
74
  };
@@ -73,7 +89,20 @@ class DatetimeFormatConstraint {
73
89
  if (!value) {
74
90
  return false;
75
91
  }
76
- return this.formatUtil.hasFormat(value, this.format);
92
+ if (this.formatUtil.hasFormat(value, this.format)) {
93
+ return true;
94
+ }
95
+ if (isIncludeTimeOffsetInDateTimes()) {
96
+ const hasDateTime = this.formatUtil.hasFormat(value, this._formatNoOffset);
97
+ if (!hasDateTime) {
98
+ this._id = "Constraint.DateTime.MissingValue";
99
+ return false;
100
+ } else if (!new RegExp("[+-](0[0-9]|1[0-4]):[0-5][0-9]").test(value)) {
101
+ this._id = "Constraint.DateTime.MissingOffset";
102
+ return false;
103
+ }
104
+ }
105
+ return false;
77
106
  }
78
107
 
79
108
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"DatetimeFormatConstraint.js","names":["TimestampUtil","DateTimeUtil","DatetimeFormatConstraint","constructor","type","format","formatLabel","_defineProperty","_type","_format","_formatLabel","id","hasValidation","defaultMessage","parameters","formatUtil","validate","value","hasFormat","isMandatoryConstraint"],"sources":["../../../../src/models/attributes/input-constraints/DatetimeFormatConstraint.js"],"sourcesContent":["// @flow\nimport {\n TimestampUtil,\n DateTimeUtil,\n} from \"../../../utils/datetime/DateTimeUtil\";\n\nimport type { IConstraintModel } from \"../../types\";\n\n/**\n */\nclass DatetimeFormatConstraint implements IConstraintModel {\n _type: string;\n _format: string;\n _formatLabel: string;\n\n /**\n */\n constructor(type: string, format: string, formatLabel: string) {\n this._type = type;\n this._format = format;\n this._formatLabel = formatLabel;\n }\n\n /**\n */\n get type(): string {\n return this._type;\n }\n\n /**\n */\n get id(): string {\n return \"Constraint.DateTime.MissingValue\";\n }\n\n /**\n */\n get format(): string {\n return this._format;\n }\n\n /**\n */\n get formatLabel(): string {\n return this._formatLabel;\n }\n\n /**\n */\n hasValidation(): boolean {\n return true;\n }\n\n /**\n */\n get defaultMessage(): string {\n return \"Date and time should both be entered\";\n }\n\n /**\n */\n get parameters(): { format: string } {\n return { format: this.formatLabel };\n }\n\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 /**\n */\n validate(value: string): boolean {\n if (!value) {\n return false;\n }\n\n return this.formatUtil.hasFormat(value, this.format);\n }\n\n /**\n */\n get isMandatoryConstraint(): boolean {\n return false;\n }\n}\n\nexport default DatetimeFormatConstraint;\n"],"mappings":";AACA,SACEA,aAAa,EACbC,YAAY,QACP,sCAAsC;AAI7C;AACA;AACA,MAAMC,wBAAwB,CAA6B;EAKzD;AACF;EACEC,WAAWA,CAACC,IAAY,EAAEC,MAAc,EAAEC,WAAmB,EAAE;IAAAC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAC7D,IAAI,CAACC,KAAK,GAAGJ,IAAI;IACjB,IAAI,CAACK,OAAO,GAAGJ,MAAM;IACrB,IAAI,CAACK,YAAY,GAAGJ,WAAW;EACjC;;EAEA;AACF;EACE,IAAIF,IAAIA,CAAA,EAAW;IACjB,OAAO,IAAI,CAACI,KAAK;EACnB;;EAEA;AACF;EACE,IAAIG,EAAEA,CAAA,EAAW;IACf,OAAO,kCAAkC;EAC3C;;EAEA;AACF;EACE,IAAIN,MAAMA,CAAA,EAAW;IACnB,OAAO,IAAI,CAACI,OAAO;EACrB;;EAEA;AACF;EACE,IAAIH,WAAWA,CAAA,EAAW;IACxB,OAAO,IAAI,CAACI,YAAY;EAC1B;;EAEA;AACF;EACEE,aAAaA,CAAA,EAAY;IACvB,OAAO,IAAI;EACb;;EAEA;AACF;EACE,IAAIC,cAAcA,CAAA,EAAW;IAC3B,OAAO,sCAAsC;EAC/C;;EAEA;AACF;EACE,IAAIC,UAAUA,CAAA,EAAuB;IACnC,OAAO;MAAET,MAAM,EAAE,IAAI,CAACC;IAAY,CAAC;EACrC;;EAEA;AACF;EACE,IAAIS,UAAUA,CAAA,EAA+C;IAC3D,IAAI,IAAI,CAACX,IAAI,KAAK,WAAW,EAAE;MAC7B,OAAOJ,aAAa;IACtB;IAEA,OAAOC,YAAY;EACrB;;EAEA;AACF;EACEe,QAAQA,CAACC,KAAa,EAAW;IAC/B,IAAI,CAACA,KAAK,EAAE;MACV,OAAO,KAAK;IACd;IAEA,OAAO,IAAI,CAACF,UAAU,CAACG,SAAS,CAACD,KAAK,EAAE,IAAI,CAACZ,MAAM,CAAC;EACtD;;EAEA;AACF;EACE,IAAIc,qBAAqBA,CAAA,EAAY;IACnC,OAAO,KAAK;EACd;AACF;AAEA,eAAejB,wBAAwB","ignoreList":[]}
1
+ {"version":3,"file":"DatetimeFormatConstraint.js","names":["TimestampUtil","DateTimeUtil","DATETIME_OFFSET_FORMAT","isIncludeTimeOffsetInDateTimes","DatetimeFormatConstraint","constructor","type","format","formatLabel","_context","_defineProperty","_type","_format","_formatNoOffset","_trimInstanceProperty","replace","call","_formatLabel","id","_id","hasValidation","defaultMessage","parameters","offsets","getTimezoneOffsets","daylight","label","standard","formatUtil","validate","value","hasFormat","hasDateTime","RegExp","test","isMandatoryConstraint"],"sources":["../../../../src/models/attributes/input-constraints/DatetimeFormatConstraint.js"],"sourcesContent":["// @flow\nimport {\n TimestampUtil,\n DateTimeUtil,\n} from \"../../../utils/datetime/DateTimeUtil\";\n\nimport {\n DATETIME_OFFSET_FORMAT,\n isIncludeTimeOffsetInDateTimes,\n} from \"../../../constants\";\n\nimport type { IConstraintModel } from \"../../types\";\n\n/**\n */\nclass DatetimeFormatConstraint implements IConstraintModel {\n _type: string;\n _format: string;\n _formatNoOffset: string;\n _formatLabel: string;\n\n _id: string = \"Constraint.DateTime.MissingValue\";\n\n /**\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 /**\n */\n get type(): string {\n return this._type;\n }\n\n /**\n */\n get id(): string {\n return this._id;\n }\n\n /**\n */\n get format(): string {\n return this._format;\n }\n\n /**\n */\n get formatLabel(): string {\n return this._formatLabel;\n }\n\n /**\n */\n hasValidation(): boolean {\n return true;\n }\n\n /**\n */\n get defaultMessage(): string {\n if (this._id === \"Constraint.DateTime.MissingOffset\") {\n return \"Please select ${daylight-label} or ${standard-label}\";\n }\n return \"Date and time should both be entered\";\n }\n\n /**\n */\n get parameters():\n | { format: string }\n | { \"daylight-label\": ?string, \"standard-label\": ?string } {\n if (this._id === \"Constraint.DateTime.MissingOffset\") {\n const offsets = DateTimeUtil.getTimezoneOffsets();\n return {\n \"daylight-label\": offsets.daylight?.label,\n \"standard-label\": offsets.standard?.label,\n };\n }\n return { format: this.formatLabel };\n }\n\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 /**\n */\n validate(value: string): boolean {\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 /**\n */\n get isMandatoryConstraint(): boolean {\n return false;\n }\n}\n\nexport default DatetimeFormatConstraint;\n"],"mappings":"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","ignoreList":[]}
@@ -10,7 +10,7 @@ import { createBrowserHistory } from "history";
10
10
  import configureStore from "../redux/store/configureStore";
11
11
  import rehydrate from "./rehydrate";
12
12
  import { getBasePathModularUI, getBasePathServer, getSetting } from "../constants/Settings";
13
- import { setAllContentInDataSetting, setLoginPreferences } from "../redux/actions/Preferences";
13
+ import { setAllContentInDataSetting, setDateTimeSettings, setLoginPreferences } from "../redux/actions/Preferences";
14
14
  import { showXHRErrorNotification } from "../redux/actions/Notification";
15
15
  import { handleError } from "../redux/actions/Error";
16
16
  import { loginSuccess } from "../redux/actions/SignIn";
@@ -118,6 +118,7 @@ export const setupClient = function () {
118
118
  setModelCatalogEntryDate(store);
119
119
  setAllContentInDataSetting(store.getState());
120
120
  setLoginPreferences(store.getState());
121
+ setDateTimeSettings(store.getState());
121
122
 
122
123
  // load existing cache from other browser tabs
123
124
  Cache.loadOtherBrowserTabs(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","names":["hydrate","render","has","setImmediate","Cache","xhr","createBrowserHistory","configureStore","rehydrate","getBasePathModularUI","getBasePathServer","getSetting","setAllContentInDataSetting","setLoginPreferences","showXHRErrorNotification","handleError","loginSuccess","updateEntryDate","locationChange","replace","JsonParseException","FetchException","Init","handleBeforeRenderHooks","jsx","_jsx","parseDataToJSON","data","JSON","parse","error","getDataFromServer","_context","dataElement","document","querySelector","Error","_trimInstanceProperty","textContent","call","setUnhandledRejectionEvent","store","window","onunhandledrejection","event","detail","errorMessage","reason","message","toString","dispatch","handleRedirectURI","urlParams","_URLSearchParams","location","search","redirectURI","get","url","catch","e","id","LOGIN_PATH","from","pathname","modal","setModelCatalogEntryDate","entryDateFromUrl","hasItem","getItem","setupClient","customReducers","arguments","length","undefined","beforeRenderHooks","contextPath","clear","browserHistory","basename","routerHistory","getState","loadOtherBrowserTabs","response","listen","action","body","className","addContentLoadedEvent","theme","ErrorFallbackComponent","mount","addEventListener","applicationNode","children","mountClient","element","isSSR","client","_ref"],"sources":["../../src/react-client/client.js"],"sourcesContent":["// @flow\n// eslint-disable-next-line react/no-deprecated\nimport { hydrate, render } from \"react-dom\";\n\nimport { has } from \"../utils/helpers/objects\";\nimport setImmediate from \"setimmediate\";\n\nimport Cache from \"../utils/browser/Cache\";\n\nimport xhr from \"../utils/fetch/xhr\";\n\nimport { createBrowserHistory } from \"history\";\nimport configureStore from \"../redux/store/configureStore\";\n\nimport rehydrate from \"./rehydrate\";\nimport {\n getBasePathModularUI,\n getBasePathServer,\n getSetting,\n} from \"../constants/Settings\";\n\nimport {\n setAllContentInDataSetting,\n setLoginPreferences,\n} from \"../redux/actions/Preferences\";\nimport { showXHRErrorNotification } from \"../redux/actions/Notification\";\nimport { handleError } from \"../redux/actions/Error\";\nimport { loginSuccess } from \"../redux/actions/SignIn\";\nimport { updateEntryDate } from \"../redux/actions/ModelCatalog\";\n\nimport { locationChange, replace } from \"../redux/_router/RouterActions\";\n\nimport { JsonParseException, FetchException } from \"../exceptions\";\n\nimport { Init } from \"./Init\";\n\nimport { handleBeforeRenderHooks } from \"../redux/store/beforeRenderHooks\";\n\nimport type {\n ComponentType,\n Element as ReactElement,\n ElementType,\n} from \"react\";\nimport type { Theme } from \"../react-theme/types\";\nimport type { CustomReducers, ReduxStore } from \"../redux/types\";\nimport type { RouterHistory } from \"react-router\";\nimport type { BeforeRenderHook } from \"../redux/store/beforeRenderHooks\";\nimport type { Props as FallbackProps } from \"../react/ErrorBoundaryFallback\";\n\ntype RenderFunction = () => ReactElement<ElementType>;\ntype MountFunction = (\n applicationNode: Element,\n element: ReactElement<ElementType>,\n) => void;\ntype Props = {\n customReducers?: CustomReducers,\n theme?: Theme | Array<Theme>,\n render: RenderFunction,\n mount: MountFunction,\n beforeRenderHooks?: Array<BeforeRenderHook>,\n ErrorFallbackComponent?: ComponentType<FallbackProps>,\n};\n\n/*\n * deserialize serialized data from the server to provide a smooth dehydration.\n */\nconst parseDataToJSON = (data: string) => {\n try {\n return JSON.parse(data);\n } catch (error) {\n throw new JsonParseException(`Error parsing content ${data}`);\n }\n};\n\nconst getDataFromServer = () => {\n const dataElement = document.querySelector(\n 'script[type=\"application/json\"][data-app-state=\"app-json\"]',\n );\n\n if (!dataElement) {\n throw new Error(\"Error loading state, json not found\");\n } else if (dataElement.textContent.trim() === \"\") {\n return {};\n }\n\n return parseDataToJSON(dataElement.textContent);\n};\n\n/**\n */\nexport const setUnhandledRejectionEvent = (store: ReduxStore) => {\n window.onunhandledrejection = (event) => {\n if (event.detail) {\n return setImmediate(() => {\n const errorMessage = event.detail.reason.message.toString();\n\n store.dispatch(showXHRErrorNotification(errorMessage));\n throw event.detail.reason;\n });\n }\n\n return event;\n };\n};\n\n/**\n * The redirectURI querystring parameter is available when the server is redirecting an unauthorized deep link\n * @param store\n */\nconst handleRedirectURI = (store: ReduxStore) => {\n const urlParams = new URLSearchParams(window.location.search);\n const redirectURI = urlParams.get(\"redirectURI\");\n if (redirectURI) {\n xhr({ url: `${getBasePathModularUI()}${redirectURI}` }).catch((e) => {\n if (\n e.id === \"UnauthorizedException\" ||\n e.id === \"Error.NotAuthorized\" ||\n e.id === \"Error.Authentication.Required\" ||\n e.id === \"Error.Authentication.InvalidCredentials\"\n ) {\n const LOGIN_PATH = getSetting(\"LOGIN_PATH\", \"/signin\");\n store.dispatch(\n replace(LOGIN_PATH, {\n from: { pathname: redirectURI },\n modal: false,\n }),\n );\n }\n });\n }\n};\n\n/**\n */\nexport const setModelCatalogEntryDate = (store: ReduxStore) => {\n if (typeof window !== \"undefined\") {\n const entryDateFromUrl = new URLSearchParams(window.location?.search).get(\n \"entryDate\",\n );\n if (entryDateFromUrl) {\n store.dispatch(updateEntryDate(entryDateFromUrl));\n } else if (Cache.hasItem(\"ModelCatalogEntryDate\")) {\n store.dispatch(Cache.getItem(\"ModelCatalogEntryDate\"));\n }\n }\n};\n\n/**\n */\nexport const setupClient = (\n customReducers: CustomReducers = {},\n beforeRenderHooks: ?Array<BeforeRenderHook>,\n): { store: ReduxStore, routerHistory: RouterHistory } => {\n if (typeof window.contextPath === \"undefined\") {\n throw new Error(\"Missing contextPath on window object\");\n }\n\n const data = getDataFromServer();\n\n // remove all resources from cache\n Cache.clear(\"^res:\");\n\n // $FlowExpectedError\n const browserHistory: RouterHistory = createBrowserHistory({\n basename: getBasePathServer(),\n });\n const { routerHistory, store } = configureStore(\n browserHistory,\n customReducers,\n rehydrate(data),\n );\n\n handleRedirectURI(store);\n setModelCatalogEntryDate(store);\n\n setAllContentInDataSetting(store.getState());\n setLoginPreferences(store.getState());\n\n // load existing cache from other browser tabs\n Cache.loadOtherBrowserTabs(() => {\n if (Cache.getItem(\"auth\")) {\n store.dispatch(loginSuccess());\n }\n });\n\n if (has(data, \"error.name\")) {\n const error = new FetchException(data?.error?.response);\n store.dispatch(handleError(error));\n }\n\n if (Cache.getItem(\"auth\")) {\n store.dispatch(loginSuccess());\n }\n\n // listen to history change and update the redux router store\n routerHistory.listen((location, action) => {\n store.dispatch(locationChange(location, action));\n });\n\n setUnhandledRejectionEvent(store);\n\n if (document.body) {\n document.body.className = \"js\";\n }\n\n if (beforeRenderHooks) {\n handleBeforeRenderHooks(beforeRenderHooks, { store });\n }\n\n return { store, routerHistory };\n};\n\n/**\n */\nexport const addContentLoadedEvent = (\n store: ReduxStore,\n routerHistory: RouterHistory,\n theme?: Theme | Array<Theme>,\n render: RenderFunction,\n ErrorFallbackComponent?: ComponentType<FallbackProps>,\n mount: MountFunction,\n) => {\n window.addEventListener(\"DOMContentLoaded\", () => {\n const applicationNode = document.querySelector(\"#application\");\n if (!applicationNode) {\n throw new Error(\n \"No DOM element with id application found to attach client to\",\n );\n }\n\n mount(\n applicationNode,\n <Init\n store={store}\n routerHistory={routerHistory}\n contextPath={window.contextPath}\n theme={theme}\n ErrorFallbackComponent={ErrorFallbackComponent}\n >\n {render()}\n </Init>,\n );\n });\n};\n\n/**\n */\nconst mountClient = (\n applicationNode: Element,\n element: ReactElement<ElementType>,\n) => {\n const isSSR = applicationNode.querySelector(\".application\");\n if (isSSR) {\n hydrate(element, applicationNode);\n } else {\n render(element, applicationNode);\n }\n};\n\n/**\n * Mount the webapplication to the DOM, setup redux store and caches, add unhandledRejectionEvent, used client side when JavaScript is enabled.\n */\nexport const client = ({\n customReducers,\n theme,\n render,\n beforeRenderHooks,\n ErrorFallbackComponent,\n mount,\n}: Props) => {\n const { store, routerHistory } = setupClient(\n customReducers,\n beforeRenderHooks,\n );\n\n addContentLoadedEvent(\n store,\n routerHistory,\n theme,\n render,\n ErrorFallbackComponent,\n mount ?? mountClient,\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"client.js","names":["hydrate","render","has","setImmediate","Cache","xhr","createBrowserHistory","configureStore","rehydrate","getBasePathModularUI","getBasePathServer","getSetting","setAllContentInDataSetting","setDateTimeSettings","setLoginPreferences","showXHRErrorNotification","handleError","loginSuccess","updateEntryDate","locationChange","replace","JsonParseException","FetchException","Init","handleBeforeRenderHooks","jsx","_jsx","parseDataToJSON","data","JSON","parse","error","getDataFromServer","_context","dataElement","document","querySelector","Error","_trimInstanceProperty","textContent","call","setUnhandledRejectionEvent","store","window","onunhandledrejection","event","detail","errorMessage","reason","message","toString","dispatch","handleRedirectURI","urlParams","_URLSearchParams","location","search","redirectURI","get","url","catch","e","id","LOGIN_PATH","from","pathname","modal","setModelCatalogEntryDate","entryDateFromUrl","hasItem","getItem","setupClient","customReducers","arguments","length","undefined","beforeRenderHooks","contextPath","clear","browserHistory","basename","routerHistory","getState","loadOtherBrowserTabs","response","listen","action","body","className","addContentLoadedEvent","theme","ErrorFallbackComponent","mount","addEventListener","applicationNode","children","mountClient","element","isSSR","client","_ref"],"sources":["../../src/react-client/client.js"],"sourcesContent":["// @flow\n// eslint-disable-next-line react/no-deprecated\nimport { hydrate, render } from \"react-dom\";\n\nimport { has } from \"../utils/helpers/objects\";\nimport setImmediate from \"setimmediate\";\n\nimport Cache from \"../utils/browser/Cache\";\n\nimport xhr from \"../utils/fetch/xhr\";\n\nimport { createBrowserHistory } from \"history\";\nimport configureStore from \"../redux/store/configureStore\";\n\nimport rehydrate from \"./rehydrate\";\nimport {\n getBasePathModularUI,\n getBasePathServer,\n getSetting,\n} from \"../constants/Settings\";\n\nimport {\n setAllContentInDataSetting,\n setDateTimeSettings,\n setLoginPreferences,\n} from \"../redux/actions/Preferences\";\nimport { showXHRErrorNotification } from \"../redux/actions/Notification\";\nimport { handleError } from \"../redux/actions/Error\";\nimport { loginSuccess } from \"../redux/actions/SignIn\";\nimport { updateEntryDate } from \"../redux/actions/ModelCatalog\";\n\nimport { locationChange, replace } from \"../redux/_router/RouterActions\";\n\nimport { JsonParseException, FetchException } from \"../exceptions\";\n\nimport { Init } from \"./Init\";\n\nimport { handleBeforeRenderHooks } from \"../redux/store/beforeRenderHooks\";\n\nimport type {\n ComponentType,\n Element as ReactElement,\n ElementType,\n} from \"react\";\nimport type { Theme } from \"../react-theme/types\";\nimport type { CustomReducers, ReduxStore } from \"../redux/types\";\nimport type { RouterHistory } from \"react-router\";\nimport type { BeforeRenderHook } from \"../redux/store/beforeRenderHooks\";\nimport type { Props as FallbackProps } from \"../react/ErrorBoundaryFallback\";\n\ntype RenderFunction = () => ReactElement<ElementType>;\ntype MountFunction = (\n applicationNode: Element,\n element: ReactElement<ElementType>,\n) => void;\ntype Props = {\n customReducers?: CustomReducers,\n theme?: Theme | Array<Theme>,\n render: RenderFunction,\n mount: MountFunction,\n beforeRenderHooks?: Array<BeforeRenderHook>,\n ErrorFallbackComponent?: ComponentType<FallbackProps>,\n};\n\n/*\n * deserialize serialized data from the server to provide a smooth dehydration.\n */\nconst parseDataToJSON = (data: string) => {\n try {\n return JSON.parse(data);\n } catch (error) {\n throw new JsonParseException(`Error parsing content ${data}`);\n }\n};\n\nconst getDataFromServer = () => {\n const dataElement = document.querySelector(\n 'script[type=\"application/json\"][data-app-state=\"app-json\"]',\n );\n\n if (!dataElement) {\n throw new Error(\"Error loading state, json not found\");\n } else if (dataElement.textContent.trim() === \"\") {\n return {};\n }\n\n return parseDataToJSON(dataElement.textContent);\n};\n\n/**\n */\nexport const setUnhandledRejectionEvent = (store: ReduxStore) => {\n window.onunhandledrejection = (event) => {\n if (event.detail) {\n return setImmediate(() => {\n const errorMessage = event.detail.reason.message.toString();\n\n store.dispatch(showXHRErrorNotification(errorMessage));\n throw event.detail.reason;\n });\n }\n\n return event;\n };\n};\n\n/**\n * The redirectURI querystring parameter is available when the server is redirecting an unauthorized deep link\n * @param store\n */\nconst handleRedirectURI = (store: ReduxStore) => {\n const urlParams = new URLSearchParams(window.location.search);\n const redirectURI = urlParams.get(\"redirectURI\");\n if (redirectURI) {\n xhr({ url: `${getBasePathModularUI()}${redirectURI}` }).catch((e) => {\n if (\n e.id === \"UnauthorizedException\" ||\n e.id === \"Error.NotAuthorized\" ||\n e.id === \"Error.Authentication.Required\" ||\n e.id === \"Error.Authentication.InvalidCredentials\"\n ) {\n const LOGIN_PATH = getSetting(\"LOGIN_PATH\", \"/signin\");\n store.dispatch(\n replace(LOGIN_PATH, {\n from: { pathname: redirectURI },\n modal: false,\n }),\n );\n }\n });\n }\n};\n\n/**\n */\nexport const setModelCatalogEntryDate = (store: ReduxStore) => {\n if (typeof window !== \"undefined\") {\n const entryDateFromUrl = new URLSearchParams(window.location?.search).get(\n \"entryDate\",\n );\n if (entryDateFromUrl) {\n store.dispatch(updateEntryDate(entryDateFromUrl));\n } else if (Cache.hasItem(\"ModelCatalogEntryDate\")) {\n store.dispatch(Cache.getItem(\"ModelCatalogEntryDate\"));\n }\n }\n};\n\n/**\n */\nexport const setupClient = (\n customReducers: CustomReducers = {},\n beforeRenderHooks: ?Array<BeforeRenderHook>,\n): { store: ReduxStore, routerHistory: RouterHistory } => {\n if (typeof window.contextPath === \"undefined\") {\n throw new Error(\"Missing contextPath on window object\");\n }\n\n const data = getDataFromServer();\n\n // remove all resources from cache\n Cache.clear(\"^res:\");\n\n // $FlowExpectedError\n const browserHistory: RouterHistory = createBrowserHistory({\n basename: getBasePathServer(),\n });\n const { routerHistory, store } = configureStore(\n browserHistory,\n customReducers,\n rehydrate(data),\n );\n\n handleRedirectURI(store);\n setModelCatalogEntryDate(store);\n\n setAllContentInDataSetting(store.getState());\n setLoginPreferences(store.getState());\n setDateTimeSettings(store.getState());\n\n // load existing cache from other browser tabs\n Cache.loadOtherBrowserTabs(() => {\n if (Cache.getItem(\"auth\")) {\n store.dispatch(loginSuccess());\n }\n });\n\n if (has(data, \"error.name\")) {\n const error = new FetchException(data?.error?.response);\n store.dispatch(handleError(error));\n }\n\n if (Cache.getItem(\"auth\")) {\n store.dispatch(loginSuccess());\n }\n\n // listen to history change and update the redux router store\n routerHistory.listen((location, action) => {\n store.dispatch(locationChange(location, action));\n });\n\n setUnhandledRejectionEvent(store);\n\n if (document.body) {\n document.body.className = \"js\";\n }\n\n if (beforeRenderHooks) {\n handleBeforeRenderHooks(beforeRenderHooks, { store });\n }\n\n return { store, routerHistory };\n};\n\n/**\n */\nexport const addContentLoadedEvent = (\n store: ReduxStore,\n routerHistory: RouterHistory,\n theme?: Theme | Array<Theme>,\n render: RenderFunction,\n ErrorFallbackComponent?: ComponentType<FallbackProps>,\n mount: MountFunction,\n) => {\n window.addEventListener(\"DOMContentLoaded\", () => {\n const applicationNode = document.querySelector(\"#application\");\n if (!applicationNode) {\n throw new Error(\n \"No DOM element with id application found to attach client to\",\n );\n }\n\n mount(\n applicationNode,\n <Init\n store={store}\n routerHistory={routerHistory}\n contextPath={window.contextPath}\n theme={theme}\n ErrorFallbackComponent={ErrorFallbackComponent}\n >\n {render()}\n </Init>,\n );\n });\n};\n\n/**\n */\nconst mountClient = (\n applicationNode: Element,\n element: ReactElement<ElementType>,\n) => {\n const isSSR = applicationNode.querySelector(\".application\");\n if (isSSR) {\n hydrate(element, applicationNode);\n } else {\n render(element, applicationNode);\n }\n};\n\n/**\n * Mount the webapplication to the DOM, setup redux store and caches, add unhandledRejectionEvent, used client side when JavaScript is enabled.\n */\nexport const client = ({\n customReducers,\n theme,\n render,\n beforeRenderHooks,\n ErrorFallbackComponent,\n mount,\n}: Props) => {\n const { store, routerHistory } = setupClient(\n customReducers,\n beforeRenderHooks,\n );\n\n addContentLoadedEvent(\n store,\n routerHistory,\n theme,\n render,\n ErrorFallbackComponent,\n mount ?? mountClient,\n );\n};\n"],"mappings":"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","ignoreList":[]}