@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 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
 
@@ -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 Error("Need the attribute to update for AssigmentFilterModel");
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({ search: listHref.getQuerystring(true) });
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 Error(
152
- "Need the attribute to update for AssigmentFilterModel",
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);
@@ -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, useRef, useMemo } from "react";
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 modelSelector = useMemo(() => state => state.modularui[key], [key]);
20
- const model = useSelector(modelSelector);
21
- if (url instanceof Href) {
22
- options.origin = options.origin ?? url.origin;
23
- options.contextPath = options.contextPath ?? url.contextPath;
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 forceLoad = model == null || (redirectLocation instanceof Href ? redirectLocation?.equals(href) : false);
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
- // prevent reloads when previous option had the isReload, but the new options not
35
- const isOldReload = prevHref.current === href && prevOptions.current.isReload && !options.isReload;
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
- prevOptions.current = options;
41
- prevHref.current = href;
42
- prevForceLoad.current = forceLoad;
43
- }, [key, href, options, forceLoad]);
38
+ }, [key, href, requestOptions, shouldLoad]);
44
39
  useEffect(() => {
45
- if (options.removeOnUnmount) {
40
+ if (requestOptions.removeOnUnmount) {
46
41
  return () => {
47
42
  dispatch(removeModelByKey(key));
48
43
  };
49
44
  }
50
- }, [dispatch, key, options.removeOnUnmount]);
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, useRef, useMemo } from "react";
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 modelSelector = useMemo(() => (state) => state.modularui[key], [key]);
34
- const model = useSelector(modelSelector);
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
- if (url instanceof Href) {
37
- options.origin = options.origin ?? url.origin;
38
- options.contextPath = options.contextPath ?? url.contextPath;
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 prevOptions = useRef(options);
48
- const prevHref = useRef(href);
49
- const prevForceLoad = useRef(forceLoad);
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
- // prevent reloads when previous option had the isReload, but the new options not
54
- const isOldReload =
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 (options.removeOnUnmount) {
65
+ if (requestOptions.removeOnUnmount) {
72
66
  return () => {
73
67
  dispatch(removeModelByKey(key));
74
68
  };
75
69
  }
76
- }, [dispatch, key, options.removeOnUnmount]);
70
+ }, [dispatch, key, requestOptions.removeOnUnmount]);
77
71
 
78
72
  return model;
79
73
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useModularUI.js","names":["useEffect","useRef","useMemo","useDispatch","useSelector","useLocation","HTTP_METHODS","loadModularUI","removeModelByKey","useDeepCompareEffect","useModularUIKey","Href","useModularUI","modelKey","url","options","method","GET","removeOnUnmount","dispatch","href","toString","key","modelSelector","state","modularui","model","origin","contextPath","location","redirectLocation","forceLoad","equals","prevOptions","prevHref","prevForceLoad","isOldReload","current","isReload","doForceLoad"],"sources":["../../src/hooks/useModularUI.js"],"sourcesContent":["// @flow\nimport { useEffect, useRef, 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 = {\n method: HTTP_METHODS.GET,\n removeOnUnmount: false,\n },\n): any => {\n const dispatch = useDispatch();\n const href = useMemo(() => url?.toString() || \"\", [url]);\n const key = useModularUIKey(modelKey, href);\n\n const modelSelector = useMemo(() => (state) => state.modularui[key], [key]);\n const model = useSelector(modelSelector);\n\n if (url instanceof Href) {\n options.origin = options.origin ?? url.origin;\n options.contextPath = options.contextPath ?? url.contextPath;\n }\n\n const location = useLocation();\n const redirectLocation = location.state?.redirectLocation;\n const forceLoad =\n model == null ||\n (redirectLocation instanceof Href ? redirectLocation?.equals(href) : false);\n\n const prevOptions = useRef(options);\n const prevHref = useRef(href);\n const prevForceLoad = useRef(forceLoad);\n\n // dispatch loadModularUI\n useDeepCompareEffect(() => {\n // prevent reloads when previous option had the isReload, but the new options not\n const isOldReload =\n prevHref.current === href &&\n prevOptions.current.isReload &&\n !options.isReload;\n\n const doForceLoad = forceLoad && !prevForceLoad.current;\n\n if (href !== \"\" && (doForceLoad || !isOldReload)) {\n dispatch(loadModularUI(key, href, options));\n }\n\n prevOptions.current = options;\n prevHref.current = href;\n prevForceLoad.current = forceLoad;\n }, [key, href, options, forceLoad]);\n\n useEffect(() => {\n if (options.removeOnUnmount) {\n return () => {\n dispatch(removeModelByKey(key));\n };\n }\n }, [dispatch, key, options.removeOnUnmount]);\n\n return model;\n};\n"],"mappings":"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","ignoreList":[]}
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
- targetModel: undefined,
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.some(expectedModel => model.type === expectedModel);
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
- targetModel: undefined,
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.some(
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","targetModel","undefined","forceTargetModel","isReload","origin","contextPath","cache","removeOnUnmount","method","GET","data","formdata","POST","validateModel","model","expectedModels","length","isCorrectModel","some","expectedModel","type","console","warn","useModularUIBasic","defaultKey","key","memoizedHref","toString","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 targetModel: undefined,\n forceTargetModel: undefined,\n isReload: false,\n origin: undefined,\n contextPath: undefined,\n cache: false,\n removeOnUnmount: false,\n method: HTTP_METHODS.GET,\n data: undefined,\n };\n\n // Handle targetModel and forceTargetModel\n if (options.targetModel) {\n baseOptions.targetModel = options.targetModel;\n baseOptions.forceTargetModel = options.forceTargetModel;\n }\n\n // Handle cache option\n if (options.cache) {\n baseOptions.cache = options.cache;\n }\n\n if (mustReload) {\n baseOptions.isReload = true;\n }\n\n if (options.removeOnUnmount) {\n baseOptions.removeOnUnmount = true;\n }\n\n if (options.formdata != null) {\n baseOptions.method = HTTP_METHODS.POST;\n baseOptions.data = options.formdata;\n }\n\n // Handle origin and contextPath options\n baseOptions.origin = options.origin ?? baseOptions.origin;\n baseOptions.contextPath = options.contextPath ?? baseOptions.contextPath;\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.some(\n (expectedModel) => model.type === expectedModel,\n );\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> = {\n expectedModels: [],\n targetModel: undefined,\n forceTargetModel: false,\n origin: undefined,\n contextPath: undefined,\n key: undefined,\n formdata: undefined,\n },\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,WAAW,EAAEC,SAAS;IACtBC,gBAAgB,EAAED,SAAS;IAC3BE,QAAQ,EAAE,KAAK;IACfC,MAAM,EAAEH,SAAS;IACjBI,WAAW,EAAEJ,SAAS;IACtBK,KAAK,EAAE,KAAK;IACZC,eAAe,EAAE,KAAK;IACtBC,MAAM,EAAEhB,YAAY,CAACiB,GAAG;IACxBC,IAAI,EAAET;EACR,CAAC;;EAED;EACA,IAAIL,OAAO,CAACI,WAAW,EAAE;IACvBD,WAAW,CAACC,WAAW,GAAGJ,OAAO,CAACI,WAAW;IAC7CD,WAAW,CAACG,gBAAgB,GAAGN,OAAO,CAACM,gBAAgB;EACzD;;EAEA;EACA,IAAIN,OAAO,CAACU,KAAK,EAAE;IACjBP,WAAW,CAACO,KAAK,GAAGV,OAAO,CAACU,KAAK;EACnC;EAEA,IAAIR,UAAU,EAAE;IACdC,WAAW,CAACI,QAAQ,GAAG,IAAI;EAC7B;EAEA,IAAIP,OAAO,CAACW,eAAe,EAAE;IAC3BR,WAAW,CAACQ,eAAe,GAAG,IAAI;EACpC;EAEA,IAAIX,OAAO,CAACe,QAAQ,IAAI,IAAI,EAAE;IAC5BZ,WAAW,CAACS,MAAM,GAAGhB,YAAY,CAACoB,IAAI;IACtCb,WAAW,CAACW,IAAI,GAAGd,OAAO,CAACe,QAAQ;EACrC;;EAEA;EACAZ,WAAW,CAACK,MAAM,GAAGR,OAAO,CAACQ,MAAM,IAAIL,WAAW,CAACK,MAAM;EACzDL,WAAW,CAACM,WAAW,GAAGT,OAAO,CAACS,WAAW,IAAIN,WAAW,CAACM,WAAW;EAExE,OAAON,WAAW;AACpB,CAAC;;AAED;AACA,MAAMc,aAAa,GAAGA,CAACC,KAAU,EAAEC,cAA6B,KAAK;EACnE,IAAIA,cAAc,CAACC,MAAM,GAAG,CAAC,EAAE;IAC7B,MAAMC,cAAc,GAAGF,cAAc,CAACG,IAAI,CACvCC,aAAa,IAAKL,KAAK,CAACM,IAAI,KAAKD,aACpC,CAAC;IACD,IAAI,CAACF,cAAc,EAAE;MACnBI,OAAO,CAACC,IAAI,CAACR,KAAK,EAAE,oBAAoB,EAAEC,cAAc,CAAC;IAC3D;EACF;AACF,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMQ,iBAAiB,GAAGA,CAC/BC,UAAkB,EAClB3B,IAAmB,EACnBD,OAAoC,GAAG;EACrCmB,cAAc,EAAE,EAAE;EAClBf,WAAW,EAAEC,SAAS;EACtBC,gBAAgB,EAAE,KAAK;EACvBE,MAAM,EAAEH,SAAS;EACjBI,WAAW,EAAEJ,SAAS;EACtBwB,GAAG,EAAExB,SAAS;EACdU,QAAQ,EAAEV;AACZ,CAAC,KACY;EACb,MAAMyB,YAAY,GAAGpC,OAAO,CAAC,MAAMO,IAAI,CAAC8B,QAAQ,CAAC,CAAC,EAAE,CAAC9B,IAAI,CAAC,CAAC;EAC3D,MAAM4B,GAAG,GAAG7B,OAAO,CAAC6B,GAAG,IAAID,UAAU;EAErC,MAAM1B,UAAU,GAAG8B,SAAS,CAACH,GAAG,EAAEC,YAAY,CAAC;EAC/C,MAAMG,gBAAgB,GAAGvC,OAAO,CAC9B,MAAMK,yBAAyB,CAACC,OAAO,EAAE8B,YAAY,EAAE5B,UAAU,CAAC,EAClE,CAACF,OAAO,EAAE8B,YAAY,EAAE5B,UAAU,CACpC,CAAC;EAED,MAAMgC,SAAS,GAAGvC,YAAY,CAACkC,GAAG,EAAE5B,IAAI,EAAEgC,gBAAgB,CAAC;EAC3D,MAAMd,cAAc,GAAGzB,OAAO,CAC5B,MAAMM,OAAO,CAACmB,cAAc,IAAI,EAAE,EAClC,CAACnB,OAAO,CAACmB,cAAc,CACzB,CAAC;EAED,OAAOzB,OAAO,CAAC,MAAgB;IAC7B,IAAIwC,SAAS,EAAEhB,KAAK,EAAE;MACpBD,aAAa,CAACiB,SAAS,CAAChB,KAAK,EAAEC,cAAc,CAAC;MAC9C,OAAOe,SAAS,CAAChB,KAAK;IACxB;IACA,OAAO,IAAI;EACb,CAAC,EAAE,CAACC,cAAc,EAAEe,SAAS,CAAC,CAAC;AACjC,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMF,SAAS,GAAGA,CAACG,QAAgB,EAAEC,GAAW,KAAc;EACnE,MAAMC,QAAQ,GAAG7C,WAAW,CAAC,CAAC;EAC9B,MAAMqC,GAAG,GAAG/B,eAAe,CAACqC,QAAQ,EAAEC,GAAG,CAAC;EAC1C,MAAME,UAAU,GAAG7C,WAAW,CAAE8C,KAAK,IAAKA,KAAK,CAACC,SAAS,CAACX,GAAG,CAAC,CAAC;EAE/D,IAAIS,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,KAAK9C,gBAAgB,CAAC+C,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":[]}
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":[]}
@@ -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 Error("Need the attribute to update for AssigmentFilterModel");
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
  }
@@ -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 modelSelector = (0, _react.useMemo)(() => state => state.modularui[key], [key]);
27
- const model = (0, _reactRedux.useSelector)(modelSelector);
28
- if (url instanceof _Href.default) {
29
- options.origin = options.origin ?? url.origin;
30
- options.contextPath = options.contextPath ?? url.contextPath;
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 forceLoad = model == null || (redirectLocation instanceof _Href.default ? redirectLocation?.equals(href) : false);
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
- // prevent reloads when previous option had the isReload, but the new options not
42
- const isOldReload = prevHref.current === href && prevOptions.current.isReload && !options.isReload;
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
- prevOptions.current = options;
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 (options.removeOnUnmount) {
47
+ if (requestOptions.removeOnUnmount) {
53
48
  return () => {
54
49
  dispatch((0, _ModularUIActions.removeModelByKey)(key));
55
50
  };
56
51
  }
57
- }, [dispatch, key, options.removeOnUnmount]);
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","method","HTTP_METHODS","GET","removeOnUnmount","dispatch","useDispatch","href","useMemo","toString","key","useModularUIKey","modelSelector","state","modularui","model","useSelector","Href","origin","contextPath","location","useLocation","redirectLocation","forceLoad","equals","prevOptions","useRef","prevHref","prevForceLoad","useDeepCompareEffect","isOldReload","current","isReload","doForceLoad","loadModularUI","useEffect","removeModelByKey","exports"],"sources":["../../src/hooks/useModularUI.js"],"sourcesContent":["// @flow\nimport { useEffect, useRef, 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 = {\n method: HTTP_METHODS.GET,\n removeOnUnmount: false,\n },\n): any => {\n const dispatch = useDispatch();\n const href = useMemo(() => url?.toString() || \"\", [url]);\n const key = useModularUIKey(modelKey, href);\n\n const modelSelector = useMemo(() => (state) => state.modularui[key], [key]);\n const model = useSelector(modelSelector);\n\n if (url instanceof Href) {\n options.origin = options.origin ?? url.origin;\n options.contextPath = options.contextPath ?? url.contextPath;\n }\n\n const location = useLocation();\n const redirectLocation = location.state?.redirectLocation;\n const forceLoad =\n model == null ||\n (redirectLocation instanceof Href ? redirectLocation?.equals(href) : false);\n\n const prevOptions = useRef(options);\n const prevHref = useRef(href);\n const prevForceLoad = useRef(forceLoad);\n\n // dispatch loadModularUI\n useDeepCompareEffect(() => {\n // prevent reloads when previous option had the isReload, but the new options not\n const isOldReload =\n prevHref.current === href &&\n prevOptions.current.isReload &&\n !options.isReload;\n\n const doForceLoad = forceLoad && !prevForceLoad.current;\n\n if (href !== \"\" && (doForceLoad || !isOldReload)) {\n dispatch(loadModularUI(key, href, options));\n }\n\n prevOptions.current = options;\n prevHref.current = href;\n prevForceLoad.current = forceLoad;\n }, [key, href, options, forceLoad]);\n\n useEffect(() => {\n if (options.removeOnUnmount) {\n return () => {\n dispatch(removeModelByKey(key));\n };\n }\n }, [dispatch, key, options.removeOnUnmount]);\n\n return model;\n};\n"],"mappings":"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","ignoreList":[]}
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
- targetModel: undefined,
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.some(expectedModel => model.type === expectedModel);
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","targetModel","undefined","forceTargetModel","isReload","origin","contextPath","cache","removeOnUnmount","method","HTTP_METHODS","GET","data","formdata","POST","validateModel","model","expectedModels","length","isCorrectModel","some","expectedModel","type","console","warn","useModularUIBasic","defaultKey","key","memoizedHref","useMemo","toString","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 targetModel: undefined,\n forceTargetModel: undefined,\n isReload: false,\n origin: undefined,\n contextPath: undefined,\n cache: false,\n removeOnUnmount: false,\n method: HTTP_METHODS.GET,\n data: undefined,\n };\n\n // Handle targetModel and forceTargetModel\n if (options.targetModel) {\n baseOptions.targetModel = options.targetModel;\n baseOptions.forceTargetModel = options.forceTargetModel;\n }\n\n // Handle cache option\n if (options.cache) {\n baseOptions.cache = options.cache;\n }\n\n if (mustReload) {\n baseOptions.isReload = true;\n }\n\n if (options.removeOnUnmount) {\n baseOptions.removeOnUnmount = true;\n }\n\n if (options.formdata != null) {\n baseOptions.method = HTTP_METHODS.POST;\n baseOptions.data = options.formdata;\n }\n\n // Handle origin and contextPath options\n baseOptions.origin = options.origin ?? baseOptions.origin;\n baseOptions.contextPath = options.contextPath ?? baseOptions.contextPath;\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.some(\n (expectedModel) => model.type === expectedModel,\n );\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> = {\n expectedModels: [],\n targetModel: undefined,\n forceTargetModel: false,\n origin: undefined,\n contextPath: undefined,\n key: undefined,\n formdata: undefined,\n },\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":[]}
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.14",
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.7.4",
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",