@deephaven/dashboard-core-plugins 1.1.2-grid-render-loop.4 → 1.2.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.
- package/dist/GridWidgetPlugin.d.ts.map +1 -1
- package/dist/GridWidgetPlugin.js +42 -10
- package/dist/GridWidgetPlugin.js.map +1 -1
- package/dist/TablePluginWrapper.d.ts +8 -0
- package/dist/TablePluginWrapper.d.ts.map +1 -0
- package/dist/TablePluginWrapper.js +55 -0
- package/dist/TablePluginWrapper.js.map +1 -0
- package/dist/useTablePlugin.d.ts +36 -0
- package/dist/useTablePlugin.d.ts.map +1 -0
- package/dist/useTablePlugin.js +55 -0
- package/dist/useTablePlugin.js.map +1 -0
- package/package.json +24 -24
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridWidgetPlugin.d.ts","sourceRoot":"","sources":["../src/GridWidgetPlugin.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"GridWidgetPlugin.d.ts","sourceRoot":"","sources":["../src/GridWidgetPlugin.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAwB3D,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,GACN,EAAE,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAmJzD;AAED,eAAe,gBAAgB,CAAC"}
|
package/dist/GridWidgetPlugin.js
CHANGED
|
@@ -1,23 +1,28 @@
|
|
|
1
|
+
var _excluded = ["alwaysFetchColumns"];
|
|
2
|
+
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
|
|
3
|
+
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
1
4
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
2
5
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
3
6
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
4
7
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
5
8
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
6
|
-
import { useCallback, useMemo, useRef } from 'react';
|
|
9
|
+
import { useCallback, useMemo, useRef, useState } from 'react';
|
|
7
10
|
import { usePersistentState } from '@deephaven/plugin';
|
|
8
11
|
import { IrisGrid, IrisGridCacheUtils, IrisGridUtils, isIrisGridTableModelTemplate } from '@deephaven/iris-grid';
|
|
9
12
|
import { useSelector } from 'react-redux';
|
|
10
13
|
import { getSettings } from '@deephaven/redux';
|
|
11
14
|
import { LoadingOverlay } from '@deephaven/components';
|
|
12
15
|
import { useLayoutManager, useListener } from '@deephaven/dashboard';
|
|
13
|
-
import { getErrorMessage } from '@deephaven/utils';
|
|
16
|
+
import { assertNotNull, getErrorMessage } from '@deephaven/utils';
|
|
14
17
|
import { useApi } from '@deephaven/jsapi-bootstrap';
|
|
15
18
|
import { useIrisGridModel } from "./useIrisGridModel.js";
|
|
16
19
|
import useDashboardColumnFilters from "./useDashboardColumnFilters.js";
|
|
17
20
|
import { InputFilterEvent } from "./events/index.js";
|
|
18
21
|
import useGridLinker from "./useGridLinker.js";
|
|
22
|
+
import { useTablePlugin } from "./useTablePlugin.js";
|
|
19
23
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
20
24
|
export function GridWidgetPlugin(_ref) {
|
|
25
|
+
var _model$columns;
|
|
21
26
|
var {
|
|
22
27
|
fetch
|
|
23
28
|
} = _ref;
|
|
@@ -26,6 +31,7 @@ export function GridWidgetPlugin(_ref) {
|
|
|
26
31
|
eventHub
|
|
27
32
|
} = useLayoutManager();
|
|
28
33
|
var fetchResult = useIrisGridModel(fetch);
|
|
34
|
+
var model = fetchResult.status === 'success' ? fetchResult.model : undefined;
|
|
29
35
|
var dh = useApi();
|
|
30
36
|
var irisGridUtils = useMemo(() => new IrisGridUtils(dh), [dh]);
|
|
31
37
|
var [state, setState] = usePersistentState(undefined, {
|
|
@@ -47,9 +53,13 @@ export function GridWidgetPlugin(_ref) {
|
|
|
47
53
|
var newState = dehydrateIrisGridState(fetchResult.model, irisGridState, gridState);
|
|
48
54
|
setState(newState);
|
|
49
55
|
}, [fetchResult, setState, dehydrateIrisGridState]);
|
|
50
|
-
var inputFilters = useDashboardColumnFilters(
|
|
56
|
+
var inputFilters = useDashboardColumnFilters((_model$columns = model === null || model === void 0 ? void 0 : model.columns) !== null && _model$columns !== void 0 ? _model$columns : null, model != null && isIrisGridTableModelTemplate(model) ? model.table : undefined);
|
|
51
57
|
var irisGridRef = useRef(null);
|
|
52
|
-
var
|
|
58
|
+
var _useGridLinker = useGridLinker(fetchResult.status === 'success' ? fetchResult.model : null, irisGridRef.current),
|
|
59
|
+
{
|
|
60
|
+
alwaysFetchColumns: linkerAlwaysFetchColumns
|
|
61
|
+
} = _useGridLinker,
|
|
62
|
+
linkerProps = _objectWithoutProperties(_useGridLinker, _excluded);
|
|
53
63
|
var handleClearAllFilters = useCallback(() => {
|
|
54
64
|
if (irisGridRef.current == null) {
|
|
55
65
|
return;
|
|
@@ -57,6 +67,22 @@ export function GridWidgetPlugin(_ref) {
|
|
|
57
67
|
irisGridRef.current.clearAllFilters();
|
|
58
68
|
}, []);
|
|
59
69
|
useListener(eventHub, InputFilterEvent.CLEAR_ALL_FILTERS, handleClearAllFilters);
|
|
70
|
+
var [selection, setSelection] = useState([]);
|
|
71
|
+
var {
|
|
72
|
+
Plugin,
|
|
73
|
+
customFilters,
|
|
74
|
+
alwaysFetchColumns: filterFetchColumns,
|
|
75
|
+
onContextMenu
|
|
76
|
+
} = useTablePlugin({
|
|
77
|
+
model,
|
|
78
|
+
irisGridRef,
|
|
79
|
+
irisGridUtils,
|
|
80
|
+
selectedRanges: selection
|
|
81
|
+
});
|
|
82
|
+
var alwaysFetchColumns = useMemo(() => {
|
|
83
|
+
var columnSet = new Set([...linkerAlwaysFetchColumns, ...filterFetchColumns]);
|
|
84
|
+
return [...columnSet];
|
|
85
|
+
}, [linkerAlwaysFetchColumns, filterFetchColumns]);
|
|
60
86
|
if (fetchResult.status === 'loading') {
|
|
61
87
|
return /*#__PURE__*/_jsx(LoadingOverlay, {
|
|
62
88
|
isLoading: true
|
|
@@ -68,17 +94,23 @@ export function GridWidgetPlugin(_ref) {
|
|
|
68
94
|
isLoading: false
|
|
69
95
|
});
|
|
70
96
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
} = fetchResult;
|
|
74
|
-
return /*#__PURE__*/_jsx(IrisGrid, _objectSpread(_objectSpread({
|
|
97
|
+
assertNotNull(model, 'Model should be defined when fetch is successful');
|
|
98
|
+
return /*#__PURE__*/_jsx(IrisGrid, _objectSpread(_objectSpread(_objectSpread({
|
|
75
99
|
ref: irisGridRef,
|
|
76
100
|
model: model,
|
|
77
101
|
settings: settings,
|
|
78
102
|
onStateChange: handleIrisGridChange,
|
|
79
|
-
|
|
103
|
+
onSelectionChanged: setSelection,
|
|
104
|
+
onContextMenu: onContextMenu,
|
|
105
|
+
inputFilters: inputFilters,
|
|
106
|
+
customFilters: customFilters
|
|
107
|
+
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
108
|
+
}, linkerProps), {}, {
|
|
109
|
+
alwaysFetchColumns: alwaysFetchColumns
|
|
80
110
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
81
|
-
},
|
|
111
|
+
}, hydratedState), {}, {
|
|
112
|
+
children: Plugin
|
|
113
|
+
}));
|
|
82
114
|
}
|
|
83
115
|
export default GridWidgetPlugin;
|
|
84
116
|
//# sourceMappingURL=GridWidgetPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridWidgetPlugin.js","names":["useCallback","useMemo","useRef","usePersistentState","IrisGrid","IrisGridCacheUtils","IrisGridUtils","isIrisGridTableModelTemplate","useSelector","getSettings","LoadingOverlay","useLayoutManager","useListener","getErrorMessage","useApi","useIrisGridModel","useDashboardColumnFilters","InputFilterEvent","useGridLinker","jsx","_jsx","GridWidgetPlugin","_ref","fetch","settings","eventHub","fetchResult","dh","irisGridUtils","state","setState","undefined","version","type","initialState","hydratedState","status","current","_objectSpread","hydrateIrisGridState","model","hydrateGridState","dehydrateIrisGridState","makeMemoizedCombinedGridStateDehydrator","handleIrisGridChange","irisGridState","gridState","newState","inputFilters","columns","table","irisGridRef","linkerProps","handleClearAllFilters","clearAllFilters","CLEAR_ALL_FILTERS","isLoading","errorMessage","error","ref","onStateChange"],"sources":["../src/GridWidgetPlugin.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef } from 'react';\nimport {\n type WidgetComponentProps,\n usePersistentState,\n} from '@deephaven/plugin';\nimport { type dh as DhType } from '@deephaven/jsapi-types';\nimport {\n type DehydratedGridState,\n type DehydratedIrisGridState,\n IrisGrid,\n IrisGridCacheUtils,\n type IrisGridState,\n type IrisGridType,\n IrisGridUtils,\n isIrisGridTableModelTemplate,\n} from '@deephaven/iris-grid';\nimport { useSelector } from 'react-redux';\nimport { getSettings, type RootState } from '@deephaven/redux';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { useLayoutManager, useListener } from '@deephaven/dashboard';\nimport { getErrorMessage } from '@deephaven/utils';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { type GridState } from '@deephaven/grid';\nimport { useIrisGridModel } from './useIrisGridModel';\nimport useDashboardColumnFilters from './useDashboardColumnFilters';\nimport { InputFilterEvent } from './events';\nimport useGridLinker from './useGridLinker';\n\nexport function GridWidgetPlugin({\n fetch,\n}: WidgetComponentProps<DhType.Table>): JSX.Element | null {\n const settings = useSelector(getSettings<RootState>);\n const { eventHub } = useLayoutManager();\n\n const fetchResult = useIrisGridModel(fetch);\n\n const dh = useApi();\n const irisGridUtils = useMemo(() => new IrisGridUtils(dh), [dh]);\n\n const [state, setState] = usePersistentState<\n (DehydratedIrisGridState & DehydratedGridState) | undefined\n >(undefined, {\n version: 1,\n type: 'GridWidgetPlugin',\n });\n const initialState = useRef(state);\n const hydratedState = useMemo(() => {\n if (\n fetchResult.status !== 'success' ||\n initialState.current === undefined\n ) {\n return;\n }\n return {\n ...irisGridUtils.hydrateIrisGridState(\n fetchResult.model,\n initialState.current\n ),\n ...IrisGridUtils.hydrateGridState(\n fetchResult.model,\n initialState.current\n ),\n };\n }, [fetchResult, irisGridUtils]);\n\n const dehydrateIrisGridState = useMemo(\n () => IrisGridCacheUtils.makeMemoizedCombinedGridStateDehydrator(),\n []\n );\n\n const handleIrisGridChange = useCallback(\n (irisGridState: IrisGridState, gridState: GridState) => {\n if (\n fetchResult.status !== 'success' ||\n irisGridState == null ||\n gridState == null\n ) {\n return;\n }\n\n const newState = dehydrateIrisGridState(\n fetchResult.model,\n irisGridState,\n gridState\n );\n\n setState(newState);\n },\n [fetchResult, setState, dehydrateIrisGridState]\n );\n\n const inputFilters = useDashboardColumnFilters(\n fetchResult.status === 'success' ? fetchResult.model.columns : null,\n fetchResult.status === 'success' &&\n isIrisGridTableModelTemplate(fetchResult.model)\n ? fetchResult.model.table\n : undefined\n );\n\n const irisGridRef = useRef<IrisGridType | null>(null);\n\n const linkerProps = useGridLinker(\n fetchResult.status === 'success' ? fetchResult.model : null,\n irisGridRef.current\n );\n\n const handleClearAllFilters = useCallback(() => {\n if (irisGridRef.current == null) {\n return;\n }\n irisGridRef.current.clearAllFilters();\n }, []);\n\n useListener(\n eventHub,\n InputFilterEvent.CLEAR_ALL_FILTERS,\n handleClearAllFilters\n );\n\n if (fetchResult.status === 'loading') {\n return <LoadingOverlay isLoading />;\n }\n\n if (fetchResult.status === 'error') {\n return (\n <LoadingOverlay\n errorMessage={getErrorMessage(fetchResult.error)}\n isLoading={false}\n />\n );\n }\n\n const { model } = fetchResult;\n\n return (\n <IrisGrid\n ref={irisGridRef}\n model={model}\n settings={settings}\n onStateChange={handleIrisGridChange}\n inputFilters={inputFilters}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...linkerProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...hydratedState}\n />\n );\n}\n\nexport default GridWidgetPlugin;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"GridWidgetPlugin.js","names":["useCallback","useMemo","useRef","useState","usePersistentState","IrisGrid","IrisGridCacheUtils","IrisGridUtils","isIrisGridTableModelTemplate","useSelector","getSettings","LoadingOverlay","useLayoutManager","useListener","assertNotNull","getErrorMessage","useApi","useIrisGridModel","useDashboardColumnFilters","InputFilterEvent","useGridLinker","useTablePlugin","jsx","_jsx","GridWidgetPlugin","_ref","_model$columns","fetch","settings","eventHub","fetchResult","model","status","undefined","dh","irisGridUtils","state","setState","version","type","initialState","hydratedState","current","_objectSpread","hydrateIrisGridState","hydrateGridState","dehydrateIrisGridState","makeMemoizedCombinedGridStateDehydrator","handleIrisGridChange","irisGridState","gridState","newState","inputFilters","columns","table","irisGridRef","_useGridLinker","alwaysFetchColumns","linkerAlwaysFetchColumns","linkerProps","_objectWithoutProperties","_excluded","handleClearAllFilters","clearAllFilters","CLEAR_ALL_FILTERS","selection","setSelection","Plugin","customFilters","filterFetchColumns","onContextMenu","selectedRanges","columnSet","Set","isLoading","errorMessage","error","ref","onStateChange","onSelectionChanged","children"],"sources":["../src/GridWidgetPlugin.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\nimport {\n type WidgetComponentProps,\n usePersistentState,\n} from '@deephaven/plugin';\nimport { type dh as DhType } from '@deephaven/jsapi-types';\nimport {\n type DehydratedGridState,\n type DehydratedIrisGridState,\n IrisGrid,\n IrisGridCacheUtils,\n type IrisGridState,\n type IrisGridType,\n IrisGridUtils,\n isIrisGridTableModelTemplate,\n} from '@deephaven/iris-grid';\nimport { useSelector } from 'react-redux';\nimport { getSettings, type RootState } from '@deephaven/redux';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { useLayoutManager, useListener } from '@deephaven/dashboard';\nimport { assertNotNull, getErrorMessage } from '@deephaven/utils';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { type GridRange, type GridState } from '@deephaven/grid';\nimport { useIrisGridModel } from './useIrisGridModel';\nimport useDashboardColumnFilters from './useDashboardColumnFilters';\nimport { InputFilterEvent } from './events';\nimport useGridLinker from './useGridLinker';\nimport { useTablePlugin } from './useTablePlugin';\n\nexport function GridWidgetPlugin({\n fetch,\n}: WidgetComponentProps<DhType.Table>): JSX.Element | null {\n const settings = useSelector(getSettings<RootState>);\n const { eventHub } = useLayoutManager();\n\n const fetchResult = useIrisGridModel(fetch);\n const model =\n fetchResult.status === 'success' ? fetchResult.model : undefined;\n\n const dh = useApi();\n const irisGridUtils = useMemo(() => new IrisGridUtils(dh), [dh]);\n\n const [state, setState] = usePersistentState<\n (DehydratedIrisGridState & DehydratedGridState) | undefined\n >(undefined, {\n version: 1,\n type: 'GridWidgetPlugin',\n });\n const initialState = useRef(state);\n const hydratedState = useMemo(() => {\n if (\n fetchResult.status !== 'success' ||\n initialState.current === undefined\n ) {\n return;\n }\n return {\n ...irisGridUtils.hydrateIrisGridState(\n fetchResult.model,\n initialState.current\n ),\n ...IrisGridUtils.hydrateGridState(\n fetchResult.model,\n initialState.current\n ),\n };\n }, [fetchResult, irisGridUtils]);\n\n const dehydrateIrisGridState = useMemo(\n () => IrisGridCacheUtils.makeMemoizedCombinedGridStateDehydrator(),\n []\n );\n\n const handleIrisGridChange = useCallback(\n (irisGridState: IrisGridState, gridState: GridState) => {\n if (\n fetchResult.status !== 'success' ||\n irisGridState == null ||\n gridState == null\n ) {\n return;\n }\n\n const newState = dehydrateIrisGridState(\n fetchResult.model,\n irisGridState,\n gridState\n );\n\n setState(newState);\n },\n [fetchResult, setState, dehydrateIrisGridState]\n );\n\n const inputFilters = useDashboardColumnFilters(\n model?.columns ?? null,\n model != null && isIrisGridTableModelTemplate(model)\n ? model.table\n : undefined\n );\n\n const irisGridRef = useRef<IrisGridType | null>(null);\n\n const { alwaysFetchColumns: linkerAlwaysFetchColumns, ...linkerProps } =\n useGridLinker(\n fetchResult.status === 'success' ? fetchResult.model : null,\n irisGridRef.current\n );\n\n const handleClearAllFilters = useCallback(() => {\n if (irisGridRef.current == null) {\n return;\n }\n irisGridRef.current.clearAllFilters();\n }, []);\n\n useListener(\n eventHub,\n InputFilterEvent.CLEAR_ALL_FILTERS,\n handleClearAllFilters\n );\n\n const [selection, setSelection] = useState<readonly GridRange[]>([]);\n\n const {\n Plugin,\n customFilters,\n alwaysFetchColumns: filterFetchColumns,\n onContextMenu,\n } = useTablePlugin({\n model,\n irisGridRef,\n irisGridUtils,\n selectedRanges: selection,\n });\n\n const alwaysFetchColumns = useMemo(() => {\n const columnSet = new Set([\n ...linkerAlwaysFetchColumns,\n ...filterFetchColumns,\n ]);\n return [...columnSet];\n }, [linkerAlwaysFetchColumns, filterFetchColumns]);\n\n if (fetchResult.status === 'loading') {\n return <LoadingOverlay isLoading />;\n }\n\n if (fetchResult.status === 'error') {\n return (\n <LoadingOverlay\n errorMessage={getErrorMessage(fetchResult.error)}\n isLoading={false}\n />\n );\n }\n\n assertNotNull(model, 'Model should be defined when fetch is successful');\n\n return (\n <IrisGrid\n ref={irisGridRef}\n model={model}\n settings={settings}\n onStateChange={handleIrisGridChange}\n onSelectionChanged={setSelection}\n onContextMenu={onContextMenu}\n inputFilters={inputFilters}\n customFilters={customFilters}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...linkerProps}\n alwaysFetchColumns={alwaysFetchColumns}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...hydratedState}\n >\n {Plugin}\n </IrisGrid>\n );\n}\n\nexport default GridWidgetPlugin;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type TablePluginProps, type TablePluginElement } from '@deephaven/plugin';
|
|
2
|
+
import { type IrisGridType } from '@deephaven/iris-grid';
|
|
3
|
+
export declare const TablePluginWrapper: import("react").ForwardRefExoticComponent<Pick<TablePluginProps<unknown>, "filter" | "model" | "selectedRanges" | "onStateChange" | "pluginState" | "fetchColumns"> & {
|
|
4
|
+
name: string;
|
|
5
|
+
irisGridRef: React.MutableRefObject<IrisGridType | null>;
|
|
6
|
+
} & import("react").RefAttributes<TablePluginElement>>;
|
|
7
|
+
export default TablePluginWrapper;
|
|
8
|
+
//# sourceMappingURL=TablePluginWrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TablePluginWrapper.d.ts","sourceRoot":"","sources":["../src/TablePluginWrapper.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAQzD,eAAO,MAAM,kBAAkB;UAoBnB,MAAM;iBACC,KAAK,CAAC,gBAAgB,CAAC,YAAY,GAAG,IAAI,CAAC;sDAmD7D,CAAC;AAIF,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { forwardRef, useMemo } from 'react';
|
|
2
|
+
import { LayoutUtils, useLayoutManager, usePanelId } from '@deephaven/dashboard';
|
|
3
|
+
import useLoadTablePlugin from "./useLoadTablePlugin.js";
|
|
4
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
+
export var TablePluginWrapper = /*#__PURE__*/forwardRef((_ref, ref) => {
|
|
6
|
+
var {
|
|
7
|
+
name,
|
|
8
|
+
model,
|
|
9
|
+
filter,
|
|
10
|
+
fetchColumns,
|
|
11
|
+
selectedRanges,
|
|
12
|
+
irisGridRef,
|
|
13
|
+
pluginState,
|
|
14
|
+
onStateChange
|
|
15
|
+
} = _ref;
|
|
16
|
+
var loadPlugin = useLoadTablePlugin();
|
|
17
|
+
var Plugin = useMemo(() => loadPlugin(name), [loadPlugin, name]);
|
|
18
|
+
var layoutManager = useLayoutManager();
|
|
19
|
+
var panelId = usePanelId();
|
|
20
|
+
var panelName = useMemo(() => {
|
|
21
|
+
var _panelItem$config$tit;
|
|
22
|
+
if (panelId == null) {
|
|
23
|
+
return 'unknown';
|
|
24
|
+
}
|
|
25
|
+
var panelItem = LayoutUtils.getContentItemById(layoutManager.root, panelId);
|
|
26
|
+
return (_panelItem$config$tit = panelItem === null || panelItem === void 0 ? void 0 : panelItem.config.title) !== null && _panelItem$config$tit !== void 0 ? _panelItem$config$tit : 'unknown';
|
|
27
|
+
}, [layoutManager.root, panelId]);
|
|
28
|
+
var panel = useMemo(() => ({
|
|
29
|
+
irisGrid: irisGridRef,
|
|
30
|
+
getTableName: () => panelName
|
|
31
|
+
}), [irisGridRef, panelName]);
|
|
32
|
+
return /*#__PURE__*/_jsx("div", {
|
|
33
|
+
className: "iris-grid-plugin",
|
|
34
|
+
children: /*#__PURE__*/_jsx(Plugin, {
|
|
35
|
+
ref: ref,
|
|
36
|
+
filter: filter,
|
|
37
|
+
fetchColumns: fetchColumns,
|
|
38
|
+
model: model,
|
|
39
|
+
table: model.table,
|
|
40
|
+
tableName: panelName,
|
|
41
|
+
selectedRanges: selectedRanges,
|
|
42
|
+
onStateChange: onStateChange,
|
|
43
|
+
pluginState: pluginState
|
|
44
|
+
// Mimic the panel containing `irisGrid.current` for backwards compatibility
|
|
45
|
+
// since we don't have an IrisGridPanel to use here.
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
47
|
+
// @ts-ignore
|
|
48
|
+
,
|
|
49
|
+
panel: panel
|
|
50
|
+
})
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
TablePluginWrapper.displayName = 'TablePluginWrapper';
|
|
54
|
+
export default TablePluginWrapper;
|
|
55
|
+
//# sourceMappingURL=TablePluginWrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TablePluginWrapper.js","names":["forwardRef","useMemo","LayoutUtils","useLayoutManager","usePanelId","useLoadTablePlugin","jsx","_jsx","TablePluginWrapper","_ref","ref","name","model","filter","fetchColumns","selectedRanges","irisGridRef","pluginState","onStateChange","loadPlugin","Plugin","layoutManager","panelId","panelName","_panelItem$config$tit","panelItem","getContentItemById","root","config","title","panel","irisGrid","getTableName","className","children","table","tableName","displayName"],"sources":["../src/TablePluginWrapper.tsx"],"sourcesContent":["import { forwardRef, useMemo } from 'react';\nimport {\n type TablePluginProps,\n type TablePluginElement,\n} from '@deephaven/plugin';\nimport { type IrisGridType } from '@deephaven/iris-grid';\nimport {\n LayoutUtils,\n useLayoutManager,\n usePanelId,\n} from '@deephaven/dashboard';\nimport useLoadTablePlugin from './useLoadTablePlugin';\n\nexport const TablePluginWrapper = forwardRef(\n (\n {\n name,\n model,\n filter,\n fetchColumns,\n selectedRanges,\n irisGridRef,\n pluginState,\n onStateChange,\n }: Pick<\n TablePluginProps,\n | 'model'\n | 'filter'\n | 'fetchColumns'\n | 'selectedRanges'\n | 'pluginState'\n | 'onStateChange'\n > & {\n name: string;\n irisGridRef: React.MutableRefObject<IrisGridType | null>;\n },\n ref: React.Ref<TablePluginElement>\n ): JSX.Element | null => {\n const loadPlugin = useLoadTablePlugin();\n const Plugin = useMemo(() => loadPlugin(name), [loadPlugin, name]);\n\n const layoutManager = useLayoutManager();\n const panelId = usePanelId();\n const panelName = useMemo(() => {\n if (panelId == null) {\n return 'unknown';\n }\n\n const panelItem = LayoutUtils.getContentItemById(\n layoutManager.root,\n panelId\n );\n\n return panelItem?.config.title ?? 'unknown';\n }, [layoutManager.root, panelId]);\n\n const panel = useMemo(\n () => ({\n irisGrid: irisGridRef,\n getTableName: () => panelName,\n }),\n [irisGridRef, panelName]\n );\n\n return (\n <div className=\"iris-grid-plugin\">\n <Plugin\n ref={ref}\n filter={filter}\n fetchColumns={fetchColumns}\n model={model}\n table={model.table}\n tableName={panelName}\n selectedRanges={selectedRanges}\n onStateChange={onStateChange}\n pluginState={pluginState}\n // Mimic the panel containing `irisGrid.current` for backwards compatibility\n // since we don't have an IrisGridPanel to use here.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n panel={panel}\n />\n </div>\n );\n }\n);\n\nTablePluginWrapper.displayName = 'TablePluginWrapper';\n\nexport default TablePluginWrapper;\n"],"mappings":"AAAA,SAASA,UAAU,EAAEC,OAAO,QAAQ,OAAO;AAM3C,SACEC,WAAW,EACXC,gBAAgB,EAChBC,UAAU,QACL,sBAAsB;AAAC,OACvBC,kBAAkB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAEzB,OAAO,IAAMC,kBAAkB,gBAAGR,UAAU,CAC1C,CAAAS,IAAA,EAsBEC,GAAkC,KACX;EAAA,IAtBvB;IACEC,IAAI;IACJC,KAAK;IACLC,MAAM;IACNC,YAAY;IACZC,cAAc;IACdC,WAAW;IACXC,WAAW;IACXC;EAYF,CAAC,GAAAT,IAAA;EAGD,IAAMU,UAAU,GAAGd,kBAAkB,CAAC,CAAC;EACvC,IAAMe,MAAM,GAAGnB,OAAO,CAAC,MAAMkB,UAAU,CAACR,IAAI,CAAC,EAAE,CAACQ,UAAU,EAAER,IAAI,CAAC,CAAC;EAElE,IAAMU,aAAa,GAAGlB,gBAAgB,CAAC,CAAC;EACxC,IAAMmB,OAAO,GAAGlB,UAAU,CAAC,CAAC;EAC5B,IAAMmB,SAAS,GAAGtB,OAAO,CAAC,MAAM;IAAA,IAAAuB,qBAAA;IAC9B,IAAIF,OAAO,IAAI,IAAI,EAAE;MACnB,OAAO,SAAS;IAClB;IAEA,IAAMG,SAAS,GAAGvB,WAAW,CAACwB,kBAAkB,CAC9CL,aAAa,CAACM,IAAI,EAClBL,OACF,CAAC;IAED,QAAAE,qBAAA,GAAOC,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAEG,MAAM,CAACC,KAAK,cAAAL,qBAAA,cAAAA,qBAAA,GAAI,SAAS;EAC7C,CAAC,EAAE,CAACH,aAAa,CAACM,IAAI,EAAEL,OAAO,CAAC,CAAC;EAEjC,IAAMQ,KAAK,GAAG7B,OAAO,CACnB,OAAO;IACL8B,QAAQ,EAAEf,WAAW;IACrBgB,YAAY,EAAEA,CAAA,KAAMT;EACtB,CAAC,CAAC,EACF,CAACP,WAAW,EAAEO,SAAS,CACzB,CAAC;EAED,oBACEhB,IAAA;IAAK0B,SAAS,EAAC,kBAAkB;IAAAC,QAAA,eAC/B3B,IAAA,CAACa,MAAM;MACLV,GAAG,EAAEA,GAAI;MACTG,MAAM,EAAEA,MAAO;MACfC,YAAY,EAAEA,YAAa;MAC3BF,KAAK,EAAEA,KAAM;MACbuB,KAAK,EAAEvB,KAAK,CAACuB,KAAM;MACnBC,SAAS,EAAEb,SAAU;MACrBR,cAAc,EAAEA,cAAe;MAC/BG,aAAa,EAAEA,aAAc;MAC7BD,WAAW,EAAEA;MACb;MACA;MACA;MACA;MAAA;MACAa,KAAK,EAAEA;IAAM,CACd;EAAC,CACC,CAAC;AAEV,CACF,CAAC;AAEDtB,kBAAkB,CAAC6B,WAAW,GAAG,oBAAoB;AAErD,eAAe7B,kBAAkB","ignoreList":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type IrisGridModel, type IrisGridProps, type IrisGridUtils, type IrisGridType } from '@deephaven/iris-grid';
|
|
2
|
+
import { type GridRange } from '@deephaven/grid';
|
|
3
|
+
interface UseTablePluginProps {
|
|
4
|
+
/**
|
|
5
|
+
* The IrisGrid model for this plugin.
|
|
6
|
+
* Currently only IrisGridTableModelTemplate types are supported.
|
|
7
|
+
* Other IrisGrid model types will be ignored for now.
|
|
8
|
+
*/
|
|
9
|
+
model: IrisGridModel | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* A reference to the IrisGrid component instance.
|
|
12
|
+
*/
|
|
13
|
+
irisGridRef: React.MutableRefObject<IrisGridType | null>;
|
|
14
|
+
/**
|
|
15
|
+
* A IrisGridUtils instance.
|
|
16
|
+
*/
|
|
17
|
+
irisGridUtils: IrisGridUtils;
|
|
18
|
+
/**
|
|
19
|
+
* The currently selected ranges in the grid.
|
|
20
|
+
*/
|
|
21
|
+
selectedRanges: readonly GridRange[] | undefined;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Hook to get a TablePlugin component and the IrisGrid props derived from the plugin.
|
|
25
|
+
* The returned props should be passed to the IrisGrid component or merged with other sources
|
|
26
|
+
* of the same props.
|
|
27
|
+
* @param props The properties for the table plugin. The props object itself does not need to be memoized,
|
|
28
|
+
* but the values inside it should be stable to avoid unnecessary re-renders.
|
|
29
|
+
* @returns Object containing `Plugin` key which is the Plugin component.
|
|
30
|
+
* The remaining object keys are IrisGrid props associated with the plugin.
|
|
31
|
+
*/
|
|
32
|
+
export declare function useTablePlugin({ model, irisGridRef, irisGridUtils, selectedRanges, }: UseTablePluginProps): {
|
|
33
|
+
Plugin: JSX.Element | null;
|
|
34
|
+
} & Pick<IrisGridProps, 'customFilters' | 'alwaysFetchColumns' | 'onContextMenu'>;
|
|
35
|
+
export default useTablePlugin;
|
|
36
|
+
//# sourceMappingURL=useTablePlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTablePlugin.d.ts","sourceRoot":"","sources":["../src/useTablePlugin.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,aAAa,EAElB,KAAK,YAAY,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,UAAU,mBAAmB;IAC3B;;;;OAIG;IACH,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC;;OAEG;IACH,WAAW,EAAE,KAAK,CAAC,gBAAgB,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IACzD;;OAEG;IACH,aAAa,EAAE,aAAa,CAAC;IAC7B;;OAEG;IACH,cAAc,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,CAAC;CAClD;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,WAAW,EACX,aAAa,EACb,cAAc,GACf,EAAE,mBAAmB,GAAG;IACvB,MAAM,EAAE,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;CAC5B,GAAG,IAAI,CACN,aAAa,EACb,eAAe,GAAG,oBAAoB,GAAG,eAAe,CACzD,CAqDA;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { useCallback, useMemo, useRef, useState } from 'react';
|
|
2
|
+
import { usePersistentState } from '@deephaven/plugin';
|
|
3
|
+
import { isIrisGridTableModelTemplate } from '@deephaven/iris-grid';
|
|
4
|
+
import { TablePluginWrapper } from "./TablePluginWrapper.js";
|
|
5
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
+
/**
|
|
7
|
+
* Hook to get a TablePlugin component and the IrisGrid props derived from the plugin.
|
|
8
|
+
* The returned props should be passed to the IrisGrid component or merged with other sources
|
|
9
|
+
* of the same props.
|
|
10
|
+
* @param props The properties for the table plugin. The props object itself does not need to be memoized,
|
|
11
|
+
* but the values inside it should be stable to avoid unnecessary re-renders.
|
|
12
|
+
* @returns Object containing `Plugin` key which is the Plugin component.
|
|
13
|
+
* The remaining object keys are IrisGrid props associated with the plugin.
|
|
14
|
+
*/
|
|
15
|
+
export function useTablePlugin(_ref) {
|
|
16
|
+
var {
|
|
17
|
+
model,
|
|
18
|
+
irisGridRef,
|
|
19
|
+
irisGridUtils,
|
|
20
|
+
selectedRanges
|
|
21
|
+
} = _ref;
|
|
22
|
+
var [pluginFilters, setPluginFilters] = useState([]);
|
|
23
|
+
var customFilters = useMemo(() => model != null && isIrisGridTableModelTemplate(model) ? irisGridUtils.getFiltersFromInputFilters(model.table.columns, pluginFilters, model.formatter.timeZone) : [], [model, irisGridUtils, pluginFilters]);
|
|
24
|
+
var [alwaysFetchColumns, setAlwaysFetchColumns] = useState([]);
|
|
25
|
+
var pluginRef = useRef(null);
|
|
26
|
+
var [pluginState, setPluginState] = usePersistentState(undefined, {
|
|
27
|
+
version: 1,
|
|
28
|
+
// pluginName will be undefined on first call when re-hydrating,
|
|
29
|
+
// so use a constant type to avoid re-hydration issues with the persistent state type
|
|
30
|
+
type: 'GridWidgetTablePluginState'
|
|
31
|
+
});
|
|
32
|
+
var Plugin = useMemo(() => model != null && isIrisGridTableModelTemplate(model) && model.table.pluginName != null ? /*#__PURE__*/_jsx(TablePluginWrapper, {
|
|
33
|
+
ref: pluginRef,
|
|
34
|
+
name: model.table.pluginName,
|
|
35
|
+
model: model,
|
|
36
|
+
filter: setPluginFilters,
|
|
37
|
+
fetchColumns: setAlwaysFetchColumns,
|
|
38
|
+
selectedRanges: selectedRanges,
|
|
39
|
+
irisGridRef: irisGridRef,
|
|
40
|
+
pluginState: pluginState,
|
|
41
|
+
onStateChange: setPluginState
|
|
42
|
+
}) : null, [model, selectedRanges, irisGridRef, pluginState, setPluginState]);
|
|
43
|
+
var onContextMenu = useCallback(data => {
|
|
44
|
+
var _pluginRef$current$ge, _pluginRef$current, _pluginRef$current$ge2;
|
|
45
|
+
return (_pluginRef$current$ge = (_pluginRef$current = pluginRef.current) === null || _pluginRef$current === void 0 ? void 0 : (_pluginRef$current$ge2 = _pluginRef$current.getMenu) === null || _pluginRef$current$ge2 === void 0 ? void 0 : _pluginRef$current$ge2.call(_pluginRef$current, data)) !== null && _pluginRef$current$ge !== void 0 ? _pluginRef$current$ge : [];
|
|
46
|
+
}, []);
|
|
47
|
+
return {
|
|
48
|
+
Plugin,
|
|
49
|
+
customFilters,
|
|
50
|
+
alwaysFetchColumns,
|
|
51
|
+
onContextMenu
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export default useTablePlugin;
|
|
55
|
+
//# sourceMappingURL=useTablePlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTablePlugin.js","names":["useCallback","useMemo","useRef","useState","usePersistentState","isIrisGridTableModelTemplate","TablePluginWrapper","jsx","_jsx","useTablePlugin","_ref","model","irisGridRef","irisGridUtils","selectedRanges","pluginFilters","setPluginFilters","customFilters","getFiltersFromInputFilters","table","columns","formatter","timeZone","alwaysFetchColumns","setAlwaysFetchColumns","pluginRef","pluginState","setPluginState","undefined","version","type","Plugin","pluginName","ref","name","filter","fetchColumns","onStateChange","onContextMenu","data","_pluginRef$current$ge","_pluginRef$current","_pluginRef$current$ge2","current","getMenu","call"],"sources":["../src/useTablePlugin.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\nimport { usePersistentState, type TablePluginElement } from '@deephaven/plugin';\nimport {\n type InputFilter,\n type IrisGridModel,\n type IrisGridProps,\n type IrisGridUtils,\n isIrisGridTableModelTemplate,\n type IrisGridType,\n type IrisGridContextMenuData,\n} from '@deephaven/iris-grid';\nimport { type GridRange } from '@deephaven/grid';\nimport { TablePluginWrapper } from './TablePluginWrapper';\n\ninterface UseTablePluginProps {\n /**\n * The IrisGrid model for this plugin.\n * Currently only IrisGridTableModelTemplate types are supported.\n * Other IrisGrid model types will be ignored for now.\n */\n model: IrisGridModel | undefined;\n /**\n * A reference to the IrisGrid component instance.\n */\n irisGridRef: React.MutableRefObject<IrisGridType | null>;\n /**\n * A IrisGridUtils instance.\n */\n irisGridUtils: IrisGridUtils;\n /**\n * The currently selected ranges in the grid.\n */\n selectedRanges: readonly GridRange[] | undefined;\n}\n\n/**\n * Hook to get a TablePlugin component and the IrisGrid props derived from the plugin.\n * The returned props should be passed to the IrisGrid component or merged with other sources\n * of the same props.\n * @param props The properties for the table plugin. The props object itself does not need to be memoized,\n * but the values inside it should be stable to avoid unnecessary re-renders.\n * @returns Object containing `Plugin` key which is the Plugin component.\n * The remaining object keys are IrisGrid props associated with the plugin.\n */\nexport function useTablePlugin({\n model,\n irisGridRef,\n irisGridUtils,\n selectedRanges,\n}: UseTablePluginProps): {\n Plugin: JSX.Element | null;\n} & Pick<\n IrisGridProps,\n 'customFilters' | 'alwaysFetchColumns' | 'onContextMenu'\n> {\n const [pluginFilters, setPluginFilters] = useState<InputFilter[]>([]);\n const customFilters = useMemo(\n () =>\n model != null && isIrisGridTableModelTemplate(model)\n ? irisGridUtils.getFiltersFromInputFilters(\n model.table.columns,\n pluginFilters,\n model.formatter.timeZone\n )\n : [],\n [model, irisGridUtils, pluginFilters]\n );\n const [alwaysFetchColumns, setAlwaysFetchColumns] = useState<string[]>([]);\n const pluginRef = useRef<TablePluginElement | null>(null);\n const [pluginState, setPluginState] = usePersistentState<unknown>(undefined, {\n version: 1,\n // pluginName will be undefined on first call when re-hydrating,\n // so use a constant type to avoid re-hydration issues with the persistent state type\n type: 'GridWidgetTablePluginState',\n });\n\n const Plugin = useMemo(\n () =>\n model != null &&\n isIrisGridTableModelTemplate(model) &&\n model.table.pluginName != null ? (\n <TablePluginWrapper\n ref={pluginRef}\n name={model.table.pluginName}\n model={model}\n filter={setPluginFilters}\n fetchColumns={setAlwaysFetchColumns}\n selectedRanges={selectedRanges}\n irisGridRef={irisGridRef}\n pluginState={pluginState}\n onStateChange={setPluginState}\n />\n ) : null,\n [model, selectedRanges, irisGridRef, pluginState, setPluginState]\n );\n\n const onContextMenu = useCallback(\n (data: IrisGridContextMenuData) => pluginRef.current?.getMenu?.(data) ?? [],\n []\n );\n\n return {\n Plugin,\n customFilters,\n alwaysFetchColumns,\n onContextMenu,\n };\n}\n\nexport default useTablePlugin;\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAC9D,SAASC,kBAAkB,QAAiC,mBAAmB;AAC/E,SAKEC,4BAA4B,QAGvB,sBAAsB;AAAC,SAErBC,kBAAkB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAuB3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAAAC,IAAA,EAU5B;EAAA,IAV6B;IAC7BC,KAAK;IACLC,WAAW;IACXC,aAAa;IACbC;EACmB,CAAC,GAAAJ,IAAA;EAMpB,IAAM,CAACK,aAAa,EAAEC,gBAAgB,CAAC,GAAGb,QAAQ,CAAgB,EAAE,CAAC;EACrE,IAAMc,aAAa,GAAGhB,OAAO,CAC3B,MACEU,KAAK,IAAI,IAAI,IAAIN,4BAA4B,CAACM,KAAK,CAAC,GAChDE,aAAa,CAACK,0BAA0B,CACtCP,KAAK,CAACQ,KAAK,CAACC,OAAO,EACnBL,aAAa,EACbJ,KAAK,CAACU,SAAS,CAACC,QAClB,CAAC,GACD,EAAE,EACR,CAACX,KAAK,EAAEE,aAAa,EAAEE,aAAa,CACtC,CAAC;EACD,IAAM,CAACQ,kBAAkB,EAAEC,qBAAqB,CAAC,GAAGrB,QAAQ,CAAW,EAAE,CAAC;EAC1E,IAAMsB,SAAS,GAAGvB,MAAM,CAA4B,IAAI,CAAC;EACzD,IAAM,CAACwB,WAAW,EAAEC,cAAc,CAAC,GAAGvB,kBAAkB,CAAUwB,SAAS,EAAE;IAC3EC,OAAO,EAAE,CAAC;IACV;IACA;IACAC,IAAI,EAAE;EACR,CAAC,CAAC;EAEF,IAAMC,MAAM,GAAG9B,OAAO,CACpB,MACEU,KAAK,IAAI,IAAI,IACbN,4BAA4B,CAACM,KAAK,CAAC,IACnCA,KAAK,CAACQ,KAAK,CAACa,UAAU,IAAI,IAAI,gBAC5BxB,IAAA,CAACF,kBAAkB;IACjB2B,GAAG,EAAER,SAAU;IACfS,IAAI,EAAEvB,KAAK,CAACQ,KAAK,CAACa,UAAW;IAC7BrB,KAAK,EAAEA,KAAM;IACbwB,MAAM,EAAEnB,gBAAiB;IACzBoB,YAAY,EAAEZ,qBAAsB;IACpCV,cAAc,EAAEA,cAAe;IAC/BF,WAAW,EAAEA,WAAY;IACzBc,WAAW,EAAEA,WAAY;IACzBW,aAAa,EAAEV;EAAe,CAC/B,CAAC,GACA,IAAI,EACV,CAAChB,KAAK,EAAEG,cAAc,EAAEF,WAAW,EAAEc,WAAW,EAAEC,cAAc,CAClE,CAAC;EAED,IAAMW,aAAa,GAAGtC,WAAW,CAC9BuC,IAA6B;IAAA,IAAAC,qBAAA,EAAAC,kBAAA,EAAAC,sBAAA;IAAA,QAAAF,qBAAA,IAAAC,kBAAA,GAAKhB,SAAS,CAACkB,OAAO,cAAAF,kBAAA,wBAAAC,sBAAA,GAAjBD,kBAAA,CAAmBG,OAAO,cAAAF,sBAAA,uBAA1BA,sBAAA,CAAAG,IAAA,CAAAJ,kBAAA,EAA6BF,IAAI,CAAC,cAAAC,qBAAA,cAAAA,qBAAA,GAAI,EAAE;EAAA,GAC3E,EACF,CAAC;EAED,OAAO;IACLT,MAAM;IACNd,aAAa;IACbM,kBAAkB;IAClBe;EACF,CAAC;AACH;AAEA,eAAe7B,cAAc","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/dashboard-core-plugins",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Deephaven Dashboard Core Plugins",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -22,26 +22,26 @@
|
|
|
22
22
|
"build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@deephaven/chart": "^1.
|
|
26
|
-
"@deephaven/components": "^1.
|
|
27
|
-
"@deephaven/console": "^1.
|
|
28
|
-
"@deephaven/dashboard": "^1.
|
|
29
|
-
"@deephaven/file-explorer": "^1.
|
|
30
|
-
"@deephaven/filters": "^1.1.
|
|
31
|
-
"@deephaven/golden-layout": "^1.
|
|
32
|
-
"@deephaven/grid": "^1.
|
|
33
|
-
"@deephaven/icons": "^1.
|
|
34
|
-
"@deephaven/iris-grid": "^1.
|
|
35
|
-
"@deephaven/jsapi-bootstrap": "^1.
|
|
36
|
-
"@deephaven/jsapi-components": "^1.
|
|
25
|
+
"@deephaven/chart": "^1.2.0",
|
|
26
|
+
"@deephaven/components": "^1.2.0",
|
|
27
|
+
"@deephaven/console": "^1.2.0",
|
|
28
|
+
"@deephaven/dashboard": "^1.2.0",
|
|
29
|
+
"@deephaven/file-explorer": "^1.2.0",
|
|
30
|
+
"@deephaven/filters": "^1.1.0",
|
|
31
|
+
"@deephaven/golden-layout": "^1.2.0",
|
|
32
|
+
"@deephaven/grid": "^1.2.0",
|
|
33
|
+
"@deephaven/icons": "^1.2.0",
|
|
34
|
+
"@deephaven/iris-grid": "^1.2.0",
|
|
35
|
+
"@deephaven/jsapi-bootstrap": "^1.2.0",
|
|
36
|
+
"@deephaven/jsapi-components": "^1.2.0",
|
|
37
37
|
"@deephaven/jsapi-types": "^1.0.0-dev0.39.4",
|
|
38
|
-
"@deephaven/jsapi-utils": "^1.1.
|
|
39
|
-
"@deephaven/log": "^1.1.
|
|
40
|
-
"@deephaven/plugin": "^1.
|
|
41
|
-
"@deephaven/react-hooks": "^1.
|
|
42
|
-
"@deephaven/redux": "^1.
|
|
43
|
-
"@deephaven/storage": "^1.1.
|
|
44
|
-
"@deephaven/utils": "^1.1.
|
|
38
|
+
"@deephaven/jsapi-utils": "^1.1.1",
|
|
39
|
+
"@deephaven/log": "^1.1.0",
|
|
40
|
+
"@deephaven/plugin": "^1.2.0",
|
|
41
|
+
"@deephaven/react-hooks": "^1.2.0",
|
|
42
|
+
"@deephaven/redux": "^1.2.0",
|
|
43
|
+
"@deephaven/storage": "^1.1.0",
|
|
44
|
+
"@deephaven/utils": "^1.1.0",
|
|
45
45
|
"@fortawesome/react-fontawesome": "^0.2.0",
|
|
46
46
|
"classnames": "^2.3.1",
|
|
47
47
|
"fast-deep-equal": "^3.1.3",
|
|
@@ -65,9 +65,9 @@
|
|
|
65
65
|
"react-redux": "^7.2.4"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
|
-
"@deephaven/jsapi-shim": "^1.1.
|
|
69
|
-
"@deephaven/mocks": "^1.1.
|
|
70
|
-
"@deephaven/test-utils": "^1.1.
|
|
68
|
+
"@deephaven/jsapi-shim": "^1.1.0",
|
|
69
|
+
"@deephaven/mocks": "^1.1.0",
|
|
70
|
+
"@deephaven/test-utils": "^1.1.0"
|
|
71
71
|
},
|
|
72
72
|
"files": [
|
|
73
73
|
"dist",
|
|
@@ -79,5 +79,5 @@
|
|
|
79
79
|
"publishConfig": {
|
|
80
80
|
"access": "public"
|
|
81
81
|
},
|
|
82
|
-
"gitHead": "
|
|
82
|
+
"gitHead": "bec0256dcb4c6618c83675f4d4163996a449a381"
|
|
83
83
|
}
|