@beinformed/ui 1.65.14 → 1.65.16
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 +15 -0
- package/esm/hooks/useList.js +3 -1
- package/esm/hooks/useList.js.flow +7 -3
- package/esm/hooks/useList.js.map +1 -1
- package/esm/hooks/useModularUI.js +21 -26
- package/esm/hooks/useModularUI.js.flow +28 -34
- package/esm/hooks/useModularUI.js.map +1 -1
- package/esm/hooks/useModularUIBasic.js +8 -39
- package/esm/hooks/useModularUIBasic.js.flow +6 -42
- package/esm/hooks/useModularUIBasic.js.map +1 -1
- package/lib/hooks/useList.js +3 -1
- package/lib/hooks/useList.js.map +1 -1
- package/lib/hooks/useModularUI.js +20 -25
- package/lib/hooks/useModularUI.js.map +1 -1
- package/lib/hooks/useModularUIBasic.js +9 -39
- package/lib/hooks/useModularUIBasic.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,21 @@
|
|
|
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.16](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.65.15...v1.65.16) (2026-01-15)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **types:** refine default options typing in `useModularUI` and `useModularUIBasic` hooks ([f994795](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/f99479540fc2c71efbe6772bb76a99fa855844ef))
|
|
11
|
+
|
|
12
|
+
## [1.65.15](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.65.14...v1.65.15) (2026-01-15)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* **hooks:** simplify reload logic for hooks and update hook option merge logic ([bfa5f86](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/bfa5f86b2921b59bed989808d55f7fa4430d5ce2))
|
|
18
|
+
* **useList:** ensure pathname is included in navigation calls when syncing location ([7da9f3c](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/7da9f3ced54d640df365fb03527add1f959078b1))
|
|
19
|
+
|
|
5
20
|
## [1.65.14](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.65.13...v1.65.14) (2026-01-13)
|
|
6
21
|
|
|
7
22
|
|
package/esm/hooks/useList.js
CHANGED
|
@@ -57,6 +57,7 @@ export const useListNavigation = ({
|
|
|
57
57
|
if (list.requestMethod === HTTP_METHODS.POST) {
|
|
58
58
|
if (syncLocation) {
|
|
59
59
|
navigate({
|
|
60
|
+
pathname: listHref.path,
|
|
60
61
|
search: listHref.getQuerystring(true),
|
|
61
62
|
state: {
|
|
62
63
|
formdata: list.formdata
|
|
@@ -71,6 +72,7 @@ export const useListNavigation = ({
|
|
|
71
72
|
} else {
|
|
72
73
|
if (syncLocation) {
|
|
73
74
|
navigate({
|
|
75
|
+
pathname: listHref.path,
|
|
74
76
|
search: listHref.getQuerystring(true)
|
|
75
77
|
});
|
|
76
78
|
}
|
|
@@ -88,7 +90,7 @@ export const useListNavigation = ({
|
|
|
88
90
|
if (attribute) {
|
|
89
91
|
filter.update(attribute, value);
|
|
90
92
|
} else if (filter instanceof AssignmentFilterModel) {
|
|
91
|
-
throw new
|
|
93
|
+
throw new TypeError("AssignmentFilterModel needs the attribute argument to be able to update the filter");
|
|
92
94
|
} else if (filter instanceof FilterModel) {
|
|
93
95
|
filter.update(filter.attribute, value);
|
|
94
96
|
}
|
|
@@ -103,6 +103,7 @@ export const useListNavigation = ({
|
|
|
103
103
|
if (list.requestMethod === HTTP_METHODS.POST) {
|
|
104
104
|
if (syncLocation) {
|
|
105
105
|
navigate({
|
|
106
|
+
pathname: listHref.path,
|
|
106
107
|
search: listHref.getQuerystring(true),
|
|
107
108
|
state: { formdata: list.formdata },
|
|
108
109
|
});
|
|
@@ -117,7 +118,10 @@ export const useListNavigation = ({
|
|
|
117
118
|
);
|
|
118
119
|
} else {
|
|
119
120
|
if (syncLocation) {
|
|
120
|
-
navigate({
|
|
121
|
+
navigate({
|
|
122
|
+
pathname: listHref.path,
|
|
123
|
+
search: listHref.getQuerystring(true),
|
|
124
|
+
});
|
|
121
125
|
}
|
|
122
126
|
dispatch(
|
|
123
127
|
loadModularUI(list.connectKey, listHref, {
|
|
@@ -148,8 +152,8 @@ export const useListNavigation = ({
|
|
|
148
152
|
if (attribute) {
|
|
149
153
|
filter.update(attribute, value);
|
|
150
154
|
} else if (filter instanceof AssignmentFilterModel) {
|
|
151
|
-
throw new
|
|
152
|
-
"
|
|
155
|
+
throw new TypeError(
|
|
156
|
+
"AssignmentFilterModel needs the attribute argument to be able to update the filter",
|
|
153
157
|
);
|
|
154
158
|
} else if (filter instanceof FilterModel) {
|
|
155
159
|
filter.update(filter.attribute, value);
|
package/esm/hooks/useList.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useList.js","names":["useDispatch","useModularUIBasic","HTTP_METHODS","loadModularUI","useNavigation","DetailModel","ListModel","CaseSearchModel","ListDetailModel","Href","FilterCollection","AssignmentFilterModel","FilterModel","useCallback","useMemo","useList","href","options","expectedModels","targetModel","useListOrDetail","useListDetail","forceTargetModel","useListNavigation","syncLocation","historyAction","push","replace","dispatch","navigate","update","list","resetPage","listHref","selfhref","page","requestMethod","POST","search","getQuerystring","state","formdata","connectKey","method","data","GET","updateFilters","filters","filterCollection","updateFilter","filter","value","attribute","Error","resetFilters","reset","removeFilter","getFilterByName","name","updateSort","sortOption","sorting","updatePage","paging","updatePageSize","pagesize"],"sources":["../../src/hooks/useList.js"],"sourcesContent":["// @flow\nimport { useDispatch } from \"react-redux\";\n\nimport { useModularUIBasic } from \"./useModularUIBasic\";\nimport { HTTP_METHODS } from \"../constants/Constants\";\n\nimport { loadModularUI } from \"../redux\";\n\nimport { useNavigation } from \"./useRouter\";\n\nimport DetailModel from \"../models/detail/DetailModel\";\nimport ListModel from \"../models/list/ListModel\";\nimport CaseSearchModel from \"../models/search/CaseSearchModel\";\nimport ListDetailModel from \"../models/list/ListDetailModel\";\nimport Href from \"../models/href/Href\";\nimport FilterCollection from \"../models/filters/FilterCollection\";\nimport AssignmentFilterModel from \"../models/filters/AssignmentFilterModel\";\nimport FilterModel from \"../models/filters/FilterModel\";\n\nimport type { HookOptions } from \"./useModularUIBasic\";\nimport type { AttributeType, IFilter } from \"../models/types\";\nimport { useCallback, useMemo } from \"react\";\n\ntype ListNavigationHook = {\n update: (list: ListModel, resetPage?: boolean) => void,\n updateFilters: (\n list: ListModel,\n filters: FilterCollection | Array<IFilter>,\n ) => void,\n updateFilter: (\n list: ListModel,\n filter: IFilter,\n value: string,\n attribute?: AttributeType,\n ) => void,\n updateSort: (list: ListModel, sortOption: string) => void,\n updatePage: (list: ListModel, page: number) => void,\n updatePageSize: (list: ListModel, pagesize: number) => void,\n resetFilters: (list: ListModel) => void,\n removeFilter: (list: ListModel, filter: IFilter) => void,\n};\n\ntype ListNavigationOptions = {\n syncLocation?: boolean,\n historyAction?: \"push\" | \"replace\",\n};\n\n/**\n */\nexport const useList = (\n href: string | Href,\n options?: HookOptions,\n): ListModel | null =>\n useModularUIBasic(\"list\", href, {\n expectedModels: [\"List\", \"CaseSearch\"],\n targetModel: [ListModel, CaseSearchModel],\n ...options,\n });\n\n/**\n */\nexport const useListOrDetail = (\n href: string | Href,\n options?: HookOptions,\n): ListModel | DetailModel | null =>\n useModularUIBasic(\"list\", href, {\n expectedModels: [\"List\", \"CaseSearch\", \"Detail\"],\n targetModel: [ListModel, CaseSearchModel, DetailModel],\n ...options,\n });\n\n/**\n */\nexport const useListDetail = (\n href: string | Href,\n options?: HookOptions,\n): ListDetailModel | null =>\n useModularUIBasic(\"listdetail\", href, {\n expectedModels: [\"ListDetail\"],\n targetModel: ListDetailModel,\n forceTargetModel: true,\n ...options,\n });\n\n/**\n */\nexport const useListNavigation = ({\n syncLocation = true,\n historyAction = \"push\",\n}: ListNavigationOptions = {}): ListNavigationHook => {\n const { push, replace } = useNavigation();\n const dispatch = useDispatch();\n\n const navigate = historyAction === \"push\" ? push : replace;\n\n const update = useCallback(\n (list: ListModel, resetPage: boolean = false) => {\n const listHref = list.selfhref;\n if (resetPage) {\n listHref.page = null;\n }\n\n if (list.requestMethod === HTTP_METHODS.POST) {\n if (syncLocation) {\n navigate({\n search: listHref.getQuerystring(true),\n state: { formdata: list.formdata },\n });\n }\n\n dispatch(\n loadModularUI(list.connectKey, listHref, {\n method: HTTP_METHODS.POST,\n data: list.formdata,\n targetModel: [ListModel, CaseSearchModel],\n }),\n );\n } else {\n if (syncLocation) {\n navigate({ search: listHref.getQuerystring(true) });\n }\n dispatch(\n loadModularUI(list.connectKey, listHref, {\n method: HTTP_METHODS.GET,\n targetModel: [ListModel, CaseSearchModel],\n }),\n );\n }\n },\n [dispatch, navigate, syncLocation],\n );\n\n const updateFilters = useCallback(\n (list: ListModel, filters: FilterCollection | Array<IFilter>) => {\n list.filterCollection = filters;\n update(list, true);\n },\n [update],\n );\n\n const updateFilter = useCallback(\n (\n list: ListModel,\n filter: IFilter,\n value: string,\n attribute?: AttributeType,\n ) => {\n if (attribute) {\n filter.update(attribute, value);\n } else if (filter instanceof AssignmentFilterModel) {\n throw new Error(\n \"Need the attribute to update for AssigmentFilterModel\",\n );\n } else if (filter instanceof FilterModel) {\n filter.update(filter.attribute, value);\n }\n update(list, true);\n },\n [update],\n );\n\n const resetFilters = useCallback(\n (list: ListModel) => {\n list.filterCollection.reset();\n update(list, true);\n },\n [update],\n );\n\n const removeFilter = useCallback(\n (list: ListModel, filter: IFilter) => {\n list.filterCollection.getFilterByName(filter.name)?.reset();\n update(list, true);\n },\n [update],\n );\n\n const updateSort = useCallback(\n (list: ListModel, sortOption: string) => {\n list.sorting.value = sortOption;\n update(list, true);\n },\n [update],\n );\n\n const updatePage = useCallback(\n (list: ListModel, page: number) => {\n list.paging.page = page;\n update(list);\n },\n [update],\n );\n\n const updatePageSize = useCallback(\n (list: ListModel, pagesize: number) => {\n list.paging.pagesize.value = pagesize;\n update(list, true);\n },\n [update],\n );\n\n return useMemo(\n () => ({\n update,\n updateFilters,\n updateFilter,\n updateSort,\n updatePage,\n updatePageSize,\n resetFilters,\n removeFilter,\n }),\n [\n removeFilter,\n resetFilters,\n update,\n updateFilter,\n updateFilters,\n updatePage,\n updatePageSize,\n updateSort,\n ],\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useList.js","names":["useDispatch","useModularUIBasic","HTTP_METHODS","loadModularUI","useNavigation","DetailModel","ListModel","CaseSearchModel","ListDetailModel","Href","FilterCollection","AssignmentFilterModel","FilterModel","useCallback","useMemo","useList","href","options","expectedModels","targetModel","useListOrDetail","useListDetail","forceTargetModel","useListNavigation","syncLocation","historyAction","push","replace","dispatch","navigate","update","list","resetPage","listHref","selfhref","page","requestMethod","POST","pathname","path","search","getQuerystring","state","formdata","connectKey","method","data","GET","updateFilters","filters","filterCollection","updateFilter","filter","value","attribute","TypeError","resetFilters","reset","removeFilter","getFilterByName","name","updateSort","sortOption","sorting","updatePage","paging","updatePageSize","pagesize"],"sources":["../../src/hooks/useList.js"],"sourcesContent":["// @flow\nimport { useDispatch } from \"react-redux\";\n\nimport { useModularUIBasic } from \"./useModularUIBasic\";\nimport { HTTP_METHODS } from \"../constants/Constants\";\n\nimport { loadModularUI } from \"../redux\";\n\nimport { useNavigation } from \"./useRouter\";\n\nimport DetailModel from \"../models/detail/DetailModel\";\nimport ListModel from \"../models/list/ListModel\";\nimport CaseSearchModel from \"../models/search/CaseSearchModel\";\nimport ListDetailModel from \"../models/list/ListDetailModel\";\nimport Href from \"../models/href/Href\";\nimport FilterCollection from \"../models/filters/FilterCollection\";\nimport AssignmentFilterModel from \"../models/filters/AssignmentFilterModel\";\nimport FilterModel from \"../models/filters/FilterModel\";\n\nimport type { HookOptions } from \"./useModularUIBasic\";\nimport type { AttributeType, IFilter } from \"../models/types\";\nimport { useCallback, useMemo } from \"react\";\n\ntype ListNavigationHook = {\n update: (list: ListModel, resetPage?: boolean) => void,\n updateFilters: (\n list: ListModel,\n filters: FilterCollection | Array<IFilter>,\n ) => void,\n updateFilter: (\n list: ListModel,\n filter: IFilter,\n value: string,\n attribute?: AttributeType,\n ) => void,\n updateSort: (list: ListModel, sortOption: string) => void,\n updatePage: (list: ListModel, page: number) => void,\n updatePageSize: (list: ListModel, pagesize: number) => void,\n resetFilters: (list: ListModel) => void,\n removeFilter: (list: ListModel, filter: IFilter) => void,\n};\n\ntype ListNavigationOptions = {\n syncLocation?: boolean,\n historyAction?: \"push\" | \"replace\",\n};\n\n/**\n */\nexport const useList = (\n href: string | Href,\n options?: HookOptions,\n): ListModel | null =>\n useModularUIBasic(\"list\", href, {\n expectedModels: [\"List\", \"CaseSearch\"],\n targetModel: [ListModel, CaseSearchModel],\n ...options,\n });\n\n/**\n */\nexport const useListOrDetail = (\n href: string | Href,\n options?: HookOptions,\n): ListModel | DetailModel | null =>\n useModularUIBasic(\"list\", href, {\n expectedModels: [\"List\", \"CaseSearch\", \"Detail\"],\n targetModel: [ListModel, CaseSearchModel, DetailModel],\n ...options,\n });\n\n/**\n */\nexport const useListDetail = (\n href: string | Href,\n options?: HookOptions,\n): ListDetailModel | null =>\n useModularUIBasic(\"listdetail\", href, {\n expectedModels: [\"ListDetail\"],\n targetModel: ListDetailModel,\n forceTargetModel: true,\n ...options,\n });\n\n/**\n */\nexport const useListNavigation = ({\n syncLocation = true,\n historyAction = \"push\",\n}: ListNavigationOptions = {}): ListNavigationHook => {\n const { push, replace } = useNavigation();\n const dispatch = useDispatch();\n\n const navigate = historyAction === \"push\" ? push : replace;\n\n const update = useCallback(\n (list: ListModel, resetPage: boolean = false) => {\n const listHref = list.selfhref;\n if (resetPage) {\n listHref.page = null;\n }\n\n if (list.requestMethod === HTTP_METHODS.POST) {\n if (syncLocation) {\n navigate({\n pathname: listHref.path,\n search: listHref.getQuerystring(true),\n state: { formdata: list.formdata },\n });\n }\n\n dispatch(\n loadModularUI(list.connectKey, listHref, {\n method: HTTP_METHODS.POST,\n data: list.formdata,\n targetModel: [ListModel, CaseSearchModel],\n }),\n );\n } else {\n if (syncLocation) {\n navigate({\n pathname: listHref.path,\n search: listHref.getQuerystring(true),\n });\n }\n dispatch(\n loadModularUI(list.connectKey, listHref, {\n method: HTTP_METHODS.GET,\n targetModel: [ListModel, CaseSearchModel],\n }),\n );\n }\n },\n [dispatch, navigate, syncLocation],\n );\n\n const updateFilters = useCallback(\n (list: ListModel, filters: FilterCollection | Array<IFilter>) => {\n list.filterCollection = filters;\n update(list, true);\n },\n [update],\n );\n\n const updateFilter = useCallback(\n (\n list: ListModel,\n filter: IFilter,\n value: string,\n attribute?: AttributeType,\n ) => {\n if (attribute) {\n filter.update(attribute, value);\n } else if (filter instanceof AssignmentFilterModel) {\n throw new TypeError(\n \"AssignmentFilterModel needs the attribute argument to be able to update the filter\",\n );\n } else if (filter instanceof FilterModel) {\n filter.update(filter.attribute, value);\n }\n update(list, true);\n },\n [update],\n );\n\n const resetFilters = useCallback(\n (list: ListModel) => {\n list.filterCollection.reset();\n update(list, true);\n },\n [update],\n );\n\n const removeFilter = useCallback(\n (list: ListModel, filter: IFilter) => {\n list.filterCollection.getFilterByName(filter.name)?.reset();\n update(list, true);\n },\n [update],\n );\n\n const updateSort = useCallback(\n (list: ListModel, sortOption: string) => {\n list.sorting.value = sortOption;\n update(list, true);\n },\n [update],\n );\n\n const updatePage = useCallback(\n (list: ListModel, page: number) => {\n list.paging.page = page;\n update(list);\n },\n [update],\n );\n\n const updatePageSize = useCallback(\n (list: ListModel, pagesize: number) => {\n list.paging.pagesize.value = pagesize;\n update(list, true);\n },\n [update],\n );\n\n return useMemo(\n () => ({\n update,\n updateFilters,\n updateFilter,\n updateSort,\n updatePage,\n updatePageSize,\n resetFilters,\n removeFilter,\n }),\n [\n removeFilter,\n resetFilters,\n update,\n updateFilter,\n updateFilters,\n updatePage,\n updatePageSize,\n updateSort,\n ],\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useEffect,
|
|
1
|
+
import { useEffect, useMemo } from "react";
|
|
2
2
|
import { useDispatch, useSelector } from "react-redux";
|
|
3
3
|
import { useLocation } from "react-router";
|
|
4
4
|
import { HTTP_METHODS } from "../constants";
|
|
@@ -9,45 +9,40 @@ import Href from "../models/href/Href";
|
|
|
9
9
|
/**
|
|
10
10
|
* Core hook to retrieve information for a Be Informed modular ui resource
|
|
11
11
|
*/
|
|
12
|
-
export const useModularUI = (modelKey, url, options = {
|
|
13
|
-
method: HTTP_METHODS.GET,
|
|
14
|
-
removeOnUnmount: false
|
|
15
|
-
}) => {
|
|
12
|
+
export const useModularUI = (modelKey, url, options = {}) => {
|
|
16
13
|
const dispatch = useDispatch();
|
|
17
14
|
const href = useMemo(() => url?.toString() || "", [url]);
|
|
18
15
|
const key = useModularUIKey(modelKey, href);
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
16
|
+
const model = useSelector(state => state.modularui[key]);
|
|
17
|
+
const requestOptions = useMemo(() => {
|
|
18
|
+
const merged = {
|
|
19
|
+
method: HTTP_METHODS.GET,
|
|
20
|
+
removeOnUnmount: false,
|
|
21
|
+
...options
|
|
22
|
+
};
|
|
23
|
+
if (url instanceof Href) {
|
|
24
|
+
merged.origin = merged.origin ?? url.origin;
|
|
25
|
+
merged.contextPath = merged.contextPath ?? url.contextPath;
|
|
26
|
+
}
|
|
27
|
+
return merged;
|
|
28
|
+
}, [options, url]);
|
|
25
29
|
const location = useLocation();
|
|
26
30
|
const redirectLocation = location.state?.redirectLocation;
|
|
27
|
-
const
|
|
28
|
-
const prevOptions = useRef(options);
|
|
29
|
-
const prevHref = useRef(href);
|
|
30
|
-
const prevForceLoad = useRef(forceLoad);
|
|
31
|
+
const shouldLoad = model == null || (redirectLocation instanceof Href ? redirectLocation?.equals(href) : false) || requestOptions.isReload === true;
|
|
31
32
|
|
|
32
33
|
// dispatch loadModularUI
|
|
33
34
|
useDeepCompareEffect(() => {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const doForceLoad = forceLoad && !prevForceLoad.current;
|
|
37
|
-
if (href !== "" && (doForceLoad || !isOldReload)) {
|
|
38
|
-
dispatch(loadModularUI(key, href, options));
|
|
35
|
+
if (href !== "" && shouldLoad) {
|
|
36
|
+
dispatch(loadModularUI(key, href, requestOptions));
|
|
39
37
|
}
|
|
40
|
-
|
|
41
|
-
prevHref.current = href;
|
|
42
|
-
prevForceLoad.current = forceLoad;
|
|
43
|
-
}, [key, href, options, forceLoad]);
|
|
38
|
+
}, [key, href, requestOptions, shouldLoad]);
|
|
44
39
|
useEffect(() => {
|
|
45
|
-
if (
|
|
40
|
+
if (requestOptions.removeOnUnmount) {
|
|
46
41
|
return () => {
|
|
47
42
|
dispatch(removeModelByKey(key));
|
|
48
43
|
};
|
|
49
44
|
}
|
|
50
|
-
}, [dispatch, key,
|
|
45
|
+
}, [dispatch, key, requestOptions.removeOnUnmount]);
|
|
51
46
|
return model;
|
|
52
47
|
};
|
|
53
48
|
//# sourceMappingURL=useModularUI.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @flow
|
|
2
|
-
import { useEffect,
|
|
2
|
+
import { useEffect, useMemo } from "react";
|
|
3
3
|
import { useDispatch, useSelector } from "react-redux";
|
|
4
4
|
import { useLocation } from "react-router";
|
|
5
5
|
|
|
@@ -21,59 +21,53 @@ import type { RequestModularUIOptions } from "../utils";
|
|
|
21
21
|
export const useModularUI = (
|
|
22
22
|
modelKey: string,
|
|
23
23
|
url: string | Href,
|
|
24
|
-
options: RequestModularUIOptions = {
|
|
25
|
-
method: HTTP_METHODS.GET,
|
|
26
|
-
removeOnUnmount: false,
|
|
27
|
-
},
|
|
24
|
+
options: RequestModularUIOptions = (({}: any): RequestModularUIOptions),
|
|
28
25
|
): any => {
|
|
29
26
|
const dispatch = useDispatch();
|
|
27
|
+
|
|
30
28
|
const href = useMemo(() => url?.toString() || "", [url]);
|
|
31
29
|
const key = useModularUIKey(modelKey, href);
|
|
32
30
|
|
|
33
|
-
const
|
|
34
|
-
|
|
31
|
+
const model = useSelector((state) => state.modularui[key]);
|
|
32
|
+
|
|
33
|
+
const requestOptions = useMemo(() => {
|
|
34
|
+
const merged = {
|
|
35
|
+
method: HTTP_METHODS.GET,
|
|
36
|
+
removeOnUnmount: false,
|
|
37
|
+
...options,
|
|
38
|
+
};
|
|
35
39
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
if (url instanceof Href) {
|
|
41
|
+
merged.origin = merged.origin ?? url.origin;
|
|
42
|
+
merged.contextPath = merged.contextPath ?? url.contextPath;
|
|
43
|
+
}
|
|
44
|
+
return merged;
|
|
45
|
+
}, [options, url]);
|
|
40
46
|
|
|
41
47
|
const location = useLocation();
|
|
42
48
|
const redirectLocation = location.state?.redirectLocation;
|
|
43
|
-
const forceLoad =
|
|
44
|
-
model == null ||
|
|
45
|
-
(redirectLocation instanceof Href ? redirectLocation?.equals(href) : false);
|
|
46
49
|
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
const shouldLoad =
|
|
51
|
+
model == null ||
|
|
52
|
+
(redirectLocation instanceof Href
|
|
53
|
+
? redirectLocation?.equals(href)
|
|
54
|
+
: false) ||
|
|
55
|
+
requestOptions.isReload === true;
|
|
50
56
|
|
|
51
57
|
// dispatch loadModularUI
|
|
52
58
|
useDeepCompareEffect(() => {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
prevHref.current === href &&
|
|
56
|
-
prevOptions.current.isReload &&
|
|
57
|
-
!options.isReload;
|
|
58
|
-
|
|
59
|
-
const doForceLoad = forceLoad && !prevForceLoad.current;
|
|
60
|
-
|
|
61
|
-
if (href !== "" && (doForceLoad || !isOldReload)) {
|
|
62
|
-
dispatch(loadModularUI(key, href, options));
|
|
59
|
+
if (href !== "" && shouldLoad) {
|
|
60
|
+
dispatch(loadModularUI(key, href, requestOptions));
|
|
63
61
|
}
|
|
64
|
-
|
|
65
|
-
prevOptions.current = options;
|
|
66
|
-
prevHref.current = href;
|
|
67
|
-
prevForceLoad.current = forceLoad;
|
|
68
|
-
}, [key, href, options, forceLoad]);
|
|
62
|
+
}, [key, href, requestOptions, shouldLoad]);
|
|
69
63
|
|
|
70
64
|
useEffect(() => {
|
|
71
|
-
if (
|
|
65
|
+
if (requestOptions.removeOnUnmount) {
|
|
72
66
|
return () => {
|
|
73
67
|
dispatch(removeModelByKey(key));
|
|
74
68
|
};
|
|
75
69
|
}
|
|
76
|
-
}, [dispatch, key,
|
|
70
|
+
}, [dispatch, key, requestOptions.removeOnUnmount]);
|
|
77
71
|
|
|
78
72
|
return model;
|
|
79
73
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useModularUI.js","names":["useEffect","
|
|
1
|
+
{"version":3,"file":"useModularUI.js","names":["useEffect","useMemo","useDispatch","useSelector","useLocation","HTTP_METHODS","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","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 } 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: false,\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 (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,QAAQ,cAAc;AAC3C,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,GAAGb,WAAW,CAAC,CAAC;EAE9B,MAAMc,IAAI,GAAGf,OAAO,CAAC,MAAMY,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,GAAGhB,WAAW,CAAEiB,KAAK,IAAKA,KAAK,CAACC,SAAS,CAACH,GAAG,CAAC,CAAC;EAE1D,MAAMI,cAAc,GAAGrB,OAAO,CAAC,MAAM;IACnC,MAAMsB,MAAM,GAAG;MACbC,MAAM,EAAEnB,YAAY,CAACoB,GAAG;MACxBC,eAAe,EAAE,KAAK;MACtB,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,GAAGzB,WAAW,CAAC,CAAC;EAC9B,MAAM0B,gBAAgB,GAAGD,QAAQ,CAACT,KAAK,EAAEU,gBAAgB;EAEzD,MAAMC,UAAU,GACdZ,KAAK,IAAI,IAAI,KACZW,gBAAgB,YAAYpB,IAAI,GAC7BoB,gBAAgB,EAAEE,MAAM,CAAChB,IAAI,CAAC,GAC9B,KAAK,CAAC,IACVM,cAAc,CAACW,QAAQ,KAAK,IAAI;;EAElC;EACAzB,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;EAE3C/B,SAAS,CAAC,MAAM;IACd,IAAIsB,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,3 +1,4 @@
|
|
|
1
|
+
import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
|
|
1
2
|
import { useLocation } from "react-router";
|
|
2
3
|
import { useSelector } from "react-redux";
|
|
3
4
|
import { useMemo } from "react";
|
|
@@ -7,48 +8,24 @@ import { useModularUIKey } from "./useModularUIKey";
|
|
|
7
8
|
// Helper to create useModularUI options
|
|
8
9
|
const createUseModularUIOptions = (options, href, mustReload) => {
|
|
9
10
|
const baseOptions = {
|
|
10
|
-
|
|
11
|
-
forceTargetModel: undefined,
|
|
12
|
-
isReload: false,
|
|
13
|
-
origin: undefined,
|
|
14
|
-
contextPath: undefined,
|
|
15
|
-
cache: false,
|
|
16
|
-
removeOnUnmount: false,
|
|
11
|
+
expectedModels: [],
|
|
17
12
|
method: HTTP_METHODS.GET,
|
|
18
|
-
data: undefined
|
|
13
|
+
data: undefined,
|
|
14
|
+
removeOnUnmount: false,
|
|
15
|
+
...options,
|
|
16
|
+
isReload: mustReload || options.isReload
|
|
19
17
|
};
|
|
20
|
-
|
|
21
|
-
// Handle targetModel and forceTargetModel
|
|
22
|
-
if (options.targetModel) {
|
|
23
|
-
baseOptions.targetModel = options.targetModel;
|
|
24
|
-
baseOptions.forceTargetModel = options.forceTargetModel;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// Handle cache option
|
|
28
|
-
if (options.cache) {
|
|
29
|
-
baseOptions.cache = options.cache;
|
|
30
|
-
}
|
|
31
|
-
if (mustReload) {
|
|
32
|
-
baseOptions.isReload = true;
|
|
33
|
-
}
|
|
34
|
-
if (options.removeOnUnmount) {
|
|
35
|
-
baseOptions.removeOnUnmount = true;
|
|
36
|
-
}
|
|
37
18
|
if (options.formdata != null) {
|
|
38
19
|
baseOptions.method = HTTP_METHODS.POST;
|
|
39
20
|
baseOptions.data = options.formdata;
|
|
40
21
|
}
|
|
41
|
-
|
|
42
|
-
// Handle origin and contextPath options
|
|
43
|
-
baseOptions.origin = options.origin ?? baseOptions.origin;
|
|
44
|
-
baseOptions.contextPath = options.contextPath ?? baseOptions.contextPath;
|
|
45
22
|
return baseOptions;
|
|
46
23
|
};
|
|
47
24
|
|
|
48
25
|
// Helper to validate the model against expectedModels
|
|
49
26
|
const validateModel = (model, expectedModels) => {
|
|
50
27
|
if (expectedModels.length > 0) {
|
|
51
|
-
const isCorrectModel = expectedModels.
|
|
28
|
+
const isCorrectModel = _includesInstanceProperty(expectedModels).call(expectedModels, model.type);
|
|
52
29
|
if (!isCorrectModel) {
|
|
53
30
|
console.warn(model, "is not of instance", expectedModels);
|
|
54
31
|
}
|
|
@@ -58,15 +35,7 @@ const validateModel = (model, expectedModels) => {
|
|
|
58
35
|
/**
|
|
59
36
|
* useModularUIBasic Hook
|
|
60
37
|
*/
|
|
61
|
-
export const useModularUIBasic = (defaultKey, href, options = {
|
|
62
|
-
expectedModels: [],
|
|
63
|
-
targetModel: undefined,
|
|
64
|
-
forceTargetModel: false,
|
|
65
|
-
origin: undefined,
|
|
66
|
-
contextPath: undefined,
|
|
67
|
-
key: undefined,
|
|
68
|
-
formdata: undefined
|
|
69
|
-
}) => {
|
|
38
|
+
export const useModularUIBasic = (defaultKey, href, options = {}) => {
|
|
70
39
|
const memoizedHref = useMemo(() => href.toString(), [href]);
|
|
71
40
|
const key = options.key ?? defaultKey;
|
|
72
41
|
const mustReload = useReload(key, memoizedHref);
|
|
@@ -36,54 +36,26 @@ const createUseModularUIOptions = <T: ModularUIModel>(
|
|
|
36
36
|
mustReload: boolean,
|
|
37
37
|
): Object => {
|
|
38
38
|
const baseOptions = {
|
|
39
|
-
|
|
40
|
-
forceTargetModel: undefined,
|
|
41
|
-
isReload: false,
|
|
42
|
-
origin: undefined,
|
|
43
|
-
contextPath: undefined,
|
|
44
|
-
cache: false,
|
|
45
|
-
removeOnUnmount: false,
|
|
39
|
+
expectedModels: [],
|
|
46
40
|
method: HTTP_METHODS.GET,
|
|
47
41
|
data: undefined,
|
|
42
|
+
removeOnUnmount: false,
|
|
43
|
+
...options,
|
|
44
|
+
isReload: mustReload || options.isReload,
|
|
48
45
|
};
|
|
49
46
|
|
|
50
|
-
// Handle targetModel and forceTargetModel
|
|
51
|
-
if (options.targetModel) {
|
|
52
|
-
baseOptions.targetModel = options.targetModel;
|
|
53
|
-
baseOptions.forceTargetModel = options.forceTargetModel;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// Handle cache option
|
|
57
|
-
if (options.cache) {
|
|
58
|
-
baseOptions.cache = options.cache;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
if (mustReload) {
|
|
62
|
-
baseOptions.isReload = true;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (options.removeOnUnmount) {
|
|
66
|
-
baseOptions.removeOnUnmount = true;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
47
|
if (options.formdata != null) {
|
|
70
48
|
baseOptions.method = HTTP_METHODS.POST;
|
|
71
49
|
baseOptions.data = options.formdata;
|
|
72
50
|
}
|
|
73
51
|
|
|
74
|
-
// Handle origin and contextPath options
|
|
75
|
-
baseOptions.origin = options.origin ?? baseOptions.origin;
|
|
76
|
-
baseOptions.contextPath = options.contextPath ?? baseOptions.contextPath;
|
|
77
|
-
|
|
78
52
|
return baseOptions;
|
|
79
53
|
};
|
|
80
54
|
|
|
81
55
|
// Helper to validate the model against expectedModels
|
|
82
56
|
const validateModel = (model: any, expectedModels: Array<string>) => {
|
|
83
57
|
if (expectedModels.length > 0) {
|
|
84
|
-
const isCorrectModel = expectedModels.
|
|
85
|
-
(expectedModel) => model.type === expectedModel,
|
|
86
|
-
);
|
|
58
|
+
const isCorrectModel = expectedModels.includes(model.type);
|
|
87
59
|
if (!isCorrectModel) {
|
|
88
60
|
console.warn(model, "is not of instance", expectedModels);
|
|
89
61
|
}
|
|
@@ -96,15 +68,7 @@ const validateModel = (model: any, expectedModels: Array<string>) => {
|
|
|
96
68
|
export const useModularUIBasic = <T: ModularUIModel>(
|
|
97
69
|
defaultKey: string,
|
|
98
70
|
href: string | Href,
|
|
99
|
-
options: UseModularUIBasicOptions<T> = {
|
|
100
|
-
expectedModels: [],
|
|
101
|
-
targetModel: undefined,
|
|
102
|
-
forceTargetModel: false,
|
|
103
|
-
origin: undefined,
|
|
104
|
-
contextPath: undefined,
|
|
105
|
-
key: undefined,
|
|
106
|
-
formdata: undefined,
|
|
107
|
-
},
|
|
71
|
+
options: UseModularUIBasicOptions<T> = (({}: any): UseModularUIBasicOptions<T>),
|
|
108
72
|
): T | null => {
|
|
109
73
|
const memoizedHref = useMemo(() => href.toString(), [href]);
|
|
110
74
|
const key = options.key ?? defaultKey;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useModularUIBasic.js","names":["useLocation","useSelector","useMemo","useModularUI","HTTP_METHODS","MODULARUI_STATUS","useModularUIKey","createUseModularUIOptions","options","href","mustReload","baseOptions","
|
|
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","removeOnUnmount","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 removeOnUnmount: false,\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":[]}
|
package/lib/hooks/useList.js
CHANGED
|
@@ -67,6 +67,7 @@ const useListNavigation = ({
|
|
|
67
67
|
if (list.requestMethod === _Constants.HTTP_METHODS.POST) {
|
|
68
68
|
if (syncLocation) {
|
|
69
69
|
navigate({
|
|
70
|
+
pathname: listHref.path,
|
|
70
71
|
search: listHref.getQuerystring(true),
|
|
71
72
|
state: {
|
|
72
73
|
formdata: list.formdata
|
|
@@ -81,6 +82,7 @@ const useListNavigation = ({
|
|
|
81
82
|
} else {
|
|
82
83
|
if (syncLocation) {
|
|
83
84
|
navigate({
|
|
85
|
+
pathname: listHref.path,
|
|
84
86
|
search: listHref.getQuerystring(true)
|
|
85
87
|
});
|
|
86
88
|
}
|
|
@@ -98,7 +100,7 @@ const useListNavigation = ({
|
|
|
98
100
|
if (attribute) {
|
|
99
101
|
filter.update(attribute, value);
|
|
100
102
|
} else if (filter instanceof _AssignmentFilterModel.default) {
|
|
101
|
-
throw new
|
|
103
|
+
throw new TypeError("AssignmentFilterModel needs the attribute argument to be able to update the filter");
|
|
102
104
|
} else if (filter instanceof _FilterModel.default) {
|
|
103
105
|
filter.update(filter.attribute, value);
|
|
104
106
|
}
|
package/lib/hooks/useList.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useList.js","names":["_reactRedux","require","_useModularUIBasic","_Constants","_redux","_useRouter","_DetailModel","_interopRequireDefault","_ListModel","_CaseSearchModel","_ListDetailModel","_Href","_FilterCollection","_AssignmentFilterModel","_FilterModel","_react","useList","href","options","useModularUIBasic","expectedModels","targetModel","ListModel","CaseSearchModel","exports","useListOrDetail","DetailModel","useListDetail","ListDetailModel","forceTargetModel","useListNavigation","syncLocation","historyAction","push","replace","useNavigation","dispatch","useDispatch","navigate","update","useCallback","list","resetPage","listHref","selfhref","page","requestMethod","HTTP_METHODS","POST","search","getQuerystring","state","formdata","loadModularUI","connectKey","method","data","GET","updateFilters","filters","filterCollection","updateFilter","filter","value","attribute","AssignmentFilterModel","Error","FilterModel","resetFilters","reset","removeFilter","getFilterByName","name","updateSort","sortOption","sorting","updatePage","paging","updatePageSize","pagesize","useMemo"],"sources":["../../src/hooks/useList.js"],"sourcesContent":["// @flow\nimport { useDispatch } from \"react-redux\";\n\nimport { useModularUIBasic } from \"./useModularUIBasic\";\nimport { HTTP_METHODS } from \"../constants/Constants\";\n\nimport { loadModularUI } from \"../redux\";\n\nimport { useNavigation } from \"./useRouter\";\n\nimport DetailModel from \"../models/detail/DetailModel\";\nimport ListModel from \"../models/list/ListModel\";\nimport CaseSearchModel from \"../models/search/CaseSearchModel\";\nimport ListDetailModel from \"../models/list/ListDetailModel\";\nimport Href from \"../models/href/Href\";\nimport FilterCollection from \"../models/filters/FilterCollection\";\nimport AssignmentFilterModel from \"../models/filters/AssignmentFilterModel\";\nimport FilterModel from \"../models/filters/FilterModel\";\n\nimport type { HookOptions } from \"./useModularUIBasic\";\nimport type { AttributeType, IFilter } from \"../models/types\";\nimport { useCallback, useMemo } from \"react\";\n\ntype ListNavigationHook = {\n update: (list: ListModel, resetPage?: boolean) => void,\n updateFilters: (\n list: ListModel,\n filters: FilterCollection | Array<IFilter>,\n ) => void,\n updateFilter: (\n list: ListModel,\n filter: IFilter,\n value: string,\n attribute?: AttributeType,\n ) => void,\n updateSort: (list: ListModel, sortOption: string) => void,\n updatePage: (list: ListModel, page: number) => void,\n updatePageSize: (list: ListModel, pagesize: number) => void,\n resetFilters: (list: ListModel) => void,\n removeFilter: (list: ListModel, filter: IFilter) => void,\n};\n\ntype ListNavigationOptions = {\n syncLocation?: boolean,\n historyAction?: \"push\" | \"replace\",\n};\n\n/**\n */\nexport const useList = (\n href: string | Href,\n options?: HookOptions,\n): ListModel | null =>\n useModularUIBasic(\"list\", href, {\n expectedModels: [\"List\", \"CaseSearch\"],\n targetModel: [ListModel, CaseSearchModel],\n ...options,\n });\n\n/**\n */\nexport const useListOrDetail = (\n href: string | Href,\n options?: HookOptions,\n): ListModel | DetailModel | null =>\n useModularUIBasic(\"list\", href, {\n expectedModels: [\"List\", \"CaseSearch\", \"Detail\"],\n targetModel: [ListModel, CaseSearchModel, DetailModel],\n ...options,\n });\n\n/**\n */\nexport const useListDetail = (\n href: string | Href,\n options?: HookOptions,\n): ListDetailModel | null =>\n useModularUIBasic(\"listdetail\", href, {\n expectedModels: [\"ListDetail\"],\n targetModel: ListDetailModel,\n forceTargetModel: true,\n ...options,\n });\n\n/**\n */\nexport const useListNavigation = ({\n syncLocation = true,\n historyAction = \"push\",\n}: ListNavigationOptions = {}): ListNavigationHook => {\n const { push, replace } = useNavigation();\n const dispatch = useDispatch();\n\n const navigate = historyAction === \"push\" ? push : replace;\n\n const update = useCallback(\n (list: ListModel, resetPage: boolean = false) => {\n const listHref = list.selfhref;\n if (resetPage) {\n listHref.page = null;\n }\n\n if (list.requestMethod === HTTP_METHODS.POST) {\n if (syncLocation) {\n navigate({\n search: listHref.getQuerystring(true),\n state: { formdata: list.formdata },\n });\n }\n\n dispatch(\n loadModularUI(list.connectKey, listHref, {\n method: HTTP_METHODS.POST,\n data: list.formdata,\n targetModel: [ListModel, CaseSearchModel],\n }),\n );\n } else {\n if (syncLocation) {\n navigate({ search: listHref.getQuerystring(true) });\n }\n dispatch(\n loadModularUI(list.connectKey, listHref, {\n method: HTTP_METHODS.GET,\n targetModel: [ListModel, CaseSearchModel],\n }),\n );\n }\n },\n [dispatch, navigate, syncLocation],\n );\n\n const updateFilters = useCallback(\n (list: ListModel, filters: FilterCollection | Array<IFilter>) => {\n list.filterCollection = filters;\n update(list, true);\n },\n [update],\n );\n\n const updateFilter = useCallback(\n (\n list: ListModel,\n filter: IFilter,\n value: string,\n attribute?: AttributeType,\n ) => {\n if (attribute) {\n filter.update(attribute, value);\n } else if (filter instanceof AssignmentFilterModel) {\n throw new Error(\n \"Need the attribute to update for AssigmentFilterModel\",\n );\n } else if (filter instanceof FilterModel) {\n filter.update(filter.attribute, value);\n }\n update(list, true);\n },\n [update],\n );\n\n const resetFilters = useCallback(\n (list: ListModel) => {\n list.filterCollection.reset();\n update(list, true);\n },\n [update],\n );\n\n const removeFilter = useCallback(\n (list: ListModel, filter: IFilter) => {\n list.filterCollection.getFilterByName(filter.name)?.reset();\n update(list, true);\n },\n [update],\n );\n\n const updateSort = useCallback(\n (list: ListModel, sortOption: string) => {\n list.sorting.value = sortOption;\n update(list, true);\n },\n [update],\n );\n\n const updatePage = useCallback(\n (list: ListModel, page: number) => {\n list.paging.page = page;\n update(list);\n },\n [update],\n );\n\n const updatePageSize = useCallback(\n (list: ListModel, pagesize: number) => {\n list.paging.pagesize.value = pagesize;\n update(list, true);\n },\n [update],\n );\n\n return useMemo(\n () => ({\n update,\n updateFilters,\n updateFilter,\n updateSort,\n updatePage,\n updatePageSize,\n resetFilters,\n removeFilter,\n }),\n [\n removeFilter,\n resetFilters,\n update,\n updateFilter,\n updateFilters,\n updatePage,\n updatePageSize,\n updateSort,\n ],\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useList.js","names":["_reactRedux","require","_useModularUIBasic","_Constants","_redux","_useRouter","_DetailModel","_interopRequireDefault","_ListModel","_CaseSearchModel","_ListDetailModel","_Href","_FilterCollection","_AssignmentFilterModel","_FilterModel","_react","useList","href","options","useModularUIBasic","expectedModels","targetModel","ListModel","CaseSearchModel","exports","useListOrDetail","DetailModel","useListDetail","ListDetailModel","forceTargetModel","useListNavigation","syncLocation","historyAction","push","replace","useNavigation","dispatch","useDispatch","navigate","update","useCallback","list","resetPage","listHref","selfhref","page","requestMethod","HTTP_METHODS","POST","pathname","path","search","getQuerystring","state","formdata","loadModularUI","connectKey","method","data","GET","updateFilters","filters","filterCollection","updateFilter","filter","value","attribute","AssignmentFilterModel","TypeError","FilterModel","resetFilters","reset","removeFilter","getFilterByName","name","updateSort","sortOption","sorting","updatePage","paging","updatePageSize","pagesize","useMemo"],"sources":["../../src/hooks/useList.js"],"sourcesContent":["// @flow\nimport { useDispatch } from \"react-redux\";\n\nimport { useModularUIBasic } from \"./useModularUIBasic\";\nimport { HTTP_METHODS } from \"../constants/Constants\";\n\nimport { loadModularUI } from \"../redux\";\n\nimport { useNavigation } from \"./useRouter\";\n\nimport DetailModel from \"../models/detail/DetailModel\";\nimport ListModel from \"../models/list/ListModel\";\nimport CaseSearchModel from \"../models/search/CaseSearchModel\";\nimport ListDetailModel from \"../models/list/ListDetailModel\";\nimport Href from \"../models/href/Href\";\nimport FilterCollection from \"../models/filters/FilterCollection\";\nimport AssignmentFilterModel from \"../models/filters/AssignmentFilterModel\";\nimport FilterModel from \"../models/filters/FilterModel\";\n\nimport type { HookOptions } from \"./useModularUIBasic\";\nimport type { AttributeType, IFilter } from \"../models/types\";\nimport { useCallback, useMemo } from \"react\";\n\ntype ListNavigationHook = {\n update: (list: ListModel, resetPage?: boolean) => void,\n updateFilters: (\n list: ListModel,\n filters: FilterCollection | Array<IFilter>,\n ) => void,\n updateFilter: (\n list: ListModel,\n filter: IFilter,\n value: string,\n attribute?: AttributeType,\n ) => void,\n updateSort: (list: ListModel, sortOption: string) => void,\n updatePage: (list: ListModel, page: number) => void,\n updatePageSize: (list: ListModel, pagesize: number) => void,\n resetFilters: (list: ListModel) => void,\n removeFilter: (list: ListModel, filter: IFilter) => void,\n};\n\ntype ListNavigationOptions = {\n syncLocation?: boolean,\n historyAction?: \"push\" | \"replace\",\n};\n\n/**\n */\nexport const useList = (\n href: string | Href,\n options?: HookOptions,\n): ListModel | null =>\n useModularUIBasic(\"list\", href, {\n expectedModels: [\"List\", \"CaseSearch\"],\n targetModel: [ListModel, CaseSearchModel],\n ...options,\n });\n\n/**\n */\nexport const useListOrDetail = (\n href: string | Href,\n options?: HookOptions,\n): ListModel | DetailModel | null =>\n useModularUIBasic(\"list\", href, {\n expectedModels: [\"List\", \"CaseSearch\", \"Detail\"],\n targetModel: [ListModel, CaseSearchModel, DetailModel],\n ...options,\n });\n\n/**\n */\nexport const useListDetail = (\n href: string | Href,\n options?: HookOptions,\n): ListDetailModel | null =>\n useModularUIBasic(\"listdetail\", href, {\n expectedModels: [\"ListDetail\"],\n targetModel: ListDetailModel,\n forceTargetModel: true,\n ...options,\n });\n\n/**\n */\nexport const useListNavigation = ({\n syncLocation = true,\n historyAction = \"push\",\n}: ListNavigationOptions = {}): ListNavigationHook => {\n const { push, replace } = useNavigation();\n const dispatch = useDispatch();\n\n const navigate = historyAction === \"push\" ? push : replace;\n\n const update = useCallback(\n (list: ListModel, resetPage: boolean = false) => {\n const listHref = list.selfhref;\n if (resetPage) {\n listHref.page = null;\n }\n\n if (list.requestMethod === HTTP_METHODS.POST) {\n if (syncLocation) {\n navigate({\n pathname: listHref.path,\n search: listHref.getQuerystring(true),\n state: { formdata: list.formdata },\n });\n }\n\n dispatch(\n loadModularUI(list.connectKey, listHref, {\n method: HTTP_METHODS.POST,\n data: list.formdata,\n targetModel: [ListModel, CaseSearchModel],\n }),\n );\n } else {\n if (syncLocation) {\n navigate({\n pathname: listHref.path,\n search: listHref.getQuerystring(true),\n });\n }\n dispatch(\n loadModularUI(list.connectKey, listHref, {\n method: HTTP_METHODS.GET,\n targetModel: [ListModel, CaseSearchModel],\n }),\n );\n }\n },\n [dispatch, navigate, syncLocation],\n );\n\n const updateFilters = useCallback(\n (list: ListModel, filters: FilterCollection | Array<IFilter>) => {\n list.filterCollection = filters;\n update(list, true);\n },\n [update],\n );\n\n const updateFilter = useCallback(\n (\n list: ListModel,\n filter: IFilter,\n value: string,\n attribute?: AttributeType,\n ) => {\n if (attribute) {\n filter.update(attribute, value);\n } else if (filter instanceof AssignmentFilterModel) {\n throw new TypeError(\n \"AssignmentFilterModel needs the attribute argument to be able to update the filter\",\n );\n } else if (filter instanceof FilterModel) {\n filter.update(filter.attribute, value);\n }\n update(list, true);\n },\n [update],\n );\n\n const resetFilters = useCallback(\n (list: ListModel) => {\n list.filterCollection.reset();\n update(list, true);\n },\n [update],\n );\n\n const removeFilter = useCallback(\n (list: ListModel, filter: IFilter) => {\n list.filterCollection.getFilterByName(filter.name)?.reset();\n update(list, true);\n },\n [update],\n );\n\n const updateSort = useCallback(\n (list: ListModel, sortOption: string) => {\n list.sorting.value = sortOption;\n update(list, true);\n },\n [update],\n );\n\n const updatePage = useCallback(\n (list: ListModel, page: number) => {\n list.paging.page = page;\n update(list);\n },\n [update],\n );\n\n const updatePageSize = useCallback(\n (list: ListModel, pagesize: number) => {\n list.paging.pagesize.value = pagesize;\n update(list, true);\n },\n [update],\n );\n\n return useMemo(\n () => ({\n update,\n updateFilters,\n updateFilter,\n updateSort,\n updatePage,\n updatePageSize,\n resetFilters,\n removeFilter,\n }),\n [\n removeFilter,\n resetFilters,\n update,\n updateFilter,\n updateFilters,\n updatePage,\n updatePageSize,\n updateSort,\n ],\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -16,45 +16,40 @@ var _Href = _interopRequireDefault(require("../models/href/Href"));
|
|
|
16
16
|
/**
|
|
17
17
|
* Core hook to retrieve information for a Be Informed modular ui resource
|
|
18
18
|
*/
|
|
19
|
-
const useModularUI = (modelKey, url, options = {
|
|
20
|
-
method: _constants.HTTP_METHODS.GET,
|
|
21
|
-
removeOnUnmount: false
|
|
22
|
-
}) => {
|
|
19
|
+
const useModularUI = (modelKey, url, options = {}) => {
|
|
23
20
|
const dispatch = (0, _reactRedux.useDispatch)();
|
|
24
21
|
const href = (0, _react.useMemo)(() => url?.toString() || "", [url]);
|
|
25
22
|
const key = (0, _useModularUIKey.useModularUIKey)(modelKey, href);
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
23
|
+
const model = (0, _reactRedux.useSelector)(state => state.modularui[key]);
|
|
24
|
+
const requestOptions = (0, _react.useMemo)(() => {
|
|
25
|
+
const merged = {
|
|
26
|
+
method: _constants.HTTP_METHODS.GET,
|
|
27
|
+
removeOnUnmount: false,
|
|
28
|
+
...options
|
|
29
|
+
};
|
|
30
|
+
if (url instanceof _Href.default) {
|
|
31
|
+
merged.origin = merged.origin ?? url.origin;
|
|
32
|
+
merged.contextPath = merged.contextPath ?? url.contextPath;
|
|
33
|
+
}
|
|
34
|
+
return merged;
|
|
35
|
+
}, [options, url]);
|
|
32
36
|
const location = (0, _reactRouter.useLocation)();
|
|
33
37
|
const redirectLocation = location.state?.redirectLocation;
|
|
34
|
-
const
|
|
35
|
-
const prevOptions = (0, _react.useRef)(options);
|
|
36
|
-
const prevHref = (0, _react.useRef)(href);
|
|
37
|
-
const prevForceLoad = (0, _react.useRef)(forceLoad);
|
|
38
|
+
const shouldLoad = model == null || (redirectLocation instanceof _Href.default ? redirectLocation?.equals(href) : false) || requestOptions.isReload === true;
|
|
38
39
|
|
|
39
40
|
// dispatch loadModularUI
|
|
40
41
|
(0, _useDeepCompareEffect.default)(() => {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const doForceLoad = forceLoad && !prevForceLoad.current;
|
|
44
|
-
if (href !== "" && (doForceLoad || !isOldReload)) {
|
|
45
|
-
dispatch((0, _ModularUIActions.loadModularUI)(key, href, options));
|
|
42
|
+
if (href !== "" && shouldLoad) {
|
|
43
|
+
dispatch((0, _ModularUIActions.loadModularUI)(key, href, requestOptions));
|
|
46
44
|
}
|
|
47
|
-
|
|
48
|
-
prevHref.current = href;
|
|
49
|
-
prevForceLoad.current = forceLoad;
|
|
50
|
-
}, [key, href, options, forceLoad]);
|
|
45
|
+
}, [key, href, requestOptions, shouldLoad]);
|
|
51
46
|
(0, _react.useEffect)(() => {
|
|
52
|
-
if (
|
|
47
|
+
if (requestOptions.removeOnUnmount) {
|
|
53
48
|
return () => {
|
|
54
49
|
dispatch((0, _ModularUIActions.removeModelByKey)(key));
|
|
55
50
|
};
|
|
56
51
|
}
|
|
57
|
-
}, [dispatch, key,
|
|
52
|
+
}, [dispatch, key, requestOptions.removeOnUnmount]);
|
|
58
53
|
return model;
|
|
59
54
|
};
|
|
60
55
|
exports.useModularUI = useModularUI;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useModularUI.js","names":["_react","require","_reactRedux","_reactRouter","_constants","_ModularUIActions","_useDeepCompareEffect","_interopRequireDefault","_useModularUIKey","_Href","useModularUI","modelKey","url","options","
|
|
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","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 } 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: false,\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 (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,KAAK;MACtB,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,KACZe,gBAAgB,YAAYL,aAAI,GAC7BK,gBAAgB,EAAEE,MAAM,CAACtB,IAAI,CAAC,GAC9B,KAAK,CAAC,IACVS,cAAc,CAACc,QAAQ,KAAK,IAAI;;EAElC;EACA,IAAAC,6BAAoB,EAAC,MAAM;IACzB,IAAIxB,IAAI,KAAK,EAAE,IAAIqB,UAAU,EAAE;MAC7BvB,QAAQ,CAAC,IAAA2B,+BAAa,EAACtB,GAAG,EAAEH,IAAI,EAAES,cAAc,CAAC,CAAC;IACpD;EACF,CAAC,EAAE,CAACN,GAAG,EAAEH,IAAI,EAAES,cAAc,EAAEY,UAAU,CAAC,CAAC;EAE3C,IAAAK,gBAAS,EAAC,MAAM;IACd,IAAIjB,cAAc,CAACK,eAAe,EAAE;MAClC,OAAO,MAAM;QACXhB,QAAQ,CAAC,IAAA6B,kCAAgB,EAACxB,GAAG,CAAC,CAAC;MACjC,CAAC;IACH;EACF,CAAC,EAAE,CAACL,QAAQ,EAAEK,GAAG,EAAEM,cAAc,CAACK,eAAe,CAAC,CAAC;EAEnD,OAAOT,KAAK;AACd,CAAC;AAACuB,OAAA,CAAAlC,YAAA,GAAAA,YAAA","ignoreList":[]}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
7
|
exports.useReload = exports.useModularUIBasic = void 0;
|
|
8
|
+
var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
|
|
7
9
|
var _reactRouter = require("react-router");
|
|
8
10
|
var _reactRedux = require("react-redux");
|
|
9
11
|
var _react = require("react");
|
|
@@ -13,48 +15,24 @@ var _useModularUIKey = require("./useModularUIKey");
|
|
|
13
15
|
// Helper to create useModularUI options
|
|
14
16
|
const createUseModularUIOptions = (options, href, mustReload) => {
|
|
15
17
|
const baseOptions = {
|
|
16
|
-
|
|
17
|
-
forceTargetModel: undefined,
|
|
18
|
-
isReload: false,
|
|
19
|
-
origin: undefined,
|
|
20
|
-
contextPath: undefined,
|
|
21
|
-
cache: false,
|
|
22
|
-
removeOnUnmount: false,
|
|
18
|
+
expectedModels: [],
|
|
23
19
|
method: _constants.HTTP_METHODS.GET,
|
|
24
|
-
data: undefined
|
|
20
|
+
data: undefined,
|
|
21
|
+
removeOnUnmount: false,
|
|
22
|
+
...options,
|
|
23
|
+
isReload: mustReload || options.isReload
|
|
25
24
|
};
|
|
26
|
-
|
|
27
|
-
// Handle targetModel and forceTargetModel
|
|
28
|
-
if (options.targetModel) {
|
|
29
|
-
baseOptions.targetModel = options.targetModel;
|
|
30
|
-
baseOptions.forceTargetModel = options.forceTargetModel;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// Handle cache option
|
|
34
|
-
if (options.cache) {
|
|
35
|
-
baseOptions.cache = options.cache;
|
|
36
|
-
}
|
|
37
|
-
if (mustReload) {
|
|
38
|
-
baseOptions.isReload = true;
|
|
39
|
-
}
|
|
40
|
-
if (options.removeOnUnmount) {
|
|
41
|
-
baseOptions.removeOnUnmount = true;
|
|
42
|
-
}
|
|
43
25
|
if (options.formdata != null) {
|
|
44
26
|
baseOptions.method = _constants.HTTP_METHODS.POST;
|
|
45
27
|
baseOptions.data = options.formdata;
|
|
46
28
|
}
|
|
47
|
-
|
|
48
|
-
// Handle origin and contextPath options
|
|
49
|
-
baseOptions.origin = options.origin ?? baseOptions.origin;
|
|
50
|
-
baseOptions.contextPath = options.contextPath ?? baseOptions.contextPath;
|
|
51
29
|
return baseOptions;
|
|
52
30
|
};
|
|
53
31
|
|
|
54
32
|
// Helper to validate the model against expectedModels
|
|
55
33
|
const validateModel = (model, expectedModels) => {
|
|
56
34
|
if (expectedModels.length > 0) {
|
|
57
|
-
const isCorrectModel = expectedModels.
|
|
35
|
+
const isCorrectModel = (0, _includes.default)(expectedModels).call(expectedModels, model.type);
|
|
58
36
|
if (!isCorrectModel) {
|
|
59
37
|
console.warn(model, "is not of instance", expectedModels);
|
|
60
38
|
}
|
|
@@ -64,15 +42,7 @@ const validateModel = (model, expectedModels) => {
|
|
|
64
42
|
/**
|
|
65
43
|
* useModularUIBasic Hook
|
|
66
44
|
*/
|
|
67
|
-
const useModularUIBasic = (defaultKey, href, options = {
|
|
68
|
-
expectedModels: [],
|
|
69
|
-
targetModel: undefined,
|
|
70
|
-
forceTargetModel: false,
|
|
71
|
-
origin: undefined,
|
|
72
|
-
contextPath: undefined,
|
|
73
|
-
key: undefined,
|
|
74
|
-
formdata: undefined
|
|
75
|
-
}) => {
|
|
45
|
+
const useModularUIBasic = (defaultKey, href, options = {}) => {
|
|
76
46
|
const memoizedHref = (0, _react.useMemo)(() => href.toString(), [href]);
|
|
77
47
|
const key = options.key ?? defaultKey;
|
|
78
48
|
const mustReload = useReload(key, memoizedHref);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useModularUIBasic.js","names":["_reactRouter","require","_reactRedux","_react","_useModularUI","_constants","_useModularUIKey","createUseModularUIOptions","options","href","mustReload","baseOptions","
|
|
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","removeOnUnmount","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 removeOnUnmount: false,\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":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@beinformed/ui",
|
|
3
|
-
"version": "1.65.
|
|
3
|
+
"version": "1.65.16",
|
|
4
4
|
"description": "Toolbox for be informed javascript layouts",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"bugs": "https://support.beinformed.com",
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
"jscodeshift": "^17.3.0",
|
|
132
132
|
"lint-staged": "^16.2.7",
|
|
133
133
|
"polished": "^4.3.1",
|
|
134
|
-
"prettier": "^3.
|
|
134
|
+
"prettier": "^3.8.0",
|
|
135
135
|
"react": "^19.2.3",
|
|
136
136
|
"react-dom": "^19.2.3",
|
|
137
137
|
"react-helmet-async": "^2.0.5",
|