@beinformed/ui 1.65.17 → 1.65.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/esm/hooks/useModularUI.js +2 -2
- package/esm/hooks/useModularUI.js.flow +2 -2
- package/esm/hooks/useModularUI.js.map +1 -1
- package/esm/hooks/useModularUIBasic.js +0 -1
- package/esm/hooks/useModularUIBasic.js.flow +0 -1
- package/esm/hooks/useModularUIBasic.js.map +1 -1
- package/lib/hooks/useModularUI.js +2 -2
- package/lib/hooks/useModularUI.js.map +1 -1
- package/lib/hooks/useModularUIBasic.js +0 -1
- package/lib/hooks/useModularUIBasic.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [1.65.18](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.65.17...v1.65.18) (2026-01-15)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **hooks:** update `removeOnUnmount` default to `true` and clean up unused option in `useModularUIBasic` ([81c6662](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/81c66624e019f1a14611759ec281ec046a1dea5e))
|
|
11
|
+
|
|
5
12
|
## [1.65.17](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.65.15...v1.65.17) (2026-01-15)
|
|
6
13
|
|
|
7
14
|
|
|
@@ -17,7 +17,7 @@ export const useModularUI = (modelKey, url, options = {}) => {
|
|
|
17
17
|
const requestOptions = useMemo(() => {
|
|
18
18
|
const merged = {
|
|
19
19
|
method: HTTP_METHODS.GET,
|
|
20
|
-
removeOnUnmount:
|
|
20
|
+
removeOnUnmount: true,
|
|
21
21
|
...options
|
|
22
22
|
};
|
|
23
23
|
if (url instanceof Href) {
|
|
@@ -28,7 +28,7 @@ export const useModularUI = (modelKey, url, options = {}) => {
|
|
|
28
28
|
}, [options, url]);
|
|
29
29
|
const location = useLocation();
|
|
30
30
|
const redirectLocation = location.state?.redirectLocation;
|
|
31
|
-
const shouldLoad = model == null || model.status === MODULARUI_STATUS.ERROR || (redirectLocation instanceof Href ? redirectLocation
|
|
31
|
+
const shouldLoad = model == null || model.status === MODULARUI_STATUS.ERROR || (redirectLocation instanceof Href ? redirectLocation.equals(href) : false) || requestOptions.isReload === true;
|
|
32
32
|
|
|
33
33
|
// dispatch loadModularUI
|
|
34
34
|
useDeepCompareEffect(() => {
|
|
@@ -33,7 +33,7 @@ export const useModularUI = (
|
|
|
33
33
|
const requestOptions = useMemo(() => {
|
|
34
34
|
const merged = {
|
|
35
35
|
method: HTTP_METHODS.GET,
|
|
36
|
-
removeOnUnmount:
|
|
36
|
+
removeOnUnmount: true,
|
|
37
37
|
...options,
|
|
38
38
|
};
|
|
39
39
|
|
|
@@ -51,7 +51,7 @@ export const useModularUI = (
|
|
|
51
51
|
model == null ||
|
|
52
52
|
model.status === MODULARUI_STATUS.ERROR ||
|
|
53
53
|
(redirectLocation instanceof Href
|
|
54
|
-
? redirectLocation
|
|
54
|
+
? redirectLocation.equals(href)
|
|
55
55
|
: false) ||
|
|
56
56
|
requestOptions.isReload === true;
|
|
57
57
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useModularUI.js","names":["useEffect","useMemo","useDispatch","useSelector","useLocation","HTTP_METHODS","MODULARUI_STATUS","loadModularUI","removeModelByKey","useDeepCompareEffect","useModularUIKey","Href","useModularUI","modelKey","url","options","dispatch","href","toString","key","model","state","modularui","requestOptions","merged","method","GET","removeOnUnmount","origin","contextPath","location","redirectLocation","shouldLoad","status","ERROR","equals","isReload"],"sources":["../../src/hooks/useModularUI.js"],"sourcesContent":["// @flow\nimport { useEffect, useMemo } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useLocation } from \"react-router\";\n\nimport { HTTP_METHODS, MODULARUI_STATUS } from \"../constants\";\nimport {\n loadModularUI,\n removeModelByKey,\n} from \"../redux/_modularui/ModularUIActions\";\n\nimport useDeepCompareEffect from \"./useDeepCompareEffect\";\nimport { useModularUIKey } from \"./useModularUIKey\";\n\nimport Href from \"../models/href/Href\";\nimport type { RequestModularUIOptions } from \"../utils\";\n\n/**\n * Core hook to retrieve information for a Be Informed modular ui resource\n */\nexport const useModularUI = (\n modelKey: string,\n url: string | Href,\n options: RequestModularUIOptions = (({}: any): RequestModularUIOptions),\n): any => {\n const dispatch = useDispatch();\n\n const href = useMemo(() => url?.toString() || \"\", [url]);\n const key = useModularUIKey(modelKey, href);\n\n const model = useSelector((state) => state.modularui[key]);\n\n const requestOptions = useMemo(() => {\n const merged = {\n method: HTTP_METHODS.GET,\n removeOnUnmount:
|
|
1
|
+
{"version":3,"file":"useModularUI.js","names":["useEffect","useMemo","useDispatch","useSelector","useLocation","HTTP_METHODS","MODULARUI_STATUS","loadModularUI","removeModelByKey","useDeepCompareEffect","useModularUIKey","Href","useModularUI","modelKey","url","options","dispatch","href","toString","key","model","state","modularui","requestOptions","merged","method","GET","removeOnUnmount","origin","contextPath","location","redirectLocation","shouldLoad","status","ERROR","equals","isReload"],"sources":["../../src/hooks/useModularUI.js"],"sourcesContent":["// @flow\nimport { useEffect, useMemo } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useLocation } from \"react-router\";\n\nimport { HTTP_METHODS, MODULARUI_STATUS } from \"../constants\";\nimport {\n loadModularUI,\n removeModelByKey,\n} from \"../redux/_modularui/ModularUIActions\";\n\nimport useDeepCompareEffect from \"./useDeepCompareEffect\";\nimport { useModularUIKey } from \"./useModularUIKey\";\n\nimport Href from \"../models/href/Href\";\nimport type { RequestModularUIOptions } from \"../utils\";\n\n/**\n * Core hook to retrieve information for a Be Informed modular ui resource\n */\nexport const useModularUI = (\n modelKey: string,\n url: string | Href,\n options: RequestModularUIOptions = (({}: any): RequestModularUIOptions),\n): any => {\n const dispatch = useDispatch();\n\n const href = useMemo(() => url?.toString() || \"\", [url]);\n const key = useModularUIKey(modelKey, href);\n\n const model = useSelector((state) => state.modularui[key]);\n\n const requestOptions = useMemo(() => {\n const merged = {\n method: HTTP_METHODS.GET,\n removeOnUnmount: true,\n ...options,\n };\n\n if (url instanceof Href) {\n merged.origin = merged.origin ?? url.origin;\n merged.contextPath = merged.contextPath ?? url.contextPath;\n }\n return merged;\n }, [options, url]);\n\n const location = useLocation();\n const redirectLocation = location.state?.redirectLocation;\n\n const shouldLoad =\n model == null ||\n model.status === MODULARUI_STATUS.ERROR ||\n (redirectLocation instanceof Href\n ? redirectLocation.equals(href)\n : false) ||\n requestOptions.isReload === true;\n\n // dispatch loadModularUI\n useDeepCompareEffect(() => {\n if (href !== \"\" && shouldLoad) {\n dispatch(loadModularUI(key, href, requestOptions));\n }\n }, [key, href, requestOptions, shouldLoad]);\n\n useEffect(() => {\n if (requestOptions.removeOnUnmount) {\n return () => {\n dispatch(removeModelByKey(key));\n };\n }\n }, [dispatch, key, requestOptions.removeOnUnmount]);\n\n return model;\n};\n"],"mappings":"AACA,SAASA,SAAS,EAAEC,OAAO,QAAQ,OAAO;AAC1C,SAASC,WAAW,EAAEC,WAAW,QAAQ,aAAa;AACtD,SAASC,WAAW,QAAQ,cAAc;AAE1C,SAASC,YAAY,EAAEC,gBAAgB,QAAQ,cAAc;AAC7D,SACEC,aAAa,EACbC,gBAAgB,QACX,sCAAsC;AAE7C,OAAOC,oBAAoB,MAAM,wBAAwB;AACzD,SAASC,eAAe,QAAQ,mBAAmB;AAEnD,OAAOC,IAAI,MAAM,qBAAqB;AAGtC;AACA;AACA;AACA,OAAO,MAAMC,YAAY,GAAGA,CAC1BC,QAAgB,EAChBC,GAAkB,EAClBC,OAAgC,GAAK,CAAC,CAAiC,KAC/D;EACR,MAAMC,QAAQ,GAAGd,WAAW,CAAC,CAAC;EAE9B,MAAMe,IAAI,GAAGhB,OAAO,CAAC,MAAMa,GAAG,EAAEI,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAACJ,GAAG,CAAC,CAAC;EACxD,MAAMK,GAAG,GAAGT,eAAe,CAACG,QAAQ,EAAEI,IAAI,CAAC;EAE3C,MAAMG,KAAK,GAAGjB,WAAW,CAAEkB,KAAK,IAAKA,KAAK,CAACC,SAAS,CAACH,GAAG,CAAC,CAAC;EAE1D,MAAMI,cAAc,GAAGtB,OAAO,CAAC,MAAM;IACnC,MAAMuB,MAAM,GAAG;MACbC,MAAM,EAAEpB,YAAY,CAACqB,GAAG;MACxBC,eAAe,EAAE,IAAI;MACrB,GAAGZ;IACL,CAAC;IAED,IAAID,GAAG,YAAYH,IAAI,EAAE;MACvBa,MAAM,CAACI,MAAM,GAAGJ,MAAM,CAACI,MAAM,IAAId,GAAG,CAACc,MAAM;MAC3CJ,MAAM,CAACK,WAAW,GAAGL,MAAM,CAACK,WAAW,IAAIf,GAAG,CAACe,WAAW;IAC5D;IACA,OAAOL,MAAM;EACf,CAAC,EAAE,CAACT,OAAO,EAAED,GAAG,CAAC,CAAC;EAElB,MAAMgB,QAAQ,GAAG1B,WAAW,CAAC,CAAC;EAC9B,MAAM2B,gBAAgB,GAAGD,QAAQ,CAACT,KAAK,EAAEU,gBAAgB;EAEzD,MAAMC,UAAU,GACdZ,KAAK,IAAI,IAAI,IACbA,KAAK,CAACa,MAAM,KAAK3B,gBAAgB,CAAC4B,KAAK,KACtCH,gBAAgB,YAAYpB,IAAI,GAC7BoB,gBAAgB,CAACI,MAAM,CAAClB,IAAI,CAAC,GAC7B,KAAK,CAAC,IACVM,cAAc,CAACa,QAAQ,KAAK,IAAI;;EAElC;EACA3B,oBAAoB,CAAC,MAAM;IACzB,IAAIQ,IAAI,KAAK,EAAE,IAAIe,UAAU,EAAE;MAC7BhB,QAAQ,CAACT,aAAa,CAACY,GAAG,EAAEF,IAAI,EAAEM,cAAc,CAAC,CAAC;IACpD;EACF,CAAC,EAAE,CAACJ,GAAG,EAAEF,IAAI,EAAEM,cAAc,EAAES,UAAU,CAAC,CAAC;EAE3ChC,SAAS,CAAC,MAAM;IACd,IAAIuB,cAAc,CAACI,eAAe,EAAE;MAClC,OAAO,MAAM;QACXX,QAAQ,CAACR,gBAAgB,CAACW,GAAG,CAAC,CAAC;MACjC,CAAC;IACH;EACF,CAAC,EAAE,CAACH,QAAQ,EAAEG,GAAG,EAAEI,cAAc,CAACI,eAAe,CAAC,CAAC;EAEnD,OAAOP,KAAK;AACd,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useModularUIBasic.js","names":["useLocation","useSelector","useMemo","useModularUI","HTTP_METHODS","MODULARUI_STATUS","useModularUIKey","createUseModularUIOptions","options","href","mustReload","baseOptions","expectedModels","method","GET","data","undefined","
|
|
1
|
+
{"version":3,"file":"useModularUIBasic.js","names":["useLocation","useSelector","useMemo","useModularUI","HTTP_METHODS","MODULARUI_STATUS","useModularUIKey","createUseModularUIOptions","options","href","mustReload","baseOptions","expectedModels","method","GET","data","undefined","isReload","formdata","POST","validateModel","model","length","isCorrectModel","_includesInstanceProperty","call","type","console","warn","useModularUIBasic","defaultKey","memoizedHref","toString","key","useReload","modularUIOptions","modularUI","modelKey","url","location","modelEntry","state","modularui","reload","isFullyLoaded","status","FINISHED","lastModification"],"sources":["../../src/hooks/useModularUIBasic.js"],"sourcesContent":["// @flow\nimport { useLocation } from \"react-router\";\nimport { useSelector } from \"react-redux\";\nimport { useMemo } from \"react\";\nimport { useModularUI } from \"./useModularUI\";\n\nimport { HTTP_METHODS, MODULARUI_STATUS } from \"../constants\";\nimport { useModularUIKey } from \"./useModularUIKey\";\n\nimport type { ModularUIModel, Href } from \"../models\";\nexport type HookOptions = {\n key?: string,\n origin?: string,\n contextPath?: string,\n removeOnUnmount?: boolean,\n formdata?: any,\n};\n\nexport type UseModularUIBasicOptions<T: ModularUIModel> = {\n expectedModels?: Array<string>,\n targetModel?: Class<T> | Array<Class<T>>,\n forceTargetModel?: boolean,\n origin?: string,\n contextPath?: string,\n cache?: boolean,\n key?: string,\n isReload?: boolean,\n removeOnUnmount?: boolean,\n formdata?: any,\n};\n\n// Helper to create useModularUI options\nconst createUseModularUIOptions = <T: ModularUIModel>(\n options: UseModularUIBasicOptions<T>,\n href: string,\n mustReload: boolean,\n): Object => {\n const baseOptions = {\n expectedModels: [],\n method: HTTP_METHODS.GET,\n data: undefined,\n ...options,\n isReload: mustReload || options.isReload,\n };\n\n if (options.formdata != null) {\n baseOptions.method = HTTP_METHODS.POST;\n baseOptions.data = options.formdata;\n }\n\n return baseOptions;\n};\n\n// Helper to validate the model against expectedModels\nconst validateModel = (model: any, expectedModels: Array<string>) => {\n if (expectedModels.length > 0) {\n const isCorrectModel = expectedModels.includes(model.type);\n if (!isCorrectModel) {\n console.warn(model, \"is not of instance\", expectedModels);\n }\n }\n};\n\n/**\n * useModularUIBasic Hook\n */\nexport const useModularUIBasic = <T: ModularUIModel>(\n defaultKey: string,\n href: string | Href,\n options: UseModularUIBasicOptions<T> = (({}: any): UseModularUIBasicOptions<T>),\n): T | null => {\n const memoizedHref = useMemo(() => href.toString(), [href]);\n const key = options.key ?? defaultKey;\n\n const mustReload = useReload(key, memoizedHref);\n const modularUIOptions = useMemo(\n () => createUseModularUIOptions(options, memoizedHref, mustReload),\n [options, memoizedHref, mustReload],\n );\n\n const modularUI = useModularUI(key, href, modularUIOptions);\n const expectedModels = useMemo(\n () => options.expectedModels ?? [],\n [options.expectedModels],\n );\n\n return useMemo((): T | null => {\n if (modularUI?.model) {\n validateModel(modularUI.model, expectedModels);\n return modularUI.model;\n }\n return null;\n }, [expectedModels, modularUI]);\n};\n\n/**\n * Check if the model corresponding to a modular ui service should be reloaded\n */\nexport const useReload = (modelKey: string, url: string): boolean => {\n const location = useLocation();\n const key = useModularUIKey(modelKey, url);\n const modelEntry = useSelector((state) => state.modularui[key]);\n\n if (modelEntry) {\n const reload = location.state?.reload || 0;\n if (reload > 0) {\n const isFullyLoaded = modelEntry?.status === MODULARUI_STATUS.FINISHED;\n const lastModification = modelEntry?.lastModification ?? 0;\n if (isFullyLoaded && lastModification < reload) {\n return true;\n }\n }\n }\n return false;\n};\n"],"mappings":";AACA,SAASA,WAAW,QAAQ,cAAc;AAC1C,SAASC,WAAW,QAAQ,aAAa;AACzC,SAASC,OAAO,QAAQ,OAAO;AAC/B,SAASC,YAAY,QAAQ,gBAAgB;AAE7C,SAASC,YAAY,EAAEC,gBAAgB,QAAQ,cAAc;AAC7D,SAASC,eAAe,QAAQ,mBAAmB;AAwBnD;AACA,MAAMC,yBAAyB,GAAGA,CAChCC,OAAoC,EACpCC,IAAY,EACZC,UAAmB,KACR;EACX,MAAMC,WAAW,GAAG;IAClBC,cAAc,EAAE,EAAE;IAClBC,MAAM,EAAET,YAAY,CAACU,GAAG;IACxBC,IAAI,EAAEC,SAAS;IACf,GAAGR,OAAO;IACVS,QAAQ,EAAEP,UAAU,IAAIF,OAAO,CAACS;EAClC,CAAC;EAED,IAAIT,OAAO,CAACU,QAAQ,IAAI,IAAI,EAAE;IAC5BP,WAAW,CAACE,MAAM,GAAGT,YAAY,CAACe,IAAI;IACtCR,WAAW,CAACI,IAAI,GAAGP,OAAO,CAACU,QAAQ;EACrC;EAEA,OAAOP,WAAW;AACpB,CAAC;;AAED;AACA,MAAMS,aAAa,GAAGA,CAACC,KAAU,EAAET,cAA6B,KAAK;EACnE,IAAIA,cAAc,CAACU,MAAM,GAAG,CAAC,EAAE;IAC7B,MAAMC,cAAc,GAAGC,yBAAA,CAAAZ,cAAc,EAAAa,IAAA,CAAdb,cAAc,EAAUS,KAAK,CAACK,IAAI,CAAC;IAC1D,IAAI,CAACH,cAAc,EAAE;MACnBI,OAAO,CAACC,IAAI,CAACP,KAAK,EAAE,oBAAoB,EAAET,cAAc,CAAC;IAC3D;EACF;AACF,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMiB,iBAAiB,GAAGA,CAC/BC,UAAkB,EAClBrB,IAAmB,EACnBD,OAAoC,GAAK,CAAC,CAAqC,KAClE;EACb,MAAMuB,YAAY,GAAG7B,OAAO,CAAC,MAAMO,IAAI,CAACuB,QAAQ,CAAC,CAAC,EAAE,CAACvB,IAAI,CAAC,CAAC;EAC3D,MAAMwB,GAAG,GAAGzB,OAAO,CAACyB,GAAG,IAAIH,UAAU;EAErC,MAAMpB,UAAU,GAAGwB,SAAS,CAACD,GAAG,EAAEF,YAAY,CAAC;EAC/C,MAAMI,gBAAgB,GAAGjC,OAAO,CAC9B,MAAMK,yBAAyB,CAACC,OAAO,EAAEuB,YAAY,EAAErB,UAAU,CAAC,EAClE,CAACF,OAAO,EAAEuB,YAAY,EAAErB,UAAU,CACpC,CAAC;EAED,MAAM0B,SAAS,GAAGjC,YAAY,CAAC8B,GAAG,EAAExB,IAAI,EAAE0B,gBAAgB,CAAC;EAC3D,MAAMvB,cAAc,GAAGV,OAAO,CAC5B,MAAMM,OAAO,CAACI,cAAc,IAAI,EAAE,EAClC,CAACJ,OAAO,CAACI,cAAc,CACzB,CAAC;EAED,OAAOV,OAAO,CAAC,MAAgB;IAC7B,IAAIkC,SAAS,EAAEf,KAAK,EAAE;MACpBD,aAAa,CAACgB,SAAS,CAACf,KAAK,EAAET,cAAc,CAAC;MAC9C,OAAOwB,SAAS,CAACf,KAAK;IACxB;IACA,OAAO,IAAI;EACb,CAAC,EAAE,CAACT,cAAc,EAAEwB,SAAS,CAAC,CAAC;AACjC,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMF,SAAS,GAAGA,CAACG,QAAgB,EAAEC,GAAW,KAAc;EACnE,MAAMC,QAAQ,GAAGvC,WAAW,CAAC,CAAC;EAC9B,MAAMiC,GAAG,GAAG3B,eAAe,CAAC+B,QAAQ,EAAEC,GAAG,CAAC;EAC1C,MAAME,UAAU,GAAGvC,WAAW,CAAEwC,KAAK,IAAKA,KAAK,CAACC,SAAS,CAACT,GAAG,CAAC,CAAC;EAE/D,IAAIO,UAAU,EAAE;IACd,MAAMG,MAAM,GAAGJ,QAAQ,CAACE,KAAK,EAAEE,MAAM,IAAI,CAAC;IAC1C,IAAIA,MAAM,GAAG,CAAC,EAAE;MACd,MAAMC,aAAa,GAAGJ,UAAU,EAAEK,MAAM,KAAKxC,gBAAgB,CAACyC,QAAQ;MACtE,MAAMC,gBAAgB,GAAGP,UAAU,EAAEO,gBAAgB,IAAI,CAAC;MAC1D,IAAIH,aAAa,IAAIG,gBAAgB,GAAGJ,MAAM,EAAE;QAC9C,OAAO,IAAI;MACb;IACF;EACF;EACA,OAAO,KAAK;AACd,CAAC","ignoreList":[]}
|
|
@@ -24,7 +24,7 @@ const useModularUI = (modelKey, url, options = {}) => {
|
|
|
24
24
|
const requestOptions = (0, _react.useMemo)(() => {
|
|
25
25
|
const merged = {
|
|
26
26
|
method: _constants.HTTP_METHODS.GET,
|
|
27
|
-
removeOnUnmount:
|
|
27
|
+
removeOnUnmount: true,
|
|
28
28
|
...options
|
|
29
29
|
};
|
|
30
30
|
if (url instanceof _Href.default) {
|
|
@@ -35,7 +35,7 @@ const useModularUI = (modelKey, url, options = {}) => {
|
|
|
35
35
|
}, [options, url]);
|
|
36
36
|
const location = (0, _reactRouter.useLocation)();
|
|
37
37
|
const redirectLocation = location.state?.redirectLocation;
|
|
38
|
-
const shouldLoad = model == null || model.status === _constants.MODULARUI_STATUS.ERROR || (redirectLocation instanceof _Href.default ? redirectLocation
|
|
38
|
+
const shouldLoad = model == null || model.status === _constants.MODULARUI_STATUS.ERROR || (redirectLocation instanceof _Href.default ? redirectLocation.equals(href) : false) || requestOptions.isReload === true;
|
|
39
39
|
|
|
40
40
|
// dispatch loadModularUI
|
|
41
41
|
(0, _useDeepCompareEffect.default)(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useModularUI.js","names":["_react","require","_reactRedux","_reactRouter","_constants","_ModularUIActions","_useDeepCompareEffect","_interopRequireDefault","_useModularUIKey","_Href","useModularUI","modelKey","url","options","dispatch","useDispatch","href","useMemo","toString","key","useModularUIKey","model","useSelector","state","modularui","requestOptions","merged","method","HTTP_METHODS","GET","removeOnUnmount","Href","origin","contextPath","location","useLocation","redirectLocation","shouldLoad","status","MODULARUI_STATUS","ERROR","equals","isReload","useDeepCompareEffect","loadModularUI","useEffect","removeModelByKey","exports"],"sources":["../../src/hooks/useModularUI.js"],"sourcesContent":["// @flow\nimport { useEffect, useMemo } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useLocation } from \"react-router\";\n\nimport { HTTP_METHODS, MODULARUI_STATUS } from \"../constants\";\nimport {\n loadModularUI,\n removeModelByKey,\n} from \"../redux/_modularui/ModularUIActions\";\n\nimport useDeepCompareEffect from \"./useDeepCompareEffect\";\nimport { useModularUIKey } from \"./useModularUIKey\";\n\nimport Href from \"../models/href/Href\";\nimport type { RequestModularUIOptions } from \"../utils\";\n\n/**\n * Core hook to retrieve information for a Be Informed modular ui resource\n */\nexport const useModularUI = (\n modelKey: string,\n url: string | Href,\n options: RequestModularUIOptions = (({}: any): RequestModularUIOptions),\n): any => {\n const dispatch = useDispatch();\n\n const href = useMemo(() => url?.toString() || \"\", [url]);\n const key = useModularUIKey(modelKey, href);\n\n const model = useSelector((state) => state.modularui[key]);\n\n const requestOptions = useMemo(() => {\n const merged = {\n method: HTTP_METHODS.GET,\n removeOnUnmount:
|
|
1
|
+
{"version":3,"file":"useModularUI.js","names":["_react","require","_reactRedux","_reactRouter","_constants","_ModularUIActions","_useDeepCompareEffect","_interopRequireDefault","_useModularUIKey","_Href","useModularUI","modelKey","url","options","dispatch","useDispatch","href","useMemo","toString","key","useModularUIKey","model","useSelector","state","modularui","requestOptions","merged","method","HTTP_METHODS","GET","removeOnUnmount","Href","origin","contextPath","location","useLocation","redirectLocation","shouldLoad","status","MODULARUI_STATUS","ERROR","equals","isReload","useDeepCompareEffect","loadModularUI","useEffect","removeModelByKey","exports"],"sources":["../../src/hooks/useModularUI.js"],"sourcesContent":["// @flow\nimport { useEffect, useMemo } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useLocation } from \"react-router\";\n\nimport { HTTP_METHODS, MODULARUI_STATUS } from \"../constants\";\nimport {\n loadModularUI,\n removeModelByKey,\n} from \"../redux/_modularui/ModularUIActions\";\n\nimport useDeepCompareEffect from \"./useDeepCompareEffect\";\nimport { useModularUIKey } from \"./useModularUIKey\";\n\nimport Href from \"../models/href/Href\";\nimport type { RequestModularUIOptions } from \"../utils\";\n\n/**\n * Core hook to retrieve information for a Be Informed modular ui resource\n */\nexport const useModularUI = (\n modelKey: string,\n url: string | Href,\n options: RequestModularUIOptions = (({}: any): RequestModularUIOptions),\n): any => {\n const dispatch = useDispatch();\n\n const href = useMemo(() => url?.toString() || \"\", [url]);\n const key = useModularUIKey(modelKey, href);\n\n const model = useSelector((state) => state.modularui[key]);\n\n const requestOptions = useMemo(() => {\n const merged = {\n method: HTTP_METHODS.GET,\n removeOnUnmount: true,\n ...options,\n };\n\n if (url instanceof Href) {\n merged.origin = merged.origin ?? url.origin;\n merged.contextPath = merged.contextPath ?? url.contextPath;\n }\n return merged;\n }, [options, url]);\n\n const location = useLocation();\n const redirectLocation = location.state?.redirectLocation;\n\n const shouldLoad =\n model == null ||\n model.status === MODULARUI_STATUS.ERROR ||\n (redirectLocation instanceof Href\n ? redirectLocation.equals(href)\n : false) ||\n requestOptions.isReload === true;\n\n // dispatch loadModularUI\n useDeepCompareEffect(() => {\n if (href !== \"\" && shouldLoad) {\n dispatch(loadModularUI(key, href, requestOptions));\n }\n }, [key, href, requestOptions, shouldLoad]);\n\n useEffect(() => {\n if (requestOptions.removeOnUnmount) {\n return () => {\n dispatch(removeModelByKey(key));\n };\n }\n }, [dispatch, key, requestOptions.removeOnUnmount]);\n\n return model;\n};\n"],"mappings":";;;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AAEA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,iBAAA,GAAAJ,OAAA;AAKA,IAAAK,qBAAA,GAAAC,sBAAA,CAAAN,OAAA;AACA,IAAAO,gBAAA,GAAAP,OAAA;AAEA,IAAAQ,KAAA,GAAAF,sBAAA,CAAAN,OAAA;AAGA;AACA;AACA;AACO,MAAMS,YAAY,GAAGA,CAC1BC,QAAgB,EAChBC,GAAkB,EAClBC,OAAgC,GAAK,CAAC,CAAiC,KAC/D;EACR,MAAMC,QAAQ,GAAG,IAAAC,uBAAW,EAAC,CAAC;EAE9B,MAAMC,IAAI,GAAG,IAAAC,cAAO,EAAC,MAAML,GAAG,EAAEM,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAACN,GAAG,CAAC,CAAC;EACxD,MAAMO,GAAG,GAAG,IAAAC,gCAAe,EAACT,QAAQ,EAAEK,IAAI,CAAC;EAE3C,MAAMK,KAAK,GAAG,IAAAC,uBAAW,EAAEC,KAAK,IAAKA,KAAK,CAACC,SAAS,CAACL,GAAG,CAAC,CAAC;EAE1D,MAAMM,cAAc,GAAG,IAAAR,cAAO,EAAC,MAAM;IACnC,MAAMS,MAAM,GAAG;MACbC,MAAM,EAAEC,uBAAY,CAACC,GAAG;MACxBC,eAAe,EAAE,IAAI;MACrB,GAAGjB;IACL,CAAC;IAED,IAAID,GAAG,YAAYmB,aAAI,EAAE;MACvBL,MAAM,CAACM,MAAM,GAAGN,MAAM,CAACM,MAAM,IAAIpB,GAAG,CAACoB,MAAM;MAC3CN,MAAM,CAACO,WAAW,GAAGP,MAAM,CAACO,WAAW,IAAIrB,GAAG,CAACqB,WAAW;IAC5D;IACA,OAAOP,MAAM;EACf,CAAC,EAAE,CAACb,OAAO,EAAED,GAAG,CAAC,CAAC;EAElB,MAAMsB,QAAQ,GAAG,IAAAC,wBAAW,EAAC,CAAC;EAC9B,MAAMC,gBAAgB,GAAGF,QAAQ,CAACX,KAAK,EAAEa,gBAAgB;EAEzD,MAAMC,UAAU,GACdhB,KAAK,IAAI,IAAI,IACbA,KAAK,CAACiB,MAAM,KAAKC,2BAAgB,CAACC,KAAK,KACtCJ,gBAAgB,YAAYL,aAAI,GAC7BK,gBAAgB,CAACK,MAAM,CAACzB,IAAI,CAAC,GAC7B,KAAK,CAAC,IACVS,cAAc,CAACiB,QAAQ,KAAK,IAAI;;EAElC;EACA,IAAAC,6BAAoB,EAAC,MAAM;IACzB,IAAI3B,IAAI,KAAK,EAAE,IAAIqB,UAAU,EAAE;MAC7BvB,QAAQ,CAAC,IAAA8B,+BAAa,EAACzB,GAAG,EAAEH,IAAI,EAAES,cAAc,CAAC,CAAC;IACpD;EACF,CAAC,EAAE,CAACN,GAAG,EAAEH,IAAI,EAAES,cAAc,EAAEY,UAAU,CAAC,CAAC;EAE3C,IAAAQ,gBAAS,EAAC,MAAM;IACd,IAAIpB,cAAc,CAACK,eAAe,EAAE;MAClC,OAAO,MAAM;QACXhB,QAAQ,CAAC,IAAAgC,kCAAgB,EAAC3B,GAAG,CAAC,CAAC;MACjC,CAAC;IACH;EACF,CAAC,EAAE,CAACL,QAAQ,EAAEK,GAAG,EAAEM,cAAc,CAACK,eAAe,CAAC,CAAC;EAEnD,OAAOT,KAAK;AACd,CAAC;AAAC0B,OAAA,CAAArC,YAAA,GAAAA,YAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useModularUIBasic.js","names":["_reactRouter","require","_reactRedux","_react","_useModularUI","_constants","_useModularUIKey","createUseModularUIOptions","options","href","mustReload","baseOptions","expectedModels","method","HTTP_METHODS","GET","data","undefined","
|
|
1
|
+
{"version":3,"file":"useModularUIBasic.js","names":["_reactRouter","require","_reactRedux","_react","_useModularUI","_constants","_useModularUIKey","createUseModularUIOptions","options","href","mustReload","baseOptions","expectedModels","method","HTTP_METHODS","GET","data","undefined","isReload","formdata","POST","validateModel","model","length","isCorrectModel","_includes","default","call","type","console","warn","useModularUIBasic","defaultKey","memoizedHref","useMemo","toString","key","useReload","modularUIOptions","modularUI","useModularUI","exports","modelKey","url","location","useLocation","useModularUIKey","modelEntry","useSelector","state","modularui","reload","isFullyLoaded","status","MODULARUI_STATUS","FINISHED","lastModification"],"sources":["../../src/hooks/useModularUIBasic.js"],"sourcesContent":["// @flow\nimport { useLocation } from \"react-router\";\nimport { useSelector } from \"react-redux\";\nimport { useMemo } from \"react\";\nimport { useModularUI } from \"./useModularUI\";\n\nimport { HTTP_METHODS, MODULARUI_STATUS } from \"../constants\";\nimport { useModularUIKey } from \"./useModularUIKey\";\n\nimport type { ModularUIModel, Href } from \"../models\";\nexport type HookOptions = {\n key?: string,\n origin?: string,\n contextPath?: string,\n removeOnUnmount?: boolean,\n formdata?: any,\n};\n\nexport type UseModularUIBasicOptions<T: ModularUIModel> = {\n expectedModels?: Array<string>,\n targetModel?: Class<T> | Array<Class<T>>,\n forceTargetModel?: boolean,\n origin?: string,\n contextPath?: string,\n cache?: boolean,\n key?: string,\n isReload?: boolean,\n removeOnUnmount?: boolean,\n formdata?: any,\n};\n\n// Helper to create useModularUI options\nconst createUseModularUIOptions = <T: ModularUIModel>(\n options: UseModularUIBasicOptions<T>,\n href: string,\n mustReload: boolean,\n): Object => {\n const baseOptions = {\n expectedModels: [],\n method: HTTP_METHODS.GET,\n data: undefined,\n ...options,\n isReload: mustReload || options.isReload,\n };\n\n if (options.formdata != null) {\n baseOptions.method = HTTP_METHODS.POST;\n baseOptions.data = options.formdata;\n }\n\n return baseOptions;\n};\n\n// Helper to validate the model against expectedModels\nconst validateModel = (model: any, expectedModels: Array<string>) => {\n if (expectedModels.length > 0) {\n const isCorrectModel = expectedModels.includes(model.type);\n if (!isCorrectModel) {\n console.warn(model, \"is not of instance\", expectedModels);\n }\n }\n};\n\n/**\n * useModularUIBasic Hook\n */\nexport const useModularUIBasic = <T: ModularUIModel>(\n defaultKey: string,\n href: string | Href,\n options: UseModularUIBasicOptions<T> = (({}: any): UseModularUIBasicOptions<T>),\n): T | null => {\n const memoizedHref = useMemo(() => href.toString(), [href]);\n const key = options.key ?? defaultKey;\n\n const mustReload = useReload(key, memoizedHref);\n const modularUIOptions = useMemo(\n () => createUseModularUIOptions(options, memoizedHref, mustReload),\n [options, memoizedHref, mustReload],\n );\n\n const modularUI = useModularUI(key, href, modularUIOptions);\n const expectedModels = useMemo(\n () => options.expectedModels ?? [],\n [options.expectedModels],\n );\n\n return useMemo((): T | null => {\n if (modularUI?.model) {\n validateModel(modularUI.model, expectedModels);\n return modularUI.model;\n }\n return null;\n }, [expectedModels, modularUI]);\n};\n\n/**\n * Check if the model corresponding to a modular ui service should be reloaded\n */\nexport const useReload = (modelKey: string, url: string): boolean => {\n const location = useLocation();\n const key = useModularUIKey(modelKey, url);\n const modelEntry = useSelector((state) => state.modularui[key]);\n\n if (modelEntry) {\n const reload = location.state?.reload || 0;\n if (reload > 0) {\n const isFullyLoaded = modelEntry?.status === MODULARUI_STATUS.FINISHED;\n const lastModification = modelEntry?.lastModification ?? 0;\n if (isFullyLoaded && lastModification < reload) {\n return true;\n }\n }\n }\n return false;\n};\n"],"mappings":"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","ignoreList":[]}
|