@j2inn/fin5-ui-utils 8.1.1-beta.4 → 8.1.1-beta.6
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/README.md +5 -5
- package/dist/fantomProps/createFin5Props/index.d.ts +12 -12
- package/dist/fantomProps/createFin5Props/index.js +146 -146
- package/dist/fantomProps/createFin5Props/runCreateFin5Props.d.ts +2 -2
- package/dist/fantomProps/createFin5Props/runCreateFin5Props.js +20 -20
- package/dist/fantomProps/fantomPropsToObject.d.ts +8 -8
- package/dist/fantomProps/fantomPropsToObject.js +183 -183
- package/dist/fantomProps/generateJsonFromFantomPropsFile.d.ts +4 -4
- package/dist/fantomProps/generateJsonFromFantomPropsFile.js +41 -41
- package/dist/fantomProps/localePropsToJson.d.ts +1 -1
- package/dist/fantomProps/localePropsToJson.js +50 -50
- package/dist/fantomProps/readFantomPropsFile.d.ts +5 -5
- package/dist/fantomProps/readFantomPropsFile.js +65 -65
- package/dist/fin5Top/fin5FileUpload.d.ts +24 -24
- package/dist/fin5Top/fin5FileUpload.js +51 -51
- package/dist/fin5Top/fin5Top.d.ts +165 -124
- package/dist/fin5Top/fin5Top.js +61 -53
- package/dist/fin5Top/fin5Top.js.map +1 -1
- package/dist/fin5Top/finEdge2Cloud.d.ts +6 -6
- package/dist/fin5Top/finEdge2Cloud.js +15 -15
- package/dist/fin5Top/getFin5BinUrl.d.ts +2 -2
- package/dist/fin5Top/getFin5BinUrl.js +9 -9
- package/dist/fin5Top/openFin5Alarm.d.ts +22 -22
- package/dist/fin5Top/openFin5Alarm.js +23 -23
- package/dist/fin5Top/openFin5Historian.d.ts +3 -3
- package/dist/fin5Top/openFin5Historian.js +19 -19
- package/dist/fin5Top/useFin5AppURLHashParameter.d.ts +18 -18
- package/dist/fin5Top/useFin5AppURLHashParameter.js +133 -133
- package/dist/index.d.ts +35 -35
- package/dist/index.js +69 -69
- package/dist/jobs/jobUtils.d.ts +14 -14
- package/dist/jobs/jobUtils.js +15 -15
- package/dist/react/app/Fin5AppContainer.d.ts +36 -36
- package/dist/react/app/Fin5AppContainer.js +145 -168
- package/dist/react/app/Fin5AppContainer.js.map +1 -1
- package/dist/react/app/Fin5AppRootStore.d.ts +40 -42
- package/dist/react/app/Fin5AppRootStore.js +90 -114
- package/dist/react/app/Fin5AppRootStore.js.map +1 -1
- package/dist/react/components/ErrorBoundary.d.ts +57 -57
- package/dist/react/components/ErrorBoundary.js +150 -150
- package/dist/react/components/ErrorDisplayer.d.ts +19 -19
- package/dist/react/components/ErrorDisplayer.js +36 -36
- package/dist/react/components/Loader.d.ts +9 -9
- package/dist/react/components/Loader.js +17 -17
- package/dist/react/components/LoadingSpinner.d.ts +2 -2
- package/dist/react/components/LoadingSpinner.js +27 -27
- package/dist/react/components/RecordImage.d.ts +20 -20
- package/dist/react/components/RecordImage.js +51 -51
- package/dist/react/components/charts/QRCode.d.ts +25 -25
- package/dist/react/components/charts/QRCode.js +82 -82
- package/dist/react/components/charts/line-bar/Chart.d.ts +166 -166
- package/dist/react/components/charts/line-bar/Chart.js +442 -442
- package/dist/react/components/charts/line-bar/HGridChart.d.ts +58 -58
- package/dist/react/components/charts/line-bar/HGridChart.js +285 -285
- package/dist/react/components/charts/pie/PieChart.d.ts +94 -94
- package/dist/react/components/charts/pie/PieChart.js +204 -204
- package/dist/react/components/charts/pie/SimplePieChart.d.ts +21 -21
- package/dist/react/components/charts/pie/SimplePieChart.js +55 -55
- package/dist/react/components/graphics/GraphicViewer.d.ts +10 -10
- package/dist/react/components/graphics/GraphicViewer.js +29 -29
- package/dist/react/components/graphics/GraphicsTabViewer.d.ts +17 -17
- package/dist/react/components/graphics/GraphicsTabViewer.js +90 -90
- package/dist/react/components/makeCustomElement.d.ts +16 -16
- package/dist/react/components/makeCustomElement.js +150 -150
- package/dist/react/components/navigation/BasicLayout.d.ts +41 -41
- package/dist/react/components/navigation/BasicLayout.js +155 -155
- package/dist/react/components/navigation/HeaderSiderLayout.d.ts +13 -13
- package/dist/react/components/navigation/HeaderSiderLayout.js +110 -110
- package/dist/react/components/navigation/MenuPage.d.ts +37 -37
- package/dist/react/components/navigation/MenuPage.js +36 -36
- package/dist/react/components/navigation/MenuTrigger.d.ts +9 -9
- package/dist/react/components/navigation/MenuTrigger.js +33 -33
- package/dist/react/components/navigation/ReactRouterHeaderSiderLayout.d.ts +11 -11
- package/dist/react/components/navigation/ReactRouterHeaderSiderLayout.js +25 -25
- package/dist/react/components/navigation/ReactRouterLayout.d.ts +46 -46
- package/dist/react/components/navigation/ReactRouterLayout.js +132 -132
- package/dist/react/components/navigation/customRouting/Router.d.ts +12 -12
- package/dist/react/components/navigation/customRouting/Router.js +45 -45
- package/dist/react/components/navigation/customRouting/RouterLayout.d.ts +11 -11
- package/dist/react/components/navigation/customRouting/RouterLayout.js +61 -61
- package/dist/react/components/resolvable/configurationForm/ConfigurationForm.d.ts +27 -27
- package/dist/react/components/resolvable/configurationForm/ConfigurationForm.js +95 -95
- package/dist/react/components/resolvable/configurationForm/ConfigurationFormEntry.d.ts +16 -16
- package/dist/react/components/resolvable/configurationForm/ConfigurationFormEntry.js +88 -88
- package/dist/react/components/resolvable/configurationForm/getSectionDefault.d.ts +16 -16
- package/dist/react/components/resolvable/configurationForm/getSectionDefault.js +99 -99
- package/dist/react/hooks/useFin5BinUrl.d.ts +6 -6
- package/dist/react/hooks/useFin5BinUrl.js +15 -15
- package/dist/react/hooks/useFin5ColorScheme.d.ts +2 -2
- package/dist/react/hooks/useFin5ColorScheme.js +56 -56
- package/dist/react/hooks/useScreenSize.d.ts +7 -7
- package/dist/react/hooks/useScreenSize.js +31 -31
- package/dist_es/fantomProps/createFin5Props/index.d.ts +12 -12
- package/dist_es/fantomProps/createFin5Props/index.js +140 -140
- package/dist_es/fantomProps/createFin5Props/runCreateFin5Props.d.ts +2 -2
- package/dist_es/fantomProps/createFin5Props/runCreateFin5Props.js +15 -15
- package/dist_es/fantomProps/fantomPropsToObject.d.ts +8 -8
- package/dist_es/fantomProps/fantomPropsToObject.js +178 -178
- package/dist_es/fantomProps/generateJsonFromFantomPropsFile.d.ts +4 -4
- package/dist_es/fantomProps/generateJsonFromFantomPropsFile.js +12 -12
- package/dist_es/fantomProps/localePropsToJson.d.ts +1 -1
- package/dist_es/fantomProps/localePropsToJson.js +21 -21
- package/dist_es/fantomProps/readFantomPropsFile.d.ts +5 -5
- package/dist_es/fantomProps/readFantomPropsFile.js +39 -39
- package/dist_es/fin5Top/fin5FileUpload.d.ts +24 -24
- package/dist_es/fin5Top/fin5FileUpload.js +47 -47
- package/dist_es/fin5Top/fin5Top.d.ts +165 -124
- package/dist_es/fin5Top/fin5Top.js +57 -49
- package/dist_es/fin5Top/fin5Top.js.map +1 -1
- package/dist_es/fin5Top/finEdge2Cloud.d.ts +6 -6
- package/dist_es/fin5Top/finEdge2Cloud.js +11 -11
- package/dist_es/fin5Top/getFin5BinUrl.d.ts +2 -2
- package/dist_es/fin5Top/getFin5BinUrl.js +5 -5
- package/dist_es/fin5Top/openFin5Alarm.d.ts +22 -22
- package/dist_es/fin5Top/openFin5Alarm.js +19 -19
- package/dist_es/fin5Top/openFin5Historian.d.ts +3 -3
- package/dist_es/fin5Top/openFin5Historian.js +15 -15
- package/dist_es/fin5Top/useFin5AppURLHashParameter.d.ts +18 -18
- package/dist_es/fin5Top/useFin5AppURLHashParameter.js +124 -124
- package/dist_es/index.d.ts +35 -35
- package/dist_es/index.js +53 -53
- package/dist_es/jobs/jobUtils.d.ts +14 -14
- package/dist_es/jobs/jobUtils.js +9 -9
- package/dist_es/react/app/Fin5AppContainer.d.ts +36 -36
- package/dist_es/react/app/Fin5AppContainer.js +116 -139
- package/dist_es/react/app/Fin5AppContainer.js.map +1 -1
- package/dist_es/react/app/Fin5AppContainer.jsx +82 -0
- package/dist_es/react/app/Fin5AppContainer.jsx.map +1 -0
- package/dist_es/react/app/Fin5AppRootStore.d.ts +40 -42
- package/dist_es/react/app/Fin5AppRootStore.js +86 -110
- package/dist_es/react/app/Fin5AppRootStore.js.map +1 -1
- package/dist_es/react/components/ErrorBoundary.d.ts +57 -57
- package/dist_es/react/components/ErrorBoundary.js +123 -123
- package/dist_es/react/components/ErrorBoundary.jsx +150 -0
- package/dist_es/react/components/ErrorBoundary.jsx.map +1 -0
- package/dist_es/react/components/ErrorDisplayer.d.ts +19 -19
- package/dist_es/react/components/ErrorDisplayer.js +28 -28
- package/dist_es/react/components/ErrorDisplayer.jsx +36 -0
- package/dist_es/react/components/ErrorDisplayer.jsx.map +1 -0
- package/dist_es/react/components/Loader.d.ts +9 -9
- package/dist_es/react/components/Loader.js +12 -12
- package/dist_es/react/components/Loader.jsx +13 -0
- package/dist_es/react/components/Loader.jsx.map +1 -0
- package/dist_es/react/components/LoadingSpinner.d.ts +2 -2
- package/dist_es/react/components/LoadingSpinner.js +20 -20
- package/dist_es/react/components/LoadingSpinner.jsx +22 -0
- package/dist_es/react/components/LoadingSpinner.jsx.map +1 -0
- package/dist_es/react/components/RecordImage.d.ts +20 -20
- package/dist_es/react/components/RecordImage.js +24 -24
- package/dist_es/react/components/charts/QRCode.d.ts +25 -25
- package/dist_es/react/components/charts/QRCode.js +52 -52
- package/dist_es/react/components/charts/line-bar/Chart.d.ts +166 -166
- package/dist_es/react/components/charts/line-bar/Chart.js +415 -415
- package/dist_es/react/components/charts/line-bar/HGridChart.d.ts +58 -58
- package/dist_es/react/components/charts/line-bar/HGridChart.js +250 -250
- package/dist_es/react/components/charts/line-bar/ZincGridChart.d.ts +12 -0
- package/dist_es/react/components/charts/line-bar/ZincGridChart.js +17 -0
- package/dist_es/react/components/charts/line-bar/ZincGridChart.js.map +1 -0
- package/dist_es/react/components/charts/pie/PieChart.d.ts +94 -94
- package/dist_es/react/components/charts/pie/PieChart.js +177 -177
- package/dist_es/react/components/charts/pie/SimplePieChart.d.ts +21 -21
- package/dist_es/react/components/charts/pie/SimplePieChart.js +25 -25
- package/dist_es/react/components/graphics/GraphicViewer.d.ts +10 -10
- package/dist_es/react/components/graphics/GraphicViewer.js +22 -22
- package/dist_es/react/components/graphics/GraphicViewer.jsx +23 -0
- package/dist_es/react/components/graphics/GraphicViewer.jsx.map +1 -0
- package/dist_es/react/components/graphics/GraphicsTabViewer.d.ts +17 -17
- package/dist_es/react/components/graphics/GraphicsTabViewer.js +60 -60
- package/dist_es/react/components/graphics/GraphicsTabViewer.jsx +63 -0
- package/dist_es/react/components/graphics/GraphicsTabViewer.jsx.map +1 -0
- package/dist_es/react/components/makeCustomElement.d.ts +16 -16
- package/dist_es/react/components/makeCustomElement.js +142 -142
- package/dist_es/react/components/navigation/BasicLayout.d.ts +41 -41
- package/dist_es/react/components/navigation/BasicLayout.js +124 -124
- package/dist_es/react/components/navigation/BasicLayout.jsx +133 -0
- package/dist_es/react/components/navigation/BasicLayout.jsx.map +1 -0
- package/dist_es/react/components/navigation/HeaderSiderLayout.d.ts +13 -13
- package/dist_es/react/components/navigation/HeaderSiderLayout.js +80 -80
- package/dist_es/react/components/navigation/MenuPage.d.ts +37 -37
- package/dist_es/react/components/navigation/MenuPage.js +30 -30
- package/dist_es/react/components/navigation/MenuPage.jsx +31 -0
- package/dist_es/react/components/navigation/MenuPage.jsx.map +1 -0
- package/dist_es/react/components/navigation/MenuTrigger.d.ts +9 -9
- package/dist_es/react/components/navigation/MenuTrigger.js +28 -28
- package/dist_es/react/components/navigation/ReactRouterHeaderSiderLayout.d.ts +11 -11
- package/dist_es/react/components/navigation/ReactRouterHeaderSiderLayout.js +18 -18
- package/dist_es/react/components/navigation/ReactRouterLayout.d.ts +46 -46
- package/dist_es/react/components/navigation/ReactRouterLayout.js +99 -99
- package/dist_es/react/components/navigation/Router.d.ts +12 -0
- package/dist_es/react/components/navigation/Router.js +19 -0
- package/dist_es/react/components/navigation/Router.js.map +1 -0
- package/dist_es/react/components/navigation/Router.jsx +19 -0
- package/dist_es/react/components/navigation/Router.jsx.map +1 -0
- package/dist_es/react/components/navigation/customRouting/Router.d.ts +12 -12
- package/dist_es/react/components/navigation/customRouting/Router.js +18 -18
- package/dist_es/react/components/navigation/customRouting/RouterLayout.d.ts +11 -11
- package/dist_es/react/components/navigation/customRouting/RouterLayout.js +34 -34
- package/dist_es/react/components/navigation/react-router/BasicLayout.d.ts +23 -0
- package/dist_es/react/components/navigation/react-router/BasicLayout.js +82 -0
- package/dist_es/react/components/navigation/react-router/BasicLayout.js.map +1 -0
- package/dist_es/react/components/navigation/react-router/ReactRouterBasicLayout.d.ts +24 -0
- package/dist_es/react/components/navigation/react-router/ReactRouterBasicLayout.js +82 -0
- package/dist_es/react/components/navigation/react-router/ReactRouterBasicLayout.js.map +1 -0
- package/dist_es/react/components/resolvable/configurationForm/ConfigurationForm.d.ts +27 -27
- package/dist_es/react/components/resolvable/configurationForm/ConfigurationForm.js +64 -64
- package/dist_es/react/components/resolvable/configurationForm/ConfigurationFormEntry.d.ts +16 -16
- package/dist_es/react/components/resolvable/configurationForm/ConfigurationFormEntry.js +58 -58
- package/dist_es/react/components/resolvable/configurationForm/getSectionDefault.d.ts +16 -16
- package/dist_es/react/components/resolvable/configurationForm/getSectionDefault.js +94 -94
- package/dist_es/react/hooks/useFin5BinUrl.d.ts +6 -6
- package/dist_es/react/hooks/useFin5BinUrl.js +11 -11
- package/dist_es/react/hooks/useFin5ColorScheme.d.ts +2 -2
- package/dist_es/react/hooks/useFin5ColorScheme.js +52 -52
- package/dist_es/react/hooks/useScreenSize.d.ts +7 -7
- package/dist_es/react/hooks/useScreenSize.js +27 -27
- package/package.json +1 -1
|
@@ -1,111 +1,87 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2022, J2 Innovations. All Rights Reserved
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
this.
|
|
36
|
-
},
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
return
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return apps?.includes(appId) ?? false;
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
return true;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return false;
|
|
94
|
-
};
|
|
95
|
-
hasSidebar() {
|
|
96
|
-
return false;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
__decorate([
|
|
100
|
-
observable
|
|
101
|
-
], Fin5AppRootStore.prototype, "target", void 0);
|
|
102
|
-
__decorate([
|
|
103
|
-
observable
|
|
104
|
-
], Fin5AppRootStore.prototype, "targetSidebar", void 0);
|
|
105
|
-
__decorate([
|
|
106
|
-
action
|
|
107
|
-
], Fin5AppRootStore.prototype, "setTarget", null);
|
|
108
|
-
__decorate([
|
|
109
|
-
action
|
|
110
|
-
], Fin5AppRootStore.prototype, "setTargetSidebar", null);
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2022, J2 Innovations. All Rights Reserved
|
|
3
|
+
*/
|
|
4
|
+
import { makeAutoObservable, observable } from 'mobx';
|
|
5
|
+
/**
|
|
6
|
+
* An application root store for use with FIN5.
|
|
7
|
+
*/
|
|
8
|
+
export class Fin5AppRootStore {
|
|
9
|
+
project = '';
|
|
10
|
+
sidebarOpen = false;
|
|
11
|
+
locale = '';
|
|
12
|
+
allLocales = [];
|
|
13
|
+
target = '';
|
|
14
|
+
targetSidebar = '';
|
|
15
|
+
currentUser;
|
|
16
|
+
get app() {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
get sidebar() {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
apps = [];
|
|
23
|
+
history = {
|
|
24
|
+
state: {},
|
|
25
|
+
pushState: (state) => {
|
|
26
|
+
this.history.state = state;
|
|
27
|
+
},
|
|
28
|
+
replaceState: (state) => {
|
|
29
|
+
this.history.state = state;
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
historySidebar = {
|
|
33
|
+
state: {},
|
|
34
|
+
pushState: (state) => {
|
|
35
|
+
this.historySidebar.state = state;
|
|
36
|
+
},
|
|
37
|
+
replaceState: (state) => {
|
|
38
|
+
this.historySidebar.state = state;
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
constructor() {
|
|
42
|
+
makeAutoObservable(this, {
|
|
43
|
+
currentUser: observable.ref,
|
|
44
|
+
apps: observable.ref,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
openAppInNewWindow() { }
|
|
48
|
+
open(appId, state) {
|
|
49
|
+
if (this.hasAppAccess(appId)) {
|
|
50
|
+
if (state) {
|
|
51
|
+
this.history.pushState(state);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
openSidebar() { }
|
|
56
|
+
postAppMessage() { }
|
|
57
|
+
registerSidebars() { }
|
|
58
|
+
unregisterSidebars() { }
|
|
59
|
+
registerQuicklinks() { }
|
|
60
|
+
unregisterQuicklinks() { }
|
|
61
|
+
hasAppAccess = (appId) => {
|
|
62
|
+
// For FIN5, an operator only has readonly app level access.
|
|
63
|
+
const user = this.currentUser;
|
|
64
|
+
if (user) {
|
|
65
|
+
if (!user.has('userRole')) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
if (user.get('userRole')?.value === 'su') {
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
// if no appAccess is present, then all apps are granted
|
|
72
|
+
if (user.has('appAccess')) {
|
|
73
|
+
const appAccess = user.get('appAccess')?.value;
|
|
74
|
+
const apps = appAccess?.split(',');
|
|
75
|
+
return apps?.includes(appId) ?? false;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return false;
|
|
82
|
+
};
|
|
83
|
+
hasSidebar() {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
111
87
|
//# sourceMappingURL=Fin5AppRootStore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fin5AppRootStore.js","sourceRoot":"","sources":["../../../src/react/app/Fin5AppRootStore.ts"],"names":[],"mappings":"AAAA;;GAEG
|
|
1
|
+
{"version":3,"file":"Fin5AppRootStore.js","sourceRoot":"","sources":["../../../src/react/app/Fin5AppRootStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAErD;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAC5B,OAAO,GAAG,EAAE,CAAA;IACZ,WAAW,GAAG,KAAK,CAAA;IACnB,MAAM,GAAG,EAAE,CAAA;IACX,UAAU,GAAa,EAAE,CAAA;IACzB,MAAM,GAAG,EAAE,CAAA;IACX,aAAa,GAAG,EAAE,CAAA;IAClB,WAAW,CAAmB;IAC9B,IAAI,GAAG;QAGN,OAAO,SAAS,CAAA;IACjB,CAAC;IACD,IAAI,OAAO;QAGV,OAAO,SAAS,CAAA;IACjB,CAAC;IACQ,IAAI,GAAU,EAAE,CAAA;IAChB,OAAO,GAAkB;QACjC,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,CAAC,KAA8B,EAAQ,EAAE;YACnD,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAA;QAC3B,CAAC;QACD,YAAY,EAAE,CAAC,KAA8B,EAAQ,EAAE;YACtD,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAA;QAC3B,CAAC;KACD,CAAA;IACQ,cAAc,GAAkB;QACxC,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,CAAC,KAA8B,EAAQ,EAAE;YACnD,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,KAAK,CAAA;QAClC,CAAC;QACD,YAAY,EAAE,CAAC,KAA8B,EAAQ,EAAE;YACtD,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,KAAK,CAAA;QAClC,CAAC;KACD,CAAA;IAED;QACC,kBAAkB,CAAC,IAAI,EAAE;YACxB,WAAW,EAAE,UAAU,CAAC,GAAG;YAC3B,IAAI,EAAE,UAAU,CAAC,GAAG;SACpB,CAAC,CAAA;IACH,CAAC;IAED,kBAAkB,KAAU,CAAC;IAC7B,IAAI,CAAC,KAAa,EAAE,KAA+B;QAClD,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;YAC7B,IAAI,KAAK,EAAE;gBACV,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;aAC7B;SACD;IACF,CAAC;IACD,WAAW,KAAU,CAAC;IACtB,cAAc,KAAU,CAAC;IACzB,gBAAgB,KAAU,CAAC;IAC3B,kBAAkB,KAAU,CAAC;IAC7B,kBAAkB,KAAU,CAAC;IAC7B,oBAAoB,KAAU,CAAC;IAC/B,YAAY,GAAG,CAAC,KAAa,EAAW,EAAE;QACzC,4DAA4D;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAA;QAC7B,IAAI,IAAI,EAAE;YACT,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;gBAC1B,OAAO,KAAK,CAAA;aACZ;YAED,IAAI,IAAI,CAAC,GAAG,CAAO,UAAU,CAAC,EAAE,KAAK,KAAK,IAAI,EAAE;gBAC/C,OAAO,IAAI,CAAA;aACX;YAED,wDAAwD;YACxD,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;gBAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAO,WAAW,CAAC,EAAE,KAAK,CAAA;gBACpD,MAAM,IAAI,GAAG,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;gBAClC,OAAO,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAA;aACrC;iBAAM;gBACN,OAAO,IAAI,CAAA;aACX;SACD;QAED,OAAO,KAAK,CAAA;IACb,CAAC,CAAA;IACD,UAAU;QACT,OAAO,KAAK,CAAA;IACb,CAAC;CACD"}
|
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
import React, { ErrorInfo, ReactNode } from 'react';
|
|
2
|
-
/**
|
|
3
|
-
* An error boundary can work at the global level (where something really screws up)
|
|
4
|
-
* or an an app level (where the error is captured just for the running application).
|
|
5
|
-
*/
|
|
6
|
-
export declare const enum ErrorBoundaryMode {
|
|
7
|
-
global = "global",
|
|
8
|
-
app = "app"
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* The properties for an error boundary.
|
|
12
|
-
*/
|
|
13
|
-
interface ErrorBoundaryProps {
|
|
14
|
-
/**
|
|
15
|
-
* The associated application id.
|
|
16
|
-
*/
|
|
17
|
-
appId?: string;
|
|
18
|
-
/**
|
|
19
|
-
* The error mode.
|
|
20
|
-
*/
|
|
21
|
-
mode: ErrorBoundaryMode;
|
|
22
|
-
/**
|
|
23
|
-
* Optional callback to display a report dialog.
|
|
24
|
-
*/
|
|
25
|
-
showReportDialog?: () => void;
|
|
26
|
-
/**
|
|
27
|
-
* Optional callback used to capture the error.
|
|
28
|
-
*/
|
|
29
|
-
onError?: (error: Error) => void;
|
|
30
|
-
/**
|
|
31
|
-
* Child components.
|
|
32
|
-
*/
|
|
33
|
-
children?: React.ReactNode;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* The state for an error boundary.
|
|
37
|
-
*/
|
|
38
|
-
interface ErrorBoundryState {
|
|
39
|
-
/**
|
|
40
|
-
* The last captured error.
|
|
41
|
-
*/
|
|
42
|
-
error?: Error;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* A common error boundary used to capture errors.
|
|
46
|
-
*/
|
|
47
|
-
export declare class ErrorBoundary extends React.Component<ErrorBoundaryProps, ErrorBoundryState> {
|
|
48
|
-
state: {
|
|
49
|
-
error?: Error;
|
|
50
|
-
};
|
|
51
|
-
componentDidCatch(error: Error, info: ErrorInfo): void;
|
|
52
|
-
static getDerivedStateFromError(error: Error): {
|
|
53
|
-
error: Error;
|
|
54
|
-
};
|
|
55
|
-
render(): ReactNode | JSX.Element;
|
|
56
|
-
}
|
|
57
|
-
export {};
|
|
1
|
+
import React, { ErrorInfo, ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* An error boundary can work at the global level (where something really screws up)
|
|
4
|
+
* or an an app level (where the error is captured just for the running application).
|
|
5
|
+
*/
|
|
6
|
+
export declare const enum ErrorBoundaryMode {
|
|
7
|
+
global = "global",
|
|
8
|
+
app = "app"
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The properties for an error boundary.
|
|
12
|
+
*/
|
|
13
|
+
interface ErrorBoundaryProps {
|
|
14
|
+
/**
|
|
15
|
+
* The associated application id.
|
|
16
|
+
*/
|
|
17
|
+
appId?: string;
|
|
18
|
+
/**
|
|
19
|
+
* The error mode.
|
|
20
|
+
*/
|
|
21
|
+
mode: ErrorBoundaryMode;
|
|
22
|
+
/**
|
|
23
|
+
* Optional callback to display a report dialog.
|
|
24
|
+
*/
|
|
25
|
+
showReportDialog?: () => void;
|
|
26
|
+
/**
|
|
27
|
+
* Optional callback used to capture the error.
|
|
28
|
+
*/
|
|
29
|
+
onError?: (error: Error) => void;
|
|
30
|
+
/**
|
|
31
|
+
* Child components.
|
|
32
|
+
*/
|
|
33
|
+
children?: React.ReactNode;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The state for an error boundary.
|
|
37
|
+
*/
|
|
38
|
+
interface ErrorBoundryState {
|
|
39
|
+
/**
|
|
40
|
+
* The last captured error.
|
|
41
|
+
*/
|
|
42
|
+
error?: Error;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* A common error boundary used to capture errors.
|
|
46
|
+
*/
|
|
47
|
+
export declare class ErrorBoundary extends React.Component<ErrorBoundaryProps, ErrorBoundryState> {
|
|
48
|
+
state: {
|
|
49
|
+
error?: Error;
|
|
50
|
+
};
|
|
51
|
+
componentDidCatch(error: Error, info: ErrorInfo): void;
|
|
52
|
+
static getDerivedStateFromError(error: Error): {
|
|
53
|
+
error: Error;
|
|
54
|
+
};
|
|
55
|
+
render(): ReactNode | JSX.Element;
|
|
56
|
+
}
|
|
57
|
+
export {};
|
|
@@ -1,124 +1,124 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2022, J2 Innovations. All Rights Reserved
|
|
3
|
-
*/
|
|
4
|
-
import React, { useState } from 'react';
|
|
5
|
-
import { Button, Checkbox, Divider, Message, Container, ColorVals, } from '@j2inn/ui';
|
|
6
|
-
import { usei18n } from '@j2inn/utils';
|
|
7
|
-
import { createUseStyles, useTheme } from 'react-jss';
|
|
8
|
-
const boundryStyles = createUseStyles((theme) => ({
|
|
9
|
-
errorBoundry: {
|
|
10
|
-
backgroundColor: theme.bodyBg,
|
|
11
|
-
flex: `1 1 auto`,
|
|
12
|
-
},
|
|
13
|
-
boundryContainer: {
|
|
14
|
-
margin: '0 auto',
|
|
15
|
-
flex: `1 1 auto`,
|
|
16
|
-
padding: `2rem`,
|
|
17
|
-
maxWidth: 1024,
|
|
18
|
-
backgroundColor: theme.bgColor,
|
|
19
|
-
[`& h1, & h3`]: {
|
|
20
|
-
paddingBottom: `1rem`,
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
errorDetails: {
|
|
24
|
-
[`& pre`]: {
|
|
25
|
-
overflow: 'auto',
|
|
26
|
-
marginTop: '1rem',
|
|
27
|
-
backgroundColor: ColorVals.Black,
|
|
28
|
-
color: ColorVals.White,
|
|
29
|
-
padding: '0.3rem',
|
|
30
|
-
},
|
|
31
|
-
},
|
|
32
|
-
}));
|
|
33
|
-
function get(i18n, key, fallback) {
|
|
34
|
-
return i18n.has(key) ? i18n.get(key) : fallback;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Format an error message into something more useful for the clipboard.
|
|
38
|
-
*/
|
|
39
|
-
function formatErrorMessage(error, appId) {
|
|
40
|
-
return JSON.stringify({
|
|
41
|
-
timestamp: new Date().toISOString(),
|
|
42
|
-
appId: appId ?? '',
|
|
43
|
-
location: location.href,
|
|
44
|
-
navigator: {
|
|
45
|
-
cookieEnabled: navigator.cookieEnabled,
|
|
46
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
47
|
-
deviceMemory: navigator.deviceMemory,
|
|
48
|
-
language: navigator.language,
|
|
49
|
-
languages: navigator.languages,
|
|
50
|
-
onLine: navigator.onLine,
|
|
51
|
-
userAgent: navigator.userAgent,
|
|
52
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
53
|
-
userAgentData: navigator.userAgentData,
|
|
54
|
-
vendor: navigator.vendor,
|
|
55
|
-
},
|
|
56
|
-
error: String(error.stack),
|
|
57
|
-
}, null, 2);
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Shows the internal error details to a user.
|
|
61
|
-
*/
|
|
62
|
-
const ErrorDetails = ({ showDetails, setShowDetails, error, appId, }) => {
|
|
63
|
-
const i18n = usei18n();
|
|
64
|
-
const classes = boundryStyles();
|
|
65
|
-
const theme = useTheme();
|
|
66
|
-
const copyToClipboard = () => {
|
|
67
|
-
navigator.clipboard.writeText(formatErrorMessage(error, appId));
|
|
68
|
-
Message.success(theme, get(i18n, 'finUi.errorBoundary.copiedErrorToClipboard', 'Copied error to clipboard'));
|
|
69
|
-
};
|
|
70
|
-
return (React.createElement("div", { className: classes.errorDetails },
|
|
71
|
-
React.createElement(Checkbox, { onChange: (e) => {
|
|
72
|
-
setShowDetails(e.target.checked);
|
|
73
|
-
}, defaultChecked: showDetails, value: showDetails }, get(i18n, 'finUi.errorBoundary.showDetails', 'Show details')),
|
|
74
|
-
showDetails && (React.createElement(React.Fragment, null,
|
|
75
|
-
React.createElement("pre", null, error.stack),
|
|
76
|
-
React.createElement(Container, { horizontal: true, middle: true, right: true },
|
|
77
|
-
React.createElement(Button, { onClick: copyToClipboard }, get(i18n, 'finUi.errorBoundary.copyToClipboard', 'Copy to clipboard')))))));
|
|
78
|
-
};
|
|
79
|
-
/**
|
|
80
|
-
* The inner error boundary component. This is required so
|
|
81
|
-
* we can use hooks that can't be used in a normal class component.
|
|
82
|
-
*/
|
|
83
|
-
const ErrorBoundaryInner = ({ error, mode, appId, showReportDialog, }) => {
|
|
84
|
-
const i18n = usei18n();
|
|
85
|
-
const [showDetails, setShowDetails] = useState(true);
|
|
86
|
-
const classes = boundryStyles();
|
|
87
|
-
const title = `finUi.errorBoundary.${mode}.title`;
|
|
88
|
-
const appName = `${appId}.name`;
|
|
89
|
-
const header = get(i18n, title, mode === 'global' ? 'Error' : 'Application error') +
|
|
90
|
-
(appId ? `: ${get(i18n, appName, appName)}` : '');
|
|
91
|
-
const continueMsg = get(i18n, `finUi.errorBoundary.${mode}.continue`, mode === 'global'
|
|
92
|
-
? 'To continue, please reload or navigate to the home page.'
|
|
93
|
-
: 'To continue, please reload, navigate to the home page or another application.');
|
|
94
|
-
return (React.createElement(Container, { vertical: true, top: true, center: true, className: classes.errorBoundry },
|
|
95
|
-
React.createElement("div", { className: classes.boundryContainer, style: { gap: `1rem` } },
|
|
96
|
-
React.createElement("h1", null, header),
|
|
97
|
-
React.createElement("h3", null, get(i18n, 'finUi.errorBoundary.description', 'The application has encountered an error when trying to display some content.')),
|
|
98
|
-
React.createElement("p", null, continueMsg),
|
|
99
|
-
React.createElement("div", null,
|
|
100
|
-
React.createElement(ErrorDetails, { showDetails: showDetails, setShowDetails: setShowDetails, error: error, appId: appId })),
|
|
101
|
-
React.createElement(Divider, null),
|
|
102
|
-
React.createElement(Container, { horizontal: true, middle: true, left: true, style: { gap: `1rem` } },
|
|
103
|
-
React.createElement(Button, { onClick: () => window.location.reload(), type: 'primary' }, get(i18n, 'finUi.common.reload', 'Reload')),
|
|
104
|
-
React.createElement(Button, { onClick: () => window.location.assign('/') }, get(i18n, 'finUi.common.home', 'Home'))),
|
|
105
|
-
showReportDialog && (React.createElement("div", { style: { marginTop: `0.5rem` } },
|
|
106
|
-
React.createElement("small", { onClick: showReportDialog }, get(i18n, 'finUi.errorBoundary.additionalDetails', 'If you’d like, click here to include an additional error report to our team. Any details you provide will be helpful.')))))));
|
|
107
|
-
};
|
|
108
|
-
/**
|
|
109
|
-
* A common error boundary used to capture errors.
|
|
110
|
-
*/
|
|
111
|
-
export class ErrorBoundary extends React.Component {
|
|
112
|
-
state = {};
|
|
113
|
-
componentDidCatch(error, info) {
|
|
114
|
-
this.props.onError?.(error);
|
|
115
|
-
console.error(error, info);
|
|
116
|
-
}
|
|
117
|
-
static getDerivedStateFromError(error) {
|
|
118
|
-
return { error };
|
|
119
|
-
}
|
|
120
|
-
render() {
|
|
121
|
-
return this.state.error ? (React.createElement(ErrorBoundaryInner, { error: this.state.error, mode: this.props.mode, appId: this.props.appId, showReportDialog: this.props.showReportDialog })) : (this.props.children);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2022, J2 Innovations. All Rights Reserved
|
|
3
|
+
*/
|
|
4
|
+
import React, { useState } from 'react';
|
|
5
|
+
import { Button, Checkbox, Divider, Message, Container, ColorVals, } from '@j2inn/ui';
|
|
6
|
+
import { usei18n } from '@j2inn/utils';
|
|
7
|
+
import { createUseStyles, useTheme } from 'react-jss';
|
|
8
|
+
const boundryStyles = createUseStyles((theme) => ({
|
|
9
|
+
errorBoundry: {
|
|
10
|
+
backgroundColor: theme.bodyBg,
|
|
11
|
+
flex: `1 1 auto`,
|
|
12
|
+
},
|
|
13
|
+
boundryContainer: {
|
|
14
|
+
margin: '0 auto',
|
|
15
|
+
flex: `1 1 auto`,
|
|
16
|
+
padding: `2rem`,
|
|
17
|
+
maxWidth: 1024,
|
|
18
|
+
backgroundColor: theme.bgColor,
|
|
19
|
+
[`& h1, & h3`]: {
|
|
20
|
+
paddingBottom: `1rem`,
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
errorDetails: {
|
|
24
|
+
[`& pre`]: {
|
|
25
|
+
overflow: 'auto',
|
|
26
|
+
marginTop: '1rem',
|
|
27
|
+
backgroundColor: ColorVals.Black,
|
|
28
|
+
color: ColorVals.White,
|
|
29
|
+
padding: '0.3rem',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
}));
|
|
33
|
+
function get(i18n, key, fallback) {
|
|
34
|
+
return i18n.has(key) ? i18n.get(key) : fallback;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Format an error message into something more useful for the clipboard.
|
|
38
|
+
*/
|
|
39
|
+
function formatErrorMessage(error, appId) {
|
|
40
|
+
return JSON.stringify({
|
|
41
|
+
timestamp: new Date().toISOString(),
|
|
42
|
+
appId: appId ?? '',
|
|
43
|
+
location: location.href,
|
|
44
|
+
navigator: {
|
|
45
|
+
cookieEnabled: navigator.cookieEnabled,
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
47
|
+
deviceMemory: navigator.deviceMemory,
|
|
48
|
+
language: navigator.language,
|
|
49
|
+
languages: navigator.languages,
|
|
50
|
+
onLine: navigator.onLine,
|
|
51
|
+
userAgent: navigator.userAgent,
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
53
|
+
userAgentData: navigator.userAgentData,
|
|
54
|
+
vendor: navigator.vendor,
|
|
55
|
+
},
|
|
56
|
+
error: String(error.stack),
|
|
57
|
+
}, null, 2);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Shows the internal error details to a user.
|
|
61
|
+
*/
|
|
62
|
+
const ErrorDetails = ({ showDetails, setShowDetails, error, appId, }) => {
|
|
63
|
+
const i18n = usei18n();
|
|
64
|
+
const classes = boundryStyles();
|
|
65
|
+
const theme = useTheme();
|
|
66
|
+
const copyToClipboard = () => {
|
|
67
|
+
navigator.clipboard.writeText(formatErrorMessage(error, appId));
|
|
68
|
+
Message.success(theme, get(i18n, 'finUi.errorBoundary.copiedErrorToClipboard', 'Copied error to clipboard'));
|
|
69
|
+
};
|
|
70
|
+
return (React.createElement("div", { className: classes.errorDetails },
|
|
71
|
+
React.createElement(Checkbox, { onChange: (e) => {
|
|
72
|
+
setShowDetails(e.target.checked);
|
|
73
|
+
}, defaultChecked: showDetails, value: showDetails }, get(i18n, 'finUi.errorBoundary.showDetails', 'Show details')),
|
|
74
|
+
showDetails && (React.createElement(React.Fragment, null,
|
|
75
|
+
React.createElement("pre", null, error.stack),
|
|
76
|
+
React.createElement(Container, { horizontal: true, middle: true, right: true },
|
|
77
|
+
React.createElement(Button, { onClick: copyToClipboard }, get(i18n, 'finUi.errorBoundary.copyToClipboard', 'Copy to clipboard')))))));
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* The inner error boundary component. This is required so
|
|
81
|
+
* we can use hooks that can't be used in a normal class component.
|
|
82
|
+
*/
|
|
83
|
+
const ErrorBoundaryInner = ({ error, mode, appId, showReportDialog, }) => {
|
|
84
|
+
const i18n = usei18n();
|
|
85
|
+
const [showDetails, setShowDetails] = useState(true);
|
|
86
|
+
const classes = boundryStyles();
|
|
87
|
+
const title = `finUi.errorBoundary.${mode}.title`;
|
|
88
|
+
const appName = `${appId}.name`;
|
|
89
|
+
const header = get(i18n, title, mode === 'global' ? 'Error' : 'Application error') +
|
|
90
|
+
(appId ? `: ${get(i18n, appName, appName)}` : '');
|
|
91
|
+
const continueMsg = get(i18n, `finUi.errorBoundary.${mode}.continue`, mode === 'global'
|
|
92
|
+
? 'To continue, please reload or navigate to the home page.'
|
|
93
|
+
: 'To continue, please reload, navigate to the home page or another application.');
|
|
94
|
+
return (React.createElement(Container, { vertical: true, top: true, center: true, className: classes.errorBoundry },
|
|
95
|
+
React.createElement("div", { className: classes.boundryContainer, style: { gap: `1rem` } },
|
|
96
|
+
React.createElement("h1", null, header),
|
|
97
|
+
React.createElement("h3", null, get(i18n, 'finUi.errorBoundary.description', 'The application has encountered an error when trying to display some content.')),
|
|
98
|
+
React.createElement("p", null, continueMsg),
|
|
99
|
+
React.createElement("div", null,
|
|
100
|
+
React.createElement(ErrorDetails, { showDetails: showDetails, setShowDetails: setShowDetails, error: error, appId: appId })),
|
|
101
|
+
React.createElement(Divider, null),
|
|
102
|
+
React.createElement(Container, { horizontal: true, middle: true, left: true, style: { gap: `1rem` } },
|
|
103
|
+
React.createElement(Button, { onClick: () => window.location.reload(), type: 'primary' }, get(i18n, 'finUi.common.reload', 'Reload')),
|
|
104
|
+
React.createElement(Button, { onClick: () => window.location.assign('/') }, get(i18n, 'finUi.common.home', 'Home'))),
|
|
105
|
+
showReportDialog && (React.createElement("div", { style: { marginTop: `0.5rem` } },
|
|
106
|
+
React.createElement("small", { onClick: showReportDialog }, get(i18n, 'finUi.errorBoundary.additionalDetails', 'If you’d like, click here to include an additional error report to our team. Any details you provide will be helpful.')))))));
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* A common error boundary used to capture errors.
|
|
110
|
+
*/
|
|
111
|
+
export class ErrorBoundary extends React.Component {
|
|
112
|
+
state = {};
|
|
113
|
+
componentDidCatch(error, info) {
|
|
114
|
+
this.props.onError?.(error);
|
|
115
|
+
console.error(error, info);
|
|
116
|
+
}
|
|
117
|
+
static getDerivedStateFromError(error) {
|
|
118
|
+
return { error };
|
|
119
|
+
}
|
|
120
|
+
render() {
|
|
121
|
+
return this.state.error ? (React.createElement(ErrorBoundaryInner, { error: this.state.error, mode: this.props.mode, appId: this.props.appId, showReportDialog: this.props.showReportDialog })) : (this.props.children);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
124
|
//# sourceMappingURL=ErrorBoundary.js.map
|