@deephaven/app-utils 1.22.1 → 1.22.2-alpha-pivot-builder.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.
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  import React, { useCallback, useMemo, useState } from 'react';
2
8
  import { Provider } from 'react-redux';
3
9
  import { store } from '@deephaven/redux';
@@ -18,18 +24,19 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
18
24
  * Will display the children when everything is loaded and authenticated.
19
25
  */
20
26
  export function AppBootstrap(_ref) {
21
- var {
22
- fontClassNames,
23
- pluginsUrl,
24
- getCorePlugins,
25
- serverUrl,
26
- logMetadata,
27
- children
28
- } = _ref;
27
+ var fontClassNames = _ref.fontClassNames,
28
+ pluginsUrl = _ref.pluginsUrl,
29
+ getCorePlugins = _ref.getCorePlugins,
30
+ serverUrl = _ref.serverUrl,
31
+ logMetadata = _ref.logMetadata,
32
+ children = _ref.children;
29
33
  var clientOptions = useMemo(() => getConnectOptions(), []);
30
34
 
31
35
  // On logout, we reset the client and have user login again
32
- var [logoutCount, setLogoutCount] = useState(0);
36
+ var _useState = useState(0),
37
+ _useState2 = _slicedToArray(_useState, 2),
38
+ logoutCount = _useState2[0],
39
+ setLogoutCount = _useState2[1];
33
40
  var onLogin = useCallback(() => undefined, []);
34
41
  var onLogout = useCallback(() => {
35
42
  requestAnimationFrame(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"AppBootstrap.js","names":["React","useCallback","useMemo","useState","Provider","store","ClientBootstrap","useBroadcastLoginListener","ContextActions","ContextMenuRoot","FontBootstrap","FontsLoaded","PluginsBootstrap","AuthBootstrap","ConnectionBootstrap","getConnectOptions","createExportLogsContextAction","UserBootstrap","ServerConfigBootstrap","ThemeBootstrap","jsx","_jsx","jsxs","_jsxs","AppBootstrap","_ref","fontClassNames","pluginsUrl","getCorePlugins","serverUrl","logMetadata","children","clientOptions","logoutCount","setLogoutCount","onLogin","undefined","onLogout","requestAnimationFrame","value","contextActions","options","actions"],"sources":["../../src/components/AppBootstrap.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from 'react';\nimport { Provider } from 'react-redux';\nimport { store } from '@deephaven/redux';\nimport '@deephaven/components/scss/BaseStyleSheet.scss';\nimport { ClientBootstrap } from '@deephaven/jsapi-bootstrap';\nimport { useBroadcastLoginListener } from '@deephaven/jsapi-components';\nimport { type Plugin } from '@deephaven/plugin';\nimport {\n ContextActions,\n ContextMenuRoot,\n FontBootstrap,\n FontsLoaded,\n} from '@deephaven/components';\nimport PluginsBootstrap from './PluginsBootstrap';\nimport AuthBootstrap from './AuthBootstrap';\nimport ConnectionBootstrap from './ConnectionBootstrap';\nimport { getConnectOptions, createExportLogsContextAction } from '../utils';\nimport UserBootstrap from './UserBootstrap';\nimport ServerConfigBootstrap from './ServerConfigBootstrap';\nimport ThemeBootstrap from './ThemeBootstrap';\n\nexport type AppBootstrapProps = {\n /** URL of the server. */\n serverUrl: string;\n\n /** Properties included in support logs. */\n logMetadata?: Record<string, unknown>;\n\n /** URL of the plugins to load. */\n pluginsUrl: string;\n\n /** The core plugins to load. */\n getCorePlugins?: () => Promise<Plugin[]>;\n\n /** Font class names to load. */\n fontClassNames?: string[];\n\n /**\n * The children to render wrapped when everything is loaded and authenticated.\n */\n children: React.ReactNode;\n};\n\n/**\n * AppBootstrap component. Handles loading the fonts, client, and authentication.\n * Will display the children when everything is loaded and authenticated.\n */\nexport function AppBootstrap({\n fontClassNames,\n pluginsUrl,\n getCorePlugins,\n serverUrl,\n logMetadata,\n children,\n}: AppBootstrapProps): JSX.Element {\n const clientOptions = useMemo(() => getConnectOptions(), []);\n\n // On logout, we reset the client and have user login again\n const [logoutCount, setLogoutCount] = useState(0);\n const onLogin = useCallback(() => undefined, []);\n const onLogout = useCallback(() => {\n requestAnimationFrame(() => {\n setLogoutCount(value => value + 1);\n });\n }, []);\n useBroadcastLoginListener(onLogin, onLogout);\n\n const contextActions = useMemo(\n () => [createExportLogsContextAction(logMetadata, true)],\n [logMetadata]\n );\n\n return (\n <Provider store={store}>\n <FontBootstrap fontClassNames={fontClassNames}>\n <PluginsBootstrap\n getCorePlugins={getCorePlugins}\n pluginsUrl={pluginsUrl}\n >\n <ThemeBootstrap>\n <ClientBootstrap\n serverUrl={serverUrl}\n options={clientOptions}\n key={logoutCount}\n >\n <AuthBootstrap>\n <ServerConfigBootstrap>\n <UserBootstrap>\n <ConnectionBootstrap>\n <FontsLoaded>{children}</FontsLoaded>\n </ConnectionBootstrap>\n </UserBootstrap>\n </ServerConfigBootstrap>\n </AuthBootstrap>\n <ContextActions actions={contextActions} />\n </ClientBootstrap>\n </ThemeBootstrap>\n </PluginsBootstrap>\n </FontBootstrap>\n <ContextMenuRoot />\n </Provider>\n );\n}\n\nexport default AppBootstrap;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AAC7D,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,KAAK,QAAQ,kBAAkB;AACxC,OAAO,gDAAgD;AACvD,SAASC,eAAe,QAAQ,4BAA4B;AAC5D,SAASC,yBAAyB,QAAQ,6BAA6B;AAEvE,SACEC,cAAc,EACdC,eAAe,EACfC,aAAa,EACbC,WAAW,QACN,uBAAuB;AAAC,OACxBC,gBAAgB;AAAA,OAChBC,aAAa;AAAA,OACbC,mBAAmB;AAAA,SACjBC,iBAAiB,EAAEC,6BAA6B;AAAA,OAClDC,aAAa;AAAA,OACbC,qBAAqB;AAAA,OACrBC,cAAc;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAwBrB;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAAAC,IAAA,EAOO;EAAA,IAPN;IAC3BC,cAAc;IACdC,UAAU;IACVC,cAAc;IACdC,SAAS;IACTC,WAAW;IACXC;EACiB,CAAC,GAAAN,IAAA;EAClB,IAAMO,aAAa,GAAG9B,OAAO,CAAC,MAAMa,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC;;EAE5D;EACA,IAAM,CAACkB,WAAW,EAAEC,cAAc,CAAC,GAAG/B,QAAQ,CAAC,CAAC,CAAC;EACjD,IAAMgC,OAAO,GAAGlC,WAAW,CAAC,MAAMmC,SAAS,EAAE,EAAE,CAAC;EAChD,IAAMC,QAAQ,GAAGpC,WAAW,CAAC,MAAM;IACjCqC,qBAAqB,CAAC,MAAM;MAC1BJ,cAAc,CAACK,KAAK,IAAIA,KAAK,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC;EACJ,CAAC,EAAE,EAAE,CAAC;EACNhC,yBAAyB,CAAC4B,OAAO,EAAEE,QAAQ,CAAC;EAE5C,IAAMG,cAAc,GAAGtC,OAAO,CAC5B,MAAM,CAACc,6BAA6B,CAACc,WAAW,EAAE,IAAI,CAAC,CAAC,EACxD,CAACA,WAAW,CACd,CAAC;EAED,oBACEP,KAAA,CAACnB,QAAQ;IAACC,KAAK,EAAEA,KAAM;IAAA0B,QAAA,gBACrBV,IAAA,CAACX,aAAa;MAACgB,cAAc,EAAEA,cAAe;MAAAK,QAAA,eAC5CV,IAAA,CAACT,gBAAgB;QACfgB,cAAc,EAAEA,cAAe;QAC/BD,UAAU,EAAEA,UAAW;QAAAI,QAAA,eAEvBV,IAAA,CAACF,cAAc;UAAAY,QAAA,eACbR,KAAA,CAACjB,eAAe;YACduB,SAAS,EAAEA,SAAU;YACrBY,OAAO,EAAET,aAAc;YAAAD,QAAA,gBAGvBV,IAAA,CAACR,aAAa;cAAAkB,QAAA,eACZV,IAAA,CAACH,qBAAqB;gBAAAa,QAAA,eACpBV,IAAA,CAACJ,aAAa;kBAAAc,QAAA,eACZV,IAAA,CAACP,mBAAmB;oBAAAiB,QAAA,eAClBV,IAAA,CAACV,WAAW;sBAAAoB,QAAA,EAAEA;oBAAQ,CAAc;kBAAC,CAClB;gBAAC,CACT;cAAC,CACK;YAAC,CACX,CAAC,eAChBV,IAAA,CAACb,cAAc;cAACkC,OAAO,EAAEF;YAAe,CAAE,CAAC;UAAA,GAXtCP,WAYU;QAAC,CACJ;MAAC,CACD;IAAC,CACN,CAAC,eAChBZ,IAAA,CAACZ,eAAe,IAAE,CAAC;EAAA,CACX,CAAC;AAEf;AAEA,eAAee,YAAY","ignoreList":[]}
1
+ {"version":3,"file":"AppBootstrap.js","names":["React","useCallback","useMemo","useState","Provider","store","ClientBootstrap","useBroadcastLoginListener","ContextActions","ContextMenuRoot","FontBootstrap","FontsLoaded","PluginsBootstrap","AuthBootstrap","ConnectionBootstrap","getConnectOptions","createExportLogsContextAction","UserBootstrap","ServerConfigBootstrap","ThemeBootstrap","jsx","_jsx","jsxs","_jsxs","AppBootstrap","_ref","fontClassNames","pluginsUrl","getCorePlugins","serverUrl","logMetadata","children","clientOptions","_useState","_useState2","_slicedToArray","logoutCount","setLogoutCount","onLogin","undefined","onLogout","requestAnimationFrame","value","contextActions","options","actions"],"sources":["../../src/components/AppBootstrap.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from 'react';\nimport { Provider } from 'react-redux';\nimport { store } from '@deephaven/redux';\nimport '@deephaven/components/scss/BaseStyleSheet.scss';\nimport { ClientBootstrap } from '@deephaven/jsapi-bootstrap';\nimport { useBroadcastLoginListener } from '@deephaven/jsapi-components';\nimport { type Plugin } from '@deephaven/plugin';\nimport {\n ContextActions,\n ContextMenuRoot,\n FontBootstrap,\n FontsLoaded,\n} from '@deephaven/components';\nimport PluginsBootstrap from './PluginsBootstrap';\nimport AuthBootstrap from './AuthBootstrap';\nimport ConnectionBootstrap from './ConnectionBootstrap';\nimport { getConnectOptions, createExportLogsContextAction } from '../utils';\nimport UserBootstrap from './UserBootstrap';\nimport ServerConfigBootstrap from './ServerConfigBootstrap';\nimport ThemeBootstrap from './ThemeBootstrap';\n\nexport type AppBootstrapProps = {\n /** URL of the server. */\n serverUrl: string;\n\n /** Properties included in support logs. */\n logMetadata?: Record<string, unknown>;\n\n /** URL of the plugins to load. */\n pluginsUrl: string;\n\n /** The core plugins to load. */\n getCorePlugins?: () => Promise<Plugin[]>;\n\n /** Font class names to load. */\n fontClassNames?: string[];\n\n /**\n * The children to render wrapped when everything is loaded and authenticated.\n */\n children: React.ReactNode;\n};\n\n/**\n * AppBootstrap component. Handles loading the fonts, client, and authentication.\n * Will display the children when everything is loaded and authenticated.\n */\nexport function AppBootstrap({\n fontClassNames,\n pluginsUrl,\n getCorePlugins,\n serverUrl,\n logMetadata,\n children,\n}: AppBootstrapProps): JSX.Element {\n const clientOptions = useMemo(() => getConnectOptions(), []);\n\n // On logout, we reset the client and have user login again\n const [logoutCount, setLogoutCount] = useState(0);\n const onLogin = useCallback(() => undefined, []);\n const onLogout = useCallback(() => {\n requestAnimationFrame(() => {\n setLogoutCount(value => value + 1);\n });\n }, []);\n useBroadcastLoginListener(onLogin, onLogout);\n\n const contextActions = useMemo(\n () => [createExportLogsContextAction(logMetadata, true)],\n [logMetadata]\n );\n\n return (\n <Provider store={store}>\n <FontBootstrap fontClassNames={fontClassNames}>\n <PluginsBootstrap\n getCorePlugins={getCorePlugins}\n pluginsUrl={pluginsUrl}\n >\n <ThemeBootstrap>\n <ClientBootstrap\n serverUrl={serverUrl}\n options={clientOptions}\n key={logoutCount}\n >\n <AuthBootstrap>\n <ServerConfigBootstrap>\n <UserBootstrap>\n <ConnectionBootstrap>\n <FontsLoaded>{children}</FontsLoaded>\n </ConnectionBootstrap>\n </UserBootstrap>\n </ServerConfigBootstrap>\n </AuthBootstrap>\n <ContextActions actions={contextActions} />\n </ClientBootstrap>\n </ThemeBootstrap>\n </PluginsBootstrap>\n </FontBootstrap>\n <ContextMenuRoot />\n </Provider>\n );\n}\n\nexport default AppBootstrap;\n"],"mappings":"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","ignoreList":[]}
@@ -12,21 +12,18 @@ import { useObjectFetcher } from '@deephaven/jsapi-bootstrap';
12
12
  import { LoadingOverlay } from '@deephaven/components';
13
13
  import { jsx as _jsx } from "react/jsx-runtime";
14
14
  export function AppDashboards(_ref) {
15
- var {
16
- dashboards,
17
- activeDashboard,
18
- onLayoutInitialized,
19
- onGoldenLayoutChange,
20
- plugins,
21
- emptyDashboard = /*#__PURE__*/_jsx(LoadingOverlay, {
15
+ var dashboards = _ref.dashboards,
16
+ activeDashboard = _ref.activeDashboard,
17
+ onLayoutInitialized = _ref.onLayoutInitialized,
18
+ onGoldenLayoutChange = _ref.onGoldenLayoutChange,
19
+ plugins = _ref.plugins,
20
+ _ref$emptyDashboard = _ref.emptyDashboard,
21
+ emptyDashboard = _ref$emptyDashboard === void 0 ? /*#__PURE__*/_jsx(LoadingOverlay, {
22
22
  "data-testid": "app-dashboards-loading"
23
- })
24
- } = _ref;
23
+ }) : _ref$emptyDashboard;
25
24
  var fetchObject = useObjectFetcher();
26
25
  var hydratePanel = useCallback((hydrateProps, id) => {
27
- var {
28
- metadata
29
- } = hydrateProps;
26
+ var metadata = hydrateProps.metadata;
30
27
  try {
31
28
  if (metadata != null) {
32
29
  return _objectSpread(_objectSpread({
@@ -1 +1 @@
1
- {"version":3,"file":"AppDashboards.js","names":["React","useCallback","classNames","DashboardUtils","LazyDashboard","useObjectFetcher","LoadingOverlay","jsx","_jsx","AppDashboards","_ref","dashboards","activeDashboard","onLayoutInitialized","onGoldenLayoutChange","plugins","emptyDashboard","fetchObject","hydratePanel","hydrateProps","id","metadata","_objectSpread","fetch","_fetch","_asyncToGenerator","apply","arguments","localDashboardId","e","hydrate","className","children","map","d","active","isActive","layoutConfig","layoutSettings","key"],"sources":["../../src/components/AppDashboards.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport classNames from 'classnames';\nimport {\n DashboardUtils,\n type DehydratedPanelProps,\n LazyDashboard,\n} from '@deephaven/dashboard';\nimport { useObjectFetcher } from '@deephaven/jsapi-bootstrap';\nimport {\n type ItemConfig,\n type Settings as LayoutSettings,\n} from '@deephaven/golden-layout';\nimport type LayoutManager from '@deephaven/golden-layout';\nimport { LoadingOverlay } from '@deephaven/components';\n\ninterface AppDashboardsProps {\n dashboards: {\n id: string;\n layoutConfig: ItemConfig[];\n layoutSettings?: Partial<LayoutSettings>;\n key?: string;\n }[];\n activeDashboard: string;\n onLayoutInitialized?: () => void;\n onGoldenLayoutChange: (goldenLayout: LayoutManager) => void;\n plugins: JSX.Element[];\n emptyDashboard?: JSX.Element;\n}\n\nexport function AppDashboards({\n dashboards,\n activeDashboard,\n onLayoutInitialized,\n onGoldenLayoutChange,\n plugins,\n emptyDashboard = <LoadingOverlay data-testid=\"app-dashboards-loading\" />,\n}: AppDashboardsProps): JSX.Element {\n const fetchObject = useObjectFetcher();\n\n const hydratePanel = useCallback(\n (hydrateProps: DehydratedPanelProps, id: string) => {\n const { metadata } = hydrateProps;\n try {\n if (metadata != null) {\n return {\n fetch: async () => fetchObject(metadata),\n ...hydrateProps,\n localDashboardId: id,\n };\n }\n } catch (e: unknown) {\n // Ignore being unable to get the variable descriptor, do the default dashboard hydration\n }\n return DashboardUtils.hydrate(hydrateProps, id);\n },\n [fetchObject]\n );\n\n return (\n <div className=\"tab-content\">\n {dashboards.map(d => (\n <div\n key={d.id}\n className={classNames('tab-pane', {\n active: d.id === activeDashboard,\n })}\n >\n <LazyDashboard\n id={d.id}\n key={d.key}\n isActive={d.id === activeDashboard}\n emptyDashboard={emptyDashboard}\n layoutConfig={d.layoutConfig}\n layoutSettings={d.layoutSettings}\n onLayoutInitialized={onLayoutInitialized}\n onGoldenLayoutChange={onGoldenLayoutChange}\n hydrate={hydratePanel}\n plugins={plugins}\n />\n </div>\n ))}\n </div>\n );\n}\n\nexport default AppDashboards;\n"],"mappings":";;;;;;;AAAA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAC1C,OAAOC,UAAU,MAAM,YAAY;AACnC,SACEC,cAAc,EAEdC,aAAa,QACR,sBAAsB;AAC7B,SAASC,gBAAgB,QAAQ,4BAA4B;AAM7D,SAASC,cAAc,QAAQ,uBAAuB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAgBvD,OAAO,SAASC,aAAaA,CAAAC,IAAA,EAOO;EAAA,IAPN;IAC5BC,UAAU;IACVC,eAAe;IACfC,mBAAmB;IACnBC,oBAAoB;IACpBC,OAAO;IACPC,cAAc,gBAAGR,IAAA,CAACF,cAAc;MAAC,eAAY;IAAwB,CAAE;EACrD,CAAC,GAAAI,IAAA;EACnB,IAAMO,WAAW,GAAGZ,gBAAgB,CAAC,CAAC;EAEtC,IAAMa,YAAY,GAAGjB,WAAW,CAC9B,CAACkB,YAAkC,EAAEC,EAAU,KAAK;IAClD,IAAM;MAAEC;IAAS,CAAC,GAAGF,YAAY;IACjC,IAAI;MACF,IAAIE,QAAQ,IAAI,IAAI,EAAE;QACpB,OAAAC,aAAA,CAAAA,aAAA;UACEC,KAAK;YAAA,IAAAC,MAAA,GAAAC,iBAAA,CAAE;cAAA,OAAYR,WAAW,CAACI,QAAQ,CAAC;YAAA;YAAA,SAAxCE,KAAKA,CAAA;cAAA,OAAAC,MAAA,CAAAE,KAAA,OAAAC,SAAA;YAAA;YAAA,OAALJ,KAAK;UAAA;QAAmC,GACrCJ,YAAY;UACfS,gBAAgB,EAAER;QAAE;MAExB;IACF,CAAC,CAAC,OAAOS,CAAU,EAAE;MACnB;IAAA;IAEF,OAAO1B,cAAc,CAAC2B,OAAO,CAACX,YAAY,EAAEC,EAAE,CAAC;EACjD,CAAC,EACD,CAACH,WAAW,CACd,CAAC;EAED,oBACET,IAAA;IAAKuB,SAAS,EAAC,aAAa;IAAAC,QAAA,EACzBrB,UAAU,CAACsB,GAAG,CAACC,CAAC,iBACf1B,IAAA;MAEEuB,SAAS,EAAE7B,UAAU,CAAC,UAAU,EAAE;QAChCiC,MAAM,EAAED,CAAC,CAACd,EAAE,KAAKR;MACnB,CAAC,CAAE;MAAAoB,QAAA,eAEHxB,IAAA,CAACJ,aAAa;QACZgB,EAAE,EAAEc,CAAC,CAACd,EAAG;QAETgB,QAAQ,EAAEF,CAAC,CAACd,EAAE,KAAKR,eAAgB;QACnCI,cAAc,EAAEA,cAAe;QAC/BqB,YAAY,EAAEH,CAAC,CAACG,YAAa;QAC7BC,cAAc,EAAEJ,CAAC,CAACI,cAAe;QACjCzB,mBAAmB,EAAEA,mBAAoB;QACzCC,oBAAoB,EAAEA,oBAAqB;QAC3CgB,OAAO,EAAEZ,YAAa;QACtBH,OAAO,EAAEA;MAAQ,GARZmB,CAAC,CAACK,GASR;IAAC,GAhBGL,CAAC,CAACd,EAiBJ,CACN;EAAC,CACC,CAAC;AAEV;AAEA,eAAeX,aAAa","ignoreList":[]}
1
+ {"version":3,"file":"AppDashboards.js","names":["React","useCallback","classNames","DashboardUtils","LazyDashboard","useObjectFetcher","LoadingOverlay","jsx","_jsx","AppDashboards","_ref","dashboards","activeDashboard","onLayoutInitialized","onGoldenLayoutChange","plugins","_ref$emptyDashboard","emptyDashboard","fetchObject","hydratePanel","hydrateProps","id","metadata","_objectSpread","fetch","_fetch","_asyncToGenerator","apply","arguments","localDashboardId","e","hydrate","className","children","map","d","active","isActive","layoutConfig","layoutSettings","key"],"sources":["../../src/components/AppDashboards.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport classNames from 'classnames';\nimport {\n DashboardUtils,\n type DehydratedPanelProps,\n LazyDashboard,\n} from '@deephaven/dashboard';\nimport { useObjectFetcher } from '@deephaven/jsapi-bootstrap';\nimport {\n type ItemConfig,\n type Settings as LayoutSettings,\n} from '@deephaven/golden-layout';\nimport type LayoutManager from '@deephaven/golden-layout';\nimport { LoadingOverlay } from '@deephaven/components';\n\ninterface AppDashboardsProps {\n dashboards: {\n id: string;\n layoutConfig: ItemConfig[];\n layoutSettings?: Partial<LayoutSettings>;\n key?: string;\n }[];\n activeDashboard: string;\n onLayoutInitialized?: () => void;\n onGoldenLayoutChange: (goldenLayout: LayoutManager) => void;\n plugins: JSX.Element[];\n emptyDashboard?: JSX.Element;\n}\n\nexport function AppDashboards({\n dashboards,\n activeDashboard,\n onLayoutInitialized,\n onGoldenLayoutChange,\n plugins,\n emptyDashboard = <LoadingOverlay data-testid=\"app-dashboards-loading\" />,\n}: AppDashboardsProps): JSX.Element {\n const fetchObject = useObjectFetcher();\n\n const hydratePanel = useCallback(\n (hydrateProps: DehydratedPanelProps, id: string) => {\n const { metadata } = hydrateProps;\n try {\n if (metadata != null) {\n return {\n fetch: async () => fetchObject(metadata),\n ...hydrateProps,\n localDashboardId: id,\n };\n }\n } catch (e: unknown) {\n // Ignore being unable to get the variable descriptor, do the default dashboard hydration\n }\n return DashboardUtils.hydrate(hydrateProps, id);\n },\n [fetchObject]\n );\n\n return (\n <div className=\"tab-content\">\n {dashboards.map(d => (\n <div\n key={d.id}\n className={classNames('tab-pane', {\n active: d.id === activeDashboard,\n })}\n >\n <LazyDashboard\n id={d.id}\n key={d.key}\n isActive={d.id === activeDashboard}\n emptyDashboard={emptyDashboard}\n layoutConfig={d.layoutConfig}\n layoutSettings={d.layoutSettings}\n onLayoutInitialized={onLayoutInitialized}\n onGoldenLayoutChange={onGoldenLayoutChange}\n hydrate={hydratePanel}\n plugins={plugins}\n />\n </div>\n ))}\n </div>\n );\n}\n\nexport default AppDashboards;\n"],"mappings":";;;;;;;AAAA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAC1C,OAAOC,UAAU,MAAM,YAAY;AACnC,SACEC,cAAc,EAEdC,aAAa,QACR,sBAAsB;AAC7B,SAASC,gBAAgB,QAAQ,4BAA4B;AAM7D,SAASC,cAAc,QAAQ,uBAAuB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAgBvD,OAAO,SAASC,aAAaA,CAAAC,IAAA,EAOO;EAAA,IANlCC,UAAU,GAAAD,IAAA,CAAVC,UAAU;IACVC,eAAe,GAAAF,IAAA,CAAfE,eAAe;IACfC,mBAAmB,GAAAH,IAAA,CAAnBG,mBAAmB;IACnBC,oBAAoB,GAAAJ,IAAA,CAApBI,oBAAoB;IACpBC,OAAO,GAAAL,IAAA,CAAPK,OAAO;IAAAC,mBAAA,GAAAN,IAAA,CACPO,cAAc;IAAdA,cAAc,GAAAD,mBAAA,2BAAGR,IAAA,CAACF,cAAc;MAAC,eAAY;IAAwB,CAAE,CAAC,GAAAU,mBAAA;EAExE,IAAME,WAAW,GAAGb,gBAAgB,CAAC,CAAC;EAEtC,IAAMc,YAAY,GAAGlB,WAAW,CAC9B,CAACmB,YAAkC,EAAEC,EAAU,KAAK;IAClD,IAAQC,QAAQ,GAAKF,YAAY,CAAzBE,QAAQ;IAChB,IAAI;MACF,IAAIA,QAAQ,IAAI,IAAI,EAAE;QACpB,OAAAC,aAAA,CAAAA,aAAA;UACEC,KAAK;YAAA,IAAAC,MAAA,GAAAC,iBAAA,CAAE;cAAA,OAAYR,WAAW,CAACI,QAAQ,CAAC;YAAA;YAAA,SAAxCE,KAAKA,CAAA;cAAA,OAAAC,MAAA,CAAAE,KAAA,OAAAC,SAAA;YAAA;YAAA,OAALJ,KAAK;UAAA;QAAmC,GACrCJ,YAAY;UACfS,gBAAgB,EAAER;QAAE;MAExB;IACF,CAAC,CAAC,OAAOS,CAAU,EAAE;MACnB;IAAA;IAEF,OAAO3B,cAAc,CAAC4B,OAAO,CAACX,YAAY,EAAEC,EAAE,CAAC;EACjD,CAAC,EACD,CAACH,WAAW,CACd,CAAC;EAED,oBACEV,IAAA;IAAKwB,SAAS,EAAC,aAAa;IAAAC,QAAA,EACzBtB,UAAU,CAACuB,GAAG,CAACC,CAAC,iBACf3B,IAAA;MAEEwB,SAAS,EAAE9B,UAAU,CAAC,UAAU,EAAE;QAChCkC,MAAM,EAAED,CAAC,CAACd,EAAE,KAAKT;MACnB,CAAC,CAAE;MAAAqB,QAAA,eAEHzB,IAAA,CAACJ,aAAa;QACZiB,EAAE,EAAEc,CAAC,CAACd,EAAG;QAETgB,QAAQ,EAAEF,CAAC,CAACd,EAAE,KAAKT,eAAgB;QACnCK,cAAc,EAAEA,cAAe;QAC/BqB,YAAY,EAAEH,CAAC,CAACG,YAAa;QAC7BC,cAAc,EAAEJ,CAAC,CAACI,cAAe;QACjC1B,mBAAmB,EAAEA,mBAAoB;QACzCC,oBAAoB,EAAEA,oBAAqB;QAC3CiB,OAAO,EAAEZ,YAAa;QACtBJ,OAAO,EAAEA;MAAQ,GARZoB,CAAC,CAACK,GASR;IAAC,GAhBGL,CAAC,CAACd,EAiBJ,CACN;EAAC,CACC,CAAC;AAEV;AAEA,eAAeZ,aAAa","ignoreList":[]}
@@ -1,5 +1,11 @@
1
1
  function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
2
2
  function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
3
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
4
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
6
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
7
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
8
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
3
9
  import React, { useContext, useEffect, useMemo, useState } from 'react';
4
10
  import { AuthPluginAnonymous, AuthPluginParent, AuthPluginPsk } from '@deephaven/auth-plugins';
5
11
  import { LoadingOverlay } from '@deephaven/components';
@@ -22,15 +28,19 @@ var CORE_AUTH_PLUGINS = new Map([['@deephaven/auth-plugins.AuthPluginParent', {
22
28
  * AuthBootstrap component. Handles displaying the auth plugin and authenticating.
23
29
  */
24
30
  export function AuthBootstrap(_ref) {
25
- var {
26
- children
27
- } = _ref;
31
+ var children = _ref.children;
28
32
  var client = useClient();
29
33
  // `useContext` instead of `usePlugins` so that we don't have to wait for the plugins to load
30
34
  // We want to load the auth config values in parallel with the plugins
31
35
  var plugins = useContext(PluginsContext);
32
- var [authConfig, setAuthConfig] = useState();
33
- var [error, setError] = useState();
36
+ var _useState = useState(),
37
+ _useState2 = _slicedToArray(_useState, 2),
38
+ authConfig = _useState2[0],
39
+ setAuthConfig = _useState2[1];
40
+ var _useState3 = useState(),
41
+ _useState4 = _slicedToArray(_useState3, 2),
42
+ error = _useState4[0],
43
+ setError = _useState4[1];
34
44
  useEffect(function initAuthConfigValues() {
35
45
  var isCanceled = false;
36
46
  function loadAuthConfigValues() {
@@ -1 +1 @@
1
- {"version":3,"file":"AuthBootstrap.js","names":["React","useContext","useEffect","useMemo","useState","AuthPluginAnonymous","AuthPluginParent","AuthPluginPsk","LoadingOverlay","useClient","getErrorMessage","PluginsContext","getAuthPluginComponent","LoginNotifier","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","CORE_AUTH_PLUGINS","Map","AuthPlugin","AuthBootstrap","_ref","children","client","plugins","authConfig","setAuthConfig","error","setError","initAuthConfigValues","isCanceled","loadAuthConfigValues","_loadAuthConfigValues","apply","arguments","_asyncToGenerator","newAuthConfigValues","getAuthConfigValues","e","AuthComponent","undefined","isLoading","errorMessage","authConfigValues"],"sources":["../../src/components/AuthBootstrap.tsx"],"sourcesContent":["import React, { useContext, useEffect, useMemo, useState } from 'react';\nimport {\n type AuthConfigMap,\n AuthPluginAnonymous,\n AuthPluginParent,\n AuthPluginPsk,\n} from '@deephaven/auth-plugins';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { useClient } from '@deephaven/jsapi-bootstrap';\nimport { getErrorMessage } from '@deephaven/utils';\nimport { PluginsContext } from '@deephaven/plugin';\nimport { getAuthPluginComponent } from '../plugins';\nimport LoginNotifier from './LoginNotifier';\n\nexport type AuthBootstrapProps = {\n /**\n * The children to render after authentication is completed.\n */\n children: React.ReactNode;\n};\n\n/** Core auth plugins that are always loaded */\nconst CORE_AUTH_PLUGINS = new Map([\n [\n '@deephaven/auth-plugins.AuthPluginParent',\n { AuthPlugin: AuthPluginParent },\n ],\n ['@deephaven/auth-plugins.AuthPluginPsk', { AuthPlugin: AuthPluginPsk }],\n [\n '@deephaven/auth-plugins.AuthPluginAnonymous',\n { AuthPlugin: AuthPluginAnonymous },\n ],\n]);\n\n/**\n * AuthBootstrap component. Handles displaying the auth plugin and authenticating.\n */\nexport function AuthBootstrap({ children }: AuthBootstrapProps): JSX.Element {\n const client = useClient();\n // `useContext` instead of `usePlugins` so that we don't have to wait for the plugins to load\n // We want to load the auth config values in parallel with the plugins\n const plugins = useContext(PluginsContext);\n const [authConfig, setAuthConfig] = useState<AuthConfigMap>();\n const [error, setError] = useState<unknown>();\n\n useEffect(\n function initAuthConfigValues() {\n let isCanceled = false;\n async function loadAuthConfigValues(): Promise<void> {\n try {\n const newAuthConfigValues = (await client.getAuthConfigValues()) as [\n string,\n string,\n ][];\n if (!isCanceled) {\n setAuthConfig(new Map(newAuthConfigValues));\n }\n } catch (e) {\n if (!isCanceled) {\n setError(e);\n }\n }\n }\n loadAuthConfigValues();\n return () => {\n isCanceled = true;\n };\n },\n [client]\n );\n\n const AuthComponent = useMemo(() => {\n if (plugins == null || authConfig == null) {\n return undefined;\n }\n\n try {\n return getAuthPluginComponent(plugins, authConfig, CORE_AUTH_PLUGINS);\n } catch (e) {\n setError(e);\n }\n }, [authConfig, plugins]);\n\n const isLoading = AuthComponent == null || authConfig == null;\n\n if (isLoading || error != null) {\n return (\n <LoadingOverlay\n isLoading={isLoading && error == null}\n errorMessage={getErrorMessage(error)}\n data-testid=\"auth-bootstrap-loading-error\"\n />\n );\n }\n return (\n <AuthComponent authConfigValues={authConfig}>\n <>\n <LoginNotifier />\n {children}\n </>\n </AuthComponent>\n );\n}\n\nexport default AuthBootstrap;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"AuthBootstrap.js","names":["React","useContext","useEffect","useMemo","useState","AuthPluginAnonymous","AuthPluginParent","AuthPluginPsk","LoadingOverlay","useClient","getErrorMessage","PluginsContext","getAuthPluginComponent","LoginNotifier","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","CORE_AUTH_PLUGINS","Map","AuthPlugin","AuthBootstrap","_ref","children","client","plugins","_useState","_useState2","_slicedToArray","authConfig","setAuthConfig","_useState3","_useState4","error","setError","initAuthConfigValues","isCanceled","loadAuthConfigValues","_loadAuthConfigValues","apply","arguments","_asyncToGenerator","newAuthConfigValues","getAuthConfigValues","e","AuthComponent","undefined","isLoading","errorMessage","authConfigValues"],"sources":["../../src/components/AuthBootstrap.tsx"],"sourcesContent":["import React, { useContext, useEffect, useMemo, useState } from 'react';\nimport {\n type AuthConfigMap,\n AuthPluginAnonymous,\n AuthPluginParent,\n AuthPluginPsk,\n} from '@deephaven/auth-plugins';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { useClient } from '@deephaven/jsapi-bootstrap';\nimport { getErrorMessage } from '@deephaven/utils';\nimport { PluginsContext } from '@deephaven/plugin';\nimport { getAuthPluginComponent } from '../plugins';\nimport LoginNotifier from './LoginNotifier';\n\nexport type AuthBootstrapProps = {\n /**\n * The children to render after authentication is completed.\n */\n children: React.ReactNode;\n};\n\n/** Core auth plugins that are always loaded */\nconst CORE_AUTH_PLUGINS = new Map([\n [\n '@deephaven/auth-plugins.AuthPluginParent',\n { AuthPlugin: AuthPluginParent },\n ],\n ['@deephaven/auth-plugins.AuthPluginPsk', { AuthPlugin: AuthPluginPsk }],\n [\n '@deephaven/auth-plugins.AuthPluginAnonymous',\n { AuthPlugin: AuthPluginAnonymous },\n ],\n]);\n\n/**\n * AuthBootstrap component. Handles displaying the auth plugin and authenticating.\n */\nexport function AuthBootstrap({ children }: AuthBootstrapProps): JSX.Element {\n const client = useClient();\n // `useContext` instead of `usePlugins` so that we don't have to wait for the plugins to load\n // We want to load the auth config values in parallel with the plugins\n const plugins = useContext(PluginsContext);\n const [authConfig, setAuthConfig] = useState<AuthConfigMap>();\n const [error, setError] = useState<unknown>();\n\n useEffect(\n function initAuthConfigValues() {\n let isCanceled = false;\n async function loadAuthConfigValues(): Promise<void> {\n try {\n const newAuthConfigValues = (await client.getAuthConfigValues()) as [\n string,\n string,\n ][];\n if (!isCanceled) {\n setAuthConfig(new Map(newAuthConfigValues));\n }\n } catch (e) {\n if (!isCanceled) {\n setError(e);\n }\n }\n }\n loadAuthConfigValues();\n return () => {\n isCanceled = true;\n };\n },\n [client]\n );\n\n const AuthComponent = useMemo(() => {\n if (plugins == null || authConfig == null) {\n return undefined;\n }\n\n try {\n return getAuthPluginComponent(plugins, authConfig, CORE_AUTH_PLUGINS);\n } catch (e) {\n setError(e);\n }\n }, [authConfig, plugins]);\n\n const isLoading = AuthComponent == null || authConfig == null;\n\n if (isLoading || error != null) {\n return (\n <LoadingOverlay\n isLoading={isLoading && error == null}\n errorMessage={getErrorMessage(error)}\n data-testid=\"auth-bootstrap-loading-error\"\n />\n );\n }\n return (\n <AuthComponent authConfigValues={authConfig}>\n <>\n <LoginNotifier />\n {children}\n </>\n </AuthComponent>\n );\n}\n\nexport default AuthBootstrap;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectionBootstrap.d.ts","sourceRoot":"","sources":["../../src/components/ConnectionBootstrap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAyBzE,MAAM,MAAM,wBAAwB,GAAG;IACrC;;;OAGG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,GACT,EAAE,wBAAwB,GAAG,GAAG,CAAC,OAAO,CA2MxC;AAED,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"ConnectionBootstrap.d.ts","sourceRoot":"","sources":["../../src/components/ConnectionBootstrap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AA4BzE,MAAM,MAAM,wBAAwB,GAAG;IACrC;;;OAGG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,GACT,EAAE,wBAAwB,GAAG,GAAG,CAAC,OAAO,CAgOxC;AAED,eAAe,mBAAmB,CAAC"}
@@ -1,9 +1,16 @@
1
1
  function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
2
2
  function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
3
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
4
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
6
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
7
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
8
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
3
9
  import React, { useCallback, useEffect, useMemo, useState } from 'react';
4
10
  import { BasicModal, DebouncedModal, InfoModal, LoadingOverlay, LoadingSpinner } from '@deephaven/components';
5
- import { ObjectFetcherContext, ObjectFetchManagerContext, sanitizeVariableDescriptor, useApi, useClient } from '@deephaven/jsapi-bootstrap';
11
+ import { VariableDefinitionFinderContext, ObjectFetcherContext, ObjectFetchManagerContext, sanitizeVariableDescriptor, useApi, useClient } from '@deephaven/jsapi-bootstrap';
6
12
  import Log from '@deephaven/log';
13
+ import { fetchVariableDefinitionByPredicate } from '@deephaven/jsapi-utils';
7
14
  import { assertNotNull } from '@deephaven/utils';
8
15
  import { vsDebugDisconnect } from '@deephaven/icons';
9
16
  import ConnectionContext from "./ConnectionContext.js";
@@ -13,14 +20,21 @@ var log = Log.module('@deephaven/app-utils.ConnectionBootstrap');
13
20
  * ConnectionBootstrap component. Handles initializing the connection.
14
21
  */
15
22
  export function ConnectionBootstrap(_ref) {
16
- var {
17
- children
18
- } = _ref;
23
+ var children = _ref.children;
19
24
  var api = useApi();
20
25
  var client = useClient();
21
- var [error, setError] = useState();
22
- var [connection, setConnection] = useState();
23
- var [connectionState, setConnectionState] = useState('connecting');
26
+ var _useState = useState(),
27
+ _useState2 = _slicedToArray(_useState, 2),
28
+ error = _useState2[0],
29
+ setError = _useState2[1];
30
+ var _useState3 = useState(),
31
+ _useState4 = _slicedToArray(_useState3, 2),
32
+ connection = _useState4[0],
33
+ setConnection = _useState4[1];
34
+ var _useState5 = useState('connecting'),
35
+ _useState6 = _slicedToArray(_useState5, 2),
36
+ connectionState = _useState6[0],
37
+ setConnectionState = _useState6[1];
24
38
  var isAuthFailed = connectionState === 'failed';
25
39
  var isShutdown = connectionState === 'shutdown';
26
40
  var isReconnecting = connectionState === 'reconnecting';
@@ -59,9 +73,7 @@ export function ConnectionBootstrap(_ref) {
59
73
 
60
74
  // handles the disconnect event
61
75
  function handleDisconnect(event) {
62
- var {
63
- detail
64
- } = event;
76
+ var detail = event.detail;
65
77
  log.info('Disconnect', "".concat(JSON.stringify(detail)));
66
78
  setConnectionState('reconnecting');
67
79
  }
@@ -73,9 +85,7 @@ export function ConnectionBootstrap(_ref) {
73
85
 
74
86
  // handles the reconnect event
75
87
  function handleReconnect(event) {
76
- var {
77
- detail
78
- } = event;
88
+ var detail = event.detail;
79
89
  log.info('Reconnect', "".concat(JSON.stringify(detail)));
80
90
  setConnectionState('connected');
81
91
  }
@@ -87,9 +97,7 @@ export function ConnectionBootstrap(_ref) {
87
97
 
88
98
  // handles the shutdown event
89
99
  function handleShutdown(event) {
90
- var {
91
- detail
92
- } = event;
100
+ var detail = event.detail;
93
101
  log.info('Shutdown', "".concat(JSON.stringify(detail)));
94
102
  setError("Server shutdown: ".concat(detail !== null && detail !== void 0 ? detail : 'Unknown reason'));
95
103
  setConnectionState('shutdown');
@@ -102,9 +110,7 @@ export function ConnectionBootstrap(_ref) {
102
110
 
103
111
  // handles the auth failed event
104
112
  function handleAuthFailed(event) {
105
- var {
106
- detail
107
- } = event;
113
+ var detail = event.detail;
108
114
  log.warn('Reconnect authentication failed', "".concat(JSON.stringify(detail)));
109
115
  setError("Reconnect authentication failed: ".concat(detail !== null && detail !== void 0 ? detail : 'Unknown reason'));
110
116
  setConnectionState('failed');
@@ -124,6 +130,21 @@ export function ConnectionBootstrap(_ref) {
124
130
  return _ref2.apply(this, arguments);
125
131
  };
126
132
  }(), [connection]);
133
+ var variableDefinitionFinder = useCallback(/*#__PURE__*/function () {
134
+ var _ref3 = _asyncToGenerator(function* (predicate) {
135
+ assertNotNull(connection, 'No connection available to find variable with');
136
+ // Core exposes a single connection, so the worker descriptor is unused.
137
+ try {
138
+ return yield fetchVariableDefinitionByPredicate(connection, predicate);
139
+ } catch (_unused) {
140
+ // Treat "not found" and timeouts uniformly as absent.
141
+ return null;
142
+ }
143
+ });
144
+ return function (_x2) {
145
+ return _ref3.apply(this, arguments);
146
+ };
147
+ }(), [connection]);
127
148
 
128
149
  /** We don't really need to do anything fancy in Core to manage an object, just fetch it */
129
150
  var objectManager = useMemo(() => ({
@@ -154,25 +175,28 @@ export function ConnectionBootstrap(_ref) {
154
175
  value: connection !== null && connection !== void 0 ? connection : null,
155
176
  children: /*#__PURE__*/_jsx(ObjectFetcherContext.Provider, {
156
177
  value: objectFetcher,
157
- children: /*#__PURE__*/_jsxs(ObjectFetchManagerContext.Provider, {
158
- value: objectManager,
159
- children: [children, /*#__PURE__*/_jsx(DebouncedModal, {
160
- isOpen: isReconnecting,
161
- debounceMs: 1000,
162
- children: /*#__PURE__*/_jsx(InfoModal, {
163
- icon: vsDebugDisconnect,
164
- title: /*#__PURE__*/_jsxs(_Fragment, {
165
- children: [/*#__PURE__*/_jsx(LoadingSpinner, {}), " Attempting to reconnect..."]
166
- }),
167
- subtitle: "Please check your network connection."
168
- })
169
- }), /*#__PURE__*/_jsx(BasicModal, {
170
- confirmButtonText: "Refresh",
171
- onConfirm: handleRefresh,
172
- isOpen: isAuthFailed,
173
- headerText: "Authentication failed",
174
- bodyText: "Credentials are invalid. Please refresh your browser to try and reconnect."
175
- })]
178
+ children: /*#__PURE__*/_jsx(VariableDefinitionFinderContext.Provider, {
179
+ value: variableDefinitionFinder,
180
+ children: /*#__PURE__*/_jsxs(ObjectFetchManagerContext.Provider, {
181
+ value: objectManager,
182
+ children: [children, /*#__PURE__*/_jsx(DebouncedModal, {
183
+ isOpen: isReconnecting,
184
+ debounceMs: 1000,
185
+ children: /*#__PURE__*/_jsx(InfoModal, {
186
+ icon: vsDebugDisconnect,
187
+ title: /*#__PURE__*/_jsxs(_Fragment, {
188
+ children: [/*#__PURE__*/_jsx(LoadingSpinner, {}), " Attempting to reconnect..."]
189
+ }),
190
+ subtitle: "Please check your network connection."
191
+ })
192
+ }), /*#__PURE__*/_jsx(BasicModal, {
193
+ confirmButtonText: "Refresh",
194
+ onConfirm: handleRefresh,
195
+ isOpen: isAuthFailed,
196
+ headerText: "Authentication failed",
197
+ bodyText: "Credentials are invalid. Please refresh your browser to try and reconnect."
198
+ })]
199
+ })
176
200
  })
177
201
  })
178
202
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectionBootstrap.js","names":["React","useCallback","useEffect","useMemo","useState","BasicModal","DebouncedModal","InfoModal","LoadingOverlay","LoadingSpinner","ObjectFetcherContext","ObjectFetchManagerContext","sanitizeVariableDescriptor","useApi","useClient","Log","assertNotNull","vsDebugDisconnect","ConnectionContext","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","ConnectionBootstrap","_ref","children","api","client","error","setError","connection","setConnection","connectionState","setConnectionState","isAuthFailed","isShutdown","isReconnecting","isNotConnecting","initConnection","isCanceled","loadConnection","_loadConnection","apply","arguments","_asyncToGenerator","newConnection","getAsIdeConnection","e","listenForDisconnect","handleDisconnect","event","detail","info","concat","JSON","stringify","removerFn","addEventListener","IdeConnection","EVENT_DISCONNECT","listenForReconnect","handleReconnect","CoreClient","EVENT_RECONNECT","listenForShutdown","handleShutdown","EVENT_SHUTDOWN","listenForAuthFailed","handleAuthFailed","warn","EVENT_RECONNECT_AUTH_FAILED","objectFetcher","_ref2","descriptor","Error","getObject","_x","objectManager","subscribe","onUpdate","fetch","status","handleRefresh","window","location","reload","isLoading","errorMessage","undefined","Provider","value","isOpen","debounceMs","icon","title","subtitle","confirmButtonText","onConfirm","headerText","bodyText"],"sources":["../../src/components/ConnectionBootstrap.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n BasicModal,\n DebouncedModal,\n InfoModal,\n LoadingOverlay,\n LoadingSpinner,\n} from '@deephaven/components';\nimport {\n ObjectFetcherContext,\n type ObjectFetchManager,\n ObjectFetchManagerContext,\n sanitizeVariableDescriptor,\n type UriVariableDescriptor,\n useApi,\n useClient,\n} from '@deephaven/jsapi-bootstrap';\nimport type { dh } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { assertNotNull } from '@deephaven/utils';\nimport { vsDebugDisconnect } from '@deephaven/icons';\nimport ConnectionContext from './ConnectionContext';\n\nconst log = Log.module('@deephaven/app-utils.ConnectionBootstrap');\n\nexport type ConnectionBootstrapProps = {\n /**\n * The children to render wrapped with the ConnectionContext.\n * Will not render children until the connection is created.\n */\n children: React.ReactNode;\n};\n\n/**\n * ConnectionBootstrap component. Handles initializing the connection.\n */\nexport function ConnectionBootstrap({\n children,\n}: ConnectionBootstrapProps): JSX.Element {\n const api = useApi();\n const client = useClient();\n const [error, setError] = useState<unknown>();\n const [connection, setConnection] = useState<dh.IdeConnection>();\n const [connectionState, setConnectionState] = useState<\n | 'not_connecting'\n | 'connecting'\n | 'connected'\n | 'reconnecting'\n | 'failed'\n | 'shutdown'\n >('connecting');\n const isAuthFailed = connectionState === 'failed';\n const isShutdown = connectionState === 'shutdown';\n const isReconnecting = connectionState === 'reconnecting';\n const isNotConnecting = connectionState === 'not_connecting';\n\n useEffect(\n function initConnection() {\n let isCanceled = false;\n async function loadConnection(): Promise<void> {\n try {\n const newConnection = await client.getAsIdeConnection();\n if (isCanceled) {\n return;\n }\n setConnection(newConnection);\n setConnectionState('connected');\n } catch (e) {\n if (isCanceled) {\n return;\n }\n setError(e);\n setConnectionState('not_connecting');\n }\n }\n loadConnection();\n return () => {\n isCanceled = true;\n };\n },\n [api, client]\n );\n\n useEffect(\n function listenForDisconnect() {\n if (connection == null || isShutdown) return;\n\n // handles the disconnect event\n function handleDisconnect(event: dh.Event<unknown>): void {\n const { detail } = event;\n log.info('Disconnect', `${JSON.stringify(detail)}`);\n setConnectionState('reconnecting');\n }\n const removerFn = connection.addEventListener(\n api.IdeConnection.EVENT_DISCONNECT,\n handleDisconnect\n );\n\n return removerFn;\n },\n [api, connection, isShutdown]\n );\n\n useEffect(\n function listenForReconnect() {\n if (connection == null || isShutdown) return;\n\n // handles the reconnect event\n function handleReconnect(event: dh.Event<unknown>): void {\n const { detail } = event;\n log.info('Reconnect', `${JSON.stringify(detail)}`);\n setConnectionState('connected');\n }\n const removerFn = connection.addEventListener(\n api.CoreClient.EVENT_RECONNECT,\n handleReconnect\n );\n\n return removerFn;\n },\n [api, connection, isShutdown]\n );\n\n useEffect(\n function listenForShutdown() {\n if (connection == null) return;\n\n // handles the shutdown event\n function handleShutdown(event: dh.Event<unknown>): void {\n const { detail } = event;\n log.info('Shutdown', `${JSON.stringify(detail)}`);\n setError(`Server shutdown: ${detail ?? 'Unknown reason'}`);\n setConnectionState('shutdown');\n }\n const removerFn = connection.addEventListener(\n api.IdeConnection.EVENT_SHUTDOWN,\n handleShutdown\n );\n\n return removerFn;\n },\n [api, connection]\n );\n\n useEffect(\n function listenForAuthFailed() {\n if (connection == null || isShutdown) return;\n\n // handles the auth failed event\n function handleAuthFailed(event: dh.Event<unknown>): void {\n const { detail } = event;\n log.warn(\n 'Reconnect authentication failed',\n `${JSON.stringify(detail)}`\n );\n setError(\n `Reconnect authentication failed: ${detail ?? 'Unknown reason'}`\n );\n setConnectionState('failed');\n }\n const removerFn = connection.addEventListener(\n api.CoreClient.EVENT_RECONNECT_AUTH_FAILED,\n handleAuthFailed\n );\n\n return removerFn;\n },\n [api, connection, isShutdown]\n );\n\n const objectFetcher = useCallback(\n async (descriptor: dh.ide.VariableDescriptor | UriVariableDescriptor) => {\n assertNotNull(connection, 'No connection available to fetch object with');\n if (typeof descriptor === 'string') {\n throw new Error('No URI resolvers available in Core');\n }\n return connection.getObject(sanitizeVariableDescriptor(descriptor));\n },\n [connection]\n );\n\n /** We don't really need to do anything fancy in Core to manage an object, just fetch it */\n const objectManager: ObjectFetchManager = useMemo(\n () => ({\n subscribe: (descriptor, onUpdate) => {\n // We send an update with the fetch right away\n onUpdate({\n fetch: () => objectFetcher(descriptor),\n status: 'ready',\n });\n return () => {\n // no-op\n // For Core, if the server dies then we can't reconnect anyway, so no need to bother listening for subscription or cleaning up\n };\n },\n }),\n [objectFetcher]\n );\n\n function handleRefresh(): void {\n log.info('Refreshing application');\n window.location.reload();\n }\n\n if (isShutdown || connectionState === 'connecting' || isNotConnecting) {\n return (\n <LoadingOverlay\n data-testid=\"connection-bootstrap-loading\"\n isLoading={error == null}\n errorMessage={error != null ? `${error}` : undefined}\n />\n );\n }\n\n return (\n <ConnectionContext.Provider value={connection ?? null}>\n <ObjectFetcherContext.Provider value={objectFetcher}>\n <ObjectFetchManagerContext.Provider value={objectManager}>\n {children}\n <DebouncedModal isOpen={isReconnecting} debounceMs={1000}>\n <InfoModal\n icon={vsDebugDisconnect}\n title={\n <>\n <LoadingSpinner /> Attempting to reconnect...\n </>\n }\n subtitle=\"Please check your network connection.\"\n />\n </DebouncedModal>\n <BasicModal\n confirmButtonText=\"Refresh\"\n onConfirm={handleRefresh}\n isOpen={isAuthFailed}\n headerText=\"Authentication failed\"\n bodyText=\"Credentials are invalid. Please refresh your browser to try and reconnect.\"\n />\n </ObjectFetchManagerContext.Provider>\n </ObjectFetcherContext.Provider>\n </ConnectionContext.Provider>\n );\n}\n\nexport default ConnectionBootstrap;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ConnectionBootstrap.js","names":["React","useCallback","useEffect","useMemo","useState","BasicModal","DebouncedModal","InfoModal","LoadingOverlay","LoadingSpinner","VariableDefinitionFinderContext","ObjectFetcherContext","ObjectFetchManagerContext","sanitizeVariableDescriptor","useApi","useClient","Log","fetchVariableDefinitionByPredicate","assertNotNull","vsDebugDisconnect","ConnectionContext","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","ConnectionBootstrap","_ref","children","api","client","_useState","_useState2","_slicedToArray","error","setError","_useState3","_useState4","connection","setConnection","_useState5","_useState6","connectionState","setConnectionState","isAuthFailed","isShutdown","isReconnecting","isNotConnecting","initConnection","isCanceled","loadConnection","_loadConnection","apply","arguments","_asyncToGenerator","newConnection","getAsIdeConnection","e","listenForDisconnect","handleDisconnect","event","detail","info","concat","JSON","stringify","removerFn","addEventListener","IdeConnection","EVENT_DISCONNECT","listenForReconnect","handleReconnect","CoreClient","EVENT_RECONNECT","listenForShutdown","handleShutdown","EVENT_SHUTDOWN","listenForAuthFailed","handleAuthFailed","warn","EVENT_RECONNECT_AUTH_FAILED","objectFetcher","_ref2","descriptor","Error","getObject","_x","variableDefinitionFinder","_ref3","predicate","_unused","_x2","objectManager","subscribe","onUpdate","fetch","status","handleRefresh","window","location","reload","isLoading","errorMessage","undefined","Provider","value","isOpen","debounceMs","icon","title","subtitle","confirmButtonText","onConfirm","headerText","bodyText"],"sources":["../../src/components/ConnectionBootstrap.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n BasicModal,\n DebouncedModal,\n InfoModal,\n LoadingOverlay,\n LoadingSpinner,\n} from '@deephaven/components';\nimport {\n type VariableDefinitionFinder,\n VariableDefinitionFinderContext,\n ObjectFetcherContext,\n type ObjectFetchManager,\n ObjectFetchManagerContext,\n sanitizeVariableDescriptor,\n type UriVariableDescriptor,\n useApi,\n useClient,\n} from '@deephaven/jsapi-bootstrap';\nimport type { dh } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { fetchVariableDefinitionByPredicate } from '@deephaven/jsapi-utils';\nimport { assertNotNull } from '@deephaven/utils';\nimport { vsDebugDisconnect } from '@deephaven/icons';\nimport ConnectionContext from './ConnectionContext';\n\nconst log = Log.module('@deephaven/app-utils.ConnectionBootstrap');\n\nexport type ConnectionBootstrapProps = {\n /**\n * The children to render wrapped with the ConnectionContext.\n * Will not render children until the connection is created.\n */\n children: React.ReactNode;\n};\n\n/**\n * ConnectionBootstrap component. Handles initializing the connection.\n */\nexport function ConnectionBootstrap({\n children,\n}: ConnectionBootstrapProps): JSX.Element {\n const api = useApi();\n const client = useClient();\n const [error, setError] = useState<unknown>();\n const [connection, setConnection] = useState<dh.IdeConnection>();\n const [connectionState, setConnectionState] = useState<\n | 'not_connecting'\n | 'connecting'\n | 'connected'\n | 'reconnecting'\n | 'failed'\n | 'shutdown'\n >('connecting');\n const isAuthFailed = connectionState === 'failed';\n const isShutdown = connectionState === 'shutdown';\n const isReconnecting = connectionState === 'reconnecting';\n const isNotConnecting = connectionState === 'not_connecting';\n\n useEffect(\n function initConnection() {\n let isCanceled = false;\n async function loadConnection(): Promise<void> {\n try {\n const newConnection = await client.getAsIdeConnection();\n if (isCanceled) {\n return;\n }\n setConnection(newConnection);\n setConnectionState('connected');\n } catch (e) {\n if (isCanceled) {\n return;\n }\n setError(e);\n setConnectionState('not_connecting');\n }\n }\n loadConnection();\n return () => {\n isCanceled = true;\n };\n },\n [api, client]\n );\n\n useEffect(\n function listenForDisconnect() {\n if (connection == null || isShutdown) return;\n\n // handles the disconnect event\n function handleDisconnect(event: dh.Event<unknown>): void {\n const { detail } = event;\n log.info('Disconnect', `${JSON.stringify(detail)}`);\n setConnectionState('reconnecting');\n }\n const removerFn = connection.addEventListener(\n api.IdeConnection.EVENT_DISCONNECT,\n handleDisconnect\n );\n\n return removerFn;\n },\n [api, connection, isShutdown]\n );\n\n useEffect(\n function listenForReconnect() {\n if (connection == null || isShutdown) return;\n\n // handles the reconnect event\n function handleReconnect(event: dh.Event<unknown>): void {\n const { detail } = event;\n log.info('Reconnect', `${JSON.stringify(detail)}`);\n setConnectionState('connected');\n }\n const removerFn = connection.addEventListener(\n api.CoreClient.EVENT_RECONNECT,\n handleReconnect\n );\n\n return removerFn;\n },\n [api, connection, isShutdown]\n );\n\n useEffect(\n function listenForShutdown() {\n if (connection == null) return;\n\n // handles the shutdown event\n function handleShutdown(event: dh.Event<unknown>): void {\n const { detail } = event;\n log.info('Shutdown', `${JSON.stringify(detail)}`);\n setError(`Server shutdown: ${detail ?? 'Unknown reason'}`);\n setConnectionState('shutdown');\n }\n const removerFn = connection.addEventListener(\n api.IdeConnection.EVENT_SHUTDOWN,\n handleShutdown\n );\n\n return removerFn;\n },\n [api, connection]\n );\n\n useEffect(\n function listenForAuthFailed() {\n if (connection == null || isShutdown) return;\n\n // handles the auth failed event\n function handleAuthFailed(event: dh.Event<unknown>): void {\n const { detail } = event;\n log.warn(\n 'Reconnect authentication failed',\n `${JSON.stringify(detail)}`\n );\n setError(\n `Reconnect authentication failed: ${detail ?? 'Unknown reason'}`\n );\n setConnectionState('failed');\n }\n const removerFn = connection.addEventListener(\n api.CoreClient.EVENT_RECONNECT_AUTH_FAILED,\n handleAuthFailed\n );\n\n return removerFn;\n },\n [api, connection, isShutdown]\n );\n\n const objectFetcher = useCallback(\n async (descriptor: dh.ide.VariableDescriptor | UriVariableDescriptor) => {\n assertNotNull(connection, 'No connection available to fetch object with');\n if (typeof descriptor === 'string') {\n throw new Error('No URI resolvers available in Core');\n }\n return connection.getObject(sanitizeVariableDescriptor(descriptor));\n },\n [connection]\n );\n\n const variableDefinitionFinder = useCallback<VariableDefinitionFinder>(\n async predicate => {\n assertNotNull(\n connection,\n 'No connection available to find variable with'\n );\n // Core exposes a single connection, so the worker descriptor is unused.\n try {\n return await fetchVariableDefinitionByPredicate(connection, predicate);\n } catch {\n // Treat \"not found\" and timeouts uniformly as absent.\n return null;\n }\n },\n [connection]\n );\n\n /** We don't really need to do anything fancy in Core to manage an object, just fetch it */\n const objectManager: ObjectFetchManager = useMemo(\n () => ({\n subscribe: (descriptor, onUpdate) => {\n // We send an update with the fetch right away\n onUpdate({\n fetch: () => objectFetcher(descriptor),\n status: 'ready',\n });\n return () => {\n // no-op\n // For Core, if the server dies then we can't reconnect anyway, so no need to bother listening for subscription or cleaning up\n };\n },\n }),\n [objectFetcher]\n );\n\n function handleRefresh(): void {\n log.info('Refreshing application');\n window.location.reload();\n }\n\n if (isShutdown || connectionState === 'connecting' || isNotConnecting) {\n return (\n <LoadingOverlay\n data-testid=\"connection-bootstrap-loading\"\n isLoading={error == null}\n errorMessage={error != null ? `${error}` : undefined}\n />\n );\n }\n\n return (\n <ConnectionContext.Provider value={connection ?? null}>\n <ObjectFetcherContext.Provider value={objectFetcher}>\n <VariableDefinitionFinderContext.Provider\n value={variableDefinitionFinder}\n >\n <ObjectFetchManagerContext.Provider value={objectManager}>\n {children}\n <DebouncedModal isOpen={isReconnecting} debounceMs={1000}>\n <InfoModal\n icon={vsDebugDisconnect}\n title={\n <>\n <LoadingSpinner /> Attempting to reconnect...\n </>\n }\n subtitle=\"Please check your network connection.\"\n />\n </DebouncedModal>\n <BasicModal\n confirmButtonText=\"Refresh\"\n onConfirm={handleRefresh}\n isOpen={isAuthFailed}\n headerText=\"Authentication failed\"\n bodyText=\"Credentials are invalid. Please refresh your browser to try and reconnect.\"\n />\n </ObjectFetchManagerContext.Provider>\n </VariableDefinitionFinderContext.Provider>\n </ObjectFetcherContext.Provider>\n </ConnectionContext.Provider>\n );\n}\n\nexport default ConnectionBootstrap;\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,11 @@
1
1
  function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
2
2
  function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
3
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
4
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
6
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
7
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
8
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
3
9
  import React, { useEffect, useState } from 'react';
4
10
  import { PluginsContext, isMultiPlugin } from '@deephaven/plugin';
5
11
  import { loadModulePlugins } from "../plugins/index.js";
@@ -8,12 +14,13 @@ import { jsx as _jsx } from "react/jsx-runtime";
8
14
  * PluginsBootstrap component. Handles loading the plugins.
9
15
  */
10
16
  export function PluginsBootstrap(_ref) {
11
- var {
12
- pluginsUrl,
13
- getCorePlugins,
14
- children
15
- } = _ref;
16
- var [plugins, setPlugins] = useState(null);
17
+ var pluginsUrl = _ref.pluginsUrl,
18
+ getCorePlugins = _ref.getCorePlugins,
19
+ children = _ref.children;
20
+ var _useState = useState(null),
21
+ _useState2 = _slicedToArray(_useState, 2),
22
+ plugins = _useState2[0],
23
+ setPlugins = _useState2[1];
17
24
  useEffect(function initPlugins() {
18
25
  var isCanceled = false;
19
26
  function loadPlugins() {
@@ -1 +1 @@
1
- {"version":3,"file":"PluginsBootstrap.js","names":["React","useEffect","useState","PluginsContext","isMultiPlugin","loadModulePlugins","jsx","_jsx","PluginsBootstrap","_ref","pluginsUrl","getCorePlugins","children","plugins","setPlugins","initPlugins","isCanceled","loadPlugins","_loadPlugins","apply","arguments","_asyncToGenerator","_yield$getCorePlugins","corePlugins","pluginModules","corePluginPairs","flatMap","plugin","map","innerPlugin","name","Map","Provider","value"],"sources":["../../src/components/PluginsBootstrap.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport {\n type Plugin,\n type PluginModuleMap,\n PluginsContext,\n isMultiPlugin,\n type MultiPlugin,\n} from '@deephaven/plugin';\nimport { loadModulePlugins } from '../plugins';\n\nexport type PluginsBootstrapProps = {\n /**\n * Base URL of the plugins to load.\n */\n pluginsUrl: string;\n\n /**\n * The core plugins to load.\n * Can include MultiPlugin instances which will be flattened.\n */\n getCorePlugins?: () => Promise<(Plugin | MultiPlugin)[]>;\n\n /**\n * The children to render wrapped with the PluginsContext.\n * Note that it renders the children even if the plugins aren't loaded yet.\n */\n children: React.ReactNode;\n};\n\n/**\n * PluginsBootstrap component. Handles loading the plugins.\n */\nexport function PluginsBootstrap({\n pluginsUrl,\n getCorePlugins,\n children,\n}: PluginsBootstrapProps): JSX.Element {\n const [plugins, setPlugins] = useState<PluginModuleMap | null>(null);\n useEffect(\n function initPlugins() {\n let isCanceled = false;\n async function loadPlugins(): Promise<void> {\n const corePlugins = (await getCorePlugins?.()) ?? [];\n const pluginModules = await loadModulePlugins(pluginsUrl);\n if (!isCanceled) {\n // Flatten MultiPlugins in core plugins\n const corePluginPairs = corePlugins.flatMap(plugin => {\n if (isMultiPlugin(plugin)) {\n return plugin.plugins.map(\n innerPlugin => [innerPlugin.name, innerPlugin] as const\n );\n }\n return [[plugin.name, plugin] as const];\n });\n setPlugins(new Map([...corePluginPairs, ...pluginModules]));\n }\n }\n loadPlugins();\n return () => {\n isCanceled = true;\n };\n },\n [pluginsUrl, getCorePlugins]\n );\n\n return (\n <PluginsContext.Provider value={plugins}>\n {children}\n </PluginsContext.Provider>\n );\n}\n\nexport default PluginsBootstrap;\n"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAClD,SAGEC,cAAc,EACdC,aAAa,QAER,mBAAmB;AAAC,SAClBC,iBAAiB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAqB1B;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAAC,IAAA,EAIO;EAAA,IAJN;IAC/BC,UAAU;IACVC,cAAc;IACdC;EACqB,CAAC,GAAAH,IAAA;EACtB,IAAM,CAACI,OAAO,EAAEC,UAAU,CAAC,GAAGZ,QAAQ,CAAyB,IAAI,CAAC;EACpED,SAAS,CACP,SAASc,WAAWA,CAAA,EAAG;IACrB,IAAIC,UAAU,GAAG,KAAK;IAAC,SACRC,WAAWA,CAAA;MAAA,OAAAC,YAAA,CAAAC,KAAA,OAAAC,SAAA;IAAA;IAAA,SAAAF,aAAA;MAAAA,YAAA,GAAAG,iBAAA,CAA1B,aAA4C;QAAA,IAAAC,qBAAA;QAC1C,IAAMC,WAAW,IAAAD,qBAAA,SAAUX,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAG,CAAC,cAAAW,qBAAA,cAAAA,qBAAA,GAAK,EAAE;QACpD,IAAME,aAAa,SAASnB,iBAAiB,CAACK,UAAU,CAAC;QACzD,IAAI,CAACM,UAAU,EAAE;UACf;UACA,IAAMS,eAAe,GAAGF,WAAW,CAACG,OAAO,CAACC,MAAM,IAAI;YACpD,IAAIvB,aAAa,CAACuB,MAAM,CAAC,EAAE;cACzB,OAAOA,MAAM,CAACd,OAAO,CAACe,GAAG,CACvBC,WAAW,IAAI,CAACA,WAAW,CAACC,IAAI,EAAED,WAAW,CAC/C,CAAC;YACH;YACA,OAAO,CAAC,CAACF,MAAM,CAACG,IAAI,EAAEH,MAAM,CAAC,CAAU;UACzC,CAAC,CAAC;UACFb,UAAU,CAAC,IAAIiB,GAAG,CAAC,CAAC,GAAGN,eAAe,EAAE,GAAGD,aAAa,CAAC,CAAC,CAAC;QAC7D;MACF,CAAC;MAAA,OAAAN,YAAA,CAAAC,KAAA,OAAAC,SAAA;IAAA;IACDH,WAAW,CAAC,CAAC;IACb,OAAO,MAAM;MACXD,UAAU,GAAG,IAAI;IACnB,CAAC;EACH,CAAC,EACD,CAACN,UAAU,EAAEC,cAAc,CAC7B,CAAC;EAED,oBACEJ,IAAA,CAACJ,cAAc,CAAC6B,QAAQ;IAACC,KAAK,EAAEpB,OAAQ;IAAAD,QAAA,EACrCA;EAAQ,CACc,CAAC;AAE9B;AAEA,eAAeJ,gBAAgB","ignoreList":[]}
1
+ {"version":3,"file":"PluginsBootstrap.js","names":["React","useEffect","useState","PluginsContext","isMultiPlugin","loadModulePlugins","jsx","_jsx","PluginsBootstrap","_ref","pluginsUrl","getCorePlugins","children","_useState","_useState2","_slicedToArray","plugins","setPlugins","initPlugins","isCanceled","loadPlugins","_loadPlugins","apply","arguments","_asyncToGenerator","_yield$getCorePlugins","corePlugins","pluginModules","corePluginPairs","flatMap","plugin","map","innerPlugin","name","Map","Provider","value"],"sources":["../../src/components/PluginsBootstrap.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport {\n type Plugin,\n type PluginModuleMap,\n PluginsContext,\n isMultiPlugin,\n type MultiPlugin,\n} from '@deephaven/plugin';\nimport { loadModulePlugins } from '../plugins';\n\nexport type PluginsBootstrapProps = {\n /**\n * Base URL of the plugins to load.\n */\n pluginsUrl: string;\n\n /**\n * The core plugins to load.\n * Can include MultiPlugin instances which will be flattened.\n */\n getCorePlugins?: () => Promise<(Plugin | MultiPlugin)[]>;\n\n /**\n * The children to render wrapped with the PluginsContext.\n * Note that it renders the children even if the plugins aren't loaded yet.\n */\n children: React.ReactNode;\n};\n\n/**\n * PluginsBootstrap component. Handles loading the plugins.\n */\nexport function PluginsBootstrap({\n pluginsUrl,\n getCorePlugins,\n children,\n}: PluginsBootstrapProps): JSX.Element {\n const [plugins, setPlugins] = useState<PluginModuleMap | null>(null);\n useEffect(\n function initPlugins() {\n let isCanceled = false;\n async function loadPlugins(): Promise<void> {\n const corePlugins = (await getCorePlugins?.()) ?? [];\n const pluginModules = await loadModulePlugins(pluginsUrl);\n if (!isCanceled) {\n // Flatten MultiPlugins in core plugins\n const corePluginPairs = corePlugins.flatMap(plugin => {\n if (isMultiPlugin(plugin)) {\n return plugin.plugins.map(\n innerPlugin => [innerPlugin.name, innerPlugin] as const\n );\n }\n return [[plugin.name, plugin] as const];\n });\n setPlugins(new Map([...corePluginPairs, ...pluginModules]));\n }\n }\n loadPlugins();\n return () => {\n isCanceled = true;\n };\n },\n [pluginsUrl, getCorePlugins]\n );\n\n return (\n <PluginsContext.Provider value={plugins}>\n {children}\n </PluginsContext.Provider>\n );\n}\n\nexport default PluginsBootstrap;\n"],"mappings":";;;;;;;;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAClD,SAGEC,cAAc,EACdC,aAAa,QAER,mBAAmB;AAAC,SAClBC,iBAAiB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAqB1B;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAAC,IAAA,EAIO;EAAA,IAHrCC,UAAU,GAAAD,IAAA,CAAVC,UAAU;IACVC,cAAc,GAAAF,IAAA,CAAdE,cAAc;IACdC,QAAQ,GAAAH,IAAA,CAARG,QAAQ;EAER,IAAAC,SAAA,GAA8BX,QAAQ,CAAyB,IAAI,CAAC;IAAAY,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAA7DG,OAAO,GAAAF,UAAA;IAAEG,UAAU,GAAAH,UAAA;EAC1Bb,SAAS,CACP,SAASiB,WAAWA,CAAA,EAAG;IACrB,IAAIC,UAAU,GAAG,KAAK;IAAC,SACRC,WAAWA,CAAA;MAAA,OAAAC,YAAA,CAAAC,KAAA,OAAAC,SAAA;IAAA;IAAA,SAAAF,aAAA;MAAAA,YAAA,GAAAG,iBAAA,CAA1B,aAA4C;QAAA,IAAAC,qBAAA;QAC1C,IAAMC,WAAW,IAAAD,qBAAA,SAAUd,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAG,CAAC,cAAAc,qBAAA,cAAAA,qBAAA,GAAK,EAAE;QACpD,IAAME,aAAa,SAAStB,iBAAiB,CAACK,UAAU,CAAC;QACzD,IAAI,CAACS,UAAU,EAAE;UACf;UACA,IAAMS,eAAe,GAAGF,WAAW,CAACG,OAAO,CAACC,MAAM,IAAI;YACpD,IAAI1B,aAAa,CAAC0B,MAAM,CAAC,EAAE;cACzB,OAAOA,MAAM,CAACd,OAAO,CAACe,GAAG,CACvBC,WAAW,IAAI,CAACA,WAAW,CAACC,IAAI,EAAED,WAAW,CAC/C,CAAC;YACH;YACA,OAAO,CAAC,CAACF,MAAM,CAACG,IAAI,EAAEH,MAAM,CAAC,CAAU;UACzC,CAAC,CAAC;UACFb,UAAU,CAAC,IAAIiB,GAAG,CAAC,CAAC,GAAGN,eAAe,EAAE,GAAGD,aAAa,CAAC,CAAC,CAAC;QAC7D;MACF,CAAC;MAAA,OAAAN,YAAA,CAAAC,KAAA,OAAAC,SAAA;IAAA;IACDH,WAAW,CAAC,CAAC;IACb,OAAO,MAAM;MACXD,UAAU,GAAG,IAAI;IACnB,CAAC;EACH,CAAC,EACD,CAACT,UAAU,EAAEC,cAAc,CAC7B,CAAC;EAED,oBACEJ,IAAA,CAACJ,cAAc,CAACgC,QAAQ;IAACC,KAAK,EAAEpB,OAAQ;IAAAJ,QAAA,EACrCA;EAAQ,CACc,CAAC;AAE9B;AAEA,eAAeJ,gBAAgB","ignoreList":[]}
@@ -1,5 +1,11 @@
1
1
  function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
2
2
  function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
3
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
4
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
6
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
7
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
8
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
3
9
  import React, { createContext, useEffect, useState } from 'react';
4
10
  import { LoadingOverlay } from '@deephaven/components';
5
11
  import { useClient } from '@deephaven/jsapi-bootstrap';
@@ -11,12 +17,16 @@ ServerConfigContext.displayName = 'ServerConfigContext';
11
17
  * ServerConfigBootstrap component. Handles loading the server config.
12
18
  */
13
19
  export function ServerConfigBootstrap(_ref) {
14
- var {
15
- children
16
- } = _ref;
20
+ var children = _ref.children;
17
21
  var client = useClient();
18
- var [serverConfig, setServerConfig] = useState();
19
- var [error, setError] = useState();
22
+ var _useState = useState(),
23
+ _useState2 = _slicedToArray(_useState, 2),
24
+ serverConfig = _useState2[0],
25
+ setServerConfig = _useState2[1];
26
+ var _useState3 = useState(),
27
+ _useState4 = _slicedToArray(_useState3, 2),
28
+ error = _useState4[0],
29
+ setError = _useState4[1];
20
30
  useEffect(function initServerConfigValues() {
21
31
  var isCanceled = false;
22
32
  function loadServerConfigValues() {
@@ -1 +1 @@
1
- {"version":3,"file":"ServerConfigBootstrap.js","names":["React","createContext","useEffect","useState","LoadingOverlay","useClient","getErrorMessage","jsx","_jsx","ServerConfigContext","displayName","ServerConfigBootstrap","_ref","children","client","serverConfig","setServerConfig","error","setError","initServerConfigValues","isCanceled","loadServerConfigValues","_loadServerConfigValues","apply","arguments","_asyncToGenerator","newServerConfigValues","getServerConfigValues","Map","e","isLoading","errorMessage","Provider","value"],"sources":["../../src/components/ServerConfigBootstrap.tsx"],"sourcesContent":["import React, { createContext, useEffect, useState } from 'react';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { useClient } from '@deephaven/jsapi-bootstrap';\nimport { getErrorMessage } from '@deephaven/utils';\n\nexport const ServerConfigContext = createContext<Map<string, string> | null>(\n null\n);\nServerConfigContext.displayName = 'ServerConfigContext';\n\nexport type ServerConfigBootstrapProps = {\n /**\n * The children to render after server config is loaded.\n */\n children: React.ReactNode;\n};\n\n/**\n * ServerConfigBootstrap component. Handles loading the server config.\n */\nexport function ServerConfigBootstrap({\n children,\n}: ServerConfigBootstrapProps): JSX.Element {\n const client = useClient();\n const [serverConfig, setServerConfig] = useState<Map<string, string>>();\n const [error, setError] = useState<unknown>();\n\n useEffect(\n function initServerConfigValues() {\n let isCanceled = false;\n async function loadServerConfigValues(): Promise<void> {\n try {\n const newServerConfigValues =\n (await client.getServerConfigValues()) as [string, string][];\n if (!isCanceled) {\n setServerConfig(new Map(newServerConfigValues));\n }\n } catch (e) {\n if (!isCanceled) {\n setError(e);\n }\n }\n }\n loadServerConfigValues();\n return () => {\n isCanceled = true;\n };\n },\n [client]\n );\n\n const isLoading = serverConfig == null;\n\n if (isLoading || error != null) {\n return (\n <LoadingOverlay\n data-testid=\"server-config-bootstrap-loading\"\n isLoading={isLoading && error == null}\n errorMessage={getErrorMessage(error)}\n />\n );\n }\n\n return (\n <ServerConfigContext.Provider value={serverConfig}>\n {children}\n </ServerConfigContext.Provider>\n );\n}\n\nexport default ServerConfigBootstrap;\n"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,aAAa,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AACjE,SAASC,cAAc,QAAQ,uBAAuB;AACtD,SAASC,SAAS,QAAQ,4BAA4B;AACtD,SAASC,eAAe,QAAQ,kBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEnD,OAAO,IAAMC,mBAAmB,gBAAGR,aAAa,CAC9C,IACF,CAAC;AACDQ,mBAAmB,CAACC,WAAW,GAAG,qBAAqB;AASvD;AACA;AACA;AACA,OAAO,SAASC,qBAAqBA,CAAAC,IAAA,EAEO;EAAA,IAFN;IACpCC;EAC0B,CAAC,GAAAD,IAAA;EAC3B,IAAME,MAAM,GAAGT,SAAS,CAAC,CAAC;EAC1B,IAAM,CAACU,YAAY,EAAEC,eAAe,CAAC,GAAGb,QAAQ,CAAsB,CAAC;EACvE,IAAM,CAACc,KAAK,EAAEC,QAAQ,CAAC,GAAGf,QAAQ,CAAU,CAAC;EAE7CD,SAAS,CACP,SAASiB,sBAAsBA,CAAA,EAAG;IAChC,IAAIC,UAAU,GAAG,KAAK;IAAC,SACRC,sBAAsBA,CAAA;MAAA,OAAAC,uBAAA,CAAAC,KAAA,OAAAC,SAAA;IAAA;IAAA,SAAAF,wBAAA;MAAAA,uBAAA,GAAAG,iBAAA,CAArC,aAAuD;QACrD,IAAI;UACF,IAAMC,qBAAqB,SAClBZ,MAAM,CAACa,qBAAqB,CAAC,CAAwB;UAC9D,IAAI,CAACP,UAAU,EAAE;YACfJ,eAAe,CAAC,IAAIY,GAAG,CAACF,qBAAqB,CAAC,CAAC;UACjD;QACF,CAAC,CAAC,OAAOG,CAAC,EAAE;UACV,IAAI,CAACT,UAAU,EAAE;YACfF,QAAQ,CAACW,CAAC,CAAC;UACb;QACF;MACF,CAAC;MAAA,OAAAP,uBAAA,CAAAC,KAAA,OAAAC,SAAA;IAAA;IACDH,sBAAsB,CAAC,CAAC;IACxB,OAAO,MAAM;MACXD,UAAU,GAAG,IAAI;IACnB,CAAC;EACH,CAAC,EACD,CAACN,MAAM,CACT,CAAC;EAED,IAAMgB,SAAS,GAAGf,YAAY,IAAI,IAAI;EAEtC,IAAIe,SAAS,IAAIb,KAAK,IAAI,IAAI,EAAE;IAC9B,oBACET,IAAA,CAACJ,cAAc;MACb,eAAY,iCAAiC;MAC7C0B,SAAS,EAAEA,SAAS,IAAIb,KAAK,IAAI,IAAK;MACtCc,YAAY,EAAEzB,eAAe,CAACW,KAAK;IAAE,CACtC,CAAC;EAEN;EAEA,oBACET,IAAA,CAACC,mBAAmB,CAACuB,QAAQ;IAACC,KAAK,EAAElB,YAAa;IAAAF,QAAA,EAC/CA;EAAQ,CACmB,CAAC;AAEnC;AAEA,eAAeF,qBAAqB","ignoreList":[]}
1
+ {"version":3,"file":"ServerConfigBootstrap.js","names":["React","createContext","useEffect","useState","LoadingOverlay","useClient","getErrorMessage","jsx","_jsx","ServerConfigContext","displayName","ServerConfigBootstrap","_ref","children","client","_useState","_useState2","_slicedToArray","serverConfig","setServerConfig","_useState3","_useState4","error","setError","initServerConfigValues","isCanceled","loadServerConfigValues","_loadServerConfigValues","apply","arguments","_asyncToGenerator","newServerConfigValues","getServerConfigValues","Map","e","isLoading","errorMessage","Provider","value"],"sources":["../../src/components/ServerConfigBootstrap.tsx"],"sourcesContent":["import React, { createContext, useEffect, useState } from 'react';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { useClient } from '@deephaven/jsapi-bootstrap';\nimport { getErrorMessage } from '@deephaven/utils';\n\nexport const ServerConfigContext = createContext<Map<string, string> | null>(\n null\n);\nServerConfigContext.displayName = 'ServerConfigContext';\n\nexport type ServerConfigBootstrapProps = {\n /**\n * The children to render after server config is loaded.\n */\n children: React.ReactNode;\n};\n\n/**\n * ServerConfigBootstrap component. Handles loading the server config.\n */\nexport function ServerConfigBootstrap({\n children,\n}: ServerConfigBootstrapProps): JSX.Element {\n const client = useClient();\n const [serverConfig, setServerConfig] = useState<Map<string, string>>();\n const [error, setError] = useState<unknown>();\n\n useEffect(\n function initServerConfigValues() {\n let isCanceled = false;\n async function loadServerConfigValues(): Promise<void> {\n try {\n const newServerConfigValues =\n (await client.getServerConfigValues()) as [string, string][];\n if (!isCanceled) {\n setServerConfig(new Map(newServerConfigValues));\n }\n } catch (e) {\n if (!isCanceled) {\n setError(e);\n }\n }\n }\n loadServerConfigValues();\n return () => {\n isCanceled = true;\n };\n },\n [client]\n );\n\n const isLoading = serverConfig == null;\n\n if (isLoading || error != null) {\n return (\n <LoadingOverlay\n data-testid=\"server-config-bootstrap-loading\"\n isLoading={isLoading && error == null}\n errorMessage={getErrorMessage(error)}\n />\n );\n }\n\n return (\n <ServerConfigContext.Provider value={serverConfig}>\n {children}\n </ServerConfigContext.Provider>\n );\n}\n\nexport default ServerConfigBootstrap;\n"],"mappings":";;;;;;;;AAAA,OAAOA,KAAK,IAAIC,aAAa,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AACjE,SAASC,cAAc,QAAQ,uBAAuB;AACtD,SAASC,SAAS,QAAQ,4BAA4B;AACtD,SAASC,eAAe,QAAQ,kBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEnD,OAAO,IAAMC,mBAAmB,gBAAGR,aAAa,CAC9C,IACF,CAAC;AACDQ,mBAAmB,CAACC,WAAW,GAAG,qBAAqB;AASvD;AACA;AACA;AACA,OAAO,SAASC,qBAAqBA,CAAAC,IAAA,EAEO;EAAA,IAD1CC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EAER,IAAMC,MAAM,GAAGT,SAAS,CAAC,CAAC;EAC1B,IAAAU,SAAA,GAAwCZ,QAAQ,CAAsB,CAAC;IAAAa,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAAhEG,YAAY,GAAAF,UAAA;IAAEG,eAAe,GAAAH,UAAA;EACpC,IAAAI,UAAA,GAA0BjB,QAAQ,CAAU,CAAC;IAAAkB,UAAA,GAAAJ,cAAA,CAAAG,UAAA;IAAtCE,KAAK,GAAAD,UAAA;IAAEE,QAAQ,GAAAF,UAAA;EAEtBnB,SAAS,CACP,SAASsB,sBAAsBA,CAAA,EAAG;IAChC,IAAIC,UAAU,GAAG,KAAK;IAAC,SACRC,sBAAsBA,CAAA;MAAA,OAAAC,uBAAA,CAAAC,KAAA,OAAAC,SAAA;IAAA;IAAA,SAAAF,wBAAA;MAAAA,uBAAA,GAAAG,iBAAA,CAArC,aAAuD;QACrD,IAAI;UACF,IAAMC,qBAAqB,SAClBjB,MAAM,CAACkB,qBAAqB,CAAC,CAAwB;UAC9D,IAAI,CAACP,UAAU,EAAE;YACfN,eAAe,CAAC,IAAIc,GAAG,CAACF,qBAAqB,CAAC,CAAC;UACjD;QACF,CAAC,CAAC,OAAOG,CAAC,EAAE;UACV,IAAI,CAACT,UAAU,EAAE;YACfF,QAAQ,CAACW,CAAC,CAAC;UACb;QACF;MACF,CAAC;MAAA,OAAAP,uBAAA,CAAAC,KAAA,OAAAC,SAAA;IAAA;IACDH,sBAAsB,CAAC,CAAC;IACxB,OAAO,MAAM;MACXD,UAAU,GAAG,IAAI;IACnB,CAAC;EACH,CAAC,EACD,CAACX,MAAM,CACT,CAAC;EAED,IAAMqB,SAAS,GAAGjB,YAAY,IAAI,IAAI;EAEtC,IAAIiB,SAAS,IAAIb,KAAK,IAAI,IAAI,EAAE;IAC9B,oBACEd,IAAA,CAACJ,cAAc;MACb,eAAY,iCAAiC;MAC7C+B,SAAS,EAAEA,SAAS,IAAIb,KAAK,IAAI,IAAK;MACtCc,YAAY,EAAE9B,eAAe,CAACgB,KAAK;IAAE,CACtC,CAAC;EAEN;EAEA,oBACEd,IAAA,CAACC,mBAAmB,CAAC4B,QAAQ;IAACC,KAAK,EAAEpB,YAAa;IAAAL,QAAA,EAC/CA;EAAQ,CACmB,CAAC;AAEnC;AAEA,eAAeF,qBAAqB","ignoreList":[]}
@@ -8,9 +8,7 @@ import { PluginsContext, useCustomThemes } from '@deephaven/plugin';
8
8
  import { getSettings } from '@deephaven/redux';
9
9
  import { jsx as _jsx } from "react/jsx-runtime";
10
10
  export function ThemeBootstrap(_ref) {
11
- var {
12
- children
13
- } = _ref;
11
+ var children = _ref.children;
14
12
  var settings = useAppSelector(getSettings);
15
13
 
16
14
  // The `usePlugins` hook throws if the context value is null. Since this is
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeBootstrap.js","names":["useContext","ChartThemeProvider","MonacoThemeProvider","isExternalThemeEnabled","ThemeProvider","useAppSelector","IrisGridThemeProvider","PluginsContext","useCustomThemes","getSettings","jsx","_jsx","ThemeBootstrap","_ref","children","settings","pluginModules","themes","waitForActivation","density","gridDensity"],"sources":["../../src/components/ThemeBootstrap.tsx"],"sourcesContent":["import { useContext } from 'react';\nimport { ChartThemeProvider } from '@deephaven/chart';\nimport { MonacoThemeProvider } from '@deephaven/console';\nimport { isExternalThemeEnabled, ThemeProvider } from '@deephaven/components';\nimport { useAppSelector } from '@deephaven/dashboard';\nimport { IrisGridThemeProvider } from '@deephaven/iris-grid';\nimport { PluginsContext, useCustomThemes } from '@deephaven/plugin';\nimport { getSettings } from '@deephaven/redux';\n\nexport interface ThemeBootstrapProps {\n children: React.ReactNode;\n}\n\nexport function ThemeBootstrap({\n children,\n}: ThemeBootstrapProps): JSX.Element | null {\n const settings = useAppSelector(getSettings);\n\n // The `usePlugins` hook throws if the context value is null. Since this is\n // the state while plugins load asynchronously, we are using `useContext`\n // directly to avoid the exception.\n const pluginModules = useContext(PluginsContext);\n const themes = useCustomThemes(pluginModules);\n const waitForActivation = isExternalThemeEnabled();\n\n return (\n <ThemeProvider themes={themes} waitForActivation={waitForActivation}>\n <ChartThemeProvider>\n <MonacoThemeProvider>\n <IrisGridThemeProvider density={settings.gridDensity}>\n {children}\n </IrisGridThemeProvider>\n </MonacoThemeProvider>\n </ChartThemeProvider>\n </ThemeProvider>\n );\n}\n\nexport default ThemeBootstrap;\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,OAAO;AAClC,SAASC,kBAAkB,QAAQ,kBAAkB;AACrD,SAASC,mBAAmB,QAAQ,oBAAoB;AACxD,SAASC,sBAAsB,EAAEC,aAAa,QAAQ,uBAAuB;AAC7E,SAASC,cAAc,QAAQ,sBAAsB;AACrD,SAASC,qBAAqB,QAAQ,sBAAsB;AAC5D,SAASC,cAAc,EAAEC,eAAe,QAAQ,mBAAmB;AACnE,SAASC,WAAW,QAAQ,kBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAM/C,OAAO,SAASC,cAAcA,CAAAC,IAAA,EAEc;EAAA,IAFb;IAC7BC;EACmB,CAAC,GAAAD,IAAA;EACpB,IAAME,QAAQ,GAAGV,cAAc,CAACI,WAAW,CAAC;;EAE5C;EACA;EACA;EACA,IAAMO,aAAa,GAAGhB,UAAU,CAACO,cAAc,CAAC;EAChD,IAAMU,MAAM,GAAGT,eAAe,CAACQ,aAAa,CAAC;EAC7C,IAAME,iBAAiB,GAAGf,sBAAsB,CAAC,CAAC;EAElD,oBACEQ,IAAA,CAACP,aAAa;IAACa,MAAM,EAAEA,MAAO;IAACC,iBAAiB,EAAEA,iBAAkB;IAAAJ,QAAA,eAClEH,IAAA,CAACV,kBAAkB;MAAAa,QAAA,eACjBH,IAAA,CAACT,mBAAmB;QAAAY,QAAA,eAClBH,IAAA,CAACL,qBAAqB;UAACa,OAAO,EAAEJ,QAAQ,CAACK,WAAY;UAAAN,QAAA,EAClDA;QAAQ,CACY;MAAC,CACL;IAAC,CACJ;EAAC,CACR,CAAC;AAEpB;AAEA,eAAeF,cAAc","ignoreList":[]}
1
+ {"version":3,"file":"ThemeBootstrap.js","names":["useContext","ChartThemeProvider","MonacoThemeProvider","isExternalThemeEnabled","ThemeProvider","useAppSelector","IrisGridThemeProvider","PluginsContext","useCustomThemes","getSettings","jsx","_jsx","ThemeBootstrap","_ref","children","settings","pluginModules","themes","waitForActivation","density","gridDensity"],"sources":["../../src/components/ThemeBootstrap.tsx"],"sourcesContent":["import { useContext } from 'react';\nimport { ChartThemeProvider } from '@deephaven/chart';\nimport { MonacoThemeProvider } from '@deephaven/console';\nimport { isExternalThemeEnabled, ThemeProvider } from '@deephaven/components';\nimport { useAppSelector } from '@deephaven/dashboard';\nimport { IrisGridThemeProvider } from '@deephaven/iris-grid';\nimport { PluginsContext, useCustomThemes } from '@deephaven/plugin';\nimport { getSettings } from '@deephaven/redux';\n\nexport interface ThemeBootstrapProps {\n children: React.ReactNode;\n}\n\nexport function ThemeBootstrap({\n children,\n}: ThemeBootstrapProps): JSX.Element | null {\n const settings = useAppSelector(getSettings);\n\n // The `usePlugins` hook throws if the context value is null. Since this is\n // the state while plugins load asynchronously, we are using `useContext`\n // directly to avoid the exception.\n const pluginModules = useContext(PluginsContext);\n const themes = useCustomThemes(pluginModules);\n const waitForActivation = isExternalThemeEnabled();\n\n return (\n <ThemeProvider themes={themes} waitForActivation={waitForActivation}>\n <ChartThemeProvider>\n <MonacoThemeProvider>\n <IrisGridThemeProvider density={settings.gridDensity}>\n {children}\n </IrisGridThemeProvider>\n </MonacoThemeProvider>\n </ChartThemeProvider>\n </ThemeProvider>\n );\n}\n\nexport default ThemeBootstrap;\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,OAAO;AAClC,SAASC,kBAAkB,QAAQ,kBAAkB;AACrD,SAASC,mBAAmB,QAAQ,oBAAoB;AACxD,SAASC,sBAAsB,EAAEC,aAAa,QAAQ,uBAAuB;AAC7E,SAASC,cAAc,QAAQ,sBAAsB;AACrD,SAASC,qBAAqB,QAAQ,sBAAsB;AAC5D,SAASC,cAAc,EAAEC,eAAe,QAAQ,mBAAmB;AACnE,SAASC,WAAW,QAAQ,kBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAM/C,OAAO,SAASC,cAAcA,CAAAC,IAAA,EAEc;EAAA,IAD1CC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EAER,IAAMC,QAAQ,GAAGV,cAAc,CAACI,WAAW,CAAC;;EAE5C;EACA;EACA;EACA,IAAMO,aAAa,GAAGhB,UAAU,CAACO,cAAc,CAAC;EAChD,IAAMU,MAAM,GAAGT,eAAe,CAACQ,aAAa,CAAC;EAC7C,IAAME,iBAAiB,GAAGf,sBAAsB,CAAC,CAAC;EAElD,oBACEQ,IAAA,CAACP,aAAa;IAACa,MAAM,EAAEA,MAAO;IAACC,iBAAiB,EAAEA,iBAAkB;IAAAJ,QAAA,eAClEH,IAAA,CAACV,kBAAkB;MAAAa,QAAA,eACjBH,IAAA,CAACT,mBAAmB;QAAAY,QAAA,eAClBH,IAAA,CAACL,qBAAqB;UAACa,OAAO,EAAEJ,QAAQ,CAACK,WAAY;UAAAN,QAAA,EAClDA;QAAQ,CACY;MAAC,CACL;IAAC,CACJ;EAAC,CACR,CAAC;AAEpB;AAEA,eAAeF,cAAc","ignoreList":[]}
@@ -6,9 +6,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
6
6
  * UserBootstrap component. Derives the UserContext from the ServerConfigContext, UserOverrideContext, and UserPermissionsOverrideContext.
7
7
  */
8
8
  export function UserBootstrap(_ref) {
9
- var {
10
- children
11
- } = _ref;
9
+ var children = _ref.children;
12
10
  var serverConfig = useServerConfig();
13
11
  var overrides = useContext(UserOverrideContext);
14
12
  var permissionsOverrides = useContext(UserPermissionsOverrideContext);
@@ -1 +1 @@
1
- {"version":3,"file":"UserBootstrap.js","names":["React","useContext","UserContext","UserOverrideContext","UserPermissionsOverrideContext","getUserFromConfig","useServerConfig","jsx","_jsx","UserBootstrap","_ref","children","serverConfig","overrides","permissionsOverrides","user","Provider","value"],"sources":["../../src/components/UserBootstrap.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport {\n UserContext,\n UserOverrideContext,\n UserPermissionsOverrideContext,\n getUserFromConfig,\n} from '@deephaven/auth-plugins';\nimport useServerConfig from './useServerConfig';\n\nexport type UserBootstrapProps = {\n /** The children to render */\n children: React.ReactNode;\n};\n\n/**\n * UserBootstrap component. Derives the UserContext from the ServerConfigContext, UserOverrideContext, and UserPermissionsOverrideContext.\n */\nexport function UserBootstrap({ children }: UserBootstrapProps): JSX.Element {\n const serverConfig = useServerConfig();\n const overrides = useContext(UserOverrideContext);\n const permissionsOverrides = useContext(UserPermissionsOverrideContext);\n const user = getUserFromConfig(serverConfig, overrides, permissionsOverrides);\n return <UserContext.Provider value={user}>{children}</UserContext.Provider>;\n}\n\nexport default UserBootstrap;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,SACEC,WAAW,EACXC,mBAAmB,EACnBC,8BAA8B,EAC9BC,iBAAiB,QACZ,yBAAyB;AAAC,OAC1BC,eAAe;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAOtB;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAAAC,IAAA,EAAgD;EAAA,IAA/C;IAAEC;EAA6B,CAAC,GAAAD,IAAA;EAC5D,IAAME,YAAY,GAAGN,eAAe,CAAC,CAAC;EACtC,IAAMO,SAAS,GAAGZ,UAAU,CAACE,mBAAmB,CAAC;EACjD,IAAMW,oBAAoB,GAAGb,UAAU,CAACG,8BAA8B,CAAC;EACvE,IAAMW,IAAI,GAAGV,iBAAiB,CAACO,YAAY,EAAEC,SAAS,EAAEC,oBAAoB,CAAC;EAC7E,oBAAON,IAAA,CAACN,WAAW,CAACc,QAAQ;IAACC,KAAK,EAAEF,IAAK;IAAAJ,QAAA,EAAEA;EAAQ,CAAuB,CAAC;AAC7E;AAEA,eAAeF,aAAa","ignoreList":[]}
1
+ {"version":3,"file":"UserBootstrap.js","names":["React","useContext","UserContext","UserOverrideContext","UserPermissionsOverrideContext","getUserFromConfig","useServerConfig","jsx","_jsx","UserBootstrap","_ref","children","serverConfig","overrides","permissionsOverrides","user","Provider","value"],"sources":["../../src/components/UserBootstrap.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport {\n UserContext,\n UserOverrideContext,\n UserPermissionsOverrideContext,\n getUserFromConfig,\n} from '@deephaven/auth-plugins';\nimport useServerConfig from './useServerConfig';\n\nexport type UserBootstrapProps = {\n /** The children to render */\n children: React.ReactNode;\n};\n\n/**\n * UserBootstrap component. Derives the UserContext from the ServerConfigContext, UserOverrideContext, and UserPermissionsOverrideContext.\n */\nexport function UserBootstrap({ children }: UserBootstrapProps): JSX.Element {\n const serverConfig = useServerConfig();\n const overrides = useContext(UserOverrideContext);\n const permissionsOverrides = useContext(UserPermissionsOverrideContext);\n const user = getUserFromConfig(serverConfig, overrides, permissionsOverrides);\n return <UserContext.Provider value={user}>{children}</UserContext.Provider>;\n}\n\nexport default UserBootstrap;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,SACEC,WAAW,EACXC,mBAAmB,EACnBC,8BAA8B,EAC9BC,iBAAiB,QACZ,yBAAyB;AAAC,OAC1BC,eAAe;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAOtB;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAAAC,IAAA,EAAgD;EAAA,IAA7CC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EACtC,IAAMC,YAAY,GAAGN,eAAe,CAAC,CAAC;EACtC,IAAMO,SAAS,GAAGZ,UAAU,CAACE,mBAAmB,CAAC;EACjD,IAAMW,oBAAoB,GAAGb,UAAU,CAACG,8BAA8B,CAAC;EACvE,IAAMW,IAAI,GAAGV,iBAAiB,CAACO,YAAY,EAAEC,SAAS,EAAEC,oBAAoB,CAAC;EAC7E,oBAAON,IAAA,CAACN,WAAW,CAACc,QAAQ;IAACC,KAAK,EAAEF,IAAK;IAAAJ,QAAA,EAAEA;EAAQ,CAAuB,CAAC;AAC7E;AAEA,eAAeF,aAAa","ignoreList":[]}
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
2
8
  function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
3
9
  import Log from '@deephaven/log';
@@ -90,13 +96,11 @@ function _loadModulePlugins() {
90
96
 
91
97
  // eslint-disable-next-line no-await-in-loop
92
98
  var results = yield Promise.allSettled(level.map(/*#__PURE__*/function () {
93
- var _ref5 = _asyncToGenerator(function* (plugin) {
94
- var {
95
- name,
96
- main,
97
- version,
98
- package: packageName
99
- } = plugin;
99
+ var _ref7 = _asyncToGenerator(function* (plugin) {
100
+ var name = plugin.name,
101
+ main = plugin.main,
102
+ version = plugin.version,
103
+ packageName = plugin.package;
100
104
  var pluginMainUrl = "".concat(modulePluginsUrl, "/").concat(name, "/").concat(main);
101
105
  var pluginExports = yield loadModulePlugin(pluginMainUrl);
102
106
  return {
@@ -107,18 +111,17 @@ function _loadModulePlugins() {
107
111
  };
108
112
  });
109
113
  return function (_x4) {
110
- return _ref5.apply(this, arguments);
114
+ return _ref7.apply(this, arguments);
111
115
  };
112
116
  }()));
113
117
  for (var r = 0; r < results.length; r += 1) {
114
118
  var result = results[r];
115
119
  if (result.status === 'fulfilled') {
116
- var {
117
- pluginExports,
118
- name,
119
- packageName,
120
- version
121
- } = result.value;
120
+ var _result$value = result.value,
121
+ pluginExports = _result$value.pluginExports,
122
+ name = _result$value.name,
123
+ packageName = _result$value.packageName,
124
+ version = _result$value.version;
122
125
  processLoadedModule(pluginMap, resolve, pluginExports, name, packageName, version);
123
126
  } else {
124
127
  log.error("Unable to load plugin '".concat(level[r].name, "'"), result.reason);
@@ -153,10 +156,13 @@ export function getAuthPluginComponent(pluginMap, authConfigValues) {
153
156
  var authHandlers = getAuthHandlers(authConfigValues);
154
157
  // User plugins take priority over core plugins
155
158
  var authPlugins = [...pluginMap.entries(), ...corePlugins.entries()].filter(_ref => {
156
- var [, plugin] = _ref;
159
+ var _ref2 = _slicedToArray(_ref, 2),
160
+ plugin = _ref2[1];
157
161
  return isAuthPlugin(plugin) || isLegacyAuthPlugin(plugin);
158
- }).map(_ref2 => {
159
- var [name, plugin] = _ref2;
162
+ }).map(_ref3 => {
163
+ var _ref4 = _slicedToArray(_ref3, 2),
164
+ name = _ref4[0],
165
+ plugin = _ref4[1];
160
166
  if (isLegacyAuthPlugin(plugin)) {
161
167
  return {
162
168
  type: PluginType.AUTH_PLUGIN,
@@ -169,26 +175,21 @@ export function getAuthPluginComponent(pluginMap, authConfigValues) {
169
175
  });
170
176
 
171
177
  // Filter the available auth plugins
172
- var availableAuthPlugins = authPlugins.filter(_ref3 => {
173
- var {
174
- isAvailable
175
- } = _ref3;
178
+ var availableAuthPlugins = authPlugins.filter(_ref5 => {
179
+ var isAvailable = _ref5.isAvailable;
176
180
  return isAvailable(authHandlers, authConfigValues);
177
181
  });
178
182
  if (availableAuthPlugins.length === 0) {
179
183
  throw new Error("No login plugins found, please register a login plugin for auth handlers: ".concat(authHandlers));
180
184
  } else if (availableAuthPlugins.length > 1) {
181
- log.warn('More than one login plugin available, will use the first one: ', availableAuthPlugins.map(_ref4 => {
182
- var {
183
- name
184
- } = _ref4;
185
+ log.warn('More than one login plugin available, will use the first one: ', availableAuthPlugins.map(_ref6 => {
186
+ var name = _ref6.name;
185
187
  return name;
186
188
  }).join(', '));
187
189
  }
188
- var {
189
- name,
190
- component
191
- } = availableAuthPlugins[0];
190
+ var _availableAuthPlugins = availableAuthPlugins[0],
191
+ name = _availableAuthPlugins.name,
192
+ component = _availableAuthPlugins.component;
192
193
  log.info('Using LoginPlugin', name);
193
194
  return component;
194
195
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PluginUtils.js","names":["Log","isAuthPlugin","PluginType","isLegacyAuthPlugin","processLoadedModule","groupByDependencyLevel","getPluginModuleValue","loadRemoteModule","resolve","log","module","loadModulePlugin","_x","_loadModulePlugin","apply","arguments","_asyncToGenerator","pluginUrl","myModule","loadJson","_x2","_loadJson","jsonUrl","res","fetch","ok","Error","statusText","json","_unused","loadModulePlugins","_x3","_loadModulePlugins","modulePluginsUrl","debug","manifest","concat","Array","isArray","plugins","levels","pluginMap","Map","lvl","length","level","results","Promise","allSettled","map","_ref5","plugin","name","main","version","package","packageName","pluginMainUrl","pluginExports","_x4","r","result","status","value","error","reason","info","e","getAuthHandlers","authConfigValues","_authConfigValues$get","_authConfigValues$get2","get","split","getAuthPluginComponent","corePlugins","undefined","authHandlers","authPlugins","entries","filter","_ref","_ref2","type","AUTH_PLUGIN","component","AuthPlugin","Component","isAvailable","availableAuthPlugins","_ref3","warn","_ref4","join"],"sources":["../../src/plugins/PluginUtils.ts"],"sourcesContent":["import Log from '@deephaven/log';\nimport {\n type PluginModuleMap,\n type AuthPlugin,\n type AuthPluginComponent,\n isAuthPlugin,\n type LegacyAuthPlugin,\n type LegacyPlugin,\n type Plugin,\n PluginType,\n isLegacyAuthPlugin,\n processLoadedModule,\n groupByDependencyLevel,\n type PluginManifest,\n type PluginManifestPluginInfo,\n getPluginModuleValue,\n} from '@deephaven/plugin';\nimport loadRemoteModule from './loadRemoteModule';\nimport { resolve } from './remote-component.config';\n\nconst log = Log.module('@deephaven/app-utils.PluginUtils');\n\n/**\n * @deprecated Import from `@deephaven/plugin` instead.\n */\nexport type { PluginManifestPluginInfo };\n\n/**\n * @deprecated Import from `@deephaven/plugin` instead.\n */\nexport type { PluginManifest };\n\n/**\n * @deprecated Import from `@deephaven/plugin` instead.\n */\nexport { getPluginModuleValue };\n\n/**\n * Imports a commonjs plugin module from the provided URL\n * @param pluginUrl The URL of the plugin to load\n * @returns The loaded module\n */\nexport async function loadModulePlugin(\n pluginUrl: string\n): Promise<LegacyPlugin | { default: Plugin }> {\n const myModule = await loadRemoteModule(pluginUrl);\n return myModule;\n}\n\n/**\n * Loads a JSON file and returns the JSON object\n * @param jsonUrl The URL of the JSON file to load\n * @returns The JSON object of the manifest file\n */\nexport async function loadJson(jsonUrl: string): Promise<PluginManifest> {\n const res = await fetch(jsonUrl);\n if (!res.ok) {\n throw new Error(res.statusText);\n }\n try {\n return await res.json();\n } catch {\n throw new Error('Could not be parsed as JSON');\n }\n}\n\n/**\n * Load all plugin modules available based on the manifest file at the provided base URL.\n * Plugins are grouped into dependency levels and loaded in parallel within each\n * level. Levels are processed sequentially so that each level's exports are\n * registered in the module resolve map before the next level loads, enabling\n * cross-plugin imports via standard import statements.\n * @param modulePluginsUrl The base URL of the module plugins to load\n * @returns A map from the name of the plugin to the plugin module that was loaded\n */\nexport async function loadModulePlugins(\n modulePluginsUrl: string\n): Promise<PluginModuleMap> {\n log.debug('Loading plugins...');\n try {\n const manifest = await loadJson(`${modulePluginsUrl}/manifest.json`);\n\n if (!Array.isArray(manifest.plugins)) {\n throw new Error('Plugin manifest JSON does not contain plugins array');\n }\n\n log.debug('Plugin manifest loaded:', manifest);\n\n const levels = groupByDependencyLevel(manifest.plugins);\n\n const pluginMap: PluginModuleMap = new Map();\n\n // Load plugins level by level. Plugins within a level have no\n // inter-dependencies and load in parallel. Each level completes\n // before the next starts so cross-plugin imports resolve correctly.\n for (let lvl = 0; lvl < levels.length; lvl += 1) {\n const level = levels[lvl];\n\n // eslint-disable-next-line no-await-in-loop\n const results = await Promise.allSettled(\n level.map(async plugin => {\n const { name, main, version, package: packageName } = plugin;\n const pluginMainUrl = `${modulePluginsUrl}/${name}/${main}`;\n const pluginExports = await loadModulePlugin(pluginMainUrl);\n return { pluginExports, name, packageName, version };\n })\n );\n\n for (let r = 0; r < results.length; r += 1) {\n const result = results[r];\n if (result.status === 'fulfilled') {\n const { pluginExports, name, packageName, version } = result.value;\n processLoadedModule(\n pluginMap,\n resolve,\n pluginExports,\n name,\n packageName,\n version\n );\n } else {\n log.error(`Unable to load plugin '${level[r].name}'`, result.reason);\n }\n }\n }\n log.info('Plugins loaded:', pluginMap);\n\n return pluginMap;\n } catch (e) {\n log.error('Unable to load plugins:', e);\n return new Map();\n }\n}\n\nexport function getAuthHandlers(\n authConfigValues: Map<string, string>\n): string[] {\n return authConfigValues.get('AuthHandlers')?.split(',') ?? [];\n}\n\n/**\n * Get the auth plugin component from the plugin map and current configuration\n * Throws if no auth plugin is available\n *\n * @param pluginMap Map of plugins loaded from the server\n * @param authConfigValues Auth config values from the server\n * @param corePlugins Map of core auth plugins to include in the list. They are added after the loaded plugins\n * @returns The auth plugin component to render\n */\nexport function getAuthPluginComponent(\n pluginMap: PluginModuleMap,\n authConfigValues: Map<string, string>,\n corePlugins = new Map<string, AuthPlugin | LegacyAuthPlugin>()\n): AuthPluginComponent {\n const authHandlers = getAuthHandlers(authConfigValues);\n // User plugins take priority over core plugins\n const authPlugins = (\n [...pluginMap.entries(), ...corePlugins.entries()].filter(\n ([, plugin]) => isAuthPlugin(plugin) || isLegacyAuthPlugin(plugin)\n ) as [string, AuthPlugin | LegacyAuthPlugin][]\n ).map(([name, plugin]) => {\n if (isLegacyAuthPlugin(plugin)) {\n return {\n type: PluginType.AUTH_PLUGIN,\n name,\n component: plugin.AuthPlugin.Component,\n isAvailable: plugin.AuthPlugin.isAvailable,\n };\n }\n\n return plugin;\n });\n\n // Filter the available auth plugins\n const availableAuthPlugins = authPlugins.filter(({ isAvailable }) =>\n isAvailable(authHandlers, authConfigValues)\n );\n\n if (availableAuthPlugins.length === 0) {\n throw new Error(\n `No login plugins found, please register a login plugin for auth handlers: ${authHandlers}`\n );\n } else if (availableAuthPlugins.length > 1) {\n log.warn(\n 'More than one login plugin available, will use the first one: ',\n availableAuthPlugins.map(({ name }) => name).join(', ')\n );\n }\n\n const { name, component } = availableAuthPlugins[0];\n log.info('Using LoginPlugin', name);\n\n return component;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"PluginUtils.js","names":["Log","isAuthPlugin","PluginType","isLegacyAuthPlugin","processLoadedModule","groupByDependencyLevel","getPluginModuleValue","loadRemoteModule","resolve","log","module","loadModulePlugin","_x","_loadModulePlugin","apply","arguments","_asyncToGenerator","pluginUrl","myModule","loadJson","_x2","_loadJson","jsonUrl","res","fetch","ok","Error","statusText","json","_unused","loadModulePlugins","_x3","_loadModulePlugins","modulePluginsUrl","debug","manifest","concat","Array","isArray","plugins","levels","pluginMap","Map","lvl","length","level","results","Promise","allSettled","map","_ref7","plugin","name","main","version","packageName","package","pluginMainUrl","pluginExports","_x4","r","result","status","_result$value","value","error","reason","info","e","getAuthHandlers","authConfigValues","_authConfigValues$get","_authConfigValues$get2","get","split","getAuthPluginComponent","corePlugins","undefined","authHandlers","authPlugins","entries","filter","_ref","_ref2","_slicedToArray","_ref3","_ref4","type","AUTH_PLUGIN","component","AuthPlugin","Component","isAvailable","availableAuthPlugins","_ref5","warn","_ref6","join","_availableAuthPlugins"],"sources":["../../src/plugins/PluginUtils.ts"],"sourcesContent":["import Log from '@deephaven/log';\nimport {\n type PluginModuleMap,\n type AuthPlugin,\n type AuthPluginComponent,\n isAuthPlugin,\n type LegacyAuthPlugin,\n type LegacyPlugin,\n type Plugin,\n PluginType,\n isLegacyAuthPlugin,\n processLoadedModule,\n groupByDependencyLevel,\n type PluginManifest,\n type PluginManifestPluginInfo,\n getPluginModuleValue,\n} from '@deephaven/plugin';\nimport loadRemoteModule from './loadRemoteModule';\nimport { resolve } from './remote-component.config';\n\nconst log = Log.module('@deephaven/app-utils.PluginUtils');\n\n/**\n * @deprecated Import from `@deephaven/plugin` instead.\n */\nexport type { PluginManifestPluginInfo };\n\n/**\n * @deprecated Import from `@deephaven/plugin` instead.\n */\nexport type { PluginManifest };\n\n/**\n * @deprecated Import from `@deephaven/plugin` instead.\n */\nexport { getPluginModuleValue };\n\n/**\n * Imports a commonjs plugin module from the provided URL\n * @param pluginUrl The URL of the plugin to load\n * @returns The loaded module\n */\nexport async function loadModulePlugin(\n pluginUrl: string\n): Promise<LegacyPlugin | { default: Plugin }> {\n const myModule = await loadRemoteModule(pluginUrl);\n return myModule;\n}\n\n/**\n * Loads a JSON file and returns the JSON object\n * @param jsonUrl The URL of the JSON file to load\n * @returns The JSON object of the manifest file\n */\nexport async function loadJson(jsonUrl: string): Promise<PluginManifest> {\n const res = await fetch(jsonUrl);\n if (!res.ok) {\n throw new Error(res.statusText);\n }\n try {\n return await res.json();\n } catch {\n throw new Error('Could not be parsed as JSON');\n }\n}\n\n/**\n * Load all plugin modules available based on the manifest file at the provided base URL.\n * Plugins are grouped into dependency levels and loaded in parallel within each\n * level. Levels are processed sequentially so that each level's exports are\n * registered in the module resolve map before the next level loads, enabling\n * cross-plugin imports via standard import statements.\n * @param modulePluginsUrl The base URL of the module plugins to load\n * @returns A map from the name of the plugin to the plugin module that was loaded\n */\nexport async function loadModulePlugins(\n modulePluginsUrl: string\n): Promise<PluginModuleMap> {\n log.debug('Loading plugins...');\n try {\n const manifest = await loadJson(`${modulePluginsUrl}/manifest.json`);\n\n if (!Array.isArray(manifest.plugins)) {\n throw new Error('Plugin manifest JSON does not contain plugins array');\n }\n\n log.debug('Plugin manifest loaded:', manifest);\n\n const levels = groupByDependencyLevel(manifest.plugins);\n\n const pluginMap: PluginModuleMap = new Map();\n\n // Load plugins level by level. Plugins within a level have no\n // inter-dependencies and load in parallel. Each level completes\n // before the next starts so cross-plugin imports resolve correctly.\n for (let lvl = 0; lvl < levels.length; lvl += 1) {\n const level = levels[lvl];\n\n // eslint-disable-next-line no-await-in-loop\n const results = await Promise.allSettled(\n level.map(async plugin => {\n const { name, main, version, package: packageName } = plugin;\n const pluginMainUrl = `${modulePluginsUrl}/${name}/${main}`;\n const pluginExports = await loadModulePlugin(pluginMainUrl);\n return { pluginExports, name, packageName, version };\n })\n );\n\n for (let r = 0; r < results.length; r += 1) {\n const result = results[r];\n if (result.status === 'fulfilled') {\n const { pluginExports, name, packageName, version } = result.value;\n processLoadedModule(\n pluginMap,\n resolve,\n pluginExports,\n name,\n packageName,\n version\n );\n } else {\n log.error(`Unable to load plugin '${level[r].name}'`, result.reason);\n }\n }\n }\n log.info('Plugins loaded:', pluginMap);\n\n return pluginMap;\n } catch (e) {\n log.error('Unable to load plugins:', e);\n return new Map();\n }\n}\n\nexport function getAuthHandlers(\n authConfigValues: Map<string, string>\n): string[] {\n return authConfigValues.get('AuthHandlers')?.split(',') ?? [];\n}\n\n/**\n * Get the auth plugin component from the plugin map and current configuration\n * Throws if no auth plugin is available\n *\n * @param pluginMap Map of plugins loaded from the server\n * @param authConfigValues Auth config values from the server\n * @param corePlugins Map of core auth plugins to include in the list. They are added after the loaded plugins\n * @returns The auth plugin component to render\n */\nexport function getAuthPluginComponent(\n pluginMap: PluginModuleMap,\n authConfigValues: Map<string, string>,\n corePlugins = new Map<string, AuthPlugin | LegacyAuthPlugin>()\n): AuthPluginComponent {\n const authHandlers = getAuthHandlers(authConfigValues);\n // User plugins take priority over core plugins\n const authPlugins = (\n [...pluginMap.entries(), ...corePlugins.entries()].filter(\n ([, plugin]) => isAuthPlugin(plugin) || isLegacyAuthPlugin(plugin)\n ) as [string, AuthPlugin | LegacyAuthPlugin][]\n ).map(([name, plugin]) => {\n if (isLegacyAuthPlugin(plugin)) {\n return {\n type: PluginType.AUTH_PLUGIN,\n name,\n component: plugin.AuthPlugin.Component,\n isAvailable: plugin.AuthPlugin.isAvailable,\n };\n }\n\n return plugin;\n });\n\n // Filter the available auth plugins\n const availableAuthPlugins = authPlugins.filter(({ isAvailable }) =>\n isAvailable(authHandlers, authConfigValues)\n );\n\n if (availableAuthPlugins.length === 0) {\n throw new Error(\n `No login plugins found, please register a login plugin for auth handlers: ${authHandlers}`\n );\n } else if (availableAuthPlugins.length > 1) {\n log.warn(\n 'More than one login plugin available, will use the first one: ',\n availableAuthPlugins.map(({ name }) => name).join(', ')\n );\n }\n\n const { name, component } = availableAuthPlugins[0];\n log.info('Using LoginPlugin', name);\n\n return component;\n}\n"],"mappings":";;;;;;;;AAAA,OAAOA,GAAG,MAAM,gBAAgB;AAChC,SAIEC,YAAY,EAIZC,UAAU,EACVC,kBAAkB,EAClBC,mBAAmB,EACnBC,sBAAsB,EAGtBC,oBAAoB,QACf,mBAAmB;AAAC,OACpBC,gBAAgB;AAAA,SACdC,OAAO;AAEhB,IAAMC,GAAG,GAAGT,GAAG,CAACU,MAAM,CAAC,kCAAkC,CAAC;;AAE1D;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;AACA,SAASJ,oBAAoB;;AAE7B;AACA;AACA;AACA;AACA;AACA,gBAAsBK,gBAAgBA,CAAAC,EAAA;EAAA,OAAAC,iBAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;;AAOtC;AACA;AACA;AACA;AACA;AAJA,SAAAF,kBAAA;EAAAA,iBAAA,GAAAG,iBAAA,CAPO,WACLC,SAAiB,EAC4B;IAC7C,IAAMC,QAAQ,SAASX,gBAAgB,CAACU,SAAS,CAAC;IAClD,OAAOC,QAAQ;EACjB,CAAC;EAAA,OAAAL,iBAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AAOD,gBAAsBI,QAAQA,CAAAC,GAAA;EAAA,OAAAC,SAAA,CAAAP,KAAA,OAAAC,SAAA;AAAA;;AAY9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA,SAAAM,UAAA;EAAAA,SAAA,GAAAL,iBAAA,CAZO,WAAwBM,OAAe,EAA2B;IACvE,IAAMC,GAAG,SAASC,KAAK,CAACF,OAAO,CAAC;IAChC,IAAI,CAACC,GAAG,CAACE,EAAE,EAAE;MACX,MAAM,IAAIC,KAAK,CAACH,GAAG,CAACI,UAAU,CAAC;IACjC;IACA,IAAI;MACF,aAAaJ,GAAG,CAACK,IAAI,CAAC,CAAC;IACzB,CAAC,CAAC,OAAAC,OAAA,EAAM;MACN,MAAM,IAAIH,KAAK,CAAC,6BAA6B,CAAC;IAChD;EACF,CAAC;EAAA,OAAAL,SAAA,CAAAP,KAAA,OAAAC,SAAA;AAAA;AAWD,gBAAsBe,iBAAiBA,CAAAC,GAAA;EAAA,OAAAC,kBAAA,CAAAlB,KAAA,OAAAC,SAAA;AAAA;AAyDtC,SAAAiB,mBAAA;EAAAA,kBAAA,GAAAhB,iBAAA,CAzDM,WACLiB,gBAAwB,EACE;IAC1BxB,GAAG,CAACyB,KAAK,CAAC,oBAAoB,CAAC;IAC/B,IAAI;MACF,IAAMC,QAAQ,SAAShB,QAAQ,IAAAiB,MAAA,CAAIH,gBAAgB,mBAAgB,CAAC;MAEpE,IAAI,CAACI,KAAK,CAACC,OAAO,CAACH,QAAQ,CAACI,OAAO,CAAC,EAAE;QACpC,MAAM,IAAIb,KAAK,CAAC,qDAAqD,CAAC;MACxE;MAEAjB,GAAG,CAACyB,KAAK,CAAC,yBAAyB,EAAEC,QAAQ,CAAC;MAE9C,IAAMK,MAAM,GAAGnC,sBAAsB,CAAC8B,QAAQ,CAACI,OAAO,CAAC;MAEvD,IAAME,SAA0B,GAAG,IAAIC,GAAG,CAAC,CAAC;;MAE5C;MACA;MACA;MACA,KAAK,IAAIC,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAGH,MAAM,CAACI,MAAM,EAAED,GAAG,IAAI,CAAC,EAAE;QAC/C,IAAME,KAAK,GAAGL,MAAM,CAACG,GAAG,CAAC;;QAEzB;QACA,IAAMG,OAAO,SAASC,OAAO,CAACC,UAAU,CACtCH,KAAK,CAACI,GAAG;UAAA,IAAAC,KAAA,GAAAlC,iBAAA,CAAC,WAAMmC,MAAM,EAAI;YACxB,IAAQC,IAAI,GAA0CD,MAAM,CAApDC,IAAI;cAAEC,IAAI,GAAoCF,MAAM,CAA9CE,IAAI;cAAEC,OAAO,GAA2BH,MAAM,CAAxCG,OAAO;cAAWC,WAAW,GAAKJ,MAAM,CAA/BK,OAAO;YACpC,IAAMC,aAAa,MAAArB,MAAA,CAAMH,gBAAgB,OAAAG,MAAA,CAAIgB,IAAI,OAAAhB,MAAA,CAAIiB,IAAI,CAAE;YAC3D,IAAMK,aAAa,SAAS/C,gBAAgB,CAAC8C,aAAa,CAAC;YAC3D,OAAO;cAAEC,aAAa;cAAEN,IAAI;cAAEG,WAAW;cAAED;YAAQ,CAAC;UACtD,CAAC;UAAA,iBAAAK,GAAA;YAAA,OAAAT,KAAA,CAAApC,KAAA,OAAAC,SAAA;UAAA;QAAA,IACH,CAAC;QAED,KAAK,IAAI6C,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGd,OAAO,CAACF,MAAM,EAAEgB,CAAC,IAAI,CAAC,EAAE;UAC1C,IAAMC,MAAM,GAAGf,OAAO,CAACc,CAAC,CAAC;UACzB,IAAIC,MAAM,CAACC,MAAM,KAAK,WAAW,EAAE;YACjC,IAAAC,aAAA,GAAsDF,MAAM,CAACG,KAAK;cAA1DN,aAAa,GAAAK,aAAA,CAAbL,aAAa;cAAEN,IAAI,GAAAW,aAAA,CAAJX,IAAI;cAAEG,WAAW,GAAAQ,aAAA,CAAXR,WAAW;cAAED,OAAO,GAAAS,aAAA,CAAPT,OAAO;YACjDlD,mBAAmB,CACjBqC,SAAS,EACTjC,OAAO,EACPkD,aAAa,EACbN,IAAI,EACJG,WAAW,EACXD,OACF,CAAC;UACH,CAAC,MAAM;YACL7C,GAAG,CAACwD,KAAK,2BAAA7B,MAAA,CAA2BS,KAAK,CAACe,CAAC,CAAC,CAACR,IAAI,QAAKS,MAAM,CAACK,MAAM,CAAC;UACtE;QACF;MACF;MACAzD,GAAG,CAAC0D,IAAI,CAAC,iBAAiB,EAAE1B,SAAS,CAAC;MAEtC,OAAOA,SAAS;IAClB,CAAC,CAAC,OAAO2B,CAAC,EAAE;MACV3D,GAAG,CAACwD,KAAK,CAAC,yBAAyB,EAAEG,CAAC,CAAC;MACvC,OAAO,IAAI1B,GAAG,CAAC,CAAC;IAClB;EACF,CAAC;EAAA,OAAAV,kBAAA,CAAAlB,KAAA,OAAAC,SAAA;AAAA;AAED,OAAO,SAASsD,eAAeA,CAC7BC,gBAAqC,EAC3B;EAAA,IAAAC,qBAAA,EAAAC,sBAAA;EACV,QAAAD,qBAAA,IAAAC,sBAAA,GAAOF,gBAAgB,CAACG,GAAG,CAAC,cAAc,CAAC,cAAAD,sBAAA,uBAApCA,sBAAA,CAAsCE,KAAK,CAAC,GAAG,CAAC,cAAAH,qBAAA,cAAAA,qBAAA,GAAI,EAAE;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,sBAAsBA,CACpClC,SAA0B,EAC1B6B,gBAAqC,EAEhB;EAAA,IADrBM,WAAW,GAAA7D,SAAA,CAAA6B,MAAA,QAAA7B,SAAA,QAAA8D,SAAA,GAAA9D,SAAA,MAAG,IAAI2B,GAAG,CAAwC,CAAC;EAE9D,IAAMoC,YAAY,GAAGT,eAAe,CAACC,gBAAgB,CAAC;EACtD;EACA,IAAMS,WAAW,GACf,CAAC,GAAGtC,SAAS,CAACuC,OAAO,CAAC,CAAC,EAAE,GAAGJ,WAAW,CAACI,OAAO,CAAC,CAAC,CAAC,CAACC,MAAM,CACvDC,IAAA;IAAA,IAAAC,KAAA,GAAAC,cAAA,CAAAF,IAAA;MAAI/B,MAAM,GAAAgC,KAAA;IAAA,OAAMlF,YAAY,CAACkD,MAAM,CAAC,IAAIhD,kBAAkB,CAACgD,MAAM,CAAC;EAAA,CACpE,CAAC,CACDF,GAAG,CAACoC,KAAA,IAAoB;IAAA,IAAAC,KAAA,GAAAF,cAAA,CAAAC,KAAA;MAAlBjC,IAAI,GAAAkC,KAAA;MAAEnC,MAAM,GAAAmC,KAAA;IAClB,IAAInF,kBAAkB,CAACgD,MAAM,CAAC,EAAE;MAC9B,OAAO;QACLoC,IAAI,EAAErF,UAAU,CAACsF,WAAW;QAC5BpC,IAAI;QACJqC,SAAS,EAAEtC,MAAM,CAACuC,UAAU,CAACC,SAAS;QACtCC,WAAW,EAAEzC,MAAM,CAACuC,UAAU,CAACE;MACjC,CAAC;IACH;IAEA,OAAOzC,MAAM;EACf,CAAC,CAAC;;EAEF;EACA,IAAM0C,oBAAoB,GAAGd,WAAW,CAACE,MAAM,CAACa,KAAA;IAAA,IAAGF,WAAW,GAAAE,KAAA,CAAXF,WAAW;IAAA,OAC5DA,WAAW,CAACd,YAAY,EAAER,gBAAgB,CAAC;EAAA,CAC7C,CAAC;EAED,IAAIuB,oBAAoB,CAACjD,MAAM,KAAK,CAAC,EAAE;IACrC,MAAM,IAAIlB,KAAK,8EAAAU,MAAA,CACgE0C,YAAY,CAC3F,CAAC;EACH,CAAC,MAAM,IAAIe,oBAAoB,CAACjD,MAAM,GAAG,CAAC,EAAE;IAC1CnC,GAAG,CAACsF,IAAI,CACN,gEAAgE,EAChEF,oBAAoB,CAAC5C,GAAG,CAAC+C,KAAA;MAAA,IAAG5C,IAAI,GAAA4C,KAAA,CAAJ5C,IAAI;MAAA,OAAOA,IAAI;IAAA,EAAC,CAAC6C,IAAI,CAAC,IAAI,CACxD,CAAC;EACH;EAEA,IAAAC,qBAAA,GAA4BL,oBAAoB,CAAC,CAAC,CAAC;IAA3CzC,IAAI,GAAA8C,qBAAA,CAAJ9C,IAAI;IAAEqC,SAAS,GAAAS,qBAAA,CAATT,SAAS;EACvBhF,GAAG,CAAC0D,IAAI,CAAC,mBAAmB,EAAEf,IAAI,CAAC;EAEnC,OAAOqC,SAAS;AAClB","ignoreList":[]}
@@ -101,12 +101,12 @@ export class LocalWorkspaceStorage {
101
101
  }
102
102
  static makeWorkspaceData(layoutStorage, options) {
103
103
  return _asyncToGenerator(function* () {
104
- var {
105
- filterSets,
106
- links,
107
- layoutConfig,
108
- pluginDataMap = {}
109
- } = yield UserLayoutUtils.getDefaultLayout(layoutStorage, options === null || options === void 0 ? void 0 : options.isConsoleAvailable);
104
+ var _yield$UserLayoutUtil = yield UserLayoutUtils.getDefaultLayout(layoutStorage, options === null || options === void 0 ? void 0 : options.isConsoleAvailable),
105
+ filterSets = _yield$UserLayoutUtil.filterSets,
106
+ links = _yield$UserLayoutUtil.links,
107
+ layoutConfig = _yield$UserLayoutUtil.layoutConfig,
108
+ _yield$UserLayoutUtil2 = _yield$UserLayoutUtil.pluginDataMap,
109
+ pluginDataMap = _yield$UserLayoutUtil2 === void 0 ? {} : _yield$UserLayoutUtil2;
110
110
  return {
111
111
  settings: {},
112
112
  layoutConfig,
@@ -1 +1 @@
1
- {"version":3,"file":"LocalWorkspaceStorage.js","names":["Log","DateTimeColumnFormatter","DecimalColumnFormatter","IntegerColumnFormatter","merge","UserLayoutUtils","log","module","LocalWorkspaceStorage","getBooleanServerConfig","serverConfigValues","key","_serverConfigValues$g","_serverConfigValues$g2","get","toLowerCase","undefined","getJSONServerConfig","value","JSON","parse","e","error","concat","makeDefaultWorkspaceSettings","settings","defaultDateTimeFormat","DEFAULT_DATETIME_FORMAT_STRING","formatter","timeZone","DEFAULT_TIME_ZONE_ID","showTimeZone","showTSeparator","disableMoveConfirmation","defaultDecimalFormatOptions","defaultFormatString","DEFAULT_FORMAT_STRING","defaultIntegerFormatOptions","truncateNumbersWithPound","showEmptyStrings","showNullStrings","showExtraGroupColumn","notebookSettings","isMinimapEnabled","formatOnSave","python","linter","isEnabled","webgl","webglEditable","gridDensity","serverSettings","config","makeWorkspaceData","layoutStorage","options","_asyncToGenerator","filterSets","links","layoutConfig","pluginDataMap","getDefaultLayout","isConsoleAvailable","closed","makeDefaultWorkspace","data","constructor","_defineProperty","load","_this","_localStorage$getItem","workspace","localStorage","getItem","STORAGE_KEY","info","save","setItem","stringify"],"sources":["../../src/storage/LocalWorkspaceStorage.ts"],"sourcesContent":["import Log from '@deephaven/log';\nimport {\n type WorkspaceStorage,\n type WorkspaceStorageLoadOptions,\n type CustomizableWorkspaceData,\n type CustomizableWorkspace,\n type WorkspaceSettings,\n type ServerConfigValues,\n} from '@deephaven/redux';\nimport {\n DateTimeColumnFormatter,\n DecimalColumnFormatter,\n IntegerColumnFormatter,\n} from '@deephaven/jsapi-utils';\nimport merge from 'lodash.merge';\nimport UserLayoutUtils from './UserLayoutUtils';\nimport type LayoutStorage from './LayoutStorage';\n\nconst log = Log.module('LocalWorkspaceStorage');\n\n/**\n * Implementation of WorkspaceStorage that just stores the workspace data in localStorage\n */\nexport class LocalWorkspaceStorage implements WorkspaceStorage {\n static readonly STORAGE_KEY = 'deephaven.WorkspaceStorage';\n\n static getBooleanServerConfig(\n serverConfigValues: Map<string, string> | undefined,\n key: string\n ): boolean | undefined {\n if (serverConfigValues?.get(key)?.toLowerCase() === 'true') {\n return true;\n }\n if (serverConfigValues?.get(key)?.toLowerCase() === 'false') {\n return false;\n }\n return undefined;\n }\n\n static getJSONServerConfig(\n serverConfigValues: Map<string, string> | undefined,\n key: string\n ): Record<string, unknown> | undefined {\n const value = serverConfigValues?.get(key);\n\n if (value == null) {\n return undefined;\n }\n\n try {\n return JSON.parse(value);\n } catch (e) {\n log.error(\n `Unable to parse JSON server config for key ${key}. Value: ${value}`\n );\n return undefined;\n }\n }\n\n static makeDefaultWorkspaceSettings(\n serverConfigValues: ServerConfigValues\n ): WorkspaceSettings {\n const settings = {\n defaultDateTimeFormat:\n DateTimeColumnFormatter.DEFAULT_DATETIME_FORMAT_STRING,\n formatter: [],\n timeZone: DateTimeColumnFormatter.DEFAULT_TIME_ZONE_ID,\n showTimeZone: false,\n showTSeparator: true,\n disableMoveConfirmation: false,\n defaultDecimalFormatOptions: {\n defaultFormatString: DecimalColumnFormatter.DEFAULT_FORMAT_STRING,\n },\n defaultIntegerFormatOptions: {\n defaultFormatString: IntegerColumnFormatter.DEFAULT_FORMAT_STRING,\n },\n truncateNumbersWithPound: false,\n showEmptyStrings: true,\n showNullStrings: true,\n showExtraGroupColumn: true,\n notebookSettings: {\n isMinimapEnabled: false,\n formatOnSave: false,\n python: {\n linter: {\n isEnabled: true,\n // Omit default config so default settings are used if the user never changes them\n },\n },\n },\n webgl: true,\n webglEditable: true,\n gridDensity: 'regular',\n } satisfies WorkspaceSettings;\n const serverSettings = {\n defaultDateTimeFormat: serverConfigValues?.get('dateTimeFormat'),\n formatter: [],\n timeZone: serverConfigValues?.get('timeZone'),\n showTimeZone: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showTimeZone'\n ),\n showTSeparator: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showTSeparator'\n ),\n disableMoveConfirmation: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'disableMoveConfirmation'\n ),\n defaultDecimalFormatOptions:\n serverConfigValues?.get('decimalFormat') !== undefined\n ? {\n defaultFormatString: serverConfigValues?.get('decimalFormat'),\n }\n : undefined,\n defaultIntegerFormatOptions:\n serverConfigValues?.get('integerFormat') !== undefined\n ? {\n defaultFormatString: serverConfigValues?.get('integerFormat'),\n }\n : undefined,\n truncateNumbersWithPound: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'truncateNumbersWithPound'\n ),\n showEmptyStrings: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showEmptyStrings'\n ),\n showNullStrings: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showNullStrings'\n ),\n showExtraGroupColumn: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showExtraGroupColumn'\n ),\n notebookSettings: {\n isMinimapEnabled: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'web.user.notebookSettings.isMinimapEnabled'\n ),\n formatOnSave: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'web.user.notebookSettings.formatOnSave'\n ),\n python: {\n linter: {\n isEnabled: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'web.user.notebookSettings.python.linter.isEnabled'\n ),\n config: LocalWorkspaceStorage.getJSONServerConfig(\n serverConfigValues,\n 'web.user.notebookSettings.python.linter.config'\n ),\n },\n },\n },\n webgl: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'web.webgl'\n ),\n webglEditable: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'web.webgl.editable'\n ),\n } satisfies Partial<WorkspaceSettings>;\n\n return merge({}, settings, serverSettings);\n }\n\n static async makeWorkspaceData(\n layoutStorage: LayoutStorage,\n options?: WorkspaceStorageLoadOptions\n ): Promise<CustomizableWorkspaceData> {\n const {\n filterSets,\n links,\n layoutConfig,\n pluginDataMap = {},\n } = await UserLayoutUtils.getDefaultLayout(\n layoutStorage,\n options?.isConsoleAvailable\n );\n return {\n settings: {},\n layoutConfig,\n closed: [{}],\n links,\n filterSets,\n pluginDataMap,\n };\n }\n\n static async makeDefaultWorkspace(\n layoutStorage: LayoutStorage,\n options?: WorkspaceStorageLoadOptions\n ): Promise<CustomizableWorkspace> {\n return {\n data: await LocalWorkspaceStorage.makeWorkspaceData(\n layoutStorage,\n options\n ),\n };\n }\n\n private layoutStorage: LayoutStorage;\n\n constructor(layoutStorage: LayoutStorage) {\n this.layoutStorage = layoutStorage;\n }\n\n // eslint-disable-next-line class-methods-use-this\n async load(\n options?: WorkspaceStorageLoadOptions\n ): Promise<CustomizableWorkspace> {\n try {\n const workspace = JSON.parse(\n localStorage.getItem(LocalWorkspaceStorage.STORAGE_KEY) ?? ''\n );\n return workspace;\n } catch (e) {\n log.info('Unable to load workspace data, initializing to default data');\n\n return LocalWorkspaceStorage.makeDefaultWorkspace(\n this.layoutStorage,\n options\n );\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n async save(workspace: CustomizableWorkspace): Promise<CustomizableWorkspace> {\n localStorage.setItem(\n LocalWorkspaceStorage.STORAGE_KEY,\n JSON.stringify(workspace)\n );\n return workspace;\n }\n}\n\nexport default LocalWorkspaceStorage;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"LocalWorkspaceStorage.js","names":["Log","DateTimeColumnFormatter","DecimalColumnFormatter","IntegerColumnFormatter","merge","UserLayoutUtils","log","module","LocalWorkspaceStorage","getBooleanServerConfig","serverConfigValues","key","_serverConfigValues$g","_serverConfigValues$g2","get","toLowerCase","undefined","getJSONServerConfig","value","JSON","parse","e","error","concat","makeDefaultWorkspaceSettings","settings","defaultDateTimeFormat","DEFAULT_DATETIME_FORMAT_STRING","formatter","timeZone","DEFAULT_TIME_ZONE_ID","showTimeZone","showTSeparator","disableMoveConfirmation","defaultDecimalFormatOptions","defaultFormatString","DEFAULT_FORMAT_STRING","defaultIntegerFormatOptions","truncateNumbersWithPound","showEmptyStrings","showNullStrings","showExtraGroupColumn","notebookSettings","isMinimapEnabled","formatOnSave","python","linter","isEnabled","webgl","webglEditable","gridDensity","serverSettings","config","makeWorkspaceData","layoutStorage","options","_asyncToGenerator","_yield$UserLayoutUtil","getDefaultLayout","isConsoleAvailable","filterSets","links","layoutConfig","_yield$UserLayoutUtil2","pluginDataMap","closed","makeDefaultWorkspace","data","constructor","_defineProperty","load","_this","_localStorage$getItem","workspace","localStorage","getItem","STORAGE_KEY","info","save","setItem","stringify"],"sources":["../../src/storage/LocalWorkspaceStorage.ts"],"sourcesContent":["import Log from '@deephaven/log';\nimport {\n type WorkspaceStorage,\n type WorkspaceStorageLoadOptions,\n type CustomizableWorkspaceData,\n type CustomizableWorkspace,\n type WorkspaceSettings,\n type ServerConfigValues,\n} from '@deephaven/redux';\nimport {\n DateTimeColumnFormatter,\n DecimalColumnFormatter,\n IntegerColumnFormatter,\n} from '@deephaven/jsapi-utils';\nimport merge from 'lodash.merge';\nimport UserLayoutUtils from './UserLayoutUtils';\nimport type LayoutStorage from './LayoutStorage';\n\nconst log = Log.module('LocalWorkspaceStorage');\n\n/**\n * Implementation of WorkspaceStorage that just stores the workspace data in localStorage\n */\nexport class LocalWorkspaceStorage implements WorkspaceStorage {\n static readonly STORAGE_KEY = 'deephaven.WorkspaceStorage';\n\n static getBooleanServerConfig(\n serverConfigValues: Map<string, string> | undefined,\n key: string\n ): boolean | undefined {\n if (serverConfigValues?.get(key)?.toLowerCase() === 'true') {\n return true;\n }\n if (serverConfigValues?.get(key)?.toLowerCase() === 'false') {\n return false;\n }\n return undefined;\n }\n\n static getJSONServerConfig(\n serverConfigValues: Map<string, string> | undefined,\n key: string\n ): Record<string, unknown> | undefined {\n const value = serverConfigValues?.get(key);\n\n if (value == null) {\n return undefined;\n }\n\n try {\n return JSON.parse(value);\n } catch (e) {\n log.error(\n `Unable to parse JSON server config for key ${key}. Value: ${value}`\n );\n return undefined;\n }\n }\n\n static makeDefaultWorkspaceSettings(\n serverConfigValues: ServerConfigValues\n ): WorkspaceSettings {\n const settings = {\n defaultDateTimeFormat:\n DateTimeColumnFormatter.DEFAULT_DATETIME_FORMAT_STRING,\n formatter: [],\n timeZone: DateTimeColumnFormatter.DEFAULT_TIME_ZONE_ID,\n showTimeZone: false,\n showTSeparator: true,\n disableMoveConfirmation: false,\n defaultDecimalFormatOptions: {\n defaultFormatString: DecimalColumnFormatter.DEFAULT_FORMAT_STRING,\n },\n defaultIntegerFormatOptions: {\n defaultFormatString: IntegerColumnFormatter.DEFAULT_FORMAT_STRING,\n },\n truncateNumbersWithPound: false,\n showEmptyStrings: true,\n showNullStrings: true,\n showExtraGroupColumn: true,\n notebookSettings: {\n isMinimapEnabled: false,\n formatOnSave: false,\n python: {\n linter: {\n isEnabled: true,\n // Omit default config so default settings are used if the user never changes them\n },\n },\n },\n webgl: true,\n webglEditable: true,\n gridDensity: 'regular',\n } satisfies WorkspaceSettings;\n const serverSettings = {\n defaultDateTimeFormat: serverConfigValues?.get('dateTimeFormat'),\n formatter: [],\n timeZone: serverConfigValues?.get('timeZone'),\n showTimeZone: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showTimeZone'\n ),\n showTSeparator: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showTSeparator'\n ),\n disableMoveConfirmation: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'disableMoveConfirmation'\n ),\n defaultDecimalFormatOptions:\n serverConfigValues?.get('decimalFormat') !== undefined\n ? {\n defaultFormatString: serverConfigValues?.get('decimalFormat'),\n }\n : undefined,\n defaultIntegerFormatOptions:\n serverConfigValues?.get('integerFormat') !== undefined\n ? {\n defaultFormatString: serverConfigValues?.get('integerFormat'),\n }\n : undefined,\n truncateNumbersWithPound: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'truncateNumbersWithPound'\n ),\n showEmptyStrings: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showEmptyStrings'\n ),\n showNullStrings: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showNullStrings'\n ),\n showExtraGroupColumn: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showExtraGroupColumn'\n ),\n notebookSettings: {\n isMinimapEnabled: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'web.user.notebookSettings.isMinimapEnabled'\n ),\n formatOnSave: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'web.user.notebookSettings.formatOnSave'\n ),\n python: {\n linter: {\n isEnabled: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'web.user.notebookSettings.python.linter.isEnabled'\n ),\n config: LocalWorkspaceStorage.getJSONServerConfig(\n serverConfigValues,\n 'web.user.notebookSettings.python.linter.config'\n ),\n },\n },\n },\n webgl: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'web.webgl'\n ),\n webglEditable: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'web.webgl.editable'\n ),\n } satisfies Partial<WorkspaceSettings>;\n\n return merge({}, settings, serverSettings);\n }\n\n static async makeWorkspaceData(\n layoutStorage: LayoutStorage,\n options?: WorkspaceStorageLoadOptions\n ): Promise<CustomizableWorkspaceData> {\n const {\n filterSets,\n links,\n layoutConfig,\n pluginDataMap = {},\n } = await UserLayoutUtils.getDefaultLayout(\n layoutStorage,\n options?.isConsoleAvailable\n );\n return {\n settings: {},\n layoutConfig,\n closed: [{}],\n links,\n filterSets,\n pluginDataMap,\n };\n }\n\n static async makeDefaultWorkspace(\n layoutStorage: LayoutStorage,\n options?: WorkspaceStorageLoadOptions\n ): Promise<CustomizableWorkspace> {\n return {\n data: await LocalWorkspaceStorage.makeWorkspaceData(\n layoutStorage,\n options\n ),\n };\n }\n\n private layoutStorage: LayoutStorage;\n\n constructor(layoutStorage: LayoutStorage) {\n this.layoutStorage = layoutStorage;\n }\n\n // eslint-disable-next-line class-methods-use-this\n async load(\n options?: WorkspaceStorageLoadOptions\n ): Promise<CustomizableWorkspace> {\n try {\n const workspace = JSON.parse(\n localStorage.getItem(LocalWorkspaceStorage.STORAGE_KEY) ?? ''\n );\n return workspace;\n } catch (e) {\n log.info('Unable to load workspace data, initializing to default data');\n\n return LocalWorkspaceStorage.makeDefaultWorkspace(\n this.layoutStorage,\n options\n );\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n async save(workspace: CustomizableWorkspace): Promise<CustomizableWorkspace> {\n localStorage.setItem(\n LocalWorkspaceStorage.STORAGE_KEY,\n JSON.stringify(workspace)\n );\n return workspace;\n }\n}\n\nexport default LocalWorkspaceStorage;\n"],"mappings":"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","ignoreList":[]}
@@ -108,12 +108,11 @@ function _getDefaultLayout() {
108
108
  return _getDefaultLayout.apply(this, arguments);
109
109
  }
110
110
  export function exportLayout(data) {
111
- var {
112
- filterSets,
113
- layoutConfig,
114
- links,
115
- pluginDataMap
116
- } = data;
111
+ var _ref = data,
112
+ filterSets = _ref.filterSets,
113
+ layoutConfig = _ref.layoutConfig,
114
+ links = _ref.links,
115
+ pluginDataMap = _ref.pluginDataMap;
117
116
  var exportedLayout = {
118
117
  filterSets,
119
118
  layoutConfig,
@@ -1 +1 @@
1
- {"version":3,"file":"UserLayoutUtils.js","names":["CommandHistoryPanel","ConsolePanel","FileExplorerPanel","LogPanel","Log","isLayoutV1","isLayoutV2","log","module","DEFAULT_LAYOUT_CONFIG","layoutConfig","type","content","height","component","COMPONENT","title","TITLE","isClosable","width","links","filterSets","version","DEFAULT_LAYOUT_CONFIG_NO_CONSOLE","normalizeLayout","layout","Error","concat","getDefaultLayout","_x","_getDefaultLayout","apply","arguments","_asyncToGenerator","layoutStorage","isConsoleAvailable","length","undefined","layouts","getLayouts","getLayout","err","error","warn","exportLayout","data","pluginDataMap","exportedLayout"],"sources":["../../src/storage/UserLayoutUtils.ts"],"sourcesContent":["import {\n CommandHistoryPanel,\n ConsolePanel,\n FileExplorerPanel,\n LogPanel,\n} from '@deephaven/dashboard-core-plugins';\nimport Log from '@deephaven/log';\nimport { type CustomizableWorkspaceData } from '@deephaven/redux';\nimport {\n type ExportedLayout,\n type ExportedLayoutV2,\n isLayoutV1,\n isLayoutV2,\n} from './LayoutStorage';\nimport type LayoutStorage from './LayoutStorage';\n\nconst log = Log.module('UserLayoutUtils');\n\nexport const DEFAULT_LAYOUT_CONFIG: ExportedLayoutV2 = {\n layoutConfig: [\n {\n type: 'column',\n content: [\n {\n type: 'row',\n height: 40, // slightly smaller than 50-50 to allow more space for tables below\n content: [\n {\n type: 'stack',\n content: [\n {\n type: 'react-component',\n component: ConsolePanel.COMPONENT,\n title: ConsolePanel.TITLE,\n isClosable: false,\n },\n {\n type: 'react-component',\n component: LogPanel.COMPONENT,\n title: LogPanel.TITLE,\n isClosable: false,\n },\n ],\n },\n {\n type: 'stack',\n width: 25,\n content: [\n {\n type: 'react-component',\n component: CommandHistoryPanel.COMPONENT,\n title: CommandHistoryPanel.TITLE,\n isClosable: false,\n },\n {\n type: 'react-component',\n component: FileExplorerPanel.COMPONENT,\n title: FileExplorerPanel.TITLE,\n isClosable: false,\n },\n ],\n },\n ],\n },\n {\n type: 'row',\n content: [\n {\n type: 'stack',\n title: 'Notebooks',\n content: [],\n },\n ],\n },\n ],\n },\n ],\n links: [],\n filterSets: [],\n version: 2,\n};\n\nexport const DEFAULT_LAYOUT_CONFIG_NO_CONSOLE: ExportedLayoutV2 = {\n layoutConfig: [],\n links: [],\n filterSets: [],\n version: 2,\n};\n\nexport function normalizeLayout(layout: ExportedLayout): ExportedLayoutV2 {\n if (isLayoutV2(layout)) {\n return layout;\n }\n if (isLayoutV1(layout)) {\n const layoutConfig = layout;\n return {\n layoutConfig,\n links: [],\n filterSets: [],\n version: 2,\n };\n }\n\n throw new Error(`Unexpected layout import format: ${layout}`);\n}\n\n/**\n * Get the default layout for the user to use. Checks layout storage for any layouts, and uses the first one if found.\n * @param layoutStorage The layout storage to get the default layouts from\n * @param isConsoleAvailable Whether console sessions are available.\n * @returns The default layout config to use\n */\nexport async function getDefaultLayout(\n layoutStorage: LayoutStorage,\n isConsoleAvailable = true\n): Promise<ExportedLayoutV2> {\n try {\n const layouts = await layoutStorage.getLayouts();\n if (layouts.length > 0) {\n try {\n // We found a layout on the server, use it. It could be an empty layout if they want user to build their own\n const layout = await layoutStorage.getLayout(layouts[0]);\n return normalizeLayout(layout);\n } catch (err) {\n log.error('Unable to load layout', layouts[0], ':', err);\n log.warn('No valid layouts found, falling back to default layout');\n }\n }\n } catch (err) {\n log.error('Unable to fetch layout list', err);\n log.warn('Falling back to default layout');\n }\n // Otherwise, do the default layout\n return isConsoleAvailable\n ? DEFAULT_LAYOUT_CONFIG\n : DEFAULT_LAYOUT_CONFIG_NO_CONSOLE;\n}\n\nexport function exportLayout(\n data: CustomizableWorkspaceData\n): ExportedLayoutV2 {\n const { filterSets, layoutConfig, links, pluginDataMap } = data as Omit<\n ExportedLayoutV2,\n 'version'\n >;\n const exportedLayout: ExportedLayoutV2 = {\n filterSets,\n layoutConfig,\n links,\n pluginDataMap,\n version: 2,\n };\n return exportedLayout;\n}\n\nexport default { exportLayout, getDefaultLayout, normalizeLayout };\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"UserLayoutUtils.js","names":["CommandHistoryPanel","ConsolePanel","FileExplorerPanel","LogPanel","Log","isLayoutV1","isLayoutV2","log","module","DEFAULT_LAYOUT_CONFIG","layoutConfig","type","content","height","component","COMPONENT","title","TITLE","isClosable","width","links","filterSets","version","DEFAULT_LAYOUT_CONFIG_NO_CONSOLE","normalizeLayout","layout","Error","concat","getDefaultLayout","_x","_getDefaultLayout","apply","arguments","_asyncToGenerator","layoutStorage","isConsoleAvailable","length","undefined","layouts","getLayouts","getLayout","err","error","warn","exportLayout","data","_ref","pluginDataMap","exportedLayout"],"sources":["../../src/storage/UserLayoutUtils.ts"],"sourcesContent":["import {\n CommandHistoryPanel,\n ConsolePanel,\n FileExplorerPanel,\n LogPanel,\n} from '@deephaven/dashboard-core-plugins';\nimport Log from '@deephaven/log';\nimport { type CustomizableWorkspaceData } from '@deephaven/redux';\nimport {\n type ExportedLayout,\n type ExportedLayoutV2,\n isLayoutV1,\n isLayoutV2,\n} from './LayoutStorage';\nimport type LayoutStorage from './LayoutStorage';\n\nconst log = Log.module('UserLayoutUtils');\n\nexport const DEFAULT_LAYOUT_CONFIG: ExportedLayoutV2 = {\n layoutConfig: [\n {\n type: 'column',\n content: [\n {\n type: 'row',\n height: 40, // slightly smaller than 50-50 to allow more space for tables below\n content: [\n {\n type: 'stack',\n content: [\n {\n type: 'react-component',\n component: ConsolePanel.COMPONENT,\n title: ConsolePanel.TITLE,\n isClosable: false,\n },\n {\n type: 'react-component',\n component: LogPanel.COMPONENT,\n title: LogPanel.TITLE,\n isClosable: false,\n },\n ],\n },\n {\n type: 'stack',\n width: 25,\n content: [\n {\n type: 'react-component',\n component: CommandHistoryPanel.COMPONENT,\n title: CommandHistoryPanel.TITLE,\n isClosable: false,\n },\n {\n type: 'react-component',\n component: FileExplorerPanel.COMPONENT,\n title: FileExplorerPanel.TITLE,\n isClosable: false,\n },\n ],\n },\n ],\n },\n {\n type: 'row',\n content: [\n {\n type: 'stack',\n title: 'Notebooks',\n content: [],\n },\n ],\n },\n ],\n },\n ],\n links: [],\n filterSets: [],\n version: 2,\n};\n\nexport const DEFAULT_LAYOUT_CONFIG_NO_CONSOLE: ExportedLayoutV2 = {\n layoutConfig: [],\n links: [],\n filterSets: [],\n version: 2,\n};\n\nexport function normalizeLayout(layout: ExportedLayout): ExportedLayoutV2 {\n if (isLayoutV2(layout)) {\n return layout;\n }\n if (isLayoutV1(layout)) {\n const layoutConfig = layout;\n return {\n layoutConfig,\n links: [],\n filterSets: [],\n version: 2,\n };\n }\n\n throw new Error(`Unexpected layout import format: ${layout}`);\n}\n\n/**\n * Get the default layout for the user to use. Checks layout storage for any layouts, and uses the first one if found.\n * @param layoutStorage The layout storage to get the default layouts from\n * @param isConsoleAvailable Whether console sessions are available.\n * @returns The default layout config to use\n */\nexport async function getDefaultLayout(\n layoutStorage: LayoutStorage,\n isConsoleAvailable = true\n): Promise<ExportedLayoutV2> {\n try {\n const layouts = await layoutStorage.getLayouts();\n if (layouts.length > 0) {\n try {\n // We found a layout on the server, use it. It could be an empty layout if they want user to build their own\n const layout = await layoutStorage.getLayout(layouts[0]);\n return normalizeLayout(layout);\n } catch (err) {\n log.error('Unable to load layout', layouts[0], ':', err);\n log.warn('No valid layouts found, falling back to default layout');\n }\n }\n } catch (err) {\n log.error('Unable to fetch layout list', err);\n log.warn('Falling back to default layout');\n }\n // Otherwise, do the default layout\n return isConsoleAvailable\n ? DEFAULT_LAYOUT_CONFIG\n : DEFAULT_LAYOUT_CONFIG_NO_CONSOLE;\n}\n\nexport function exportLayout(\n data: CustomizableWorkspaceData\n): ExportedLayoutV2 {\n const { filterSets, layoutConfig, links, pluginDataMap } = data as Omit<\n ExportedLayoutV2,\n 'version'\n >;\n const exportedLayout: ExportedLayoutV2 = {\n filterSets,\n layoutConfig,\n links,\n pluginDataMap,\n version: 2,\n };\n return exportedLayout;\n}\n\nexport default { exportLayout, getDefaultLayout, normalizeLayout };\n"],"mappings":"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","ignoreList":[]}
@@ -171,9 +171,7 @@ export class GrpcFileStorageTable {
171
171
  fetchData() {
172
172
  var _this = this;
173
173
  return _asyncToGenerator(function* () {
174
- var {
175
- currentViewport: viewport
176
- } = _this;
174
+ var viewport = _this.currentViewport;
177
175
  if (!viewport) {
178
176
  throw new Error('No viewport set');
179
177
  }
@@ -196,10 +194,8 @@ export class GrpcFileStorageTable {
196
194
  // Get the data from all expanded directories
197
195
  for (var i = 0; i < items.length; i += 1) {
198
196
  var item = items[i];
199
- var {
200
- basename,
201
- filename
202
- } = item;
197
+ var basename = item.basename,
198
+ filename = item.filename;
203
199
  if (filename === _this.removeBaseRoot("".concat(_this.root, "/").concat(basename)) && item.type === 'directory') {
204
200
  var childTable = _this.childTables.get(basename);
205
201
  if (childTable != null) {
@@ -227,9 +223,7 @@ export class GrpcFileStorageTable {
227
223
  sendUpdate() {
228
224
  var _this$currentViewport;
229
225
  // Retain a reference to it in case a listener gets removed while sending an update
230
- var {
231
- listeners
232
- } = this;
226
+ var listeners = this.listeners;
233
227
  var data = (_this$currentViewport = this.currentViewportData) !== null && _this$currentViewport !== void 0 ? _this$currentViewport : {
234
228
  items: [],
235
229
  offset: 0
@@ -1 +1 @@
1
- {"version":3,"file":"GrpcFileStorageTable.js","names":["Log","CanceledPromiseError","PromiseUtils","FileUtils","debounce","log","module","GrpcFileStorageTable","constructor","storageService","baseRoot","arguments","length","undefined","root","_defineProperty","Map","doRefresh","bind","REFRESH_DEBOUNCE","removeBaseRoot","filename","removeRoot","getViewportData","_this$viewportUpdateP","viewportUpdatePromise","refreshInternal","Promise","resolve","items","offset","getSnapshot","sortedRanges","Error","size","currentSize","setExpanded","path","expanded","paths","split","nextPath","shift","concat","remainingPath","join","childTables","has","childTable","set","get","delete","currentViewport","collapseAll","clear","setSearch","search","setViewport","viewport","setFilters","setSorts","setReversed","close","listeners","onUpdate","callback","filter","other","debug2","fetchData","refresh","_this$viewportUpdateP2","cancel","refreshPromise","makeCancelable","then","viewportData","currentViewportData","sendUpdate","catch","e","isCanceled","error","_this","_asyncToGenerator","dirContents","listItems","map","file","type","basename","id","isExpanded","sort","a","b","localeCompare","i","item","top","bottom","childViewportData","splice","slice","_this$currentViewport","data"],"sources":["../../../src/storage/grpc/GrpcFileStorageTable.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\n\nimport Log from '@deephaven/log';\nimport {\n type StorageTableViewport,\n type StorageListenerRemover,\n type ViewportUpdateCallback,\n type ViewportData,\n type IndexRange,\n type StorageSnapshot,\n} from '@deephaven/storage';\nimport {\n type CancelablePromise,\n CanceledPromiseError,\n PromiseUtils,\n} from '@deephaven/utils';\nimport {\n type FileStorageItem,\n type FileStorageTable,\n FileUtils,\n} from '@deephaven/file-explorer';\nimport type { dh } from '@deephaven/jsapi-types';\nimport debounce from 'lodash.debounce';\n\nconst log = Log.module('GrpcFileStorageTable');\n\n/**\n * Implementation of FileStorageTable for gRPC service.\n * Takes a path to specify what root this table should start at.\n */\nexport class GrpcFileStorageTable implements FileStorageTable {\n static REFRESH_DEBOUNCE = 50;\n\n private readonly storageService: dh.storage.StorageService;\n\n private readonly baseRoot: string;\n\n private readonly root: string;\n\n private currentSize = 0;\n\n private currentViewport?: StorageTableViewport;\n\n private listeners: ViewportUpdateCallback<FileStorageItem>[] = [];\n\n private viewportUpdatePromise?: CancelablePromise<\n ViewportData<FileStorageItem>\n >;\n\n private currentViewportData?: ViewportData<FileStorageItem>;\n\n /**\n * Map of expanded directory paths to the tables that manage that path.\n * We use a tree of tables to query the server so we just get the directories that are expanded.\n */\n private childTables: Map<string, GrpcFileStorageTable> = new Map();\n\n /**\n * @param storageService The storage service to use\n * @param baseRoot Base root for the service\n * @param root The root path for this storage table\n */\n constructor(\n storageService: dh.storage.StorageService,\n baseRoot = '',\n root = baseRoot\n ) {\n this.storageService = storageService;\n this.baseRoot = baseRoot;\n this.root = root;\n if (root === baseRoot) {\n this.doRefresh = debounce(\n this.doRefresh.bind(this),\n GrpcFileStorageTable.REFRESH_DEBOUNCE\n );\n }\n }\n\n private removeBaseRoot(filename: string): string {\n return FileUtils.removeRoot(this.baseRoot, filename);\n }\n\n getViewportData(): Promise<ViewportData<FileStorageItem>> {\n if (!this.viewportUpdatePromise) {\n this.refreshInternal();\n }\n return (\n this.viewportUpdatePromise ?? Promise.resolve({ items: [], offset: 0 })\n );\n }\n\n getSnapshot(\n sortedRanges: IndexRange[]\n ): Promise<StorageSnapshot<FileStorageItem>> {\n throw new Error('Method not implemented.');\n }\n\n get size(): number {\n return this.currentSize;\n }\n\n setExpanded(path: string, expanded: boolean): void {\n const paths = path.split('/');\n let nextPath = paths.shift();\n if (nextPath === undefined || nextPath === '') {\n nextPath = paths.shift();\n }\n if (nextPath === undefined || nextPath === '') {\n throw new Error(`Invalid path: ${path}`);\n }\n const remainingPath = paths.join('/');\n if (expanded) {\n if (!this.childTables.has(nextPath)) {\n const childTable = new GrpcFileStorageTable(\n this.storageService,\n this.baseRoot,\n `${this.root}/${nextPath}`\n );\n this.childTables.set(nextPath, childTable);\n }\n if (remainingPath) {\n const childTable = this.childTables.get(nextPath);\n childTable?.setExpanded(remainingPath, expanded);\n }\n } else if (this.childTables.has(nextPath)) {\n if (remainingPath) {\n const childTable = this.childTables.get(nextPath);\n childTable?.setExpanded(remainingPath, expanded);\n } else {\n this.childTables.delete(nextPath);\n }\n }\n if (this.currentViewport) {\n this.refreshInternal();\n }\n }\n\n collapseAll(): void {\n this.childTables.clear();\n if (this.currentViewport) {\n this.refreshInternal();\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n setSearch(search: string): void {\n throw new Error('Method not implemented.');\n }\n\n setViewport(viewport: StorageTableViewport): void {\n this.currentViewport = viewport;\n\n this.refreshInternal();\n }\n\n setFilters(): void {\n throw new Error('Method not implemented.');\n }\n\n setSorts(): void {\n throw new Error('Method not implemented.');\n }\n\n setReversed(): void {\n throw new Error('Method not implemented.');\n }\n\n close(): void {\n this.listeners = [];\n }\n\n onUpdate(\n callback: ViewportUpdateCallback<FileStorageItem>\n ): StorageListenerRemover {\n this.listeners = [...this.listeners, callback];\n return () => {\n this.listeners = this.listeners.filter(other => other !== callback);\n };\n }\n\n doRefresh(\n callback: (fetchPromise: Promise<ViewportData<FileStorageItem>>) => void\n ): void {\n log.debug2('doRefresh', this.root);\n callback(this.fetchData());\n }\n\n refresh(): void {\n log.debug2('refresh', this.root);\n\n this.viewportUpdatePromise?.cancel();\n\n const refreshPromise = new Promise<ViewportData<FileStorageItem>>(\n resolve => {\n this.doRefresh(resolve);\n }\n );\n\n const viewportUpdatePromise = PromiseUtils.makeCancelable(\n refreshPromise.then(viewportData => {\n if (this.viewportUpdatePromise !== viewportUpdatePromise) {\n throw new CanceledPromiseError();\n }\n\n this.currentViewportData = viewportData;\n\n this.sendUpdate();\n\n return viewportData;\n })\n );\n\n // Add a catch here as we're not catching the promises anywhere else\n viewportUpdatePromise.catch(e => {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Error updating viewport', e);\n }\n });\n\n this.viewportUpdatePromise = viewportUpdatePromise;\n }\n\n /**\n * Refreshes data, but catches any errors and logs them\n */\n private refreshInternal(): void {\n try {\n this.refresh();\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to refresh data', e);\n }\n }\n }\n\n private async fetchData(): Promise<ViewportData<FileStorageItem>> {\n const { currentViewport: viewport } = this;\n if (!viewport) {\n throw new Error('No viewport set');\n }\n\n // First get the root directory contents\n const dirContents = await this.storageService.listItems(this.root);\n let items = dirContents\n .map(file => ({\n type: file.type,\n filename: this.removeBaseRoot(file.filename),\n basename: file.basename,\n id: this.removeBaseRoot(file.filename),\n isExpanded:\n file.type === 'directory'\n ? this.childTables.has(file.basename)\n : undefined,\n }))\n .sort((a, b) => {\n if (a.type !== b.type) {\n return a.type === 'directory' ? -1 : 1;\n }\n return a.basename.localeCompare(b.basename);\n }) as FileStorageItem[];\n\n // Get the data from all expanded directories\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { basename, filename } = item;\n if (\n filename === this.removeBaseRoot(`${this.root}/${basename}`) &&\n item.type === 'directory'\n ) {\n const childTable = this.childTables.get(basename);\n if (childTable != null) {\n childTable.setViewport({ top: 0, bottom: viewport.bottom - i });\n // eslint-disable-next-line no-await-in-loop\n const childViewportData = await childTable.getViewportData();\n items.splice(i + 1, 0, ...childViewportData.items);\n }\n }\n }\n\n this.currentSize = items.length;\n\n log.debug2(this.root, 'items', items, viewport);\n\n // Slice it to the correct viewport\n items = items.slice(viewport.top, viewport.bottom);\n\n return { items, offset: viewport.top };\n }\n\n private sendUpdate(): void {\n // Retain a reference to it in case a listener gets removed while sending an update\n const { listeners } = this;\n const data = this.currentViewportData ?? { items: [], offset: 0 };\n for (let i = 0; i < listeners.length; i += 1) {\n listeners[i](data);\n }\n }\n}\n\nexport default GrpcFileStorageTable;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"GrpcFileStorageTable.js","names":["Log","CanceledPromiseError","PromiseUtils","FileUtils","debounce","log","module","GrpcFileStorageTable","constructor","storageService","baseRoot","arguments","length","undefined","root","_defineProperty","Map","doRefresh","bind","REFRESH_DEBOUNCE","removeBaseRoot","filename","removeRoot","getViewportData","_this$viewportUpdateP","viewportUpdatePromise","refreshInternal","Promise","resolve","items","offset","getSnapshot","sortedRanges","Error","size","currentSize","setExpanded","path","expanded","paths","split","nextPath","shift","concat","remainingPath","join","childTables","has","childTable","set","get","delete","currentViewport","collapseAll","clear","setSearch","search","setViewport","viewport","setFilters","setSorts","setReversed","close","listeners","onUpdate","callback","filter","other","debug2","fetchData","refresh","_this$viewportUpdateP2","cancel","refreshPromise","makeCancelable","then","viewportData","currentViewportData","sendUpdate","catch","e","isCanceled","error","_this","_asyncToGenerator","dirContents","listItems","map","file","type","basename","id","isExpanded","sort","a","b","localeCompare","i","item","top","bottom","childViewportData","splice","slice","_this$currentViewport","data"],"sources":["../../../src/storage/grpc/GrpcFileStorageTable.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\n\nimport Log from '@deephaven/log';\nimport {\n type StorageTableViewport,\n type StorageListenerRemover,\n type ViewportUpdateCallback,\n type ViewportData,\n type IndexRange,\n type StorageSnapshot,\n} from '@deephaven/storage';\nimport {\n type CancelablePromise,\n CanceledPromiseError,\n PromiseUtils,\n} from '@deephaven/utils';\nimport {\n type FileStorageItem,\n type FileStorageTable,\n FileUtils,\n} from '@deephaven/file-explorer';\nimport type { dh } from '@deephaven/jsapi-types';\nimport debounce from 'lodash.debounce';\n\nconst log = Log.module('GrpcFileStorageTable');\n\n/**\n * Implementation of FileStorageTable for gRPC service.\n * Takes a path to specify what root this table should start at.\n */\nexport class GrpcFileStorageTable implements FileStorageTable {\n static REFRESH_DEBOUNCE = 50;\n\n private readonly storageService: dh.storage.StorageService;\n\n private readonly baseRoot: string;\n\n private readonly root: string;\n\n private currentSize = 0;\n\n private currentViewport?: StorageTableViewport;\n\n private listeners: ViewportUpdateCallback<FileStorageItem>[] = [];\n\n private viewportUpdatePromise?: CancelablePromise<\n ViewportData<FileStorageItem>\n >;\n\n private currentViewportData?: ViewportData<FileStorageItem>;\n\n /**\n * Map of expanded directory paths to the tables that manage that path.\n * We use a tree of tables to query the server so we just get the directories that are expanded.\n */\n private childTables: Map<string, GrpcFileStorageTable> = new Map();\n\n /**\n * @param storageService The storage service to use\n * @param baseRoot Base root for the service\n * @param root The root path for this storage table\n */\n constructor(\n storageService: dh.storage.StorageService,\n baseRoot = '',\n root = baseRoot\n ) {\n this.storageService = storageService;\n this.baseRoot = baseRoot;\n this.root = root;\n if (root === baseRoot) {\n this.doRefresh = debounce(\n this.doRefresh.bind(this),\n GrpcFileStorageTable.REFRESH_DEBOUNCE\n );\n }\n }\n\n private removeBaseRoot(filename: string): string {\n return FileUtils.removeRoot(this.baseRoot, filename);\n }\n\n getViewportData(): Promise<ViewportData<FileStorageItem>> {\n if (!this.viewportUpdatePromise) {\n this.refreshInternal();\n }\n return (\n this.viewportUpdatePromise ?? Promise.resolve({ items: [], offset: 0 })\n );\n }\n\n getSnapshot(\n sortedRanges: IndexRange[]\n ): Promise<StorageSnapshot<FileStorageItem>> {\n throw new Error('Method not implemented.');\n }\n\n get size(): number {\n return this.currentSize;\n }\n\n setExpanded(path: string, expanded: boolean): void {\n const paths = path.split('/');\n let nextPath = paths.shift();\n if (nextPath === undefined || nextPath === '') {\n nextPath = paths.shift();\n }\n if (nextPath === undefined || nextPath === '') {\n throw new Error(`Invalid path: ${path}`);\n }\n const remainingPath = paths.join('/');\n if (expanded) {\n if (!this.childTables.has(nextPath)) {\n const childTable = new GrpcFileStorageTable(\n this.storageService,\n this.baseRoot,\n `${this.root}/${nextPath}`\n );\n this.childTables.set(nextPath, childTable);\n }\n if (remainingPath) {\n const childTable = this.childTables.get(nextPath);\n childTable?.setExpanded(remainingPath, expanded);\n }\n } else if (this.childTables.has(nextPath)) {\n if (remainingPath) {\n const childTable = this.childTables.get(nextPath);\n childTable?.setExpanded(remainingPath, expanded);\n } else {\n this.childTables.delete(nextPath);\n }\n }\n if (this.currentViewport) {\n this.refreshInternal();\n }\n }\n\n collapseAll(): void {\n this.childTables.clear();\n if (this.currentViewport) {\n this.refreshInternal();\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n setSearch(search: string): void {\n throw new Error('Method not implemented.');\n }\n\n setViewport(viewport: StorageTableViewport): void {\n this.currentViewport = viewport;\n\n this.refreshInternal();\n }\n\n setFilters(): void {\n throw new Error('Method not implemented.');\n }\n\n setSorts(): void {\n throw new Error('Method not implemented.');\n }\n\n setReversed(): void {\n throw new Error('Method not implemented.');\n }\n\n close(): void {\n this.listeners = [];\n }\n\n onUpdate(\n callback: ViewportUpdateCallback<FileStorageItem>\n ): StorageListenerRemover {\n this.listeners = [...this.listeners, callback];\n return () => {\n this.listeners = this.listeners.filter(other => other !== callback);\n };\n }\n\n doRefresh(\n callback: (fetchPromise: Promise<ViewportData<FileStorageItem>>) => void\n ): void {\n log.debug2('doRefresh', this.root);\n callback(this.fetchData());\n }\n\n refresh(): void {\n log.debug2('refresh', this.root);\n\n this.viewportUpdatePromise?.cancel();\n\n const refreshPromise = new Promise<ViewportData<FileStorageItem>>(\n resolve => {\n this.doRefresh(resolve);\n }\n );\n\n const viewportUpdatePromise = PromiseUtils.makeCancelable(\n refreshPromise.then(viewportData => {\n if (this.viewportUpdatePromise !== viewportUpdatePromise) {\n throw new CanceledPromiseError();\n }\n\n this.currentViewportData = viewportData;\n\n this.sendUpdate();\n\n return viewportData;\n })\n );\n\n // Add a catch here as we're not catching the promises anywhere else\n viewportUpdatePromise.catch(e => {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Error updating viewport', e);\n }\n });\n\n this.viewportUpdatePromise = viewportUpdatePromise;\n }\n\n /**\n * Refreshes data, but catches any errors and logs them\n */\n private refreshInternal(): void {\n try {\n this.refresh();\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to refresh data', e);\n }\n }\n }\n\n private async fetchData(): Promise<ViewportData<FileStorageItem>> {\n const { currentViewport: viewport } = this;\n if (!viewport) {\n throw new Error('No viewport set');\n }\n\n // First get the root directory contents\n const dirContents = await this.storageService.listItems(this.root);\n let items = dirContents\n .map(file => ({\n type: file.type,\n filename: this.removeBaseRoot(file.filename),\n basename: file.basename,\n id: this.removeBaseRoot(file.filename),\n isExpanded:\n file.type === 'directory'\n ? this.childTables.has(file.basename)\n : undefined,\n }))\n .sort((a, b) => {\n if (a.type !== b.type) {\n return a.type === 'directory' ? -1 : 1;\n }\n return a.basename.localeCompare(b.basename);\n }) as FileStorageItem[];\n\n // Get the data from all expanded directories\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { basename, filename } = item;\n if (\n filename === this.removeBaseRoot(`${this.root}/${basename}`) &&\n item.type === 'directory'\n ) {\n const childTable = this.childTables.get(basename);\n if (childTable != null) {\n childTable.setViewport({ top: 0, bottom: viewport.bottom - i });\n // eslint-disable-next-line no-await-in-loop\n const childViewportData = await childTable.getViewportData();\n items.splice(i + 1, 0, ...childViewportData.items);\n }\n }\n }\n\n this.currentSize = items.length;\n\n log.debug2(this.root, 'items', items, viewport);\n\n // Slice it to the correct viewport\n items = items.slice(viewport.top, viewport.bottom);\n\n return { items, offset: viewport.top };\n }\n\n private sendUpdate(): void {\n // Retain a reference to it in case a listener gets removed while sending an update\n const { listeners } = this;\n const data = this.currentViewportData ?? { items: [], offset: 0 };\n for (let i = 0; i < listeners.length; i += 1) {\n listeners[i](data);\n }\n }\n}\n\nexport default GrpcFileStorageTable;\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/app-utils",
3
- "version": "1.22.1",
3
+ "version": "1.22.2-alpha-pivot-builder.0+e2a2077",
4
4
  "description": "Deephaven App Utils",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -22,30 +22,30 @@
22
22
  "build:babel": "babel ./src --out-dir ./dist --extensions \".ts,.tsx,.js,.jsx\" --source-maps --root-mode upward"
23
23
  },
24
24
  "devDependencies": {
25
- "@deephaven/test-utils": "^1.8.0"
25
+ "@deephaven/test-utils": "^1.22.2-alpha-pivot-builder.0+e2a2077"
26
26
  },
27
27
  "dependencies": {
28
28
  "@adobe/react-spectrum": "3.47.0",
29
- "@deephaven/auth-plugins": "^1.22.1",
30
- "@deephaven/chart": "^1.22.1",
31
- "@deephaven/components": "^1.22.1",
32
- "@deephaven/console": "^1.22.1",
33
- "@deephaven/dashboard": "^1.22.1",
34
- "@deephaven/dashboard-core-plugins": "^1.22.1",
35
- "@deephaven/file-explorer": "^1.22.1",
36
- "@deephaven/golden-layout": "^1.22.1",
37
- "@deephaven/icons": "^1.2.0",
38
- "@deephaven/iris-grid": "^1.22.1",
39
- "@deephaven/jsapi-bootstrap": "^1.22.1",
40
- "@deephaven/jsapi-components": "^1.22.1",
29
+ "@deephaven/auth-plugins": "^1.22.2-alpha-pivot-builder.0+e2a2077",
30
+ "@deephaven/chart": "^1.22.2-alpha-pivot-builder.0+e2a2077",
31
+ "@deephaven/components": "^1.22.2-alpha-pivot-builder.0+e2a2077",
32
+ "@deephaven/console": "^1.22.2-alpha-pivot-builder.0+e2a2077",
33
+ "@deephaven/dashboard": "^1.22.2-alpha-pivot-builder.0+e2a2077",
34
+ "@deephaven/dashboard-core-plugins": "^1.22.2-alpha-pivot-builder.0+e2a2077",
35
+ "@deephaven/file-explorer": "^1.22.2-alpha-pivot-builder.0+e2a2077",
36
+ "@deephaven/golden-layout": "^1.22.2-alpha-pivot-builder.0+e2a2077",
37
+ "@deephaven/icons": "^1.22.2-alpha-pivot-builder.0+e2a2077",
38
+ "@deephaven/iris-grid": "^1.22.2-alpha-pivot-builder.0+e2a2077",
39
+ "@deephaven/jsapi-bootstrap": "^1.22.2-alpha-pivot-builder.0+e2a2077",
40
+ "@deephaven/jsapi-components": "^1.22.2-alpha-pivot-builder.0+e2a2077",
41
41
  "@deephaven/jsapi-types": "^1.0.0-dev0.40.4",
42
- "@deephaven/jsapi-utils": "^1.22.1",
43
- "@deephaven/log": "^1.8.0",
44
- "@deephaven/plugin": "^1.22.1",
45
- "@deephaven/react-hooks": "^1.21.1",
46
- "@deephaven/redux": "^1.22.1",
47
- "@deephaven/storage": "^1.8.0",
48
- "@deephaven/utils": "^1.10.0",
42
+ "@deephaven/jsapi-utils": "^1.22.2-alpha-pivot-builder.0+e2a2077",
43
+ "@deephaven/log": "^1.22.2-alpha-pivot-builder.0+e2a2077",
44
+ "@deephaven/plugin": "^1.22.2-alpha-pivot-builder.0+e2a2077",
45
+ "@deephaven/react-hooks": "^1.22.2-alpha-pivot-builder.0+e2a2077",
46
+ "@deephaven/redux": "^1.22.2-alpha-pivot-builder.0+e2a2077",
47
+ "@deephaven/storage": "^1.22.2-alpha-pivot-builder.0+e2a2077",
48
+ "@deephaven/utils": "^1.22.2-alpha-pivot-builder.0+e2a2077",
49
49
  "@paciolan/remote-component": "2.13.0",
50
50
  "@paciolan/remote-module-loader": "^3.0.2",
51
51
  "classnames": "^2.5.1",
@@ -68,5 +68,5 @@
68
68
  "publishConfig": {
69
69
  "access": "public"
70
70
  },
71
- "gitHead": "d0ac1eabfef8efac88058247aeaef0ed526722d1"
71
+ "gitHead": "e2a207700c2da1195164130643e7c5e5b223485a"
72
72
  }