From 3f187b5c4395af179b717714566039ccdf8a601d Mon Sep 17 00:00:00 2001 From: radubrehar Date: Tue, 24 Sep 2024 22:10:08 +0300 Subject: [PATCH] add flashOnUpdate for columns --- .../InfiniteTableColumnCell.tsx | 1 + .../InfiniteTable/hooks/useComputedColumns.ts | 8 +++++++- .../types/InfiniteTableColumn.ts | 20 +++++++++++++++++++ .../InfiniteTable/types/InfiniteTableProps.ts | 15 ++++++++++++++ .../InfiniteTable/utils/getComputedColumns.ts | 13 ++++++++++++ 5 files changed, 56 insertions(+), 1 deletion(-) diff --git a/source/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableColumnCell.tsx b/source/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableColumnCell.tsx index 78634b14d..565305840 100644 --- a/source/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableColumnCell.tsx +++ b/source/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableColumnCell.tsx @@ -213,6 +213,7 @@ function InfiniteTableColumnCellFn(props: InfiniteTableColumnCellProps) { const rowDisabled = rowInfo.rowDisabled; + // const flashOnUpdate = column.computedFlashOnUpdate; const visibleColumnsIds = computed.computedVisibleColumns.map((x) => x.id); const colRenderingParams = getColumnRenderingParams({ horizontalLayoutPageIndex, diff --git a/source/src/components/InfiniteTable/hooks/useComputedColumns.ts b/source/src/components/InfiniteTable/hooks/useComputedColumns.ts index c1ebd6d8c..525c3cb72 100644 --- a/source/src/components/InfiniteTable/hooks/useComputedColumns.ts +++ b/source/src/components/InfiniteTable/hooks/useComputedColumns.ts @@ -16,6 +16,7 @@ import type { InfiniteTableProps, InfiniteTablePropEditable, InfiniteTablePropSortable, + InfiniteTablePropFlashOnUpdate, } from '../types/InfiniteTableProps'; import type { GetComputedColumnsResult } from '../utils/getComputedColumns'; import { getComputedColumns } from '../utils/getComputedColumns'; @@ -39,6 +40,7 @@ type UseComputedColumnsParam = { columnDefaultWidth?: number; columnDefaultFlex?: number; sortable?: InfiniteTablePropSortable; + flashOnUpdate?: InfiniteTablePropFlashOnUpdate; draggableColumns?: boolean; columnDefaultDraggable?: boolean; multiSort: boolean; @@ -51,6 +53,7 @@ type UseComputedColumnsParam = { columnDefaultEditable?: InfiniteTableProps['columnDefaultEditable']; columnDefaultFilterable?: InfiniteTableProps['columnDefaultFilterable']; columnDefaultSortable?: InfiniteTableProps['columnDefaultSortable']; + columnDefaultFlashOnUpdate?: InfiniteTableProps['columnDefaultFlashOnUpdate']; columnPinning: InfiniteTablePropColumnPinning; columnSizing: InfiniteTablePropColumnSizing; columnTypes: InfiniteTablePropColumnTypes; @@ -105,9 +108,11 @@ export const useComputedColumns = ({ columnOrder, columnPinning, editable, + flashOnUpdate, columnDefaultEditable, columnDefaultFilterable, columnDefaultSortable, + columnDefaultFlashOnUpdate, scrollbarWidth, columnTypes, pinnedEndMaxWidth, @@ -149,6 +154,7 @@ export const useComputedColumns = ({ columnMinWidth, columnMaxWidth, columnDefaultWidth, + columnDefaultFlashOnUpdate, columnDefaultFlex, columnCssEllipsis, columnHeaderCssEllipsis, @@ -173,7 +179,7 @@ export const useComputedColumns = ({ columnDefaultFilterable, columnDefaultSortable, editable, - + flashOnUpdate, columnSizing, columnTypes, diff --git a/source/src/components/InfiniteTable/types/InfiniteTableColumn.ts b/source/src/components/InfiniteTable/types/InfiniteTableColumn.ts index 10042c0c5..2d2644415 100644 --- a/source/src/components/InfiniteTable/types/InfiniteTableColumn.ts +++ b/source/src/components/InfiniteTable/types/InfiniteTableColumn.ts @@ -416,6 +416,22 @@ export type InfiniteTableColumnSortable = | boolean | InfiniteTableColumnSortableFn; +export type InfiniteTableColumnFlashOptions<_T> = { + onlyForApiUpdates?: boolean; +}; +export type InfiniteTableColumnFlashOnUpdate = + | boolean + | InfiniteTableColumnFlashOptions + | InfiniteTableColumnFlashOnUpdateFn; + +export type InfiniteTableColumnFlashOnUpdateParams = + InfiniteTableColumnContentFocusableParams & { + oldValue: any; + }; + +export type InfiniteTableColumnFlashOnUpdateFn = ( + params: InfiniteTableColumnFlashOnUpdateParams, +) => boolean | InfiniteTableColumnFlashOptions; /** * Defines a column in the table. * @@ -453,6 +469,7 @@ export type InfiniteTableColumn = { ) => any | Promise; comparer?: InfiniteTableColumnComparer; + defaultFlashOnUpdate?: InfiniteTableColumnFlashOnUpdate; defaultHiddenWhenGroupedBy?: | '*' | true @@ -602,6 +619,9 @@ type InfiniteTableComputedColumnBase = { computedFirst: boolean; computedLast: boolean; computedEditable: NonUndefined['defaultEditable']>; + computedFlashOnUpdate: NonUndefined< + InfiniteTableColumn['defaultFlashOnUpdate'] + >; computedSortable: NonUndefined['defaultSortable']>; colType: InfiniteTableColumnType; id: string; diff --git a/source/src/components/InfiniteTable/types/InfiniteTableProps.ts b/source/src/components/InfiniteTable/types/InfiniteTableProps.ts index 37159cefc..d2dd0ed39 100644 --- a/source/src/components/InfiniteTable/types/InfiniteTableProps.ts +++ b/source/src/components/InfiniteTable/types/InfiniteTableProps.ts @@ -23,6 +23,7 @@ import { Renderable } from '../../types/Renderable'; import type { InfiniteTableColumn, InfiniteTableColumnEditableFn, + InfiniteTableColumnFlashOnUpdate, InfiniteTableColumnRenderFunction, InfiniteTableColumnRenderFunctionForGroupRows, InfiniteTableColumnSortable, @@ -145,6 +146,7 @@ export type InfiniteTableColumnType = { defaultSortable?: InfiniteTableColumn['defaultSortable']; defaultEditable?: InfiniteTableColumn['defaultEditable']; defaultFilterable?: InfiniteTableColumn['defaultFilterable']; + defaultFlashOnUpdate?: InfiniteTableColumn['defaultFlashOnUpdate']; columnGroup?: string; @@ -561,6 +563,10 @@ export type InfiniteTablePropSortable = | InfiniteTableColumnSortable | undefined; +export type InfiniteTablePropFlashOnUpdate = + | InfiniteTableColumnFlashOnUpdate + | undefined; + export type InfiniteTablePropOnEditAcceptedParams = InfiniteTableRowInfoDataDiscriminatorWithColumnAndApis & { initialValue: any; @@ -617,8 +623,17 @@ export interface InfiniteTableProps { InfiniteTableColumn & InfiniteTablePivotFinalColumn >; + /** + * Default behavior for column filtering. Defaults to true. + * + * This is overriden by all other props that can control filtering behavior (`column.defaultFilterable`, `columnType.defaultFilterable`, `filterable`). + */ columnDefaultFilterable?: boolean; + columnDefaultEditable?: boolean; + columnDefaultFlashOnUpdate?: boolean; + + flashOnUpdate?: InfiniteTablePropFlashOnUpdate; /** * Default behavior for column sorting. Defaults to true. diff --git a/source/src/components/InfiniteTable/utils/getComputedColumns.ts b/source/src/components/InfiniteTable/utils/getComputedColumns.ts index 5101bc79a..0c050ad8e 100644 --- a/source/src/components/InfiniteTable/utils/getComputedColumns.ts +++ b/source/src/components/InfiniteTable/utils/getComputedColumns.ts @@ -28,6 +28,7 @@ import type { InfiniteTableProps, InfiniteTablePropEditable, InfiniteTablePropSortable, + InfiniteTablePropFlashOnUpdate, } from '../types/InfiniteTableProps'; import { adjustColumnOrderForPinning } from './adjustColumnOrderForPinning'; @@ -139,10 +140,12 @@ type GetComputedVisibleColumnsParam = { columnOrder: InfiniteTablePropColumnOrder; columnPinning: InfiniteTablePropColumnPinning; editable: InfiniteTablePropEditable; + flashOnUpdate: InfiniteTablePropFlashOnUpdate; columnDefaultEditable: InfiniteTableProps['columnDefaultEditable']; columnDefaultFilterable: InfiniteTableProps['columnDefaultFilterable']; columnDefaultSortable: InfiniteTableProps['columnDefaultSortable']; columnDefaultDraggable: InfiniteTableProps['columnDefaultDraggable']; + columnDefaultFlashOnUpdate: InfiniteTableProps['columnDefaultFlashOnUpdate']; columnSizing: InfiniteTablePropColumnSizing; columnTypes: InfiniteTablePropColumnTypes; columnVisibility: InfiniteTablePropColumnVisibility; @@ -178,6 +181,8 @@ export const getComputedColumns = ({ columnPinning, editable, columnDefaultEditable, + flashOnUpdate, + columnDefaultFlashOnUpdate, columnDefaultFilterable, columnDefaultSortable, columnSizing, @@ -540,6 +545,13 @@ export const getComputedColumns = ({ columnDefaultEditable ?? false; + const computedFlashOnUpdate = + flashOnUpdate ?? + c.defaultFlashOnUpdate ?? + colType.defaultFlashOnUpdate ?? + columnDefaultFlashOnUpdate ?? + false; + const computedDataType = c.dataType || colType.dataType || @@ -628,6 +640,7 @@ export const getComputedColumns = ({ computedFlex, computedDataType, computedEditable, + computedFlashOnUpdate, computedSortType, computedFilterType, cssEllipsis,