@darajs/core 1.20.2 → 1.21.0

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 (213) hide show
  1. package/dist/actions/navigate-to.d.ts.map +1 -1
  2. package/dist/actions/navigate-to.js +5 -1
  3. package/dist/actions/navigate-to.js.map +1 -1
  4. package/dist/api/core.d.ts +0 -19
  5. package/dist/api/core.d.ts.map +1 -1
  6. package/dist/api/core.js +1 -69
  7. package/dist/api/core.js.map +1 -1
  8. package/dist/api/index.d.ts +1 -1
  9. package/dist/api/index.d.ts.map +1 -1
  10. package/dist/api/index.js +1 -1
  11. package/dist/api/index.js.map +1 -1
  12. package/dist/auth/auth.d.ts +0 -20
  13. package/dist/auth/auth.d.ts.map +1 -1
  14. package/dist/auth/auth.js +0 -11
  15. package/dist/auth/auth.js.map +1 -1
  16. package/dist/auth/basic/basic-auth-login.js +4 -4
  17. package/dist/auth/basic/basic-auth-login.js.map +1 -1
  18. package/dist/auth/default/default-auth-login.js +4 -4
  19. package/dist/auth/default/default-auth-login.js.map +1 -1
  20. package/dist/auth/index.d.ts +0 -1
  21. package/dist/auth/index.d.ts.map +1 -1
  22. package/dist/auth/index.js +0 -1
  23. package/dist/auth/index.js.map +1 -1
  24. package/dist/components/fallback/default.d.ts +1 -0
  25. package/dist/components/fallback/default.d.ts.map +1 -1
  26. package/dist/components/fallback/default.js +3 -0
  27. package/dist/components/fallback/default.js.map +1 -1
  28. package/dist/components/index.d.ts +8 -5
  29. package/dist/components/index.d.ts.map +1 -1
  30. package/dist/components/index.js +8 -5
  31. package/dist/components/index.js.map +1 -1
  32. package/dist/components/link.d.ts +18 -0
  33. package/dist/components/link.d.ts.map +1 -0
  34. package/dist/components/link.js +45 -0
  35. package/dist/components/link.js.map +1 -0
  36. package/dist/components/menu-link.d.ts +4 -0
  37. package/dist/components/menu-link.d.ts.map +1 -0
  38. package/dist/components/menu-link.js +45 -0
  39. package/dist/components/menu-link.js.map +1 -0
  40. package/dist/components/{menu/menu.d.ts → menu.d.ts} +1 -1
  41. package/dist/components/menu.d.ts.map +1 -0
  42. package/dist/components/{menu/menu.js → menu.js} +6 -6
  43. package/dist/components/menu.js.map +1 -0
  44. package/dist/components/outlet.d.ts +3 -0
  45. package/dist/components/outlet.d.ts.map +1 -0
  46. package/dist/components/outlet.js +3 -0
  47. package/dist/components/outlet.js.map +1 -0
  48. package/dist/components/powered-by-causalens.d.ts +3 -0
  49. package/dist/components/powered-by-causalens.d.ts.map +1 -0
  50. package/dist/components/powered-by-causalens.js +25 -0
  51. package/dist/components/powered-by-causalens.js.map +1 -0
  52. package/dist/components/progress-tracker.d.ts.map +1 -0
  53. package/dist/components/{progress-tracker/progress-tracker.js → progress-tracker.js} +4 -4
  54. package/dist/components/progress-tracker.js.map +1 -0
  55. package/dist/components/{side-bar-frame/side-bar-frame.d.ts → side-bar-frame.d.ts} +2 -1
  56. package/dist/components/side-bar-frame.d.ts.map +1 -0
  57. package/dist/components/{side-bar-frame/side-bar-frame.js → side-bar-frame.js} +10 -13
  58. package/dist/components/side-bar-frame.js.map +1 -0
  59. package/dist/components/{top-bar-frame/top-bar-frame.d.ts → top-bar-frame.d.ts} +1 -1
  60. package/dist/components/top-bar-frame.d.ts.map +1 -0
  61. package/dist/components/{top-bar-frame/top-bar-frame.js → top-bar-frame.js} +6 -7
  62. package/dist/components/top-bar-frame.js.map +1 -0
  63. package/dist/dara_core-1.21.0-py3-none-any.whl +0 -0
  64. package/dist/index.css +42 -0
  65. package/dist/index.d.ts +1 -1
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +1 -1
  68. package/dist/index.js.map +1 -1
  69. package/dist/pages/error-page.d.ts +12 -2
  70. package/dist/pages/error-page.d.ts.map +1 -1
  71. package/dist/pages/error-page.js +18 -10
  72. package/dist/pages/error-page.js.map +1 -1
  73. package/dist/pages/error-status-code-page.d.ts +13 -0
  74. package/dist/pages/error-status-code-page.d.ts.map +1 -0
  75. package/dist/pages/error-status-code-page.js +40 -0
  76. package/dist/pages/error-status-code-page.js.map +1 -0
  77. package/dist/pages/root-error-page.d.ts +3 -0
  78. package/dist/pages/root-error-page.d.ts.map +1 -0
  79. package/dist/pages/root-error-page.js +31 -0
  80. package/dist/pages/root-error-page.js.map +1 -0
  81. package/dist/pages/route-error-boundary.d.ts +3 -0
  82. package/dist/pages/route-error-boundary.d.ts.map +1 -0
  83. package/dist/pages/route-error-boundary.js +85 -0
  84. package/dist/pages/route-error-boundary.js.map +1 -0
  85. package/dist/run.d.ts +3 -1
  86. package/dist/run.d.ts.map +1 -1
  87. package/dist/run.js +49 -25
  88. package/dist/run.js.map +1 -1
  89. package/dist/shared/context/config-context.d.ts +7 -0
  90. package/dist/shared/context/config-context.d.ts.map +1 -0
  91. package/dist/shared/context/config-context.js +15 -0
  92. package/dist/shared/context/config-context.js.map +1 -0
  93. package/dist/shared/context/global-task-context.d.ts +2 -1
  94. package/dist/shared/context/global-task-context.d.ts.map +1 -1
  95. package/dist/shared/context/index.d.ts +2 -1
  96. package/dist/shared/context/index.d.ts.map +1 -1
  97. package/dist/shared/context/index.js +2 -1
  98. package/dist/shared/context/index.js.map +1 -1
  99. package/dist/shared/context/registries-context.d.ts +10 -7
  100. package/dist/shared/context/registries-context.d.ts.map +1 -1
  101. package/dist/shared/context/registries-context.js +49 -9
  102. package/dist/shared/context/registries-context.js.map +1 -1
  103. package/dist/shared/dynamic-component/dynamic-auth-component.d.ts +12 -0
  104. package/dist/shared/dynamic-component/dynamic-auth-component.d.ts.map +1 -0
  105. package/dist/shared/dynamic-component/dynamic-auth-component.js +53 -0
  106. package/dist/shared/dynamic-component/dynamic-auth-component.js.map +1 -0
  107. package/dist/shared/dynamic-component/dynamic-component.d.ts +10 -1
  108. package/dist/shared/dynamic-component/dynamic-component.d.ts.map +1 -1
  109. package/dist/shared/dynamic-component/dynamic-component.js +67 -7
  110. package/dist/shared/dynamic-component/dynamic-component.js.map +1 -1
  111. package/dist/shared/error-handling/error-display.js +2 -2
  112. package/dist/shared/index.d.ts +1 -2
  113. package/dist/shared/index.d.ts.map +1 -1
  114. package/dist/shared/index.js +1 -2
  115. package/dist/shared/index.js.map +1 -1
  116. package/dist/shared/interactivity/persistence.d.ts +5 -1
  117. package/dist/shared/interactivity/persistence.d.ts.map +1 -1
  118. package/dist/shared/interactivity/persistence.js +81 -3
  119. package/dist/shared/interactivity/persistence.js.map +1 -1
  120. package/dist/shared/interactivity/plain-variable.d.ts +2 -1
  121. package/dist/shared/interactivity/plain-variable.d.ts.map +1 -1
  122. package/dist/shared/interactivity/plain-variable.js +12 -0
  123. package/dist/shared/interactivity/plain-variable.js.map +1 -1
  124. package/dist/shared/interactivity/resolve-variable.d.ts +7 -1
  125. package/dist/shared/interactivity/resolve-variable.d.ts.map +1 -1
  126. package/dist/shared/interactivity/resolve-variable.js +56 -2
  127. package/dist/shared/interactivity/resolve-variable.js.map +1 -1
  128. package/dist/shared/interactivity/server-variable.d.ts +2 -1
  129. package/dist/shared/interactivity/server-variable.d.ts.map +1 -1
  130. package/dist/shared/interactivity/server-variable.js +18 -0
  131. package/dist/shared/interactivity/server-variable.js.map +1 -1
  132. package/dist/shared/interactivity/use-action.d.ts +6 -1
  133. package/dist/shared/interactivity/use-action.d.ts.map +1 -1
  134. package/dist/shared/interactivity/use-action.js +106 -44
  135. package/dist/shared/interactivity/use-action.js.map +1 -1
  136. package/dist/shared/{template-root/template-root.d.ts → root/authenticated-root.d.ts} +4 -5
  137. package/dist/shared/root/authenticated-root.d.ts.map +1 -0
  138. package/dist/shared/root/authenticated-root.js +86 -0
  139. package/dist/shared/root/authenticated-root.js.map +1 -0
  140. package/dist/shared/root/dynamic-context.d.ts.map +1 -0
  141. package/dist/shared/root/dynamic-context.js.map +1 -0
  142. package/dist/shared/root/route-content.d.ts +21 -0
  143. package/dist/shared/root/route-content.d.ts.map +1 -0
  144. package/dist/shared/root/route-content.js +164 -0
  145. package/dist/shared/root/route-content.js.map +1 -0
  146. package/dist/shared/root/unauthenticated-root.d.ts +7 -0
  147. package/dist/shared/root/unauthenticated-root.d.ts.map +1 -0
  148. package/dist/shared/root/unauthenticated-root.js +38 -0
  149. package/dist/shared/root/unauthenticated-root.js.map +1 -0
  150. package/dist/shared/router.d.ts +14 -0
  151. package/dist/shared/router.d.ts.map +1 -0
  152. package/dist/shared/router.js +199 -0
  153. package/dist/shared/router.js.map +1 -0
  154. package/dist/shared/utils/index.d.ts +0 -1
  155. package/dist/shared/utils/index.d.ts.map +1 -1
  156. package/dist/shared/utils/index.js +0 -1
  157. package/dist/shared/utils/index.js.map +1 -1
  158. package/dist/shared/utils/use-component-styles.d.ts +1 -1
  159. package/dist/shared/utils/use-component-styles.d.ts.map +1 -1
  160. package/dist/shared/utils/use-component-styles.js +2 -2
  161. package/dist/shared/utils/use-component-styles.js.map +1 -1
  162. package/dist/shared/utils/use-url-sync.d.ts +1 -13
  163. package/dist/shared/utils/use-url-sync.d.ts.map +1 -1
  164. package/dist/shared/utils/use-url-sync.js +18 -22
  165. package/dist/shared/utils/use-url-sync.js.map +1 -1
  166. package/dist/shared/utils/use-window-title.d.ts +1 -1
  167. package/dist/shared/utils/use-window-title.d.ts.map +1 -1
  168. package/dist/shared/utils/use-window-title.js +5 -5
  169. package/dist/shared/utils/use-window-title.js.map +1 -1
  170. package/dist/types/core.d.ts +73 -5
  171. package/dist/types/core.d.ts.map +1 -1
  172. package/dist/types/core.js +11 -1
  173. package/dist/types/core.js.map +1 -1
  174. package/dist/umd/{dara.core.umd.js → dara.core.umd.cjs} +30052 -17828
  175. package/dist/umd/style.css +52 -9
  176. package/package.json +13 -15
  177. package/dist/auth/auth-wrapper.d.ts +0 -15
  178. package/dist/auth/auth-wrapper.d.ts.map +0 -1
  179. package/dist/auth/auth-wrapper.js +0 -76
  180. package/dist/auth/auth-wrapper.js.map +0 -1
  181. package/dist/components/menu/menu.d.ts.map +0 -1
  182. package/dist/components/menu/menu.js.map +0 -1
  183. package/dist/components/progress-tracker/progress-tracker.d.ts.map +0 -1
  184. package/dist/components/progress-tracker/progress-tracker.js.map +0 -1
  185. package/dist/components/router-content/router-content.d.ts +0 -14
  186. package/dist/components/router-content/router-content.d.ts.map +0 -1
  187. package/dist/components/router-content/router-content.js +0 -18
  188. package/dist/components/router-content/router-content.js.map +0 -1
  189. package/dist/components/side-bar-frame/side-bar-frame.d.ts.map +0 -1
  190. package/dist/components/side-bar-frame/side-bar-frame.js.map +0 -1
  191. package/dist/components/top-bar-frame/top-bar-frame.d.ts.map +0 -1
  192. package/dist/components/top-bar-frame/top-bar-frame.js.map +0 -1
  193. package/dist/dara_core-1.20.2-py3-none-any.whl +0 -0
  194. package/dist/shared/private-route/private-route.d.ts +0 -19
  195. package/dist/shared/private-route/private-route.d.ts.map +0 -1
  196. package/dist/shared/private-route/private-route.js +0 -37
  197. package/dist/shared/private-route/private-route.js.map +0 -1
  198. package/dist/shared/template-root/dynamic-context.d.ts.map +0 -1
  199. package/dist/shared/template-root/dynamic-context.js.map +0 -1
  200. package/dist/shared/template-root/template-root.d.ts.map +0 -1
  201. package/dist/shared/template-root/template-root.js +0 -100
  202. package/dist/shared/template-root/template-root.js.map +0 -1
  203. package/dist/shared/utils/use-action-registry.d.ts +0 -11
  204. package/dist/shared/utils/use-action-registry.d.ts.map +0 -1
  205. package/dist/shared/utils/use-action-registry.js +0 -19
  206. package/dist/shared/utils/use-action-registry.js.map +0 -1
  207. package/dist/shared/utils/use-component-registry.d.ts +0 -11
  208. package/dist/shared/utils/use-component-registry.d.ts.map +0 -1
  209. package/dist/shared/utils/use-component-registry.js +0 -58
  210. package/dist/shared/utils/use-component-registry.js.map +0 -1
  211. /package/dist/components/{progress-tracker/progress-tracker.d.ts → progress-tracker.d.ts} +0 -0
  212. /package/dist/shared/{template-root → root}/dynamic-context.d.ts +0 -0
  213. /package/dist/shared/{template-root → root}/dynamic-context.js +0 -0
@@ -0,0 +1,85 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useRef } from 'react';
3
+ import { isRouteErrorResponse, useRouteError } from 'react-router';
4
+ import styled from '@darajs/styled-components';
5
+ import { Button } from '@darajs/ui-components';
6
+ import { useConfig } from '../shared';
7
+ import { LoaderError } from '../types';
8
+ import ErrorStatusCodePage, { errorMessages } from './error-status-code-page';
9
+ const CenteredDivWithGap = styled.div `
10
+ display: flex;
11
+ flex: 1;
12
+ flex-direction: column;
13
+ gap: 2rem;
14
+
15
+ min-width: 0;
16
+ margin: auto;
17
+ padding: 0.5rem;
18
+
19
+ text-align: center;
20
+
21
+ code {
22
+ padding: 0.2rem;
23
+ background-color: ${(props) => props.theme.colors.grey2};
24
+ border-radius: 0.5rem;
25
+ }
26
+ `;
27
+ const Title = styled.h1 `
28
+ margin: 0;
29
+ font-weight: 500;
30
+ `;
31
+ const ErrorMessage = styled.p `
32
+ font-size: 0.875rem;
33
+ line-height: 1.5;
34
+ `;
35
+ const ErrorStack = styled.pre `
36
+ overflow-x: auto;
37
+ display: flex;
38
+ flex-shrink: 1;
39
+
40
+ min-width: 0;
41
+
42
+ font-size: 0.825rem;
43
+ text-align: left;
44
+ `;
45
+ const ButtonBar = styled.div `
46
+ display: flex;
47
+ justify-content: center;
48
+
49
+ button {
50
+ width: fit-content;
51
+ }
52
+ `;
53
+ function isProductionBuild(config) {
54
+ return config.build_mode === 'PRODUCTION' && !config.build_dev;
55
+ }
56
+ function RouteErrorBoundary() {
57
+ const error = useRouteError();
58
+ const config = useConfig();
59
+ const firstRender = useRef(true);
60
+ if (firstRender.current) {
61
+ // eslint-disable-next-line no-console
62
+ console.error(error);
63
+ firstRender.current = false;
64
+ }
65
+ // explicit errors from loaders
66
+ if (isRouteErrorResponse(error)) {
67
+ // show a regular error page when the error code is known
68
+ if (String(error.status) in errorMessages) {
69
+ return _jsx(ErrorStatusCodePage, { code: String(error.status) });
70
+ }
71
+ return (_jsxs(CenteredDivWithGap, { children: [_jsxs(Title, { children: [error.status, " ", error.statusText] }), _jsx(ErrorMessage, { children: "Try again or contact the application owner" }), _jsx(ButtonBar, { children: _jsx(Button, { href: "/login", styling: "error", children: "Go to home" }) })] }));
72
+ }
73
+ // in prod, always show the error page
74
+ if (isProductionBuild(config)) {
75
+ return (_jsxs(CenteredDivWithGap, { children: [_jsx(Title, { children: "Unexpected error occurred" }), _jsx(ErrorMessage, { children: "Try again or contact the application owner" }), _jsx(ButtonBar, { children: _jsx(Button, { href: "/login", styling: "error", children: "Go to home" }) })] }));
76
+ }
77
+ // Otherwise, show the actual error to the user (developer mode)
78
+ if (error instanceof LoaderError) {
79
+ // Explicitly handle loader errors
80
+ return (_jsxs(CenteredDivWithGap, { children: [_jsxs(Title, { children: ["Error loading page ", _jsx("code", { children: error.payload.path })] }), _jsxs(ErrorMessage, { children: ["Error was thrown by action ", _jsx("code", { children: error.payload.action_name }), ". ", _jsx("br", {}), "To ensure security and integrity of the page content, errors raised within ", _jsx("code", { children: "on_load" }), ' ', "actions trigger this error boundary page rather than only showing a notification. For best user experience, gracefully handle any exceptions raised within those actions."] }), _jsx(ErrorStack, { children: error.payload.stacktrace }), _jsx(ButtonBar, { children: _jsx(Button, { href: "/login", styling: "error", children: "Go to home" }) })] }));
81
+ }
82
+ return (_jsxs(CenteredDivWithGap, { children: [_jsx(Title, { children: "Unknown error occurred" }), _jsx(ErrorStack, { children: String(error) }), _jsx(ButtonBar, { children: _jsx(Button, { href: "/login", styling: "error", children: "Go to home" }) })] }));
83
+ }
84
+ export default RouteErrorBoundary;
85
+ //# sourceMappingURL=route-error-boundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-error-boundary.js","sourceRoot":"","sources":["../../js/pages/route-error-boundary.tsx"],"names":[],"mappings":"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"}
package/dist/run.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { WebSocketClientInterface } from './api';
1
2
  import './index.css';
2
3
  declare global {
3
4
  interface Window {
@@ -6,6 +7,7 @@ declare global {
6
7
  }
7
8
  interface DaraGlobals {
8
9
  base_url: string;
10
+ ws?: WebSocketClientInterface;
9
11
  }
10
12
  /**
11
13
  * The main run function for the JS half of the application creates a div and binds the react app onto the tree. It sets
@@ -17,6 +19,6 @@ interface DaraGlobals {
17
19
  */
18
20
  declare function run(importers: {
19
21
  [k: string]: () => Promise<any>;
20
- }): void;
22
+ }): Promise<void>;
21
23
  export default run;
22
24
  //# sourceMappingURL=run.d.ts.map
package/dist/run.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../js/run.tsx"],"names":[],"mappings":"AAeA,OAAO,aAAa,CAAC;AAGrB,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,IAAI,EAAE,WAAW,CAAC;KACrB;CACJ;AAED,UAAU,WAAW;IACjB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,iBAAS,GAAG,CAAC,SAAS,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAA;CAAE,GAAG,IAAI,CA2CjE;AAED,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../js/run.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,aAAa,CAAC;AAQrB,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,IAAI,EAAE,WAAW,CAAC;KACrB;CACJ;AAED,UAAU,WAAW;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,wBAAwB,CAAC;CACjC;AAED;;;;;;;GAOG;AACH,iBAAe,GAAG,CAAC,SAAS,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoDhF;AAED,eAAe,GAAG,CAAC"}
package/dist/run.js CHANGED
@@ -1,18 +1,29 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { jsx as _jsx } from "react/jsx-runtime";
2
11
  import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
3
- import { createBrowserHistory } from 'history';
12
+ import NProgress from 'nprogress';
13
+ import { useState } from 'react';
4
14
  import { createRoot } from 'react-dom/client';
5
- import { Router } from 'react-router-dom';
6
- import { RecoilRoot } from 'recoil';
7
- import { RecoilURLSync } from 'recoil-sync';
8
- import { ThemeProvider, theme } from '@darajs/styled-components';
15
+ import { RouterProvider } from 'react-router/dom';
16
+ import { RecoilRoot, useRecoilSnapshot } from 'recoil';
17
+ import { ThemeProvider } from '@darajs/styled-components';
9
18
  import { ErrorBoundary } from '@darajs/ui-components';
10
- import { NotificationWrapper } from '@darajs/ui-notifications';
11
- import { GlobalTaskProvider } from './shared/context';
12
- import { useUrlSync } from './shared/utils';
13
- import AuthWrapper from './auth/auth-wrapper';
19
+ import { useLatestRef } from '@darajs/ui-utils';
20
+ import { ConfigContextProvider, GlobalTaskProvider } from './shared/context';
14
21
  import './index.css';
15
- import { DirectionCtx, ImportersCtx, TemplateRoot } from './shared';
22
+ import { DirectionCtx, ImportersCtx, resolveTheme } from './shared';
23
+ import { preloadAuthComponent } from './shared/dynamic-component/dynamic-auth-component';
24
+ import { preloadComponents } from './shared/dynamic-component/dynamic-component';
25
+ import { preloadActions } from './shared/interactivity/use-action';
26
+ import { createRouter } from './shared/router';
16
27
  /**
17
28
  * The main run function for the JS half of the application creates a div and binds the react app onto the tree. It sets
18
29
  * up a lot of context providers for the rest of the application. It accepts an object of importers as an argument. An
@@ -22,20 +33,33 @@ import { DirectionCtx, ImportersCtx, TemplateRoot } from './shared';
22
33
  * @param importers - the importers object.
23
34
  */
24
35
  function run(importers) {
25
- const queryClient = new QueryClient();
26
- let basename = '';
27
- // The base_url is set in the html template by the backend when returning it
28
- if (window.dara.base_url !== '') {
29
- basename = new URL(window.dara.base_url, window.origin).pathname;
30
- }
31
- function Root() {
32
- const history = createBrowserHistory({ basename });
33
- const syncOptions = useUrlSync({ history });
34
- return (_jsx(QueryClientProvider, { client: queryClient, children: _jsx(ThemeProvider, { theme: theme, children: _jsx(ErrorBoundary, { children: _jsx(ImportersCtx.Provider, { value: importers, children: _jsx(DirectionCtx.Provider, { value: { direction: 'row' }, children: _jsx(Router, { history: history, children: _jsx(RecoilRoot, { children: _jsx(RecoilURLSync, Object.assign({}, syncOptions, { children: _jsx(GlobalTaskProvider, { children: _jsxs(AuthWrapper, { children: [_jsx(NotificationWrapper, {}), _jsx(TemplateRoot, {})] }) }) })) }) }) }) }) }) }) }));
35
- }
36
- const container = document.getElementById('dara_root');
37
- const root = createRoot(container);
38
- root.render(_jsx(Root, {}));
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ var _a, _b;
38
+ const queryClient = new QueryClient();
39
+ const daraData = JSON.parse(document.getElementById('__DARA_DATA__').textContent);
40
+ document.title = daraData.title;
41
+ NProgress.configure({ showSpinner: false });
42
+ yield Promise.all([
43
+ // preload auth components to prevent flashing of extra spinners
44
+ ...Object.values(daraData.auth_components).map((component) => preloadAuthComponent(importers, component)),
45
+ // preload components and actions for the entire loaded registry
46
+ preloadComponents(importers, Object.values(daraData.components)),
47
+ preloadActions(importers, Object.values(daraData.actions)),
48
+ ]);
49
+ function RouterRoot() {
50
+ const snapshot = useRecoilSnapshot();
51
+ const snapshotRef = useLatestRef(snapshot);
52
+ const [router] = useState(() => createRouter(daraData, queryClient, snapshotRef));
53
+ return _jsx(RouterProvider, { router: router });
54
+ }
55
+ const theme = resolveTheme((_a = daraData.theme) === null || _a === void 0 ? void 0 : _a.main, (_b = daraData.theme) === null || _b === void 0 ? void 0 : _b.base);
56
+ function Root() {
57
+ return (_jsx(ConfigContextProvider, { initialConfig: daraData, children: _jsx(QueryClientProvider, { client: queryClient, children: _jsx(ThemeProvider, { theme: theme, children: _jsx(ErrorBoundary, { children: _jsx(ImportersCtx.Provider, { value: importers, children: _jsx(DirectionCtx.Provider, { value: { direction: 'row' }, children: _jsx(RecoilRoot, { children: _jsx(GlobalTaskProvider, { children: _jsx(RouterRoot, {}) }) }) }) }) }) }) }) }));
58
+ }
59
+ const container = document.getElementById('dara_root');
60
+ const root = createRoot(container);
61
+ root.render(_jsx(Root, {}));
62
+ });
39
63
  }
40
64
  export default run;
41
65
  //# sourceMappingURL=run.js.map
package/dist/run.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../js/run.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAC9C,OAAO,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAYpE;;;;;;;GAOG;AACH,SAAS,GAAG,CAAC,SAA8C;IACvD,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IAEtC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAElB,4EAA4E;IAC5E,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;QAC9B,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;IACrE,CAAC;IAED,SAAS,IAAI;QACT,MAAM,OAAO,GAAG,oBAAoB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnD,MAAM,WAAW,GAAG,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAE5C,OAAO,CACH,KAAC,mBAAmB,IAAC,MAAM,EAAE,WAAW,YACpC,KAAC,aAAa,IAAC,KAAK,EAAE,KAAK,YACvB,KAAC,aAAa,cACV,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,SAAS,YACnC,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,YAC9C,KAAC,MAAM,IAAC,OAAO,EAAE,OAAO,YACpB,KAAC,UAAU,cACP,KAAC,aAAa,oBAAK,WAAW,cAC1B,KAAC,kBAAkB,cACf,MAAC,WAAW,eACR,KAAC,mBAAmB,KAAG,EACvB,KAAC,YAAY,KAAG,IACN,GACG,IACT,GACP,GACR,GACW,GACJ,GACZ,GACJ,GACE,CACzB,CAAC;IACN,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAE,CAAC;IACxD,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,KAAC,IAAI,KAAG,CAAC,CAAC;AAC1B,CAAC;AAED,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../js/run.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Config } from '../../types';
2
+ export declare function ConfigContextProvider(props: {
3
+ initialConfig: Config;
4
+ children: React.ReactNode;
5
+ }): React.ReactNode;
6
+ export declare function useConfig(): Config;
7
+ //# sourceMappingURL=config-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-context.d.ts","sourceRoot":"","sources":["../../../js/shared/context/config-context.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAQtC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,GAAG,KAAK,CAAC,SAAS,CAGlH;AAED,wBAAgB,SAAS,IAAI,MAAM,CAQlC"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext, useMemo } from 'react';
3
+ const configContext = createContext(null);
4
+ export function ConfigContextProvider(props) {
5
+ const contextValue = useMemo(() => ({ config: props.initialConfig }), [props.initialConfig]);
6
+ return _jsx(configContext.Provider, { value: contextValue, children: props.children });
7
+ }
8
+ export function useConfig() {
9
+ const context = useContext(configContext);
10
+ if (!context) {
11
+ throw new Error('useConfigContext must be used within a ConfigContextProvider');
12
+ }
13
+ return context.config;
14
+ }
15
+ //# sourceMappingURL=config-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-context.js","sourceRoot":"","sources":["../../../js/shared/context/config-context.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAQ3D,MAAM,aAAa,GAAG,aAAa,CAAuB,IAAI,CAAC,CAAC;AAEhE,MAAM,UAAU,qBAAqB,CAAC,KAA2D;IAC7F,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7F,OAAO,KAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,YAAG,KAAK,CAAC,QAAQ,GAA0B,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,SAAS;IACrB,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAE1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,CAAC;AAC1B,CAAC"}
@@ -1,3 +1,4 @@
1
+ import * as React from 'react';
1
2
  import { type GlobalTaskContext } from '../../types/core';
2
3
  /**
3
4
  * Represents a task run
@@ -9,7 +10,7 @@ export interface VariableTaskEntry {
9
10
  triggerKey?: string;
10
11
  }
11
12
  interface GlobalTaskProviderProps {
12
- children: JSX.Element;
13
+ children: React.ReactNode;
13
14
  tasks?: Set<string>;
14
15
  variableTaskMap?: Map<string, Array<VariableTaskEntry>>;
15
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"global-task-context.d.ts","sourceRoot":"","sources":["../../../js/shared/context/global-task-context.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAMtD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,uBAAuB;IAC7B,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;CAC3D;AAED,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,uBAAuB,GAAG,GAAG,CAAC,OAAO,CA4FrH;AAED,wBAAgB,cAAc,IAAI,iBAAiB,CAQlD"}
1
+ {"version":3,"file":"global-task-context.d.ts","sourceRoot":"","sources":["../../../js/shared/context/global-task-context.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAMtD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,uBAAuB;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;CAC3D;AAED,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,uBAAuB,GAAG,GAAG,CAAC,OAAO,CA4FrH;AAED,wBAAgB,cAAc,IAAI,iBAAiB,CAQlD"}
@@ -3,8 +3,9 @@ export { default as ImportersCtx } from './importers-context';
3
3
  export { default as GlobalTaskProvider, useTaskContext } from './global-task-context';
4
4
  export { default as VariableCtx } from './variable-context';
5
5
  export { default as WebSocketCtx } from './websocket-context';
6
- export { default as RegistriesCtx } from './registries-context';
6
+ export { RegistriesCtxProvider, useRegistriesCtx } from './registries-context';
7
7
  export { default as DisplayCtx } from './display-context';
8
8
  export { default as FallbackCtx } from './fallback-context';
9
9
  export { default as RequestExtrasCtx, useRequestExtras, RequestExtrasProvider, PartialRequestExtrasProvider, } from './request-extras-context';
10
+ export { useConfig, ConfigContextProvider } from './config-context';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../js/shared/context/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EACH,OAAO,IAAI,gBAAgB,EAC3B,gBAAgB,EAChB,qBAAqB,EACrB,4BAA4B,GAC/B,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../js/shared/context/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EACH,OAAO,IAAI,gBAAgB,EAC3B,gBAAgB,EAChB,qBAAqB,EACrB,4BAA4B,GAC/B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -3,8 +3,9 @@ export { default as ImportersCtx } from './importers-context';
3
3
  export { default as GlobalTaskProvider, useTaskContext } from './global-task-context';
4
4
  export { default as VariableCtx } from './variable-context';
5
5
  export { default as WebSocketCtx } from './websocket-context';
6
- export { default as RegistriesCtx } from './registries-context';
6
+ export { RegistriesCtxProvider, useRegistriesCtx } from './registries-context';
7
7
  export { default as DisplayCtx } from './display-context';
8
8
  export { default as FallbackCtx } from './fallback-context';
9
9
  export { default as RequestExtrasCtx, useRequestExtras, RequestExtrasProvider, PartialRequestExtrasProvider, } from './request-extras-context';
10
+ export { useConfig, ConfigContextProvider } from './config-context';
10
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../js/shared/context/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EACH,OAAO,IAAI,gBAAgB,EAC3B,gBAAgB,EAChB,qBAAqB,EACrB,4BAA4B,GAC/B,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../js/shared/context/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EACH,OAAO,IAAI,gBAAgB,EAC3B,gBAAgB,EAChB,qBAAqB,EACrB,4BAA4B,GAC/B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,6 +1,4 @@
1
- import { type QueryObserverResult, type RefetchOptions } from '@tanstack/react-query';
2
- import { RequestError } from '@darajs/ui-utils';
3
- import { type ActionDef, type Component } from '../../types';
1
+ import { type ActionDef, type Component, type ComponentInstance } from '../../types';
4
2
  type RegistriesCtx = {
5
3
  /**
6
4
  * Action registry
@@ -11,10 +9,15 @@ type RegistriesCtx = {
11
9
  */
12
10
  componentRegistry: Record<string, Component>;
13
11
  /**
14
- * Callback to force a refetch of the components registry
12
+ * Callback to get a component from the components registry
15
13
  */
16
- refetchComponents: (options?: RefetchOptions) => Promise<QueryObserverResult<Record<string, Component>, RequestError>>;
14
+ getComponent: (instance: ComponentInstance) => Promise<Component>;
17
15
  };
18
- declare const registriesCtx: import("react").Context<RegistriesCtx>;
19
- export default registriesCtx;
16
+ export declare function RegistriesCtxProvider(props: {
17
+ componentRegistry: Record<string, Component>;
18
+ actionRegistry: Record<string, ActionDef>;
19
+ children: React.ReactNode;
20
+ }): React.ReactNode;
21
+ export declare function useRegistriesCtx(): RegistriesCtx;
22
+ export {};
20
23
  //# sourceMappingURL=registries-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registries-context.d.ts","sourceRoot":"","sources":["../../../js/shared/context/registries-context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGtF,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzD,KAAK,aAAa,GAAG;IACjB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC1C;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC7C;;OAEG;IACH,iBAAiB,EAAE,CACf,OAAO,CAAC,EAAE,cAAc,KACvB,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;CAC9E,CAAC;AAEF,QAAA,MAAM,aAAa,wCAIjB,CAAC;AAEH,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"registries-context.d.ts","sourceRoot":"","sources":["../../../js/shared/context/registries-context.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAIjF,KAAK,aAAa,GAAG;IACjB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC1C;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC7C;;OAEG;IACH,YAAY,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;CACrE,CAAC;AAIF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IACzC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC7C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC1C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B,GAAG,KAAK,CAAC,SAAS,CA0ClB;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAQhD"}
@@ -1,11 +1,51 @@
1
- import {} from '@tanstack/react-query';
2
- import { createContext } from 'react';
3
- import { RequestError } from '@darajs/ui-utils';
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+ import { useMutation } from '@tanstack/react-query';
12
+ import { createContext, useCallback, useContext, useMemo, useState } from 'react';
13
+ import { HTTP_METHOD, validateResponse } from '@darajs/ui-utils';
14
+ import { request } from '../../api/http';
15
+ import { handleAuthErrors } from '../../auth/auth';
4
16
  import {} from '../../types';
5
- const registriesCtx = createContext({
6
- actionRegistry: {},
7
- componentRegistry: {},
8
- refetchComponents: null,
9
- });
10
- export default registriesCtx;
17
+ import { useRequestExtras } from './request-extras-context';
18
+ const registriesCtx = createContext(null);
19
+ export function RegistriesCtxProvider(props) {
20
+ const [actionRegistry] = useState(props.actionRegistry);
21
+ const [componentRegistry, setComponentRegistry] = useState(props.componentRegistry);
22
+ const extras = useRequestExtras();
23
+ const refetchComponentMutation = useMutation({
24
+ mutationKey: ['component-definition'],
25
+ mutationFn: (_a) => __awaiter(this, [_a], void 0, function* ({ name }) {
26
+ const response = yield request(`/api/core/components/${name}/definition`, { method: HTTP_METHOD.GET }, extras);
27
+ yield handleAuthErrors(response, true);
28
+ yield validateResponse(response, `Failed to fetch the component definition for ${name}, was it registered in the app?`);
29
+ return response.json();
30
+ }),
31
+ retry: 3,
32
+ });
33
+ const getComponent = useCallback((instance) => __awaiter(this, void 0, void 0, function* () {
34
+ if (componentRegistry[instance.name]) {
35
+ return componentRegistry[instance.name];
36
+ }
37
+ const component = yield refetchComponentMutation.mutateAsync({ name: instance.name });
38
+ setComponentRegistry((prev) => (Object.assign(Object.assign({}, prev), { [instance.name]: component })));
39
+ return component;
40
+ }), [componentRegistry, refetchComponentMutation]);
41
+ const contextValue = useMemo(() => ({ actionRegistry, componentRegistry, getComponent }), [actionRegistry, componentRegistry, getComponent]);
42
+ return _jsx(registriesCtx.Provider, { value: contextValue, children: props.children });
43
+ }
44
+ export function useRegistriesCtx() {
45
+ const context = useContext(registriesCtx);
46
+ if (!context) {
47
+ throw new Error('useRegistriesCtx must be used within a RegistriesCtxProvider');
48
+ }
49
+ return context;
50
+ }
11
51
  //# sourceMappingURL=registries-context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registries-context.js","sourceRoot":"","sources":["../../../js/shared/context/registries-context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiD,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAkC,MAAM,SAAS,CAAC;AAmBzD,MAAM,aAAa,GAAG,aAAa,CAAgB;IAC/C,cAAc,EAAE,EAAE;IAClB,iBAAiB,EAAE,EAAE;IACrB,iBAAiB,EAAE,IAAW;CACjC,CAAC,CAAC;AAEH,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"registries-context.js","sourceRoot":"","sources":["../../../js/shared/context/registries-context.tsx"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAElF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAA0D,MAAM,SAAS,CAAC;AAEjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAiB5D,MAAM,aAAa,GAAG,aAAa,CAAuB,IAAI,CAAC,CAAC;AAEhE,MAAM,UAAU,qBAAqB,CAAC,KAIrC;IACG,MAAM,CAAC,cAAc,CAAC,GAAG,QAAQ,CAA4B,KAAK,CAAC,cAAc,CAAC,CAAC;IACnF,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAA4B,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC/G,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAElC,MAAM,wBAAwB,GAAG,WAAW,CAAqC;QAC7E,WAAW,EAAE,CAAC,sBAAsB,CAAC;QACrC,UAAU,EAAE,KAAiB,EAAE,0CAAZ,EAAE,IAAI,EAAE;YACvB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC1B,wBAAwB,IAAI,aAAa,EACzC,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,EAC3B,MAAM,CACT,CAAC;YACF,MAAM,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACvC,MAAM,gBAAgB,CAClB,QAAQ,EACR,gDAAgD,IAAI,iCAAiC,CACxF,CAAC;YACF,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC,CAAA;QACD,KAAK,EAAE,CAAC;KACX,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,WAAW,CAC5B,CAAO,QAA2B,EAAsB,EAAE;QACtD,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,OAAO,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAE,CAAC;QAC7C,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QACtF,oBAAoB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iCAAM,IAAI,KAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,IAAG,CAAC,CAAC;QAC1E,OAAO,SAAS,CAAC;IACrB,CAAC,CAAA,EACD,CAAC,iBAAiB,EAAE,wBAAwB,CAAC,CAChD,CAAC;IAEF,MAAM,YAAY,GAAG,OAAO,CACxB,GAAG,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC,EAC3D,CAAC,cAAc,EAAE,iBAAiB,EAAE,YAAY,CAAC,CACpD,CAAC;IAEF,OAAO,KAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,YAAG,KAAK,CAAC,QAAQ,GAA0B,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAE1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { AuthComponent, ModuleContent } from '../../types/core';
2
+ export declare function preloadAuthComponent(importers: Record<string, () => Promise<ModuleContent>>, component: AuthComponent): Promise<void>;
3
+ /**
4
+ * Simplified version of DynamicComponent, just for the auth components.
5
+ * This is because we can't use the component registry for auth components, since the component registry operates
6
+ * in an authenticated context, and we need to be able to render the login page without being authenticated.
7
+ */
8
+ declare function DynamicAuthComponent(props: {
9
+ component: AuthComponent;
10
+ }): React.ReactNode;
11
+ export default DynamicAuthComponent;
12
+ //# sourceMappingURL=dynamic-auth-component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-auth-component.d.ts","sourceRoot":"","sources":["../../../js/shared/dynamic-component/dynamic-auth-component.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAQjE,wBAAsB,oBAAoB,CACtC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC,EACvD,SAAS,EAAE,aAAa,GACzB,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED;;;;GAIG;AACH,iBAAS,oBAAoB,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,aAAa,CAAA;CAAE,GAAG,KAAK,CAAC,SAAS,CAOlF;AAED,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,53 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+ import {} from 'react';
12
+ const PRELOADED_COMPONENTS = {};
13
+ function getIdentifier(component) {
14
+ return `${component.py_module}.${component.js_name}`;
15
+ }
16
+ export function preloadAuthComponent(importers, component) {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ const importer = importers[component.py_module];
19
+ if (!importer) {
20
+ throw new Error(`Missing importer for module ${component.py_module}`);
21
+ }
22
+ let moduleContent = null;
23
+ try {
24
+ moduleContent = yield importer();
25
+ }
26
+ catch (err) {
27
+ throw new Error(`Failed to import module ${component.py_module}`, err);
28
+ }
29
+ if (!moduleContent) {
30
+ throw new Error(`Failed to import module ${component.py_module}`);
31
+ }
32
+ const Component = moduleContent[component.js_name];
33
+ if (!Component) {
34
+ throw new Error(`Failed to import component ${component.js_name} from module ${component.py_module}`);
35
+ }
36
+ PRELOADED_COMPONENTS[getIdentifier(component)] = _jsx(Component, {});
37
+ });
38
+ }
39
+ /**
40
+ * Simplified version of DynamicComponent, just for the auth components.
41
+ * This is because we can't use the component registry for auth components, since the component registry operates
42
+ * in an authenticated context, and we need to be able to render the login page without being authenticated.
43
+ */
44
+ function DynamicAuthComponent(props) {
45
+ const identifier = getIdentifier(props.component);
46
+ // should not happen
47
+ if (!(identifier in PRELOADED_COMPONENTS)) {
48
+ throw new Error(`Component ${identifier} not found`);
49
+ }
50
+ return PRELOADED_COMPONENTS[identifier];
51
+ }
52
+ export default DynamicAuthComponent;
53
+ //# sourceMappingURL=dynamic-auth-component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-auth-component.js","sourceRoot":"","sources":["../../../js/shared/dynamic-component/dynamic-auth-component.tsx"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,EAAsC,MAAM,OAAO,CAAC;AAI3D,MAAM,oBAAoB,GAA8B,EAAE,CAAC;AAE3D,SAAS,aAAa,CAAC,SAAwB;IAC3C,OAAO,GAAG,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAgB,oBAAoB,CACtC,SAAuD,EACvD,SAAwB;;QAExB,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAEhD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,aAAa,GAAQ,IAAI,CAAC;QAE9B,IAAI,CAAC;YACD,aAAa,GAAG,MAAM,QAAQ,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,CAAC,SAAS,EAAE,EAAE,GAAY,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,OAAO,CAA8B,CAAC;QAEhF,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,8BAA8B,SAAS,CAAC,OAAO,gBAAgB,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;QAC1G,CAAC;QAED,oBAAoB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,GAAG,KAAC,SAAS,KAAG,CAAC;IACnE,CAAC;CAAA;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,KAAmC;IAC7D,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAClD,oBAAoB;IACpB,IAAI,CAAC,CAAC,UAAU,IAAI,oBAAoB,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,aAAa,UAAU,YAAY,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,oBAAoB,CAAC,UAAU,CAAE,CAAC;AAC7C,CAAC;AAED,eAAe,oBAAoB,CAAC"}
@@ -1,9 +1,18 @@
1
- import { type ComponentInstance } from '../../types';
1
+ import { type Component, type ComponentInstance } from '../../types';
2
+ import { type ModuleContent } from '../../types/core';
2
3
  /**
3
4
  * Clear the caches for testing.
4
5
  * In prod we don't want to clear ever
5
6
  */
6
7
  export declare function clearCaches_TEST(): void;
8
+ /**
9
+ * Pre-warm the caches for the given components.
10
+ * This is useful to pre-warm the core components on startup to avoid spinners
11
+ *
12
+ * @param importers - the importers object.
13
+ * @param components - the components to pre-warm
14
+ */
15
+ export declare function preloadComponents(importers: Record<string, () => Promise<ModuleContent>>, components: Component[]): Promise<void>;
7
16
  interface DynamicComponentProps {
8
17
  /** The component instance to inject */
9
18
  component: ComponentInstance | null | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-component.d.ts","sourceRoot":"","sources":["../../../js/shared/dynamic-component/dynamic-component.tsx"],"names":[],"mappings":"AAqBA,OAAO,EAAkB,KAAK,iBAAiB,EAA2C,MAAM,SAAS,CAAC;AA8D1G;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC;AAuID,UAAU,qBAAqB;IAC3B,uCAAuC;IACvC,SAAS,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC;CACnD;AA8BD;;;;;;;GAOG;AACH,iBAAS,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,KAAK,CAAC,SAAS,CAwIvE;;AAkED,wBAAsC"}
1
+ {"version":3,"file":"dynamic-component.d.ts","sourceRoot":"","sources":["../../../js/shared/dynamic-component/dynamic-component.tsx"],"names":[],"mappings":"AAyBA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAA2C,MAAM,SAAS,CAAC;AAC1G,OAAO,EAAoB,KAAK,aAAa,EAA8C,MAAM,cAAc,CAAC;AA6DhH;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACnC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC,EACvD,UAAU,EAAE,SAAS,EAAE,GACxB,OAAO,CAAC,IAAI,CAAC,CA6Cf;AA4ID,UAAU,qBAAqB;IAC3B,uCAAuC;IACvC,SAAS,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC;CACnD;AA8BD;;;;;;;GAOG;AACH,iBAAS,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,KAAK,CAAC,SAAS,CA0IvE;;AAkED,wBAAsC"}