@beinformed/ui 1.50.2 → 1.50.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/esm/redux/_modularui/ModularUIConnector.js +21 -2
- package/esm/redux/_modularui/ModularUIConnector.js.map +1 -1
- package/lib/redux/_modularui/ModularUIConnector.js +21 -2
- package/lib/redux/_modularui/ModularUIConnector.js.flow +30 -2
- package/lib/redux/_modularui/ModularUIConnector.js.map +1 -1
- package/package.json +1 -1
- package/src/redux/_modularui/ModularUIConnector.js +30 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [1.50.3](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.50.2...v1.50.3) (2024-07-22)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **connector:** patch updateModel fetch property to updateHandler for modularui connector ([f4cb62d](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/f4cb62dc77d1504ae0e7bfc454146768c5100091))
|
|
11
|
+
|
|
5
12
|
## [1.50.2](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.50.1...v1.50.2) (2024-07-17)
|
|
6
13
|
|
|
7
14
|
|
|
@@ -7,7 +7,26 @@ import { getDisplayName } from "../../react/utils";
|
|
|
7
7
|
import { useUrl, useReload } from "./ModularUIUtils";
|
|
8
8
|
import { useModularUI } from "../../hooks/useModularUI";
|
|
9
9
|
import { useLocale } from "../../hooks/useI18n";
|
|
10
|
+
import FormModel from "../../models/form/FormModel";
|
|
10
11
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
+
const patchUpdateModelOption = oldOptions => {
|
|
13
|
+
if ("updateModel" in oldOptions && oldOptions.updateModel instanceof FormModel) {
|
|
14
|
+
return {
|
|
15
|
+
...oldOptions,
|
|
16
|
+
updateHandler: newModel => {
|
|
17
|
+
if (newModel instanceof FormModel) {
|
|
18
|
+
// $FLowFixMe
|
|
19
|
+
const clonedModel = oldOptions.updateModel.clone();
|
|
20
|
+
clonedModel.update(newModel);
|
|
21
|
+
return clonedModel;
|
|
22
|
+
}
|
|
23
|
+
return newModel;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
return oldOptions;
|
|
28
|
+
};
|
|
29
|
+
|
|
11
30
|
/**
|
|
12
31
|
*/
|
|
13
32
|
const modularUIConnector = function (name, resource) {
|
|
@@ -42,7 +61,7 @@ const modularUIConnector = function (name, resource) {
|
|
|
42
61
|
// Provide connected models with a fetchModularUI method to be able
|
|
43
62
|
// to run the loadModularUI action from a handler / callback in the component
|
|
44
63
|
const handleFetch = (href, fetchOptions) => {
|
|
45
|
-
dispatch(loadModularUI(modelKey, href, fetchOptions));
|
|
64
|
+
dispatch(loadModularUI(modelKey, href, patchUpdateModelOption(fetchOptions)));
|
|
46
65
|
};
|
|
47
66
|
|
|
48
67
|
// Check if current model needs a reload
|
|
@@ -51,7 +70,7 @@ const modularUIConnector = function (name, resource) {
|
|
|
51
70
|
useEffect(() => {
|
|
52
71
|
if (doReload) {
|
|
53
72
|
dispatch(loadModularUI(modelKey, url, {
|
|
54
|
-
...otherOptions,
|
|
73
|
+
...patchUpdateModelOption(otherOptions),
|
|
55
74
|
isReload: true
|
|
56
75
|
}));
|
|
57
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModularUIConnector.js","names":["useEffect","useDispatch","useLocation","loadModularUI","reloadModel","removeModelByKey","Href","getDisplayName","useUrl","useReload","useModularUI","useLocale","jsx","_jsx","modularUIConnector","name","resource","options","arguments","length","undefined","propName","removeOnUnmount","otherOptions","Component","WrappedComponent","props","dispatch","location","url","displayName","contextId","modelEntry","modelKey","model","connectKey","handleManualReload","reloadOptions","handleFetch","href","fetchOptions","reload","state","doReload","isReload","locale","newProps","status","lastModification","hasModel","Boolean","fetchModularUI"],"sources":["../../../src/redux/_modularui/ModularUIConnector.js"],"sourcesContent":["// @flow\nimport { useEffect } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { useLocation } from \"react-router\";\n\nimport {\n loadModularUI,\n reloadModel,\n removeModelByKey,\n} from \"./ModularUIActions\";\n\nimport Href from \"../../models/href/Href\";\nimport { getDisplayName } from \"../../react/utils\";\n\nimport { useUrl, useReload } from \"./ModularUIUtils\";\nimport { useModularUI } from \"../../hooks/useModularUI\";\nimport { useLocale } from \"../../hooks/useI18n\";\n\nimport type { ComponentType, Node } from \"react\";\nimport type { Location } from \"react-router\";\nimport type { ModularUIModel } from \"../../models/types\";\nimport type { ModularUIOptions } from \"./types\";\n\nexport type InjectedProps = {\n +modelKey: string,\n +location: Location,\n +status: string | null,\n +lastModification: number | null,\n +hasModel: boolean,\n +locale: string,\n +fetchModularUI: (href: string | Href, fetchOptions: Object) => void,\n +reloadModel: (model: ModularUIModel, options: Object) => void,\n +data?: ?ModularUIModel,\n};\n\n/**\n */\nconst modularUIConnector = (\n name: string,\n resource: string | Function,\n options: ModularUIOptions = { propName: \"data\", removeOnUnmount: false },\n): ((Component: ComponentType<any>) => (props: any) => Node) => {\n const {\n propName = \"data\",\n removeOnUnmount = false,\n ...otherOptions\n } = options;\n\n return (Component: ComponentType<any>) => {\n const WrappedComponent = (props: any) => {\n const dispatch = useDispatch();\n const location = useLocation();\n\n const url = useUrl(resource, { location, ...props });\n const displayName = getDisplayName(Component, name, props.contextId);\n\n // Load the model through the useModUI hook\n const modelEntry = useModularUI(displayName, url, otherOptions);\n const modelKey = modelEntry?.model?.connectKey;\n\n // handle manual reload of model\n const handleManualReload = (\n model: ModularUIModel,\n reloadOptions?: Object,\n ) => {\n dispatch(reloadModel(model, reloadOptions));\n };\n\n // Provide connected models with a fetchModularUI method to be able\n // to run the loadModularUI action from a handler / callback in the component\n const handleFetch = (href: string | Href, fetchOptions: Object) => {\n dispatch(loadModularUI(modelKey, href, fetchOptions));\n };\n\n // Check if current model needs a reload\n const reload = location?.state?.reload ?? 0;\n const doReload = useReload(modelEntry, reload);\n useEffect(() => {\n if (doReload) {\n dispatch(\n loadModularUI(modelKey, url, {
|
|
1
|
+
{"version":3,"file":"ModularUIConnector.js","names":["useEffect","useDispatch","useLocation","loadModularUI","reloadModel","removeModelByKey","Href","getDisplayName","useUrl","useReload","useModularUI","useLocale","FormModel","jsx","_jsx","patchUpdateModelOption","oldOptions","updateModel","updateHandler","newModel","clonedModel","clone","update","modularUIConnector","name","resource","options","arguments","length","undefined","propName","removeOnUnmount","otherOptions","Component","WrappedComponent","props","dispatch","location","url","displayName","contextId","modelEntry","modelKey","model","connectKey","handleManualReload","reloadOptions","handleFetch","href","fetchOptions","reload","state","doReload","isReload","locale","newProps","status","lastModification","hasModel","Boolean","fetchModularUI"],"sources":["../../../src/redux/_modularui/ModularUIConnector.js"],"sourcesContent":["// @flow\nimport { useEffect } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { useLocation } from \"react-router\";\n\nimport {\n loadModularUI,\n reloadModel,\n removeModelByKey,\n} from \"./ModularUIActions\";\n\nimport Href from \"../../models/href/Href\";\nimport { getDisplayName } from \"../../react/utils\";\n\nimport { useUrl, useReload } from \"./ModularUIUtils\";\nimport { useModularUI } from \"../../hooks/useModularUI\";\nimport { useLocale } from \"../../hooks/useI18n\";\n\nimport type { ComponentType, Node } from \"react\";\nimport type { Location } from \"react-router\";\nimport type { ModularUIModel } from \"../../models/types\";\nimport type { ModularUIOptions } from \"./types\";\nimport FormModel from \"../../models/form/FormModel\";\n\nexport type InjectedProps = {\n +modelKey: string,\n +location: Location,\n +status: string | null,\n +lastModification: number | null,\n +hasModel: boolean,\n +locale: string,\n +fetchModularUI: (href: string | Href, fetchOptions: Object) => void,\n +reloadModel: (model: ModularUIModel, options: Object) => void,\n +data?: ?ModularUIModel,\n};\n\nconst patchUpdateModelOption = (oldOptions: Object) => {\n if (\n \"updateModel\" in oldOptions &&\n oldOptions.updateModel instanceof FormModel\n ) {\n return {\n ...oldOptions,\n updateHandler: (newModel: ModularUIModel): ModularUIModel => {\n if (newModel instanceof FormModel) {\n // $FLowFixMe\n const clonedModel: FormModel = oldOptions.updateModel.clone();\n clonedModel.update(newModel);\n return clonedModel;\n }\n return newModel;\n },\n };\n }\n\n return oldOptions;\n};\n\n/**\n */\nconst modularUIConnector = (\n name: string,\n resource: string | Function,\n options: ModularUIOptions = { propName: \"data\", removeOnUnmount: false },\n): ((Component: ComponentType<any>) => (props: any) => Node) => {\n const {\n propName = \"data\",\n removeOnUnmount = false,\n ...otherOptions\n } = options;\n\n return (Component: ComponentType<any>) => {\n const WrappedComponent = (props: any) => {\n const dispatch = useDispatch();\n const location = useLocation();\n\n const url = useUrl(resource, { location, ...props });\n const displayName = getDisplayName(Component, name, props.contextId);\n\n // Load the model through the useModUI hook\n const modelEntry = useModularUI(displayName, url, otherOptions);\n const modelKey = modelEntry?.model?.connectKey;\n\n // handle manual reload of model\n const handleManualReload = (\n model: ModularUIModel,\n reloadOptions?: Object,\n ) => {\n dispatch(reloadModel(model, reloadOptions));\n };\n\n // Provide connected models with a fetchModularUI method to be able\n // to run the loadModularUI action from a handler / callback in the component\n const handleFetch = (href: string | Href, fetchOptions: Object) => {\n dispatch(\n loadModularUI(modelKey, href, patchUpdateModelOption(fetchOptions)),\n );\n };\n\n // Check if current model needs a reload\n const reload = location?.state?.reload ?? 0;\n const doReload = useReload(modelEntry, reload);\n useEffect(() => {\n if (doReload) {\n dispatch(\n loadModularUI(modelKey, url, {\n ...patchUpdateModelOption(otherOptions),\n isReload: true,\n }),\n );\n }\n }, [dispatch, doReload, url, modelKey]);\n\n // Remove model when hoc unloads\n useEffect(() => {\n return () => {\n if (removeOnUnmount) {\n dispatch(removeModelByKey(modelKey));\n }\n };\n }, [dispatch, modelKey]);\n\n // Create new properties object to inject modularui properties to own props\n const locale = useLocale();\n const newProps: InjectedProps = {\n modelKey,\n [propName]: modelEntry ? modelEntry.model : null,\n location,\n status: modelEntry ? modelEntry.status : null,\n lastModification: modelEntry ? modelEntry.lastModification : null,\n hasModel: Boolean(modelEntry),\n locale,\n fetchModularUI: handleFetch,\n reloadModel: handleManualReload,\n };\n\n return <Component {...props} {...newProps} />;\n };\n\n WrappedComponent.displayName = `BI.modularui(${getDisplayName(\n WrappedComponent,\n name,\n )}`;\n\n return WrappedComponent;\n };\n};\n\nexport default modularUIConnector;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -14,7 +14,26 @@ var _utils = require("../../react/utils");
|
|
|
14
14
|
var _ModularUIUtils = require("./ModularUIUtils");
|
|
15
15
|
var _useModularUI = require("../../hooks/useModularUI");
|
|
16
16
|
var _useI18n = require("../../hooks/useI18n");
|
|
17
|
+
var _FormModel = _interopRequireDefault(require("../../models/form/FormModel"));
|
|
17
18
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
19
|
+
const patchUpdateModelOption = oldOptions => {
|
|
20
|
+
if ("updateModel" in oldOptions && oldOptions.updateModel instanceof _FormModel.default) {
|
|
21
|
+
return {
|
|
22
|
+
...oldOptions,
|
|
23
|
+
updateHandler: newModel => {
|
|
24
|
+
if (newModel instanceof _FormModel.default) {
|
|
25
|
+
// $FLowFixMe
|
|
26
|
+
const clonedModel = oldOptions.updateModel.clone();
|
|
27
|
+
clonedModel.update(newModel);
|
|
28
|
+
return clonedModel;
|
|
29
|
+
}
|
|
30
|
+
return newModel;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
return oldOptions;
|
|
35
|
+
};
|
|
36
|
+
|
|
18
37
|
/**
|
|
19
38
|
*/
|
|
20
39
|
const modularUIConnector = function (name, resource) {
|
|
@@ -49,7 +68,7 @@ const modularUIConnector = function (name, resource) {
|
|
|
49
68
|
// Provide connected models with a fetchModularUI method to be able
|
|
50
69
|
// to run the loadModularUI action from a handler / callback in the component
|
|
51
70
|
const handleFetch = (href, fetchOptions) => {
|
|
52
|
-
dispatch((0, _ModularUIActions.loadModularUI)(modelKey, href, fetchOptions));
|
|
71
|
+
dispatch((0, _ModularUIActions.loadModularUI)(modelKey, href, patchUpdateModelOption(fetchOptions)));
|
|
53
72
|
};
|
|
54
73
|
|
|
55
74
|
// Check if current model needs a reload
|
|
@@ -58,7 +77,7 @@ const modularUIConnector = function (name, resource) {
|
|
|
58
77
|
(0, _react.useEffect)(() => {
|
|
59
78
|
if (doReload) {
|
|
60
79
|
dispatch((0, _ModularUIActions.loadModularUI)(modelKey, url, {
|
|
61
|
-
...otherOptions,
|
|
80
|
+
...patchUpdateModelOption(otherOptions),
|
|
62
81
|
isReload: true
|
|
63
82
|
}));
|
|
64
83
|
}
|
|
@@ -20,6 +20,7 @@ import type { ComponentType, Node } from "react";
|
|
|
20
20
|
import type { Location } from "react-router";
|
|
21
21
|
import type { ModularUIModel } from "../../models/types";
|
|
22
22
|
import type { ModularUIOptions } from "./types";
|
|
23
|
+
import FormModel from "../../models/form/FormModel";
|
|
23
24
|
|
|
24
25
|
export type InjectedProps = {
|
|
25
26
|
+modelKey: string,
|
|
@@ -33,6 +34,28 @@ export type InjectedProps = {
|
|
|
33
34
|
+data?: ?ModularUIModel,
|
|
34
35
|
};
|
|
35
36
|
|
|
37
|
+
const patchUpdateModelOption = (oldOptions: Object) => {
|
|
38
|
+
if (
|
|
39
|
+
"updateModel" in oldOptions &&
|
|
40
|
+
oldOptions.updateModel instanceof FormModel
|
|
41
|
+
) {
|
|
42
|
+
return {
|
|
43
|
+
...oldOptions,
|
|
44
|
+
updateHandler: (newModel: ModularUIModel): ModularUIModel => {
|
|
45
|
+
if (newModel instanceof FormModel) {
|
|
46
|
+
// $FLowFixMe
|
|
47
|
+
const clonedModel: FormModel = oldOptions.updateModel.clone();
|
|
48
|
+
clonedModel.update(newModel);
|
|
49
|
+
return clonedModel;
|
|
50
|
+
}
|
|
51
|
+
return newModel;
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return oldOptions;
|
|
57
|
+
};
|
|
58
|
+
|
|
36
59
|
/**
|
|
37
60
|
*/
|
|
38
61
|
const modularUIConnector = (
|
|
@@ -69,7 +92,9 @@ const modularUIConnector = (
|
|
|
69
92
|
// Provide connected models with a fetchModularUI method to be able
|
|
70
93
|
// to run the loadModularUI action from a handler / callback in the component
|
|
71
94
|
const handleFetch = (href: string | Href, fetchOptions: Object) => {
|
|
72
|
-
dispatch(
|
|
95
|
+
dispatch(
|
|
96
|
+
loadModularUI(modelKey, href, patchUpdateModelOption(fetchOptions)),
|
|
97
|
+
);
|
|
73
98
|
};
|
|
74
99
|
|
|
75
100
|
// Check if current model needs a reload
|
|
@@ -78,7 +103,10 @@ const modularUIConnector = (
|
|
|
78
103
|
useEffect(() => {
|
|
79
104
|
if (doReload) {
|
|
80
105
|
dispatch(
|
|
81
|
-
loadModularUI(modelKey, url, {
|
|
106
|
+
loadModularUI(modelKey, url, {
|
|
107
|
+
...patchUpdateModelOption(otherOptions),
|
|
108
|
+
isReload: true,
|
|
109
|
+
}),
|
|
82
110
|
);
|
|
83
111
|
}
|
|
84
112
|
}, [dispatch, doReload, url, modelKey]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModularUIConnector.js","names":["_react","require","_reactRedux","_reactRouter","_ModularUIActions","_Href","_interopRequireDefault","_utils","_ModularUIUtils","_useModularUI","_useI18n","_jsxRuntime","modularUIConnector","name","resource","options","arguments","length","undefined","propName","removeOnUnmount","otherOptions","Component","WrappedComponent","props","dispatch","useDispatch","location","useLocation","url","useUrl","displayName","getDisplayName","contextId","modelEntry","useModularUI","modelKey","model","connectKey","handleManualReload","reloadOptions","reloadModel","handleFetch","href","fetchOptions","loadModularUI","reload","state","doReload","useReload","useEffect","isReload","removeModelByKey","locale","useLocale","newProps","status","lastModification","hasModel","Boolean","fetchModularUI","jsx","_default","exports","default"],"sources":["../../../src/redux/_modularui/ModularUIConnector.js"],"sourcesContent":["// @flow\nimport { useEffect } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { useLocation } from \"react-router\";\n\nimport {\n loadModularUI,\n reloadModel,\n removeModelByKey,\n} from \"./ModularUIActions\";\n\nimport Href from \"../../models/href/Href\";\nimport { getDisplayName } from \"../../react/utils\";\n\nimport { useUrl, useReload } from \"./ModularUIUtils\";\nimport { useModularUI } from \"../../hooks/useModularUI\";\nimport { useLocale } from \"../../hooks/useI18n\";\n\nimport type { ComponentType, Node } from \"react\";\nimport type { Location } from \"react-router\";\nimport type { ModularUIModel } from \"../../models/types\";\nimport type { ModularUIOptions } from \"./types\";\n\nexport type InjectedProps = {\n +modelKey: string,\n +location: Location,\n +status: string | null,\n +lastModification: number | null,\n +hasModel: boolean,\n +locale: string,\n +fetchModularUI: (href: string | Href, fetchOptions: Object) => void,\n +reloadModel: (model: ModularUIModel, options: Object) => void,\n +data?: ?ModularUIModel,\n};\n\n/**\n */\nconst modularUIConnector = (\n name: string,\n resource: string | Function,\n options: ModularUIOptions = { propName: \"data\", removeOnUnmount: false },\n): ((Component: ComponentType<any>) => (props: any) => Node) => {\n const {\n propName = \"data\",\n removeOnUnmount = false,\n ...otherOptions\n } = options;\n\n return (Component: ComponentType<any>) => {\n const WrappedComponent = (props: any) => {\n const dispatch = useDispatch();\n const location = useLocation();\n\n const url = useUrl(resource, { location, ...props });\n const displayName = getDisplayName(Component, name, props.contextId);\n\n // Load the model through the useModUI hook\n const modelEntry = useModularUI(displayName, url, otherOptions);\n const modelKey = modelEntry?.model?.connectKey;\n\n // handle manual reload of model\n const handleManualReload = (\n model: ModularUIModel,\n reloadOptions?: Object,\n ) => {\n dispatch(reloadModel(model, reloadOptions));\n };\n\n // Provide connected models with a fetchModularUI method to be able\n // to run the loadModularUI action from a handler / callback in the component\n const handleFetch = (href: string | Href, fetchOptions: Object) => {\n dispatch(loadModularUI(modelKey, href, fetchOptions));\n };\n\n // Check if current model needs a reload\n const reload = location?.state?.reload ?? 0;\n const doReload = useReload(modelEntry, reload);\n useEffect(() => {\n if (doReload) {\n dispatch(\n loadModularUI(modelKey, url, {
|
|
1
|
+
{"version":3,"file":"ModularUIConnector.js","names":["_react","require","_reactRedux","_reactRouter","_ModularUIActions","_Href","_interopRequireDefault","_utils","_ModularUIUtils","_useModularUI","_useI18n","_FormModel","_jsxRuntime","patchUpdateModelOption","oldOptions","updateModel","FormModel","updateHandler","newModel","clonedModel","clone","update","modularUIConnector","name","resource","options","arguments","length","undefined","propName","removeOnUnmount","otherOptions","Component","WrappedComponent","props","dispatch","useDispatch","location","useLocation","url","useUrl","displayName","getDisplayName","contextId","modelEntry","useModularUI","modelKey","model","connectKey","handleManualReload","reloadOptions","reloadModel","handleFetch","href","fetchOptions","loadModularUI","reload","state","doReload","useReload","useEffect","isReload","removeModelByKey","locale","useLocale","newProps","status","lastModification","hasModel","Boolean","fetchModularUI","jsx","_default","exports","default"],"sources":["../../../src/redux/_modularui/ModularUIConnector.js"],"sourcesContent":["// @flow\nimport { useEffect } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { useLocation } from \"react-router\";\n\nimport {\n loadModularUI,\n reloadModel,\n removeModelByKey,\n} from \"./ModularUIActions\";\n\nimport Href from \"../../models/href/Href\";\nimport { getDisplayName } from \"../../react/utils\";\n\nimport { useUrl, useReload } from \"./ModularUIUtils\";\nimport { useModularUI } from \"../../hooks/useModularUI\";\nimport { useLocale } from \"../../hooks/useI18n\";\n\nimport type { ComponentType, Node } from \"react\";\nimport type { Location } from \"react-router\";\nimport type { ModularUIModel } from \"../../models/types\";\nimport type { ModularUIOptions } from \"./types\";\nimport FormModel from \"../../models/form/FormModel\";\n\nexport type InjectedProps = {\n +modelKey: string,\n +location: Location,\n +status: string | null,\n +lastModification: number | null,\n +hasModel: boolean,\n +locale: string,\n +fetchModularUI: (href: string | Href, fetchOptions: Object) => void,\n +reloadModel: (model: ModularUIModel, options: Object) => void,\n +data?: ?ModularUIModel,\n};\n\nconst patchUpdateModelOption = (oldOptions: Object) => {\n if (\n \"updateModel\" in oldOptions &&\n oldOptions.updateModel instanceof FormModel\n ) {\n return {\n ...oldOptions,\n updateHandler: (newModel: ModularUIModel): ModularUIModel => {\n if (newModel instanceof FormModel) {\n // $FLowFixMe\n const clonedModel: FormModel = oldOptions.updateModel.clone();\n clonedModel.update(newModel);\n return clonedModel;\n }\n return newModel;\n },\n };\n }\n\n return oldOptions;\n};\n\n/**\n */\nconst modularUIConnector = (\n name: string,\n resource: string | Function,\n options: ModularUIOptions = { propName: \"data\", removeOnUnmount: false },\n): ((Component: ComponentType<any>) => (props: any) => Node) => {\n const {\n propName = \"data\",\n removeOnUnmount = false,\n ...otherOptions\n } = options;\n\n return (Component: ComponentType<any>) => {\n const WrappedComponent = (props: any) => {\n const dispatch = useDispatch();\n const location = useLocation();\n\n const url = useUrl(resource, { location, ...props });\n const displayName = getDisplayName(Component, name, props.contextId);\n\n // Load the model through the useModUI hook\n const modelEntry = useModularUI(displayName, url, otherOptions);\n const modelKey = modelEntry?.model?.connectKey;\n\n // handle manual reload of model\n const handleManualReload = (\n model: ModularUIModel,\n reloadOptions?: Object,\n ) => {\n dispatch(reloadModel(model, reloadOptions));\n };\n\n // Provide connected models with a fetchModularUI method to be able\n // to run the loadModularUI action from a handler / callback in the component\n const handleFetch = (href: string | Href, fetchOptions: Object) => {\n dispatch(\n loadModularUI(modelKey, href, patchUpdateModelOption(fetchOptions)),\n );\n };\n\n // Check if current model needs a reload\n const reload = location?.state?.reload ?? 0;\n const doReload = useReload(modelEntry, reload);\n useEffect(() => {\n if (doReload) {\n dispatch(\n loadModularUI(modelKey, url, {\n ...patchUpdateModelOption(otherOptions),\n isReload: true,\n }),\n );\n }\n }, [dispatch, doReload, url, modelKey]);\n\n // Remove model when hoc unloads\n useEffect(() => {\n return () => {\n if (removeOnUnmount) {\n dispatch(removeModelByKey(modelKey));\n }\n };\n }, [dispatch, modelKey]);\n\n // Create new properties object to inject modularui properties to own props\n const locale = useLocale();\n const newProps: InjectedProps = {\n modelKey,\n [propName]: modelEntry ? modelEntry.model : null,\n location,\n status: modelEntry ? modelEntry.status : null,\n lastModification: modelEntry ? modelEntry.lastModification : null,\n hasModel: Boolean(modelEntry),\n locale,\n fetchModularUI: handleFetch,\n reloadModel: handleManualReload,\n };\n\n return <Component {...props} {...newProps} />;\n };\n\n WrappedComponent.displayName = `BI.modularui(${getDisplayName(\n WrappedComponent,\n name,\n )}`;\n\n return WrappedComponent;\n };\n};\n\nexport default modularUIConnector;\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -20,6 +20,7 @@ import type { ComponentType, Node } from "react";
|
|
|
20
20
|
import type { Location } from "react-router";
|
|
21
21
|
import type { ModularUIModel } from "../../models/types";
|
|
22
22
|
import type { ModularUIOptions } from "./types";
|
|
23
|
+
import FormModel from "../../models/form/FormModel";
|
|
23
24
|
|
|
24
25
|
export type InjectedProps = {
|
|
25
26
|
+modelKey: string,
|
|
@@ -33,6 +34,28 @@ export type InjectedProps = {
|
|
|
33
34
|
+data?: ?ModularUIModel,
|
|
34
35
|
};
|
|
35
36
|
|
|
37
|
+
const patchUpdateModelOption = (oldOptions: Object) => {
|
|
38
|
+
if (
|
|
39
|
+
"updateModel" in oldOptions &&
|
|
40
|
+
oldOptions.updateModel instanceof FormModel
|
|
41
|
+
) {
|
|
42
|
+
return {
|
|
43
|
+
...oldOptions,
|
|
44
|
+
updateHandler: (newModel: ModularUIModel): ModularUIModel => {
|
|
45
|
+
if (newModel instanceof FormModel) {
|
|
46
|
+
// $FLowFixMe
|
|
47
|
+
const clonedModel: FormModel = oldOptions.updateModel.clone();
|
|
48
|
+
clonedModel.update(newModel);
|
|
49
|
+
return clonedModel;
|
|
50
|
+
}
|
|
51
|
+
return newModel;
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return oldOptions;
|
|
57
|
+
};
|
|
58
|
+
|
|
36
59
|
/**
|
|
37
60
|
*/
|
|
38
61
|
const modularUIConnector = (
|
|
@@ -69,7 +92,9 @@ const modularUIConnector = (
|
|
|
69
92
|
// Provide connected models with a fetchModularUI method to be able
|
|
70
93
|
// to run the loadModularUI action from a handler / callback in the component
|
|
71
94
|
const handleFetch = (href: string | Href, fetchOptions: Object) => {
|
|
72
|
-
dispatch(
|
|
95
|
+
dispatch(
|
|
96
|
+
loadModularUI(modelKey, href, patchUpdateModelOption(fetchOptions)),
|
|
97
|
+
);
|
|
73
98
|
};
|
|
74
99
|
|
|
75
100
|
// Check if current model needs a reload
|
|
@@ -78,7 +103,10 @@ const modularUIConnector = (
|
|
|
78
103
|
useEffect(() => {
|
|
79
104
|
if (doReload) {
|
|
80
105
|
dispatch(
|
|
81
|
-
loadModularUI(modelKey, url, {
|
|
106
|
+
loadModularUI(modelKey, url, {
|
|
107
|
+
...patchUpdateModelOption(otherOptions),
|
|
108
|
+
isReload: true,
|
|
109
|
+
}),
|
|
82
110
|
);
|
|
83
111
|
}
|
|
84
112
|
}, [dispatch, doReload, url, modelKey]);
|