@beinformed/ui 1.65.0 → 1.65.2
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 +17 -0
- package/esm/hooks/useModularUI.js +3 -10
- package/esm/hooks/useModularUI.js.flow +3 -14
- package/esm/hooks/useModularUI.js.map +1 -1
- package/esm/hooks/useModularUIBasic.js +37 -12
- package/esm/hooks/useModularUIBasic.js.flow +47 -10
- package/esm/hooks/useModularUIBasic.js.map +1 -1
- package/esm/hooks/useModularUIKey.js +11 -0
- package/esm/hooks/useModularUIKey.js.flow +14 -0
- package/esm/hooks/useModularUIKey.js.map +1 -0
- package/esm/hooks/usePanel.js +8 -3
- package/esm/hooks/usePanel.js.flow +4 -3
- package/esm/hooks/usePanel.js.map +1 -1
- package/esm/models/filters/FilterCollection.js +8 -10
- package/esm/models/filters/FilterCollection.js.flow +12 -12
- package/esm/models/filters/FilterCollection.js.map +1 -1
- package/esm/redux/actions/SignIn.js +15 -15
- package/esm/redux/actions/SignIn.js.flow +25 -26
- package/esm/redux/actions/SignIn.js.map +1 -1
- package/lib/hooks/useModularUI.js +3 -10
- package/lib/hooks/useModularUI.js.map +1 -1
- package/lib/hooks/useModularUIBasic.js +39 -14
- package/lib/hooks/useModularUIBasic.js.map +1 -1
- package/lib/hooks/useModularUIKey.js +17 -0
- package/lib/hooks/useModularUIKey.js.map +1 -0
- package/lib/hooks/usePanel.js +8 -3
- package/lib/hooks/usePanel.js.map +1 -1
- package/lib/models/filters/FilterCollection.js +8 -10
- package/lib/models/filters/FilterCollection.js.map +1 -1
- package/lib/redux/actions/SignIn.js +15 -15
- package/lib/redux/actions/SignIn.js.map +1 -1
- package/package.json +1 -1
- package/src/hooks/useModularUI.js +3 -14
- package/src/hooks/useModularUIBasic.js +47 -10
- package/src/hooks/useModularUIKey.js +14 -0
- package/src/hooks/usePanel.js +4 -3
- package/src/models/filters/FilterCollection.js +12 -12
- package/src/redux/actions/SignIn.js +25 -26
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignIn.js","names":["_Cache","_interopRequireDefault","require","_Authenticate","_ModularUISelectors","
|
|
1
|
+
{"version":3,"file":"SignIn.js","names":["_Cache","_interopRequireDefault","require","_Authenticate","_ModularUISelectors","_Application","_ProgressIndicator","_RouterActions","_Constants","loginFailed","errorMessage","sendAuthenticationError","exports","type","payload","resetAuthErrors","loginSuccess","changePassword","dispatch","getState","isModal","router","location","state","modal","locationFrom","from","push","CHANGEPASSWORD_PATH","login","username","password","startProgress","response","Authenticate","reloadApplication","Cache","addItem","application","getApplication","userMustChangePassword","finishProgress","error","id"],"sources":["../../../src/redux/actions/SignIn.js"],"sourcesContent":["// @flow\nimport Cache from \"../../utils/browser/Cache\";\nimport Authenticate from \"../../modularui/Authenticate\";\nimport { getApplication } from \"../_modularui/ModularUISelectors\";\n\nimport { reloadApplication } from \"./Application\";\nimport { startProgress, finishProgress } from \"./ProgressIndicator\";\n\nimport { push } from \"../_router/RouterActions\";\nimport { CHANGEPASSWORD_PATH } from \"../../constants/Constants\";\n\nimport type {\n SendAuthenticationErrorAction,\n ResetAuthErrorsAction,\n LoginSuccessAction,\n ThunkAction,\n} from \"../types\";\n\n/**\n * Send login failed action\n */\nexport const loginFailed = (\n errorMessage: string,\n): SendAuthenticationErrorAction => sendAuthenticationError(errorMessage);\n\n/**\n * Send authentication error action\n */\nexport const sendAuthenticationError = (\n errorMessage: string,\n): SendAuthenticationErrorAction => ({\n type: \"AUTHENTICATION_ERROR\",\n payload: errorMessage,\n});\n\n/**\n * Resets any authentication errors\n */\nexport const resetAuthErrors = (): ResetAuthErrorsAction => ({\n type: \"AUTHENTICATION_RESET_ERRORS\",\n});\n\n/**\n * Send login success action\n */\nexport const loginSuccess = (): LoginSuccessAction => ({\n type: \"AUTHENTICATION_SUCCESS\",\n});\n\n/**\n * Send change password action\n */\nexport const changePassword = (): ThunkAction => (dispatch, getState) => {\n dispatch({\n type: \"CHANGE_PASSWORD\",\n });\n\n const isModal = getState().router.location?.state?.modal;\n const locationFrom = getState().router.location?.state?.from;\n return dispatch(\n push(CHANGEPASSWORD_PATH, {\n from: locationFrom ? locationFrom : getState().router.location,\n modal: isModal,\n }),\n );\n};\n\n/**\n */\nexport const login =\n (username: string, password: string): ThunkAction =>\n async (dispatch, getState) => {\n dispatch(startProgress());\n\n try {\n const response = await new Authenticate().login(username, password);\n\n await dispatch(reloadApplication());\n\n Cache.addItem(\"auth\", true);\n const application = getApplication(getState());\n\n if (application?.userMustChangePassword) {\n dispatch(changePassword());\n } else {\n dispatch(loginSuccess());\n }\n\n dispatch(finishProgress());\n return response;\n } catch (error) {\n if (error.id === \"Error.ChangePasswordRequired\") {\n await dispatch(reloadApplication());\n Cache.addItem(\"auth\", true);\n dispatch(changePassword());\n } else {\n dispatch(loginFailed(error.id));\n }\n dispatch(finishProgress());\n return error;\n }\n };\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -10,24 +10,13 @@ import {
|
|
|
10
10
|
} from "../redux/_modularui/ModularUIActions";
|
|
11
11
|
|
|
12
12
|
import useDeepCompareEffect from "./useDeepCompareEffect";
|
|
13
|
+
import { useModularUIKey } from "./useModularUIKey";
|
|
13
14
|
|
|
14
|
-
import { useLocale } from "./useI18n";
|
|
15
15
|
import Href from "../models/href/Href";
|
|
16
|
-
|
|
17
16
|
import type { RequestModularUIOptions } from "../utils";
|
|
18
17
|
|
|
19
18
|
/**
|
|
20
|
-
|
|
21
|
-
const useKeyForHook = (modelKey: string, url: string) => {
|
|
22
|
-
const locale = useLocale();
|
|
23
|
-
return useMemo(
|
|
24
|
-
() => `${modelKey}(${url.split("?")[0]})(${locale})`,
|
|
25
|
-
[modelKey, url, locale],
|
|
26
|
-
);
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Use redux action and selector to retrieve the correct modular ui service model
|
|
19
|
+
* Core hook to retrieve information for a Be Informed modular ui resource
|
|
31
20
|
*/
|
|
32
21
|
export const useModularUI = (
|
|
33
22
|
modelKey: string,
|
|
@@ -39,7 +28,7 @@ export const useModularUI = (
|
|
|
39
28
|
): any => {
|
|
40
29
|
const dispatch = useDispatch();
|
|
41
30
|
const href = useMemo(() => url?.toString() || "", [url]);
|
|
42
|
-
const key =
|
|
31
|
+
const key = useModularUIKey(modelKey, href);
|
|
43
32
|
|
|
44
33
|
const modelSelector = useMemo(() => (state) => state.modularui[key], [key]);
|
|
45
34
|
const model = useSelector(modelSelector);
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
// @flow
|
|
2
|
-
import type { ModularUIModel, Href } from "../models";
|
|
3
2
|
import { useLocation } from "react-router";
|
|
3
|
+
import { useSelector } from "react-redux";
|
|
4
4
|
import { useMemo } from "react";
|
|
5
5
|
import { useModularUI } from "./useModularUI";
|
|
6
6
|
|
|
7
|
+
import { MODULARUI_STATUS } from "../constants";
|
|
8
|
+
import { useModularUIKey } from "./useModularUIKey";
|
|
9
|
+
|
|
10
|
+
import type { ModularUIModel, Href } from "../models";
|
|
7
11
|
export type HookOptions = {
|
|
12
|
+
key?: string,
|
|
8
13
|
origin?: string,
|
|
9
14
|
contextPath?: string,
|
|
15
|
+
removeOnUnmount?: boolean,
|
|
10
16
|
};
|
|
11
17
|
|
|
12
18
|
export type UseModularUIBasicOptions<T: ModularUIModel> = {
|
|
@@ -16,13 +22,16 @@ export type UseModularUIBasicOptions<T: ModularUIModel> = {
|
|
|
16
22
|
origin?: string,
|
|
17
23
|
contextPath?: string,
|
|
18
24
|
cache?: boolean,
|
|
25
|
+
key?: string,
|
|
26
|
+
isReload?: boolean,
|
|
27
|
+
removeOnUnmount?: boolean,
|
|
19
28
|
};
|
|
20
29
|
|
|
21
30
|
// Helper to create useModularUI options
|
|
22
31
|
const createUseModularUIOptions = <T: ModularUIModel>(
|
|
23
32
|
options: UseModularUIBasicOptions<T>,
|
|
24
33
|
href: string,
|
|
25
|
-
|
|
34
|
+
mustReload: boolean,
|
|
26
35
|
): Object => {
|
|
27
36
|
const baseOptions = {
|
|
28
37
|
targetModel: undefined,
|
|
@@ -31,6 +40,7 @@ const createUseModularUIOptions = <T: ModularUIModel>(
|
|
|
31
40
|
origin: undefined,
|
|
32
41
|
contextPath: undefined,
|
|
33
42
|
cache: false,
|
|
43
|
+
removeOnUnmount: false,
|
|
34
44
|
};
|
|
35
45
|
|
|
36
46
|
// Handle targetModel and forceTargetModel
|
|
@@ -44,11 +54,14 @@ const createUseModularUIOptions = <T: ModularUIModel>(
|
|
|
44
54
|
baseOptions.cache = options.cache;
|
|
45
55
|
}
|
|
46
56
|
|
|
47
|
-
|
|
48
|
-
if (location.state?.reload && location.pathname.startsWith(href)) {
|
|
57
|
+
if (mustReload) {
|
|
49
58
|
baseOptions.isReload = true;
|
|
50
59
|
}
|
|
51
60
|
|
|
61
|
+
if (options.removeOnUnmount) {
|
|
62
|
+
baseOptions.removeOnUnmount = true;
|
|
63
|
+
}
|
|
64
|
+
|
|
52
65
|
// Handle origin and contextPath options
|
|
53
66
|
baseOptions.origin = options.origin ?? baseOptions.origin;
|
|
54
67
|
baseOptions.contextPath = options.contextPath ?? baseOptions.contextPath;
|
|
@@ -72,7 +85,7 @@ const validateModel = (model: any, expectedModels: Array<string>) => {
|
|
|
72
85
|
* useModularUIBasic Hook
|
|
73
86
|
*/
|
|
74
87
|
export const useModularUIBasic = <T: ModularUIModel>(
|
|
75
|
-
|
|
88
|
+
defaultKey: string,
|
|
76
89
|
href: string | Href,
|
|
77
90
|
options: UseModularUIBasicOptions<T> = {
|
|
78
91
|
expectedModels: [],
|
|
@@ -80,16 +93,19 @@ export const useModularUIBasic = <T: ModularUIModel>(
|
|
|
80
93
|
forceTargetModel: false,
|
|
81
94
|
origin: undefined,
|
|
82
95
|
contextPath: undefined,
|
|
96
|
+
key: undefined,
|
|
83
97
|
},
|
|
84
98
|
): T | null => {
|
|
85
|
-
const location = useLocation();
|
|
86
99
|
const memoizedHref = useMemo(() => href.toString(), [href]);
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
100
|
+
const key = options.key ?? defaultKey;
|
|
101
|
+
|
|
102
|
+
const mustReload = useReload(key, memoizedHref);
|
|
103
|
+
const modularUIOptions = useMemo(
|
|
104
|
+
() => createUseModularUIOptions(options, memoizedHref, mustReload),
|
|
105
|
+
[options, memoizedHref, mustReload],
|
|
90
106
|
);
|
|
91
107
|
|
|
92
|
-
const modularUI = useModularUI(key, href,
|
|
108
|
+
const modularUI = useModularUI(key, href, modularUIOptions);
|
|
93
109
|
const expectedModels = useMemo(
|
|
94
110
|
() => options.expectedModels ?? [],
|
|
95
111
|
[options.expectedModels],
|
|
@@ -103,3 +119,24 @@ export const useModularUIBasic = <T: ModularUIModel>(
|
|
|
103
119
|
return null;
|
|
104
120
|
}, [expectedModels, modularUI]);
|
|
105
121
|
};
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Check if the model corresponding to a modular ui service should be reloaded
|
|
125
|
+
*/
|
|
126
|
+
export const useReload = (modelKey: string, url: string): boolean => {
|
|
127
|
+
const location = useLocation();
|
|
128
|
+
const key = useModularUIKey(modelKey, url);
|
|
129
|
+
const modelEntry = useSelector((state) => state.modularui[key]);
|
|
130
|
+
|
|
131
|
+
if (modelEntry) {
|
|
132
|
+
const reload = location.state?.reload || 0;
|
|
133
|
+
if (reload > 0) {
|
|
134
|
+
const isFullyLoaded = modelEntry?.status === MODULARUI_STATUS.FINISHED;
|
|
135
|
+
const lastModification = modelEntry?.lastModification ?? 0;
|
|
136
|
+
if (isFullyLoaded && lastModification < reload) {
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return false;
|
|
142
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// @flow
|
|
2
|
+
import { useLocale } from "./useI18n";
|
|
3
|
+
import { useMemo } from "react";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Generates the key that is used in the modular ui reducer of redux
|
|
7
|
+
*/
|
|
8
|
+
export const useModularUIKey = (modelKey: string, url: string): string => {
|
|
9
|
+
const locale = useLocale();
|
|
10
|
+
return useMemo(
|
|
11
|
+
() => `${modelKey}(${url.split("?")[0]})(${locale})`,
|
|
12
|
+
[modelKey, url, locale],
|
|
13
|
+
);
|
|
14
|
+
};
|
package/src/hooks/usePanel.js
CHANGED
|
@@ -65,11 +65,12 @@ export const usePanel = (
|
|
|
65
65
|
href?: string | Href,
|
|
66
66
|
options?: HookOptions & { fromRoute?: boolean },
|
|
67
67
|
): ListModel | GroupingPanelModel | DetailModel | null => {
|
|
68
|
-
const
|
|
68
|
+
const { fromRoute, ...hookOptions } = options || { fromRoute: false };
|
|
69
|
+
|
|
70
|
+
const url = useUrl(href, fromRoute || false);
|
|
69
71
|
const basicOptions = {
|
|
70
72
|
expectedModels: ["List", "GroupingPanel", "Detail"],
|
|
71
|
-
|
|
72
|
-
contextPath: options?.contextPath,
|
|
73
|
+
...(hookOptions: HookOptions),
|
|
73
74
|
};
|
|
74
75
|
|
|
75
76
|
return useModularUIBasic("panel", url, basicOptions);
|
|
@@ -194,17 +194,17 @@ export default class FilterCollection extends BaseCollection<FilterType> {
|
|
|
194
194
|
/**
|
|
195
195
|
*/
|
|
196
196
|
get formdata(): { [string]: any } | null {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
)
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
197
|
+
const bodyFields = this.filter(
|
|
198
|
+
(f) =>
|
|
199
|
+
f.parameterType === PARAMETER_TYPES.BODY && f.hasValue() && f.formdata,
|
|
200
|
+
);
|
|
201
|
+
|
|
202
|
+
if (bodyFields.length === 0) {
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return bodyFields.reduce((data, f) => {
|
|
207
|
+
return Object.assign(data, f.formdata);
|
|
208
|
+
}, {});
|
|
209
209
|
}
|
|
210
210
|
}
|
|
@@ -3,7 +3,6 @@ import Cache from "../../utils/browser/Cache";
|
|
|
3
3
|
import Authenticate from "../../modularui/Authenticate";
|
|
4
4
|
import { getApplication } from "../_modularui/ModularUISelectors";
|
|
5
5
|
|
|
6
|
-
import { handleError } from "./Error";
|
|
7
6
|
import { reloadApplication } from "./Application";
|
|
8
7
|
import { startProgress, finishProgress } from "./ProgressIndicator";
|
|
9
8
|
|
|
@@ -70,34 +69,34 @@ export const changePassword = (): ThunkAction => (dispatch, getState) => {
|
|
|
70
69
|
*/
|
|
71
70
|
export const login =
|
|
72
71
|
(username: string, password: string): ThunkAction =>
|
|
73
|
-
(dispatch, getState) => {
|
|
72
|
+
async (dispatch, getState) => {
|
|
74
73
|
dispatch(startProgress());
|
|
75
74
|
|
|
76
|
-
|
|
77
|
-
.login(username, password)
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
Cache.addItem("auth", true);
|
|
81
|
-
const application = getApplication(getState());
|
|
82
|
-
if (application?.userMustChangePassword) {
|
|
83
|
-
dispatch(changePassword());
|
|
84
|
-
} else {
|
|
85
|
-
dispatch(loginSuccess());
|
|
86
|
-
}
|
|
87
|
-
return dispatch(finishProgress());
|
|
88
|
-
})
|
|
89
|
-
.catch((error) => {
|
|
90
|
-
if (error.id === "Error.ChangePasswordRequired") {
|
|
91
|
-
const dispatchedReloadApplication = dispatch(reloadApplication());
|
|
75
|
+
try {
|
|
76
|
+
const response = await new Authenticate().login(username, password);
|
|
77
|
+
|
|
78
|
+
await dispatch(reloadApplication());
|
|
92
79
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
dispatch(changePassword());
|
|
96
|
-
return dispatch(finishProgress());
|
|
97
|
-
});
|
|
98
|
-
}
|
|
80
|
+
Cache.addItem("auth", true);
|
|
81
|
+
const application = getApplication(getState());
|
|
99
82
|
|
|
83
|
+
if (application?.userMustChangePassword) {
|
|
84
|
+
dispatch(changePassword());
|
|
85
|
+
} else {
|
|
86
|
+
dispatch(loginSuccess());
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
dispatch(finishProgress());
|
|
90
|
+
return response;
|
|
91
|
+
} catch (error) {
|
|
92
|
+
if (error.id === "Error.ChangePasswordRequired") {
|
|
93
|
+
await dispatch(reloadApplication());
|
|
94
|
+
Cache.addItem("auth", true);
|
|
95
|
+
dispatch(changePassword());
|
|
96
|
+
} else {
|
|
100
97
|
dispatch(loginFailed(error.id));
|
|
101
|
-
|
|
102
|
-
|
|
98
|
+
}
|
|
99
|
+
dispatch(finishProgress());
|
|
100
|
+
return error;
|
|
101
|
+
}
|
|
103
102
|
};
|