@deephaven/dashboard-core-plugins 0.75.1-beta.0 → 0.75.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,7 +4,7 @@ function _toPrimitive(input, hint) { if (typeof input !== "object" || input ===
4
4
  import React, { Component } from 'react';
5
5
  import { connect } from 'react-redux';
6
6
  import debounce from 'lodash.debounce';
7
- import deepEqual from 'deep-equal';
7
+ import deepEqual from 'fast-deep-equal';
8
8
  import memoize from 'memoizee';
9
9
  import { LayoutUtils } from '@deephaven/dashboard';
10
10
  import { DateTimeColumnFormatter, Formatter, FormatterUtils, TableUtils } from '@deephaven/jsapi-utils';
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownFilterPanel.js","names":["React","Component","connect","debounce","deepEqual","memoize","LayoutUtils","DateTimeColumnFormatter","Formatter","FormatterUtils","TableUtils","Log","getActiveTool","getApi","getSettings","Pending","PromiseUtils","DropdownFilter","InputFilterEvent","getColumnsForDashboard","getColumnSelectionValidatorForDashboard","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","getTableMapForDashboard","ToolType","WidgetPanel","jsx","_jsx","log","module","DROPDOWN_FILTER_DEBOUNCE","mapStateToProps","state","ownProps","localDashboardId","panelId","getIdFromPanel","props","panelTableMap","dashboardLinks","activeTool","isolatedLinkerPanelId","isLinkerActive","LINKER","undefined","disableLinking","columns","columnSelectionValidator","dh","settings","connector","forwardRef","DropdownFilterPanel","constructor","_defineProperty","rawValues","_ref","formatter","type","name","isDateType","map","value","dateTimeFormatter","format","getFormattedString","panel","debug","filter","link","_link$end","end","links","source","length","start","error","_panelTableMap$get","get","table","_table$columns$find","find","_ref2","columnName","columnType","handleChange","bind","handleClearAllFilters","handleDisconnect","handleReconnect","handleColumnSelected","handleSourceFilterChange","handleSourceSortChange","handleSourceSizeChange","handleSourceMouseEnter","handleSourceMouseLeave","handleValuesTableUpdate","dropdownFilterRef","createRef","panelContainer","pending","panelState","columnFormats","getColumnFormats","showTimeZone","showTSeparator","defaultDateTimeFormatString","isValueShown","timestamp","column","valuesTable","valuesColumn","sourceSize","values","wasFlipped","skipUpdate","isDisconnected","isLoading","isLoaded","componentDidMount","updateValuesTable","sourceTable","getSourceTable","startListeningToSource","sendUpdate","componentDidUpdate","prevProps","prevState","getSource","prevSource","prevSourceTable","updateFormatterSettings","close","stopListeningToSource","componentWillUnmount","cancel","cleanup","getCoordinateForColumn","_element$getBoundingC","current","element","querySelector","concat","SOURCE_BUTTON_CLASS_NAME","rect","getBoundingClientRect","width","height","x","left","y","bottom","getSettingsErrorMessage","MAX_TABLE_SIZE","getPanelErrorMessage","panelLinks","getCachedPanelLinks","getCachedSource","getCachedSourceTable","getValuesColumn","getCachedSourceColumn","addEventListener","Table","EVENT_FILTERCHANGED","EVENT_SORTCHANGED","EVENT_SIZECHANGED","EVENT_DISCONNECT","EVENT_RECONNECT","removeEventListener","_ref3","Date","now","setState","_ref4","_ref5","_timestamp","prevTimestamp","isFlip","Error","applySourceFilters","applySourceSorts","_ref6","detail","glEventHub","emit","COLUMN_SELECTED","SOURCE_COLUMN","_this$dropdownFilterR","_this$dropdownFilterR2","clearFilter","setPanelState","_this$dropdownFilterR3","_this$dropdownFilterR4","arguments","setFilterState","_this$getSource","sourcePanelId","excludePanelIds","FILTERS_CHANGED","size","add","copy","resolved","then","updateViewportListener","catch","isCanceled","sort","sorts","applySort","setViewport","filters","applyFilter","EVENT_UPDATED","_ref7","rows","row","render","glContainer","settingsErrorMessage","panelErrorMessage","formattedValues","getCachedValues","errorMessage","className","componentPanel","onClearAllFilters","widgetName","widgetType","children","ref","settingsError","onChange","onColumnSelected","onSourceMouseEnter","onSourceMouseLeave","Object","freeze","ConnectedDropdownFilterPanel"],"sources":["../../src/panels/DropdownFilterPanel.tsx"],"sourcesContent":["import React, { Component, RefObject } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport deepEqual from 'deep-equal';\nimport memoize from 'memoizee';\nimport { DashboardPanelProps, LayoutUtils } from '@deephaven/dashboard';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport {\n DateTimeColumnFormatter,\n Formatter,\n FormatterUtils,\n FormattingRule,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getApi,\n getSettings,\n RootState,\n} from '@deephaven/redux';\nimport { Pending, PromiseUtils } from '@deephaven/utils';\nimport DropdownFilter, {\n DropdownFilterColumn,\n} from '../controls/dropdown-filter/DropdownFilter';\nimport { InputFilterEvent } from '../events';\nimport {\n getColumnsForDashboard,\n getColumnSelectionValidatorForDashboard,\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n getTableMapForDashboard,\n} from '../redux';\nimport './DropdownFilterPanel.scss';\nimport ToolType from '../linker/ToolType';\nimport WidgetPanel from './WidgetPanel';\nimport type { Link, LinkPoint } from '../linker/LinkerUtils';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\nimport { PanelState as InputFilterPanelState } from './InputFilterPanel';\n\nconst log = Log.module('DropdownFilterPanel');\n\nconst DROPDOWN_FILTER_DEBOUNCE = 250;\n\ninterface PanelState {\n name?: string;\n type?: string;\n value?: string;\n isValueShown?: boolean;\n timestamp?: number;\n}\n\ntype PanelTableMap = Map<string | string[], DhType.Table>;\n\ntype StateProps = {\n columns: DhType.Column[];\n columnSelectionValidator?: ColumnSelectionValidator;\n dashboardLinks: Link[];\n dh: typeof DhType;\n disableLinking: boolean;\n isLinkerActive: boolean;\n panelTableMap: PanelTableMap;\n panelState?: PanelState;\n settings: { formatter: FormattingRule[] };\n};\n\ntype OwnProps = DashboardPanelProps;\n\nconst mapStateToProps = (state: RootState, ownProps: OwnProps): StateProps => {\n const { localDashboardId } = ownProps;\n const panelId = LayoutUtils.getIdFromPanel({ props: ownProps });\n const panelTableMap = getTableMapForDashboard(state, localDashboardId);\n const dashboardLinks = getLinksForDashboard(state, localDashboardId);\n const activeTool = getActiveTool(state);\n const isolatedLinkerPanelId = getIsolatedLinkerPanelIdForDashboard(\n state,\n localDashboardId\n );\n const isLinkerActive =\n activeTool === ToolType.LINKER &&\n (isolatedLinkerPanelId === undefined || isolatedLinkerPanelId === panelId);\n // Disable linking if linker is in isolated mode for a different panel\n const disableLinking =\n activeTool === ToolType.LINKER &&\n isolatedLinkerPanelId !== undefined &&\n isolatedLinkerPanelId !== panelId;\n\n return {\n columns: getColumnsForDashboard(state, localDashboardId),\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(\n state,\n localDashboardId\n ),\n dh: getApi(state),\n isLinkerActive,\n disableLinking,\n settings: getSettings(state),\n panelTableMap,\n dashboardLinks,\n };\n};\n\nconst connector = connect(mapStateToProps, null, null, { forwardRef: true });\n\nexport type DropdownFilterPanelProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\ninterface DropdownFilterPanelState {\n column?: DropdownFilterColumn;\n formatter: Formatter;\n valuesTable?: DhType.Table;\n valuesColumn?: DhType.Column;\n sourceSize: number;\n value: string;\n timestamp?: number;\n values: unknown[];\n isValueShown: boolean;\n wasFlipped: boolean;\n skipUpdate: boolean;\n\n panelState?: PanelState; // Dehydrated panel state that can load this panel\n\n isDisconnected: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n error: unknown | null;\n}\n\nexport class DropdownFilterPanel extends Component<\n DropdownFilterPanelProps,\n DropdownFilterPanelState\n> {\n static displayName = 'DropdownFilterPanel';\n\n static COMPONENT = 'DropdownFilterPanel';\n\n static MAX_TABLE_SIZE = 256;\n\n static SOURCE_COLUMN = Object.freeze({\n name: 'FilterSource',\n type: null,\n });\n\n constructor(props: DropdownFilterPanelProps) {\n super(props);\n\n this.handleChange = debounce(\n this.handleChange.bind(this),\n DROPDOWN_FILTER_DEBOUNCE\n );\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleSourceFilterChange = this.handleSourceFilterChange.bind(this);\n this.handleSourceSortChange = this.handleSourceSortChange.bind(this);\n this.handleSourceSizeChange = this.handleSourceSizeChange.bind(this);\n this.handleSourceMouseEnter = this.handleSourceMouseEnter.bind(this);\n this.handleSourceMouseLeave = this.handleSourceMouseLeave.bind(this);\n this.handleValuesTableUpdate = this.handleValuesTableUpdate.bind(this);\n\n this.dropdownFilterRef = React.createRef();\n this.panelContainer = React.createRef();\n this.pending = new Pending();\n\n const { dh, panelState, settings } = props;\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n // Filter dropdown needs to show and send full timestamp format with nanoseconds\n this.dateTimeFormatter = new DateTimeColumnFormatter(dh, {\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: `yyyy-MM-dd HH:mm:ss.SSSSSSSSS`,\n });\n const {\n value = '',\n isValueShown = false,\n name,\n type,\n timestamp,\n } = panelState ?? {};\n const column = name != null && type != null ? { name, type } : undefined;\n this.state = {\n column,\n formatter: new Formatter(dh, this.columnFormats),\n valuesTable: undefined,\n valuesColumn: undefined,\n sourceSize: 0,\n value,\n timestamp,\n values: [],\n isValueShown,\n wasFlipped: false,\n skipUpdate: false,\n\n // eslint-disable-next-line react/no-unused-state\n panelState, // Dehydrated panel state that can load this panel\n\n isDisconnected: false,\n isLoading: false,\n isLoaded: false,\n error: null,\n };\n }\n\n componentDidMount(): void {\n this.updateValuesTable();\n const { dashboardLinks, panelTableMap } = this.props;\n const { column, value, timestamp } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n if (column != null) {\n const { name, type } = column;\n this.sendUpdate(name, type, value, timestamp);\n }\n }\n\n componentDidUpdate(\n prevProps: DropdownFilterPanelProps,\n prevState: DropdownFilterPanelState\n ): void {\n const { dashboardLinks, panelTableMap, settings } = this.props;\n const { valuesTable } = this.state;\n const source = this.getSource(dashboardLinks);\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n\n const prevSource = this.getSource(prevProps.dashboardLinks);\n const prevSourceTable = this.getSourceTable(\n prevProps.panelTableMap,\n prevProps.dashboardLinks\n );\n\n if (settings !== prevProps.settings && settings !== undefined) {\n this.updateFormatterSettings(settings);\n }\n\n if (\n valuesTable !== prevState.valuesTable &&\n prevState.valuesTable != null\n ) {\n log.debug('Table in state modified, closing the old table.');\n prevState.valuesTable.close();\n }\n\n // Checking source change in addition to table change\n // in case a different column is selected in the same table\n if (sourceTable !== prevSourceTable || source !== prevSource) {\n this.updateValuesTable();\n }\n\n if (sourceTable !== prevSourceTable) {\n if (prevSourceTable !== null) {\n this.stopListeningToSource(prevSourceTable);\n }\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n }\n }\n\n componentWillUnmount(): void {\n const { dashboardLinks, panelTableMap } = this.props;\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n this.pending.cancel();\n if (sourceTable !== null) {\n this.stopListeningToSource(sourceTable);\n }\n if (this.cleanup) {\n this.cleanup();\n }\n if (valuesTable != null) {\n valuesTable.close();\n }\n }\n\n dateTimeFormatter: DateTimeColumnFormatter;\n\n dropdownFilterRef: RefObject<DropdownFilter>;\n\n panelContainer: RefObject<HTMLDivElement>;\n\n pending: Pending;\n\n cleanup?: () => void;\n\n columnFormats?: FormattingRule[];\n\n getCachedValues = memoize(\n (\n rawValues: unknown[],\n { type, name }: DropdownFilterColumn,\n formatter: Formatter\n ) => {\n if (type !== undefined && TableUtils.isDateType(type)) {\n return rawValues.map(value =>\n this.dateTimeFormatter.format(value as number)\n );\n }\n return rawValues.map(value =>\n // Skip formatting for nulls so they don't get converted to ''\n value != null && type != null\n ? formatter.getFormattedString(value, type, name)\n : null\n );\n }\n );\n\n getCoordinateForColumn(): [number, number] | null {\n if (this.panelContainer.current == null) {\n return null;\n }\n\n const element = this.panelContainer.current.querySelector(\n `.${DropdownFilter.SOURCE_BUTTON_CLASS_NAME}`\n );\n const rect = element?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n const x = rect.left + rect.width / 2;\n const y = rect.bottom;\n return [x, y];\n }\n\n getSettingsErrorMessage(): string | undefined {\n const { sourceSize } = this.state;\n if (sourceSize > DropdownFilterPanel.MAX_TABLE_SIZE) {\n return `Table too large, must have fewer than ${DropdownFilterPanel.MAX_TABLE_SIZE} options.`;\n }\n return undefined;\n }\n\n getPanelErrorMessage(): string | undefined {\n const { error } = this.state;\n return error != null ? `${error}` : undefined;\n }\n\n getCachedPanelLinks = memoize(\n (dashboardLinks: Link[], panel: DropdownFilterPanel) => {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n log.debug('getCachedPanelLinks', dashboardLinks, panelId);\n return dashboardLinks.filter(link => link.end?.panelId === panelId);\n }\n );\n\n getCachedSource = memoize((links: Link[]) => {\n log.debug('getCachedSource', links);\n let source: LinkPoint | undefined;\n if (links.length > 0) {\n const [link] = links;\n source = link.start;\n if (links.length > 1) {\n log.error('Filter has more that one link', links);\n }\n }\n return source;\n });\n\n getCachedSourceTable = memoize(\n (\n panelTableMap: Map<string | string[], DhType.Table>,\n source: LinkPoint | undefined\n ) => {\n log.debug('getCachedSourceTable', panelTableMap, source);\n if (source == null) {\n return null;\n }\n const { panelId } = source;\n return panelTableMap.get(panelId) ?? null;\n }\n );\n\n getCachedSourceColumn = memoize(\n (table: DhType.Table, source: LinkPoint | undefined) => {\n log.debug('getCachedSourceColumn', table, source);\n if (table == null || source == null) {\n return null;\n }\n return (\n table.columns.find(\n ({ name, type }) =>\n name === source.columnName && type === source.columnType\n ) ?? null\n );\n }\n );\n\n getSource(links: Link[]): LinkPoint | undefined {\n const panelLinks = this.getCachedPanelLinks(links, this);\n return this.getCachedSource(panelLinks);\n }\n\n getSourceTable(\n panelTableMap: PanelTableMap,\n links: Link[]\n ): DhType.Table | null {\n const source = this.getSource(links);\n return this.getCachedSourceTable(panelTableMap, source);\n }\n\n getValuesColumn(\n valuesTable: DhType.Table,\n links: Link[]\n ): DhType.Column | null {\n const source = this.getSource(links);\n return this.getCachedSourceColumn(valuesTable, source);\n }\n\n startListeningToSource(sourceTable: DhType.Table): void {\n const { dh } = this.props;\n log.debug('startListeningToSource');\n sourceTable.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_SIZECHANGED,\n this.handleSourceSizeChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleDisconnect\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleReconnect\n );\n }\n\n stopListeningToSource(sourceTable: DhType.Table): void {\n const { dh } = this.props;\n log.debug('stopListeningToSource');\n sourceTable.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_SIZECHANGED,\n this.handleSourceSizeChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleDisconnect\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleReconnect\n );\n }\n\n handleChange({\n column,\n isValueShown = false,\n value,\n }: {\n column: Partial<DhType.Column> | null;\n isValueShown?: boolean | undefined;\n value?: string | undefined;\n }): void {\n const { name = undefined, type = undefined } = column ?? {};\n let sendUpdate = true;\n let timestamp: number | undefined = Date.now();\n this.setState(\n ({ panelState, timestamp: prevTimestamp, wasFlipped, skipUpdate }) => {\n // If the user had a value set, and they flip the card over and flip it back without changing any settings, ignore it\n const isFlip =\n panelState != null &&\n isValueShown !== panelState.isValueShown &&\n name === panelState.name &&\n type === panelState.type &&\n value === panelState.value;\n sendUpdate =\n (!skipUpdate && isValueShown && (!isFlip || !wasFlipped)) ?? false;\n\n if (!sendUpdate) {\n timestamp = prevTimestamp;\n }\n\n return {\n panelState: {\n isValueShown,\n name,\n type,\n value,\n timestamp: timestamp ?? undefined,\n },\n timestamp,\n wasFlipped: isFlip,\n skipUpdate: false,\n };\n },\n () => {\n if (sendUpdate) {\n this.sendUpdate(name ?? null, type, value, timestamp);\n }\n }\n );\n }\n\n handleDisconnect(): void {\n this.setState({\n error: new Error('Table disconnected'),\n isDisconnected: true,\n isLoading: false,\n });\n }\n\n handleReconnect(): void {\n this.setState({ isDisconnected: false, error: null });\n }\n\n handleSourceFilterChange(): void {\n this.applySourceFilters();\n }\n\n handleSourceSortChange(): void {\n this.applySourceSorts();\n }\n\n handleSourceSizeChange({ detail }: { detail: number }): void {\n this.setState({ sourceSize: detail });\n }\n\n handleColumnSelected(): void {\n log.debug('handleColumnSelected');\n const { glEventHub } = this.props;\n glEventHub.emit(\n InputFilterEvent.COLUMN_SELECTED,\n this,\n DropdownFilterPanel.SOURCE_COLUMN\n );\n }\n\n handleClearAllFilters(): void {\n this.dropdownFilterRef?.current?.clearFilter();\n }\n\n /**\n * Set the filter value, card side, selected column\n * @param state Filter state to set\n * @param sendUpdate Emit filters changed event if true\n */\n setPanelState(state: InputFilterPanelState, sendUpdate = false): void {\n const { dashboardLinks } = this.props;\n if (this.getSource(dashboardLinks) == null) {\n log.debug('Ignore state update for unlinked filter', state);\n return;\n }\n // Set the skipUpdate flag so the next onChange handler call doesn't emit the FILTERS_CHANGED event\n this.setState({ skipUpdate: !sendUpdate });\n\n // Changing the inputFilter state via props doesn't quite work because of the delays on manual input changes\n // Setting the ref state directly triggers the onChange handler and updates the panelState\n this.dropdownFilterRef?.current?.setFilterState(state);\n }\n\n sendUpdate(\n name: string | null,\n type: string | undefined,\n value: string | undefined,\n timestamp?: number\n ): void {\n const { dashboardLinks, glEventHub } = this.props;\n const sourcePanelId = this.getSource(dashboardLinks)?.panelId;\n const excludePanelIds = sourcePanelId === null ? [] : [sourcePanelId];\n log.debug('sendUpdate', {\n name,\n type,\n value,\n timestamp,\n excludePanelIds,\n });\n\n glEventHub.emit(InputFilterEvent.FILTERS_CHANGED, this, {\n name,\n type,\n value: value != null ? value : '=null',\n timestamp,\n excludePanelIds,\n });\n }\n\n updateValuesTable(): void {\n const { dashboardLinks, panelTableMap } = this.props;\n const source = this.getSource(dashboardLinks);\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('updateValuesTable', source, sourceTable);\n\n this.setState({\n values: [],\n valuesTable: undefined,\n error: null,\n });\n\n if (source == null) {\n log.debug('Filter unlinked.');\n this.setState({\n isLoading: false,\n isLoaded: true,\n isValueShown: false,\n sourceSize: 0,\n });\n return;\n }\n\n this.setState({ isLoading: true });\n\n if (sourceTable == null) {\n return;\n }\n\n this.setState({ isLoaded: false, sourceSize: sourceTable.size });\n\n this.pending\n .add(sourceTable.copy(), resolved => resolved.close())\n .then(valuesTable => {\n // Loading/loaded will be set when values array is actually populated\n this.updateViewportListener(valuesTable);\n this.setState({ valuesTable });\n })\n .catch((error: unknown) => {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n this.setState({ isLoading: false, error });\n });\n }\n\n applySourceSorts(): void {\n const { dashboardLinks, panelTableMap } = this.props;\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('applySourceSorts', sourceTable?.sort);\n if (valuesTable == null || sourceTable == null) {\n log.debug('Table not initialized');\n return;\n }\n const sorts = [...sourceTable.sort];\n valuesTable.applySort(sorts);\n this.setViewport(valuesTable);\n }\n\n applySourceFilters(): void {\n const { dashboardLinks, panelTableMap } = this.props;\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('applySourceFilters', sourceTable?.filter);\n if (valuesTable == null || sourceTable == null) {\n log.debug('Table not initialized');\n return;\n }\n const filters = [...sourceTable.filter];\n valuesTable.applyFilter(filters);\n this.setViewport(valuesTable);\n }\n\n updateViewportListener(valuesTable: DhType.Table): void {\n const { dh } = this.props;\n log.debug('updateViewportListener', valuesTable?.size);\n\n if (this.cleanup) {\n this.cleanup();\n }\n\n if (valuesTable == null) {\n this.cleanup = undefined;\n return;\n }\n\n this.cleanup = valuesTable.addEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleValuesTableUpdate\n );\n\n this.setViewport(valuesTable);\n }\n\n setViewport(valuesTable: DhType.Table): void {\n const { dashboardLinks } = this.props;\n const valuesColumn = this.getValuesColumn(valuesTable, dashboardLinks);\n if (!valuesColumn) {\n log.error('values column is null');\n return;\n }\n valuesTable.setViewport(0, DropdownFilterPanel.MAX_TABLE_SIZE - 1, [\n valuesColumn,\n ]);\n }\n\n updateFormatterSettings(settings: {\n formatter?: FormattingRule[] | undefined;\n }): void {\n const { dh } = this.props;\n const columnFormats = FormatterUtils.getColumnFormats(settings);\n if (!deepEqual(this.columnFormats, columnFormats)) {\n this.columnFormats = columnFormats;\n this.setState({ formatter: new Formatter(dh, columnFormats) });\n }\n }\n\n handleValuesTableUpdate({\n detail,\n }: {\n detail: { rows: DhType.Row[] };\n }): void {\n const { rows } = detail;\n const { dashboardLinks } = this.props;\n const { valuesTable } = this.state;\n if (!valuesTable) {\n log.error('valuesTable is null');\n return;\n }\n const valuesColumn = this.getValuesColumn(valuesTable, dashboardLinks);\n if (!valuesColumn) {\n log.error('Values column not found');\n return;\n }\n const values = rows.map(row => row.get(valuesColumn));\n this.setState({ values, isLoading: false, isLoaded: true, valuesColumn });\n }\n\n handleSourceMouseEnter(): void {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, DropdownFilterPanel.SOURCE_COLUMN);\n }\n\n handleSourceMouseLeave(): void {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined);\n }\n\n render(): React.ReactElement {\n const {\n columns,\n dashboardLinks,\n disableLinking,\n glContainer,\n glEventHub,\n isLinkerActive,\n } = this.props;\n const {\n column,\n formatter,\n isDisconnected,\n isValueShown,\n value,\n values,\n valuesColumn,\n isLoading,\n isLoaded,\n } = this.state;\n const source = this.getSource(dashboardLinks);\n const settingsErrorMessage = this.getSettingsErrorMessage();\n const panelErrorMessage = this.getPanelErrorMessage();\n const formattedValues =\n isLoaded && valuesColumn != null\n ? this.getCachedValues(values, valuesColumn, formatter)\n : [];\n\n return (\n <WidgetPanel\n errorMessage={panelErrorMessage}\n isLoading={isLoading}\n isLoaded={isLoaded}\n isDisconnected={isDisconnected}\n className=\"iris-dropdown-filter-panel\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={this.handleClearAllFilters}\n widgetName=\"Dropdown Filter\"\n widgetType=\"DropdownFilter\"\n >\n <div\n ref={this.panelContainer}\n className=\"dropdown-filter-container h-100 w-100 container\"\n >\n <DropdownFilter\n ref={this.dropdownFilterRef}\n column={column}\n columns={columns}\n isValueShown={isValueShown}\n isLinkerActive={isLinkerActive}\n disableLinking={disableLinking}\n isLoaded={isLoaded}\n settingsError={settingsErrorMessage}\n source={source}\n value={value}\n values={formattedValues}\n onChange={this.handleChange}\n onColumnSelected={this.handleColumnSelected}\n onSourceMouseEnter={this.handleSourceMouseEnter}\n onSourceMouseLeave={this.handleSourceMouseLeave}\n />\n </div>\n </WidgetPanel>\n );\n }\n}\n\nconst ConnectedDropdownFilterPanel = connector(DropdownFilterPanel);\n\nexport default ConnectedDropdownFilterPanel;\n"],"mappings":"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"}
1
+ {"version":3,"file":"DropdownFilterPanel.js","names":["React","Component","connect","debounce","deepEqual","memoize","LayoutUtils","DateTimeColumnFormatter","Formatter","FormatterUtils","TableUtils","Log","getActiveTool","getApi","getSettings","Pending","PromiseUtils","DropdownFilter","InputFilterEvent","getColumnsForDashboard","getColumnSelectionValidatorForDashboard","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","getTableMapForDashboard","ToolType","WidgetPanel","jsx","_jsx","log","module","DROPDOWN_FILTER_DEBOUNCE","mapStateToProps","state","ownProps","localDashboardId","panelId","getIdFromPanel","props","panelTableMap","dashboardLinks","activeTool","isolatedLinkerPanelId","isLinkerActive","LINKER","undefined","disableLinking","columns","columnSelectionValidator","dh","settings","connector","forwardRef","DropdownFilterPanel","constructor","_defineProperty","rawValues","_ref","formatter","type","name","isDateType","map","value","dateTimeFormatter","format","getFormattedString","panel","debug","filter","link","_link$end","end","links","source","length","start","error","_panelTableMap$get","get","table","_table$columns$find","find","_ref2","columnName","columnType","handleChange","bind","handleClearAllFilters","handleDisconnect","handleReconnect","handleColumnSelected","handleSourceFilterChange","handleSourceSortChange","handleSourceSizeChange","handleSourceMouseEnter","handleSourceMouseLeave","handleValuesTableUpdate","dropdownFilterRef","createRef","panelContainer","pending","panelState","columnFormats","getColumnFormats","showTimeZone","showTSeparator","defaultDateTimeFormatString","isValueShown","timestamp","column","valuesTable","valuesColumn","sourceSize","values","wasFlipped","skipUpdate","isDisconnected","isLoading","isLoaded","componentDidMount","updateValuesTable","sourceTable","getSourceTable","startListeningToSource","sendUpdate","componentDidUpdate","prevProps","prevState","getSource","prevSource","prevSourceTable","updateFormatterSettings","close","stopListeningToSource","componentWillUnmount","cancel","cleanup","getCoordinateForColumn","_element$getBoundingC","current","element","querySelector","concat","SOURCE_BUTTON_CLASS_NAME","rect","getBoundingClientRect","width","height","x","left","y","bottom","getSettingsErrorMessage","MAX_TABLE_SIZE","getPanelErrorMessage","panelLinks","getCachedPanelLinks","getCachedSource","getCachedSourceTable","getValuesColumn","getCachedSourceColumn","addEventListener","Table","EVENT_FILTERCHANGED","EVENT_SORTCHANGED","EVENT_SIZECHANGED","EVENT_DISCONNECT","EVENT_RECONNECT","removeEventListener","_ref3","Date","now","setState","_ref4","_ref5","_timestamp","prevTimestamp","isFlip","Error","applySourceFilters","applySourceSorts","_ref6","detail","glEventHub","emit","COLUMN_SELECTED","SOURCE_COLUMN","_this$dropdownFilterR","_this$dropdownFilterR2","clearFilter","setPanelState","_this$dropdownFilterR3","_this$dropdownFilterR4","arguments","setFilterState","_this$getSource","sourcePanelId","excludePanelIds","FILTERS_CHANGED","size","add","copy","resolved","then","updateViewportListener","catch","isCanceled","sort","sorts","applySort","setViewport","filters","applyFilter","EVENT_UPDATED","_ref7","rows","row","render","glContainer","settingsErrorMessage","panelErrorMessage","formattedValues","getCachedValues","errorMessage","className","componentPanel","onClearAllFilters","widgetName","widgetType","children","ref","settingsError","onChange","onColumnSelected","onSourceMouseEnter","onSourceMouseLeave","Object","freeze","ConnectedDropdownFilterPanel"],"sources":["../../src/panels/DropdownFilterPanel.tsx"],"sourcesContent":["import React, { Component, RefObject } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport debounce from 'lodash.debounce';\nimport deepEqual from 'fast-deep-equal';\nimport memoize from 'memoizee';\nimport { DashboardPanelProps, LayoutUtils } from '@deephaven/dashboard';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport {\n DateTimeColumnFormatter,\n Formatter,\n FormatterUtils,\n FormattingRule,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getApi,\n getSettings,\n RootState,\n} from '@deephaven/redux';\nimport { Pending, PromiseUtils } from '@deephaven/utils';\nimport DropdownFilter, {\n DropdownFilterColumn,\n} from '../controls/dropdown-filter/DropdownFilter';\nimport { InputFilterEvent } from '../events';\nimport {\n getColumnsForDashboard,\n getColumnSelectionValidatorForDashboard,\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n getTableMapForDashboard,\n} from '../redux';\nimport './DropdownFilterPanel.scss';\nimport ToolType from '../linker/ToolType';\nimport WidgetPanel from './WidgetPanel';\nimport type { Link, LinkPoint } from '../linker/LinkerUtils';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\nimport { PanelState as InputFilterPanelState } from './InputFilterPanel';\n\nconst log = Log.module('DropdownFilterPanel');\n\nconst DROPDOWN_FILTER_DEBOUNCE = 250;\n\ninterface PanelState {\n name?: string;\n type?: string;\n value?: string;\n isValueShown?: boolean;\n timestamp?: number;\n}\n\ntype PanelTableMap = Map<string | string[], DhType.Table>;\n\ntype StateProps = {\n columns: DhType.Column[];\n columnSelectionValidator?: ColumnSelectionValidator;\n dashboardLinks: Link[];\n dh: typeof DhType;\n disableLinking: boolean;\n isLinkerActive: boolean;\n panelTableMap: PanelTableMap;\n panelState?: PanelState;\n settings: { formatter: FormattingRule[] };\n};\n\ntype OwnProps = DashboardPanelProps;\n\nconst mapStateToProps = (state: RootState, ownProps: OwnProps): StateProps => {\n const { localDashboardId } = ownProps;\n const panelId = LayoutUtils.getIdFromPanel({ props: ownProps });\n const panelTableMap = getTableMapForDashboard(state, localDashboardId);\n const dashboardLinks = getLinksForDashboard(state, localDashboardId);\n const activeTool = getActiveTool(state);\n const isolatedLinkerPanelId = getIsolatedLinkerPanelIdForDashboard(\n state,\n localDashboardId\n );\n const isLinkerActive =\n activeTool === ToolType.LINKER &&\n (isolatedLinkerPanelId === undefined || isolatedLinkerPanelId === panelId);\n // Disable linking if linker is in isolated mode for a different panel\n const disableLinking =\n activeTool === ToolType.LINKER &&\n isolatedLinkerPanelId !== undefined &&\n isolatedLinkerPanelId !== panelId;\n\n return {\n columns: getColumnsForDashboard(state, localDashboardId),\n columnSelectionValidator: getColumnSelectionValidatorForDashboard(\n state,\n localDashboardId\n ),\n dh: getApi(state),\n isLinkerActive,\n disableLinking,\n settings: getSettings(state),\n panelTableMap,\n dashboardLinks,\n };\n};\n\nconst connector = connect(mapStateToProps, null, null, { forwardRef: true });\n\nexport type DropdownFilterPanelProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\ninterface DropdownFilterPanelState {\n column?: DropdownFilterColumn;\n formatter: Formatter;\n valuesTable?: DhType.Table;\n valuesColumn?: DhType.Column;\n sourceSize: number;\n value: string;\n timestamp?: number;\n values: unknown[];\n isValueShown: boolean;\n wasFlipped: boolean;\n skipUpdate: boolean;\n\n panelState?: PanelState; // Dehydrated panel state that can load this panel\n\n isDisconnected: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n error: unknown | null;\n}\n\nexport class DropdownFilterPanel extends Component<\n DropdownFilterPanelProps,\n DropdownFilterPanelState\n> {\n static displayName = 'DropdownFilterPanel';\n\n static COMPONENT = 'DropdownFilterPanel';\n\n static MAX_TABLE_SIZE = 256;\n\n static SOURCE_COLUMN = Object.freeze({\n name: 'FilterSource',\n type: null,\n });\n\n constructor(props: DropdownFilterPanelProps) {\n super(props);\n\n this.handleChange = debounce(\n this.handleChange.bind(this),\n DROPDOWN_FILTER_DEBOUNCE\n );\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.handleDisconnect = this.handleDisconnect.bind(this);\n this.handleReconnect = this.handleReconnect.bind(this);\n this.handleColumnSelected = this.handleColumnSelected.bind(this);\n this.handleSourceFilterChange = this.handleSourceFilterChange.bind(this);\n this.handleSourceSortChange = this.handleSourceSortChange.bind(this);\n this.handleSourceSizeChange = this.handleSourceSizeChange.bind(this);\n this.handleSourceMouseEnter = this.handleSourceMouseEnter.bind(this);\n this.handleSourceMouseLeave = this.handleSourceMouseLeave.bind(this);\n this.handleValuesTableUpdate = this.handleValuesTableUpdate.bind(this);\n\n this.dropdownFilterRef = React.createRef();\n this.panelContainer = React.createRef();\n this.pending = new Pending();\n\n const { dh, panelState, settings } = props;\n this.columnFormats = FormatterUtils.getColumnFormats(settings);\n // Filter dropdown needs to show and send full timestamp format with nanoseconds\n this.dateTimeFormatter = new DateTimeColumnFormatter(dh, {\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: `yyyy-MM-dd HH:mm:ss.SSSSSSSSS`,\n });\n const {\n value = '',\n isValueShown = false,\n name,\n type,\n timestamp,\n } = panelState ?? {};\n const column = name != null && type != null ? { name, type } : undefined;\n this.state = {\n column,\n formatter: new Formatter(dh, this.columnFormats),\n valuesTable: undefined,\n valuesColumn: undefined,\n sourceSize: 0,\n value,\n timestamp,\n values: [],\n isValueShown,\n wasFlipped: false,\n skipUpdate: false,\n\n // eslint-disable-next-line react/no-unused-state\n panelState, // Dehydrated panel state that can load this panel\n\n isDisconnected: false,\n isLoading: false,\n isLoaded: false,\n error: null,\n };\n }\n\n componentDidMount(): void {\n this.updateValuesTable();\n const { dashboardLinks, panelTableMap } = this.props;\n const { column, value, timestamp } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n if (column != null) {\n const { name, type } = column;\n this.sendUpdate(name, type, value, timestamp);\n }\n }\n\n componentDidUpdate(\n prevProps: DropdownFilterPanelProps,\n prevState: DropdownFilterPanelState\n ): void {\n const { dashboardLinks, panelTableMap, settings } = this.props;\n const { valuesTable } = this.state;\n const source = this.getSource(dashboardLinks);\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n\n const prevSource = this.getSource(prevProps.dashboardLinks);\n const prevSourceTable = this.getSourceTable(\n prevProps.panelTableMap,\n prevProps.dashboardLinks\n );\n\n if (settings !== prevProps.settings && settings !== undefined) {\n this.updateFormatterSettings(settings);\n }\n\n if (\n valuesTable !== prevState.valuesTable &&\n prevState.valuesTable != null\n ) {\n log.debug('Table in state modified, closing the old table.');\n prevState.valuesTable.close();\n }\n\n // Checking source change in addition to table change\n // in case a different column is selected in the same table\n if (sourceTable !== prevSourceTable || source !== prevSource) {\n this.updateValuesTable();\n }\n\n if (sourceTable !== prevSourceTable) {\n if (prevSourceTable !== null) {\n this.stopListeningToSource(prevSourceTable);\n }\n if (sourceTable !== null) {\n this.startListeningToSource(sourceTable);\n }\n }\n }\n\n componentWillUnmount(): void {\n const { dashboardLinks, panelTableMap } = this.props;\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n this.pending.cancel();\n if (sourceTable !== null) {\n this.stopListeningToSource(sourceTable);\n }\n if (this.cleanup) {\n this.cleanup();\n }\n if (valuesTable != null) {\n valuesTable.close();\n }\n }\n\n dateTimeFormatter: DateTimeColumnFormatter;\n\n dropdownFilterRef: RefObject<DropdownFilter>;\n\n panelContainer: RefObject<HTMLDivElement>;\n\n pending: Pending;\n\n cleanup?: () => void;\n\n columnFormats?: FormattingRule[];\n\n getCachedValues = memoize(\n (\n rawValues: unknown[],\n { type, name }: DropdownFilterColumn,\n formatter: Formatter\n ) => {\n if (type !== undefined && TableUtils.isDateType(type)) {\n return rawValues.map(value =>\n this.dateTimeFormatter.format(value as number)\n );\n }\n return rawValues.map(value =>\n // Skip formatting for nulls so they don't get converted to ''\n value != null && type != null\n ? formatter.getFormattedString(value, type, name)\n : null\n );\n }\n );\n\n getCoordinateForColumn(): [number, number] | null {\n if (this.panelContainer.current == null) {\n return null;\n }\n\n const element = this.panelContainer.current.querySelector(\n `.${DropdownFilter.SOURCE_BUTTON_CLASS_NAME}`\n );\n const rect = element?.getBoundingClientRect() ?? null;\n if (rect == null || rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n const x = rect.left + rect.width / 2;\n const y = rect.bottom;\n return [x, y];\n }\n\n getSettingsErrorMessage(): string | undefined {\n const { sourceSize } = this.state;\n if (sourceSize > DropdownFilterPanel.MAX_TABLE_SIZE) {\n return `Table too large, must have fewer than ${DropdownFilterPanel.MAX_TABLE_SIZE} options.`;\n }\n return undefined;\n }\n\n getPanelErrorMessage(): string | undefined {\n const { error } = this.state;\n return error != null ? `${error}` : undefined;\n }\n\n getCachedPanelLinks = memoize(\n (dashboardLinks: Link[], panel: DropdownFilterPanel) => {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n log.debug('getCachedPanelLinks', dashboardLinks, panelId);\n return dashboardLinks.filter(link => link.end?.panelId === panelId);\n }\n );\n\n getCachedSource = memoize((links: Link[]) => {\n log.debug('getCachedSource', links);\n let source: LinkPoint | undefined;\n if (links.length > 0) {\n const [link] = links;\n source = link.start;\n if (links.length > 1) {\n log.error('Filter has more that one link', links);\n }\n }\n return source;\n });\n\n getCachedSourceTable = memoize(\n (\n panelTableMap: Map<string | string[], DhType.Table>,\n source: LinkPoint | undefined\n ) => {\n log.debug('getCachedSourceTable', panelTableMap, source);\n if (source == null) {\n return null;\n }\n const { panelId } = source;\n return panelTableMap.get(panelId) ?? null;\n }\n );\n\n getCachedSourceColumn = memoize(\n (table: DhType.Table, source: LinkPoint | undefined) => {\n log.debug('getCachedSourceColumn', table, source);\n if (table == null || source == null) {\n return null;\n }\n return (\n table.columns.find(\n ({ name, type }) =>\n name === source.columnName && type === source.columnType\n ) ?? null\n );\n }\n );\n\n getSource(links: Link[]): LinkPoint | undefined {\n const panelLinks = this.getCachedPanelLinks(links, this);\n return this.getCachedSource(panelLinks);\n }\n\n getSourceTable(\n panelTableMap: PanelTableMap,\n links: Link[]\n ): DhType.Table | null {\n const source = this.getSource(links);\n return this.getCachedSourceTable(panelTableMap, source);\n }\n\n getValuesColumn(\n valuesTable: DhType.Table,\n links: Link[]\n ): DhType.Column | null {\n const source = this.getSource(links);\n return this.getCachedSourceColumn(valuesTable, source);\n }\n\n startListeningToSource(sourceTable: DhType.Table): void {\n const { dh } = this.props;\n log.debug('startListeningToSource');\n sourceTable.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_SIZECHANGED,\n this.handleSourceSizeChange\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleDisconnect\n );\n sourceTable.addEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleReconnect\n );\n }\n\n stopListeningToSource(sourceTable: DhType.Table): void {\n const { dh } = this.props;\n log.debug('stopListeningToSource');\n sourceTable.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleSourceFilterChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_SORTCHANGED,\n this.handleSourceSortChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_SIZECHANGED,\n this.handleSourceSizeChange\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_DISCONNECT,\n this.handleDisconnect\n );\n sourceTable.removeEventListener(\n dh.Table.EVENT_RECONNECT,\n this.handleReconnect\n );\n }\n\n handleChange({\n column,\n isValueShown = false,\n value,\n }: {\n column: Partial<DhType.Column> | null;\n isValueShown?: boolean | undefined;\n value?: string | undefined;\n }): void {\n const { name = undefined, type = undefined } = column ?? {};\n let sendUpdate = true;\n let timestamp: number | undefined = Date.now();\n this.setState(\n ({ panelState, timestamp: prevTimestamp, wasFlipped, skipUpdate }) => {\n // If the user had a value set, and they flip the card over and flip it back without changing any settings, ignore it\n const isFlip =\n panelState != null &&\n isValueShown !== panelState.isValueShown &&\n name === panelState.name &&\n type === panelState.type &&\n value === panelState.value;\n sendUpdate =\n (!skipUpdate && isValueShown && (!isFlip || !wasFlipped)) ?? false;\n\n if (!sendUpdate) {\n timestamp = prevTimestamp;\n }\n\n return {\n panelState: {\n isValueShown,\n name,\n type,\n value,\n timestamp: timestamp ?? undefined,\n },\n timestamp,\n wasFlipped: isFlip,\n skipUpdate: false,\n };\n },\n () => {\n if (sendUpdate) {\n this.sendUpdate(name ?? null, type, value, timestamp);\n }\n }\n );\n }\n\n handleDisconnect(): void {\n this.setState({\n error: new Error('Table disconnected'),\n isDisconnected: true,\n isLoading: false,\n });\n }\n\n handleReconnect(): void {\n this.setState({ isDisconnected: false, error: null });\n }\n\n handleSourceFilterChange(): void {\n this.applySourceFilters();\n }\n\n handleSourceSortChange(): void {\n this.applySourceSorts();\n }\n\n handleSourceSizeChange({ detail }: { detail: number }): void {\n this.setState({ sourceSize: detail });\n }\n\n handleColumnSelected(): void {\n log.debug('handleColumnSelected');\n const { glEventHub } = this.props;\n glEventHub.emit(\n InputFilterEvent.COLUMN_SELECTED,\n this,\n DropdownFilterPanel.SOURCE_COLUMN\n );\n }\n\n handleClearAllFilters(): void {\n this.dropdownFilterRef?.current?.clearFilter();\n }\n\n /**\n * Set the filter value, card side, selected column\n * @param state Filter state to set\n * @param sendUpdate Emit filters changed event if true\n */\n setPanelState(state: InputFilterPanelState, sendUpdate = false): void {\n const { dashboardLinks } = this.props;\n if (this.getSource(dashboardLinks) == null) {\n log.debug('Ignore state update for unlinked filter', state);\n return;\n }\n // Set the skipUpdate flag so the next onChange handler call doesn't emit the FILTERS_CHANGED event\n this.setState({ skipUpdate: !sendUpdate });\n\n // Changing the inputFilter state via props doesn't quite work because of the delays on manual input changes\n // Setting the ref state directly triggers the onChange handler and updates the panelState\n this.dropdownFilterRef?.current?.setFilterState(state);\n }\n\n sendUpdate(\n name: string | null,\n type: string | undefined,\n value: string | undefined,\n timestamp?: number\n ): void {\n const { dashboardLinks, glEventHub } = this.props;\n const sourcePanelId = this.getSource(dashboardLinks)?.panelId;\n const excludePanelIds = sourcePanelId === null ? [] : [sourcePanelId];\n log.debug('sendUpdate', {\n name,\n type,\n value,\n timestamp,\n excludePanelIds,\n });\n\n glEventHub.emit(InputFilterEvent.FILTERS_CHANGED, this, {\n name,\n type,\n value: value != null ? value : '=null',\n timestamp,\n excludePanelIds,\n });\n }\n\n updateValuesTable(): void {\n const { dashboardLinks, panelTableMap } = this.props;\n const source = this.getSource(dashboardLinks);\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('updateValuesTable', source, sourceTable);\n\n this.setState({\n values: [],\n valuesTable: undefined,\n error: null,\n });\n\n if (source == null) {\n log.debug('Filter unlinked.');\n this.setState({\n isLoading: false,\n isLoaded: true,\n isValueShown: false,\n sourceSize: 0,\n });\n return;\n }\n\n this.setState({ isLoading: true });\n\n if (sourceTable == null) {\n return;\n }\n\n this.setState({ isLoaded: false, sourceSize: sourceTable.size });\n\n this.pending\n .add(sourceTable.copy(), resolved => resolved.close())\n .then(valuesTable => {\n // Loading/loaded will be set when values array is actually populated\n this.updateViewportListener(valuesTable);\n this.setState({ valuesTable });\n })\n .catch((error: unknown) => {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n this.setState({ isLoading: false, error });\n });\n }\n\n applySourceSorts(): void {\n const { dashboardLinks, panelTableMap } = this.props;\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('applySourceSorts', sourceTable?.sort);\n if (valuesTable == null || sourceTable == null) {\n log.debug('Table not initialized');\n return;\n }\n const sorts = [...sourceTable.sort];\n valuesTable.applySort(sorts);\n this.setViewport(valuesTable);\n }\n\n applySourceFilters(): void {\n const { dashboardLinks, panelTableMap } = this.props;\n const { valuesTable } = this.state;\n const sourceTable = this.getSourceTable(panelTableMap, dashboardLinks);\n log.debug('applySourceFilters', sourceTable?.filter);\n if (valuesTable == null || sourceTable == null) {\n log.debug('Table not initialized');\n return;\n }\n const filters = [...sourceTable.filter];\n valuesTable.applyFilter(filters);\n this.setViewport(valuesTable);\n }\n\n updateViewportListener(valuesTable: DhType.Table): void {\n const { dh } = this.props;\n log.debug('updateViewportListener', valuesTable?.size);\n\n if (this.cleanup) {\n this.cleanup();\n }\n\n if (valuesTable == null) {\n this.cleanup = undefined;\n return;\n }\n\n this.cleanup = valuesTable.addEventListener(\n dh.Table.EVENT_UPDATED,\n this.handleValuesTableUpdate\n );\n\n this.setViewport(valuesTable);\n }\n\n setViewport(valuesTable: DhType.Table): void {\n const { dashboardLinks } = this.props;\n const valuesColumn = this.getValuesColumn(valuesTable, dashboardLinks);\n if (!valuesColumn) {\n log.error('values column is null');\n return;\n }\n valuesTable.setViewport(0, DropdownFilterPanel.MAX_TABLE_SIZE - 1, [\n valuesColumn,\n ]);\n }\n\n updateFormatterSettings(settings: {\n formatter?: FormattingRule[] | undefined;\n }): void {\n const { dh } = this.props;\n const columnFormats = FormatterUtils.getColumnFormats(settings);\n if (!deepEqual(this.columnFormats, columnFormats)) {\n this.columnFormats = columnFormats;\n this.setState({ formatter: new Formatter(dh, columnFormats) });\n }\n }\n\n handleValuesTableUpdate({\n detail,\n }: {\n detail: { rows: DhType.Row[] };\n }): void {\n const { rows } = detail;\n const { dashboardLinks } = this.props;\n const { valuesTable } = this.state;\n if (!valuesTable) {\n log.error('valuesTable is null');\n return;\n }\n const valuesColumn = this.getValuesColumn(valuesTable, dashboardLinks);\n if (!valuesColumn) {\n log.error('Values column not found');\n return;\n }\n const values = rows.map(row => row.get(valuesColumn));\n this.setState({ values, isLoading: false, isLoaded: true, valuesColumn });\n }\n\n handleSourceMouseEnter(): void {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, DropdownFilterPanel.SOURCE_COLUMN);\n }\n\n handleSourceMouseLeave(): void {\n const { columnSelectionValidator } = this.props;\n if (!columnSelectionValidator) {\n return;\n }\n columnSelectionValidator(this, undefined);\n }\n\n render(): React.ReactElement {\n const {\n columns,\n dashboardLinks,\n disableLinking,\n glContainer,\n glEventHub,\n isLinkerActive,\n } = this.props;\n const {\n column,\n formatter,\n isDisconnected,\n isValueShown,\n value,\n values,\n valuesColumn,\n isLoading,\n isLoaded,\n } = this.state;\n const source = this.getSource(dashboardLinks);\n const settingsErrorMessage = this.getSettingsErrorMessage();\n const panelErrorMessage = this.getPanelErrorMessage();\n const formattedValues =\n isLoaded && valuesColumn != null\n ? this.getCachedValues(values, valuesColumn, formatter)\n : [];\n\n return (\n <WidgetPanel\n errorMessage={panelErrorMessage}\n isLoading={isLoading}\n isLoaded={isLoaded}\n isDisconnected={isDisconnected}\n className=\"iris-dropdown-filter-panel\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={this.handleClearAllFilters}\n widgetName=\"Dropdown Filter\"\n widgetType=\"DropdownFilter\"\n >\n <div\n ref={this.panelContainer}\n className=\"dropdown-filter-container h-100 w-100 container\"\n >\n <DropdownFilter\n ref={this.dropdownFilterRef}\n column={column}\n columns={columns}\n isValueShown={isValueShown}\n isLinkerActive={isLinkerActive}\n disableLinking={disableLinking}\n isLoaded={isLoaded}\n settingsError={settingsErrorMessage}\n source={source}\n value={value}\n values={formattedValues}\n onChange={this.handleChange}\n onColumnSelected={this.handleColumnSelected}\n onSourceMouseEnter={this.handleSourceMouseEnter}\n onSourceMouseLeave={this.handleSourceMouseLeave}\n />\n </div>\n </WidgetPanel>\n );\n }\n}\n\nconst ConnectedDropdownFilterPanel = connector(DropdownFilterPanel);\n\nexport default ConnectedDropdownFilterPanel;\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import deepEqual from 'deep-equal';
1
+ import deepEqual from 'fast-deep-equal';
2
2
  import { updateDashboardData } from '@deephaven/dashboard';
3
3
  import { getLinksForDashboard } from "./selectors.js";
4
4
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","names":["deepEqual","updateDashboardData","getLinksForDashboard","setDashboardConnection","id","connection","dispatch","setDashboardSessionWrapper","sessionWrapper","setDashboardLinks","links","addDashboardLinks","newLinks","getState","filtered","filter","newLink","findIndex","link","start","end","concat","deleteDashboardLinks","linkIds","includes","setDashboardIsolatedLinkerPanelId","isolatedLinkerPanelId","setDashboardColumnSelectionValidator","columnSelectionValidator","setDashboardConsoleSettings","consoleSettings","setDashboardFilterSets","filterSets"],"sources":["../../src/redux/actions.ts"],"sourcesContent":["import deepEqual from 'deep-equal';\nimport { ThunkAction } from 'redux-thunk';\nimport { updateDashboardData } from '@deephaven/dashboard';\nimport { SessionWrapper } from '@deephaven/jsapi-utils';\nimport { RootState } from '@deephaven/redux';\nimport { Action } from 'redux';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { getLinksForDashboard } from './selectors';\nimport { FilterSet } from '../panels';\nimport { Link } from '../linker/LinkerUtils';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\n\n/**\n * Set the connection for the dashboard specified\n * @param id The ID of the dashboard to set the connection for\n * @param connection The connection object to set for the dashboard\n */\nexport const setDashboardConnection =\n (\n id: string,\n connection: dh.IdeConnection\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { connection }));\n\n/**\n * Set the session wrapper for the dashboard specified\n * @param id The ID of the dashboard to set the session for\n * @param sessionWrapper The session wrapper object to set for the dashboard\n */\nexport const setDashboardSessionWrapper =\n (\n id: string,\n sessionWrapper: SessionWrapper\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { sessionWrapper }));\n\n/**\n * Set the links for a given dashboard\n * @param id The ID of the dashboard to set the links for\n * @param links The links to set\n */\nexport const setDashboardLinks =\n (\n id: string,\n links: Link[]\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { links }));\n\n/**\n * Add links to the existing links in a dashboard. Filters out any duplicate links.\n * @param id The ID of the dashboard to add links to\n * @param newLinks The new links to add\n */\nexport const addDashboardLinks =\n (\n id: string,\n newLinks: Link[]\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n (dispatch, getState) => {\n const links = getLinksForDashboard(getState(), id);\n const filtered = newLinks.filter(\n newLink =>\n links.findIndex(\n link =>\n deepEqual(link.start, newLink.start) &&\n deepEqual(link.end, newLink.end)\n ) < 0\n );\n return dispatch(setDashboardLinks(id, links.concat(filtered)));\n };\n\n/**\n * Delete links from a dashboard\n * @param id The ID of the dashboard to delete links from\n * @param linkIds The link IDs to delete\n */\nexport const deleteDashboardLinks =\n (\n id: string,\n linkIds: string[]\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n (dispatch, getState) => {\n const links = getLinksForDashboard(getState(), id);\n const newLinks = links.filter(link => !linkIds.includes(link.id));\n return dispatch(setDashboardLinks(id, newLinks));\n };\n\n/**\n * Set the isolated linker panel ID for a dashboard\n * @param id The ID of the dashboard to set the isolated linker panel ID in\n * @param isolatedLinkerPanelId The isolated panel ID, or undefined to unset\n */\nexport const setDashboardIsolatedLinkerPanelId =\n (\n id: string,\n isolatedLinkerPanelId: string | string[] | undefined\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { isolatedLinkerPanelId }));\n\n/**\n * Set the column selection validator for a dashboard\n * @param id The ID of the dashboard to set the column selection validator on\n * @param columnSelectionValidator The column selection validator to set\n */\nexport const setDashboardColumnSelectionValidator =\n (\n id: string,\n columnSelectionValidator: ColumnSelectionValidator | undefined\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { columnSelectionValidator }));\n\n/**\n * Set the console settings for a dashboard\n * @param id The ID of the dashboard to set the console settings on\n * @param consoleSettings The console settings to set for the dashboard\n */\nexport const setDashboardConsoleSettings =\n (\n id: string,\n consoleSettings: Record<string, unknown>\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { consoleSettings }));\n\n/**\n * Set the filter sets for a specific dashboard\n * @param id The ID of the dashboard to set the filter sets for\n * @param filterSets The filter sets to set\n */\nexport const setDashboardFilterSets =\n (\n id: string,\n filterSets: FilterSet[]\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { filterSets }));\n"],"mappings":"AAAA,OAAOA,SAAS,MAAM,YAAY;AAElC,SAASC,mBAAmB,QAAQ,sBAAsB;AAAC,SAKlDC,oBAAoB;AAK7B;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,sBAAsB,GACjCA,CACEC,EAAU,EACVC,UAA4B,KAE9BC,QAAQ,IACNA,QAAQ,CAACL,mBAAmB,CAACG,EAAE,EAAE;EAAEC;AAAW,CAAC,CAAC,CAAC;;AAErD;AACA;AACA;AACA;AACA;AACA,OAAO,IAAME,0BAA0B,GACrCA,CACEH,EAAU,EACVI,cAA8B,KAEhCF,QAAQ,IACNA,QAAQ,CAACL,mBAAmB,CAACG,EAAE,EAAE;EAAEI;AAAe,CAAC,CAAC,CAAC;;AAEzD;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,iBAAiB,GAC5BA,CACEL,EAAU,EACVM,KAAa,KAEfJ,QAAQ,IACNA,QAAQ,CAACL,mBAAmB,CAACG,EAAE,EAAE;EAAEM;AAAM,CAAC,CAAC,CAAC;;AAEhD;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,iBAAiB,GAC5BA,CACEP,EAAU,EACVQ,QAAgB,KAElB,CAACN,QAAQ,EAAEO,QAAQ,KAAK;EACtB,IAAMH,KAAK,GAAGR,oBAAoB,CAACW,QAAQ,CAAC,CAAC,EAAET,EAAE,CAAC;EAClD,IAAMU,QAAQ,GAAGF,QAAQ,CAACG,MAAM,CAC9BC,OAAO,IACLN,KAAK,CAACO,SAAS,CACbC,IAAI,IACFlB,SAAS,CAACkB,IAAI,CAACC,KAAK,EAAEH,OAAO,CAACG,KAAK,CAAC,IACpCnB,SAAS,CAACkB,IAAI,CAACE,GAAG,EAAEJ,OAAO,CAACI,GAAG,CACnC,CAAC,GAAG,CACR,CAAC;EACD,OAAOd,QAAQ,CAACG,iBAAiB,CAACL,EAAE,EAAEM,KAAK,CAACW,MAAM,CAACP,QAAQ,CAAC,CAAC,CAAC;AAChE,CAAC;;AAEH;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMQ,oBAAoB,GAC/BA,CACElB,EAAU,EACVmB,OAAiB,KAEnB,CAACjB,QAAQ,EAAEO,QAAQ,KAAK;EACtB,IAAMH,KAAK,GAAGR,oBAAoB,CAACW,QAAQ,CAAC,CAAC,EAAET,EAAE,CAAC;EAClD,IAAMQ,QAAQ,GAAGF,KAAK,CAACK,MAAM,CAACG,IAAI,IAAI,CAACK,OAAO,CAACC,QAAQ,CAACN,IAAI,CAACd,EAAE,CAAC,CAAC;EACjE,OAAOE,QAAQ,CAACG,iBAAiB,CAACL,EAAE,EAAEQ,QAAQ,CAAC,CAAC;AAClD,CAAC;;AAEH;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMa,iCAAiC,GAC5CA,CACErB,EAAU,EACVsB,qBAAoD,KAEtDpB,QAAQ,IACNA,QAAQ,CAACL,mBAAmB,CAACG,EAAE,EAAE;EAAEsB;AAAsB,CAAC,CAAC,CAAC;;AAEhE;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,oCAAoC,GAC/CA,CACEvB,EAAU,EACVwB,wBAA8D,KAEhEtB,QAAQ,IACNA,QAAQ,CAACL,mBAAmB,CAACG,EAAE,EAAE;EAAEwB;AAAyB,CAAC,CAAC,CAAC;;AAEnE;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,2BAA2B,GACtCA,CACEzB,EAAU,EACV0B,eAAwC,KAE1CxB,QAAQ,IACNA,QAAQ,CAACL,mBAAmB,CAACG,EAAE,EAAE;EAAE0B;AAAgB,CAAC,CAAC,CAAC;;AAE1D;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,sBAAsB,GACjCA,CACE3B,EAAU,EACV4B,UAAuB,KAEzB1B,QAAQ,IACNA,QAAQ,CAACL,mBAAmB,CAACG,EAAE,EAAE;EAAE4B;AAAW,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"actions.js","names":["deepEqual","updateDashboardData","getLinksForDashboard","setDashboardConnection","id","connection","dispatch","setDashboardSessionWrapper","sessionWrapper","setDashboardLinks","links","addDashboardLinks","newLinks","getState","filtered","filter","newLink","findIndex","link","start","end","concat","deleteDashboardLinks","linkIds","includes","setDashboardIsolatedLinkerPanelId","isolatedLinkerPanelId","setDashboardColumnSelectionValidator","columnSelectionValidator","setDashboardConsoleSettings","consoleSettings","setDashboardFilterSets","filterSets"],"sources":["../../src/redux/actions.ts"],"sourcesContent":["import deepEqual from 'fast-deep-equal';\nimport { ThunkAction } from 'redux-thunk';\nimport { updateDashboardData } from '@deephaven/dashboard';\nimport { SessionWrapper } from '@deephaven/jsapi-utils';\nimport { RootState } from '@deephaven/redux';\nimport { Action } from 'redux';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { getLinksForDashboard } from './selectors';\nimport { FilterSet } from '../panels';\nimport { Link } from '../linker/LinkerUtils';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\n\n/**\n * Set the connection for the dashboard specified\n * @param id The ID of the dashboard to set the connection for\n * @param connection The connection object to set for the dashboard\n */\nexport const setDashboardConnection =\n (\n id: string,\n connection: dh.IdeConnection\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { connection }));\n\n/**\n * Set the session wrapper for the dashboard specified\n * @param id The ID of the dashboard to set the session for\n * @param sessionWrapper The session wrapper object to set for the dashboard\n */\nexport const setDashboardSessionWrapper =\n (\n id: string,\n sessionWrapper: SessionWrapper\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { sessionWrapper }));\n\n/**\n * Set the links for a given dashboard\n * @param id The ID of the dashboard to set the links for\n * @param links The links to set\n */\nexport const setDashboardLinks =\n (\n id: string,\n links: Link[]\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { links }));\n\n/**\n * Add links to the existing links in a dashboard. Filters out any duplicate links.\n * @param id The ID of the dashboard to add links to\n * @param newLinks The new links to add\n */\nexport const addDashboardLinks =\n (\n id: string,\n newLinks: Link[]\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n (dispatch, getState) => {\n const links = getLinksForDashboard(getState(), id);\n const filtered = newLinks.filter(\n newLink =>\n links.findIndex(\n link =>\n deepEqual(link.start, newLink.start) &&\n deepEqual(link.end, newLink.end)\n ) < 0\n );\n return dispatch(setDashboardLinks(id, links.concat(filtered)));\n };\n\n/**\n * Delete links from a dashboard\n * @param id The ID of the dashboard to delete links from\n * @param linkIds The link IDs to delete\n */\nexport const deleteDashboardLinks =\n (\n id: string,\n linkIds: string[]\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n (dispatch, getState) => {\n const links = getLinksForDashboard(getState(), id);\n const newLinks = links.filter(link => !linkIds.includes(link.id));\n return dispatch(setDashboardLinks(id, newLinks));\n };\n\n/**\n * Set the isolated linker panel ID for a dashboard\n * @param id The ID of the dashboard to set the isolated linker panel ID in\n * @param isolatedLinkerPanelId The isolated panel ID, or undefined to unset\n */\nexport const setDashboardIsolatedLinkerPanelId =\n (\n id: string,\n isolatedLinkerPanelId: string | string[] | undefined\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { isolatedLinkerPanelId }));\n\n/**\n * Set the column selection validator for a dashboard\n * @param id The ID of the dashboard to set the column selection validator on\n * @param columnSelectionValidator The column selection validator to set\n */\nexport const setDashboardColumnSelectionValidator =\n (\n id: string,\n columnSelectionValidator: ColumnSelectionValidator | undefined\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { columnSelectionValidator }));\n\n/**\n * Set the console settings for a dashboard\n * @param id The ID of the dashboard to set the console settings on\n * @param consoleSettings The console settings to set for the dashboard\n */\nexport const setDashboardConsoleSettings =\n (\n id: string,\n consoleSettings: Record<string, unknown>\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { consoleSettings }));\n\n/**\n * Set the filter sets for a specific dashboard\n * @param id The ID of the dashboard to set the filter sets for\n * @param filterSets The filter sets to set\n */\nexport const setDashboardFilterSets =\n (\n id: string,\n filterSets: FilterSet[]\n ): ThunkAction<unknown, RootState, undefined, Action<unknown>> =>\n dispatch =>\n dispatch(updateDashboardData(id, { filterSets }));\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/dashboard-core-plugins",
3
- "version": "0.75.1-beta.0+a0cb5bf7",
3
+ "version": "0.75.1",
4
4
  "description": "Deephaven Dashboard Core Plugins",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -22,29 +22,29 @@
22
22
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
23
23
  },
24
24
  "dependencies": {
25
- "@deephaven/chart": "^0.75.1-beta.0+a0cb5bf7",
26
- "@deephaven/components": "^0.75.1-beta.0+a0cb5bf7",
27
- "@deephaven/console": "^0.75.1-beta.0+a0cb5bf7",
28
- "@deephaven/dashboard": "^0.75.1-beta.0+a0cb5bf7",
29
- "@deephaven/file-explorer": "^0.75.1-beta.0+a0cb5bf7",
30
- "@deephaven/filters": "^0.75.1-beta.0+a0cb5bf7",
31
- "@deephaven/golden-layout": "^0.75.1-beta.0+a0cb5bf7",
32
- "@deephaven/grid": "^0.75.1-beta.0+a0cb5bf7",
33
- "@deephaven/icons": "^0.75.1-beta.0+a0cb5bf7",
34
- "@deephaven/iris-grid": "^0.75.1-beta.0+a0cb5bf7",
35
- "@deephaven/jsapi-bootstrap": "^0.75.1-beta.0+a0cb5bf7",
36
- "@deephaven/jsapi-components": "^0.75.1-beta.0+a0cb5bf7",
25
+ "@deephaven/chart": "^0.75.1",
26
+ "@deephaven/components": "^0.75.1",
27
+ "@deephaven/console": "^0.75.1",
28
+ "@deephaven/dashboard": "^0.75.1",
29
+ "@deephaven/file-explorer": "^0.75.1",
30
+ "@deephaven/filters": "^0.75.0",
31
+ "@deephaven/golden-layout": "^0.75.1",
32
+ "@deephaven/grid": "^0.75.0",
33
+ "@deephaven/icons": "^0.75.0",
34
+ "@deephaven/iris-grid": "^0.75.1",
35
+ "@deephaven/jsapi-bootstrap": "^0.75.1",
36
+ "@deephaven/jsapi-components": "^0.75.1",
37
37
  "@deephaven/jsapi-types": "1.0.0-dev0.34.0",
38
- "@deephaven/jsapi-utils": "^0.75.1-beta.0+a0cb5bf7",
39
- "@deephaven/log": "^0.75.1-beta.0+a0cb5bf7",
40
- "@deephaven/plugin": "^0.75.1-beta.0+a0cb5bf7",
41
- "@deephaven/react-hooks": "^0.75.1-beta.0+a0cb5bf7",
42
- "@deephaven/redux": "^0.75.1-beta.0+a0cb5bf7",
43
- "@deephaven/storage": "^0.75.1-beta.0+a0cb5bf7",
44
- "@deephaven/utils": "^0.75.1-beta.0+a0cb5bf7",
38
+ "@deephaven/jsapi-utils": "^0.75.0",
39
+ "@deephaven/log": "^0.75.0",
40
+ "@deephaven/plugin": "^0.75.1",
41
+ "@deephaven/react-hooks": "^0.75.1",
42
+ "@deephaven/redux": "^0.75.1",
43
+ "@deephaven/storage": "^0.75.0",
44
+ "@deephaven/utils": "^0.75.0",
45
45
  "@fortawesome/react-fontawesome": "^0.2.0",
46
46
  "classnames": "^2.3.1",
47
- "deep-equal": "^2.0.5",
47
+ "fast-deep-equal": "^3.1.3",
48
48
  "lodash.clamp": "^4.0.3",
49
49
  "lodash.debounce": "^4.0.8",
50
50
  "lodash.throttle": "^4.1.1",
@@ -65,8 +65,8 @@
65
65
  "react-redux": "^7.2.4"
66
66
  },
67
67
  "devDependencies": {
68
- "@deephaven/jsapi-shim": "^0.75.1-beta.0+a0cb5bf7",
69
- "@deephaven/mocks": "^0.75.1-beta.0+a0cb5bf7"
68
+ "@deephaven/jsapi-shim": "^0.75.0",
69
+ "@deephaven/mocks": "^0.75.0"
70
70
  },
71
71
  "files": [
72
72
  "dist",
@@ -78,5 +78,5 @@
78
78
  "publishConfig": {
79
79
  "access": "public"
80
80
  },
81
- "gitHead": "a0cb5bf7ad42f532a4c3d58e1efedd53d5ba9322"
81
+ "gitHead": "2d12ea3d13a2c304246bc61cff81c2c23465361f"
82
82
  }