@deephaven/iris-grid 1.22.1-alpha-pivot-builder.0 → 1.22.2-alpha-pivot-builder.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AdvancedFilterCreator.js +65 -102
- package/dist/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.js +22 -37
- package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js +37 -63
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js +29 -59
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnHeaderGroup.js +6 -8
- package/dist/ColumnHeaderGroup.js.map +1 -1
- package/dist/ColumnStatistics.js +22 -28
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CrossColumnSearch.js +20 -29
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/FilterInputField.js +19 -46
- package/dist/FilterInputField.js.map +1 -1
- package/dist/GotoRow.js +32 -29
- package/dist/GotoRow.js.map +1 -1
- package/dist/IrisGrid.js +490 -822
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridBottomBar.js +10 -11
- package/dist/IrisGridBottomBar.js.map +1 -1
- package/dist/IrisGridCacheUtils.js +28 -8
- package/dist/IrisGridCacheUtils.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.js +30 -13
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCellRendererUtils.js +6 -12
- package/dist/IrisGridCellRendererUtils.js.map +1 -1
- package/dist/IrisGridCopyHandler.js +28 -47
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridMetricCalculator.js +28 -51
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModelUpdater.js +32 -30
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridPartitionSelector.js +28 -62
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/IrisGridProxyModel.js +7 -12
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.js +162 -264
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridTableModel.js +23 -16
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +49 -73
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTestUtils.js +19 -19
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTextCellRenderer.js +35 -52
- package/dist/IrisGridTextCellRenderer.js.map +1 -1
- package/dist/IrisGridTheme.js +9 -1
- package/dist/IrisGridTheme.js.map +1 -1
- package/dist/IrisGridThemeProvider.js +5 -7
- package/dist/IrisGridThemeProvider.js.map +1 -1
- package/dist/IrisGridTreeTableModel.js +5 -9
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.js +246 -300
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/NoPastePermissionModal.js +3 -5
- package/dist/NoPastePermissionModal.js.map +1 -1
- package/dist/PendingDataBottomBar.js +27 -16
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/ToastBottomBar.js +16 -8
- package/dist/ToastBottomBar.js.map +1 -1
- package/dist/format-context-menus/CustomFormatAction.js +11 -24
- package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
- package/dist/key-handlers/CopyCellKeyHandler.js +3 -4
- package/dist/key-handlers/CopyCellKeyHandler.js.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.js +1 -3
- package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
- package/dist/key-handlers/ReverseKeyHandler.js +1 -3
- package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +35 -59
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +13 -29
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +8 -17
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +96 -199
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +2 -4
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js +16 -30
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js +5 -13
- package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js +20 -36
- package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js +3 -5
- package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridTokenMouseHandler.js +9 -18
- package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.js +10 -18
- package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsMenu.js +12 -5
- package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
- package/dist/sidebar/ChartBuilder.js +45 -102
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js +35 -77
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.js +9 -11
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/InputEditor.js +17 -24
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/PluginTableOptionsErrorBoundary.js +6 -11
- package/dist/sidebar/PluginTableOptionsErrorBoundary.js.map +1 -1
- package/dist/sidebar/RollupRows.js +72 -113
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js +16 -33
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.js +50 -74
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/TableSaver.js +18 -42
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js +25 -18
- package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.d.ts.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.js +3 -4
- package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js +45 -34
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +35 -24
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js +38 -21
- package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +27 -11
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +9 -11
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +48 -57
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js +35 -24
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js +26 -11
- package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/SearchItem.js +5 -7
- package/dist/sidebar/visibility-ordering-builder/SearchItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js +24 -18
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +166 -256
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +4 -11
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +28 -14
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +16 -19
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +1 -3
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +19 -29
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js +39 -52
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +18 -23
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +19 -15
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +16 -30
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +30 -39
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
- package/package.json +16 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Aggregations.js","names":["React","useCallback","useEffect","useMemo","useState","DragDropContext","classNames","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","vsEdit","dhWarningFilled","Log","DraggableItemList","DragUtils","Option","Select","Radio","RadioGroup","Button","AggregationOperation","AggregationUtils","SELECTABLE_OPTIONS","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","Aggregations","_ref","isRollup","settings","availablePlacements","onChange","onEdit","dh","aggregations","showOnTop","options","filter","option","some","aggregation","operation","MEDIAN","undefined","selectedOperation","setSelectedOperation","selectedRanges","setSelectedRanges","changeSettings","changedSettings","added","arguments","length","removed","_objectSpread","changeAggregations","newAggregations","changeShowOnTop","newShowOnTop","handleDragStart","debug","startDragging","handleDragEnd","_ref2","destination","source","stopDragging","destinationIndex","index","draggedItems","reorder","insertIndex","adjustDestinationIndex","newSelectedRanges","handleOperationChange","handleAdd","selected","invert","handleDeleteClicked","itemIndex","keep","remove","reduce","_ref3","keepSoFar","removeSoFar","push","handleAggregationSelectionChange","handleAggregationSelect","isRollupOperation","handleShowOnTopChange","value","setDefaultOperation","includes","renderAggregation","_ref4","item","isClone","selectedCount","text","badgeText","concat","className","isRollupProhibited","isEditable","children","icon","renderBadge","renderHandle","kind","tooltip","onClick","disabled","isOptionsShown","isAggregationsShown","map","type","id","marginStart","orientation","isDisabled","onDragStart","onDragEnd","itemCount","items","renderItem","offset","onSelectionChange","onSelect","isMultiSelect"],"sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { DragDropContext, type DropResult } from '@hello-pangea/dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhNewCircleLargeFilled,\n vsTrash,\n vsEdit,\n dhWarningFilled,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport {\n DraggableItemList,\n DragUtils,\n Option,\n Select,\n Radio,\n RadioGroup,\n Button,\n} from '@deephaven/components';\nimport type { DraggableRenderItemProps, Range } from '@deephaven/components';\nimport { type ModelIndex } from '@deephaven/grid';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport AggregationOperation from './AggregationOperation';\nimport AggregationUtils, { SELECTABLE_OPTIONS } from './AggregationUtils';\nimport './Aggregations.scss';\n\nconst log = Log.module('Aggregations');\n\nexport type Aggregation = {\n operation: AggregationOperation;\n selected: readonly string[];\n invert: boolean;\n};\n\nexport type AggregationSettings = {\n aggregations: readonly Aggregation[];\n showOnTop: boolean;\n};\n\nexport type AggregationsProps = {\n isRollup: boolean;\n availablePlacements?: ('top' | 'bottom')[];\n settings: AggregationSettings;\n onChange: (\n settings: AggregationSettings,\n added: AggregationOperation[],\n removed: AggregationOperation[]\n ) => void;\n onEdit: (aggregation: Aggregation) => void;\n dh: typeof DhType;\n};\n\nfunction Aggregations({\n isRollup,\n settings,\n availablePlacements = ['top', 'bottom'],\n onChange,\n onEdit,\n dh,\n}: AggregationsProps): JSX.Element {\n const { aggregations, showOnTop } = settings;\n const options = useMemo(\n () =>\n SELECTABLE_OPTIONS.filter(\n option =>\n !aggregations.some(aggregation => aggregation.operation === option) &&\n !(\n option === AggregationOperation.MEDIAN &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - MEDIAN is not defined in older version of Core\n dh.AggregationOperation.MEDIAN === undefined\n )\n ),\n [aggregations, dh]\n );\n const [selectedOperation, setSelectedOperation] = useState(options[0]);\n const [selectedRanges, setSelectedRanges] = useState<readonly Range[]>([]);\n const changeSettings = useCallback(\n (\n changedSettings: Partial<AggregationSettings>,\n added: AggregationOperation[] = [],\n removed: AggregationOperation[] = []\n ) => {\n onChange({ ...settings, ...changedSettings }, added, removed);\n },\n [onChange, settings]\n );\n const changeAggregations = useCallback(\n (\n newAggregations: readonly Aggregation[],\n added: AggregationOperation[] = [],\n removed: AggregationOperation[] = []\n ) => {\n changeSettings({ aggregations: newAggregations }, added, removed);\n },\n [changeSettings]\n );\n\n const changeShowOnTop = useCallback(\n (newShowOnTop: boolean) => {\n changeSettings({ showOnTop: newShowOnTop });\n },\n [changeSettings]\n );\n\n const handleDragStart = useCallback(() => {\n log.debug('handleDragStart');\n\n DragUtils.startDragging();\n }, []);\n\n const handleDragEnd = useCallback(\n ({ destination, source }: DropResult) => {\n log.debug('handleDragEnd', destination, source);\n\n DragUtils.stopDragging();\n\n if (destination == null) {\n return;\n }\n\n let destinationIndex = destination.index;\n if (source.index < destination.index) {\n destinationIndex += 1;\n }\n\n const newAggregations = [...aggregations];\n const draggedItems = DragUtils.reorder(\n newAggregations,\n selectedRanges,\n newAggregations,\n destinationIndex\n );\n const insertIndex = DragUtils.adjustDestinationIndex(\n destinationIndex,\n selectedRanges\n );\n const newSelectedRanges: Range[] = [\n [insertIndex, insertIndex + draggedItems.length - 1],\n ];\n changeAggregations(newAggregations);\n setSelectedRanges(newSelectedRanges);\n },\n [changeAggregations, aggregations, selectedRanges, setSelectedRanges]\n );\n\n const handleOperationChange = useCallback(\n (operation: string) => {\n setSelectedOperation(operation as AggregationOperation);\n },\n [setSelectedOperation]\n );\n\n const handleAdd = useCallback(() => {\n changeAggregations(\n [\n ...aggregations,\n { operation: selectedOperation, selected: [], invert: true },\n ],\n [selectedOperation]\n );\n }, [aggregations, selectedOperation, changeAggregations]);\n\n const handleDeleteClicked = useCallback(\n (itemIndex: ModelIndex) => {\n const [keep, remove] = aggregations.reduce(\n ([keepSoFar, removeSoFar], aggregation, index) => {\n if (index === itemIndex) {\n removeSoFar.push(aggregation.operation);\n } else {\n keepSoFar.push(aggregation);\n }\n return [keepSoFar, removeSoFar];\n },\n [[], []] as [Aggregation[], AggregationOperation[]]\n );\n changeAggregations(keep, [], remove);\n },\n [aggregations, changeAggregations]\n );\n\n const handleAggregationSelectionChange = useCallback(\n (newSelectedRanges: readonly Range[]) => {\n setSelectedRanges(newSelectedRanges);\n },\n [setSelectedRanges]\n );\n\n const handleAggregationSelect = useCallback(\n (itemIndex: number) => {\n const aggregation = aggregations[itemIndex];\n if (!AggregationUtils.isRollupOperation(aggregation.operation)) {\n onEdit(aggregation);\n }\n },\n [aggregations, onEdit]\n );\n\n const handleShowOnTopChange = useCallback(\n (value: string) => {\n changeShowOnTop(value === 'true');\n },\n [changeShowOnTop]\n );\n\n useEffect(\n function setDefaultOperation() {\n if (options.length > 0 && !options.includes(selectedOperation)) {\n setSelectedOperation(options[0]);\n }\n },\n [options, selectedOperation]\n );\n\n const renderAggregation = useCallback(\n ({\n item,\n itemIndex,\n isClone = false,\n selectedCount,\n }: DraggableRenderItemProps<Aggregation>) => {\n const text = item.operation;\n const badgeText = isClone ? `${selectedCount}` : undefined;\n const className = isClone ? 'item-list-item-clone' : undefined;\n const isRollupOperation = AggregationUtils.isRollupOperation(\n item.operation\n );\n const isRollupProhibited = AggregationUtils.isRollupProhibited(\n item.operation\n );\n const isEditable = !isClone && !isRollupOperation;\n return (\n <>\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">\n {text}\n {!isRollup && isRollupOperation && (\n <span className=\"small text-warning\">\n <FontAwesomeIcon icon={dhWarningFilled} /> Requires rollup\n </span>\n )}\n {isRollup && isRollupProhibited && (\n <span className=\"small text-warning\">\n <FontAwesomeIcon icon={dhWarningFilled} /> Not available on\n rollups\n </span>\n )}\n </span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n {!isClone && (\n <>\n <Button\n kind=\"ghost\"\n className=\"btn-edit\"\n icon={vsEdit}\n tooltip=\"Edit Columns\"\n onClick={() => onEdit(item)}\n disabled={!isEditable}\n />\n <Button\n kind=\"ghost\"\n className=\"btn-delete\"\n icon={vsTrash}\n tooltip=\"Delete Aggregation\"\n onClick={() => handleDeleteClicked(itemIndex)}\n />\n </>\n )}\n </>\n );\n },\n [handleDeleteClicked, onEdit, isRollup]\n );\n\n const isOptionsShown = options.length > 0;\n const isAggregationsShown = aggregations.length > 0;\n\n return (\n <div className=\"aggregations\">\n {isOptionsShown && (\n <div className=\"form-inline\">\n <Select onChange={handleOperationChange} value={selectedOperation}>\n {options.map(option => (\n <Option value={option} key={option}>\n {option}\n </Option>\n ))}\n </Select>\n <button\n type=\"button\"\n className=\"btn btn-link btn-add\"\n onClick={handleAdd}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Aggregation\n </button>\n </div>\n )}\n {isOptionsShown && isAggregationsShown && <hr />}\n {isAggregationsShown && (\n <>\n {!isRollup && (\n <div>\n <label id=\"placement-options-label\">Placement: </label>\n <RadioGroup\n aria-labelledby=\"placement-options-label\"\n marginStart=\"size-125\"\n orientation=\"horizontal\"\n onChange={handleShowOnTopChange}\n value={`${showOnTop}`}\n >\n <Radio\n value=\"true\"\n isDisabled={!availablePlacements.includes('top')}\n >\n Top\n </Radio>\n <Radio\n value=\"false\"\n isDisabled={!availablePlacements.includes('bottom')}\n >\n Bottom\n </Radio>\n </RadioGroup>\n </div>\n )}\n <DragDropContext\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <DraggableItemList<Aggregation>\n className=\"selected-aggregations\"\n itemCount={aggregations.length}\n items={aggregations}\n renderItem={renderAggregation}\n offset={0}\n onSelectionChange={handleAggregationSelectionChange}\n onSelect={handleAggregationSelect}\n selectedRanges={selectedRanges}\n isMultiSelect\n />\n </DragDropContext>\n </>\n )}\n </div>\n );\n}\n\nexport default Aggregations;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Aggregations.js","names":["React","useCallback","useEffect","useMemo","useState","DragDropContext","classNames","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","vsEdit","dhWarningFilled","Log","DraggableItemList","DragUtils","Option","Select","Radio","RadioGroup","Button","AggregationOperation","AggregationUtils","SELECTABLE_OPTIONS","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","Aggregations","_ref","isRollup","settings","_ref$availablePlaceme","availablePlacements","onChange","onEdit","dh","aggregations","showOnTop","options","filter","option","some","aggregation","operation","MEDIAN","undefined","_useState","_useState2","_slicedToArray","selectedOperation","setSelectedOperation","_useState3","_useState4","selectedRanges","setSelectedRanges","changeSettings","changedSettings","added","arguments","length","removed","_objectSpread","changeAggregations","newAggregations","changeShowOnTop","newShowOnTop","handleDragStart","debug","startDragging","handleDragEnd","_ref2","destination","source","stopDragging","destinationIndex","index","draggedItems","reorder","insertIndex","adjustDestinationIndex","newSelectedRanges","handleOperationChange","handleAdd","selected","invert","handleDeleteClicked","itemIndex","_aggregations$reduce","reduce","_ref3","_ref4","keepSoFar","removeSoFar","push","_aggregations$reduce2","keep","remove","handleAggregationSelectionChange","handleAggregationSelect","isRollupOperation","handleShowOnTopChange","value","setDefaultOperation","includes","renderAggregation","_ref5","item","_ref5$isClone","isClone","selectedCount","text","badgeText","concat","className","isRollupProhibited","isEditable","children","icon","renderBadge","renderHandle","kind","tooltip","onClick","disabled","isOptionsShown","isAggregationsShown","map","type","id","marginStart","orientation","isDisabled","onDragStart","onDragEnd","itemCount","items","renderItem","offset","onSelectionChange","onSelect","isMultiSelect"],"sources":["../../../src/sidebar/aggregations/Aggregations.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { DragDropContext, type DropResult } from '@hello-pangea/dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n dhNewCircleLargeFilled,\n vsTrash,\n vsEdit,\n dhWarningFilled,\n} from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport {\n DraggableItemList,\n DragUtils,\n Option,\n Select,\n Radio,\n RadioGroup,\n Button,\n} from '@deephaven/components';\nimport type { DraggableRenderItemProps, Range } from '@deephaven/components';\nimport { type ModelIndex } from '@deephaven/grid';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport AggregationOperation from './AggregationOperation';\nimport AggregationUtils, { SELECTABLE_OPTIONS } from './AggregationUtils';\nimport './Aggregations.scss';\n\nconst log = Log.module('Aggregations');\n\nexport type Aggregation = {\n operation: AggregationOperation;\n selected: readonly string[];\n invert: boolean;\n};\n\nexport type AggregationSettings = {\n aggregations: readonly Aggregation[];\n showOnTop: boolean;\n};\n\nexport type AggregationsProps = {\n isRollup: boolean;\n availablePlacements?: ('top' | 'bottom')[];\n settings: AggregationSettings;\n onChange: (\n settings: AggregationSettings,\n added: AggregationOperation[],\n removed: AggregationOperation[]\n ) => void;\n onEdit: (aggregation: Aggregation) => void;\n dh: typeof DhType;\n};\n\nfunction Aggregations({\n isRollup,\n settings,\n availablePlacements = ['top', 'bottom'],\n onChange,\n onEdit,\n dh,\n}: AggregationsProps): JSX.Element {\n const { aggregations, showOnTop } = settings;\n const options = useMemo(\n () =>\n SELECTABLE_OPTIONS.filter(\n option =>\n !aggregations.some(aggregation => aggregation.operation === option) &&\n !(\n option === AggregationOperation.MEDIAN &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - MEDIAN is not defined in older version of Core\n dh.AggregationOperation.MEDIAN === undefined\n )\n ),\n [aggregations, dh]\n );\n const [selectedOperation, setSelectedOperation] = useState(options[0]);\n const [selectedRanges, setSelectedRanges] = useState<readonly Range[]>([]);\n const changeSettings = useCallback(\n (\n changedSettings: Partial<AggregationSettings>,\n added: AggregationOperation[] = [],\n removed: AggregationOperation[] = []\n ) => {\n onChange({ ...settings, ...changedSettings }, added, removed);\n },\n [onChange, settings]\n );\n const changeAggregations = useCallback(\n (\n newAggregations: readonly Aggregation[],\n added: AggregationOperation[] = [],\n removed: AggregationOperation[] = []\n ) => {\n changeSettings({ aggregations: newAggregations }, added, removed);\n },\n [changeSettings]\n );\n\n const changeShowOnTop = useCallback(\n (newShowOnTop: boolean) => {\n changeSettings({ showOnTop: newShowOnTop });\n },\n [changeSettings]\n );\n\n const handleDragStart = useCallback(() => {\n log.debug('handleDragStart');\n\n DragUtils.startDragging();\n }, []);\n\n const handleDragEnd = useCallback(\n ({ destination, source }: DropResult) => {\n log.debug('handleDragEnd', destination, source);\n\n DragUtils.stopDragging();\n\n if (destination == null) {\n return;\n }\n\n let destinationIndex = destination.index;\n if (source.index < destination.index) {\n destinationIndex += 1;\n }\n\n const newAggregations = [...aggregations];\n const draggedItems = DragUtils.reorder(\n newAggregations,\n selectedRanges,\n newAggregations,\n destinationIndex\n );\n const insertIndex = DragUtils.adjustDestinationIndex(\n destinationIndex,\n selectedRanges\n );\n const newSelectedRanges: Range[] = [\n [insertIndex, insertIndex + draggedItems.length - 1],\n ];\n changeAggregations(newAggregations);\n setSelectedRanges(newSelectedRanges);\n },\n [changeAggregations, aggregations, selectedRanges, setSelectedRanges]\n );\n\n const handleOperationChange = useCallback(\n (operation: string) => {\n setSelectedOperation(operation as AggregationOperation);\n },\n [setSelectedOperation]\n );\n\n const handleAdd = useCallback(() => {\n changeAggregations(\n [\n ...aggregations,\n { operation: selectedOperation, selected: [], invert: true },\n ],\n [selectedOperation]\n );\n }, [aggregations, selectedOperation, changeAggregations]);\n\n const handleDeleteClicked = useCallback(\n (itemIndex: ModelIndex) => {\n const [keep, remove] = aggregations.reduce(\n ([keepSoFar, removeSoFar], aggregation, index) => {\n if (index === itemIndex) {\n removeSoFar.push(aggregation.operation);\n } else {\n keepSoFar.push(aggregation);\n }\n return [keepSoFar, removeSoFar];\n },\n [[], []] as [Aggregation[], AggregationOperation[]]\n );\n changeAggregations(keep, [], remove);\n },\n [aggregations, changeAggregations]\n );\n\n const handleAggregationSelectionChange = useCallback(\n (newSelectedRanges: readonly Range[]) => {\n setSelectedRanges(newSelectedRanges);\n },\n [setSelectedRanges]\n );\n\n const handleAggregationSelect = useCallback(\n (itemIndex: number) => {\n const aggregation = aggregations[itemIndex];\n if (!AggregationUtils.isRollupOperation(aggregation.operation)) {\n onEdit(aggregation);\n }\n },\n [aggregations, onEdit]\n );\n\n const handleShowOnTopChange = useCallback(\n (value: string) => {\n changeShowOnTop(value === 'true');\n },\n [changeShowOnTop]\n );\n\n useEffect(\n function setDefaultOperation() {\n if (options.length > 0 && !options.includes(selectedOperation)) {\n setSelectedOperation(options[0]);\n }\n },\n [options, selectedOperation]\n );\n\n const renderAggregation = useCallback(\n ({\n item,\n itemIndex,\n isClone = false,\n selectedCount,\n }: DraggableRenderItemProps<Aggregation>) => {\n const text = item.operation;\n const badgeText = isClone ? `${selectedCount}` : undefined;\n const className = isClone ? 'item-list-item-clone' : undefined;\n const isRollupOperation = AggregationUtils.isRollupOperation(\n item.operation\n );\n const isRollupProhibited = AggregationUtils.isRollupProhibited(\n item.operation\n );\n const isEditable = !isClone && !isRollupOperation;\n return (\n <>\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">\n {text}\n {!isRollup && isRollupOperation && (\n <span className=\"small text-warning\">\n <FontAwesomeIcon icon={dhWarningFilled} /> Requires rollup\n </span>\n )}\n {isRollup && isRollupProhibited && (\n <span className=\"small text-warning\">\n <FontAwesomeIcon icon={dhWarningFilled} /> Not available on\n rollups\n </span>\n )}\n </span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n {!isClone && (\n <>\n <Button\n kind=\"ghost\"\n className=\"btn-edit\"\n icon={vsEdit}\n tooltip=\"Edit Columns\"\n onClick={() => onEdit(item)}\n disabled={!isEditable}\n />\n <Button\n kind=\"ghost\"\n className=\"btn-delete\"\n icon={vsTrash}\n tooltip=\"Delete Aggregation\"\n onClick={() => handleDeleteClicked(itemIndex)}\n />\n </>\n )}\n </>\n );\n },\n [handleDeleteClicked, onEdit, isRollup]\n );\n\n const isOptionsShown = options.length > 0;\n const isAggregationsShown = aggregations.length > 0;\n\n return (\n <div className=\"aggregations\">\n {isOptionsShown && (\n <div className=\"form-inline\">\n <Select onChange={handleOperationChange} value={selectedOperation}>\n {options.map(option => (\n <Option value={option} key={option}>\n {option}\n </Option>\n ))}\n </Select>\n <button\n type=\"button\"\n className=\"btn btn-link btn-add\"\n onClick={handleAdd}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Aggregation\n </button>\n </div>\n )}\n {isOptionsShown && isAggregationsShown && <hr />}\n {isAggregationsShown && (\n <>\n {!isRollup && (\n <div>\n <label id=\"placement-options-label\">Placement: </label>\n <RadioGroup\n aria-labelledby=\"placement-options-label\"\n marginStart=\"size-125\"\n orientation=\"horizontal\"\n onChange={handleShowOnTopChange}\n value={`${showOnTop}`}\n >\n <Radio\n value=\"true\"\n isDisabled={!availablePlacements.includes('top')}\n >\n Top\n </Radio>\n <Radio\n value=\"false\"\n isDisabled={!availablePlacements.includes('bottom')}\n >\n Bottom\n </Radio>\n </RadioGroup>\n </div>\n )}\n <DragDropContext\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <DraggableItemList<Aggregation>\n className=\"selected-aggregations\"\n itemCount={aggregations.length}\n items={aggregations}\n renderItem={renderAggregation}\n offset={0}\n onSelectionChange={handleAggregationSelectionChange}\n onSelect={handleAggregationSelect}\n selectedRanges={selectedRanges}\n isMultiSelect\n />\n </DragDropContext>\n </>\n )}\n </div>\n );\n}\n\nexport default Aggregations;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
1
7
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
2
8
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
3
9
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
@@ -13,10 +19,9 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
13
19
|
var log = Log.module('ColumnFormatEditor');
|
|
14
20
|
var DEFAULT_CALLBACK = () => undefined;
|
|
15
21
|
function makeDefaultConfig(columns) {
|
|
16
|
-
var
|
|
17
|
-
type,
|
|
18
|
-
name
|
|
19
|
-
} = columns[0];
|
|
22
|
+
var _columns$ = columns[0],
|
|
23
|
+
type = _columns$.type,
|
|
24
|
+
name = _columns$.name;
|
|
20
25
|
var column = {
|
|
21
26
|
type,
|
|
22
27
|
name
|
|
@@ -29,21 +34,31 @@ function makeDefaultConfig(columns) {
|
|
|
29
34
|
}
|
|
30
35
|
function ColumnFormatEditor(props) {
|
|
31
36
|
var _columns$find;
|
|
32
|
-
var
|
|
33
|
-
|
|
34
|
-
config = makeDefaultConfig(columns),
|
|
35
|
-
dh,
|
|
36
|
-
onChange =
|
|
37
|
-
|
|
38
|
-
var
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
37
|
+
var columns = props.columns,
|
|
38
|
+
_props$config = props.config,
|
|
39
|
+
config = _props$config === void 0 ? makeDefaultConfig(columns) : _props$config,
|
|
40
|
+
dh = props.dh,
|
|
41
|
+
_props$onChange = props.onChange,
|
|
42
|
+
onChange = _props$onChange === void 0 ? DEFAULT_CALLBACK : _props$onChange;
|
|
43
|
+
var _useState = useState((_columns$find = columns.find(c => c.name === config.column.name && c.type === config.column.type)) !== null && _columns$find !== void 0 ? _columns$find : columns[0]),
|
|
44
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
45
|
+
selectedColumn = _useState2[0],
|
|
46
|
+
setColumn = _useState2[1];
|
|
47
|
+
var _useState3 = useState(getConditionConfig(config)),
|
|
48
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
49
|
+
conditionConfig = _useState4[0],
|
|
50
|
+
setConditionConfig = _useState4[1];
|
|
51
|
+
var _useState5 = useState(false),
|
|
52
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
53
|
+
conditionValid = _useState6[0],
|
|
54
|
+
setConditionValid = _useState6[1];
|
|
55
|
+
var _useState7 = useState(config.style),
|
|
56
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
57
|
+
selectedStyle = _useState8[0],
|
|
58
|
+
setStyle = _useState8[1];
|
|
42
59
|
var handleColumnChange = useCallback(value => {
|
|
43
60
|
var newColumn = columns.find(_ref => {
|
|
44
|
-
var
|
|
45
|
-
name
|
|
46
|
-
} = _ref;
|
|
61
|
+
var name = _ref.name;
|
|
47
62
|
return name === value;
|
|
48
63
|
});
|
|
49
64
|
if (newColumn !== undefined) {
|
|
@@ -75,10 +90,8 @@ function ColumnFormatEditor(props) {
|
|
|
75
90
|
log.debug('Style is not selected, invalidating update.');
|
|
76
91
|
isValid = false;
|
|
77
92
|
}
|
|
78
|
-
var
|
|
79
|
-
|
|
80
|
-
name
|
|
81
|
-
} = selectedColumn;
|
|
93
|
+
var type = selectedColumn.type,
|
|
94
|
+
name = selectedColumn.name;
|
|
82
95
|
var column = {
|
|
83
96
|
type,
|
|
84
97
|
name
|
|
@@ -89,9 +102,7 @@ function ColumnFormatEditor(props) {
|
|
|
89
102
|
}, conditionConfig), isValid);
|
|
90
103
|
}, [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]);
|
|
91
104
|
var columnNames = useMemo(() => columns.map(_ref2 => {
|
|
92
|
-
var
|
|
93
|
-
name
|
|
94
|
-
} = _ref2;
|
|
105
|
+
var name = _ref2.name;
|
|
95
106
|
return name;
|
|
96
107
|
}), [columns]);
|
|
97
108
|
return /*#__PURE__*/_jsxs("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnFormatEditor.js","names":["React","useCallback","useEffect","useMemo","useState","Log","ComboBox","getDefaultConditionConfigForType","getConditionConfig","getDefaultStyleConfig","FormatStyleType","ConditionEditor","StyleEditor","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","DEFAULT_CALLBACK","undefined","makeDefaultConfig","columns","type","name","column","config","_objectSpread","style","ColumnFormatEditor","props","_columns$find","dh","onChange","
|
|
1
|
+
{"version":3,"file":"ColumnFormatEditor.js","names":["React","useCallback","useEffect","useMemo","useState","Log","ComboBox","getDefaultConditionConfigForType","getConditionConfig","getDefaultStyleConfig","FormatStyleType","ConditionEditor","StyleEditor","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","DEFAULT_CALLBACK","undefined","makeDefaultConfig","columns","_columns$","type","name","column","config","_objectSpread","style","ColumnFormatEditor","props","_columns$find","_props$config","dh","_props$onChange","onChange","_useState","find","c","_useState2","_slicedToArray","selectedColumn","setColumn","_useState3","_useState4","conditionConfig","setConditionConfig","_useState5","_useState6","conditionValid","setConditionValid","_useState7","_useState8","selectedStyle","setStyle","handleColumnChange","value","newColumn","_ref","error","concat","handleConditionChange","updatedConditionConfig","isValid","debug","handleStyleChange","updatedStyleConfig","updateColumnFormat","NO_FORMATTING","columnNames","map","_ref2","className","children","defaultSelectedKey"],"sources":["../../../src/sidebar/conditional-formatting/ColumnFormatEditor.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { ComboBox, type ItemKey } from '@deephaven/components';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport {\n type BaseFormatConfig,\n type ChangeCallback,\n getDefaultConditionConfigForType,\n getConditionConfig,\n getDefaultStyleConfig,\n type ModelColumn,\n FormatStyleType,\n type ConditionConfig,\n type FormatStyleConfig,\n} from './ConditionalFormattingUtils';\nimport ConditionEditor from './ConditionEditor';\nimport StyleEditor from './StyleEditor';\n\nconst log = Log.module('ColumnFormatEditor');\n\nexport interface ColumnFormatEditorProps {\n columns: ModelColumn[];\n config?: BaseFormatConfig;\n dh: typeof DhType;\n onChange?: ChangeCallback;\n}\n\nconst DEFAULT_CALLBACK = (): void => undefined;\n\nfunction makeDefaultConfig(columns: ModelColumn[]): BaseFormatConfig {\n const { type, name } = columns[0];\n const column = { type, name };\n const config = {\n column,\n style: getDefaultStyleConfig(),\n ...getDefaultConditionConfigForType(type),\n };\n return config;\n}\n\nfunction ColumnFormatEditor(props: ColumnFormatEditorProps): JSX.Element {\n const {\n columns,\n config = makeDefaultConfig(columns),\n dh,\n onChange = DEFAULT_CALLBACK,\n } = props;\n\n const [selectedColumn, setColumn] = useState(\n columns.find(\n c => c.name === config.column.name && c.type === config.column.type\n ) ?? columns[0]\n );\n const [conditionConfig, setConditionConfig] = useState(\n getConditionConfig(config)\n );\n const [conditionValid, setConditionValid] = useState(false);\n const [selectedStyle, setStyle] = useState(config.style);\n\n const handleColumnChange = useCallback(\n (value: ItemKey | null) => {\n const newColumn = columns.find(({ name }) => name === value);\n if (newColumn !== undefined) {\n setColumn(newColumn);\n if (selectedColumn.type !== newColumn.type) {\n setConditionConfig(getDefaultConditionConfigForType(newColumn.type));\n setConditionValid(false);\n }\n } else {\n log.error(`Column ${value} not found.`);\n }\n },\n [columns, selectedColumn]\n );\n\n const handleConditionChange = useCallback(\n (updatedConditionConfig: ConditionConfig, isValid: boolean) => {\n log.debug('handleConditionChange', updatedConditionConfig, isValid);\n setConditionConfig(updatedConditionConfig);\n setConditionValid(isValid);\n },\n []\n );\n\n const handleStyleChange = useCallback(\n (updatedStyleConfig: FormatStyleConfig) => {\n log.debug('handleStyleChange', updatedStyleConfig);\n setStyle(updatedStyleConfig);\n },\n []\n );\n\n useEffect(\n function updateColumnFormat() {\n let isValid = conditionValid;\n\n if (selectedColumn === undefined) {\n log.debug('Column is not selected, invalidating update.');\n isValid = false;\n }\n if (\n selectedStyle === undefined ||\n selectedStyle.type === FormatStyleType.NO_FORMATTING\n ) {\n log.debug('Style is not selected, invalidating update.');\n isValid = false;\n }\n\n const { type, name } = selectedColumn;\n const column = { type, name };\n onChange(\n {\n column,\n style: selectedStyle,\n ...conditionConfig,\n },\n isValid\n );\n },\n [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]\n );\n\n const columnNames = useMemo(() => columns.map(({ name }) => name), [columns]);\n\n return (\n <div className=\"conditional-rule-editor form\">\n <div className=\"mb-2\">\n <label className=\"mb-0\">Format Cell If</label>\n <ComboBox\n aria-label=\"Select column to format\"\n defaultSelectedKey={selectedColumn?.name}\n onChange={handleColumnChange}\n >\n {columnNames}\n </ComboBox>\n </div>\n\n {selectedColumn !== undefined && (\n <>\n <ConditionEditor\n dh={dh}\n column={selectedColumn}\n config={conditionConfig}\n onChange={handleConditionChange}\n />\n <StyleEditor config={selectedStyle} onChange={handleStyleChange} />\n </>\n )}\n </div>\n );\n}\n\nexport default ColumnFormatEditor;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
1
7
|
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
2
8
|
import classNames from 'classnames';
|
|
3
9
|
import { TableUtils } from '@deephaven/jsapi-utils';
|
|
@@ -138,19 +144,36 @@ function getCharInputs(selectedCondition, handleValueChange, isInvalid, conditio
|
|
|
138
144
|
}
|
|
139
145
|
}
|
|
140
146
|
function ConditionEditor(props) {
|
|
141
|
-
var
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
onChange = DEFAULT_CALLBACK
|
|
146
|
-
} = props;
|
|
147
|
+
var column = props.column,
|
|
148
|
+
config = props.config,
|
|
149
|
+
dh = props.dh,
|
|
150
|
+
_props$onChange = props.onChange,
|
|
151
|
+
onChange = _props$onChange === void 0 ? DEFAULT_CALLBACK : _props$onChange;
|
|
147
152
|
var selectedColumnType = column.type;
|
|
148
|
-
var
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
var
|
|
153
|
-
|
|
153
|
+
var _useState = useState(selectedColumnType),
|
|
154
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
155
|
+
prevColumnType = _useState2[0],
|
|
156
|
+
setPrevColumnType = _useState2[1];
|
|
157
|
+
var _useState3 = useState(config.condition),
|
|
158
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
159
|
+
selectedCondition = _useState4[0],
|
|
160
|
+
setCondition = _useState4[1];
|
|
161
|
+
var _useState5 = useState(config.value),
|
|
162
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
163
|
+
conditionValue = _useState6[0],
|
|
164
|
+
setValue = _useState6[1];
|
|
165
|
+
var _useState7 = useState(config.start),
|
|
166
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
167
|
+
startValue = _useState8[0],
|
|
168
|
+
setStartValue = _useState8[1];
|
|
169
|
+
var _useState9 = useState(config.end),
|
|
170
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
171
|
+
endValue = _useState0[0],
|
|
172
|
+
setEndValue = _useState0[1];
|
|
173
|
+
var _useState1 = useState(true),
|
|
174
|
+
_useState10 = _slicedToArray(_useState1, 2),
|
|
175
|
+
isValid = _useState10[0],
|
|
176
|
+
setIsValid = _useState10[1];
|
|
154
177
|
if (selectedColumnType !== prevColumnType) {
|
|
155
178
|
// Column type changed, reset condition and value fields
|
|
156
179
|
setCondition(getDefaultConditionForType(selectedColumnType));
|
|
@@ -184,23 +207,17 @@ function ConditionEditor(props) {
|
|
|
184
207
|
setCondition(value);
|
|
185
208
|
}, []);
|
|
186
209
|
var handleValueChange = useCallback(e => {
|
|
187
|
-
var
|
|
188
|
-
value
|
|
189
|
-
} = e.target;
|
|
210
|
+
var value = e.target.value;
|
|
190
211
|
log.debug('handleValueChange', value);
|
|
191
212
|
setValue(value);
|
|
192
213
|
}, []);
|
|
193
214
|
var handleStartValueChange = useCallback(e => {
|
|
194
|
-
var
|
|
195
|
-
value
|
|
196
|
-
} = e.target;
|
|
215
|
+
var value = e.target.value;
|
|
197
216
|
log.debug('handleStartValueChange', value);
|
|
198
217
|
setStartValue(value);
|
|
199
218
|
}, []);
|
|
200
219
|
var handleEndValueChange = useCallback(e => {
|
|
201
|
-
var
|
|
202
|
-
value
|
|
203
|
-
} = e.target;
|
|
220
|
+
var value = e.target.value;
|
|
204
221
|
log.debug('handleEndValueChange', value);
|
|
205
222
|
setEndValue(value);
|
|
206
223
|
}, []);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionEditor.js","names":["React","useCallback","useEffect","useMemo","useState","classNames","TableUtils","Log","Select","StringCondition","DateCondition","getLabelForNumberCondition","getLabelForDateCondition","getLabelForStringCondition","NumberCondition","getDefaultConditionForType","getLabelForBooleanCondition","BooleanCondition","CharCondition","getLabelForCharCondition","isDateConditionValid","getDefaultValueForType","jsx","_jsx","jsxs","_jsxs","log","module","DEFAULT_CALLBACK","undefined","numberConditionOptions","IS_EQUAL","IS_NOT_EQUAL","IS_BETWEEN","GREATER_THAN","GREATER_THAN_OR_EQUAL","LESS_THAN","LESS_THAN_OR_EQUAL","IS_NULL","IS_NOT_NULL","map","option","value","children","stringConditions","IS_EXACTLY","IS_NOT_EXACTLY","CONTAINS","DOES_NOT_CONTAIN","STARTS_WITH","ENDS_WITH","dateConditions","IS_BEFORE","IS_BEFORE_OR_EQUAL","IS_AFTER","IS_AFTER_OR_EQUAL","booleanConditions","IS_TRUE","IS_FALSE","charConditions","isNumberConditionValid","condition","startValue","endValue","Number","isNaN","parseFloat","getNumberInputs","selectedCondition","handleValueChange","handleStartValueChange","handleEndValueChange","isInvalid","conditionValue","type","className","placeholder","onChange","getStringInputs","getDateInputs","getBooleanInputs","getCharInputs","maxLength","ConditionEditor","props","column","config","dh","selectedColumnType","prevColumnType","setPrevColumnType","setCondition","setValue","setStartValue","start","setEndValue","end","isValid","setIsValid","conditions","isNumberType","isCharType","isStringType","isDateType","isBooleanType","handleConditionChange","debug","e","target","changeCondition","isConditionValid","conditionInputs","hasInvalidValue","showInvalid"],"sources":["../../../src/sidebar/conditional-formatting/ConditionEditor.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport classNames from 'classnames';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { Select } from '@deephaven/components';\nimport {\n StringCondition,\n DateCondition,\n getLabelForNumberCondition,\n getLabelForDateCondition,\n getLabelForStringCondition,\n NumberCondition,\n type ModelColumn,\n type ConditionConfig,\n getDefaultConditionForType,\n getLabelForBooleanCondition,\n BooleanCondition,\n CharCondition,\n type Condition,\n getLabelForCharCondition,\n isDateConditionValid,\n getDefaultValueForType,\n} from './ConditionalFormattingUtils';\n\nconst log = Log.module('ConditionEditor');\n\nexport interface ConditionEditorProps {\n dh: typeof DhType;\n column: ModelColumn;\n config: ConditionConfig;\n onChange?: (config: ConditionConfig, isValid: boolean) => void;\n}\n\nconst DEFAULT_CALLBACK = (): void => undefined;\n\nconst numberConditionOptions = [\n NumberCondition.IS_EQUAL,\n NumberCondition.IS_NOT_EQUAL,\n NumberCondition.IS_BETWEEN,\n NumberCondition.GREATER_THAN,\n NumberCondition.GREATER_THAN_OR_EQUAL,\n NumberCondition.LESS_THAN,\n NumberCondition.LESS_THAN_OR_EQUAL,\n NumberCondition.IS_NULL,\n NumberCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForNumberCondition(option)}\n </option>\n));\n\nconst stringConditions = [\n StringCondition.IS_EXACTLY,\n StringCondition.IS_NOT_EXACTLY,\n StringCondition.CONTAINS,\n StringCondition.DOES_NOT_CONTAIN,\n StringCondition.STARTS_WITH,\n StringCondition.ENDS_WITH,\n StringCondition.IS_NULL,\n StringCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForStringCondition(option)}\n </option>\n));\n\nconst dateConditions = [\n DateCondition.IS_EXACTLY,\n DateCondition.IS_NOT_EXACTLY,\n DateCondition.IS_BEFORE,\n DateCondition.IS_BEFORE_OR_EQUAL,\n DateCondition.IS_AFTER,\n DateCondition.IS_AFTER_OR_EQUAL,\n DateCondition.IS_NULL,\n DateCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForDateCondition(option)}\n </option>\n));\n\nconst booleanConditions = [\n BooleanCondition.IS_TRUE,\n BooleanCondition.IS_FALSE,\n BooleanCondition.IS_NULL,\n BooleanCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForBooleanCondition(option)}\n </option>\n));\n\nconst charConditions = [\n CharCondition.IS_EQUAL,\n CharCondition.IS_NOT_EQUAL,\n CharCondition.IS_NULL,\n CharCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForCharCondition(option)}\n </option>\n));\n\nfunction isNumberConditionValid(\n condition: NumberCondition,\n value?: string,\n startValue?: string,\n endValue?: string\n): boolean {\n if (\n condition === NumberCondition.IS_NULL ||\n condition === NumberCondition.IS_NOT_NULL\n ) {\n return true;\n }\n if (\n condition === NumberCondition.IS_BETWEEN &&\n startValue != null &&\n startValue !== '' &&\n !Number.isNaN(Number.parseFloat(startValue)) &&\n endValue != null &&\n endValue !== '' &&\n !Number.isNaN(Number.parseFloat(endValue))\n ) {\n return true;\n }\n if (\n condition !== NumberCondition.IS_BETWEEN &&\n value !== undefined &&\n value !== '' &&\n !Number.isNaN(Number.parseFloat(value))\n ) {\n return true;\n }\n return false;\n}\n\nfunction getNumberInputs(\n selectedCondition: NumberCondition,\n handleValueChange: (e: React.ChangeEvent<HTMLInputElement>) => void,\n handleStartValueChange: (e: React.ChangeEvent<HTMLInputElement>) => void,\n handleEndValueChange: (e: React.ChangeEvent<HTMLInputElement>) => void,\n isInvalid: boolean,\n conditionValue?: string,\n startValue?: string,\n endValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case NumberCondition.IS_EQUAL:\n case NumberCondition.IS_NOT_EQUAL:\n case NumberCondition.GREATER_THAN:\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n case NumberCondition.LESS_THAN:\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return (\n <input\n type=\"number\"\n className={classNames('form-control', { 'is-invalid': isInvalid })}\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n case NumberCondition.IS_BETWEEN:\n return (\n <div className=\"d-flex flex-row\">\n <input\n type=\"number\"\n className={classNames('form-control', 'd-flex', 'mr-2', {\n 'is-invalid': isInvalid,\n })}\n placeholder=\"Start value\"\n value={startValue ?? ''}\n onChange={handleStartValueChange}\n />\n <input\n type=\"number\"\n className={classNames('form-control', 'd-flex', {\n 'is-invalid': isInvalid,\n })}\n placeholder=\"End value\"\n value={endValue ?? ''}\n onChange={handleEndValueChange}\n />\n </div>\n );\n case NumberCondition.IS_NULL:\n case NumberCondition.IS_NOT_NULL:\n return null;\n }\n}\n\nfunction getStringInputs(\n selectedCondition: StringCondition,\n handleValueChange: (e: React.ChangeEvent<HTMLInputElement>) => void,\n isInvalid: boolean,\n conditionValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case StringCondition.IS_NULL:\n case StringCondition.IS_NOT_NULL:\n return null;\n default:\n return (\n <input\n type=\"text\"\n className={classNames('form-control', { 'is-invalid': isInvalid })}\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n }\n}\n\nfunction getDateInputs(\n selectedCondition: DateCondition,\n handleValueChange: (e: React.ChangeEvent<HTMLInputElement>) => void,\n isInvalid: boolean,\n conditionValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case DateCondition.IS_NULL:\n case DateCondition.IS_NOT_NULL:\n return null;\n default:\n return (\n <input\n type=\"text\"\n className={classNames('form-control', { 'is-invalid': isInvalid })}\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n }\n}\n\nfunction getBooleanInputs(): null {\n return null;\n}\n\nfunction getCharInputs(\n selectedCondition: CharCondition,\n handleValueChange: (e: React.ChangeEvent<HTMLInputElement>) => void,\n isInvalid: boolean,\n conditionValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case CharCondition.IS_NULL:\n case CharCondition.IS_NOT_NULL:\n return null;\n default:\n return (\n <input\n type=\"text\"\n className={classNames('form-control', { 'is-invalid': isInvalid })}\n maxLength={1}\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n }\n}\n\nfunction ConditionEditor(props: ConditionEditorProps): JSX.Element {\n const { column, config, dh, onChange = DEFAULT_CALLBACK } = props;\n const selectedColumnType = column.type;\n const [prevColumnType, setPrevColumnType] = useState(selectedColumnType);\n const [selectedCondition, setCondition] = useState(config.condition);\n const [conditionValue, setValue] = useState(config.value);\n const [startValue, setStartValue] = useState(config.start);\n const [endValue, setEndValue] = useState(config.end);\n const [isValid, setIsValid] = useState(true);\n\n if (selectedColumnType !== prevColumnType) {\n // Column type changed, reset condition and value fields\n setCondition(getDefaultConditionForType(selectedColumnType));\n setValue(getDefaultValueForType(selectedColumnType));\n setStartValue(undefined);\n setEndValue(undefined);\n setPrevColumnType(selectedColumnType);\n }\n\n const conditions = useMemo(() => {\n if (selectedColumnType === undefined) {\n return [];\n }\n if (TableUtils.isNumberType(selectedColumnType)) {\n return numberConditionOptions;\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return charConditions;\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return stringConditions;\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return dateConditions;\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return booleanConditions;\n }\n }, [selectedColumnType]);\n\n const handleConditionChange = useCallback((value: string) => {\n log.debug('handleConditionChange', value);\n setCondition(value as Condition);\n }, []);\n\n const handleValueChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = e.target;\n log.debug('handleValueChange', value);\n setValue(value);\n },\n []\n );\n\n const handleStartValueChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = e.target;\n log.debug('handleStartValueChange', value);\n setStartValue(value);\n },\n []\n );\n\n const handleEndValueChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = e.target;\n log.debug('handleEndValueChange', value);\n setEndValue(value);\n },\n []\n );\n\n useEffect(\n function changeCondition() {\n let isConditionValid = true;\n\n if (selectedCondition === undefined) {\n log.debug(\n 'Unable to create formatting rule. Condition is not selected.'\n );\n isConditionValid = false;\n } else if (\n TableUtils.isNumberType(column.type) &&\n !isNumberConditionValid(\n selectedCondition as NumberCondition,\n conditionValue,\n startValue,\n endValue\n )\n ) {\n log.debug(\n 'Unable to create formatting rule. Invalid value',\n conditionValue\n );\n isConditionValid = false;\n } else if (\n TableUtils.isDateType(column.type) &&\n !isDateConditionValid(\n dh,\n selectedCondition as DateCondition,\n conditionValue\n )\n ) {\n log.debug(\n 'Unable to create formatting rule. Invalid date condition',\n conditionValue\n );\n isConditionValid = false;\n }\n\n setIsValid(isConditionValid);\n onChange(\n {\n condition: selectedCondition,\n value: conditionValue,\n start: startValue,\n end: endValue,\n },\n isConditionValid\n );\n },\n [\n onChange,\n column.type,\n dh,\n selectedCondition,\n conditionValue,\n startValue,\n endValue,\n ]\n );\n\n const conditionInputs = useMemo(() => {\n if (selectedColumnType === undefined) {\n // Column not selected\n return null;\n }\n\n // Show invalid state only when there's a non-empty value that fails validation\n const hasInvalidValue =\n !isValid && conditionValue !== undefined && conditionValue !== '';\n\n if (TableUtils.isNumberType(selectedColumnType)) {\n // For IS_BETWEEN, show invalid on each field only if that field has a value\n const showInvalid =\n selectedCondition === NumberCondition.IS_BETWEEN\n ? !isValid &&\n ((startValue !== undefined && startValue !== '') ||\n (endValue !== undefined && endValue !== ''))\n : hasInvalidValue;\n\n return getNumberInputs(\n selectedCondition as NumberCondition,\n handleValueChange,\n handleStartValueChange,\n handleEndValueChange,\n showInvalid,\n conditionValue,\n startValue,\n endValue\n );\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return getCharInputs(\n selectedCondition as CharCondition,\n handleValueChange,\n hasInvalidValue,\n conditionValue\n );\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return getStringInputs(\n selectedCondition as StringCondition,\n handleValueChange,\n hasInvalidValue,\n conditionValue\n );\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return getDateInputs(\n selectedCondition as DateCondition,\n handleValueChange,\n hasInvalidValue,\n conditionValue\n );\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return getBooleanInputs();\n }\n }, [\n selectedColumnType,\n selectedCondition,\n conditionValue,\n startValue,\n endValue,\n isValid,\n handleValueChange,\n handleStartValueChange,\n handleEndValueChange,\n ]);\n\n return (\n <div className=\"condition-editor mb-2\">\n <Select\n value={selectedCondition}\n data-testid=\"condition-select\"\n className=\"custom-select mb-2\"\n onChange={handleConditionChange}\n >\n {conditions}\n </Select>\n {conditionInputs}\n </div>\n );\n}\n\nexport default ConditionEditor;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ConditionEditor.js","names":["React","useCallback","useEffect","useMemo","useState","classNames","TableUtils","Log","Select","StringCondition","DateCondition","getLabelForNumberCondition","getLabelForDateCondition","getLabelForStringCondition","NumberCondition","getDefaultConditionForType","getLabelForBooleanCondition","BooleanCondition","CharCondition","getLabelForCharCondition","isDateConditionValid","getDefaultValueForType","jsx","_jsx","jsxs","_jsxs","log","module","DEFAULT_CALLBACK","undefined","numberConditionOptions","IS_EQUAL","IS_NOT_EQUAL","IS_BETWEEN","GREATER_THAN","GREATER_THAN_OR_EQUAL","LESS_THAN","LESS_THAN_OR_EQUAL","IS_NULL","IS_NOT_NULL","map","option","value","children","stringConditions","IS_EXACTLY","IS_NOT_EXACTLY","CONTAINS","DOES_NOT_CONTAIN","STARTS_WITH","ENDS_WITH","dateConditions","IS_BEFORE","IS_BEFORE_OR_EQUAL","IS_AFTER","IS_AFTER_OR_EQUAL","booleanConditions","IS_TRUE","IS_FALSE","charConditions","isNumberConditionValid","condition","startValue","endValue","Number","isNaN","parseFloat","getNumberInputs","selectedCondition","handleValueChange","handleStartValueChange","handleEndValueChange","isInvalid","conditionValue","type","className","placeholder","onChange","getStringInputs","getDateInputs","getBooleanInputs","getCharInputs","maxLength","ConditionEditor","props","column","config","dh","_props$onChange","selectedColumnType","_useState","_useState2","_slicedToArray","prevColumnType","setPrevColumnType","_useState3","_useState4","setCondition","_useState5","_useState6","setValue","_useState7","start","_useState8","setStartValue","_useState9","end","_useState0","setEndValue","_useState1","_useState10","isValid","setIsValid","conditions","isNumberType","isCharType","isStringType","isDateType","isBooleanType","handleConditionChange","debug","e","target","changeCondition","isConditionValid","conditionInputs","hasInvalidValue","showInvalid"],"sources":["../../../src/sidebar/conditional-formatting/ConditionEditor.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport classNames from 'classnames';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { Select } from '@deephaven/components';\nimport {\n StringCondition,\n DateCondition,\n getLabelForNumberCondition,\n getLabelForDateCondition,\n getLabelForStringCondition,\n NumberCondition,\n type ModelColumn,\n type ConditionConfig,\n getDefaultConditionForType,\n getLabelForBooleanCondition,\n BooleanCondition,\n CharCondition,\n type Condition,\n getLabelForCharCondition,\n isDateConditionValid,\n getDefaultValueForType,\n} from './ConditionalFormattingUtils';\n\nconst log = Log.module('ConditionEditor');\n\nexport interface ConditionEditorProps {\n dh: typeof DhType;\n column: ModelColumn;\n config: ConditionConfig;\n onChange?: (config: ConditionConfig, isValid: boolean) => void;\n}\n\nconst DEFAULT_CALLBACK = (): void => undefined;\n\nconst numberConditionOptions = [\n NumberCondition.IS_EQUAL,\n NumberCondition.IS_NOT_EQUAL,\n NumberCondition.IS_BETWEEN,\n NumberCondition.GREATER_THAN,\n NumberCondition.GREATER_THAN_OR_EQUAL,\n NumberCondition.LESS_THAN,\n NumberCondition.LESS_THAN_OR_EQUAL,\n NumberCondition.IS_NULL,\n NumberCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForNumberCondition(option)}\n </option>\n));\n\nconst stringConditions = [\n StringCondition.IS_EXACTLY,\n StringCondition.IS_NOT_EXACTLY,\n StringCondition.CONTAINS,\n StringCondition.DOES_NOT_CONTAIN,\n StringCondition.STARTS_WITH,\n StringCondition.ENDS_WITH,\n StringCondition.IS_NULL,\n StringCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForStringCondition(option)}\n </option>\n));\n\nconst dateConditions = [\n DateCondition.IS_EXACTLY,\n DateCondition.IS_NOT_EXACTLY,\n DateCondition.IS_BEFORE,\n DateCondition.IS_BEFORE_OR_EQUAL,\n DateCondition.IS_AFTER,\n DateCondition.IS_AFTER_OR_EQUAL,\n DateCondition.IS_NULL,\n DateCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForDateCondition(option)}\n </option>\n));\n\nconst booleanConditions = [\n BooleanCondition.IS_TRUE,\n BooleanCondition.IS_FALSE,\n BooleanCondition.IS_NULL,\n BooleanCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForBooleanCondition(option)}\n </option>\n));\n\nconst charConditions = [\n CharCondition.IS_EQUAL,\n CharCondition.IS_NOT_EQUAL,\n CharCondition.IS_NULL,\n CharCondition.IS_NOT_NULL,\n].map(option => (\n <option key={option} value={option}>\n {getLabelForCharCondition(option)}\n </option>\n));\n\nfunction isNumberConditionValid(\n condition: NumberCondition,\n value?: string,\n startValue?: string,\n endValue?: string\n): boolean {\n if (\n condition === NumberCondition.IS_NULL ||\n condition === NumberCondition.IS_NOT_NULL\n ) {\n return true;\n }\n if (\n condition === NumberCondition.IS_BETWEEN &&\n startValue != null &&\n startValue !== '' &&\n !Number.isNaN(Number.parseFloat(startValue)) &&\n endValue != null &&\n endValue !== '' &&\n !Number.isNaN(Number.parseFloat(endValue))\n ) {\n return true;\n }\n if (\n condition !== NumberCondition.IS_BETWEEN &&\n value !== undefined &&\n value !== '' &&\n !Number.isNaN(Number.parseFloat(value))\n ) {\n return true;\n }\n return false;\n}\n\nfunction getNumberInputs(\n selectedCondition: NumberCondition,\n handleValueChange: (e: React.ChangeEvent<HTMLInputElement>) => void,\n handleStartValueChange: (e: React.ChangeEvent<HTMLInputElement>) => void,\n handleEndValueChange: (e: React.ChangeEvent<HTMLInputElement>) => void,\n isInvalid: boolean,\n conditionValue?: string,\n startValue?: string,\n endValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case NumberCondition.IS_EQUAL:\n case NumberCondition.IS_NOT_EQUAL:\n case NumberCondition.GREATER_THAN:\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n case NumberCondition.LESS_THAN:\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return (\n <input\n type=\"number\"\n className={classNames('form-control', { 'is-invalid': isInvalid })}\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n case NumberCondition.IS_BETWEEN:\n return (\n <div className=\"d-flex flex-row\">\n <input\n type=\"number\"\n className={classNames('form-control', 'd-flex', 'mr-2', {\n 'is-invalid': isInvalid,\n })}\n placeholder=\"Start value\"\n value={startValue ?? ''}\n onChange={handleStartValueChange}\n />\n <input\n type=\"number\"\n className={classNames('form-control', 'd-flex', {\n 'is-invalid': isInvalid,\n })}\n placeholder=\"End value\"\n value={endValue ?? ''}\n onChange={handleEndValueChange}\n />\n </div>\n );\n case NumberCondition.IS_NULL:\n case NumberCondition.IS_NOT_NULL:\n return null;\n }\n}\n\nfunction getStringInputs(\n selectedCondition: StringCondition,\n handleValueChange: (e: React.ChangeEvent<HTMLInputElement>) => void,\n isInvalid: boolean,\n conditionValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case StringCondition.IS_NULL:\n case StringCondition.IS_NOT_NULL:\n return null;\n default:\n return (\n <input\n type=\"text\"\n className={classNames('form-control', { 'is-invalid': isInvalid })}\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n }\n}\n\nfunction getDateInputs(\n selectedCondition: DateCondition,\n handleValueChange: (e: React.ChangeEvent<HTMLInputElement>) => void,\n isInvalid: boolean,\n conditionValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case DateCondition.IS_NULL:\n case DateCondition.IS_NOT_NULL:\n return null;\n default:\n return (\n <input\n type=\"text\"\n className={classNames('form-control', { 'is-invalid': isInvalid })}\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n }\n}\n\nfunction getBooleanInputs(): null {\n return null;\n}\n\nfunction getCharInputs(\n selectedCondition: CharCondition,\n handleValueChange: (e: React.ChangeEvent<HTMLInputElement>) => void,\n isInvalid: boolean,\n conditionValue?: string\n): JSX.Element | null {\n switch (selectedCondition) {\n case CharCondition.IS_NULL:\n case CharCondition.IS_NOT_NULL:\n return null;\n default:\n return (\n <input\n type=\"text\"\n className={classNames('form-control', { 'is-invalid': isInvalid })}\n maxLength={1}\n placeholder=\"Enter value\"\n value={conditionValue ?? ''}\n onChange={handleValueChange}\n />\n );\n }\n}\n\nfunction ConditionEditor(props: ConditionEditorProps): JSX.Element {\n const { column, config, dh, onChange = DEFAULT_CALLBACK } = props;\n const selectedColumnType = column.type;\n const [prevColumnType, setPrevColumnType] = useState(selectedColumnType);\n const [selectedCondition, setCondition] = useState(config.condition);\n const [conditionValue, setValue] = useState(config.value);\n const [startValue, setStartValue] = useState(config.start);\n const [endValue, setEndValue] = useState(config.end);\n const [isValid, setIsValid] = useState(true);\n\n if (selectedColumnType !== prevColumnType) {\n // Column type changed, reset condition and value fields\n setCondition(getDefaultConditionForType(selectedColumnType));\n setValue(getDefaultValueForType(selectedColumnType));\n setStartValue(undefined);\n setEndValue(undefined);\n setPrevColumnType(selectedColumnType);\n }\n\n const conditions = useMemo(() => {\n if (selectedColumnType === undefined) {\n return [];\n }\n if (TableUtils.isNumberType(selectedColumnType)) {\n return numberConditionOptions;\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return charConditions;\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return stringConditions;\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return dateConditions;\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return booleanConditions;\n }\n }, [selectedColumnType]);\n\n const handleConditionChange = useCallback((value: string) => {\n log.debug('handleConditionChange', value);\n setCondition(value as Condition);\n }, []);\n\n const handleValueChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = e.target;\n log.debug('handleValueChange', value);\n setValue(value);\n },\n []\n );\n\n const handleStartValueChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = e.target;\n log.debug('handleStartValueChange', value);\n setStartValue(value);\n },\n []\n );\n\n const handleEndValueChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = e.target;\n log.debug('handleEndValueChange', value);\n setEndValue(value);\n },\n []\n );\n\n useEffect(\n function changeCondition() {\n let isConditionValid = true;\n\n if (selectedCondition === undefined) {\n log.debug(\n 'Unable to create formatting rule. Condition is not selected.'\n );\n isConditionValid = false;\n } else if (\n TableUtils.isNumberType(column.type) &&\n !isNumberConditionValid(\n selectedCondition as NumberCondition,\n conditionValue,\n startValue,\n endValue\n )\n ) {\n log.debug(\n 'Unable to create formatting rule. Invalid value',\n conditionValue\n );\n isConditionValid = false;\n } else if (\n TableUtils.isDateType(column.type) &&\n !isDateConditionValid(\n dh,\n selectedCondition as DateCondition,\n conditionValue\n )\n ) {\n log.debug(\n 'Unable to create formatting rule. Invalid date condition',\n conditionValue\n );\n isConditionValid = false;\n }\n\n setIsValid(isConditionValid);\n onChange(\n {\n condition: selectedCondition,\n value: conditionValue,\n start: startValue,\n end: endValue,\n },\n isConditionValid\n );\n },\n [\n onChange,\n column.type,\n dh,\n selectedCondition,\n conditionValue,\n startValue,\n endValue,\n ]\n );\n\n const conditionInputs = useMemo(() => {\n if (selectedColumnType === undefined) {\n // Column not selected\n return null;\n }\n\n // Show invalid state only when there's a non-empty value that fails validation\n const hasInvalidValue =\n !isValid && conditionValue !== undefined && conditionValue !== '';\n\n if (TableUtils.isNumberType(selectedColumnType)) {\n // For IS_BETWEEN, show invalid on each field only if that field has a value\n const showInvalid =\n selectedCondition === NumberCondition.IS_BETWEEN\n ? !isValid &&\n ((startValue !== undefined && startValue !== '') ||\n (endValue !== undefined && endValue !== ''))\n : hasInvalidValue;\n\n return getNumberInputs(\n selectedCondition as NumberCondition,\n handleValueChange,\n handleStartValueChange,\n handleEndValueChange,\n showInvalid,\n conditionValue,\n startValue,\n endValue\n );\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return getCharInputs(\n selectedCondition as CharCondition,\n handleValueChange,\n hasInvalidValue,\n conditionValue\n );\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return getStringInputs(\n selectedCondition as StringCondition,\n handleValueChange,\n hasInvalidValue,\n conditionValue\n );\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return getDateInputs(\n selectedCondition as DateCondition,\n handleValueChange,\n hasInvalidValue,\n conditionValue\n );\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return getBooleanInputs();\n }\n }, [\n selectedColumnType,\n selectedCondition,\n conditionValue,\n startValue,\n endValue,\n isValid,\n handleValueChange,\n handleStartValueChange,\n handleEndValueChange,\n ]);\n\n return (\n <div className=\"condition-editor mb-2\">\n <Select\n value={selectedCondition}\n data-testid=\"condition-select\"\n className=\"custom-select mb-2\"\n onChange={handleConditionChange}\n >\n {conditions}\n </Select>\n {conditionInputs}\n </div>\n );\n}\n\nexport default ConditionEditor;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
1
7
|
import React, { useCallback, useState } from 'react';
|
|
2
8
|
import classNames from 'classnames';
|
|
3
9
|
import { Button } from '@deephaven/components';
|
|
@@ -29,18 +35,28 @@ function getFormatterTypeLabel(option) {
|
|
|
29
35
|
var formatterTypes = [FormatterType.CONDITIONAL, FormatterType.ROWS];
|
|
30
36
|
function ConditionalFormatEditor(props) {
|
|
31
37
|
var _defaultRule$type;
|
|
32
|
-
var
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
onSave = DEFAULT_CALLBACK,
|
|
36
|
-
onUpdate =
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
var originalColumns = props.columns,
|
|
39
|
+
dh = props.dh,
|
|
40
|
+
_props$onSave = props.onSave,
|
|
41
|
+
onSave = _props$onSave === void 0 ? DEFAULT_CALLBACK : _props$onSave,
|
|
42
|
+
_props$onUpdate = props.onUpdate,
|
|
43
|
+
onUpdate = _props$onUpdate === void 0 ? DEFAULT_CALLBACK : _props$onUpdate,
|
|
44
|
+
_props$onCancel = props.onCancel,
|
|
45
|
+
onCancel = _props$onCancel === void 0 ? DEFAULT_CALLBACK : _props$onCancel,
|
|
46
|
+
defaultRule = props.rule;
|
|
40
47
|
var columns = originalColumns.filter(isSupportedColumn);
|
|
41
|
-
var
|
|
42
|
-
|
|
43
|
-
|
|
48
|
+
var _useState = useState((_defaultRule$type = defaultRule === null || defaultRule === void 0 ? void 0 : defaultRule.type) !== null && _defaultRule$type !== void 0 ? _defaultRule$type : formatterTypes[0]),
|
|
49
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
50
|
+
selectedFormatter = _useState2[0],
|
|
51
|
+
setFormatter = _useState2[1];
|
|
52
|
+
var _useState3 = useState(defaultRule),
|
|
53
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
54
|
+
rule = _useState4[0],
|
|
55
|
+
setRule = _useState4[1];
|
|
56
|
+
var _useState5 = useState(false),
|
|
57
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
58
|
+
isValid = _useState6[0],
|
|
59
|
+
setIsValid = _useState6[1];
|
|
44
60
|
var handleCancel = useCallback(() => {
|
|
45
61
|
onCancel();
|
|
46
62
|
}, [onCancel]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionalFormatEditor.js","names":["React","useCallback","useState","classNames","Button","Log","FormatColumnWhereIcon","FormatRowWhereIcon","ColumnFormatEditor","RowFormatEditor","FormatterType","isSupportedColumn","jsx","_jsx","jsxs","_jsxs","log","module","DEFAULT_CALLBACK","undefined","getFormatterTypeIcon","option","CONDITIONAL","ROWS","getFormatterTypeLabel","formatterTypes","ConditionalFormatEditor","props","_defaultRule$type","columns","originalColumns","dh","onSave","onUpdate","onCancel","rule","defaultRule","filter","selectedFormatter","setFormatter","type","setRule","isValid","setIsValid","handleCancel","handleSave","error","handleFormatterChange","value","debug","handleRuleChange","ruleConfig","isRuleValid","updatedRule","config","className","children","htmlFor","map","index","active","onClick","onChange","kind","disabled"],"sources":["../../../src/sidebar/conditional-formatting/ConditionalFormatEditor.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport { Button } from '@deephaven/components';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { FormatColumnWhereIcon, FormatRowWhereIcon } from '../icons';\nimport ColumnFormatEditor from './ColumnFormatEditor';\nimport RowFormatEditor from './RowFormatEditor';\nimport {\n type BaseFormatConfig,\n FormatterType,\n type FormattingRule,\n isSupportedColumn,\n type ModelColumn,\n} from './ConditionalFormattingUtils';\nimport './ConditionalFormatEditor.scss';\n\nconst log = Log.module('ConditionalFormatEditor');\n\nexport type SaveCallback = (rule: FormattingRule) => void;\n\nexport type UpdateCallback = (rule?: FormattingRule) => void;\n\nexport type CancelCallback = () => void;\n\nexport interface ConditionalFormatEditorProps {\n dh: typeof DhType;\n columns: readonly ModelColumn[];\n rule?: FormattingRule;\n onCancel?: CancelCallback;\n onSave?: SaveCallback;\n onUpdate?: UpdateCallback;\n}\n\nconst DEFAULT_CALLBACK = (): void => undefined;\n\nfunction getFormatterTypeIcon(option: FormatterType): JSX.Element | undefined {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return <FormatColumnWhereIcon />;\n case FormatterType.ROWS:\n return <FormatRowWhereIcon />;\n }\n}\n\nfunction getFormatterTypeLabel(option: FormatterType): string {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return 'Conditional';\n case FormatterType.ROWS:\n return 'Rows';\n }\n}\n\nconst formatterTypes = [FormatterType.CONDITIONAL, FormatterType.ROWS];\n\nfunction ConditionalFormatEditor(\n props: ConditionalFormatEditorProps\n): JSX.Element {\n const {\n columns: originalColumns,\n dh,\n onSave = DEFAULT_CALLBACK,\n onUpdate = DEFAULT_CALLBACK,\n onCancel = DEFAULT_CALLBACK,\n rule: defaultRule,\n } = props;\n\n const columns = originalColumns.filter(isSupportedColumn);\n\n const [selectedFormatter, setFormatter] = useState(\n defaultRule?.type ?? formatterTypes[0]\n );\n const [rule, setRule] = useState(defaultRule);\n const [isValid, setIsValid] = useState(false);\n\n const handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n\n const handleSave = useCallback(() => {\n if (rule === undefined) {\n log.error('Rule is not defined.');\n return;\n }\n onSave(rule);\n }, [onSave, rule]);\n\n const handleFormatterChange = useCallback((value: FormatterType) => {\n log.debug('handleFormatterChange', value);\n setFormatter(value);\n }, []);\n\n const handleRuleChange = useCallback(\n (ruleConfig: BaseFormatConfig, isRuleValid: boolean) => {\n log.debug('handleRuleChange', ruleConfig, isRuleValid, selectedFormatter);\n const updatedRule = {\n type: selectedFormatter,\n config: ruleConfig,\n };\n setRule(updatedRule);\n setIsValid(isRuleValid);\n onUpdate(isRuleValid ? updatedRule : undefined);\n },\n [onUpdate, selectedFormatter]\n );\n\n return (\n <div className=\"conditional-format-editor form\">\n <div className=\"mb-2\">\n <label className=\"mb-0\" htmlFor=\"formatter-select\">\n Select Formatter\n </label>\n\n <div className=\"formatter-list\">\n {formatterTypes.map((type, index) => (\n <div key={type} className=\"formatter-type\">\n <button\n type=\"button\"\n className={classNames('btn', 'btn-icon', 'btn-formatter-type', {\n active: type === selectedFormatter,\n })}\n data-index={index}\n onClick={() => handleFormatterChange(type)}\n >\n {getFormatterTypeIcon(type)}\n {getFormatterTypeLabel(type)}\n </button>\n </div>\n ))}\n </div>\n </div>\n {selectedFormatter === FormatterType.CONDITIONAL && (\n <ColumnFormatEditor\n columns={columns}\n dh={dh}\n config={rule?.config}\n onChange={handleRuleChange}\n />\n )}\n {selectedFormatter === FormatterType.ROWS && (\n <RowFormatEditor\n columns={columns}\n config={rule?.config}\n dh={dh}\n onChange={handleRuleChange}\n />\n )}\n <hr />\n <div className=\"d-flex justify-content-end my-3\">\n <Button kind=\"secondary\" onClick={handleCancel} className=\"mr-2\">\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n onClick={handleSave}\n disabled={rule === undefined || !isValid}\n >\n Done\n </Button>\n </div>\n </div>\n );\n}\n\nexport default ConditionalFormatEditor;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ConditionalFormatEditor.js","names":["React","useCallback","useState","classNames","Button","Log","FormatColumnWhereIcon","FormatRowWhereIcon","ColumnFormatEditor","RowFormatEditor","FormatterType","isSupportedColumn","jsx","_jsx","jsxs","_jsxs","log","module","DEFAULT_CALLBACK","undefined","getFormatterTypeIcon","option","CONDITIONAL","ROWS","getFormatterTypeLabel","formatterTypes","ConditionalFormatEditor","props","_defaultRule$type","originalColumns","columns","dh","_props$onSave","onSave","_props$onUpdate","onUpdate","_props$onCancel","onCancel","defaultRule","rule","filter","_useState","type","_useState2","_slicedToArray","selectedFormatter","setFormatter","_useState3","_useState4","setRule","_useState5","_useState6","isValid","setIsValid","handleCancel","handleSave","error","handleFormatterChange","value","debug","handleRuleChange","ruleConfig","isRuleValid","updatedRule","config","className","children","htmlFor","map","index","active","onClick","onChange","kind","disabled"],"sources":["../../../src/sidebar/conditional-formatting/ConditionalFormatEditor.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport { Button } from '@deephaven/components';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { FormatColumnWhereIcon, FormatRowWhereIcon } from '../icons';\nimport ColumnFormatEditor from './ColumnFormatEditor';\nimport RowFormatEditor from './RowFormatEditor';\nimport {\n type BaseFormatConfig,\n FormatterType,\n type FormattingRule,\n isSupportedColumn,\n type ModelColumn,\n} from './ConditionalFormattingUtils';\nimport './ConditionalFormatEditor.scss';\n\nconst log = Log.module('ConditionalFormatEditor');\n\nexport type SaveCallback = (rule: FormattingRule) => void;\n\nexport type UpdateCallback = (rule?: FormattingRule) => void;\n\nexport type CancelCallback = () => void;\n\nexport interface ConditionalFormatEditorProps {\n dh: typeof DhType;\n columns: readonly ModelColumn[];\n rule?: FormattingRule;\n onCancel?: CancelCallback;\n onSave?: SaveCallback;\n onUpdate?: UpdateCallback;\n}\n\nconst DEFAULT_CALLBACK = (): void => undefined;\n\nfunction getFormatterTypeIcon(option: FormatterType): JSX.Element | undefined {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return <FormatColumnWhereIcon />;\n case FormatterType.ROWS:\n return <FormatRowWhereIcon />;\n }\n}\n\nfunction getFormatterTypeLabel(option: FormatterType): string {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return 'Conditional';\n case FormatterType.ROWS:\n return 'Rows';\n }\n}\n\nconst formatterTypes = [FormatterType.CONDITIONAL, FormatterType.ROWS];\n\nfunction ConditionalFormatEditor(\n props: ConditionalFormatEditorProps\n): JSX.Element {\n const {\n columns: originalColumns,\n dh,\n onSave = DEFAULT_CALLBACK,\n onUpdate = DEFAULT_CALLBACK,\n onCancel = DEFAULT_CALLBACK,\n rule: defaultRule,\n } = props;\n\n const columns = originalColumns.filter(isSupportedColumn);\n\n const [selectedFormatter, setFormatter] = useState(\n defaultRule?.type ?? formatterTypes[0]\n );\n const [rule, setRule] = useState(defaultRule);\n const [isValid, setIsValid] = useState(false);\n\n const handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n\n const handleSave = useCallback(() => {\n if (rule === undefined) {\n log.error('Rule is not defined.');\n return;\n }\n onSave(rule);\n }, [onSave, rule]);\n\n const handleFormatterChange = useCallback((value: FormatterType) => {\n log.debug('handleFormatterChange', value);\n setFormatter(value);\n }, []);\n\n const handleRuleChange = useCallback(\n (ruleConfig: BaseFormatConfig, isRuleValid: boolean) => {\n log.debug('handleRuleChange', ruleConfig, isRuleValid, selectedFormatter);\n const updatedRule = {\n type: selectedFormatter,\n config: ruleConfig,\n };\n setRule(updatedRule);\n setIsValid(isRuleValid);\n onUpdate(isRuleValid ? updatedRule : undefined);\n },\n [onUpdate, selectedFormatter]\n );\n\n return (\n <div className=\"conditional-format-editor form\">\n <div className=\"mb-2\">\n <label className=\"mb-0\" htmlFor=\"formatter-select\">\n Select Formatter\n </label>\n\n <div className=\"formatter-list\">\n {formatterTypes.map((type, index) => (\n <div key={type} className=\"formatter-type\">\n <button\n type=\"button\"\n className={classNames('btn', 'btn-icon', 'btn-formatter-type', {\n active: type === selectedFormatter,\n })}\n data-index={index}\n onClick={() => handleFormatterChange(type)}\n >\n {getFormatterTypeIcon(type)}\n {getFormatterTypeLabel(type)}\n </button>\n </div>\n ))}\n </div>\n </div>\n {selectedFormatter === FormatterType.CONDITIONAL && (\n <ColumnFormatEditor\n columns={columns}\n dh={dh}\n config={rule?.config}\n onChange={handleRuleChange}\n />\n )}\n {selectedFormatter === FormatterType.ROWS && (\n <RowFormatEditor\n columns={columns}\n config={rule?.config}\n dh={dh}\n onChange={handleRuleChange}\n />\n )}\n <hr />\n <div className=\"d-flex justify-content-end my-3\">\n <Button kind=\"secondary\" onClick={handleCancel} className=\"mr-2\">\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n onClick={handleSave}\n disabled={rule === undefined || !isValid}\n >\n Done\n </Button>\n </div>\n </div>\n );\n}\n\nexport default ConditionalFormatEditor;\n"],"mappings":"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","ignoreList":[]}
|