@beinformed/ui 1.65.23 → 1.65.25

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 (299) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/esm/builder/mergeLayoutHintConfigurations.js +6 -5
  3. package/esm/builder/mergeLayoutHintConfigurations.js.flow +11 -5
  4. package/esm/builder/mergeLayoutHintConfigurations.js.map +1 -1
  5. package/esm/constants/Settings.js +4 -1
  6. package/esm/constants/Settings.js.flow +3 -3
  7. package/esm/constants/Settings.js.map +1 -1
  8. package/esm/hooks/__tests__/useAuthentication.spec.js.flow +100 -132
  9. package/esm/hooks/useAuthentication.js +21 -11
  10. package/esm/hooks/useAuthentication.js.flow +29 -26
  11. package/esm/hooks/useAuthentication.js.map +1 -1
  12. package/esm/hooks/useModelCatalog.js +1 -1
  13. package/esm/hooks/useModelCatalog.js.flow +1 -1
  14. package/esm/hooks/useModelCatalog.js.map +1 -1
  15. package/esm/hooks/useModularUI.js +1 -1
  16. package/esm/hooks/useModularUI.js.flow +1 -1
  17. package/esm/hooks/useModularUI.js.map +1 -1
  18. package/esm/i18n/Locale.js +3 -1
  19. package/esm/i18n/Locale.js.flow +2 -2
  20. package/esm/i18n/Locale.js.map +1 -1
  21. package/esm/models/actions/ActionCollection.js +1 -1
  22. package/esm/models/actions/ActionCollection.js.flow +3 -3
  23. package/esm/models/actions/ActionCollection.js.map +1 -1
  24. package/esm/models/application/ApplicationModel.js +6 -1
  25. package/esm/models/application/ApplicationModel.js.flow +7 -2
  26. package/esm/models/application/ApplicationModel.js.map +1 -1
  27. package/esm/models/attributes/ChoiceAttributeModel.js +3 -5
  28. package/esm/models/attributes/ChoiceAttributeModel.js.flow +3 -5
  29. package/esm/models/attributes/ChoiceAttributeModel.js.map +1 -1
  30. package/esm/models/attributes/CompositeAttributeModel.js +1 -1
  31. package/esm/models/attributes/CompositeAttributeModel.js.flow +1 -1
  32. package/esm/models/attributes/CompositeAttributeModel.js.map +1 -1
  33. package/esm/models/attributes/NumberAttributeModel.js +3 -1
  34. package/esm/models/attributes/NumberAttributeModel.js.flow +2 -1
  35. package/esm/models/attributes/NumberAttributeModel.js.map +1 -1
  36. package/esm/models/attributes/StringAttributeModel.js +5 -4
  37. package/esm/models/attributes/StringAttributeModel.js.flow +4 -4
  38. package/esm/models/attributes/StringAttributeModel.js.map +1 -1
  39. package/esm/models/attributes/input-constraints/DatetimeFormatConstraint.js +1 -1
  40. package/esm/models/attributes/input-constraints/DatetimeFormatConstraint.js.flow +1 -1
  41. package/esm/models/attributes/input-constraints/DatetimeFormatConstraint.js.map +1 -1
  42. package/esm/models/base/BaseModel.js +6 -5
  43. package/esm/models/base/BaseModel.js.flow +7 -5
  44. package/esm/models/base/BaseModel.js.map +1 -1
  45. package/esm/models/base/ResourceModel.js +6 -7
  46. package/esm/models/base/ResourceModel.js.flow +4 -4
  47. package/esm/models/base/ResourceModel.js.map +1 -1
  48. package/esm/models/concepts/ConceptDetailModel.js +16 -16
  49. package/esm/models/concepts/ConceptDetailModel.js.flow +16 -19
  50. package/esm/models/concepts/ConceptDetailModel.js.map +1 -1
  51. package/esm/models/concepts/SourceReferenceCollection.js +1 -1
  52. package/esm/models/concepts/SourceReferenceCollection.js.flow +1 -2
  53. package/esm/models/concepts/SourceReferenceCollection.js.map +1 -1
  54. package/esm/models/content/ContentLinkModel.js +6 -6
  55. package/esm/models/content/ContentLinkModel.js.flow +6 -6
  56. package/esm/models/content/ContentLinkModel.js.map +1 -1
  57. package/esm/models/filters/BaseFilterModel.js +3 -5
  58. package/esm/models/filters/BaseFilterModel.js.flow +4 -5
  59. package/esm/models/filters/BaseFilterModel.js.map +1 -1
  60. package/esm/models/filters/StringFilterModel.js +3 -2
  61. package/esm/models/filters/StringFilterModel.js.flow +2 -2
  62. package/esm/models/filters/StringFilterModel.js.map +1 -1
  63. package/esm/models/form/FormModel.js +1 -1
  64. package/esm/models/form/FormModel.js.flow +1 -2
  65. package/esm/models/form/FormModel.js.map +1 -1
  66. package/esm/models/form/FormObjectModel.js +1 -1
  67. package/esm/models/form/FormObjectModel.js.flow +2 -3
  68. package/esm/models/form/FormObjectModel.js.map +1 -1
  69. package/esm/models/href/Href.js +2 -2
  70. package/esm/models/href/Href.js.flow +2 -2
  71. package/esm/models/href/Href.js.map +1 -1
  72. package/esm/models/index.js +2 -2
  73. package/esm/models/index.js.flow +1 -2
  74. package/esm/models/index.js.map +1 -1
  75. package/esm/models/links/normalizeLinkJSON.js +1 -1
  76. package/esm/models/links/normalizeLinkJSON.js.flow +1 -1
  77. package/esm/models/links/normalizeLinkJSON.js.map +1 -1
  78. package/esm/modularui/Authenticate.js +7 -2
  79. package/esm/modularui/Authenticate.js.flow +4 -2
  80. package/esm/modularui/Authenticate.js.map +1 -1
  81. package/esm/modularui/ModularUIRequest.js +2 -5
  82. package/esm/modularui/ModularUIRequest.js.flow +2 -6
  83. package/esm/modularui/ModularUIRequest.js.map +1 -1
  84. package/esm/modularui/UploadRequest.js +3 -1
  85. package/esm/modularui/UploadRequest.js.flow +3 -1
  86. package/esm/modularui/UploadRequest.js.map +1 -1
  87. package/esm/react-client/client.js +22 -10
  88. package/esm/react-client/client.js.flow +17 -11
  89. package/esm/react-client/client.js.map +1 -1
  90. package/esm/react-client/contextPath.js +3 -1
  91. package/esm/react-client/contextPath.js.flow +2 -1
  92. package/esm/react-client/contextPath.js.map +1 -1
  93. package/esm/redux/_i18n/I18nActions.js.flow +1 -1
  94. package/esm/redux/_i18n/I18nActions.js.map +1 -1
  95. package/esm/redux/_i18n/I18nReducer.js +1 -4
  96. package/esm/redux/_i18n/I18nReducer.js.flow +1 -4
  97. package/esm/redux/_i18n/I18nReducer.js.map +1 -1
  98. package/esm/redux/_modularui/ModularUIActions.js +1 -4
  99. package/esm/redux/_modularui/ModularUIActions.js.flow +3 -7
  100. package/esm/redux/_modularui/ModularUIActions.js.map +1 -1
  101. package/esm/redux/_modularui/ModularUIConnector.js +2 -5
  102. package/esm/redux/_modularui/ModularUIConnector.js.flow +2 -2
  103. package/esm/redux/_modularui/ModularUIConnector.js.map +1 -1
  104. package/esm/redux/_modularui/ModularUIReducer.js +6 -3
  105. package/esm/redux/_modularui/ModularUIReducer.js.flow +2 -2
  106. package/esm/redux/_modularui/ModularUIReducer.js.map +1 -1
  107. package/esm/redux/_modularui/ModularUISelectors.js +12 -18
  108. package/esm/redux/_modularui/ModularUISelectors.js.flow +13 -14
  109. package/esm/redux/_modularui/ModularUISelectors.js.map +1 -1
  110. package/esm/redux/_modularui/withModularUI.js.flow +2 -2
  111. package/esm/redux/_modularui/withModularUI.js.map +1 -1
  112. package/esm/redux/actions/Application.js +32 -4
  113. package/esm/redux/actions/Application.js.flow +34 -5
  114. package/esm/redux/actions/Application.js.map +1 -1
  115. package/esm/redux/actions/Authorization.js +23 -26
  116. package/esm/redux/actions/Authorization.js.flow +30 -30
  117. package/esm/redux/actions/Authorization.js.map +1 -1
  118. package/esm/redux/actions/Error.js +2 -0
  119. package/esm/redux/actions/Error.js.flow +5 -4
  120. package/esm/redux/actions/Error.js.map +1 -1
  121. package/esm/redux/actions/Form.js.flow +1 -1
  122. package/esm/redux/actions/Form.js.map +1 -1
  123. package/esm/redux/actions/FormAttributeSet.js.flow +1 -1
  124. package/esm/redux/actions/FormAttributeSet.js.map +1 -1
  125. package/esm/redux/actions/FormAutosave.js.flow +1 -1
  126. package/esm/redux/actions/FormAutosave.js.map +1 -1
  127. package/esm/redux/actions/FormAutosubmit.js.flow +1 -1
  128. package/esm/redux/actions/FormAutosubmit.js.map +1 -1
  129. package/esm/redux/actions/FormAutoupdate.js.flow +1 -1
  130. package/esm/redux/actions/FormAutoupdate.js.map +1 -1
  131. package/esm/redux/actions/FormValidations.js.flow +1 -1
  132. package/esm/redux/actions/FormValidations.js.map +1 -1
  133. package/esm/redux/actions/Notification.js.flow +3 -3
  134. package/esm/redux/actions/Notification.js.map +1 -1
  135. package/esm/redux/actions/Preferences.js +4 -4
  136. package/esm/redux/actions/Preferences.js.flow +6 -10
  137. package/esm/redux/actions/Preferences.js.map +1 -1
  138. package/esm/redux/actions/SignIn.js +2 -4
  139. package/esm/redux/actions/SignIn.js.flow +4 -7
  140. package/esm/redux/actions/SignIn.js.map +1 -1
  141. package/esm/redux/actions/SignOut.js.flow +1 -1
  142. package/esm/redux/actions/SignOut.js.map +1 -1
  143. package/esm/redux/actions/__tests__/Application.spec.js.flow +67 -29
  144. package/esm/redux/actions/__tests__/Authorization.spec.js.flow +77 -83
  145. package/esm/redux/connectors/Form.js.flow +2 -2
  146. package/esm/redux/connectors/Form.js.map +1 -1
  147. package/esm/redux/connectors/FormAttributeSet.js.flow +2 -5
  148. package/esm/redux/connectors/FormAttributeSet.js.map +1 -1
  149. package/esm/redux/connectors/Progress.js.flow +1 -1
  150. package/esm/redux/connectors/Progress.js.map +1 -1
  151. package/esm/redux/connectors/SignIn.js.flow +1 -1
  152. package/esm/redux/connectors/SignIn.js.map +1 -1
  153. package/esm/redux/connectors/SignOut.js.flow +1 -1
  154. package/esm/redux/connectors/SignOut.js.map +1 -1
  155. package/esm/redux/reducers/ModelCatalogReducer.js +7 -9
  156. package/esm/redux/reducers/ModelCatalogReducer.js.flow +8 -9
  157. package/esm/redux/reducers/ModelCatalogReducer.js.map +1 -1
  158. package/esm/redux/store/configureStore.js +9 -2
  159. package/esm/redux/store/configureStore.js.flow +13 -2
  160. package/esm/redux/store/configureStore.js.map +1 -1
  161. package/esm/redux/types.js.flow +33 -5
  162. package/esm/redux/types.js.map +1 -1
  163. package/esm/utils/browser/Cache.js +3 -1
  164. package/esm/utils/browser/Cache.js.flow +2 -1
  165. package/esm/utils/browser/Cache.js.map +1 -1
  166. package/esm/utils/browser/__tests__/Cookies.spec.js.flow +2 -1
  167. package/esm/utils/datetime/DateTimeUtil.js +6 -5
  168. package/esm/utils/datetime/DateTimeUtil.js.flow +5 -11
  169. package/esm/utils/datetime/DateTimeUtil.js.map +1 -1
  170. package/esm/utils/datetime/__tests__/DateTimeFormat.spec.js.flow +0 -6
  171. package/esm/utils/fetch/universalFetch.js +7 -8
  172. package/esm/utils/fetch/universalFetch.js.flow +13 -14
  173. package/esm/utils/fetch/universalFetch.js.map +1 -1
  174. package/esm/utils/fetch/xhr.js +2 -5
  175. package/esm/utils/fetch/xhr.js.flow +2 -6
  176. package/esm/utils/fetch/xhr.js.map +1 -1
  177. package/esm/utils/helpers/createHref.js +2 -1
  178. package/esm/utils/helpers/createHref.js.flow +1 -1
  179. package/esm/utils/helpers/createHref.js.map +1 -1
  180. package/esm/utils/helpers/createUUID.js +2 -1
  181. package/esm/utils/helpers/createUUID.js.flow +1 -1
  182. package/esm/utils/helpers/createUUID.js.map +1 -1
  183. package/esm/utils/number/parseNumbers.js +4 -3
  184. package/esm/utils/number/parseNumbers.js.flow +3 -3
  185. package/esm/utils/number/parseNumbers.js.map +1 -1
  186. package/lib/builder/mergeLayoutHintConfigurations.js +6 -5
  187. package/lib/builder/mergeLayoutHintConfigurations.js.map +1 -1
  188. package/lib/constants/Settings.js +4 -1
  189. package/lib/constants/Settings.js.map +1 -1
  190. package/lib/hooks/useAuthentication.js +21 -11
  191. package/lib/hooks/useAuthentication.js.map +1 -1
  192. package/lib/hooks/useModelCatalog.js +1 -1
  193. package/lib/hooks/useModelCatalog.js.map +1 -1
  194. package/lib/hooks/useModularUI.js +1 -1
  195. package/lib/hooks/useModularUI.js.map +1 -1
  196. package/lib/i18n/Locale.js +3 -1
  197. package/lib/i18n/Locale.js.map +1 -1
  198. package/lib/models/actions/ActionCollection.js +1 -1
  199. package/lib/models/actions/ActionCollection.js.map +1 -1
  200. package/lib/models/application/ApplicationModel.js +6 -1
  201. package/lib/models/application/ApplicationModel.js.map +1 -1
  202. package/lib/models/attributes/ChoiceAttributeModel.js +3 -5
  203. package/lib/models/attributes/ChoiceAttributeModel.js.map +1 -1
  204. package/lib/models/attributes/CompositeAttributeModel.js +1 -1
  205. package/lib/models/attributes/CompositeAttributeModel.js.map +1 -1
  206. package/lib/models/attributes/NumberAttributeModel.js +3 -1
  207. package/lib/models/attributes/NumberAttributeModel.js.map +1 -1
  208. package/lib/models/attributes/StringAttributeModel.js +5 -4
  209. package/lib/models/attributes/StringAttributeModel.js.map +1 -1
  210. package/lib/models/attributes/input-constraints/DatetimeFormatConstraint.js +1 -1
  211. package/lib/models/attributes/input-constraints/DatetimeFormatConstraint.js.map +1 -1
  212. package/lib/models/base/BaseModel.js +6 -5
  213. package/lib/models/base/BaseModel.js.map +1 -1
  214. package/lib/models/base/ResourceModel.js +6 -7
  215. package/lib/models/base/ResourceModel.js.map +1 -1
  216. package/lib/models/concepts/ConceptDetailModel.js +16 -16
  217. package/lib/models/concepts/ConceptDetailModel.js.map +1 -1
  218. package/lib/models/concepts/SourceReferenceCollection.js +1 -1
  219. package/lib/models/concepts/SourceReferenceCollection.js.map +1 -1
  220. package/lib/models/content/ContentLinkModel.js +6 -6
  221. package/lib/models/content/ContentLinkModel.js.map +1 -1
  222. package/lib/models/filters/BaseFilterModel.js +3 -5
  223. package/lib/models/filters/BaseFilterModel.js.map +1 -1
  224. package/lib/models/filters/StringFilterModel.js +3 -2
  225. package/lib/models/filters/StringFilterModel.js.map +1 -1
  226. package/lib/models/form/FormModel.js +1 -1
  227. package/lib/models/form/FormModel.js.map +1 -1
  228. package/lib/models/form/FormObjectModel.js +1 -1
  229. package/lib/models/form/FormObjectModel.js.map +1 -1
  230. package/lib/models/href/Href.js +2 -2
  231. package/lib/models/href/Href.js.map +1 -1
  232. package/lib/models/index.js.map +1 -1
  233. package/lib/models/links/normalizeLinkJSON.js +1 -1
  234. package/lib/models/links/normalizeLinkJSON.js.map +1 -1
  235. package/lib/modularui/Authenticate.js +7 -2
  236. package/lib/modularui/Authenticate.js.map +1 -1
  237. package/lib/modularui/ModularUIRequest.js +2 -5
  238. package/lib/modularui/ModularUIRequest.js.map +1 -1
  239. package/lib/modularui/UploadRequest.js +3 -1
  240. package/lib/modularui/UploadRequest.js.map +1 -1
  241. package/lib/react-client/client.js +22 -10
  242. package/lib/react-client/client.js.map +1 -1
  243. package/lib/react-client/contextPath.js +4 -1
  244. package/lib/react-client/contextPath.js.map +1 -1
  245. package/lib/redux/_i18n/I18nActions.js.map +1 -1
  246. package/lib/redux/_i18n/I18nReducer.js +1 -4
  247. package/lib/redux/_i18n/I18nReducer.js.map +1 -1
  248. package/lib/redux/_modularui/ModularUIActions.js +1 -4
  249. package/lib/redux/_modularui/ModularUIActions.js.map +1 -1
  250. package/lib/redux/_modularui/ModularUIConnector.js +2 -5
  251. package/lib/redux/_modularui/ModularUIConnector.js.map +1 -1
  252. package/lib/redux/_modularui/ModularUIReducer.js +6 -3
  253. package/lib/redux/_modularui/ModularUIReducer.js.map +1 -1
  254. package/lib/redux/_modularui/ModularUISelectors.js +12 -18
  255. package/lib/redux/_modularui/ModularUISelectors.js.map +1 -1
  256. package/lib/redux/_modularui/withModularUI.js.map +1 -1
  257. package/lib/redux/actions/Application.js +33 -4
  258. package/lib/redux/actions/Application.js.map +1 -1
  259. package/lib/redux/actions/Authorization.js +23 -26
  260. package/lib/redux/actions/Authorization.js.map +1 -1
  261. package/lib/redux/actions/Error.js +2 -0
  262. package/lib/redux/actions/Error.js.map +1 -1
  263. package/lib/redux/actions/Form.js.map +1 -1
  264. package/lib/redux/actions/FormAttributeSet.js.map +1 -1
  265. package/lib/redux/actions/FormAutosave.js.map +1 -1
  266. package/lib/redux/actions/FormAutosubmit.js.map +1 -1
  267. package/lib/redux/actions/FormAutoupdate.js.map +1 -1
  268. package/lib/redux/actions/FormValidations.js.map +1 -1
  269. package/lib/redux/actions/Notification.js.map +1 -1
  270. package/lib/redux/actions/Preferences.js +4 -4
  271. package/lib/redux/actions/Preferences.js.map +1 -1
  272. package/lib/redux/actions/SignIn.js +2 -4
  273. package/lib/redux/actions/SignIn.js.map +1 -1
  274. package/lib/redux/actions/SignOut.js.map +1 -1
  275. package/lib/redux/connectors/Form.js.map +1 -1
  276. package/lib/redux/connectors/FormAttributeSet.js.map +1 -1
  277. package/lib/redux/connectors/Progress.js.map +1 -1
  278. package/lib/redux/connectors/SignIn.js.map +1 -1
  279. package/lib/redux/connectors/SignOut.js.map +1 -1
  280. package/lib/redux/reducers/ModelCatalogReducer.js +7 -9
  281. package/lib/redux/reducers/ModelCatalogReducer.js.map +1 -1
  282. package/lib/redux/store/configureStore.js +9 -2
  283. package/lib/redux/store/configureStore.js.map +1 -1
  284. package/lib/redux/types.js.map +1 -1
  285. package/lib/utils/browser/Cache.js +3 -1
  286. package/lib/utils/browser/Cache.js.map +1 -1
  287. package/lib/utils/datetime/DateTimeUtil.js +6 -5
  288. package/lib/utils/datetime/DateTimeUtil.js.map +1 -1
  289. package/lib/utils/fetch/universalFetch.js +7 -8
  290. package/lib/utils/fetch/universalFetch.js.map +1 -1
  291. package/lib/utils/fetch/xhr.js +2 -5
  292. package/lib/utils/fetch/xhr.js.map +1 -1
  293. package/lib/utils/helpers/createHref.js +2 -1
  294. package/lib/utils/helpers/createHref.js.map +1 -1
  295. package/lib/utils/helpers/createUUID.js +3 -1
  296. package/lib/utils/helpers/createUUID.js.map +1 -1
  297. package/lib/utils/number/parseNumbers.js +4 -3
  298. package/lib/utils/number/parseNumbers.js.map +1 -1
  299. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"ModularUISelectors.js","names":["createSelector","createSelectorCreator","defaultMemoize","has","Href","ContentModel","ContentTOCModel","ApplicationModel","TabModel","CaseViewModel","FormModel","MODULARUI_STATUS","getAllModelsByInstance","state","instance","locale","i18n","modularui","_context","_context2","_mapInstanceProperty","_filterInstanceProperty","_Object$keys","call","key","model","getFirstModelByInstance","_context3","_findInstanceProperty","getActiveModelByInstance","location","getLocation","_context4","_startsWithInstanceProperty","selfhref","path","getApplication","getTab","getCaseView","getForm","modelByHref","href","_context5","findHref","modelConfigKey","equals","keyByHref","_context6","allKeysByHref","_context7","router","pathname","getModels","models","forEach","modelKey","modelEntry","label","type","modelInfo","selfContentLink","push","getActiveModels","value","other","_JSON$stringify","contextModels","locationParts","split","reduce","accumulator","current","comparePath","decodeURIComponent","replace","foundEntry","encodedHref","toString","getPreference","preferenceName","preferences","getModelsByType","_context8","_context9","getAllFinishedModels","_context0","_context1","status","FINISHED"],"sources":["../../../src/redux/_modularui/ModularUISelectors.js"],"sourcesContent":["// @flow\nimport {\n createSelector,\n createSelectorCreator,\n defaultMemoize,\n} from \"reselect\";\nimport { has } from \"../../utils/helpers/objects\";\n\nimport Href from \"../../models/href/Href\";\nimport ContentModel from \"../../models/content/ContentModel\";\nimport ContentTOCModel from \"../../models/content/ContentTOCModel\";\nimport ApplicationModel from \"../../models/application/ApplicationModel\";\nimport TabModel from \"../../models/tab/TabModel\";\nimport CaseViewModel from \"../../models/caseview/CaseViewModel\";\nimport FormModel from \"../../models/form/FormModel\";\n\nimport type { ReduxState, PreferenceValue } from \"../types\";\nimport type { ModularUIModel } from \"../../models/types\";\nimport { MODULARUI_STATUS } from \"../../constants\";\n\n/**\n */\nexport const getAllModelsByInstance = <T>(\n state: ReduxState,\n instance: Class<T>,\n): Array<ModularUIModel> => {\n const locale = state?.i18n?.locale || \"en\";\n const modularui = state?.modularui;\n\n if (modularui) {\n return Object.keys(modularui)\n .filter((key) => {\n const { model } = modularui[key];\n return model instanceof instance && model.locale === locale;\n })\n .map((key) => modularui[key].model);\n }\n\n return [];\n};\n\n/**\n */\nexport const getFirstModelByInstance = <T>(\n state: ReduxState,\n instance: Class<T>,\n): T | null => {\n const locale = state?.i18n?.locale || \"en\";\n const modularui = state?.modularui;\n\n if (modularui) {\n const key = Object.keys(modularui).find((key) => {\n const { model } = modularui[key];\n return model instanceof instance && model.locale === locale;\n });\n\n if (key) {\n const { model } = modularui[key];\n if (model instanceof instance) {\n return model;\n }\n }\n }\n\n return null;\n};\n\n/**\n */\nexport const getActiveModelByInstance = <T>(\n state: ReduxState,\n instance: Class<T>,\n): T | null => {\n const location = getLocation(state);\n\n const locale = state?.i18n?.locale || \"en\";\n const modularui = state?.modularui;\n\n if (modularui) {\n const key = Object.keys(modularui).find((key) => {\n const { model } = modularui[key];\n return (\n model instanceof instance &&\n model.locale === locale &&\n location.startsWith(model.selfhref.path)\n );\n });\n\n if (key) {\n const { model } = modularui[key];\n if (model instanceof instance) {\n return model;\n }\n }\n }\n\n return null;\n};\n\n/**\n * Get the application model, which is the model with selfhref '/'\n */\nexport const getApplication = (state: ReduxState): null | ApplicationModel =>\n getFirstModelByInstance(state, ApplicationModel);\n\n/**\n */\nexport const getTab = (state: ReduxState): null | TabModel =>\n getFirstModelByInstance(state, TabModel);\n\n/**\n */\nexport const getCaseView = (state: ReduxState): null | CaseViewModel =>\n getFirstModelByInstance(state, CaseViewModel);\n\n/**\n */\nexport const getForm = (state: ReduxState): null | FormModel =>\n getFirstModelByInstance(state, FormModel);\n\n/**\n * Get the model by it's href\n */\nexport const modelByHref = (\n state: ReduxState,\n href: Href | string,\n): null | ModularUIModel => {\n if (state && state.modularui) {\n const findHref = href instanceof Href ? href : new Href(href);\n\n const modelConfigKey = Object.keys(state.modularui).find((key) => {\n const model = state.modularui[key];\n\n return (\n model.model &&\n model.model.selfhref &&\n model.model.selfhref.equals(findHref)\n );\n });\n\n if (modelConfigKey) {\n return state.modularui[modelConfigKey].model;\n }\n }\n\n return null;\n};\n\n/**\n * Return the key of a model by the selfhref the model is saved in the reducer\n */\nexport const keyByHref = (state: ReduxState, href: Href | string): ?string => {\n if (state && state.modularui) {\n const findHref = href instanceof Href ? href : new Href(href);\n\n return Object.keys(state.modularui).find((key) => {\n const { model } = state.modularui[key];\n return model && model.selfhref && model.selfhref.equals(findHref);\n });\n }\n\n return null;\n};\n\n/**\n * Returns all model keys found in the store, restrict on href\n */\nexport const allKeysByHref = (\n state: ReduxState,\n href: Href | string,\n): Array<string> => {\n if (state && state.modularui) {\n const findHref = href instanceof Href ? href : new Href(href);\n\n return Object.keys(state.modularui).filter((key) => {\n const { model } = state.modularui[key];\n return model && model.selfhref && model.selfhref.equals(findHref);\n });\n }\n\n return [];\n};\n\n/**\n */\nconst getLocation = (state: ReduxState): string =>\n state?.router?.location.pathname;\n\n/**\n */\nconst getModels = (state: ReduxState) => {\n const models = [];\n\n Object.keys(state.modularui).forEach((modelKey: string) => {\n const modelEntry = state.modularui[modelKey];\n\n if (has(modelEntry, \"model\")) {\n const { key, selfhref, label, type } = modelEntry.model;\n\n const modelInfo = {\n key,\n selfhref,\n label,\n type,\n selfContentLink: null,\n };\n\n if (\n modelEntry.model instanceof ContentModel ||\n modelEntry.model instanceof ContentTOCModel\n ) {\n models.push({\n ...modelInfo,\n selfContentLink: modelEntry.model.selfContentLink,\n });\n } else {\n models.push(modelInfo);\n }\n }\n });\n\n return models;\n};\n\nexport const getActiveModels: (state: ReduxState) => Array<{\n key: string,\n href: Href,\n label: string,\n type: string,\n}> = createSelectorCreator(\n defaultMemoize,\n (value, other) => JSON.stringify(value) === JSON.stringify(other),\n)([getLocation, getModels], (location, models) => {\n const contextModels = [];\n\n if (location) {\n const locationParts = location.split(\"/\");\n\n locationParts.reduce((accumulator, current) => {\n const path = `${accumulator}/${current}`;\n\n // Remove modelcatalog part to match breadcrumb parts\n const comparePath = decodeURIComponent(path).replace(\n \"/modelcatalog/\",\n \"/\",\n );\n\n const foundEntry = models.find(\n (model) => model.selfhref && model.selfhref.equals(comparePath),\n );\n\n if (foundEntry) {\n const { key, label, type, selfhref, selfContentLink } = foundEntry;\n\n const href =\n path.startsWith(\"/modelcatalog/\") && selfContentLink\n ? new Href(`/modelcatalog${selfContentLink.encodedHref.toString()}`)\n : selfhref;\n\n contextModels.push({ key, href, label, type });\n }\n\n return path;\n });\n }\n\n return contextModels;\n});\n\n/**\n */\nexport const getPreference = (\n state: ReduxState,\n preferenceName: string,\n): null | PreferenceValue => {\n if (state && state.preferences) {\n return state.preferences[preferenceName];\n }\n\n return null;\n};\n\n/**\n * @deprecated - Use getFirstModelByInstance or the appropriate getter for the model type: getApplication, getTab, etc\n */\nexport const getModelsByType = (\n state: ReduxState,\n type: string,\n): Array<ModularUIModel> => {\n if (state && state.modularui) {\n return Object.keys(state.modularui)\n .filter(\n (key) =>\n state.modularui[key] &&\n state.modularui[key].model &&\n state.modularui[key].model.type === type,\n )\n .map((key) => state.modularui[key].model);\n }\n\n return [];\n};\n\n/**\n */\nexport const getAllFinishedModels: (\n state: ReduxState,\n) => Array<ModularUIModel> = createSelector(\n (state: ReduxState) => state.modularui,\n (modularui): Array<ModularUIModel> => {\n if (modularui) {\n return Object.keys(modularui)\n .filter(\n (key) =>\n modularui[key] &&\n modularui[key].status === MODULARUI_STATUS.FINISHED,\n )\n .map((key) => modularui[key].model);\n }\n return [];\n },\n);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ModularUISelectors.js","names":["createSelector","createSelectorCreator","defaultMemoize","has","Href","ContentModel","ContentTOCModel","ApplicationModel","TabModel","CaseViewModel","FormModel","MODULARUI_STATUS","getAllModelsByInstance","state","instance","locale","i18n","modularui","_context","_context2","_mapInstanceProperty","_filterInstanceProperty","_Object$keys","call","key","model","getFirstModelByInstance","_context3","foundKey","_findInstanceProperty","entry","isInstance","localeMatches","getActiveModelByInstance","location","getLocation","_context4","_startsWithInstanceProperty","selfhref","path","getApplication","getTab","getCaseView","getForm","modelByHref","href","_context5","findHref","modelConfigKey","equals","keyByHref","_context6","allKeysByHref","_context7","router","pathname","getModels","models","forEach","modelKey","modelEntry","label","type","modelInfo","selfContentLink","push","getActiveModels","value","other","_JSON$stringify","contextModels","locationParts","split","reduce","accumulator","current","comparePath","decodeURIComponent","replace","foundEntry","encodedHref","toString","getPreference","preferenceName","preferences","getModelsByType","_context8","_context9","getAllFinishedModels","_context0","_context1","status","FINISHED"],"sources":["../../../src/redux/_modularui/ModularUISelectors.js"],"sourcesContent":["// @flow\nimport {\n createSelector,\n createSelectorCreator,\n defaultMemoize,\n} from \"reselect\";\nimport { has } from \"../../utils/helpers/objects\";\n\nimport Href from \"../../models/href/Href\";\nimport ContentModel from \"../../models/content/ContentModel\";\nimport ContentTOCModel from \"../../models/content/ContentTOCModel\";\nimport ApplicationModel from \"../../models/application/ApplicationModel\";\nimport TabModel from \"../../models/tab/TabModel\";\nimport CaseViewModel from \"../../models/caseview/CaseViewModel\";\nimport FormModel from \"../../models/form/FormModel\";\n\nimport type { ReduxState, PreferenceValue } from \"../types\";\nimport type { ModularUIModel } from \"../../models/types\";\nimport { MODULARUI_STATUS } from \"../../constants\";\n\n/**\n */\nexport const getAllModelsByInstance = <T>(\n state: ReduxState,\n instance: Class<T>,\n): Array<ModularUIModel> => {\n const locale = state?.i18n?.locale || \"en\";\n const modularui = state?.modularui;\n\n if (modularui) {\n return Object.keys(modularui)\n .filter((key) => {\n const { model } = modularui[key];\n return model instanceof instance && model.locale === locale;\n })\n .map((key) => modularui[key].model);\n }\n\n return [];\n};\n\n/**\n */\nexport const getFirstModelByInstance = <T = ModularUIModel>(\n state: ReduxState,\n instance: Class<T>,\n): T | null => {\n const locale = state?.i18n?.locale || \"en\";\n const modularui = state?.modularui;\n\n if (!modularui) return null;\n\n const foundKey = Object.keys(modularui).find((key) => {\n const entry = modularui[key];\n if (!entry || !entry.model) return false;\n\n const isInstance = entry.model instanceof instance;\n const localeMatches = entry.model.locale === locale;\n\n return isInstance && localeMatches;\n });\n\n // $FlowIssue\n return foundKey ? modularui[foundKey].model : null;\n};\n\n/**\n */\nexport const getActiveModelByInstance = <T>(\n state: ReduxState,\n instance: Class<T>,\n): T | null => {\n const location = getLocation(state);\n\n const locale = state?.i18n?.locale || \"en\";\n const modularui = state?.modularui;\n\n if (modularui) {\n const key = Object.keys(modularui).find((key) => {\n const { model } = modularui[key];\n return (\n model instanceof instance &&\n model.locale === locale &&\n location.startsWith(model.selfhref.path)\n );\n });\n\n if (key) {\n const { model } = modularui[key];\n if (model instanceof instance) {\n return model;\n }\n }\n }\n\n return null;\n};\n\n/**\n * Get the application model, which is the model with selfhref '/'\n */\nexport const getApplication = (state: ReduxState): null | ApplicationModel =>\n getFirstModelByInstance(state, ApplicationModel);\n\n/**\n */\nexport const getTab = (state: ReduxState): null | TabModel =>\n getFirstModelByInstance(state, TabModel);\n\n/**\n */\nexport const getCaseView = (state: ReduxState): null | CaseViewModel =>\n getFirstModelByInstance(state, CaseViewModel);\n\n/**\n */\nexport const getForm = (state: ReduxState): null | FormModel =>\n getFirstModelByInstance(state, FormModel);\n\n/**\n * Get the model by it's href\n */\nexport const modelByHref = (\n state: ReduxState,\n href: Href | string,\n): null | ModularUIModel => {\n if (state && state.modularui) {\n const findHref = href instanceof Href ? href : new Href(href);\n\n const modelConfigKey = Object.keys(state.modularui).find((key) => {\n const model = state.modularui[key];\n\n return (\n model.model &&\n model.model.selfhref &&\n model.model.selfhref.equals(findHref)\n );\n });\n\n if (modelConfigKey) {\n return state.modularui[modelConfigKey].model;\n }\n }\n\n return null;\n};\n\n/**\n * Return the key of a model by the selfhref the model is saved in the reducer\n */\nexport const keyByHref = (state: ReduxState, href: Href | string): ?string => {\n if (state && state.modularui) {\n const findHref = href instanceof Href ? href : new Href(href);\n\n return Object.keys(state.modularui).find((key) => {\n const { model } = state.modularui[key];\n return model && model.selfhref && model.selfhref.equals(findHref);\n });\n }\n\n return null;\n};\n\n/**\n * Returns all model keys found in the store, restrict on href\n */\nexport const allKeysByHref = (\n state: ReduxState,\n href: Href | string,\n): Array<string> => {\n if (state && state.modularui) {\n const findHref = href instanceof Href ? href : new Href(href);\n\n return Object.keys(state.modularui).filter((key) => {\n const { model } = state.modularui[key];\n return model && model.selfhref && model.selfhref.equals(findHref);\n });\n }\n\n return [];\n};\n\n/**\n */\nconst getLocation = (state: ReduxState): string =>\n state?.router?.location.pathname;\n\n/**\n */\nconst getModels = (state: ReduxState) => {\n const models = [];\n\n Object.keys(state.modularui).forEach((modelKey: string) => {\n const modelEntry = state.modularui[modelKey];\n\n if (has(modelEntry, \"model\")) {\n const { key, selfhref, label, type } = modelEntry.model;\n\n const modelInfo = {\n key,\n selfhref,\n label,\n type,\n selfContentLink: null,\n };\n\n if (\n modelEntry.model instanceof ContentModel ||\n modelEntry.model instanceof ContentTOCModel\n ) {\n models.push({\n ...modelInfo,\n selfContentLink: modelEntry.model.selfContentLink,\n });\n } else {\n models.push(modelInfo);\n }\n }\n });\n\n return models;\n};\n\nexport const getActiveModels: (state: ReduxState) => Array<{\n key: string,\n href: Href,\n label: string,\n type: string,\n}> = createSelectorCreator(\n defaultMemoize,\n (value, other) => JSON.stringify(value) === JSON.stringify(other),\n)([getLocation, getModels], (location, models) => {\n const contextModels = [];\n\n if (location) {\n const locationParts = location.split(\"/\");\n\n locationParts.reduce((accumulator, current) => {\n const path = `${accumulator}/${current}`;\n\n // Remove modelcatalog part to match breadcrumb parts\n const comparePath = decodeURIComponent(path).replace(\n \"/modelcatalog/\",\n \"/\",\n );\n\n const foundEntry = models.find(\n (model) => model.selfhref && model.selfhref.equals(comparePath),\n );\n\n if (foundEntry) {\n const { key, label, type, selfhref, selfContentLink } = foundEntry;\n\n const href =\n path.startsWith(\"/modelcatalog/\") && selfContentLink\n ? new Href(`/modelcatalog${selfContentLink.encodedHref.toString()}`)\n : selfhref;\n\n contextModels.push({ key, href, label, type });\n }\n\n return path;\n });\n }\n\n return contextModels;\n});\n\n/**\n */\nexport const getPreference = (\n state: ReduxState,\n preferenceName: string,\n): null | PreferenceValue => {\n if (state && state.preferences) {\n return state.preferences[preferenceName];\n }\n\n return null;\n};\n\n/**\n * @deprecated - Use getFirstModelByInstance or the appropriate getter for the model type: getApplication, getTab, etc\n */\nexport const getModelsByType = (\n state: ReduxState,\n type: string,\n): Array<ModularUIModel> => {\n if (state && state.modularui) {\n return Object.keys(state.modularui)\n .filter(\n (key) =>\n state.modularui[key] &&\n state.modularui[key].model &&\n state.modularui[key].model.type === type,\n )\n .map((key) => state.modularui[key].model);\n }\n\n return [];\n};\n\n/**\n */\nexport const getAllFinishedModels: (\n state: ReduxState,\n) => Array<ModularUIModel> = createSelector(\n (state: ReduxState) => state.modularui,\n (modularui): Array<ModularUIModel> => {\n if (modularui) {\n return Object.keys(modularui)\n .filter(\n (key) =>\n modularui[key] &&\n modularui[key].status === MODULARUI_STATUS.FINISHED,\n )\n .map((key) => modularui[key].model);\n }\n return [];\n },\n);\n"],"mappings":"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","ignoreList":[]}
@@ -36,8 +36,8 @@ type DispatchProps = {
36
36
  reloadModel: (
37
37
  model: ModularUIModel,
38
38
  options?: RequestModularUIOptions,
39
- ) => ThunkAction,
40
- handleError: (error: Error | FetchException) => ThunkAction,
39
+ ) => ThunkAction<>,
40
+ handleError: (error: Error | FetchException) => ThunkAction<>,
41
41
  };
42
42
 
43
43
  type Props = {
@@ -1 +1 @@
1
- {"version":3,"file":"withModularUI.js","names":["connect","createSelector","ModularUIRequest","startProgress","finishProgress","handleError","getLocale","reloadModel","modularui","localeCode","href","options","modularuiRequest","locale","mapStateToProps","state","i18n","mapDispatchToProps","withModularui"],"sources":["../../../src/redux/_modularui/withModularUI.js"],"sourcesContent":["// @flow\nimport { connect } from \"react-redux\";\n\nimport { createSelector } from \"reselect\";\n\nimport ModularUIRequest from \"../../modularui/ModularUIRequest\";\n\nimport { startProgress, finishProgress } from \"../actions/ProgressIndicator\";\n\nimport { handleError } from \"../actions/Error\";\n\nimport { getLocale } from \"../selectors/i18n\";\n\nimport { reloadModel } from \"./ModularUIActions\";\n\nimport type {\n ReduxState,\n StartProgressAction,\n FinishProgressAction,\n ThunkAction,\n} from \"../types\";\nimport type Href from \"../../models/href/Href\";\nimport type { ModularUIModel } from \"../../models/types\";\nimport type FetchException from \"../../exceptions/FetchException\";\nimport type { ComponentType } from \"react\";\nimport type { RequestModularUIOptions } from \"../../utils/fetch/types\";\n\ntype StateProps = {\n modularui: (href: Href, options: any) => ModularUIRequest,\n locale: string,\n};\n\ntype DispatchProps = {\n startProgress: () => StartProgressAction,\n finishProgress: () => FinishProgressAction,\n reloadModel: (\n model: ModularUIModel,\n options?: RequestModularUIOptions,\n ) => ThunkAction,\n handleError: (error: Error | FetchException) => ThunkAction,\n};\n\ntype Props = {\n ...StateProps,\n ...DispatchProps,\n};\n\nconst modularui = createSelector(\n [getLocale],\n (localeCode) =>\n (href, options = {}) => {\n const modularuiRequest = new ModularUIRequest(href, options);\n modularuiRequest.locale = localeCode;\n return modularuiRequest;\n },\n);\n\n/**\n */\nconst mapStateToProps = (state: ReduxState): StateProps => ({\n modularui: modularui(state),\n locale: state.i18n.locale,\n});\n\nconst mapDispatchToProps: DispatchProps = {\n startProgress,\n finishProgress,\n reloadModel,\n handleError,\n};\n\n/**\n * Injects the modular ui service and the progress start and finish actions\n * This can be used to request modular ui services inside react view components\n */\nconst withModularui: ComponentType<any> = connect<\n Props,\n {},\n StateProps,\n _,\n _,\n _,\n>(mapStateToProps, mapDispatchToProps);\n\nexport default withModularui;\n"],"mappings":"AACA,SAASA,OAAO,QAAQ,aAAa;AAErC,SAASC,cAAc,QAAQ,UAAU;AAEzC,OAAOC,gBAAgB,MAAM,kCAAkC;AAE/D,SAASC,aAAa,EAAEC,cAAc,QAAQ,8BAA8B;AAE5E,SAASC,WAAW,QAAQ,kBAAkB;AAE9C,SAASC,SAAS,QAAQ,mBAAmB;AAE7C,SAASC,WAAW,QAAQ,oBAAoB;AAkChD,MAAMC,SAAS,GAAGP,cAAc,CAC9B,CAACK,SAAS,CAAC,EACVG,UAAU,IACT,CAACC,IAAI,EAAEC,OAAO,GAAG,CAAC,CAAC,KAAK;EACtB,MAAMC,gBAAgB,GAAG,IAAIV,gBAAgB,CAACQ,IAAI,EAAEC,OAAO,CAAC;EAC5DC,gBAAgB,CAACC,MAAM,GAAGJ,UAAU;EACpC,OAAOG,gBAAgB;AACzB,CACJ,CAAC;;AAED;AACA;AACA,MAAME,eAAe,GAAIC,KAAiB,KAAkB;EAC1DP,SAAS,EAAEA,SAAS,CAACO,KAAK,CAAC;EAC3BF,MAAM,EAAEE,KAAK,CAACC,IAAI,CAACH;AACrB,CAAC,CAAC;AAEF,MAAMI,kBAAiC,GAAG;EACxCd,aAAa;EACbC,cAAc;EACdG,WAAW;EACXF;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMa,aAAiC,GAAGlB,OAAO,CAO/Cc,eAAe,EAAEG,kBAAkB,CAAC;AAEtC,eAAeC,aAAa","ignoreList":[]}
1
+ {"version":3,"file":"withModularUI.js","names":["connect","createSelector","ModularUIRequest","startProgress","finishProgress","handleError","getLocale","reloadModel","modularui","localeCode","href","options","modularuiRequest","locale","mapStateToProps","state","i18n","mapDispatchToProps","withModularui"],"sources":["../../../src/redux/_modularui/withModularUI.js"],"sourcesContent":["// @flow\nimport { connect } from \"react-redux\";\n\nimport { createSelector } from \"reselect\";\n\nimport ModularUIRequest from \"../../modularui/ModularUIRequest\";\n\nimport { startProgress, finishProgress } from \"../actions/ProgressIndicator\";\n\nimport { handleError } from \"../actions/Error\";\n\nimport { getLocale } from \"../selectors/i18n\";\n\nimport { reloadModel } from \"./ModularUIActions\";\n\nimport type {\n ReduxState,\n StartProgressAction,\n FinishProgressAction,\n ThunkAction,\n} from \"../types\";\nimport type Href from \"../../models/href/Href\";\nimport type { ModularUIModel } from \"../../models/types\";\nimport type FetchException from \"../../exceptions/FetchException\";\nimport type { ComponentType } from \"react\";\nimport type { RequestModularUIOptions } from \"../../utils/fetch/types\";\n\ntype StateProps = {\n modularui: (href: Href, options: any) => ModularUIRequest,\n locale: string,\n};\n\ntype DispatchProps = {\n startProgress: () => StartProgressAction,\n finishProgress: () => FinishProgressAction,\n reloadModel: (\n model: ModularUIModel,\n options?: RequestModularUIOptions,\n ) => ThunkAction<>,\n handleError: (error: Error | FetchException) => ThunkAction<>,\n};\n\ntype Props = {\n ...StateProps,\n ...DispatchProps,\n};\n\nconst modularui = createSelector(\n [getLocale],\n (localeCode) =>\n (href, options = {}) => {\n const modularuiRequest = new ModularUIRequest(href, options);\n modularuiRequest.locale = localeCode;\n return modularuiRequest;\n },\n);\n\n/**\n */\nconst mapStateToProps = (state: ReduxState): StateProps => ({\n modularui: modularui(state),\n locale: state.i18n.locale,\n});\n\nconst mapDispatchToProps: DispatchProps = {\n startProgress,\n finishProgress,\n reloadModel,\n handleError,\n};\n\n/**\n * Injects the modular ui service and the progress start and finish actions\n * This can be used to request modular ui services inside react view components\n */\nconst withModularui: ComponentType<any> = connect<\n Props,\n {},\n StateProps,\n _,\n _,\n _,\n>(mapStateToProps, mapDispatchToProps);\n\nexport default withModularui;\n"],"mappings":"AACA,SAASA,OAAO,QAAQ,aAAa;AAErC,SAASC,cAAc,QAAQ,UAAU;AAEzC,OAAOC,gBAAgB,MAAM,kCAAkC;AAE/D,SAASC,aAAa,EAAEC,cAAc,QAAQ,8BAA8B;AAE5E,SAASC,WAAW,QAAQ,kBAAkB;AAE9C,SAASC,SAAS,QAAQ,mBAAmB;AAE7C,SAASC,WAAW,QAAQ,oBAAoB;AAkChD,MAAMC,SAAS,GAAGP,cAAc,CAC9B,CAACK,SAAS,CAAC,EACVG,UAAU,IACT,CAACC,IAAI,EAAEC,OAAO,GAAG,CAAC,CAAC,KAAK;EACtB,MAAMC,gBAAgB,GAAG,IAAIV,gBAAgB,CAACQ,IAAI,EAAEC,OAAO,CAAC;EAC5DC,gBAAgB,CAACC,MAAM,GAAGJ,UAAU;EACpC,OAAOG,gBAAgB;AACzB,CACJ,CAAC;;AAED;AACA;AACA,MAAME,eAAe,GAAIC,KAAiB,KAAkB;EAC1DP,SAAS,EAAEA,SAAS,CAACO,KAAK,CAAC;EAC3BF,MAAM,EAAEE,KAAK,CAACC,IAAI,CAACH;AACrB,CAAC,CAAC;AAEF,MAAMI,kBAAiC,GAAG;EACxCd,aAAa;EACbC,cAAc;EACdG,WAAW;EACXF;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMa,aAAiC,GAAGlB,OAAO,CAO/Cc,eAAe,EAAEG,kBAAkB,CAAC;AAEtC,eAAeC,aAAa","ignoreList":[]}
@@ -1,10 +1,13 @@
1
+ import _Promise from "@babel/runtime-corejs3/core-js-stable/promise";
1
2
  import { loadModularUI, removeModelByKey } from "../_modularui/ModularUIActions";
2
3
  import { allKeysByHref, getApplication } from "../_modularui/ModularUISelectors";
3
4
  import { ApplicationModel, Href } from "../../models";
4
5
  import { getLocale } from "../selectors/i18n";
5
6
  /**
6
7
  */
7
- export const reloadApplication = () => (dispatch, getState) => {
8
+ export const reloadApplication = () => async (dispatch, getState, {
9
+ subscribe
10
+ }) => {
8
11
  const state = getState();
9
12
  let applicationHref = new Href("/", "Application");
10
13
  const application = getApplication(state);
@@ -12,14 +15,39 @@ export const reloadApplication = () => (dispatch, getState) => {
12
15
  applicationHref.contextPath = application.contextPath;
13
16
  applicationHref.origin = application.origin;
14
17
  }
18
+ const modelKey = `application(/)(${getLocale(state)})`;
15
19
  const allKeys = allKeysByHref(state, applicationHref);
16
20
  for (const key of allKeys) {
17
- dispatch(removeModelByKey(key));
21
+ if (key !== modelKey) {
22
+ // only remove applications we're not reloading (e.g. different locale)
23
+ dispatch(removeModelByKey(key));
24
+ }
18
25
  }
19
- const modelKey = `application(/)(${getLocale(state)})`;
20
- return dispatch(loadModularUI(modelKey, applicationHref, {
26
+ dispatch(loadModularUI(modelKey, applicationHref, {
21
27
  targetModel: ApplicationModel
22
28
  }));
29
+ return new _Promise((resolve, reject) => {
30
+ const unsubscribe = subscribe(() => {
31
+ const entry = getState().modularui?.[modelKey];
32
+ if (entry?.status === "FINISHED") {
33
+ unsubscribe();
34
+ if (entry.model instanceof ApplicationModel) {
35
+ resolve(entry.model);
36
+ } else {
37
+ reject(new Error("Loaded model was not an ApplicationModel"));
38
+ }
39
+ } else if (entry?.status === "ERROR") {
40
+ unsubscribe();
41
+ reject(new Error("Application reload failed."));
42
+ }
43
+ });
44
+
45
+ // Safety timeout so the login screen doesn't hang forever if the API fails silently
46
+ setTimeout(() => {
47
+ unsubscribe();
48
+ reject(new Error("Timeout waiting for application reload."));
49
+ }, 15000);
50
+ });
23
51
  };
24
52
 
25
53
  /**
@@ -10,12 +10,13 @@ import {
10
10
  import { ApplicationModel, Href } from "../../models";
11
11
  import { getLocale } from "../selectors/i18n";
12
12
 
13
- import type { Dispatch, GetState, ThunkAction, NoAction } from "../types";
13
+ import type { ThunkAction, NoAction } from "../types";
14
14
 
15
15
  /**
16
16
  */
17
17
  export const reloadApplication =
18
- (): ThunkAction => (dispatch: Dispatch, getState: GetState) => {
18
+ (): ThunkAction<Promise<ApplicationModel>> =>
19
+ async (dispatch, getState, { subscribe }) => {
19
20
  const state = getState();
20
21
 
21
22
  let applicationHref = new Href("/", "Application");
@@ -25,17 +26,45 @@ export const reloadApplication =
25
26
  applicationHref.origin = application.origin;
26
27
  }
27
28
 
29
+ const modelKey = `application(/)(${getLocale(state)})`;
28
30
  const allKeys = allKeysByHref(state, applicationHref);
31
+
29
32
  for (const key of allKeys) {
30
- dispatch(removeModelByKey(key));
33
+ if (key !== modelKey) {
34
+ // only remove applications we're not reloading (e.g. different locale)
35
+ dispatch(removeModelByKey(key));
36
+ }
31
37
  }
32
38
 
33
- const modelKey = `application(/)(${getLocale(state)})`;
34
- return dispatch(
39
+ dispatch(
35
40
  loadModularUI(modelKey, applicationHref, {
36
41
  targetModel: ApplicationModel,
37
42
  }),
38
43
  );
44
+
45
+ return new Promise((resolve, reject) => {
46
+ const unsubscribe = subscribe(() => {
47
+ const entry = getState().modularui?.[modelKey];
48
+
49
+ if (entry?.status === "FINISHED") {
50
+ unsubscribe();
51
+ if (entry.model instanceof ApplicationModel) {
52
+ resolve(entry.model);
53
+ } else {
54
+ reject(new Error("Loaded model was not an ApplicationModel"));
55
+ }
56
+ } else if (entry?.status === "ERROR") {
57
+ unsubscribe();
58
+ reject(new Error("Application reload failed."));
59
+ }
60
+ });
61
+
62
+ // Safety timeout so the login screen doesn't hang forever if the API fails silently
63
+ setTimeout(() => {
64
+ unsubscribe();
65
+ reject(new Error("Timeout waiting for application reload."));
66
+ }, 15000);
67
+ });
39
68
  };
40
69
 
41
70
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Application.js","names":["loadModularUI","removeModelByKey","allKeysByHref","getApplication","ApplicationModel","Href","getLocale","reloadApplication","dispatch","getState","state","applicationHref","application","contextPath","origin","allKeys","key","modelKey","targetModel","noAction","type"],"sources":["../../../src/redux/actions/Application.js"],"sourcesContent":["// @flow\nimport {\n loadModularUI,\n removeModelByKey,\n} from \"../_modularui/ModularUIActions\";\nimport {\n allKeysByHref,\n getApplication,\n} from \"../_modularui/ModularUISelectors\";\nimport { ApplicationModel, Href } from \"../../models\";\nimport { getLocale } from \"../selectors/i18n\";\n\nimport type { Dispatch, GetState, ThunkAction, NoAction } from \"../types\";\n\n/**\n */\nexport const reloadApplication =\n (): ThunkAction => (dispatch: Dispatch, getState: GetState) => {\n const state = getState();\n\n let applicationHref = new Href(\"/\", \"Application\");\n const application = getApplication(state);\n if (application) {\n applicationHref.contextPath = application.contextPath;\n applicationHref.origin = application.origin;\n }\n\n const allKeys = allKeysByHref(state, applicationHref);\n for (const key of allKeys) {\n dispatch(removeModelByKey(key));\n }\n\n const modelKey = `application(/)(${getLocale(state)})`;\n return dispatch(\n loadModularUI(modelKey, applicationHref, {\n targetModel: ApplicationModel,\n }),\n );\n };\n\n/**\n */\nexport const noAction = (): NoAction => ({\n type: \"NO_ACTION\",\n});\n"],"mappings":"AACA,SACEA,aAAa,EACbC,gBAAgB,QACX,gCAAgC;AACvC,SACEC,aAAa,EACbC,cAAc,QACT,kCAAkC;AACzC,SAASC,gBAAgB,EAAEC,IAAI,QAAQ,cAAc;AACrD,SAASC,SAAS,QAAQ,mBAAmB;AAI7C;AACA;AACA,OAAO,MAAMC,iBAAiB,GAC5BA,CAAA,KAAmB,CAACC,QAAkB,EAAEC,QAAkB,KAAK;EAC7D,MAAMC,KAAK,GAAGD,QAAQ,CAAC,CAAC;EAExB,IAAIE,eAAe,GAAG,IAAIN,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC;EAClD,MAAMO,WAAW,GAAGT,cAAc,CAACO,KAAK,CAAC;EACzC,IAAIE,WAAW,EAAE;IACfD,eAAe,CAACE,WAAW,GAAGD,WAAW,CAACC,WAAW;IACrDF,eAAe,CAACG,MAAM,GAAGF,WAAW,CAACE,MAAM;EAC7C;EAEA,MAAMC,OAAO,GAAGb,aAAa,CAACQ,KAAK,EAAEC,eAAe,CAAC;EACrD,KAAK,MAAMK,GAAG,IAAID,OAAO,EAAE;IACzBP,QAAQ,CAACP,gBAAgB,CAACe,GAAG,CAAC,CAAC;EACjC;EAEA,MAAMC,QAAQ,GAAG,kBAAkBX,SAAS,CAACI,KAAK,CAAC,GAAG;EACtD,OAAOF,QAAQ,CACbR,aAAa,CAACiB,QAAQ,EAAEN,eAAe,EAAE;IACvCO,WAAW,EAAEd;EACf,CAAC,CACH,CAAC;AACH,CAAC;;AAEH;AACA;AACA,OAAO,MAAMe,QAAQ,GAAGA,CAAA,MAAiB;EACvCC,IAAI,EAAE;AACR,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"Application.js","names":["loadModularUI","removeModelByKey","allKeysByHref","getApplication","ApplicationModel","Href","getLocale","reloadApplication","dispatch","getState","subscribe","state","applicationHref","application","contextPath","origin","modelKey","allKeys","key","targetModel","_Promise","resolve","reject","unsubscribe","entry","modularui","status","model","Error","setTimeout","noAction","type"],"sources":["../../../src/redux/actions/Application.js"],"sourcesContent":["// @flow\nimport {\n loadModularUI,\n removeModelByKey,\n} from \"../_modularui/ModularUIActions\";\nimport {\n allKeysByHref,\n getApplication,\n} from \"../_modularui/ModularUISelectors\";\nimport { ApplicationModel, Href } from \"../../models\";\nimport { getLocale } from \"../selectors/i18n\";\n\nimport type { ThunkAction, NoAction } from \"../types\";\n\n/**\n */\nexport const reloadApplication =\n (): ThunkAction<Promise<ApplicationModel>> =>\n async (dispatch, getState, { subscribe }) => {\n const state = getState();\n\n let applicationHref = new Href(\"/\", \"Application\");\n const application = getApplication(state);\n if (application) {\n applicationHref.contextPath = application.contextPath;\n applicationHref.origin = application.origin;\n }\n\n const modelKey = `application(/)(${getLocale(state)})`;\n const allKeys = allKeysByHref(state, applicationHref);\n\n for (const key of allKeys) {\n if (key !== modelKey) {\n // only remove applications we're not reloading (e.g. different locale)\n dispatch(removeModelByKey(key));\n }\n }\n\n dispatch(\n loadModularUI(modelKey, applicationHref, {\n targetModel: ApplicationModel,\n }),\n );\n\n return new Promise((resolve, reject) => {\n const unsubscribe = subscribe(() => {\n const entry = getState().modularui?.[modelKey];\n\n if (entry?.status === \"FINISHED\") {\n unsubscribe();\n if (entry.model instanceof ApplicationModel) {\n resolve(entry.model);\n } else {\n reject(new Error(\"Loaded model was not an ApplicationModel\"));\n }\n } else if (entry?.status === \"ERROR\") {\n unsubscribe();\n reject(new Error(\"Application reload failed.\"));\n }\n });\n\n // Safety timeout so the login screen doesn't hang forever if the API fails silently\n setTimeout(() => {\n unsubscribe();\n reject(new Error(\"Timeout waiting for application reload.\"));\n }, 15000);\n });\n };\n\n/**\n */\nexport const noAction = (): NoAction => ({\n type: \"NO_ACTION\",\n});\n"],"mappings":";AACA,SACEA,aAAa,EACbC,gBAAgB,QACX,gCAAgC;AACvC,SACEC,aAAa,EACbC,cAAc,QACT,kCAAkC;AACzC,SAASC,gBAAgB,EAAEC,IAAI,QAAQ,cAAc;AACrD,SAASC,SAAS,QAAQ,mBAAmB;AAI7C;AACA;AACA,OAAO,MAAMC,iBAAiB,GAC5BA,CAAA,KACA,OAAOC,QAAQ,EAAEC,QAAQ,EAAE;EAAEC;AAAU,CAAC,KAAK;EAC3C,MAAMC,KAAK,GAAGF,QAAQ,CAAC,CAAC;EAExB,IAAIG,eAAe,GAAG,IAAIP,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC;EAClD,MAAMQ,WAAW,GAAGV,cAAc,CAACQ,KAAK,CAAC;EACzC,IAAIE,WAAW,EAAE;IACfD,eAAe,CAACE,WAAW,GAAGD,WAAW,CAACC,WAAW;IACrDF,eAAe,CAACG,MAAM,GAAGF,WAAW,CAACE,MAAM;EAC7C;EAEA,MAAMC,QAAQ,GAAG,kBAAkBV,SAAS,CAACK,KAAK,CAAC,GAAG;EACtD,MAAMM,OAAO,GAAGf,aAAa,CAACS,KAAK,EAAEC,eAAe,CAAC;EAErD,KAAK,MAAMM,GAAG,IAAID,OAAO,EAAE;IACzB,IAAIC,GAAG,KAAKF,QAAQ,EAAE;MACpB;MACAR,QAAQ,CAACP,gBAAgB,CAACiB,GAAG,CAAC,CAAC;IACjC;EACF;EAEAV,QAAQ,CACNR,aAAa,CAACgB,QAAQ,EAAEJ,eAAe,EAAE;IACvCO,WAAW,EAAEf;EACf,CAAC,CACH,CAAC;EAED,OAAO,IAAAgB,QAAA,CAAY,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtC,MAAMC,WAAW,GAAGb,SAAS,CAAC,MAAM;MAClC,MAAMc,KAAK,GAAGf,QAAQ,CAAC,CAAC,CAACgB,SAAS,GAAGT,QAAQ,CAAC;MAE9C,IAAIQ,KAAK,EAAEE,MAAM,KAAK,UAAU,EAAE;QAChCH,WAAW,CAAC,CAAC;QACb,IAAIC,KAAK,CAACG,KAAK,YAAYvB,gBAAgB,EAAE;UAC3CiB,OAAO,CAACG,KAAK,CAACG,KAAK,CAAC;QACtB,CAAC,MAAM;UACLL,MAAM,CAAC,IAAIM,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC/D;MACF,CAAC,MAAM,IAAIJ,KAAK,EAAEE,MAAM,KAAK,OAAO,EAAE;QACpCH,WAAW,CAAC,CAAC;QACbD,MAAM,CAAC,IAAIM,KAAK,CAAC,4BAA4B,CAAC,CAAC;MACjD;IACF,CAAC,CAAC;;IAEF;IACAC,UAAU,CAAC,MAAM;MACfN,WAAW,CAAC,CAAC;MACbD,MAAM,CAAC,IAAIM,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC9D,CAAC,EAAE,KAAK,CAAC;EACX,CAAC,CAAC;AACJ,CAAC;;AAEH;AACA;AACA,OAAO,MAAME,QAAQ,GAAGA,CAAA,MAAiB;EACvCC,IAAI,EAAE;AACR,CAAC,CAAC","ignoreList":[]}
@@ -1,3 +1,4 @@
1
+ import _globalThis from "@babel/runtime-corejs3/core-js/global-this";
1
2
  import ErrorResponse from "../../models/error/ErrorResponse";
2
3
  import { replace } from "../_router/RouterActions";
3
4
  import { logoutSuccess } from "./SignOut";
@@ -10,38 +11,34 @@ import { getSetting } from "../../constants";
10
11
  /**
11
12
  */
12
13
  export const handleUnauthorized = errorResponse => (dispatch, getState) => {
14
+ const finish = () => {
15
+ dispatch(logoutSuccess());
16
+ Cache.removeItem("auth");
17
+ if (errorResponse.isInvalidUsername) {
18
+ dispatch(sendAuthenticationError(errorResponse.message));
19
+ }
20
+ const state = getState();
21
+ const location = state.router.location;
22
+ const LOGIN_PATH = getSetting("LOGIN_PATH", "/signin");
23
+ if (location?.pathname !== LOGIN_PATH) {
24
+ const locationFrom = location?.state?.from;
25
+ return dispatch(replace(LOGIN_PATH, {
26
+ from: locationFrom ?? state.router.location,
27
+ modal: false
28
+ }));
29
+ }
30
+ return dispatch(noAction());
31
+ };
13
32
  if (errorResponse.connectKey) {
14
33
  dispatch(removeModelByKey(errorResponse.connectKey));
15
34
  }
16
35
  if (getSetting("PAGE_RELOAD_ON_UNAUTHORIZED_ERROR", false) && errorResponse.response?.error) {
17
- window.location.reload();
36
+ // $FlowIssue
37
+ _globalThis.location.reload();
18
38
  return;
19
39
  }
20
-
21
- // reload application when flag auth is set or isLogged
22
40
  const application = getApplication(getState());
23
- if (Cache.getItem("auth") || application?.isLoggedIn) {
24
- dispatch(reloadApplication());
25
- }
26
-
27
- // set logged out
28
- dispatch(logoutSuccess());
29
- Cache.removeItem("auth");
30
- if (errorResponse.isInvalidUsername) {
31
- dispatch(sendAuthenticationError(errorResponse.message));
32
- }
33
-
34
- // add current location as from location before redirect
35
- const location = getState().router.location;
36
- const LOGIN_PATH = getSetting("LOGIN_PATH", "/signin");
37
- if (location?.pathname !== LOGIN_PATH) {
38
- const locationFrom = location?.state?.from;
39
- return dispatch(replace(LOGIN_PATH, {
40
- from: locationFrom ? locationFrom : getState().router.location,
41
- // cannot open login in a modal, because of previous locations that might be secure
42
- modal: false
43
- }));
44
- }
45
- return dispatch(noAction());
41
+ const shouldReload = Cache.getItem("auth") || application?.isLoggedIn;
42
+ return shouldReload ? dispatch(reloadApplication()).then(finish) : finish();
46
43
  };
47
44
  //# sourceMappingURL=Authorization.js.map
@@ -18,8 +18,33 @@ import type { ThunkAction } from "../types";
18
18
  /**
19
19
  */
20
20
  export const handleUnauthorized =
21
- (errorResponse: ErrorResponse): ThunkAction =>
21
+ (errorResponse: ErrorResponse): ThunkAction<> =>
22
22
  (dispatch, getState) => {
23
+ const finish = () => {
24
+ dispatch(logoutSuccess());
25
+ Cache.removeItem("auth");
26
+
27
+ if (errorResponse.isInvalidUsername) {
28
+ dispatch(sendAuthenticationError(errorResponse.message));
29
+ }
30
+
31
+ const state = getState();
32
+ const location = state.router.location;
33
+ const LOGIN_PATH = getSetting("LOGIN_PATH", "/signin");
34
+
35
+ if (location?.pathname !== LOGIN_PATH) {
36
+ const locationFrom = location?.state?.from;
37
+ return dispatch(
38
+ replace(LOGIN_PATH, {
39
+ from: locationFrom ?? state.router.location,
40
+ modal: false,
41
+ }),
42
+ );
43
+ }
44
+
45
+ return dispatch(noAction());
46
+ };
47
+
23
48
  if (errorResponse.connectKey) {
24
49
  dispatch(removeModelByKey(errorResponse.connectKey));
25
50
  }
@@ -28,38 +53,13 @@ export const handleUnauthorized =
28
53
  getSetting("PAGE_RELOAD_ON_UNAUTHORIZED_ERROR", false) &&
29
54
  errorResponse.response?.error
30
55
  ) {
31
- window.location.reload();
56
+ // $FlowIssue
57
+ globalThis.location.reload();
32
58
  return;
33
59
  }
34
60
 
35
- // reload application when flag auth is set or isLogged
36
61
  const application = getApplication(getState());
37
- if (Cache.getItem("auth") || application?.isLoggedIn) {
38
- dispatch(reloadApplication());
39
- }
40
-
41
- // set logged out
42
- dispatch(logoutSuccess());
43
-
44
- Cache.removeItem("auth");
45
-
46
- if (errorResponse.isInvalidUsername) {
47
- dispatch(sendAuthenticationError(errorResponse.message));
48
- }
49
-
50
- // add current location as from location before redirect
51
- const location = getState().router.location;
52
- const LOGIN_PATH = getSetting("LOGIN_PATH", "/signin");
53
- if (location?.pathname !== LOGIN_PATH) {
54
- const locationFrom = location?.state?.from;
55
- return dispatch(
56
- replace(LOGIN_PATH, {
57
- from: locationFrom ? locationFrom : getState().router.location,
58
- // cannot open login in a modal, because of previous locations that might be secure
59
- modal: false,
60
- }),
61
- );
62
- }
62
+ const shouldReload = Cache.getItem("auth") || application?.isLoggedIn;
63
63
 
64
- return dispatch(noAction());
64
+ return shouldReload ? dispatch(reloadApplication()).then(finish) : finish();
65
65
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Authorization.js","names":["ErrorResponse","replace","logoutSuccess","Cache","removeModelByKey","getApplication","noAction","reloadApplication","sendAuthenticationError","getSetting","handleUnauthorized","errorResponse","dispatch","getState","connectKey","response","error","window","location","reload","application","getItem","isLoggedIn","removeItem","isInvalidUsername","message","router","LOGIN_PATH","pathname","locationFrom","state","from","modal"],"sources":["../../../src/redux/actions/Authorization.js"],"sourcesContent":["// @flow\nimport ErrorResponse from \"../../models/error/ErrorResponse\";\n\nimport { replace } from \"../_router/RouterActions\";\nimport { logoutSuccess } from \"./SignOut\";\n\nimport Cache from \"../../utils/browser/Cache\";\n\nimport { removeModelByKey } from \"../_modularui/ModularUIActions\";\nimport { getApplication } from \"../_modularui/ModularUISelectors\";\nimport { noAction, reloadApplication } from \"./Application\";\nimport { sendAuthenticationError } from \"./SignIn\";\n\nimport { getSetting } from \"../../constants\";\n\nimport type { ThunkAction } from \"../types\";\n\n/**\n */\nexport const handleUnauthorized =\n (errorResponse: ErrorResponse): ThunkAction =>\n (dispatch, getState) => {\n if (errorResponse.connectKey) {\n dispatch(removeModelByKey(errorResponse.connectKey));\n }\n\n if (\n getSetting(\"PAGE_RELOAD_ON_UNAUTHORIZED_ERROR\", false) &&\n errorResponse.response?.error\n ) {\n window.location.reload();\n return;\n }\n\n // reload application when flag auth is set or isLogged\n const application = getApplication(getState());\n if (Cache.getItem(\"auth\") || application?.isLoggedIn) {\n dispatch(reloadApplication());\n }\n\n // set logged out\n dispatch(logoutSuccess());\n\n Cache.removeItem(\"auth\");\n\n if (errorResponse.isInvalidUsername) {\n dispatch(sendAuthenticationError(errorResponse.message));\n }\n\n // add current location as from location before redirect\n const location = getState().router.location;\n const LOGIN_PATH = getSetting(\"LOGIN_PATH\", \"/signin\");\n if (location?.pathname !== LOGIN_PATH) {\n const locationFrom = location?.state?.from;\n return dispatch(\n replace(LOGIN_PATH, {\n from: locationFrom ? locationFrom : getState().router.location,\n // cannot open login in a modal, because of previous locations that might be secure\n modal: false,\n }),\n );\n }\n\n return dispatch(noAction());\n };\n"],"mappings":"AACA,OAAOA,aAAa,MAAM,kCAAkC;AAE5D,SAASC,OAAO,QAAQ,0BAA0B;AAClD,SAASC,aAAa,QAAQ,WAAW;AAEzC,OAAOC,KAAK,MAAM,2BAA2B;AAE7C,SAASC,gBAAgB,QAAQ,gCAAgC;AACjE,SAASC,cAAc,QAAQ,kCAAkC;AACjE,SAASC,QAAQ,EAAEC,iBAAiB,QAAQ,eAAe;AAC3D,SAASC,uBAAuB,QAAQ,UAAU;AAElD,SAASC,UAAU,QAAQ,iBAAiB;AAI5C;AACA;AACA,OAAO,MAAMC,kBAAkB,GAC5BC,aAA4B,IAC7B,CAACC,QAAQ,EAAEC,QAAQ,KAAK;EACtB,IAAIF,aAAa,CAACG,UAAU,EAAE;IAC5BF,QAAQ,CAACR,gBAAgB,CAACO,aAAa,CAACG,UAAU,CAAC,CAAC;EACtD;EAEA,IACEL,UAAU,CAAC,mCAAmC,EAAE,KAAK,CAAC,IACtDE,aAAa,CAACI,QAAQ,EAAEC,KAAK,EAC7B;IACAC,MAAM,CAACC,QAAQ,CAACC,MAAM,CAAC,CAAC;IACxB;EACF;;EAEA;EACA,MAAMC,WAAW,GAAGf,cAAc,CAACQ,QAAQ,CAAC,CAAC,CAAC;EAC9C,IAAIV,KAAK,CAACkB,OAAO,CAAC,MAAM,CAAC,IAAID,WAAW,EAAEE,UAAU,EAAE;IACpDV,QAAQ,CAACL,iBAAiB,CAAC,CAAC,CAAC;EAC/B;;EAEA;EACAK,QAAQ,CAACV,aAAa,CAAC,CAAC,CAAC;EAEzBC,KAAK,CAACoB,UAAU,CAAC,MAAM,CAAC;EAExB,IAAIZ,aAAa,CAACa,iBAAiB,EAAE;IACnCZ,QAAQ,CAACJ,uBAAuB,CAACG,aAAa,CAACc,OAAO,CAAC,CAAC;EAC1D;;EAEA;EACA,MAAMP,QAAQ,GAAGL,QAAQ,CAAC,CAAC,CAACa,MAAM,CAACR,QAAQ;EAC3C,MAAMS,UAAU,GAAGlB,UAAU,CAAC,YAAY,EAAE,SAAS,CAAC;EACtD,IAAIS,QAAQ,EAAEU,QAAQ,KAAKD,UAAU,EAAE;IACrC,MAAME,YAAY,GAAGX,QAAQ,EAAEY,KAAK,EAAEC,IAAI;IAC1C,OAAOnB,QAAQ,CACbX,OAAO,CAAC0B,UAAU,EAAE;MAClBI,IAAI,EAAEF,YAAY,GAAGA,YAAY,GAAGhB,QAAQ,CAAC,CAAC,CAACa,MAAM,CAACR,QAAQ;MAC9D;MACAc,KAAK,EAAE;IACT,CAAC,CACH,CAAC;EACH;EAEA,OAAOpB,QAAQ,CAACN,QAAQ,CAAC,CAAC,CAAC;AAC7B,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"Authorization.js","names":["ErrorResponse","replace","logoutSuccess","Cache","removeModelByKey","getApplication","noAction","reloadApplication","sendAuthenticationError","getSetting","handleUnauthorized","errorResponse","dispatch","getState","finish","removeItem","isInvalidUsername","message","state","location","router","LOGIN_PATH","pathname","locationFrom","from","modal","connectKey","response","error","_globalThis","reload","application","shouldReload","getItem","isLoggedIn","then"],"sources":["../../../src/redux/actions/Authorization.js"],"sourcesContent":["// @flow\nimport ErrorResponse from \"../../models/error/ErrorResponse\";\n\nimport { replace } from \"../_router/RouterActions\";\nimport { logoutSuccess } from \"./SignOut\";\n\nimport Cache from \"../../utils/browser/Cache\";\n\nimport { removeModelByKey } from \"../_modularui/ModularUIActions\";\nimport { getApplication } from \"../_modularui/ModularUISelectors\";\nimport { noAction, reloadApplication } from \"./Application\";\nimport { sendAuthenticationError } from \"./SignIn\";\n\nimport { getSetting } from \"../../constants\";\n\nimport type { ThunkAction } from \"../types\";\n\n/**\n */\nexport const handleUnauthorized =\n (errorResponse: ErrorResponse): ThunkAction<> =>\n (dispatch, getState) => {\n const finish = () => {\n dispatch(logoutSuccess());\n Cache.removeItem(\"auth\");\n\n if (errorResponse.isInvalidUsername) {\n dispatch(sendAuthenticationError(errorResponse.message));\n }\n\n const state = getState();\n const location = state.router.location;\n const LOGIN_PATH = getSetting(\"LOGIN_PATH\", \"/signin\");\n\n if (location?.pathname !== LOGIN_PATH) {\n const locationFrom = location?.state?.from;\n return dispatch(\n replace(LOGIN_PATH, {\n from: locationFrom ?? state.router.location,\n modal: false,\n }),\n );\n }\n\n return dispatch(noAction());\n };\n\n if (errorResponse.connectKey) {\n dispatch(removeModelByKey(errorResponse.connectKey));\n }\n\n if (\n getSetting(\"PAGE_RELOAD_ON_UNAUTHORIZED_ERROR\", false) &&\n errorResponse.response?.error\n ) {\n // $FlowIssue\n globalThis.location.reload();\n return;\n }\n\n const application = getApplication(getState());\n const shouldReload = Cache.getItem(\"auth\") || application?.isLoggedIn;\n\n return shouldReload ? dispatch(reloadApplication()).then(finish) : finish();\n };\n"],"mappings":";AACA,OAAOA,aAAa,MAAM,kCAAkC;AAE5D,SAASC,OAAO,QAAQ,0BAA0B;AAClD,SAASC,aAAa,QAAQ,WAAW;AAEzC,OAAOC,KAAK,MAAM,2BAA2B;AAE7C,SAASC,gBAAgB,QAAQ,gCAAgC;AACjE,SAASC,cAAc,QAAQ,kCAAkC;AACjE,SAASC,QAAQ,EAAEC,iBAAiB,QAAQ,eAAe;AAC3D,SAASC,uBAAuB,QAAQ,UAAU;AAElD,SAASC,UAAU,QAAQ,iBAAiB;AAI5C;AACA;AACA,OAAO,MAAMC,kBAAkB,GAC5BC,aAA4B,IAC7B,CAACC,QAAQ,EAAEC,QAAQ,KAAK;EACtB,MAAMC,MAAM,GAAGA,CAAA,KAAM;IACnBF,QAAQ,CAACV,aAAa,CAAC,CAAC,CAAC;IACzBC,KAAK,CAACY,UAAU,CAAC,MAAM,CAAC;IAExB,IAAIJ,aAAa,CAACK,iBAAiB,EAAE;MACnCJ,QAAQ,CAACJ,uBAAuB,CAACG,aAAa,CAACM,OAAO,CAAC,CAAC;IAC1D;IAEA,MAAMC,KAAK,GAAGL,QAAQ,CAAC,CAAC;IACxB,MAAMM,QAAQ,GAAGD,KAAK,CAACE,MAAM,CAACD,QAAQ;IACtC,MAAME,UAAU,GAAGZ,UAAU,CAAC,YAAY,EAAE,SAAS,CAAC;IAEtD,IAAIU,QAAQ,EAAEG,QAAQ,KAAKD,UAAU,EAAE;MACrC,MAAME,YAAY,GAAGJ,QAAQ,EAAED,KAAK,EAAEM,IAAI;MAC1C,OAAOZ,QAAQ,CACbX,OAAO,CAACoB,UAAU,EAAE;QAClBG,IAAI,EAAED,YAAY,IAAIL,KAAK,CAACE,MAAM,CAACD,QAAQ;QAC3CM,KAAK,EAAE;MACT,CAAC,CACH,CAAC;IACH;IAEA,OAAOb,QAAQ,CAACN,QAAQ,CAAC,CAAC,CAAC;EAC7B,CAAC;EAED,IAAIK,aAAa,CAACe,UAAU,EAAE;IAC5Bd,QAAQ,CAACR,gBAAgB,CAACO,aAAa,CAACe,UAAU,CAAC,CAAC;EACtD;EAEA,IACEjB,UAAU,CAAC,mCAAmC,EAAE,KAAK,CAAC,IACtDE,aAAa,CAACgB,QAAQ,EAAEC,KAAK,EAC7B;IACA;IACAC,WAAA,CAAWV,QAAQ,CAACW,MAAM,CAAC,CAAC;IAC5B;EACF;EAEA,MAAMC,WAAW,GAAG1B,cAAc,CAACQ,QAAQ,CAAC,CAAC,CAAC;EAC9C,MAAMmB,YAAY,GAAG7B,KAAK,CAAC8B,OAAO,CAAC,MAAM,CAAC,IAAIF,WAAW,EAAEG,UAAU;EAErE,OAAOF,YAAY,GAAGpB,QAAQ,CAACL,iBAAiB,CAAC,CAAC,CAAC,CAAC4B,IAAI,CAACrB,MAAM,CAAC,GAAGA,MAAM,CAAC,CAAC;AAC7E,CAAC","ignoreList":[]}
@@ -33,6 +33,8 @@ const defaultErrorResponseHandler = error => dispatch => {
33
33
  if (IS_SERVER) {
34
34
  return dispatch(saveError(error));
35
35
  }
36
+
37
+ // trigger a global error, not being caught by a promise
36
38
  setTimeout(() => {
37
39
  throw error.error;
38
40
  });
@@ -14,11 +14,11 @@ import { noAction } from "./Application";
14
14
  import type { FetchException } from "../../exceptions";
15
15
  import type { Dispatch, SaveErrorAction, ThunkAction } from "../types";
16
16
 
17
- type DefaultErrorResponseHandler = (error: ErrorResponse) => ThunkAction;
17
+ type DefaultErrorResponseHandler = (error: ErrorResponse) => ThunkAction<>;
18
18
  type CustomErrorResponseHandler = (
19
19
  errorResponse: ErrorResponse,
20
20
  defaultHandler: DefaultErrorResponseHandler,
21
- ) => ThunkAction;
21
+ ) => ThunkAction<>;
22
22
 
23
23
  /**
24
24
  */
@@ -30,7 +30,7 @@ const saveError = (error: ErrorResponse): SaveErrorAction => ({
30
30
  /**
31
31
  */
32
32
  const defaultErrorResponseHandler: DefaultErrorResponseHandler =
33
- (error: ErrorResponse): ThunkAction =>
33
+ (error: ErrorResponse): ThunkAction<> =>
34
34
  (dispatch: Dispatch) => {
35
35
  if (error.isResourceNotFoundAfterReload || error.isRemoteServiceException) {
36
36
  return dispatch(noAction());
@@ -53,6 +53,7 @@ const defaultErrorResponseHandler: DefaultErrorResponseHandler =
53
53
  return dispatch(saveError(error));
54
54
  }
55
55
 
56
+ // trigger a global error, not being caught by a promise
56
57
  setTimeout(() => {
57
58
  throw error.error;
58
59
  });
@@ -83,7 +84,7 @@ export const setCustomErrorResponseHandler = (
83
84
  * Handle errors by sending an error notification message
84
85
  */
85
86
  export const handleError =
86
- (error: Error | FetchException): ThunkAction =>
87
+ (error: Error | FetchException): ThunkAction<> =>
87
88
  (dispatch: Dispatch) => {
88
89
  dispatch(resetProgress());
89
90
 
@@ -1 +1 @@
1
- {"version":3,"file":"Error.js","names":["IS_SERVER","getSetting","ErrorResponse","push","showXHRErrorNotification","resetProgress","changePassword","handleUnauthorized","noAction","saveError","error","type","payload","defaultErrorResponseHandler","dispatch","isResourceNotFoundAfterReload","isRemoteServiceException","isUnauthorized","isBlocked","isConcurrentUser","isInvalidUsername","LOGOUT_PATH","isChangePassword","setTimeout","customErrorResponseHandler","errorResponse","defaultHandler","setCustomErrorResponseHandler","handler","handleError"],"sources":["../../../src/redux/actions/Error.js"],"sourcesContent":["// @flow\nimport { IS_SERVER } from \"../../constants/Constants\";\nimport { getSetting } from \"../../constants/Settings\";\n\nimport ErrorResponse from \"../../models/error/ErrorResponse\";\n\nimport { push } from \"../_router/RouterActions\";\nimport { showXHRErrorNotification } from \"./Notification\";\nimport { resetProgress } from \"./ProgressIndicator\";\nimport { changePassword } from \"./SignIn\";\nimport { handleUnauthorized } from \"./Authorization\";\nimport { noAction } from \"./Application\";\n\nimport type { FetchException } from \"../../exceptions\";\nimport type { Dispatch, SaveErrorAction, ThunkAction } from \"../types\";\n\ntype DefaultErrorResponseHandler = (error: ErrorResponse) => ThunkAction;\ntype CustomErrorResponseHandler = (\n errorResponse: ErrorResponse,\n defaultHandler: DefaultErrorResponseHandler,\n) => ThunkAction;\n\n/**\n */\nconst saveError = (error: ErrorResponse): SaveErrorAction => ({\n type: \"SAVE_ERROR\",\n payload: error,\n});\n\n/**\n */\nconst defaultErrorResponseHandler: DefaultErrorResponseHandler =\n (error: ErrorResponse): ThunkAction =>\n (dispatch: Dispatch) => {\n if (error.isResourceNotFoundAfterReload || error.isRemoteServiceException) {\n return dispatch(noAction());\n }\n\n if (error.isUnauthorized) {\n return dispatch(handleUnauthorized(error));\n }\n\n if (error.isBlocked || error.isConcurrentUser || error.isInvalidUsername) {\n const LOGOUT_PATH = getSetting(\"LOGOUT_PATH\", \"/signout\");\n dispatch(push(LOGOUT_PATH));\n }\n\n if (error.isChangePassword) {\n return dispatch(changePassword());\n }\n\n if (IS_SERVER) {\n return dispatch(saveError(error));\n }\n\n setTimeout(() => {\n throw error.error;\n });\n\n return dispatch(showXHRErrorNotification(error));\n };\n\n/**\n * Standard Custom error response, acts as a proxy and can be overwritten by {@link setCustomErrorResponseHandler}\n */\nlet customErrorResponseHandler: CustomErrorResponseHandler =\n (errorResponse, defaultHandler) => (dispatch: Dispatch) =>\n dispatch(defaultHandler(errorResponse));\n\n/**\n * Set a custom error response handler,\n * can be used when custom functionality is needed on certain (error) response\n * of the modular ui, for example when custom logic is needed when a user is unauthorized<br>\n * It receives an {@link ErrorResponse} and the {@link defaultErrorResponseHandler}\n */\nexport const setCustomErrorResponseHandler = (\n handler: CustomErrorResponseHandler,\n) => {\n customErrorResponseHandler = handler;\n};\n\n/**\n * Handle errors by sending an error notification message\n */\nexport const handleError =\n (error: Error | FetchException): ThunkAction =>\n (dispatch: Dispatch) => {\n dispatch(resetProgress());\n\n const errorResponse = new ErrorResponse(error);\n\n return dispatch(\n customErrorResponseHandler(errorResponse, defaultErrorResponseHandler),\n );\n };\n"],"mappings":"AACA,SAASA,SAAS,QAAQ,2BAA2B;AACrD,SAASC,UAAU,QAAQ,0BAA0B;AAErD,OAAOC,aAAa,MAAM,kCAAkC;AAE5D,SAASC,IAAI,QAAQ,0BAA0B;AAC/C,SAASC,wBAAwB,QAAQ,gBAAgB;AACzD,SAASC,aAAa,QAAQ,qBAAqB;AACnD,SAASC,cAAc,QAAQ,UAAU;AACzC,SAASC,kBAAkB,QAAQ,iBAAiB;AACpD,SAASC,QAAQ,QAAQ,eAAe;AAWxC;AACA;AACA,MAAMC,SAAS,GAAIC,KAAoB,KAAuB;EAC5DC,IAAI,EAAE,YAAY;EAClBC,OAAO,EAAEF;AACX,CAAC,CAAC;;AAEF;AACA;AACA,MAAMG,2BAAwD,GAC3DH,KAAoB,IACpBI,QAAkB,IAAK;EACtB,IAAIJ,KAAK,CAACK,6BAA6B,IAAIL,KAAK,CAACM,wBAAwB,EAAE;IACzE,OAAOF,QAAQ,CAACN,QAAQ,CAAC,CAAC,CAAC;EAC7B;EAEA,IAAIE,KAAK,CAACO,cAAc,EAAE;IACxB,OAAOH,QAAQ,CAACP,kBAAkB,CAACG,KAAK,CAAC,CAAC;EAC5C;EAEA,IAAIA,KAAK,CAACQ,SAAS,IAAIR,KAAK,CAACS,gBAAgB,IAAIT,KAAK,CAACU,iBAAiB,EAAE;IACxE,MAAMC,WAAW,GAAGpB,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC;IACzDa,QAAQ,CAACX,IAAI,CAACkB,WAAW,CAAC,CAAC;EAC7B;EAEA,IAAIX,KAAK,CAACY,gBAAgB,EAAE;IAC1B,OAAOR,QAAQ,CAACR,cAAc,CAAC,CAAC,CAAC;EACnC;EAEA,IAAIN,SAAS,EAAE;IACb,OAAOc,QAAQ,CAACL,SAAS,CAACC,KAAK,CAAC,CAAC;EACnC;EAEAa,UAAU,CAAC,MAAM;IACf,MAAMb,KAAK,CAACA,KAAK;EACnB,CAAC,CAAC;EAEF,OAAOI,QAAQ,CAACV,wBAAwB,CAACM,KAAK,CAAC,CAAC;AAClD,CAAC;;AAEH;AACA;AACA;AACA,IAAIc,0BAAsD,GACxDA,CAACC,aAAa,EAAEC,cAAc,KAAMZ,QAAkB,IACpDA,QAAQ,CAACY,cAAc,CAACD,aAAa,CAAC,CAAC;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,6BAA6B,GACxCC,OAAmC,IAChC;EACHJ,0BAA0B,GAAGI,OAAO;AACtC,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMC,WAAW,GACrBnB,KAA6B,IAC7BI,QAAkB,IAAK;EACtBA,QAAQ,CAACT,aAAa,CAAC,CAAC,CAAC;EAEzB,MAAMoB,aAAa,GAAG,IAAIvB,aAAa,CAACQ,KAAK,CAAC;EAE9C,OAAOI,QAAQ,CACbU,0BAA0B,CAACC,aAAa,EAAEZ,2BAA2B,CACvE,CAAC;AACH,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"Error.js","names":["IS_SERVER","getSetting","ErrorResponse","push","showXHRErrorNotification","resetProgress","changePassword","handleUnauthorized","noAction","saveError","error","type","payload","defaultErrorResponseHandler","dispatch","isResourceNotFoundAfterReload","isRemoteServiceException","isUnauthorized","isBlocked","isConcurrentUser","isInvalidUsername","LOGOUT_PATH","isChangePassword","setTimeout","customErrorResponseHandler","errorResponse","defaultHandler","setCustomErrorResponseHandler","handler","handleError"],"sources":["../../../src/redux/actions/Error.js"],"sourcesContent":["// @flow\nimport { IS_SERVER } from \"../../constants/Constants\";\nimport { getSetting } from \"../../constants/Settings\";\n\nimport ErrorResponse from \"../../models/error/ErrorResponse\";\n\nimport { push } from \"../_router/RouterActions\";\nimport { showXHRErrorNotification } from \"./Notification\";\nimport { resetProgress } from \"./ProgressIndicator\";\nimport { changePassword } from \"./SignIn\";\nimport { handleUnauthorized } from \"./Authorization\";\nimport { noAction } from \"./Application\";\n\nimport type { FetchException } from \"../../exceptions\";\nimport type { Dispatch, SaveErrorAction, ThunkAction } from \"../types\";\n\ntype DefaultErrorResponseHandler = (error: ErrorResponse) => ThunkAction<>;\ntype CustomErrorResponseHandler = (\n errorResponse: ErrorResponse,\n defaultHandler: DefaultErrorResponseHandler,\n) => ThunkAction<>;\n\n/**\n */\nconst saveError = (error: ErrorResponse): SaveErrorAction => ({\n type: \"SAVE_ERROR\",\n payload: error,\n});\n\n/**\n */\nconst defaultErrorResponseHandler: DefaultErrorResponseHandler =\n (error: ErrorResponse): ThunkAction<> =>\n (dispatch: Dispatch) => {\n if (error.isResourceNotFoundAfterReload || error.isRemoteServiceException) {\n return dispatch(noAction());\n }\n\n if (error.isUnauthorized) {\n return dispatch(handleUnauthorized(error));\n }\n\n if (error.isBlocked || error.isConcurrentUser || error.isInvalidUsername) {\n const LOGOUT_PATH = getSetting(\"LOGOUT_PATH\", \"/signout\");\n dispatch(push(LOGOUT_PATH));\n }\n\n if (error.isChangePassword) {\n return dispatch(changePassword());\n }\n\n if (IS_SERVER) {\n return dispatch(saveError(error));\n }\n\n // trigger a global error, not being caught by a promise\n setTimeout(() => {\n throw error.error;\n });\n\n return dispatch(showXHRErrorNotification(error));\n };\n\n/**\n * Standard Custom error response, acts as a proxy and can be overwritten by {@link setCustomErrorResponseHandler}\n */\nlet customErrorResponseHandler: CustomErrorResponseHandler =\n (errorResponse, defaultHandler) => (dispatch: Dispatch) =>\n dispatch(defaultHandler(errorResponse));\n\n/**\n * Set a custom error response handler,\n * can be used when custom functionality is needed on certain (error) response\n * of the modular ui, for example when custom logic is needed when a user is unauthorized<br>\n * It receives an {@link ErrorResponse} and the {@link defaultErrorResponseHandler}\n */\nexport const setCustomErrorResponseHandler = (\n handler: CustomErrorResponseHandler,\n) => {\n customErrorResponseHandler = handler;\n};\n\n/**\n * Handle errors by sending an error notification message\n */\nexport const handleError =\n (error: Error | FetchException): ThunkAction<> =>\n (dispatch: Dispatch) => {\n dispatch(resetProgress());\n\n const errorResponse = new ErrorResponse(error);\n\n return dispatch(\n customErrorResponseHandler(errorResponse, defaultErrorResponseHandler),\n );\n };\n"],"mappings":"AACA,SAASA,SAAS,QAAQ,2BAA2B;AACrD,SAASC,UAAU,QAAQ,0BAA0B;AAErD,OAAOC,aAAa,MAAM,kCAAkC;AAE5D,SAASC,IAAI,QAAQ,0BAA0B;AAC/C,SAASC,wBAAwB,QAAQ,gBAAgB;AACzD,SAASC,aAAa,QAAQ,qBAAqB;AACnD,SAASC,cAAc,QAAQ,UAAU;AACzC,SAASC,kBAAkB,QAAQ,iBAAiB;AACpD,SAASC,QAAQ,QAAQ,eAAe;AAWxC;AACA;AACA,MAAMC,SAAS,GAAIC,KAAoB,KAAuB;EAC5DC,IAAI,EAAE,YAAY;EAClBC,OAAO,EAAEF;AACX,CAAC,CAAC;;AAEF;AACA;AACA,MAAMG,2BAAwD,GAC3DH,KAAoB,IACpBI,QAAkB,IAAK;EACtB,IAAIJ,KAAK,CAACK,6BAA6B,IAAIL,KAAK,CAACM,wBAAwB,EAAE;IACzE,OAAOF,QAAQ,CAACN,QAAQ,CAAC,CAAC,CAAC;EAC7B;EAEA,IAAIE,KAAK,CAACO,cAAc,EAAE;IACxB,OAAOH,QAAQ,CAACP,kBAAkB,CAACG,KAAK,CAAC,CAAC;EAC5C;EAEA,IAAIA,KAAK,CAACQ,SAAS,IAAIR,KAAK,CAACS,gBAAgB,IAAIT,KAAK,CAACU,iBAAiB,EAAE;IACxE,MAAMC,WAAW,GAAGpB,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC;IACzDa,QAAQ,CAACX,IAAI,CAACkB,WAAW,CAAC,CAAC;EAC7B;EAEA,IAAIX,KAAK,CAACY,gBAAgB,EAAE;IAC1B,OAAOR,QAAQ,CAACR,cAAc,CAAC,CAAC,CAAC;EACnC;EAEA,IAAIN,SAAS,EAAE;IACb,OAAOc,QAAQ,CAACL,SAAS,CAACC,KAAK,CAAC,CAAC;EACnC;;EAEA;EACAa,UAAU,CAAC,MAAM;IACf,MAAMb,KAAK,CAACA,KAAK;EACnB,CAAC,CAAC;EAEF,OAAOI,QAAQ,CAACV,wBAAwB,CAACM,KAAK,CAAC,CAAC;AAClD,CAAC;;AAEH;AACA;AACA;AACA,IAAIc,0BAAsD,GACxDA,CAACC,aAAa,EAAEC,cAAc,KAAMZ,QAAkB,IACpDA,QAAQ,CAACY,cAAc,CAACD,aAAa,CAAC,CAAC;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,6BAA6B,GACxCC,OAAmC,IAChC;EACHJ,0BAA0B,GAAGI,OAAO;AACtC,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMC,WAAW,GACrBnB,KAA6B,IAC7BI,QAAkB,IAAK;EACtBA,QAAQ,CAACT,aAAa,CAAC,CAAC,CAAC;EAEzB,MAAMoB,aAAa,GAAG,IAAIvB,aAAa,CAACQ,KAAK,CAAC;EAE9C,OAAOI,QAAQ,CACbU,0BAA0B,CAACC,aAAa,EAAEZ,2BAA2B,CACvE,CAAC;AACH,CAAC","ignoreList":[]}
@@ -25,7 +25,7 @@ export const previousObject = (form: FormModel): UpdateFormAction => {
25
25
  /**
26
26
  */
27
27
  export const cancelForm =
28
- (form: FormModel): ThunkAction =>
28
+ (form: FormModel): ThunkAction<> =>
29
29
  (dispatch: Dispatch, getState: GetState) => {
30
30
  if (form.key === "ChangePassword" && getState().auth.mustChangePassword) {
31
31
  dispatch(startProgress());
@@ -1 +1 @@
1
- {"version":3,"file":"Form.js","names":["goBack","updateForm","logoutSuccess","reloadApplication","startProgress","finishProgress","Authenticate","previousObject","form","newForm","clone","setPreviousObject","cancelForm","dispatch","getState","key","auth","mustChangePassword","logout","then"],"sources":["../../../src/redux/actions/Form.js"],"sourcesContent":["// @flow\nimport { goBack } from \"../_router/RouterActions\";\nimport { updateForm } from \"../_modularui/ModularUIActions\";\nimport { logoutSuccess } from \"./SignOut\";\nimport { reloadApplication } from \"./Application\";\nimport { startProgress, finishProgress } from \"./ProgressIndicator\";\n\nimport Authenticate from \"../../modularui/Authenticate\";\n\nimport type { Dispatch, GetState, ThunkAction } from \"../types\";\nimport type FormModel from \"../../models/form/FormModel\";\nimport type { UpdateFormAction } from \"../_modularui/types\";\n\n/**\n * Go back to previous object (back button on form)\n */\nexport const previousObject = (form: FormModel): UpdateFormAction => {\n const newForm = form.clone();\n\n newForm.setPreviousObject();\n\n return updateForm(newForm);\n};\n\n/**\n */\nexport const cancelForm =\n (form: FormModel): ThunkAction =>\n (dispatch: Dispatch, getState: GetState) => {\n if (form.key === \"ChangePassword\" && getState().auth.mustChangePassword) {\n dispatch(startProgress());\n return new Authenticate().logout().then(() => {\n dispatch(logoutSuccess());\n dispatch(reloadApplication());\n dispatch(finishProgress());\n\n return dispatch(goBack());\n });\n }\n\n return dispatch(goBack());\n };\n"],"mappings":"AACA,SAASA,MAAM,QAAQ,0BAA0B;AACjD,SAASC,UAAU,QAAQ,gCAAgC;AAC3D,SAASC,aAAa,QAAQ,WAAW;AACzC,SAASC,iBAAiB,QAAQ,eAAe;AACjD,SAASC,aAAa,EAAEC,cAAc,QAAQ,qBAAqB;AAEnE,OAAOC,YAAY,MAAM,8BAA8B;AAMvD;AACA;AACA;AACA,OAAO,MAAMC,cAAc,GAAIC,IAAe,IAAuB;EACnE,MAAMC,OAAO,GAAGD,IAAI,CAACE,KAAK,CAAC,CAAC;EAE5BD,OAAO,CAACE,iBAAiB,CAAC,CAAC;EAE3B,OAAOV,UAAU,CAACQ,OAAO,CAAC;AAC5B,CAAC;;AAED;AACA;AACA,OAAO,MAAMG,UAAU,GACpBJ,IAAe,IAChB,CAACK,QAAkB,EAAEC,QAAkB,KAAK;EAC1C,IAAIN,IAAI,CAACO,GAAG,KAAK,gBAAgB,IAAID,QAAQ,CAAC,CAAC,CAACE,IAAI,CAACC,kBAAkB,EAAE;IACvEJ,QAAQ,CAACT,aAAa,CAAC,CAAC,CAAC;IACzB,OAAO,IAAIE,YAAY,CAAC,CAAC,CAACY,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC,MAAM;MAC5CN,QAAQ,CAACX,aAAa,CAAC,CAAC,CAAC;MACzBW,QAAQ,CAACV,iBAAiB,CAAC,CAAC,CAAC;MAC7BU,QAAQ,CAACR,cAAc,CAAC,CAAC,CAAC;MAE1B,OAAOQ,QAAQ,CAACb,MAAM,CAAC,CAAC,CAAC;IAC3B,CAAC,CAAC;EACJ;EAEA,OAAOa,QAAQ,CAACb,MAAM,CAAC,CAAC,CAAC;AAC3B,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"Form.js","names":["goBack","updateForm","logoutSuccess","reloadApplication","startProgress","finishProgress","Authenticate","previousObject","form","newForm","clone","setPreviousObject","cancelForm","dispatch","getState","key","auth","mustChangePassword","logout","then"],"sources":["../../../src/redux/actions/Form.js"],"sourcesContent":["// @flow\nimport { goBack } from \"../_router/RouterActions\";\nimport { updateForm } from \"../_modularui/ModularUIActions\";\nimport { logoutSuccess } from \"./SignOut\";\nimport { reloadApplication } from \"./Application\";\nimport { startProgress, finishProgress } from \"./ProgressIndicator\";\n\nimport Authenticate from \"../../modularui/Authenticate\";\n\nimport type { Dispatch, GetState, ThunkAction } from \"../types\";\nimport type FormModel from \"../../models/form/FormModel\";\nimport type { UpdateFormAction } from \"../_modularui/types\";\n\n/**\n * Go back to previous object (back button on form)\n */\nexport const previousObject = (form: FormModel): UpdateFormAction => {\n const newForm = form.clone();\n\n newForm.setPreviousObject();\n\n return updateForm(newForm);\n};\n\n/**\n */\nexport const cancelForm =\n (form: FormModel): ThunkAction<> =>\n (dispatch: Dispatch, getState: GetState) => {\n if (form.key === \"ChangePassword\" && getState().auth.mustChangePassword) {\n dispatch(startProgress());\n return new Authenticate().logout().then(() => {\n dispatch(logoutSuccess());\n dispatch(reloadApplication());\n dispatch(finishProgress());\n\n return dispatch(goBack());\n });\n }\n\n return dispatch(goBack());\n };\n"],"mappings":"AACA,SAASA,MAAM,QAAQ,0BAA0B;AACjD,SAASC,UAAU,QAAQ,gCAAgC;AAC3D,SAASC,aAAa,QAAQ,WAAW;AACzC,SAASC,iBAAiB,QAAQ,eAAe;AACjD,SAASC,aAAa,EAAEC,cAAc,QAAQ,qBAAqB;AAEnE,OAAOC,YAAY,MAAM,8BAA8B;AAMvD;AACA;AACA;AACA,OAAO,MAAMC,cAAc,GAAIC,IAAe,IAAuB;EACnE,MAAMC,OAAO,GAAGD,IAAI,CAACE,KAAK,CAAC,CAAC;EAE5BD,OAAO,CAACE,iBAAiB,CAAC,CAAC;EAE3B,OAAOV,UAAU,CAACQ,OAAO,CAAC;AAC5B,CAAC;;AAED;AACA;AACA,OAAO,MAAMG,UAAU,GACpBJ,IAAe,IAChB,CAACK,QAAkB,EAAEC,QAAkB,KAAK;EAC1C,IAAIN,IAAI,CAACO,GAAG,KAAK,gBAAgB,IAAID,QAAQ,CAAC,CAAC,CAACE,IAAI,CAACC,kBAAkB,EAAE;IACvEJ,QAAQ,CAACT,aAAa,CAAC,CAAC,CAAC;IACzB,OAAO,IAAIE,YAAY,CAAC,CAAC,CAACY,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC,MAAM;MAC5CN,QAAQ,CAACX,aAAa,CAAC,CAAC,CAAC;MACzBW,QAAQ,CAACV,iBAAiB,CAAC,CAAC,CAAC;MAC7BU,QAAQ,CAACR,cAAc,CAAC,CAAC,CAAC;MAE1B,OAAOQ,QAAQ,CAACb,MAAM,CAAC,CAAC,CAAC;IAC3B,CAAC,CAAC;EACJ;EAEA,OAAOa,QAAQ,CAACb,MAAM,CAAC,CAAC,CAAC;AAC3B,CAAC","ignoreList":[]}
@@ -29,7 +29,7 @@ export const updateFormAttribute =
29
29
  forceUpdate: false,
30
30
  validate: true,
31
31
  },
32
- ): ThunkAction =>
32
+ ): ThunkAction<> =>
33
33
  (dispatch: Dispatch) => {
34
34
  const newForm = form.clone();
35
35
 
@@ -1 +1 @@
1
- {"version":3,"file":"FormAttributeSet.js","names":["updateForm","getSetting","validateFormObject","autosaveFormObject","autosubmitFormObject","autoupdateFormObject","updateFormAttribute","form","formObject","attribute","inputvalue","options","autosubmit","autosave","autoupdate","forceUpdate","validate","dispatch","newForm","clone","undefined","currentFormObject","equals","updateAttribute","completedFormObjects","forEach","completeObject","isValid","autosubmitAction","autoupdateAction","handleAutoSave","handleValidate","isChanged","hasDynamicValidations"],"sources":["../../../src/redux/actions/FormAttributeSet.js"],"sourcesContent":["// @flow\nimport { updateForm } from \"../_modularui/ModularUIActions\";\n\nimport { getSetting } from \"../../constants/Settings\";\n\nimport { validateFormObject } from \"./FormValidations\";\nimport { autosaveFormObject } from \"./FormAutosave\";\nimport { autosubmitFormObject } from \"./FormAutosubmit\";\nimport { autoupdateFormObject } from \"./FormAutoupdate\";\n\nimport type { Dispatch, ThunkAction, UpdateFormOptions } from \"../types\";\nimport type { AttributeType } from \"../../models/types\";\nimport type FormModel from \"../../models/form/FormModel\";\nimport type FormObjectModel from \"../../models/form/FormObjectModel\";\n\n/**\n * Update an attribute on a form\n */\nexport const updateFormAttribute =\n (\n form: FormModel,\n formObject: FormObjectModel,\n attribute: AttributeType,\n inputvalue: string,\n options: UpdateFormOptions = {\n autosubmit: false,\n autosave: false, // autosave commits the form in the background\n autoupdate: false, // autoupdate does not commit and updates the form with for example a new dynamicschema (work-around for form-tree iq)\n forceUpdate: false,\n validate: true,\n },\n ): ThunkAction =>\n (dispatch: Dispatch) => {\n const newForm = form.clone();\n\n if (options.validate === undefined) {\n options.validate = true;\n }\n\n if (newForm.currentFormObject?.equals(formObject)) {\n newForm.currentFormObject.updateAttribute(attribute, inputvalue);\n } else {\n newForm.completedFormObjects.forEach((completeObject) => {\n if (completeObject.equals(formObject)) {\n completeObject.updateAttribute(attribute, inputvalue);\n }\n });\n }\n\n if (options.autosubmit && newForm.isValid) {\n const autosubmitAction = autosubmitFormObject(\n newForm,\n attribute,\n options.forceUpdate,\n );\n if (autosubmitAction) {\n return dispatch(autosubmitAction);\n }\n }\n\n if (options.autoupdate && newForm.isValid) {\n const autoupdateAction = autoupdateFormObject(newForm, attribute);\n if (autoupdateAction) {\n return dispatch(autoupdateAction);\n }\n }\n\n handleAutoSave(dispatch, newForm, options);\n\n handleValidate(dispatch, newForm, options);\n\n return dispatch(updateForm(newForm));\n };\n\nconst handleAutoSave = (\n dispatch: Dispatch,\n newForm: FormModel,\n options: UpdateFormOptions,\n) => {\n if (options.autosave && newForm.isValid && newForm.isChanged()) {\n dispatch(autosaveFormObject(newForm));\n }\n};\n\nconst handleValidate = (\n dispatch: Dispatch,\n newForm: FormModel,\n options: UpdateFormOptions,\n) => {\n if (\n options.validate &&\n newForm.currentFormObject?.hasDynamicValidations &&\n getSetting(\"USE_INSTANT_SERVER_VALIDATION\")\n ) {\n // server form validations happens async, don't wait for the form to return\n dispatch(validateFormObject(newForm));\n }\n};\n"],"mappings":"AACA,SAASA,UAAU,QAAQ,gCAAgC;AAE3D,SAASC,UAAU,QAAQ,0BAA0B;AAErD,SAASC,kBAAkB,QAAQ,mBAAmB;AACtD,SAASC,kBAAkB,QAAQ,gBAAgB;AACnD,SAASC,oBAAoB,QAAQ,kBAAkB;AACvD,SAASC,oBAAoB,QAAQ,kBAAkB;AAOvD;AACA;AACA;AACA,OAAO,MAAMC,mBAAmB,GAC9BA,CACEC,IAAe,EACfC,UAA2B,EAC3BC,SAAwB,EACxBC,UAAkB,EAClBC,OAA0B,GAAG;EAC3BC,UAAU,EAAE,KAAK;EACjBC,QAAQ,EAAE,KAAK;EAAE;EACjBC,UAAU,EAAE,KAAK;EAAE;EACnBC,WAAW,EAAE,KAAK;EAClBC,QAAQ,EAAE;AACZ,CAAC,KAEFC,QAAkB,IAAK;EACtB,MAAMC,OAAO,GAAGX,IAAI,CAACY,KAAK,CAAC,CAAC;EAE5B,IAAIR,OAAO,CAACK,QAAQ,KAAKI,SAAS,EAAE;IAClCT,OAAO,CAACK,QAAQ,GAAG,IAAI;EACzB;EAEA,IAAIE,OAAO,CAACG,iBAAiB,EAAEC,MAAM,CAACd,UAAU,CAAC,EAAE;IACjDU,OAAO,CAACG,iBAAiB,CAACE,eAAe,CAACd,SAAS,EAAEC,UAAU,CAAC;EAClE,CAAC,MAAM;IACLQ,OAAO,CAACM,oBAAoB,CAACC,OAAO,CAAEC,cAAc,IAAK;MACvD,IAAIA,cAAc,CAACJ,MAAM,CAACd,UAAU,CAAC,EAAE;QACrCkB,cAAc,CAACH,eAAe,CAACd,SAAS,EAAEC,UAAU,CAAC;MACvD;IACF,CAAC,CAAC;EACJ;EAEA,IAAIC,OAAO,CAACC,UAAU,IAAIM,OAAO,CAACS,OAAO,EAAE;IACzC,MAAMC,gBAAgB,GAAGxB,oBAAoB,CAC3Cc,OAAO,EACPT,SAAS,EACTE,OAAO,CAACI,WACV,CAAC;IACD,IAAIa,gBAAgB,EAAE;MACpB,OAAOX,QAAQ,CAACW,gBAAgB,CAAC;IACnC;EACF;EAEA,IAAIjB,OAAO,CAACG,UAAU,IAAII,OAAO,CAACS,OAAO,EAAE;IACzC,MAAME,gBAAgB,GAAGxB,oBAAoB,CAACa,OAAO,EAAET,SAAS,CAAC;IACjE,IAAIoB,gBAAgB,EAAE;MACpB,OAAOZ,QAAQ,CAACY,gBAAgB,CAAC;IACnC;EACF;EAEAC,cAAc,CAACb,QAAQ,EAAEC,OAAO,EAAEP,OAAO,CAAC;EAE1CoB,cAAc,CAACd,QAAQ,EAAEC,OAAO,EAAEP,OAAO,CAAC;EAE1C,OAAOM,QAAQ,CAACjB,UAAU,CAACkB,OAAO,CAAC,CAAC;AACtC,CAAC;AAEH,MAAMY,cAAc,GAAGA,CACrBb,QAAkB,EAClBC,OAAkB,EAClBP,OAA0B,KACvB;EACH,IAAIA,OAAO,CAACE,QAAQ,IAAIK,OAAO,CAACS,OAAO,IAAIT,OAAO,CAACc,SAAS,CAAC,CAAC,EAAE;IAC9Df,QAAQ,CAACd,kBAAkB,CAACe,OAAO,CAAC,CAAC;EACvC;AACF,CAAC;AAED,MAAMa,cAAc,GAAGA,CACrBd,QAAkB,EAClBC,OAAkB,EAClBP,OAA0B,KACvB;EACH,IACEA,OAAO,CAACK,QAAQ,IAChBE,OAAO,CAACG,iBAAiB,EAAEY,qBAAqB,IAChDhC,UAAU,CAAC,+BAA+B,CAAC,EAC3C;IACA;IACAgB,QAAQ,CAACf,kBAAkB,CAACgB,OAAO,CAAC,CAAC;EACvC;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"FormAttributeSet.js","names":["updateForm","getSetting","validateFormObject","autosaveFormObject","autosubmitFormObject","autoupdateFormObject","updateFormAttribute","form","formObject","attribute","inputvalue","options","autosubmit","autosave","autoupdate","forceUpdate","validate","dispatch","newForm","clone","undefined","currentFormObject","equals","updateAttribute","completedFormObjects","forEach","completeObject","isValid","autosubmitAction","autoupdateAction","handleAutoSave","handleValidate","isChanged","hasDynamicValidations"],"sources":["../../../src/redux/actions/FormAttributeSet.js"],"sourcesContent":["// @flow\nimport { updateForm } from \"../_modularui/ModularUIActions\";\n\nimport { getSetting } from \"../../constants/Settings\";\n\nimport { validateFormObject } from \"./FormValidations\";\nimport { autosaveFormObject } from \"./FormAutosave\";\nimport { autosubmitFormObject } from \"./FormAutosubmit\";\nimport { autoupdateFormObject } from \"./FormAutoupdate\";\n\nimport type { Dispatch, ThunkAction, UpdateFormOptions } from \"../types\";\nimport type { AttributeType } from \"../../models/types\";\nimport type FormModel from \"../../models/form/FormModel\";\nimport type FormObjectModel from \"../../models/form/FormObjectModel\";\n\n/**\n * Update an attribute on a form\n */\nexport const updateFormAttribute =\n (\n form: FormModel,\n formObject: FormObjectModel,\n attribute: AttributeType,\n inputvalue: string,\n options: UpdateFormOptions = {\n autosubmit: false,\n autosave: false, // autosave commits the form in the background\n autoupdate: false, // autoupdate does not commit and updates the form with for example a new dynamicschema (work-around for form-tree iq)\n forceUpdate: false,\n validate: true,\n },\n ): ThunkAction<> =>\n (dispatch: Dispatch) => {\n const newForm = form.clone();\n\n if (options.validate === undefined) {\n options.validate = true;\n }\n\n if (newForm.currentFormObject?.equals(formObject)) {\n newForm.currentFormObject.updateAttribute(attribute, inputvalue);\n } else {\n newForm.completedFormObjects.forEach((completeObject) => {\n if (completeObject.equals(formObject)) {\n completeObject.updateAttribute(attribute, inputvalue);\n }\n });\n }\n\n if (options.autosubmit && newForm.isValid) {\n const autosubmitAction = autosubmitFormObject(\n newForm,\n attribute,\n options.forceUpdate,\n );\n if (autosubmitAction) {\n return dispatch(autosubmitAction);\n }\n }\n\n if (options.autoupdate && newForm.isValid) {\n const autoupdateAction = autoupdateFormObject(newForm, attribute);\n if (autoupdateAction) {\n return dispatch(autoupdateAction);\n }\n }\n\n handleAutoSave(dispatch, newForm, options);\n\n handleValidate(dispatch, newForm, options);\n\n return dispatch(updateForm(newForm));\n };\n\nconst handleAutoSave = (\n dispatch: Dispatch,\n newForm: FormModel,\n options: UpdateFormOptions,\n) => {\n if (options.autosave && newForm.isValid && newForm.isChanged()) {\n dispatch(autosaveFormObject(newForm));\n }\n};\n\nconst handleValidate = (\n dispatch: Dispatch,\n newForm: FormModel,\n options: UpdateFormOptions,\n) => {\n if (\n options.validate &&\n newForm.currentFormObject?.hasDynamicValidations &&\n getSetting(\"USE_INSTANT_SERVER_VALIDATION\")\n ) {\n // server form validations happens async, don't wait for the form to return\n dispatch(validateFormObject(newForm));\n }\n};\n"],"mappings":"AACA,SAASA,UAAU,QAAQ,gCAAgC;AAE3D,SAASC,UAAU,QAAQ,0BAA0B;AAErD,SAASC,kBAAkB,QAAQ,mBAAmB;AACtD,SAASC,kBAAkB,QAAQ,gBAAgB;AACnD,SAASC,oBAAoB,QAAQ,kBAAkB;AACvD,SAASC,oBAAoB,QAAQ,kBAAkB;AAOvD;AACA;AACA;AACA,OAAO,MAAMC,mBAAmB,GAC9BA,CACEC,IAAe,EACfC,UAA2B,EAC3BC,SAAwB,EACxBC,UAAkB,EAClBC,OAA0B,GAAG;EAC3BC,UAAU,EAAE,KAAK;EACjBC,QAAQ,EAAE,KAAK;EAAE;EACjBC,UAAU,EAAE,KAAK;EAAE;EACnBC,WAAW,EAAE,KAAK;EAClBC,QAAQ,EAAE;AACZ,CAAC,KAEFC,QAAkB,IAAK;EACtB,MAAMC,OAAO,GAAGX,IAAI,CAACY,KAAK,CAAC,CAAC;EAE5B,IAAIR,OAAO,CAACK,QAAQ,KAAKI,SAAS,EAAE;IAClCT,OAAO,CAACK,QAAQ,GAAG,IAAI;EACzB;EAEA,IAAIE,OAAO,CAACG,iBAAiB,EAAEC,MAAM,CAACd,UAAU,CAAC,EAAE;IACjDU,OAAO,CAACG,iBAAiB,CAACE,eAAe,CAACd,SAAS,EAAEC,UAAU,CAAC;EAClE,CAAC,MAAM;IACLQ,OAAO,CAACM,oBAAoB,CAACC,OAAO,CAAEC,cAAc,IAAK;MACvD,IAAIA,cAAc,CAACJ,MAAM,CAACd,UAAU,CAAC,EAAE;QACrCkB,cAAc,CAACH,eAAe,CAACd,SAAS,EAAEC,UAAU,CAAC;MACvD;IACF,CAAC,CAAC;EACJ;EAEA,IAAIC,OAAO,CAACC,UAAU,IAAIM,OAAO,CAACS,OAAO,EAAE;IACzC,MAAMC,gBAAgB,GAAGxB,oBAAoB,CAC3Cc,OAAO,EACPT,SAAS,EACTE,OAAO,CAACI,WACV,CAAC;IACD,IAAIa,gBAAgB,EAAE;MACpB,OAAOX,QAAQ,CAACW,gBAAgB,CAAC;IACnC;EACF;EAEA,IAAIjB,OAAO,CAACG,UAAU,IAAII,OAAO,CAACS,OAAO,EAAE;IACzC,MAAME,gBAAgB,GAAGxB,oBAAoB,CAACa,OAAO,EAAET,SAAS,CAAC;IACjE,IAAIoB,gBAAgB,EAAE;MACpB,OAAOZ,QAAQ,CAACY,gBAAgB,CAAC;IACnC;EACF;EAEAC,cAAc,CAACb,QAAQ,EAAEC,OAAO,EAAEP,OAAO,CAAC;EAE1CoB,cAAc,CAACd,QAAQ,EAAEC,OAAO,EAAEP,OAAO,CAAC;EAE1C,OAAOM,QAAQ,CAACjB,UAAU,CAACkB,OAAO,CAAC,CAAC;AACtC,CAAC;AAEH,MAAMY,cAAc,GAAGA,CACrBb,QAAkB,EAClBC,OAAkB,EAClBP,OAA0B,KACvB;EACH,IAAIA,OAAO,CAACE,QAAQ,IAAIK,OAAO,CAACS,OAAO,IAAIT,OAAO,CAACc,SAAS,CAAC,CAAC,EAAE;IAC9Df,QAAQ,CAACd,kBAAkB,CAACe,OAAO,CAAC,CAAC;EACvC;AACF,CAAC;AAED,MAAMa,cAAc,GAAGA,CACrBd,QAAkB,EAClBC,OAAkB,EAClBP,OAA0B,KACvB;EACH,IACEA,OAAO,CAACK,QAAQ,IAChBE,OAAO,CAACG,iBAAiB,EAAEY,qBAAqB,IAChDhC,UAAU,CAAC,+BAA+B,CAAC,EAC3C;IACA;IACAgB,QAAQ,CAACf,kBAAkB,CAACgB,OAAO,CAAC,CAAC;EACvC;AACF,CAAC","ignoreList":[]}
@@ -68,6 +68,6 @@ const debouncedAutosave = debounce((dispatch, form) => {
68
68
  /**
69
69
  */
70
70
  export const autosaveFormObject =
71
- (form: FormModel): ThunkAction =>
71
+ (form: FormModel): ThunkAction<> =>
72
72
  (dispatch) =>
73
73
  debouncedAutosave(dispatch, form);