@j2inn/fin5-ui-utils 8.1.1-beta.6 → 8.1.1

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.
Files changed (210) hide show
  1. package/README.md +5 -5
  2. package/dist/fantomProps/createFin5Props/index.d.ts +12 -12
  3. package/dist/fantomProps/createFin5Props/index.js +146 -146
  4. package/dist/fantomProps/createFin5Props/runCreateFin5Props.d.ts +2 -2
  5. package/dist/fantomProps/createFin5Props/runCreateFin5Props.js +20 -20
  6. package/dist/fantomProps/fantomPropsToObject.d.ts +8 -8
  7. package/dist/fantomProps/fantomPropsToObject.js +183 -183
  8. package/dist/fantomProps/generateJsonFromFantomPropsFile.d.ts +4 -4
  9. package/dist/fantomProps/generateJsonFromFantomPropsFile.js +41 -41
  10. package/dist/fantomProps/localePropsToJson.d.ts +1 -1
  11. package/dist/fantomProps/localePropsToJson.js +50 -50
  12. package/dist/fantomProps/readFantomPropsFile.d.ts +5 -5
  13. package/dist/fantomProps/readFantomPropsFile.js +65 -65
  14. package/dist/fin5Top/fin5FileUpload.d.ts +24 -24
  15. package/dist/fin5Top/fin5FileUpload.js +51 -51
  16. package/dist/fin5Top/fin5Top.d.ts +165 -165
  17. package/dist/fin5Top/fin5Top.js +61 -61
  18. package/dist/fin5Top/finEdge2Cloud.d.ts +6 -6
  19. package/dist/fin5Top/finEdge2Cloud.js +15 -15
  20. package/dist/fin5Top/getFin5BinUrl.d.ts +2 -2
  21. package/dist/fin5Top/getFin5BinUrl.js +9 -9
  22. package/dist/fin5Top/openFin5Alarm.d.ts +22 -22
  23. package/dist/fin5Top/openFin5Alarm.js +23 -23
  24. package/dist/fin5Top/openFin5Historian.d.ts +3 -3
  25. package/dist/fin5Top/openFin5Historian.js +19 -19
  26. package/dist/fin5Top/useFin5AppURLHashParameter.d.ts +18 -18
  27. package/dist/fin5Top/useFin5AppURLHashParameter.js +133 -133
  28. package/dist/index.d.ts +35 -35
  29. package/dist/index.js +69 -69
  30. package/dist/jobs/jobUtils.d.ts +14 -14
  31. package/dist/jobs/jobUtils.js +15 -15
  32. package/dist/react/app/Fin5AppContainer.d.ts +36 -36
  33. package/dist/react/app/Fin5AppContainer.js +145 -145
  34. package/dist/react/app/Fin5AppRootStore.d.ts +40 -40
  35. package/dist/react/app/Fin5AppRootStore.js +90 -90
  36. package/dist/react/components/ErrorBoundary.d.ts +57 -57
  37. package/dist/react/components/ErrorBoundary.js +150 -150
  38. package/dist/react/components/ErrorDisplayer.d.ts +19 -19
  39. package/dist/react/components/ErrorDisplayer.js +36 -36
  40. package/dist/react/components/Loader.d.ts +9 -9
  41. package/dist/react/components/Loader.js +17 -17
  42. package/dist/react/components/LoadingSpinner.d.ts +2 -2
  43. package/dist/react/components/LoadingSpinner.js +27 -27
  44. package/dist/react/components/RecordImage.d.ts +20 -20
  45. package/dist/react/components/RecordImage.js +51 -51
  46. package/dist/react/components/charts/QRCode.d.ts +25 -25
  47. package/dist/react/components/charts/QRCode.js +82 -82
  48. package/dist/react/components/charts/line-bar/Chart.d.ts +166 -166
  49. package/dist/react/components/charts/line-bar/Chart.js +442 -442
  50. package/dist/react/components/charts/line-bar/HGridChart.d.ts +58 -58
  51. package/dist/react/components/charts/line-bar/HGridChart.js +285 -285
  52. package/dist/react/components/charts/pie/PieChart.d.ts +94 -94
  53. package/dist/react/components/charts/pie/PieChart.js +204 -204
  54. package/dist/react/components/charts/pie/SimplePieChart.d.ts +21 -21
  55. package/dist/react/components/charts/pie/SimplePieChart.js +55 -55
  56. package/dist/react/components/graphics/GraphicViewer.d.ts +10 -10
  57. package/dist/react/components/graphics/GraphicViewer.js +29 -29
  58. package/dist/react/components/graphics/GraphicsTabViewer.d.ts +17 -17
  59. package/dist/react/components/graphics/GraphicsTabViewer.js +90 -90
  60. package/dist/react/components/makeCustomElement.d.ts +16 -16
  61. package/dist/react/components/makeCustomElement.js +150 -150
  62. package/dist/react/components/navigation/BasicLayout.d.ts +41 -41
  63. package/dist/react/components/navigation/BasicLayout.js +155 -155
  64. package/dist/react/components/navigation/HeaderSiderLayout.d.ts +13 -13
  65. package/dist/react/components/navigation/HeaderSiderLayout.js +110 -110
  66. package/dist/react/components/navigation/MenuPage.d.ts +37 -37
  67. package/dist/react/components/navigation/MenuPage.js +36 -36
  68. package/dist/react/components/navigation/MenuTrigger.d.ts +9 -9
  69. package/dist/react/components/navigation/MenuTrigger.js +33 -33
  70. package/dist/react/components/navigation/ReactRouterHeaderSiderLayout.d.ts +11 -11
  71. package/dist/react/components/navigation/ReactRouterHeaderSiderLayout.js +25 -25
  72. package/dist/react/components/navigation/ReactRouterLayout.d.ts +46 -46
  73. package/dist/react/components/navigation/ReactRouterLayout.js +132 -132
  74. package/dist/react/components/navigation/customRouting/Router.d.ts +12 -12
  75. package/dist/react/components/navigation/customRouting/Router.js +45 -45
  76. package/dist/react/components/navigation/customRouting/RouterLayout.d.ts +11 -11
  77. package/dist/react/components/navigation/customRouting/RouterLayout.js +61 -61
  78. package/dist/react/components/resolvable/configurationForm/ConfigurationForm.d.ts +27 -27
  79. package/dist/react/components/resolvable/configurationForm/ConfigurationForm.js +95 -95
  80. package/dist/react/components/resolvable/configurationForm/ConfigurationFormEntry.d.ts +16 -16
  81. package/dist/react/components/resolvable/configurationForm/ConfigurationFormEntry.js +88 -88
  82. package/dist/react/components/resolvable/configurationForm/getSectionDefault.d.ts +16 -16
  83. package/dist/react/components/resolvable/configurationForm/getSectionDefault.js +99 -99
  84. package/dist/react/hooks/useFin5BinUrl.d.ts +6 -6
  85. package/dist/react/hooks/useFin5BinUrl.js +15 -15
  86. package/dist/react/hooks/useFin5ColorScheme.d.ts +2 -2
  87. package/dist/react/hooks/useFin5ColorScheme.js +56 -56
  88. package/dist/react/hooks/useScreenSize.d.ts +7 -7
  89. package/dist/react/hooks/useScreenSize.js +31 -31
  90. package/dist_es/fantomProps/createFin5Props/index.d.ts +12 -12
  91. package/dist_es/fantomProps/createFin5Props/index.js +140 -140
  92. package/dist_es/fantomProps/createFin5Props/runCreateFin5Props.d.ts +2 -2
  93. package/dist_es/fantomProps/createFin5Props/runCreateFin5Props.js +15 -15
  94. package/dist_es/fantomProps/fantomPropsToObject.d.ts +8 -8
  95. package/dist_es/fantomProps/fantomPropsToObject.js +178 -178
  96. package/dist_es/fantomProps/generateJsonFromFantomPropsFile.d.ts +4 -4
  97. package/dist_es/fantomProps/generateJsonFromFantomPropsFile.js +12 -12
  98. package/dist_es/fantomProps/localePropsToJson.d.ts +1 -1
  99. package/dist_es/fantomProps/localePropsToJson.js +21 -21
  100. package/dist_es/fantomProps/readFantomPropsFile.d.ts +5 -5
  101. package/dist_es/fantomProps/readFantomPropsFile.js +39 -39
  102. package/dist_es/fin5Top/fin5FileUpload.d.ts +24 -24
  103. package/dist_es/fin5Top/fin5FileUpload.js +47 -47
  104. package/dist_es/fin5Top/fin5Top.d.ts +165 -165
  105. package/dist_es/fin5Top/fin5Top.js +57 -57
  106. package/dist_es/fin5Top/finEdge2Cloud.d.ts +6 -6
  107. package/dist_es/fin5Top/finEdge2Cloud.js +11 -11
  108. package/dist_es/fin5Top/getFin5BinUrl.d.ts +2 -2
  109. package/dist_es/fin5Top/getFin5BinUrl.js +5 -5
  110. package/dist_es/fin5Top/openFin5Alarm.d.ts +22 -22
  111. package/dist_es/fin5Top/openFin5Alarm.js +19 -19
  112. package/dist_es/fin5Top/openFin5Historian.d.ts +3 -3
  113. package/dist_es/fin5Top/openFin5Historian.js +15 -15
  114. package/dist_es/fin5Top/useFin5AppURLHashParameter.d.ts +18 -18
  115. package/dist_es/fin5Top/useFin5AppURLHashParameter.js +124 -124
  116. package/dist_es/index.d.ts +35 -35
  117. package/dist_es/index.js +53 -53
  118. package/dist_es/jobs/jobUtils.d.ts +14 -14
  119. package/dist_es/jobs/jobUtils.js +9 -9
  120. package/dist_es/react/app/Fin5AppContainer.d.ts +36 -36
  121. package/dist_es/react/app/Fin5AppContainer.js +116 -116
  122. package/dist_es/react/app/Fin5AppRootStore.d.ts +40 -40
  123. package/dist_es/react/app/Fin5AppRootStore.js +86 -86
  124. package/dist_es/react/components/ErrorBoundary.d.ts +57 -57
  125. package/dist_es/react/components/ErrorBoundary.js +123 -123
  126. package/dist_es/react/components/ErrorDisplayer.d.ts +19 -19
  127. package/dist_es/react/components/ErrorDisplayer.js +28 -28
  128. package/dist_es/react/components/Loader.d.ts +9 -9
  129. package/dist_es/react/components/Loader.js +12 -12
  130. package/dist_es/react/components/LoadingSpinner.d.ts +2 -2
  131. package/dist_es/react/components/LoadingSpinner.js +20 -20
  132. package/dist_es/react/components/RecordImage.d.ts +20 -20
  133. package/dist_es/react/components/RecordImage.js +24 -24
  134. package/dist_es/react/components/charts/QRCode.d.ts +25 -25
  135. package/dist_es/react/components/charts/QRCode.js +52 -52
  136. package/dist_es/react/components/charts/line-bar/Chart.d.ts +166 -166
  137. package/dist_es/react/components/charts/line-bar/Chart.js +415 -415
  138. package/dist_es/react/components/charts/line-bar/HGridChart.d.ts +58 -58
  139. package/dist_es/react/components/charts/line-bar/HGridChart.js +250 -250
  140. package/dist_es/react/components/charts/pie/PieChart.d.ts +94 -94
  141. package/dist_es/react/components/charts/pie/PieChart.js +177 -177
  142. package/dist_es/react/components/charts/pie/SimplePieChart.d.ts +21 -21
  143. package/dist_es/react/components/charts/pie/SimplePieChart.js +25 -25
  144. package/dist_es/react/components/graphics/GraphicViewer.d.ts +10 -10
  145. package/dist_es/react/components/graphics/GraphicViewer.js +22 -22
  146. package/dist_es/react/components/graphics/GraphicsTabViewer.d.ts +17 -17
  147. package/dist_es/react/components/graphics/GraphicsTabViewer.js +60 -60
  148. package/dist_es/react/components/makeCustomElement.d.ts +16 -16
  149. package/dist_es/react/components/makeCustomElement.js +142 -142
  150. package/dist_es/react/components/navigation/BasicLayout.d.ts +41 -41
  151. package/dist_es/react/components/navigation/BasicLayout.js +124 -124
  152. package/dist_es/react/components/navigation/HeaderSiderLayout.d.ts +13 -13
  153. package/dist_es/react/components/navigation/HeaderSiderLayout.js +80 -80
  154. package/dist_es/react/components/navigation/MenuPage.d.ts +37 -37
  155. package/dist_es/react/components/navigation/MenuPage.js +30 -30
  156. package/dist_es/react/components/navigation/MenuTrigger.d.ts +9 -9
  157. package/dist_es/react/components/navigation/MenuTrigger.js +28 -28
  158. package/dist_es/react/components/navigation/ReactRouterHeaderSiderLayout.d.ts +11 -11
  159. package/dist_es/react/components/navigation/ReactRouterHeaderSiderLayout.js +18 -18
  160. package/dist_es/react/components/navigation/ReactRouterLayout.d.ts +46 -46
  161. package/dist_es/react/components/navigation/ReactRouterLayout.js +99 -99
  162. package/dist_es/react/components/navigation/customRouting/Router.d.ts +12 -12
  163. package/dist_es/react/components/navigation/customRouting/Router.js +18 -18
  164. package/dist_es/react/components/navigation/customRouting/RouterLayout.d.ts +11 -11
  165. package/dist_es/react/components/navigation/customRouting/RouterLayout.js +34 -34
  166. package/dist_es/react/components/resolvable/configurationForm/ConfigurationForm.d.ts +27 -27
  167. package/dist_es/react/components/resolvable/configurationForm/ConfigurationForm.js +64 -64
  168. package/dist_es/react/components/resolvable/configurationForm/ConfigurationFormEntry.d.ts +16 -16
  169. package/dist_es/react/components/resolvable/configurationForm/ConfigurationFormEntry.js +58 -58
  170. package/dist_es/react/components/resolvable/configurationForm/getSectionDefault.d.ts +16 -16
  171. package/dist_es/react/components/resolvable/configurationForm/getSectionDefault.js +94 -94
  172. package/dist_es/react/hooks/useFin5BinUrl.d.ts +6 -6
  173. package/dist_es/react/hooks/useFin5BinUrl.js +11 -11
  174. package/dist_es/react/hooks/useFin5ColorScheme.d.ts +2 -2
  175. package/dist_es/react/hooks/useFin5ColorScheme.js +52 -52
  176. package/dist_es/react/hooks/useScreenSize.d.ts +7 -7
  177. package/dist_es/react/hooks/useScreenSize.js +27 -27
  178. package/package.json +1 -1
  179. package/dist_es/react/app/Fin5AppContainer.jsx +0 -82
  180. package/dist_es/react/app/Fin5AppContainer.jsx.map +0 -1
  181. package/dist_es/react/components/ErrorBoundary.jsx +0 -150
  182. package/dist_es/react/components/ErrorBoundary.jsx.map +0 -1
  183. package/dist_es/react/components/ErrorDisplayer.jsx +0 -36
  184. package/dist_es/react/components/ErrorDisplayer.jsx.map +0 -1
  185. package/dist_es/react/components/Loader.jsx +0 -13
  186. package/dist_es/react/components/Loader.jsx.map +0 -1
  187. package/dist_es/react/components/LoadingSpinner.jsx +0 -22
  188. package/dist_es/react/components/LoadingSpinner.jsx.map +0 -1
  189. package/dist_es/react/components/charts/line-bar/ZincGridChart.d.ts +0 -12
  190. package/dist_es/react/components/charts/line-bar/ZincGridChart.js +0 -17
  191. package/dist_es/react/components/charts/line-bar/ZincGridChart.js.map +0 -1
  192. package/dist_es/react/components/graphics/GraphicViewer.jsx +0 -23
  193. package/dist_es/react/components/graphics/GraphicViewer.jsx.map +0 -1
  194. package/dist_es/react/components/graphics/GraphicsTabViewer.jsx +0 -63
  195. package/dist_es/react/components/graphics/GraphicsTabViewer.jsx.map +0 -1
  196. package/dist_es/react/components/navigation/BasicLayout.jsx +0 -133
  197. package/dist_es/react/components/navigation/BasicLayout.jsx.map +0 -1
  198. package/dist_es/react/components/navigation/MenuPage.jsx +0 -31
  199. package/dist_es/react/components/navigation/MenuPage.jsx.map +0 -1
  200. package/dist_es/react/components/navigation/Router.d.ts +0 -12
  201. package/dist_es/react/components/navigation/Router.js +0 -19
  202. package/dist_es/react/components/navigation/Router.js.map +0 -1
  203. package/dist_es/react/components/navigation/Router.jsx +0 -19
  204. package/dist_es/react/components/navigation/Router.jsx.map +0 -1
  205. package/dist_es/react/components/navigation/react-router/BasicLayout.d.ts +0 -23
  206. package/dist_es/react/components/navigation/react-router/BasicLayout.js +0 -82
  207. package/dist_es/react/components/navigation/react-router/BasicLayout.js.map +0 -1
  208. package/dist_es/react/components/navigation/react-router/ReactRouterBasicLayout.d.ts +0 -24
  209. package/dist_es/react/components/navigation/react-router/ReactRouterBasicLayout.js +0 -82
  210. package/dist_es/react/components/navigation/react-router/ReactRouterBasicLayout.js.map +0 -1
@@ -1,36 +1,36 @@
1
- import React from 'react';
2
- import { AppStore } from '@j2inn/app';
3
- import { Client } from 'haystack-nclient';
4
- import { ThemeDef } from '@j2inn/ui';
5
- /**
6
- * Properties for the dev application container component.
7
- */
8
- export interface Fin5AppContainerProps {
9
- /**
10
- * The children to render.
11
- */
12
- children?: React.ReactNode;
13
- /**
14
- * The app store.
15
- */
16
- appStore?: AppStore;
17
- /**
18
- * The network client object.
19
- */
20
- client?: Client;
21
- /**
22
- * Optional project name. Typically this is only specified
23
- * in development mode. It's typically picked up from the URL.
24
- */
25
- project?: string;
26
- /**
27
- * The optional theme to use.
28
- */
29
- theme?: ThemeDef;
30
- }
31
- /**
32
- * Creates a basic application container environment to run a view in FIN5.
33
- */
34
- export declare const Fin5AppContainer: (({ children, appStore, client, project, theme, }: Fin5AppContainerProps) => JSX.Element) & {
35
- displayName: string;
36
- };
1
+ import React from 'react';
2
+ import { AppStore } from '@j2inn/app';
3
+ import { Client } from 'haystack-nclient';
4
+ import { ThemeDef } from '@j2inn/ui';
5
+ /**
6
+ * Properties for the dev application container component.
7
+ */
8
+ export interface Fin5AppContainerProps {
9
+ /**
10
+ * The children to render.
11
+ */
12
+ children?: React.ReactNode;
13
+ /**
14
+ * The app store.
15
+ */
16
+ appStore?: AppStore;
17
+ /**
18
+ * The network client object.
19
+ */
20
+ client?: Client;
21
+ /**
22
+ * Optional project name. Typically this is only specified
23
+ * in development mode. It's typically picked up from the URL.
24
+ */
25
+ project?: string;
26
+ /**
27
+ * The optional theme to use.
28
+ */
29
+ theme?: ThemeDef;
30
+ }
31
+ /**
32
+ * Creates a basic application container environment to run a view in FIN5.
33
+ */
34
+ export declare const Fin5AppContainer: (({ children, appStore, client, project, theme, }: Fin5AppContainerProps) => JSX.Element) & {
35
+ displayName: string;
36
+ };
@@ -1,117 +1,117 @@
1
- /*
2
- * Copyright (c) 2022, J2 Innovations. All Rights Reserved
3
- */
4
- import React, { useEffect, useRef, useState } from 'react';
5
- import { AppRootStoreContext, AppStoreContext } from '@j2inn/app-react';
6
- import { observer } from 'mobx-react-lite';
7
- import { Fin5AppRootStore } from './Fin5AppRootStore';
8
- import { Client, } from 'haystack-nclient';
9
- import { ClientContext } from 'haystack-react';
10
- import { I18NProvider } from '@j2inn/utils';
11
- import { ThemeProvider } from 'react-jss';
12
- import { DEFAULT_THEME, GenerateTheme } from '@j2inn/ui';
13
- import { fin5Top } from '../../fin5Top/fin5Top';
14
- import { useFin5AppURLHashParameter } from '../../fin5Top/useFin5AppURLHashParameter';
15
- import { HRef } from 'haystack-core';
16
- import { ErrorBoundary } from '../components/ErrorBoundary';
17
- import Loader from '../components/Loader';
18
- const PATH_PREFIX = 'finApp';
19
- const getServiceUrl = ({ origin, path }) => `${origin}/${PATH_PREFIX}/api/${path}`;
20
- const getOpUrl = ({ origin, project, op }) => `${origin}/api/${project}/${op}`;
21
- const getHaystackServiceUrl = ({ origin, project, path, }) => `${origin}/${PATH_PREFIX}/api/haystack${project ? `/${project}` : ''}/${path}`;
22
- const getHostServiceUrl = ({ origin, path, }) => `${origin}/${PATH_PREFIX}/api/host/${path}`;
23
- /**
24
- * Runtime type guard that checks whether a store instance
25
- * exposes a boolean `initialized` flag.
26
- *
27
- * @param {AppStore | null | undefined} appStore - The store instance to test
28
- * @returns {appStore is AppStore & { initialized: boolean }} True if `appStore` has a boolean `initialized` property
29
- *
30
- * @remarks
31
- * To use the FINX onMessage feature, ensure the concrete store declares `initialized` ahead of time,
32
- * and set to true when children components have fully rendered.
33
- */
34
- function hasInitialized(appStore) {
35
- return (!!appStore &&
36
- 'initialized' in appStore &&
37
- typeof appStore.initialized === 'boolean');
38
- }
39
- /**
40
- * Creates a basic application container environment to run a view in FIN5.
41
- */
42
- export const Fin5AppContainer = observer(({ children, appStore, client, project, theme = GenerateTheme(DEFAULT_THEME).light, }) => {
43
- const [loading, setLoading] = useState(true);
44
- const [loadingi18n, setLoadingi18n] = useState(true);
45
- const rootStoreRef = useRef(null);
46
- rootStoreRef.current ??= new Fin5AppRootStore();
47
- const rootStore = rootStoreRef.current;
48
- const [hashProjName] = useFin5AppURLHashParameter('projectName');
49
- const containerProject = project || hashProjName || fin5Top?.finstack?.projectName || '';
50
- const locale = fin5Top?.languageManager?.currentLang ?? navigator?.language;
51
- rootStore.locale = locale;
52
- if (!rootStore.allLocales.includes(locale)) {
53
- rootStore.allLocales.push(locale);
54
- }
55
- const target = fin5Top?.app?.TargetRef?.() || '';
56
- rootStore.target = target ? HRef.make(target).value : '';
57
- const initialized = hasInitialized(appStore)
58
- ? appStore.initialized
59
- : false;
60
- const getClient = () => client ??
61
- new Client({
62
- base: new URL(window.location.href),
63
- project: containerProject,
64
- options: { headers: { accept: 'text/zinc' } },
65
- getServiceUrl,
66
- getOpUrl,
67
- getHaystackServiceUrl,
68
- getHostServiceUrl,
69
- });
70
- const [containerClient, setContainerClient] = useState(getClient);
71
- useEffect(() => {
72
- setLoading(true);
73
- const newClient = getClient();
74
- setContainerClient(newClient);
75
- // Load everything network wise before we load
76
- // the application.
77
- Promise.all([
78
- newClient.ext.eval('finGetCurrentUser()'),
79
- newClient.ext.loadDefs(),
80
- ]).then(([userGrid]) => {
81
- rootStore.currentUser = userGrid.first;
82
- setLoading(false);
83
- });
84
- }, [client, containerProject]);
85
- useEffect(() => {
86
- const onMessage = (event) => {
87
- if (fin5Top?.location.origin === event.origin &&
88
- appStore?.onMessage) {
89
- appStore.onMessage({
90
- message: event.data.message,
91
- params: event.data,
92
- client: getClient(),
93
- appRootStore: rootStore,
94
- });
95
- }
96
- };
97
- window.addEventListener('message', onMessage);
98
- return () => window.removeEventListener('message', onMessage);
99
- }, []);
100
- useEffect(() => {
101
- // tell the top level app its ready
102
- if (initialized) {
103
- fin5Top?.postMessage({
104
- kind: 'iframeApp',
105
- loading: false,
106
- });
107
- }
108
- }, [initialized]);
109
- return (React.createElement(AppRootStoreContext.Provider, { value: rootStore },
110
- React.createElement(AppStoreContext.Provider, { value: appStore },
111
- React.createElement(ClientContext.Provider, { value: containerClient },
112
- React.createElement(I18NProvider, { locale: locale, setLoading: setLoadingi18n },
113
- React.createElement(ThemeProvider, { theme: theme },
114
- React.createElement(Loader, { loading: loading || loadingi18n },
115
- React.createElement(ErrorBoundary, { mode: "global" /* ErrorBoundaryMode.global */ }, children))))))));
116
- });
1
+ /*
2
+ * Copyright (c) 2022, J2 Innovations. All Rights Reserved
3
+ */
4
+ import React, { useEffect, useRef, useState } from 'react';
5
+ import { AppRootStoreContext, AppStoreContext } from '@j2inn/app-react';
6
+ import { observer } from 'mobx-react-lite';
7
+ import { Fin5AppRootStore } from './Fin5AppRootStore';
8
+ import { Client, } from 'haystack-nclient';
9
+ import { ClientContext } from 'haystack-react';
10
+ import { I18NProvider } from '@j2inn/utils';
11
+ import { ThemeProvider } from 'react-jss';
12
+ import { DEFAULT_THEME, GenerateTheme } from '@j2inn/ui';
13
+ import { fin5Top } from '../../fin5Top/fin5Top';
14
+ import { useFin5AppURLHashParameter } from '../../fin5Top/useFin5AppURLHashParameter';
15
+ import { HRef } from 'haystack-core';
16
+ import { ErrorBoundary } from '../components/ErrorBoundary';
17
+ import Loader from '../components/Loader';
18
+ const PATH_PREFIX = 'finApp';
19
+ const getServiceUrl = ({ origin, path }) => `${origin}/${PATH_PREFIX}/api/${path}`;
20
+ const getOpUrl = ({ origin, project, op }) => `${origin}/api/${project}/${op}`;
21
+ const getHaystackServiceUrl = ({ origin, project, path, }) => `${origin}/${PATH_PREFIX}/api/haystack${project ? `/${project}` : ''}/${path}`;
22
+ const getHostServiceUrl = ({ origin, path, }) => `${origin}/${PATH_PREFIX}/api/host/${path}`;
23
+ /**
24
+ * Runtime type guard that checks whether a store instance
25
+ * exposes a boolean `initialized` flag.
26
+ *
27
+ * @param {AppStore | null | undefined} appStore - The store instance to test
28
+ * @returns {appStore is AppStore & { initialized: boolean }} True if `appStore` has a boolean `initialized` property
29
+ *
30
+ * @remarks
31
+ * To use the FINX onMessage feature, ensure the concrete store declares `initialized` ahead of time,
32
+ * and set to true when children components have fully rendered.
33
+ */
34
+ function hasInitialized(appStore) {
35
+ return (!!appStore &&
36
+ 'initialized' in appStore &&
37
+ typeof appStore.initialized === 'boolean');
38
+ }
39
+ /**
40
+ * Creates a basic application container environment to run a view in FIN5.
41
+ */
42
+ export const Fin5AppContainer = observer(({ children, appStore, client, project, theme = GenerateTheme(DEFAULT_THEME).light, }) => {
43
+ const [loading, setLoading] = useState(true);
44
+ const [loadingi18n, setLoadingi18n] = useState(true);
45
+ const rootStoreRef = useRef(null);
46
+ rootStoreRef.current ??= new Fin5AppRootStore();
47
+ const rootStore = rootStoreRef.current;
48
+ const [hashProjName] = useFin5AppURLHashParameter('projectName');
49
+ const containerProject = project || hashProjName || fin5Top?.finstack?.projectName || '';
50
+ const locale = fin5Top?.languageManager?.currentLang ?? navigator?.language;
51
+ rootStore.locale = locale;
52
+ if (!rootStore.allLocales.includes(locale)) {
53
+ rootStore.allLocales.push(locale);
54
+ }
55
+ const target = fin5Top?.app?.TargetRef?.() || '';
56
+ rootStore.target = target ? HRef.make(target).value : '';
57
+ const initialized = hasInitialized(appStore)
58
+ ? appStore.initialized
59
+ : false;
60
+ const getClient = () => client ??
61
+ new Client({
62
+ base: new URL(window.location.href),
63
+ project: containerProject,
64
+ options: { headers: { accept: 'text/zinc' } },
65
+ getServiceUrl,
66
+ getOpUrl,
67
+ getHaystackServiceUrl,
68
+ getHostServiceUrl,
69
+ });
70
+ const [containerClient, setContainerClient] = useState(getClient);
71
+ useEffect(() => {
72
+ setLoading(true);
73
+ const newClient = getClient();
74
+ setContainerClient(newClient);
75
+ // Load everything network wise before we load
76
+ // the application.
77
+ Promise.all([
78
+ newClient.ext.eval('finGetCurrentUser()'),
79
+ newClient.ext.loadDefs(),
80
+ ]).then(([userGrid]) => {
81
+ rootStore.currentUser = userGrid.first;
82
+ setLoading(false);
83
+ });
84
+ }, [client, containerProject]);
85
+ useEffect(() => {
86
+ const onMessage = (event) => {
87
+ if (fin5Top?.location.origin === event.origin &&
88
+ appStore?.onMessage) {
89
+ appStore.onMessage({
90
+ message: event.data.message,
91
+ params: event.data,
92
+ client: getClient(),
93
+ appRootStore: rootStore,
94
+ });
95
+ }
96
+ };
97
+ window.addEventListener('message', onMessage);
98
+ return () => window.removeEventListener('message', onMessage);
99
+ }, []);
100
+ useEffect(() => {
101
+ // tell the top level app its ready
102
+ if (initialized) {
103
+ fin5Top?.postMessage({
104
+ kind: 'iframeApp',
105
+ loading: false,
106
+ });
107
+ }
108
+ }, [initialized]);
109
+ return (React.createElement(AppRootStoreContext.Provider, { value: rootStore },
110
+ React.createElement(AppStoreContext.Provider, { value: appStore },
111
+ React.createElement(ClientContext.Provider, { value: containerClient },
112
+ React.createElement(I18NProvider, { locale: locale, setLoading: setLoadingi18n },
113
+ React.createElement(ThemeProvider, { theme: theme },
114
+ React.createElement(Loader, { loading: loading || loadingi18n },
115
+ React.createElement(ErrorBoundary, { mode: "global" /* ErrorBoundaryMode.global */ }, children))))))));
116
+ });
117
117
  //# sourceMappingURL=Fin5AppContainer.js.map
@@ -1,40 +1,40 @@
1
- import { App, AppRootStore, AppView, CustomHistory } from '@j2inn/app';
2
- import { HDict } from 'haystack-core';
3
- /**
4
- * An application root store for use with FIN5.
5
- */
6
- export declare class Fin5AppRootStore implements AppRootStore {
7
- project: string;
8
- sidebarOpen: boolean;
9
- locale: string;
10
- allLocales: string[];
11
- target: string;
12
- targetSidebar: string;
13
- currentUser: HDict | undefined;
14
- get app(): {
15
- id: string;
16
- name: string;
17
- app: App;
18
- view: AppView;
19
- } | undefined;
20
- get sidebar(): {
21
- id: string;
22
- name: string;
23
- app: App;
24
- view: AppView;
25
- } | undefined;
26
- readonly apps: App[];
27
- readonly history: CustomHistory;
28
- readonly historySidebar: CustomHistory;
29
- constructor();
30
- openAppInNewWindow(): void;
31
- open(appId: string, state?: Record<string, unknown>): void;
32
- openSidebar(): void;
33
- postAppMessage(): void;
34
- registerSidebars(): void;
35
- unregisterSidebars(): void;
36
- registerQuicklinks(): void;
37
- unregisterQuicklinks(): void;
38
- hasAppAccess: (appId: string) => boolean;
39
- hasSidebar(): boolean;
40
- }
1
+ import { App, AppRootStore, AppView, CustomHistory } from '@j2inn/app';
2
+ import { HDict } from 'haystack-core';
3
+ /**
4
+ * An application root store for use with FIN5.
5
+ */
6
+ export declare class Fin5AppRootStore implements AppRootStore {
7
+ project: string;
8
+ sidebarOpen: boolean;
9
+ locale: string;
10
+ allLocales: string[];
11
+ target: string;
12
+ targetSidebar: string;
13
+ currentUser: HDict | undefined;
14
+ get app(): {
15
+ id: string;
16
+ name: string;
17
+ app: App;
18
+ view: AppView;
19
+ } | undefined;
20
+ get sidebar(): {
21
+ id: string;
22
+ name: string;
23
+ app: App;
24
+ view: AppView;
25
+ } | undefined;
26
+ readonly apps: App[];
27
+ readonly history: CustomHistory;
28
+ readonly historySidebar: CustomHistory;
29
+ constructor();
30
+ openAppInNewWindow(): void;
31
+ open(appId: string, state?: Record<string, unknown>): void;
32
+ openSidebar(): void;
33
+ postAppMessage(): void;
34
+ registerSidebars(): void;
35
+ unregisterSidebars(): void;
36
+ registerQuicklinks(): void;
37
+ unregisterQuicklinks(): void;
38
+ hasAppAccess: (appId: string) => boolean;
39
+ hasSidebar(): boolean;
40
+ }
@@ -1,87 +1,87 @@
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
- }
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
+ }
87
87
  //# sourceMappingURL=Fin5AppRootStore.js.map