@deephaven/dashboard-core-plugins 0.38.1 → 0.39.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/ChartBuilderPlugin.d.ts.map +1 -1
- package/dist/ChartBuilderPlugin.js +4 -2
- package/dist/ChartBuilderPlugin.js.map +1 -1
- package/dist/ChartPlugin.d.ts.map +1 -1
- package/dist/ChartPlugin.js +4 -2
- package/dist/ChartPlugin.js.map +1 -1
- package/dist/GridPlugin.d.ts.map +1 -1
- package/dist/GridPlugin.js +7 -5
- package/dist/GridPlugin.js.map +1 -1
- package/dist/PandasPlugin.d.ts.map +1 -1
- package/dist/PandasPlugin.js +4 -2
- package/dist/PandasPlugin.js.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.d.ts +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.d.ts.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/controls/input-filter/InputFilter.d.ts +1 -1
- package/dist/controls/input-filter/InputFilter.d.ts.map +1 -1
- package/dist/controls/input-filter/InputFilter.js.map +1 -1
- package/dist/linker/Linker.d.ts +3 -1
- package/dist/linker/Linker.d.ts.map +1 -1
- package/dist/linker/Linker.js +4 -2
- package/dist/linker/Linker.js.map +1 -1
- package/dist/panels/ChartPanel.d.ts +1 -1
- package/dist/panels/ChartPanel.d.ts.map +1 -1
- package/dist/panels/ChartPanel.js +22 -4
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/CommandHistoryPanel.d.ts +1 -1
- package/dist/panels/CommandHistoryPanel.d.ts.map +1 -1
- package/dist/panels/CommandHistoryPanel.js.map +1 -1
- package/dist/panels/ConsolePanel.d.ts +1 -1
- package/dist/panels/ConsolePanel.d.ts.map +1 -1
- package/dist/panels/ConsolePanel.js +3 -1
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.d.ts +4 -3
- package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
- package/dist/panels/DropdownFilterPanel.js +25 -12
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/panels/FileExplorerPanel.d.ts +1 -1
- package/dist/panels/FileExplorerPanel.d.ts.map +1 -1
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/FilterSetManagerPanel.d.ts +1 -1
- package/dist/panels/FilterSetManagerPanel.d.ts.map +1 -1
- package/dist/panels/FilterSetManagerPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.d.ts +2 -1
- package/dist/panels/IrisGridPanel.d.ts.map +1 -1
- package/dist/panels/IrisGridPanel.js +37 -28
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/LogPanel.d.ts +1 -1
- package/dist/panels/LogPanel.d.ts.map +1 -1
- package/dist/panels/LogPanel.js.map +1 -1
- package/dist/panels/NotebookPanel.d.ts +1 -1
- package/dist/panels/NotebookPanel.d.ts.map +1 -1
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/dist/panels/Panel.d.ts +1 -1
- package/dist/panels/Panel.d.ts.map +1 -1
- package/dist/panels/Panel.js.map +1 -1
- package/dist/redux/actions.d.ts +1 -1
- package/dist/redux/actions.d.ts.map +1 -1
- package/dist/redux/actions.js.map +1 -1
- package/dist/redux/selectors.d.ts +1 -1
- package/dist/redux/selectors.d.ts.map +1 -1
- package/dist/redux/selectors.js.map +1 -1
- package/package.json +23 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartBuilderPlugin.d.ts","sourceRoot":"","sources":["../src/ChartBuilderPlugin.tsx"],"names":[],"mappings":";AAEA,OAAO,EAEL,6BAA6B,EAG9B,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"ChartBuilderPlugin.d.ts","sourceRoot":"","sources":["../src/ChartBuilderPlugin.tsx"],"names":[],"mappings":";AAEA,OAAO,EAEL,6BAA6B,EAG9B,MAAM,sBAAsB,CAAC;AAO9B,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;AAE7E;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,uBAAuB,GAC7B,GAAG,CAAC,OAAO,GAAG,IAAI,CAoDpB;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useCallback } from 'react';
|
|
2
2
|
import { ChartModelFactory, ChartUtils } from '@deephaven/chart';
|
|
3
3
|
import { assertIsDashboardPluginProps, LayoutUtils, useListener } from '@deephaven/dashboard';
|
|
4
|
+
import { useApi } from '@deephaven/jsapi-bootstrap';
|
|
4
5
|
import shortid from 'shortid';
|
|
5
6
|
import { IrisGridEvent } from "./events/index.js";
|
|
6
7
|
import { ChartPanel } from "./panels/index.js";
|
|
@@ -14,6 +15,7 @@ export function ChartBuilderPlugin(props) {
|
|
|
14
15
|
id,
|
|
15
16
|
layout
|
|
16
17
|
} = props;
|
|
18
|
+
var dh = useApi();
|
|
17
19
|
var handleCreateChart = useCallback(_ref => {
|
|
18
20
|
var {
|
|
19
21
|
metadata,
|
|
@@ -23,7 +25,7 @@ export function ChartBuilderPlugin(props) {
|
|
|
23
25
|
var {
|
|
24
26
|
settings
|
|
25
27
|
} = metadata;
|
|
26
|
-
var makeModel = () => ChartModelFactory.makeModelFromSettings(settings, table);
|
|
28
|
+
var makeModel = () => ChartModelFactory.makeModelFromSettings(dh, settings, table);
|
|
27
29
|
var title = ChartUtils.titleFromSettings(settings);
|
|
28
30
|
var config = {
|
|
29
31
|
type: 'react-component',
|
|
@@ -44,7 +46,7 @@ export function ChartBuilderPlugin(props) {
|
|
|
44
46
|
root,
|
|
45
47
|
config
|
|
46
48
|
});
|
|
47
|
-
}, [id, layout]);
|
|
49
|
+
}, [dh, id, layout]);
|
|
48
50
|
useListener(layout.eventHub, IrisGridEvent.CREATE_CHART, handleCreateChart);
|
|
49
51
|
return null;
|
|
50
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartBuilderPlugin.js","names":["useCallback","ChartModelFactory","ChartUtils","assertIsDashboardPluginProps","LayoutUtils","useListener","shortid","IrisGridEvent","ChartPanel","ChartBuilderPlugin","props","id","layout","handleCreateChart","metadata","panelId","generate","table","settings","makeModel","makeModelFromSettings","title","titleFromSettings","config","type","component","COMPONENT","localDashboardId","root","openComponent","eventHub","CREATE_CHART"],"sources":["../src/ChartBuilderPlugin.tsx"],"sourcesContent":["import { useCallback } from 'react';\nimport { ChartModelFactory, ChartUtils } from '@deephaven/chart';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n useListener,\n} from '@deephaven/dashboard';\nimport { SeriesPlotStyle, Table } from '@deephaven/jsapi-
|
|
1
|
+
{"version":3,"file":"ChartBuilderPlugin.js","names":["useCallback","ChartModelFactory","ChartUtils","assertIsDashboardPluginProps","LayoutUtils","useListener","useApi","shortid","IrisGridEvent","ChartPanel","ChartBuilderPlugin","props","id","layout","dh","handleCreateChart","metadata","panelId","generate","table","settings","makeModel","makeModelFromSettings","title","titleFromSettings","config","type","component","COMPONENT","localDashboardId","root","openComponent","eventHub","CREATE_CHART"],"sources":["../src/ChartBuilderPlugin.tsx"],"sourcesContent":["import { useCallback } from 'react';\nimport { ChartModelFactory, ChartUtils } from '@deephaven/chart';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n useListener,\n} from '@deephaven/dashboard';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport type { SeriesPlotStyle, Table } from '@deephaven/jsapi-types';\nimport shortid from 'shortid';\nimport { IrisGridEvent } from './events';\nimport { ChartPanel } from './panels';\n\nexport type ChartBuilderPluginProps = Partial<DashboardPluginComponentProps>;\n\n/**\n * Listens for IrisGridEvent.CREATE_CHART and creates a chart from the settings provided\n * Requires the GridPlugin and ChartPlugin plugins to be loaded as well\n */\nexport function ChartBuilderPlugin(\n props: ChartBuilderPluginProps\n): JSX.Element | null {\n assertIsDashboardPluginProps(props);\n const { id, layout } = props;\n const dh = useApi();\n const handleCreateChart = useCallback(\n ({\n metadata,\n panelId = shortid.generate(),\n table,\n }: {\n metadata: {\n settings: {\n type: keyof SeriesPlotStyle;\n series: string[];\n xAxis: string;\n isLinked: boolean;\n hiddenSeries?: string[];\n };\n sourcePanelId: string;\n table: string;\n tableSettings: Record<string, unknown>;\n };\n panelId?: string;\n table: Table;\n }) => {\n const { settings } = metadata;\n const makeModel = () =>\n ChartModelFactory.makeModelFromSettings(dh, settings, table);\n const title = ChartUtils.titleFromSettings(settings);\n\n const config = {\n type: 'react-component' as const,\n component: ChartPanel.COMPONENT,\n props: {\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel,\n },\n title,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config });\n },\n [dh, id, layout]\n );\n\n useListener(layout.eventHub, IrisGridEvent.CREATE_CHART, handleCreateChart);\n\n return null;\n}\n\nexport default ChartBuilderPlugin;\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,iBAAiB,EAAEC,UAAU,QAAQ,kBAAkB;AAChE,SACEC,4BAA4B,EAE5BC,WAAW,EACXC,WAAW,QACN,sBAAsB;AAC7B,SAASC,MAAM,QAAQ,4BAA4B;AAEnD,OAAOC,OAAO,MAAM,SAAS;AAAC,SACrBC,aAAa;AAAA,SACbC,UAAU;AAInB;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkB,CAChCC,KAA8B,EACV;EACpBR,4BAA4B,CAACQ,KAAK,CAAC;EACnC,IAAM;IAAEC,EAAE;IAAEC;EAAO,CAAC,GAAGF,KAAK;EAC5B,IAAMG,EAAE,GAAGR,MAAM,EAAE;EACnB,IAAMS,iBAAiB,GAAGf,WAAW,CACnC,QAmBM;IAAA,IAnBL;MACCgB,QAAQ;MACRC,OAAO,GAAGV,OAAO,CAACW,QAAQ,EAAE;MAC5BC;IAgBF,CAAC;IACC,IAAM;MAAEC;IAAS,CAAC,GAAGJ,QAAQ;IAC7B,IAAMK,SAAS,GAAG,MAChBpB,iBAAiB,CAACqB,qBAAqB,CAACR,EAAE,EAAEM,QAAQ,EAAED,KAAK,CAAC;IAC9D,IAAMI,KAAK,GAAGrB,UAAU,CAACsB,iBAAiB,CAACJ,QAAQ,CAAC;IAEpD,IAAMK,MAAM,GAAG;MACbC,IAAI,EAAE,iBAA0B;MAChCC,SAAS,EAAElB,UAAU,CAACmB,SAAS;MAC/BjB,KAAK,EAAE;QACLkB,gBAAgB,EAAEjB,EAAE;QACpBA,EAAE,EAAEK,OAAO;QACXD,QAAQ;QACRK;MACF,CAAC;MACDE,KAAK;MACLX,EAAE,EAAEK;IACN,CAAC;IAED,IAAM;MAAEa;IAAK,CAAC,GAAGjB,MAAM;IACvBT,WAAW,CAAC2B,aAAa,CAAC;MAAED,IAAI;MAAEL;IAAO,CAAC,CAAC;EAC7C,CAAC,EACD,CAACX,EAAE,EAAEF,EAAE,EAAEC,MAAM,CAAC,CACjB;EAEDR,WAAW,CAACQ,MAAM,CAACmB,QAAQ,EAAExB,aAAa,CAACyB,YAAY,EAAElB,iBAAiB,CAAC;EAE3E,OAAO,IAAI;AACb;AAEA,eAAeL,kBAAkB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartPlugin.d.ts","sourceRoot":"","sources":["../src/ChartPlugin.tsx"],"names":[],"mappings":";AAEA,OAAO,EAEL,6BAA6B,EAG7B,oBAAoB,EAErB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"ChartPlugin.d.ts","sourceRoot":"","sources":["../src/ChartPlugin.tsx"],"names":[],"mappings":";AAEA,OAAO,EAEL,6BAA6B,EAG7B,oBAAoB,EAErB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAc,eAAe,EAAE,MAAM,UAAU,CAAC;AAEvD,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,6BAA6B,CAAC,GAAG;IACtE,OAAO,EAAE,oBAAoB,CAAC,eAAe,CAAC,CAAC;CAChD,CAAC;AAEF,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAkEvE;AAED,eAAe,WAAW,CAAC"}
|
package/dist/ChartPlugin.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useCallback, useEffect } from 'react';
|
|
2
2
|
import { ChartModelFactory } from '@deephaven/chart';
|
|
3
3
|
import { assertIsDashboardPluginProps, LayoutUtils, PanelEvent, useListener } from '@deephaven/dashboard';
|
|
4
|
+
import { useApi } from '@deephaven/jsapi-bootstrap';
|
|
4
5
|
import shortid from 'shortid';
|
|
5
6
|
import { ChartPanel } from "./panels/index.js";
|
|
6
7
|
export function ChartPlugin(props) {
|
|
@@ -11,6 +12,7 @@ export function ChartPlugin(props) {
|
|
|
11
12
|
registerComponent,
|
|
12
13
|
hydrate
|
|
13
14
|
} = props;
|
|
15
|
+
var dh = useApi();
|
|
14
16
|
var handlePanelOpen = useCallback(_ref => {
|
|
15
17
|
var {
|
|
16
18
|
dragEvent,
|
|
@@ -29,7 +31,7 @@ export function ChartPlugin(props) {
|
|
|
29
31
|
name,
|
|
30
32
|
figure: name
|
|
31
33
|
};
|
|
32
|
-
var makeModel = () => fetch().then(figure => ChartModelFactory.makeModel(undefined, figure));
|
|
34
|
+
var makeModel = () => fetch().then(figure => ChartModelFactory.makeModel(dh, undefined, figure));
|
|
33
35
|
var config = {
|
|
34
36
|
type: 'react-component',
|
|
35
37
|
component: ChartPanel.COMPONENT,
|
|
@@ -50,7 +52,7 @@ export function ChartPlugin(props) {
|
|
|
50
52
|
config,
|
|
51
53
|
dragEvent
|
|
52
54
|
});
|
|
53
|
-
}, [id, layout]);
|
|
55
|
+
}, [dh, id, layout]);
|
|
54
56
|
useEffect(function registerComponentsAndReturnCleanup() {
|
|
55
57
|
var cleanups = [registerComponent(ChartPanel.COMPONENT, ChartPanel, hydrate)];
|
|
56
58
|
return () => {
|
package/dist/ChartPlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartPlugin.js","names":["useCallback","useEffect","ChartModelFactory","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","useListener","shortid","ChartPanel","ChartPlugin","props","id","layout","registerComponent","hydrate","handlePanelOpen","dragEvent","fetch","panelId","generate","widget","name","type","
|
|
1
|
+
{"version":3,"file":"ChartPlugin.js","names":["useCallback","useEffect","ChartModelFactory","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","useListener","useApi","shortid","ChartPanel","ChartPlugin","props","id","layout","registerComponent","hydrate","dh","handlePanelOpen","dragEvent","fetch","panelId","generate","widget","name","type","VariableType","FIGURE","metadata","figure","makeModel","then","undefined","config","component","COMPONENT","localDashboardId","title","root","openComponent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN"],"sources":["../src/ChartPlugin.tsx"],"sourcesContent":["import { useCallback, useEffect, DragEvent } from 'react';\nimport { ChartModelFactory } from '@deephaven/chart';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelEvent,\n PanelHydrateFunction,\n useListener,\n} from '@deephaven/dashboard';\nimport type { Figure, VariableDefinition } from '@deephaven/jsapi-types';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport shortid from 'shortid';\nimport { ChartPanel, ChartPanelProps } from './panels';\n\nexport type ChartPluginProps = Partial<DashboardPluginComponentProps> & {\n hydrate: PanelHydrateFunction<ChartPanelProps>;\n};\n\nexport function ChartPlugin(props: ChartPluginProps): JSX.Element | null {\n assertIsDashboardPluginProps(props);\n const { id, layout, registerComponent, hydrate } = props;\n\n const dh = useApi();\n\n const handlePanelOpen = useCallback(\n ({\n dragEvent,\n fetch,\n panelId = shortid.generate(),\n widget,\n }: {\n dragEvent?: DragEvent;\n fetch: () => Promise<Figure>;\n panelId?: string;\n widget: VariableDefinition;\n }) => {\n const { name, type } = widget;\n if (type !== dh.VariableType.FIGURE) {\n return;\n }\n\n const metadata = { name, figure: name };\n const makeModel = () =>\n fetch().then((figure: Figure) =>\n ChartModelFactory.makeModel(dh, undefined, figure)\n );\n const config = {\n type: 'react-component' as const,\n component: ChartPanel.COMPONENT,\n props: {\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel,\n },\n title: name,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config, dragEvent });\n },\n [dh, id, layout]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(\n ChartPanel.COMPONENT,\n ChartPanel,\n hydrate as PanelHydrateFunction\n ),\n ];\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [hydrate, registerComponent]\n );\n\n useListener(layout.eventHub, PanelEvent.OPEN, handlePanelOpen);\n\n return null;\n}\n\nexport default ChartPlugin;\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,SAAS,QAAmB,OAAO;AACzD,SAASC,iBAAiB,QAAQ,kBAAkB;AACpD,SACEC,4BAA4B,EAE5BC,WAAW,EACXC,UAAU,EAEVC,WAAW,QACN,sBAAsB;AAE7B,SAASC,MAAM,QAAQ,4BAA4B;AACnD,OAAOC,OAAO,MAAM,SAAS;AAAC,SACrBC,UAAU;AAMnB,OAAO,SAASC,WAAW,CAACC,KAAuB,EAAsB;EACvER,4BAA4B,CAACQ,KAAK,CAAC;EACnC,IAAM;IAAEC,EAAE;IAAEC,MAAM;IAAEC,iBAAiB;IAAEC;EAAQ,CAAC,GAAGJ,KAAK;EAExD,IAAMK,EAAE,GAAGT,MAAM,EAAE;EAEnB,IAAMU,eAAe,GAAGjB,WAAW,CACjC,QAUM;IAAA,IAVL;MACCkB,SAAS;MACTC,KAAK;MACLC,OAAO,GAAGZ,OAAO,CAACa,QAAQ,EAAE;MAC5BC;IAMF,CAAC;IACC,IAAM;MAAEC,IAAI;MAAEC;IAAK,CAAC,GAAGF,MAAM;IAC7B,IAAIE,IAAI,KAAKR,EAAE,CAACS,YAAY,CAACC,MAAM,EAAE;MACnC;IACF;IAEA,IAAMC,QAAQ,GAAG;MAAEJ,IAAI;MAAEK,MAAM,EAAEL;IAAK,CAAC;IACvC,IAAMM,SAAS,GAAG,MAChBV,KAAK,EAAE,CAACW,IAAI,CAAEF,MAAc,IAC1B1B,iBAAiB,CAAC2B,SAAS,CAACb,EAAE,EAAEe,SAAS,EAAEH,MAAM,CAAC,CACnD;IACH,IAAMI,MAAM,GAAG;MACbR,IAAI,EAAE,iBAA0B;MAChCS,SAAS,EAAExB,UAAU,CAACyB,SAAS;MAC/BvB,KAAK,EAAE;QACLwB,gBAAgB,EAAEvB,EAAE;QACpBA,EAAE,EAAEQ,OAAO;QACXO,QAAQ;QACRE;MACF,CAAC;MACDO,KAAK,EAAEb,IAAI;MACXX,EAAE,EAAEQ;IACN,CAAC;IAED,IAAM;MAAEiB;IAAK,CAAC,GAAGxB,MAAM;IACvBT,WAAW,CAACkC,aAAa,CAAC;MAAED,IAAI;MAAEL,MAAM;MAAEd;IAAU,CAAC,CAAC;EACxD,CAAC,EACD,CAACF,EAAE,EAAEJ,EAAE,EAAEC,MAAM,CAAC,CACjB;EAEDZ,SAAS,CACP,SAASsC,kCAAkC,GAAG;IAC5C,IAAMC,QAAQ,GAAG,CACf1B,iBAAiB,CACfL,UAAU,CAACyB,SAAS,EACpBzB,UAAU,EACVM,OAAO,CACR,CACF;IACD,OAAO,MAAM;MACXyB,QAAQ,CAACC,OAAO,CAACC,OAAO,IAAIA,OAAO,EAAE,CAAC;IACxC,CAAC;EACH,CAAC,EACD,CAAC3B,OAAO,EAAED,iBAAiB,CAAC,CAC7B;EAEDR,WAAW,CAACO,MAAM,CAAC8B,QAAQ,EAAEtC,UAAU,CAACuC,IAAI,EAAE3B,eAAe,CAAC;EAE9D,OAAO,IAAI;AACb;AAEA,eAAeP,WAAW"}
|
package/dist/GridPlugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridPlugin.d.ts","sourceRoot":"","sources":["../src/GridPlugin.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"GridPlugin.d.ts","sourceRoot":"","sources":["../src/GridPlugin.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqD,MAAM,OAAO,CAAC;AAC1E,OAAO,EAEL,6BAA6B,EAG7B,oBAAoB,EAErB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAwB,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAI/E,OAAO,EAAiB,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE7D,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,6BAA6B,CAAC,GAAG;IACrE,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,CAAC,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC;IACnE,OAAO,EAAE,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IAClD,KAAK,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACpC,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAkFrE;AAED,eAAe,UAAU,CAAC"}
|
package/dist/GridPlugin.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { useCallback, useEffect } from 'react';
|
|
1
|
+
import { useCallback, useEffect, useMemo } from 'react';
|
|
2
2
|
import { assertIsDashboardPluginProps, LayoutUtils, PanelEvent, useListener } from '@deephaven/dashboard';
|
|
3
3
|
import { IrisGridModelFactory } from '@deephaven/iris-grid';
|
|
4
|
+
import { useApi } from '@deephaven/jsapi-bootstrap';
|
|
4
5
|
import shortid from 'shortid';
|
|
5
6
|
import { IrisGridPanel } from "./panels/index.js";
|
|
6
|
-
var SUPPORTED_TYPES = [dh.VariableType.TABLE, dh.VariableType.TREETABLE, dh.VariableType.HIERARCHICALTABLE];
|
|
7
7
|
export function GridPlugin(props) {
|
|
8
8
|
assertIsDashboardPluginProps(props);
|
|
9
9
|
var {
|
|
@@ -15,6 +15,8 @@ export function GridPlugin(props) {
|
|
|
15
15
|
hydrate,
|
|
16
16
|
theme
|
|
17
17
|
} = props;
|
|
18
|
+
var dh = useApi();
|
|
19
|
+
var supportedTypes = useMemo(() => [dh.VariableType.TABLE, dh.VariableType.TREETABLE, dh.VariableType.HIERARCHICALTABLE], [dh]);
|
|
18
20
|
var handlePanelOpen = useCallback(_ref => {
|
|
19
21
|
var {
|
|
20
22
|
dragEvent,
|
|
@@ -26,7 +28,7 @@ export function GridPlugin(props) {
|
|
|
26
28
|
name,
|
|
27
29
|
type
|
|
28
30
|
} = widget;
|
|
29
|
-
if (!
|
|
31
|
+
if (!supportedTypes.includes(type)) {
|
|
30
32
|
return;
|
|
31
33
|
}
|
|
32
34
|
var metadata = {
|
|
@@ -34,7 +36,7 @@ export function GridPlugin(props) {
|
|
|
34
36
|
table: name,
|
|
35
37
|
type: widget.type
|
|
36
38
|
};
|
|
37
|
-
var makeModel = () => fetch().then(table => IrisGridModelFactory.makeModel(table));
|
|
39
|
+
var makeModel = () => fetch().then(table => IrisGridModelFactory.makeModel(dh, table));
|
|
38
40
|
var config = {
|
|
39
41
|
type: 'react-component',
|
|
40
42
|
component: IrisGridPanel.COMPONENT,
|
|
@@ -58,7 +60,7 @@ export function GridPlugin(props) {
|
|
|
58
60
|
config,
|
|
59
61
|
dragEvent
|
|
60
62
|
});
|
|
61
|
-
}, [getDownloadWorker, id, layout, loadPlugin, theme]);
|
|
63
|
+
}, [dh, getDownloadWorker, id, layout, loadPlugin, supportedTypes, theme]);
|
|
62
64
|
useEffect(function registerComponentsAndReturnCleanup() {
|
|
63
65
|
var cleanups = [registerComponent(IrisGridPanel.COMPONENT, IrisGridPanel, hydrate)];
|
|
64
66
|
return () => {
|
package/dist/GridPlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridPlugin.js","names":["useCallback","useEffect","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","useListener","IrisGridModelFactory","shortid","IrisGridPanel","
|
|
1
|
+
{"version":3,"file":"GridPlugin.js","names":["useCallback","useEffect","useMemo","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","useListener","IrisGridModelFactory","useApi","shortid","IrisGridPanel","GridPlugin","props","getDownloadWorker","loadPlugin","id","layout","registerComponent","hydrate","theme","dh","supportedTypes","VariableType","TABLE","TREETABLE","HIERARCHICALTABLE","handlePanelOpen","dragEvent","fetch","panelId","generate","widget","name","type","includes","metadata","table","makeModel","then","config","component","COMPONENT","localDashboardId","title","root","openComponent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN"],"sources":["../src/GridPlugin.tsx"],"sourcesContent":["import React, { DragEvent, useCallback, useEffect, useMemo } from 'react';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelEvent,\n PanelHydrateFunction,\n useListener,\n} from '@deephaven/dashboard';\nimport { IrisGridModelFactory, IrisGridThemeType } from '@deephaven/iris-grid';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport type { Table, VariableDefinition } from '@deephaven/jsapi-types';\nimport shortid from 'shortid';\nimport { IrisGridPanel, IrisGridPanelProps } from './panels';\n\nexport type GridPluginProps = Partial<DashboardPluginComponentProps> & {\n getDownloadWorker?: () => Promise<ServiceWorker>;\n loadPlugin?: (name: string) => ReturnType<typeof React.forwardRef>;\n hydrate: PanelHydrateFunction<IrisGridPanelProps>;\n theme?: Partial<IrisGridThemeType>;\n};\n\nexport function GridPlugin(props: GridPluginProps): JSX.Element | null {\n assertIsDashboardPluginProps(props);\n const {\n getDownloadWorker,\n loadPlugin,\n id,\n layout,\n registerComponent,\n hydrate,\n theme,\n } = props;\n const dh = useApi();\n const supportedTypes: string[] = useMemo(\n () => [\n dh.VariableType.TABLE,\n dh.VariableType.TREETABLE,\n dh.VariableType.HIERARCHICALTABLE,\n ],\n [dh]\n );\n const handlePanelOpen = useCallback(\n ({\n dragEvent,\n fetch,\n panelId = shortid.generate(),\n widget,\n }: {\n dragEvent?: DragEvent;\n fetch: () => Promise<Table>;\n panelId?: string;\n widget: VariableDefinition;\n }) => {\n const { name, type } = widget;\n if (!supportedTypes.includes(type)) {\n return;\n }\n const metadata = { name, table: name, type: widget.type };\n const makeModel = () =>\n fetch().then((table: Table) =>\n IrisGridModelFactory.makeModel(dh, table)\n );\n const config = {\n type: 'react-component' as const,\n component: IrisGridPanel.COMPONENT,\n props: {\n getDownloadWorker,\n loadPlugin,\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel,\n theme,\n },\n title: name,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config, dragEvent });\n },\n [dh, getDownloadWorker, id, layout, loadPlugin, supportedTypes, theme]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(\n IrisGridPanel.COMPONENT,\n IrisGridPanel,\n hydrate as PanelHydrateFunction\n ),\n ];\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [hydrate, registerComponent]\n );\n\n useListener(layout.eventHub, PanelEvent.OPEN, handlePanelOpen);\n\n return null;\n}\n\nexport default GridPlugin;\n"],"mappings":"AAAA,SAA2BA,WAAW,EAAEC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AACzE,SACEC,4BAA4B,EAE5BC,WAAW,EACXC,UAAU,EAEVC,WAAW,QACN,sBAAsB;AAC7B,SAASC,oBAAoB,QAA2B,sBAAsB;AAC9E,SAASC,MAAM,QAAQ,4BAA4B;AAEnD,OAAOC,OAAO,MAAM,SAAS;AAAC,SACrBC,aAAa;AAStB,OAAO,SAASC,UAAU,CAACC,KAAsB,EAAsB;EACrET,4BAA4B,CAACS,KAAK,CAAC;EACnC,IAAM;IACJC,iBAAiB;IACjBC,UAAU;IACVC,EAAE;IACFC,MAAM;IACNC,iBAAiB;IACjBC,OAAO;IACPC;EACF,CAAC,GAAGP,KAAK;EACT,IAAMQ,EAAE,GAAGZ,MAAM,EAAE;EACnB,IAAMa,cAAwB,GAAGnB,OAAO,CACtC,MAAM,CACJkB,EAAE,CAACE,YAAY,CAACC,KAAK,EACrBH,EAAE,CAACE,YAAY,CAACE,SAAS,EACzBJ,EAAE,CAACE,YAAY,CAACG,iBAAiB,CAClC,EACD,CAACL,EAAE,CAAC,CACL;EACD,IAAMM,eAAe,GAAG1B,WAAW,CACjC,QAUM;IAAA,IAVL;MACC2B,SAAS;MACTC,KAAK;MACLC,OAAO,GAAGpB,OAAO,CAACqB,QAAQ,EAAE;MAC5BC;IAMF,CAAC;IACC,IAAM;MAAEC,IAAI;MAAEC;IAAK,CAAC,GAAGF,MAAM;IAC7B,IAAI,CAACV,cAAc,CAACa,QAAQ,CAACD,IAAI,CAAC,EAAE;MAClC;IACF;IACA,IAAME,QAAQ,GAAG;MAAEH,IAAI;MAAEI,KAAK,EAAEJ,IAAI;MAAEC,IAAI,EAAEF,MAAM,CAACE;IAAK,CAAC;IACzD,IAAMI,SAAS,GAAG,MAChBT,KAAK,EAAE,CAACU,IAAI,CAAEF,KAAY,IACxB7B,oBAAoB,CAAC8B,SAAS,CAACjB,EAAE,EAAEgB,KAAK,CAAC,CAC1C;IACH,IAAMG,MAAM,GAAG;MACbN,IAAI,EAAE,iBAA0B;MAChCO,SAAS,EAAE9B,aAAa,CAAC+B,SAAS;MAClC7B,KAAK,EAAE;QACLC,iBAAiB;QACjBC,UAAU;QACV4B,gBAAgB,EAAE3B,EAAE;QACpBA,EAAE,EAAEc,OAAO;QACXM,QAAQ;QACRE,SAAS;QACTlB;MACF,CAAC;MACDwB,KAAK,EAAEX,IAAI;MACXjB,EAAE,EAAEc;IACN,CAAC;IAED,IAAM;MAAEe;IAAK,CAAC,GAAG5B,MAAM;IACvBZ,WAAW,CAACyC,aAAa,CAAC;MAAED,IAAI;MAAEL,MAAM;MAAEZ;IAAU,CAAC,CAAC;EACxD,CAAC,EACD,CAACP,EAAE,EAAEP,iBAAiB,EAAEE,EAAE,EAAEC,MAAM,EAAEF,UAAU,EAAEO,cAAc,EAAEF,KAAK,CAAC,CACvE;EAEDlB,SAAS,CACP,SAAS6C,kCAAkC,GAAG;IAC5C,IAAMC,QAAQ,GAAG,CACf9B,iBAAiB,CACfP,aAAa,CAAC+B,SAAS,EACvB/B,aAAa,EACbQ,OAAO,CACR,CACF;IACD,OAAO,MAAM;MACX6B,QAAQ,CAACC,OAAO,CAACC,OAAO,IAAIA,OAAO,EAAE,CAAC;IACxC,CAAC;EACH,CAAC,EACD,CAAC/B,OAAO,EAAED,iBAAiB,CAAC,CAC7B;EAEDX,WAAW,CAACU,MAAM,CAACkC,QAAQ,EAAE7C,UAAU,CAAC8C,IAAI,EAAEzB,eAAe,CAAC;EAE9D,OAAO,IAAI;AACb;AAEA,eAAef,UAAU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PandasPlugin.d.ts","sourceRoot":"","sources":["../src/PandasPlugin.tsx"],"names":[],"mappings":";AACA,OAAO,EAEL,6BAA6B,EAG7B,oBAAoB,EAErB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"PandasPlugin.d.ts","sourceRoot":"","sources":["../src/PandasPlugin.tsx"],"names":[],"mappings":";AACA,OAAO,EAEL,6BAA6B,EAG7B,oBAAoB,EAErB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAAe,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEzD,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,6BAA6B,CAAC,GAAG;IACvE,OAAO,EAAE,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;CACjD,CAAC;AAEF,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAqDzE;AAED,eAAe,YAAY,CAAC"}
|
package/dist/PandasPlugin.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useCallback, useEffect } from 'react';
|
|
2
2
|
import { assertIsDashboardPluginProps, LayoutUtils, PanelEvent, useListener } from '@deephaven/dashboard';
|
|
3
3
|
import { IrisGridModelFactory } from '@deephaven/iris-grid';
|
|
4
|
+
import { useApi } from '@deephaven/jsapi-bootstrap';
|
|
4
5
|
import shortid from 'shortid';
|
|
5
6
|
import { PandasPanel } from "./panels/index.js";
|
|
6
7
|
export function PandasPlugin(props) {
|
|
@@ -11,6 +12,7 @@ export function PandasPlugin(props) {
|
|
|
11
12
|
layout,
|
|
12
13
|
registerComponent
|
|
13
14
|
} = props;
|
|
15
|
+
var dh = useApi();
|
|
14
16
|
var handlePanelOpen = useCallback(_ref => {
|
|
15
17
|
var {
|
|
16
18
|
dragEvent,
|
|
@@ -29,7 +31,7 @@ export function PandasPlugin(props) {
|
|
|
29
31
|
name,
|
|
30
32
|
table: name
|
|
31
33
|
};
|
|
32
|
-
var makeModel = () => fetch().then(table => IrisGridModelFactory.makeModel(table));
|
|
34
|
+
var makeModel = () => fetch().then(table => IrisGridModelFactory.makeModel(dh, table));
|
|
33
35
|
var config = {
|
|
34
36
|
type: 'react-component',
|
|
35
37
|
component: PandasPanel.COMPONENT,
|
|
@@ -50,7 +52,7 @@ export function PandasPlugin(props) {
|
|
|
50
52
|
config,
|
|
51
53
|
dragEvent
|
|
52
54
|
});
|
|
53
|
-
}, [id, layout]);
|
|
55
|
+
}, [dh, id, layout]);
|
|
54
56
|
useEffect(function registerComponentsAndReturnCleanup() {
|
|
55
57
|
var cleanups = [registerComponent(PandasPanel.COMPONENT, PandasPanel, hydrate)];
|
|
56
58
|
return () => {
|
package/dist/PandasPlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PandasPlugin.js","names":["useCallback","useEffect","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","useListener","IrisGridModelFactory","shortid","PandasPanel","PandasPlugin","props","hydrate","id","layout","registerComponent","handlePanelOpen","dragEvent","fetch","panelId","generate","widget","name","type","
|
|
1
|
+
{"version":3,"file":"PandasPlugin.js","names":["useCallback","useEffect","assertIsDashboardPluginProps","LayoutUtils","PanelEvent","useListener","IrisGridModelFactory","useApi","shortid","PandasPanel","PandasPlugin","props","hydrate","id","layout","registerComponent","dh","handlePanelOpen","dragEvent","fetch","panelId","generate","widget","name","type","VariableType","PANDAS","metadata","table","makeModel","then","config","component","COMPONENT","localDashboardId","title","root","openComponent","registerComponentsAndReturnCleanup","cleanups","forEach","cleanup","eventHub","OPEN"],"sources":["../src/PandasPlugin.tsx"],"sourcesContent":["import { useCallback, useEffect } from 'react';\nimport {\n assertIsDashboardPluginProps,\n DashboardPluginComponentProps,\n LayoutUtils,\n PanelEvent,\n PanelHydrateFunction,\n useListener,\n} from '@deephaven/dashboard';\nimport { IrisGridModelFactory } from '@deephaven/iris-grid';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport type { Table } from '@deephaven/jsapi-types';\nimport shortid from 'shortid';\nimport { PandasPanel, PandasPanelProps } from './panels';\n\nexport type PandasPluginProps = Partial<DashboardPluginComponentProps> & {\n hydrate: PanelHydrateFunction<PandasPanelProps>;\n};\n\nexport function PandasPlugin(props: PandasPluginProps): JSX.Element | null {\n assertIsDashboardPluginProps(props);\n const { hydrate, id, layout, registerComponent } = props;\n\n const dh = useApi();\n\n const handlePanelOpen = useCallback(\n ({ dragEvent, fetch, panelId = shortid.generate(), widget }) => {\n const { name, type } = widget;\n if (type !== dh.VariableType.PANDAS) {\n return;\n }\n\n const metadata = { name, table: name };\n const makeModel = () =>\n fetch().then((table: Table) =>\n IrisGridModelFactory.makeModel(dh, table)\n );\n const config = {\n type: 'react-component' as const,\n component: PandasPanel.COMPONENT,\n props: {\n localDashboardId: id,\n id: panelId,\n metadata,\n makeModel,\n },\n title: name,\n id: panelId,\n };\n\n const { root } = layout;\n LayoutUtils.openComponent({ root, config, dragEvent });\n },\n [dh, id, layout]\n );\n\n useEffect(\n function registerComponentsAndReturnCleanup() {\n const cleanups = [\n registerComponent(PandasPanel.COMPONENT, PandasPanel, hydrate),\n ];\n\n return () => {\n cleanups.forEach(cleanup => cleanup());\n };\n },\n [hydrate, registerComponent]\n );\n\n useListener(layout.eventHub, PanelEvent.OPEN, handlePanelOpen);\n\n return null;\n}\n\nexport default PandasPlugin;\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,SAAS,QAAQ,OAAO;AAC9C,SACEC,4BAA4B,EAE5BC,WAAW,EACXC,UAAU,EAEVC,WAAW,QACN,sBAAsB;AAC7B,SAASC,oBAAoB,QAAQ,sBAAsB;AAC3D,SAASC,MAAM,QAAQ,4BAA4B;AAEnD,OAAOC,OAAO,MAAM,SAAS;AAAC,SACrBC,WAAW;AAMpB,OAAO,SAASC,YAAY,CAACC,KAAwB,EAAsB;EACzET,4BAA4B,CAACS,KAAK,CAAC;EACnC,IAAM;IAAEC,OAAO;IAAEC,EAAE;IAAEC,MAAM;IAAEC;EAAkB,CAAC,GAAGJ,KAAK;EAExD,IAAMK,EAAE,GAAGT,MAAM,EAAE;EAEnB,IAAMU,eAAe,GAAGjB,WAAW,CACjC,QAAgE;IAAA,IAA/D;MAAEkB,SAAS;MAAEC,KAAK;MAAEC,OAAO,GAAGZ,OAAO,CAACa,QAAQ,EAAE;MAAEC;IAAO,CAAC;IACzD,IAAM;MAAEC,IAAI;MAAEC;IAAK,CAAC,GAAGF,MAAM;IAC7B,IAAIE,IAAI,KAAKR,EAAE,CAACS,YAAY,CAACC,MAAM,EAAE;MACnC;IACF;IAEA,IAAMC,QAAQ,GAAG;MAAEJ,IAAI;MAAEK,KAAK,EAAEL;IAAK,CAAC;IACtC,IAAMM,SAAS,GAAG,MAChBV,KAAK,EAAE,CAACW,IAAI,CAAEF,KAAY,IACxBtB,oBAAoB,CAACuB,SAAS,CAACb,EAAE,EAAEY,KAAK,CAAC,CAC1C;IACH,IAAMG,MAAM,GAAG;MACbP,IAAI,EAAE,iBAA0B;MAChCQ,SAAS,EAAEvB,WAAW,CAACwB,SAAS;MAChCtB,KAAK,EAAE;QACLuB,gBAAgB,EAAErB,EAAE;QACpBA,EAAE,EAAEO,OAAO;QACXO,QAAQ;QACRE;MACF,CAAC;MACDM,KAAK,EAAEZ,IAAI;MACXV,EAAE,EAAEO;IACN,CAAC;IAED,IAAM;MAAEgB;IAAK,CAAC,GAAGtB,MAAM;IACvBX,WAAW,CAACkC,aAAa,CAAC;MAAED,IAAI;MAAEL,MAAM;MAAEb;IAAU,CAAC,CAAC;EACxD,CAAC,EACD,CAACF,EAAE,EAAEH,EAAE,EAAEC,MAAM,CAAC,CACjB;EAEDb,SAAS,CACP,SAASqC,kCAAkC,GAAG;IAC5C,IAAMC,QAAQ,GAAG,CACfxB,iBAAiB,CAACN,WAAW,CAACwB,SAAS,EAAExB,WAAW,EAAEG,OAAO,CAAC,CAC/D;IAED,OAAO,MAAM;MACX2B,QAAQ,CAACC,OAAO,CAACC,OAAO,IAAIA,OAAO,EAAE,CAAC;IACxC,CAAC;EACH,CAAC,EACD,CAAC7B,OAAO,EAAEG,iBAAiB,CAAC,CAC7B;EAEDV,WAAW,CAACS,MAAM,CAAC4B,QAAQ,EAAEtC,UAAU,CAACuC,IAAI,EAAE1B,eAAe,CAAC;EAE9D,OAAO,IAAI;AACb;AAEA,eAAeP,YAAY"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChangeEvent, Component, KeyboardEvent, MouseEvent, ReactElement, RefObject } from 'react';
|
|
2
|
-
import { Column } from '@deephaven/jsapi-
|
|
2
|
+
import type { Column } from '@deephaven/jsapi-types';
|
|
3
3
|
import memoizee from 'memoizee';
|
|
4
4
|
import './DropdownFilter.scss';
|
|
5
5
|
import { LinkPoint } from '../../linker/LinkerUtils';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownFilter.d.ts","sourceRoot":"","sources":["../../../src/controls/dropdown-filter/DropdownFilter.tsx"],"names":[],"mappings":"AAIA,OAAc,EACZ,WAAW,EACX,SAAS,EACT,aAAa,EACb,UAAU,EACV,YAAY,EACZ,SAAS,EACV,MAAM,OAAO,CAAC;AAIf,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"DropdownFilter.d.ts","sourceRoot":"","sources":["../../../src/controls/dropdown-filter/DropdownFilter.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownFilter.js","names":["React","Component","FontAwesomeIcon","Button","CardFlip","SocketedButton","vsGear","TableUtils","memoizee","memoize","debounce","shortid","Log","log","module","UPDATE_DEBOUNCE","DropdownFilter","constructor","props","source","columns","filter","type","undefined","isCompatibleType","columnType","selectedColumn","selectedIndex","options","push","forEach","columnItem","index","name","getItemLabel","values","value","indexOf","PLACEHOLDER","map","val","length","shortType","substring","lastIndexOf","onChange","column","isValueShown","state","handleColumnChange","bind","handleSettingsCancel","handleSettingsClick","handleSettingsSave","handleBackgroundClick","handleDropdownKeyPress","handleValueChange","dropdownRef","createRef","id","disableCancel","componentDidUpdate","prevProps","prevState","isLoaded","sourceUpdated","includes","resetValue","focusInput","sendUpdate","componentWillUnmount","flush","event","target","debug2","parseInt","setState","allColumns","getCompatibleColumns","key","preventDefault","stopPropagation","valueIndex","showSettings","current","focus","clearFilter","setFilterState","oldValue","oldIsValueShown","render","disableLinking","isLinkerActive","onColumnSelected","onSourceMouseEnter","onSourceMouseLeave","settingsError","columnSelectionDisabled","isLinked","sourceButtonLabel","columnName","SOURCE_BUTTON_PLACEHOLDER","filterTitle","columnOptions","getColumnOptions","valueOptions","getValueOptions","selectedOption","getSelectedOptionIndex","disableSave","isFlipped","sourceColumnId","filterColumnId","SOURCE_BUTTON_CLASS_NAME"],"sources":["../../../src/controls/dropdown-filter/DropdownFilter.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convenience method, not an actual a11y issue\n\nimport React, {\n ChangeEvent,\n Component,\n KeyboardEvent,\n MouseEvent,\n ReactElement,\n RefObject,\n} from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CardFlip, SocketedButton } from '@deephaven/components';\nimport { vsGear } from '@deephaven/icons';\nimport { Column } from '@deephaven/jsapi-shim';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport memoizee from 'memoizee';\nimport memoize from 'memoize-one';\nimport debounce from 'lodash.debounce';\nimport shortid from 'shortid';\nimport Log from '@deephaven/log';\nimport './DropdownFilter.scss';\nimport { LinkPoint } from '../../linker/LinkerUtils';\n\nconst log = Log.module('DropdownFilter');\nconst UPDATE_DEBOUNCE = 150;\n\nexport interface DropdownFilterColumn {\n name: string;\n type: string;\n}\n\nexport interface DropdownFilterProps {\n column: DropdownFilterColumn;\n columns: DropdownFilterColumn[];\n onSourceMouseEnter: () => void;\n onSourceMouseLeave: () => void;\n disableLinking: boolean;\n isLinkerActive: boolean;\n isLoaded: boolean;\n isValueShown: boolean;\n settingsError: string;\n source: LinkPoint;\n value: string | null;\n values: (string | null)[];\n onChange: (change: {\n column: Partial<Column> | null;\n isValueShown?: boolean;\n value?: string;\n }) => void;\n onColumnSelected: () => void;\n}\n\ninterface DropdownFilterState {\n column: DropdownFilterColumn | null;\n selectedColumn: DropdownFilterColumn | null;\n disableCancel: boolean;\n isValueShown: boolean;\n value: string | null;\n id: string;\n}\n\nexport class DropdownFilter extends Component<\n DropdownFilterProps,\n DropdownFilterState\n> {\n static defaultProps = {\n column: null,\n disableLinking: false,\n isLinkerActive: false,\n isLoaded: false,\n isValueShown: false,\n\n settingsError: null,\n source: null,\n value: '',\n values: [],\n onColumnSelected: (): void => undefined,\n onSourceMouseEnter: (): void => undefined,\n onSourceMouseLeave: (): void => undefined,\n };\n\n static PLACEHOLDER = 'Select a value...';\n\n static SOURCE_BUTTON_CLASS_NAME = 'btn-dropdown-filter-selector';\n\n static SOURCE_BUTTON_PLACEHOLDER = 'Select a column';\n\n constructor(props: DropdownFilterProps) {\n super(props);\n\n this.handleColumnChange = this.handleColumnChange.bind(this);\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleDropdownKeyPress = this.handleDropdownKeyPress.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n\n this.dropdownRef = React.createRef();\n\n const { column, isValueShown, value } = props;\n this.state = {\n column,\n id: shortid(),\n selectedColumn: column,\n disableCancel: !isValueShown,\n isValueShown,\n value,\n };\n }\n\n componentDidUpdate(\n prevProps: DropdownFilterProps,\n prevState: DropdownFilterState\n ): void {\n const { source, values, isLoaded } = this.props;\n const { column, value, isValueShown } = this.state;\n\n if (isLoaded) {\n if (source !== prevProps.source) {\n this.sourceUpdated();\n }\n\n if (\n values !== prevProps.values &&\n value !== '' &&\n !values.includes(value)\n ) {\n // Value list loaded, but doesn't contain the current value\n this.resetValue();\n }\n\n if (isValueShown !== prevState.isValueShown) {\n if (isValueShown) {\n this.focusInput();\n }\n }\n\n if (\n column !== prevState.column ||\n value !== prevState.value ||\n isValueShown !== prevState.isValueShown\n ) {\n this.sendUpdate();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.sendUpdate.flush();\n }\n\n dropdownRef: RefObject<HTMLSelectElement>;\n\n getCompatibleColumns = memoize(\n (source: LinkPoint, columns: DropdownFilterColumn[]) =>\n source != null\n ? columns.filter(\n ({ type }) =>\n type !== undefined &&\n TableUtils.isCompatibleType(type, source.columnType)\n )\n : []\n );\n\n getColumnOptions = memoize(\n (\n columns: DropdownFilterColumn[],\n selectedColumn: DropdownFilterColumn | null\n ): [JSX.Element[], number] => {\n let selectedIndex = -1;\n const options = [];\n options.push(\n <option key=\"placeholder\" value=\"-1\">\n Select a column\n </option>\n );\n columns.forEach((columnItem, index) => {\n options.push(\n <option key={`${columnItem.name}/${columnItem.type}`} value={index}>\n {this.getItemLabel(columns, index)}\n </option>\n );\n if (\n selectedColumn !== null &&\n columnItem.name === selectedColumn.name &&\n columnItem.type === selectedColumn.type\n ) {\n selectedIndex = index;\n }\n });\n return [options, selectedIndex];\n }\n );\n\n getSelectedOptionIndex = memoize(\n (values: (string | null)[], value: string | null) => values.indexOf(value)\n );\n\n getValueOptions = memoize((values: (string | null)[]) => [\n <option value=\"-1\" key=\"-1\">\n {DropdownFilter.PLACEHOLDER}\n </option>,\n ...values.map((val, index) => (\n <option\n value={index}\n // eslint-disable-next-line react/no-array-index-key\n key={`${index}/${val}`}\n >\n {val ?? '(null)'}\n </option>\n )),\n ]);\n\n getItemLabel = memoizee((columns: DropdownFilterColumn[], index: number) => {\n const { name, type } = columns[index];\n\n if (\n (index > 0 && columns[index - 1].name === name) ||\n (index < columns.length - 1 && columns[index + 1].name === name)\n ) {\n const shortType = type.substring(type.lastIndexOf('.') + 1);\n return `${name} (${shortType})`;\n }\n\n return name;\n });\n\n handleColumnChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { value } = event.target;\n log.debug2('handleColumnChange', value);\n if (value != null && parseInt(value, 10) < 0) {\n this.setState({\n selectedColumn: null,\n });\n return;\n }\n const { columns: allColumns, source } = this.props;\n const columns = this.getCompatibleColumns(source, allColumns);\n this.setState({\n selectedColumn: columns[parseInt(value, 10)],\n });\n }\n\n handleDropdownKeyPress(event: KeyboardEvent<HTMLSelectElement>): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n\n log.debug2('handleDropdownKeyPress');\n\n this.sendUpdate();\n this.sendUpdate.flush();\n }\n }\n\n handleValueChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { value: valueIndex } = event.target;\n const index = parseInt(valueIndex, 10);\n // Default empty string value for 'clear filter'\n let value: string | null = '';\n const { values } = this.props;\n if (index >= 0 && index < values.length) {\n value = values[index];\n } else {\n log.debug2('Selected default item');\n }\n\n log.debug2('handleValueChange', value);\n\n this.setState({ value });\n }\n\n handleSettingsCancel(): void {\n this.setState(({ column }) => ({\n selectedColumn: column,\n isValueShown: true,\n }));\n }\n\n handleSettingsSave(): void {\n this.setState(({ column, selectedColumn, value }) => ({\n column: selectedColumn,\n // Reset value if column changed\n value: column === selectedColumn ? value : '',\n isValueShown: true,\n disableCancel: false,\n }));\n }\n\n handleSettingsClick(event: MouseEvent<HTMLButtonElement>): void {\n event.stopPropagation();\n this.showSettings();\n }\n\n handleBackgroundClick(event: MouseEvent<HTMLDivElement>): void {\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.dropdownRef.current) {\n this.focusInput();\n }\n }\n\n sourceUpdated(): void {\n this.setState({\n column: null,\n selectedColumn: null,\n isValueShown: false,\n disableCancel: true,\n value: '',\n });\n }\n\n showSettings(): void {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: false });\n }\n\n focusInput(): void {\n this.dropdownRef.current?.focus();\n }\n\n resetValue(): void {\n this.setState({ value: '' });\n }\n\n // Called by the parent component via ref\n clearFilter(): void {\n this.resetValue();\n }\n\n // Called by the parent component via ref\n setFilterState({\n name,\n type,\n value,\n isValueShown,\n }: {\n name?: string;\n type?: string;\n value?: string;\n isValueShown?: boolean;\n }): void {\n const column = name != null && type != null ? { name, type } : null;\n this.setState(({ value: oldValue, isValueShown: oldIsValueShown }) => ({\n column,\n value: value ?? oldValue,\n isValueShown: isValueShown ?? oldIsValueShown,\n }));\n }\n\n sendUpdate = debounce(() => {\n const { onChange } = this.props;\n const { column, value, isValueShown } = this.state;\n onChange({ column, isValueShown, value: value ?? undefined });\n }, UPDATE_DEBOUNCE);\n\n render(): ReactElement {\n const {\n columns: allColumns,\n disableLinking,\n isLinkerActive,\n isLoaded,\n source,\n onColumnSelected,\n onSourceMouseEnter,\n onSourceMouseLeave,\n values,\n settingsError,\n } = this.props;\n const {\n column,\n disableCancel,\n id,\n isValueShown,\n selectedColumn,\n value,\n } = this.state;\n const columnSelectionDisabled = source === null;\n const columns = this.getCompatibleColumns(source, allColumns);\n const isLinked = source != null;\n const sourceButtonLabel =\n source?.columnName ?? DropdownFilter.SOURCE_BUTTON_PLACEHOLDER;\n const filterTitle = column != null ? `${column.name} Filter` : null;\n const [columnOptions, selectedIndex] = this.getColumnOptions(\n columns,\n selectedColumn\n );\n const valueOptions = this.getValueOptions(values);\n const selectedOption = this.getSelectedOptionIndex(values, value);\n const disableSave = !isLinked || selectedColumn == null;\n\n const isFlipped = isValueShown && !isLinkerActive;\n\n const sourceColumnId = `source-column-btn-${id}`;\n const filterColumnId = `filter-column-select-${id}`;\n\n return (\n <CardFlip\n className=\"dropdown-filter fill-parent-absolute\"\n isFlipped={isFlipped}\n >\n <div className=\"dropdown-filter-settings-card\">\n <div className=\"dropdown-filter-card-content\">\n <div className=\"dropdown-filter-settings-grid\">\n <label htmlFor={sourceColumnId}>Source Column</label>\n <SocketedButton\n id={sourceColumnId}\n isLinked={isLinked}\n onClick={onColumnSelected}\n onMouseEnter={onSourceMouseEnter}\n onMouseLeave={onSourceMouseLeave}\n className={DropdownFilter.SOURCE_BUTTON_CLASS_NAME}\n disabled={disableLinking}\n >\n {sourceButtonLabel}\n </SocketedButton>\n\n <div className=\"text-muted small\">\n Select a source column for the list by linking to a table.\n </div>\n\n <label htmlFor={filterColumnId}>Filter Column</label>\n <select\n id={filterColumnId}\n value={selectedIndex}\n className=\"custom-select\"\n onChange={this.handleColumnChange}\n disabled={columnSelectionDisabled}\n >\n {columnOptions}\n </select>\n <div className=\"text-muted small\">\n Dropdown filter control will apply its filter to all columns\n matching this name in this dashboard.\n </div>\n </div>\n {settingsError && (\n <div className=\"error-message text-center\">{settingsError}</div>\n )}\n {isLinked && (\n <div className=\"dropdown-filter-settings-buttons\">\n <Button\n kind=\"secondary\"\n type=\"button\"\n onClick={this.handleSettingsCancel}\n disabled={disableCancel || isValueShown || isLinkerActive}\n tooltip={\n isLinkerActive\n ? 'Cancel disabled while linker open'\n : undefined\n }\n >\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n type=\"button\"\n className=\"ml-2\"\n onClick={this.handleSettingsSave}\n disabled={disableSave || isValueShown || isLinkerActive}\n tooltip={\n isLinkerActive\n ? 'Save disabled while linker open'\n : undefined\n }\n >\n Save\n </Button>\n </div>\n )}\n </div>\n </div>\n\n <div\n className=\"dropdown-filter-value-card\"\n onClick={this.handleBackgroundClick}\n data-testid=\"dropdown-filter-value-background\"\n >\n {isLoaded && (\n <>\n <div className=\"dropdown-filter-column\">\n <div className=\"dropdown-filter-column-title\">\n {filterTitle}\n </div>\n </div>\n <div className=\"dropdown-filter-card-content\">\n <div className=\"dropdown-filter-value-input d-flex flex-column justify-content-center\">\n <select\n className=\"custom-select\"\n value={selectedOption}\n ref={this.dropdownRef}\n onChange={this.handleValueChange}\n onKeyPress={this.handleDropdownKeyPress}\n title=\"Select Value\"\n >\n {valueOptions}\n </select>\n </div>\n {settingsError && (\n <div className=\"error-message mt-3 text-center\">\n {settingsError}\n </div>\n )}\n </div>\n <div className=\"dropdown-filter-menu\">\n <Button\n kind=\"ghost\"\n className=\"m-2 px-2\"\n onClick={this.handleSettingsClick}\n icon={<FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />}\n tooltip=\"Dropdown Filter Settings\"\n />\n </div>\n </>\n )}\n </div>\n </CardFlip>\n );\n }\n}\n\nexport default DropdownFilter;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DropdownFilter.js","names":["React","Component","FontAwesomeIcon","Button","CardFlip","SocketedButton","vsGear","TableUtils","memoizee","memoize","debounce","shortid","Log","log","module","UPDATE_DEBOUNCE","DropdownFilter","constructor","props","source","columns","filter","type","undefined","isCompatibleType","columnType","selectedColumn","selectedIndex","options","push","forEach","columnItem","index","name","getItemLabel","values","value","indexOf","PLACEHOLDER","map","val","length","shortType","substring","lastIndexOf","onChange","column","isValueShown","state","handleColumnChange","bind","handleSettingsCancel","handleSettingsClick","handleSettingsSave","handleBackgroundClick","handleDropdownKeyPress","handleValueChange","dropdownRef","createRef","id","disableCancel","componentDidUpdate","prevProps","prevState","isLoaded","sourceUpdated","includes","resetValue","focusInput","sendUpdate","componentWillUnmount","flush","event","target","debug2","parseInt","setState","allColumns","getCompatibleColumns","key","preventDefault","stopPropagation","valueIndex","showSettings","current","focus","clearFilter","setFilterState","oldValue","oldIsValueShown","render","disableLinking","isLinkerActive","onColumnSelected","onSourceMouseEnter","onSourceMouseLeave","settingsError","columnSelectionDisabled","isLinked","sourceButtonLabel","columnName","SOURCE_BUTTON_PLACEHOLDER","filterTitle","columnOptions","getColumnOptions","valueOptions","getValueOptions","selectedOption","getSelectedOptionIndex","disableSave","isFlipped","sourceColumnId","filterColumnId","SOURCE_BUTTON_CLASS_NAME"],"sources":["../../../src/controls/dropdown-filter/DropdownFilter.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convenience method, not an actual a11y issue\n\nimport React, {\n ChangeEvent,\n Component,\n KeyboardEvent,\n MouseEvent,\n ReactElement,\n RefObject,\n} from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CardFlip, SocketedButton } from '@deephaven/components';\nimport { vsGear } from '@deephaven/icons';\nimport type { Column } from '@deephaven/jsapi-types';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport memoizee from 'memoizee';\nimport memoize from 'memoize-one';\nimport debounce from 'lodash.debounce';\nimport shortid from 'shortid';\nimport Log from '@deephaven/log';\nimport './DropdownFilter.scss';\nimport { LinkPoint } from '../../linker/LinkerUtils';\n\nconst log = Log.module('DropdownFilter');\nconst UPDATE_DEBOUNCE = 150;\n\nexport interface DropdownFilterColumn {\n name: string;\n type: string;\n}\n\nexport interface DropdownFilterProps {\n column: DropdownFilterColumn;\n columns: DropdownFilterColumn[];\n onSourceMouseEnter: () => void;\n onSourceMouseLeave: () => void;\n disableLinking: boolean;\n isLinkerActive: boolean;\n isLoaded: boolean;\n isValueShown: boolean;\n settingsError: string;\n source: LinkPoint;\n value: string | null;\n values: (string | null)[];\n onChange: (change: {\n column: Partial<Column> | null;\n isValueShown?: boolean;\n value?: string;\n }) => void;\n onColumnSelected: () => void;\n}\n\ninterface DropdownFilterState {\n column: DropdownFilterColumn | null;\n selectedColumn: DropdownFilterColumn | null;\n disableCancel: boolean;\n isValueShown: boolean;\n value: string | null;\n id: string;\n}\n\nexport class DropdownFilter extends Component<\n DropdownFilterProps,\n DropdownFilterState\n> {\n static defaultProps = {\n column: null,\n disableLinking: false,\n isLinkerActive: false,\n isLoaded: false,\n isValueShown: false,\n\n settingsError: null,\n source: null,\n value: '',\n values: [],\n onColumnSelected: (): void => undefined,\n onSourceMouseEnter: (): void => undefined,\n onSourceMouseLeave: (): void => undefined,\n };\n\n static PLACEHOLDER = 'Select a value...';\n\n static SOURCE_BUTTON_CLASS_NAME = 'btn-dropdown-filter-selector';\n\n static SOURCE_BUTTON_PLACEHOLDER = 'Select a column';\n\n constructor(props: DropdownFilterProps) {\n super(props);\n\n this.handleColumnChange = this.handleColumnChange.bind(this);\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleDropdownKeyPress = this.handleDropdownKeyPress.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n\n this.dropdownRef = React.createRef();\n\n const { column, isValueShown, value } = props;\n this.state = {\n column,\n id: shortid(),\n selectedColumn: column,\n disableCancel: !isValueShown,\n isValueShown,\n value,\n };\n }\n\n componentDidUpdate(\n prevProps: DropdownFilterProps,\n prevState: DropdownFilterState\n ): void {\n const { source, values, isLoaded } = this.props;\n const { column, value, isValueShown } = this.state;\n\n if (isLoaded) {\n if (source !== prevProps.source) {\n this.sourceUpdated();\n }\n\n if (\n values !== prevProps.values &&\n value !== '' &&\n !values.includes(value)\n ) {\n // Value list loaded, but doesn't contain the current value\n this.resetValue();\n }\n\n if (isValueShown !== prevState.isValueShown) {\n if (isValueShown) {\n this.focusInput();\n }\n }\n\n if (\n column !== prevState.column ||\n value !== prevState.value ||\n isValueShown !== prevState.isValueShown\n ) {\n this.sendUpdate();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.sendUpdate.flush();\n }\n\n dropdownRef: RefObject<HTMLSelectElement>;\n\n getCompatibleColumns = memoize(\n (source: LinkPoint, columns: DropdownFilterColumn[]) =>\n source != null\n ? columns.filter(\n ({ type }) =>\n type !== undefined &&\n TableUtils.isCompatibleType(type, source.columnType)\n )\n : []\n );\n\n getColumnOptions = memoize(\n (\n columns: DropdownFilterColumn[],\n selectedColumn: DropdownFilterColumn | null\n ): [JSX.Element[], number] => {\n let selectedIndex = -1;\n const options = [];\n options.push(\n <option key=\"placeholder\" value=\"-1\">\n Select a column\n </option>\n );\n columns.forEach((columnItem, index) => {\n options.push(\n <option key={`${columnItem.name}/${columnItem.type}`} value={index}>\n {this.getItemLabel(columns, index)}\n </option>\n );\n if (\n selectedColumn !== null &&\n columnItem.name === selectedColumn.name &&\n columnItem.type === selectedColumn.type\n ) {\n selectedIndex = index;\n }\n });\n return [options, selectedIndex];\n }\n );\n\n getSelectedOptionIndex = memoize(\n (values: (string | null)[], value: string | null) => values.indexOf(value)\n );\n\n getValueOptions = memoize((values: (string | null)[]) => [\n <option value=\"-1\" key=\"-1\">\n {DropdownFilter.PLACEHOLDER}\n </option>,\n ...values.map((val, index) => (\n <option\n value={index}\n // eslint-disable-next-line react/no-array-index-key\n key={`${index}/${val}`}\n >\n {val ?? '(null)'}\n </option>\n )),\n ]);\n\n getItemLabel = memoizee((columns: DropdownFilterColumn[], index: number) => {\n const { name, type } = columns[index];\n\n if (\n (index > 0 && columns[index - 1].name === name) ||\n (index < columns.length - 1 && columns[index + 1].name === name)\n ) {\n const shortType = type.substring(type.lastIndexOf('.') + 1);\n return `${name} (${shortType})`;\n }\n\n return name;\n });\n\n handleColumnChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { value } = event.target;\n log.debug2('handleColumnChange', value);\n if (value != null && parseInt(value, 10) < 0) {\n this.setState({\n selectedColumn: null,\n });\n return;\n }\n const { columns: allColumns, source } = this.props;\n const columns = this.getCompatibleColumns(source, allColumns);\n this.setState({\n selectedColumn: columns[parseInt(value, 10)],\n });\n }\n\n handleDropdownKeyPress(event: KeyboardEvent<HTMLSelectElement>): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n\n log.debug2('handleDropdownKeyPress');\n\n this.sendUpdate();\n this.sendUpdate.flush();\n }\n }\n\n handleValueChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { value: valueIndex } = event.target;\n const index = parseInt(valueIndex, 10);\n // Default empty string value for 'clear filter'\n let value: string | null = '';\n const { values } = this.props;\n if (index >= 0 && index < values.length) {\n value = values[index];\n } else {\n log.debug2('Selected default item');\n }\n\n log.debug2('handleValueChange', value);\n\n this.setState({ value });\n }\n\n handleSettingsCancel(): void {\n this.setState(({ column }) => ({\n selectedColumn: column,\n isValueShown: true,\n }));\n }\n\n handleSettingsSave(): void {\n this.setState(({ column, selectedColumn, value }) => ({\n column: selectedColumn,\n // Reset value if column changed\n value: column === selectedColumn ? value : '',\n isValueShown: true,\n disableCancel: false,\n }));\n }\n\n handleSettingsClick(event: MouseEvent<HTMLButtonElement>): void {\n event.stopPropagation();\n this.showSettings();\n }\n\n handleBackgroundClick(event: MouseEvent<HTMLDivElement>): void {\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.dropdownRef.current) {\n this.focusInput();\n }\n }\n\n sourceUpdated(): void {\n this.setState({\n column: null,\n selectedColumn: null,\n isValueShown: false,\n disableCancel: true,\n value: '',\n });\n }\n\n showSettings(): void {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: false });\n }\n\n focusInput(): void {\n this.dropdownRef.current?.focus();\n }\n\n resetValue(): void {\n this.setState({ value: '' });\n }\n\n // Called by the parent component via ref\n clearFilter(): void {\n this.resetValue();\n }\n\n // Called by the parent component via ref\n setFilterState({\n name,\n type,\n value,\n isValueShown,\n }: {\n name?: string;\n type?: string;\n value?: string;\n isValueShown?: boolean;\n }): void {\n const column = name != null && type != null ? { name, type } : null;\n this.setState(({ value: oldValue, isValueShown: oldIsValueShown }) => ({\n column,\n value: value ?? oldValue,\n isValueShown: isValueShown ?? oldIsValueShown,\n }));\n }\n\n sendUpdate = debounce(() => {\n const { onChange } = this.props;\n const { column, value, isValueShown } = this.state;\n onChange({ column, isValueShown, value: value ?? undefined });\n }, UPDATE_DEBOUNCE);\n\n render(): ReactElement {\n const {\n columns: allColumns,\n disableLinking,\n isLinkerActive,\n isLoaded,\n source,\n onColumnSelected,\n onSourceMouseEnter,\n onSourceMouseLeave,\n values,\n settingsError,\n } = this.props;\n const {\n column,\n disableCancel,\n id,\n isValueShown,\n selectedColumn,\n value,\n } = this.state;\n const columnSelectionDisabled = source === null;\n const columns = this.getCompatibleColumns(source, allColumns);\n const isLinked = source != null;\n const sourceButtonLabel =\n source?.columnName ?? DropdownFilter.SOURCE_BUTTON_PLACEHOLDER;\n const filterTitle = column != null ? `${column.name} Filter` : null;\n const [columnOptions, selectedIndex] = this.getColumnOptions(\n columns,\n selectedColumn\n );\n const valueOptions = this.getValueOptions(values);\n const selectedOption = this.getSelectedOptionIndex(values, value);\n const disableSave = !isLinked || selectedColumn == null;\n\n const isFlipped = isValueShown && !isLinkerActive;\n\n const sourceColumnId = `source-column-btn-${id}`;\n const filterColumnId = `filter-column-select-${id}`;\n\n return (\n <CardFlip\n className=\"dropdown-filter fill-parent-absolute\"\n isFlipped={isFlipped}\n >\n <div className=\"dropdown-filter-settings-card\">\n <div className=\"dropdown-filter-card-content\">\n <div className=\"dropdown-filter-settings-grid\">\n <label htmlFor={sourceColumnId}>Source Column</label>\n <SocketedButton\n id={sourceColumnId}\n isLinked={isLinked}\n onClick={onColumnSelected}\n onMouseEnter={onSourceMouseEnter}\n onMouseLeave={onSourceMouseLeave}\n className={DropdownFilter.SOURCE_BUTTON_CLASS_NAME}\n disabled={disableLinking}\n >\n {sourceButtonLabel}\n </SocketedButton>\n\n <div className=\"text-muted small\">\n Select a source column for the list by linking to a table.\n </div>\n\n <label htmlFor={filterColumnId}>Filter Column</label>\n <select\n id={filterColumnId}\n value={selectedIndex}\n className=\"custom-select\"\n onChange={this.handleColumnChange}\n disabled={columnSelectionDisabled}\n >\n {columnOptions}\n </select>\n <div className=\"text-muted small\">\n Dropdown filter control will apply its filter to all columns\n matching this name in this dashboard.\n </div>\n </div>\n {settingsError && (\n <div className=\"error-message text-center\">{settingsError}</div>\n )}\n {isLinked && (\n <div className=\"dropdown-filter-settings-buttons\">\n <Button\n kind=\"secondary\"\n type=\"button\"\n onClick={this.handleSettingsCancel}\n disabled={disableCancel || isValueShown || isLinkerActive}\n tooltip={\n isLinkerActive\n ? 'Cancel disabled while linker open'\n : undefined\n }\n >\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n type=\"button\"\n className=\"ml-2\"\n onClick={this.handleSettingsSave}\n disabled={disableSave || isValueShown || isLinkerActive}\n tooltip={\n isLinkerActive\n ? 'Save disabled while linker open'\n : undefined\n }\n >\n Save\n </Button>\n </div>\n )}\n </div>\n </div>\n\n <div\n className=\"dropdown-filter-value-card\"\n onClick={this.handleBackgroundClick}\n data-testid=\"dropdown-filter-value-background\"\n >\n {isLoaded && (\n <>\n <div className=\"dropdown-filter-column\">\n <div className=\"dropdown-filter-column-title\">\n {filterTitle}\n </div>\n </div>\n <div className=\"dropdown-filter-card-content\">\n <div className=\"dropdown-filter-value-input d-flex flex-column justify-content-center\">\n <select\n className=\"custom-select\"\n value={selectedOption}\n ref={this.dropdownRef}\n onChange={this.handleValueChange}\n onKeyPress={this.handleDropdownKeyPress}\n title=\"Select Value\"\n >\n {valueOptions}\n </select>\n </div>\n {settingsError && (\n <div className=\"error-message mt-3 text-center\">\n {settingsError}\n </div>\n )}\n </div>\n <div className=\"dropdown-filter-menu\">\n <Button\n kind=\"ghost\"\n className=\"m-2 px-2\"\n onClick={this.handleSettingsClick}\n icon={<FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />}\n tooltip=\"Dropdown Filter Settings\"\n />\n </div>\n </>\n )}\n </div>\n </CardFlip>\n );\n }\n}\n\nexport default DropdownFilter;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChangeEvent, Component, RefObject, MouseEvent, KeyboardEvent, ReactElement } from 'react';
|
|
2
|
-
import { Column } from '@deephaven/jsapi-
|
|
2
|
+
import type { Column } from '@deephaven/jsapi-types';
|
|
3
3
|
import memoizee from 'memoizee';
|
|
4
4
|
import './InputFilter.scss';
|
|
5
5
|
export type InputFilterColumn = Pick<Column, 'type' | 'name'>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputFilter.d.ts","sourceRoot":"","sources":["../../../src/controls/input-filter/InputFilter.tsx"],"names":[],"mappings":"AAIA,OAAc,EACZ,WAAW,EACX,SAAS,EACT,SAAS,EACT,UAAU,EACV,aAAa,EACb,YAAY,EACb,MAAM,OAAO,CAAC;AAIf,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"InputFilter.d.ts","sourceRoot":"","sources":["../../../src/controls/input-filter/InputFilter.tsx"],"names":[],"mappings":"AAIA,OAAc,EACZ,WAAW,EACX,SAAS,EACT,SAAS,EACT,UAAU,EACV,aAAa,EACb,YAAY,EACb,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,QAAQ,MAAM,UAAU,CAAC;AAGhC,OAAO,oBAAoB,CAAC;AAK5B,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAE9D,UAAU,gBAAgB;IACxB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,MAAM,EAAE;QACjB,MAAM,CAAC,EAAE,iBAAiB,CAAC;QAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,KAAK,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,cAAM,WAAY,SAAQ,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACrE,MAAM,CAAC,WAAW,SAAoB;IAEtC,MAAM,CAAC,YAAY;;;;MAIjB;gBAEU,KAAK,EAAE,gBAAgB;IAsBnC,kBAAkB,CAChB,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,gBAAgB,GAC1B,IAAI;IA0BP,oBAAoB,IAAI,IAAI;IAI5B,QAAQ,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAEtC,YAAY,aAAsB,iBAAiB,EAAE,SAAS,MAAM,2CAAlC,iBAAiB,EAAE,SAAS,MAAM,aAYjE;IAEH,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAU/D,mBAAmB,CAAC,KAAK,EAAE,aAAa,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAcjE,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAQ7D,oBAAoB,IAAI,IAAI;IAK5B,kBAAkB,IAAI,IAAI;IAK1B,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAM/D,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,IAAI;IAO9D,UAAU,IAAI,IAAI;IAOlB,WAAW,IAAI,IAAI;IAInB,cAAc,CAAC,EACb,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,YAAY,GACb,EAAE;QACD,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,GAAG,IAAI;IASR,UAAU,6CAIU;IAEpB,MAAM,IAAI,YAAY;CA6GvB;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputFilter.js","names":["React","Component","Button","CardFlip","FontAwesomeIcon","vsGear","memoizee","debounce","Log","log","module","UPDATE_DEBOUNCE","InputFilter","constructor","props","columns","index","name","type","length","shortType","substring","lastIndexOf","onChange","column","value","isValueShown","state","handleColumnChange","bind","handleInputKeyPress","handleValueChange","handleSettingsCancel","handleSettingsClick","handleSettingsSave","handleBackgroundClick","inputRef","createRef","selectedColumn","componentDidUpdate","prevProps","prevState","propColumn","setState","undefined","focusInput","sendUpdate","componentWillUnmount","flush","event","target","parseInt","debug2","key","preventDefault","stopPropagation","current","select","focus","clearFilter","setFilterState","update","render","inputLength","PLACEHOLDER","titleLabel","columnIndex","findIndex","item","getItemLabel","map","columnItem","width"],"sources":["../../../src/controls/input-filter/InputFilter.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convience method, not an actual a11y issue\n\nimport React, {\n ChangeEvent,\n Component,\n RefObject,\n MouseEvent,\n KeyboardEvent,\n ReactElement,\n} from 'react';\nimport { Button, CardFlip } from '@deephaven/components';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsGear } from '@deephaven/icons';\nimport { Column } from '@deephaven/jsapi-shim';\nimport memoizee from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport './InputFilter.scss';\n\nconst log = Log.module('InputFilter');\nconst UPDATE_DEBOUNCE = 150;\n\nexport type InputFilterColumn = Pick<Column, 'type' | 'name'>;\n\ninterface InputFilterProps {\n columns: InputFilterColumn[];\n column: InputFilterColumn;\n isValueShown: boolean;\n value: string;\n onChange: (change: {\n column?: InputFilterColumn;\n isValueShown?: boolean;\n value?: string;\n }) => void;\n}\n\nexport interface InputFilterState {\n column?: InputFilterColumn;\n selectedColumn?: InputFilterColumn;\n value?: string;\n isValueShown?: boolean;\n}\n\nclass InputFilter extends Component<InputFilterProps, InputFilterState> {\n static PLACEHOLDER = 'Enter value...';\n\n static defaultProps = {\n column: null,\n isValueShown: false,\n value: null,\n };\n\n constructor(props: InputFilterProps) {\n super(props);\n\n this.handleColumnChange = this.handleColumnChange.bind(this);\n this.handleInputKeyPress = this.handleInputKeyPress.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n\n this.inputRef = React.createRef();\n\n const { column, isValueShown, value } = props;\n this.state = {\n column,\n selectedColumn: column,\n value,\n isValueShown,\n };\n }\n\n componentDidUpdate(\n prevProps: InputFilterProps,\n prevState: InputFilterState\n ): void {\n const { column: propColumn } = this.props;\n const { column, value, isValueShown } = this.state;\n\n if (propColumn !== prevProps.column) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ column: propColumn, selectedColumn: propColumn });\n }\n\n if (\n isValueShown !== undefined &&\n isValueShown &&\n isValueShown !== prevState.isValueShown\n ) {\n this.focusInput();\n }\n\n if (\n column !== prevState.column ||\n value !== prevState.value ||\n isValueShown !== prevState.isValueShown\n ) {\n this.sendUpdate();\n }\n }\n\n componentWillUnmount(): void {\n this.sendUpdate.flush();\n }\n\n inputRef: RefObject<HTMLInputElement>;\n\n getItemLabel = memoizee((columns: InputFilterColumn[], index: number) => {\n const { name, type } = columns[index];\n\n if (\n (index > 0 && columns[index - 1].name === name) ||\n (index < columns.length - 1 && columns[index + 1].name === name)\n ) {\n const shortType = type.substring(type.lastIndexOf('.') + 1);\n return `${name} (${shortType})`;\n }\n\n return name;\n });\n\n handleColumnChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { columns } = this.props;\n const { value } = event.target;\n const selectedColumn = columns[parseInt(value, 10)];\n\n log.debug2('handleColumnChange', selectedColumn);\n\n this.setState({ selectedColumn, value: undefined });\n }\n\n handleInputKeyPress(event: KeyboardEvent<HTMLInputElement>): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n this.setState(\n ({ value }) => (value == null ? { value: '' } : null),\n () => {\n this.sendUpdate();\n this.sendUpdate.flush();\n }\n );\n }\n }\n\n handleValueChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n\n log.debug2('handleValueChange', value);\n\n this.setState({ value });\n }\n\n handleSettingsCancel(): void {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: true });\n }\n\n handleSettingsSave(): void {\n const { selectedColumn } = this.state;\n this.setState({ column: selectedColumn, isValueShown: true });\n }\n\n handleSettingsClick(event: MouseEvent<HTMLButtonElement>): void {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: false });\n event.stopPropagation();\n }\n\n handleBackgroundClick(event: MouseEvent<HTMLDivElement>): void {\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.inputRef.current) {\n this.focusInput();\n }\n }\n\n focusInput(): void {\n if (this.inputRef.current !== null) {\n this.inputRef.current.select();\n this.inputRef.current.focus();\n }\n }\n\n clearFilter(): void {\n this.setState({ value: '' });\n }\n\n setFilterState({\n name,\n type,\n value,\n isValueShown,\n }: {\n name?: string;\n type?: string;\n value?: string;\n isValueShown?: boolean;\n }): void {\n const column = name != null && type != null ? { name, type } : undefined;\n const update =\n isValueShown === undefined\n ? { column, value }\n : { column, value, isValueShown };\n this.setState(update);\n }\n\n sendUpdate = debounce(() => {\n const { onChange } = this.props;\n const { column, value, isValueShown } = this.state;\n onChange({ column, isValueShown, value });\n }, UPDATE_DEBOUNCE);\n\n render(): ReactElement {\n const { columns } = this.props;\n const { column, isValueShown, selectedColumn, value } = this.state;\n const inputLength =\n value == null || value.length === 0\n ? InputFilter.PLACEHOLDER.length\n : value.length;\n let titleLabel = null;\n if (column != null) {\n const columnIndex = columns.findIndex(\n item => item.name === column.name && item.type === column.type\n );\n titleLabel =\n columnIndex >= 0\n ? this.getItemLabel(columns, columnIndex)\n : column.name;\n }\n\n return (\n <CardFlip\n className=\"input-filter fill-parent-absolute\"\n isFlipped={isValueShown ?? false}\n >\n <div className=\"input-filter-settings-card\">\n <div className=\"input-filter-settings-content\">\n <div className=\"input-filter-settings-grid\">\n <label>Filter Column</label>\n <select\n value={columns.findIndex(\n item =>\n item.name === selectedColumn?.name &&\n item.type === selectedColumn?.type\n )}\n className=\"custom-select\"\n onChange={this.handleColumnChange}\n >\n {columns.map((columnItem, index) => (\n <option\n key={`${columnItem.name}/${columnItem.type}`}\n value={index}\n >\n {this.getItemLabel(columns, index)}\n </option>\n ))}\n {columns.length === 0 && (\n <option value=\"-1\" disabled>\n No Available Columns\n </option>\n )}\n </select>\n <div className=\"text-muted small\">\n Input filter control will apply its filter to all columns\n matching this name in this dashboard.\n </div>\n </div>\n <div className=\"input-filter-settings-buttons\">\n <Button\n kind=\"secondary\"\n onClick={this.handleSettingsCancel}\n disabled={column == null}\n >\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n className=\"ml-2\"\n onClick={this.handleSettingsSave}\n disabled={selectedColumn == null}\n >\n Save\n </Button>\n </div>\n </div>\n </div>\n\n <div\n className=\"input-filter-value-card\"\n onClick={this.handleBackgroundClick}\n >\n <div className=\"input-filter-column\">\n <div className=\"input-filter-column-title\">{titleLabel} Filter</div>\n </div>\n <div className=\"d-flex justify-content-center align-items-center h-100 w-100\">\n <div className=\"input-filter-value-input d-flex flex-column justify-content-center\">\n <input\n type=\"text\"\n ref={this.inputRef}\n placeholder={InputFilter.PLACEHOLDER}\n value={value ?? ''}\n onChange={this.handleValueChange}\n onKeyPress={this.handleInputKeyPress}\n style={{ width: `${inputLength + 3}ch` }}\n spellCheck=\"false\"\n />\n </div>\n </div>\n <div className=\"input-filter-menu\">\n <Button\n kind=\"ghost\"\n className=\"m-2 px-2\"\n onClick={this.handleSettingsClick}\n icon={<FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />}\n tooltip=\"Input Filter Settings\"\n />\n </div>\n </div>\n </CardFlip>\n );\n }\n}\n\nexport default InputFilter;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InputFilter.js","names":["React","Component","Button","CardFlip","FontAwesomeIcon","vsGear","memoizee","debounce","Log","log","module","UPDATE_DEBOUNCE","InputFilter","constructor","props","columns","index","name","type","length","shortType","substring","lastIndexOf","onChange","column","value","isValueShown","state","handleColumnChange","bind","handleInputKeyPress","handleValueChange","handleSettingsCancel","handleSettingsClick","handleSettingsSave","handleBackgroundClick","inputRef","createRef","selectedColumn","componentDidUpdate","prevProps","prevState","propColumn","setState","undefined","focusInput","sendUpdate","componentWillUnmount","flush","event","target","parseInt","debug2","key","preventDefault","stopPropagation","current","select","focus","clearFilter","setFilterState","update","render","inputLength","PLACEHOLDER","titleLabel","columnIndex","findIndex","item","getItemLabel","map","columnItem","width"],"sources":["../../../src/controls/input-filter/InputFilter.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n// background click is just a convience method, not an actual a11y issue\n\nimport React, {\n ChangeEvent,\n Component,\n RefObject,\n MouseEvent,\n KeyboardEvent,\n ReactElement,\n} from 'react';\nimport { Button, CardFlip } from '@deephaven/components';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsGear } from '@deephaven/icons';\nimport type { Column } from '@deephaven/jsapi-types';\nimport memoizee from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport './InputFilter.scss';\n\nconst log = Log.module('InputFilter');\nconst UPDATE_DEBOUNCE = 150;\n\nexport type InputFilterColumn = Pick<Column, 'type' | 'name'>;\n\ninterface InputFilterProps {\n columns: InputFilterColumn[];\n column: InputFilterColumn;\n isValueShown: boolean;\n value: string;\n onChange: (change: {\n column?: InputFilterColumn;\n isValueShown?: boolean;\n value?: string;\n }) => void;\n}\n\nexport interface InputFilterState {\n column?: InputFilterColumn;\n selectedColumn?: InputFilterColumn;\n value?: string;\n isValueShown?: boolean;\n}\n\nclass InputFilter extends Component<InputFilterProps, InputFilterState> {\n static PLACEHOLDER = 'Enter value...';\n\n static defaultProps = {\n column: null,\n isValueShown: false,\n value: null,\n };\n\n constructor(props: InputFilterProps) {\n super(props);\n\n this.handleColumnChange = this.handleColumnChange.bind(this);\n this.handleInputKeyPress = this.handleInputKeyPress.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n this.handleSettingsCancel = this.handleSettingsCancel.bind(this);\n this.handleSettingsClick = this.handleSettingsClick.bind(this);\n this.handleSettingsSave = this.handleSettingsSave.bind(this);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n\n this.inputRef = React.createRef();\n\n const { column, isValueShown, value } = props;\n this.state = {\n column,\n selectedColumn: column,\n value,\n isValueShown,\n };\n }\n\n componentDidUpdate(\n prevProps: InputFilterProps,\n prevState: InputFilterState\n ): void {\n const { column: propColumn } = this.props;\n const { column, value, isValueShown } = this.state;\n\n if (propColumn !== prevProps.column) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ column: propColumn, selectedColumn: propColumn });\n }\n\n if (\n isValueShown !== undefined &&\n isValueShown &&\n isValueShown !== prevState.isValueShown\n ) {\n this.focusInput();\n }\n\n if (\n column !== prevState.column ||\n value !== prevState.value ||\n isValueShown !== prevState.isValueShown\n ) {\n this.sendUpdate();\n }\n }\n\n componentWillUnmount(): void {\n this.sendUpdate.flush();\n }\n\n inputRef: RefObject<HTMLInputElement>;\n\n getItemLabel = memoizee((columns: InputFilterColumn[], index: number) => {\n const { name, type } = columns[index];\n\n if (\n (index > 0 && columns[index - 1].name === name) ||\n (index < columns.length - 1 && columns[index + 1].name === name)\n ) {\n const shortType = type.substring(type.lastIndexOf('.') + 1);\n return `${name} (${shortType})`;\n }\n\n return name;\n });\n\n handleColumnChange(event: ChangeEvent<HTMLSelectElement>): void {\n const { columns } = this.props;\n const { value } = event.target;\n const selectedColumn = columns[parseInt(value, 10)];\n\n log.debug2('handleColumnChange', selectedColumn);\n\n this.setState({ selectedColumn, value: undefined });\n }\n\n handleInputKeyPress(event: KeyboardEvent<HTMLInputElement>): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n this.setState(\n ({ value }) => (value == null ? { value: '' } : null),\n () => {\n this.sendUpdate();\n this.sendUpdate.flush();\n }\n );\n }\n }\n\n handleValueChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n\n log.debug2('handleValueChange', value);\n\n this.setState({ value });\n }\n\n handleSettingsCancel(): void {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: true });\n }\n\n handleSettingsSave(): void {\n const { selectedColumn } = this.state;\n this.setState({ column: selectedColumn, isValueShown: true });\n }\n\n handleSettingsClick(event: MouseEvent<HTMLButtonElement>): void {\n const { column } = this.state;\n this.setState({ selectedColumn: column, isValueShown: false });\n event.stopPropagation();\n }\n\n handleBackgroundClick(event: MouseEvent<HTMLDivElement>): void {\n // allow clicking anywhere in the background to select and focus the input\n if (event.target !== this.inputRef.current) {\n this.focusInput();\n }\n }\n\n focusInput(): void {\n if (this.inputRef.current !== null) {\n this.inputRef.current.select();\n this.inputRef.current.focus();\n }\n }\n\n clearFilter(): void {\n this.setState({ value: '' });\n }\n\n setFilterState({\n name,\n type,\n value,\n isValueShown,\n }: {\n name?: string;\n type?: string;\n value?: string;\n isValueShown?: boolean;\n }): void {\n const column = name != null && type != null ? { name, type } : undefined;\n const update =\n isValueShown === undefined\n ? { column, value }\n : { column, value, isValueShown };\n this.setState(update);\n }\n\n sendUpdate = debounce(() => {\n const { onChange } = this.props;\n const { column, value, isValueShown } = this.state;\n onChange({ column, isValueShown, value });\n }, UPDATE_DEBOUNCE);\n\n render(): ReactElement {\n const { columns } = this.props;\n const { column, isValueShown, selectedColumn, value } = this.state;\n const inputLength =\n value == null || value.length === 0\n ? InputFilter.PLACEHOLDER.length\n : value.length;\n let titleLabel = null;\n if (column != null) {\n const columnIndex = columns.findIndex(\n item => item.name === column.name && item.type === column.type\n );\n titleLabel =\n columnIndex >= 0\n ? this.getItemLabel(columns, columnIndex)\n : column.name;\n }\n\n return (\n <CardFlip\n className=\"input-filter fill-parent-absolute\"\n isFlipped={isValueShown ?? false}\n >\n <div className=\"input-filter-settings-card\">\n <div className=\"input-filter-settings-content\">\n <div className=\"input-filter-settings-grid\">\n <label>Filter Column</label>\n <select\n value={columns.findIndex(\n item =>\n item.name === selectedColumn?.name &&\n item.type === selectedColumn?.type\n )}\n className=\"custom-select\"\n onChange={this.handleColumnChange}\n >\n {columns.map((columnItem, index) => (\n <option\n key={`${columnItem.name}/${columnItem.type}`}\n value={index}\n >\n {this.getItemLabel(columns, index)}\n </option>\n ))}\n {columns.length === 0 && (\n <option value=\"-1\" disabled>\n No Available Columns\n </option>\n )}\n </select>\n <div className=\"text-muted small\">\n Input filter control will apply its filter to all columns\n matching this name in this dashboard.\n </div>\n </div>\n <div className=\"input-filter-settings-buttons\">\n <Button\n kind=\"secondary\"\n onClick={this.handleSettingsCancel}\n disabled={column == null}\n >\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n className=\"ml-2\"\n onClick={this.handleSettingsSave}\n disabled={selectedColumn == null}\n >\n Save\n </Button>\n </div>\n </div>\n </div>\n\n <div\n className=\"input-filter-value-card\"\n onClick={this.handleBackgroundClick}\n >\n <div className=\"input-filter-column\">\n <div className=\"input-filter-column-title\">{titleLabel} Filter</div>\n </div>\n <div className=\"d-flex justify-content-center align-items-center h-100 w-100\">\n <div className=\"input-filter-value-input d-flex flex-column justify-content-center\">\n <input\n type=\"text\"\n ref={this.inputRef}\n placeholder={InputFilter.PLACEHOLDER}\n value={value ?? ''}\n onChange={this.handleValueChange}\n onKeyPress={this.handleInputKeyPress}\n style={{ width: `${inputLength + 3}ch` }}\n spellCheck=\"false\"\n />\n </div>\n </div>\n <div className=\"input-filter-menu\">\n <Button\n kind=\"ghost\"\n className=\"m-2 px-2\"\n onClick={this.handleSettingsClick}\n icon={<FontAwesomeIcon icon={vsGear} transform=\"grow-4\" />}\n tooltip=\"Input Filter Settings\"\n />\n </div>\n </div>\n </CardFlip>\n );\n }\n}\n\nexport default InputFilter;\n"],"mappings":"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"}
|
package/dist/linker/Linker.d.ts
CHANGED
|
@@ -3,9 +3,11 @@ import { ConnectedProps } from 'react-redux';
|
|
|
3
3
|
import { PanelComponent, PanelManager } from '@deephaven/dashboard';
|
|
4
4
|
import type GoldenLayout from '@deephaven/golden-layout';
|
|
5
5
|
import { RowDataMap } from '@deephaven/jsapi-utils';
|
|
6
|
+
import type { dh as DhType } from '@deephaven/jsapi-types';
|
|
6
7
|
import { Link, LinkColumn, LinkFilterMap, LinkType } from './LinkerUtils';
|
|
7
8
|
interface StateProps {
|
|
8
9
|
activeTool: string;
|
|
10
|
+
dh: DhType;
|
|
9
11
|
isolatedLinkerPanelId?: string;
|
|
10
12
|
links: Link[];
|
|
11
13
|
timeZone: string;
|
|
@@ -94,6 +96,6 @@ declare const ConnectedLinker: import("react-redux").ConnectedComponent<typeof L
|
|
|
94
96
|
deleteDashboardLinks: (id: string, linkIds: string[]) => unknown;
|
|
95
97
|
setDashboardIsolatedLinkerPanelId: (id: string, isolatedLinkerPanelId: string | string[] | undefined) => unknown;
|
|
96
98
|
setDashboardColumnSelectionValidator: (id: string, columnSelectionValidator: import("./ColumnSelectionValidator").ColumnSelectionValidator | undefined) => unknown;
|
|
97
|
-
}, "links" | "activeTool" | "setActiveTool" | "setDashboardIsolatedLinkerPanelId" | "timeZone" | "isolatedLinkerPanelId" | "setDashboardLinks" | "addDashboardLinks" | "deleteDashboardLinks" | "setDashboardColumnSelectionValidator"> & OwnProps>;
|
|
99
|
+
}, "dh" | "links" | "activeTool" | "setActiveTool" | "setDashboardIsolatedLinkerPanelId" | "timeZone" | "isolatedLinkerPanelId" | "setDashboardLinks" | "addDashboardLinks" | "deleteDashboardLinks" | "setDashboardColumnSelectionValidator"> & OwnProps>;
|
|
98
100
|
export default ConnectedLinker;
|
|
99
101
|
//# sourceMappingURL=Linker.d.ts.map
|