From 3c453a94d0194c53b0b0a2e2decab9fb717b2a38 Mon Sep 17 00:00:00 2001 From: Ella Date: Tue, 25 Jun 2024 18:36:05 +0300 Subject: [PATCH] Remove duplication --- packages/dataviews/src/bulk-actions-toolbar.tsx | 14 ++++---------- packages/dataviews/src/bulk-actions.tsx | 6 ++---- packages/dataviews/src/dataviews.tsx | 13 +++++++++---- .../dataviews/src/single-selection-checkbox.tsx | 6 ++---- packages/dataviews/src/types.ts | 8 +++++--- packages/dataviews/src/view-grid.tsx | 12 ++++++++---- packages/dataviews/src/view-table.tsx | 9 +++------ 7 files changed, 33 insertions(+), 35 deletions(-) diff --git a/packages/dataviews/src/bulk-actions-toolbar.tsx b/packages/dataviews/src/bulk-actions-toolbar.tsx index 634720f7dc1770..e6b8683832fd27 100644 --- a/packages/dataviews/src/bulk-actions-toolbar.tsx +++ b/packages/dataviews/src/bulk-actions-toolbar.tsx @@ -18,7 +18,7 @@ import { useRegistry } from '@wordpress/data'; * Internal dependencies */ import { ActionWithModal } from './item-actions'; -import type { Action, AnyItem } from './types'; +import type { Action, AnyItem, setSelection } from './types'; import type { ActionTriggerProps } from './item-actions'; interface ActionButtonProps< Item extends AnyItem > { @@ -32,18 +32,14 @@ interface ToolbarContentProps< Item extends AnyItem > { selection: string[]; actionsToShow: Action< Item >[]; selectedItems: Item[]; - onSelectionChange: ( - selection: string[] | ( ( prevState: string[] ) => string[] ) - ) => void; + onSelectionChange: setSelection; } interface BulkActionsToolbarProps< Item extends AnyItem > { data: Item[]; selection: string[]; actions: Action< Item >[]; - onSelectionChange: ( - selection: string[] | ( ( prevState: string[] ) => string[] ) - ) => void; + onSelectionChange: setSelection; getItemId: ( item: Item ) => string; } @@ -135,9 +131,7 @@ function renderToolbarContent< Item extends AnyItem >( selectedItems: Item[], actionInProgress: string | null, setActionInProgress: ( actionId: string | null ) => void, - onSelectionChange: ( - selection: string[] | ( ( prevState: string[] ) => string[] ) - ) => void + onSelectionChange: setSelection ) { return ( <> diff --git a/packages/dataviews/src/bulk-actions.tsx b/packages/dataviews/src/bulk-actions.tsx index 2bf42141c233a0..eedd216bb4e361 100644 --- a/packages/dataviews/src/bulk-actions.tsx +++ b/packages/dataviews/src/bulk-actions.tsx @@ -14,7 +14,7 @@ import { useRegistry } from '@wordpress/data'; * Internal dependencies */ import { unlock } from './lock-unlock'; -import type { Action, ActionModal, AnyItem } from './types'; +import type { Action, ActionModal, AnyItem, setSelection } from './types'; const { DropdownMenuV2: DropdownMenu, @@ -46,9 +46,7 @@ interface BulkActionsProps< Item extends AnyItem > { data: Item[]; actions: Action< Item >[]; selection: string[]; - onSelectionChange: ( - selection: string[] | ( ( prevState: string[] ) => string[] ) - ) => void; + onSelectionChange: setSelection; getItemId: ( item: Item ) => string; } diff --git a/packages/dataviews/src/dataviews.tsx b/packages/dataviews/src/dataviews.tsx index c3a11e0cce5b0e..378c85487557fa 100644 --- a/packages/dataviews/src/dataviews.tsx +++ b/packages/dataviews/src/dataviews.tsx @@ -22,7 +22,14 @@ import { VIEW_LAYOUTS } from './layouts'; import BulkActions from './bulk-actions'; import { normalizeFields } from './normalize-fields'; import BulkActionsToolbar from './bulk-actions-toolbar'; -import type { Action, AnyItem, Field, View, ViewBaseProps } from './types'; +import type { + Action, + AnyItem, + Field, + View, + ViewBaseProps, + setSelection, +} from './types'; interface DataViewsProps< Item extends AnyItem > { view: View; @@ -40,9 +47,7 @@ interface DataViewsProps< Item extends AnyItem > { }; supportedLayouts: string[]; selection?: string[]; - setSelection?: ( - selection: string[] | ( ( prevState: string[] ) => string[] ) - ) => void; + setSelection?: setSelection; onSelectionChange?: ( items: Item[] ) => void; } diff --git a/packages/dataviews/src/single-selection-checkbox.tsx b/packages/dataviews/src/single-selection-checkbox.tsx index 1dd614eecbfa46..96afa98334589d 100644 --- a/packages/dataviews/src/single-selection-checkbox.tsx +++ b/packages/dataviews/src/single-selection-checkbox.tsx @@ -7,13 +7,11 @@ import { CheckboxControl } from '@wordpress/components'; /** * Internal dependencies */ -import type { Field, AnyItem } from './types'; +import type { Field, AnyItem, setSelection } from './types'; interface SingleSelectionCheckboxProps< Item extends AnyItem > { selection: string[]; - onSelectionChange: ( - selection: string[] | ( ( prevState: string[] ) => string[] ) - ) => void; + onSelectionChange: setSelection; item: Item; getItemId: ( item: Item ) => string; primaryField?: Field< Item >; diff --git a/packages/dataviews/src/types.ts b/packages/dataviews/src/types.ts index 79a81c9de188c9..b78b373e77027a 100644 --- a/packages/dataviews/src/types.ts +++ b/packages/dataviews/src/types.ts @@ -3,6 +3,10 @@ */ import type { ReactElement, ReactNode } from 'react'; +export type setSelection = ( + selection: string[] | ( ( prevState: string[] ) => string[] ) +) => void; + export type SortDirection = 'asc' | 'desc'; /** @@ -376,9 +380,7 @@ export interface ViewBaseProps< Item extends AnyItem > { getItemId: ( item: Item ) => string; isLoading?: boolean; onChangeView( view: View ): void; - onSelectionChange: ( - selection: string[] | ( ( prevState: string[] ) => string[] ) - ) => void; + onSelectionChange: setSelection; selection: string[]; setOpenedFilter: ( fieldId: string ) => void; view: View; diff --git a/packages/dataviews/src/view-grid.tsx b/packages/dataviews/src/view-grid.tsx index 6610608d5b0d3d..6c3cb2dd933705 100644 --- a/packages/dataviews/src/view-grid.tsx +++ b/packages/dataviews/src/view-grid.tsx @@ -22,14 +22,18 @@ import { __ } from '@wordpress/i18n'; import ItemActions from './item-actions'; import SingleSelectionCheckbox from './single-selection-checkbox'; import { useHasAPossibleBulkAction } from './bulk-actions'; -import type { Action, AnyItem, NormalizedField, ViewGridProps } from './types'; +import type { + Action, + AnyItem, + NormalizedField, + ViewGridProps, + setSelection, +} from './types'; interface GridItemProps< Item extends AnyItem > { selection: string[]; data: Item[]; - onSelectionChange: ( - selection: string[] | ( ( prevState: string[] ) => string[] ) - ) => void; + onSelectionChange: setSelection; getItemId: ( item: Item ) => string; item: Item; actions: Action< Item >[]; diff --git a/packages/dataviews/src/view-table.tsx b/packages/dataviews/src/view-table.tsx index 555e9615349517..42ec10432a279c 100644 --- a/packages/dataviews/src/view-table.tsx +++ b/packages/dataviews/src/view-table.tsx @@ -51,6 +51,7 @@ import type { SortDirection, ViewTable as ViewTableType, ViewTableProps, + setSelection, } from './types'; const { @@ -72,9 +73,7 @@ interface HeaderMenuProps< Item extends AnyItem > { interface BulkSelectionCheckboxProps< Item extends AnyItem > { selection: string[]; - onSelectionChange: ( - selection: string[] | ( ( prevState: string[] ) => string[] ) - ) => void; + onSelectionChange: setSelection; data: Item[]; actions: Action< Item >[]; getItemId: ( item: Item ) => string; @@ -89,9 +88,7 @@ interface TableRowProps< Item extends AnyItem > { primaryField?: NormalizedField< Item >; selection: string[]; getItemId: ( item: Item ) => string; - onSelectionChange: ( - selection: string[] | ( ( prevState: string[] ) => string[] ) - ) => void; + onSelectionChange: setSelection; data: Item[]; }