From a5eefbae764b19981b7031a11c625ee13d2228f8 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Tue, 12 Apr 2022 14:35:18 -0400 Subject: [PATCH] fix list-layout.tsx and header.tsx Signed-off-by: Sebastian Malton --- .../components/item-object-list/header.tsx | 4 +- .../item-object-list/list-layout.tsx | 45 ++++++++++++------- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/renderer/components/item-object-list/header.tsx b/src/renderer/components/item-object-list/header.tsx index ea7f26b0ea..e0d58ad3b3 100644 --- a/src/renderer/components/item-object-list/header.tsx +++ b/src/renderer/components/item-object-list/header.tsx @@ -28,7 +28,7 @@ export interface ItemListLayoutHeaderProps) => ReactNode); + | (() => ReactNode); customizeHeader?: HeaderCustomizer | HeaderCustomizer[]; } @@ -71,7 +71,7 @@ export class ItemListLayoutHeader = } ); +export type RenderHeaderTitle< + Item extends ItemObject, + PreLoadStores extends boolean, +> = ReactNode | ((parent: NonInjectedItemListLayout) => ReactNode); + export type HeaderCustomizer = (placeholders: HeaderPlaceholders) => HeaderPlaceholders; -export type ItemListLayoutProps = { +export type ItemListLayoutProps = { tableId?: string; className: IClassName; - getItems: () => I[]; - store: ItemListStore; + getItems: () => Item[]; + store: ItemListStore; dependentStores?: SubscribableStore[]; preloadStores?: boolean; hideFilters?: boolean; - searchFilters?: SearchFilter[]; + searchFilters?: SearchFilter[]; /** @deprecated */ - filterItems?: ItemsFilter[]; + filterItems?: ItemsFilter[]; // header (title, filtering, searching, etc.) showHeader?: boolean; headerClassName?: IClassName; - renderHeaderTitle?: ReactNode | ((parent: NonInjectedItemListLayout) => ReactNode); + renderHeaderTitle?: RenderHeaderTitle; customizeHeader?: HeaderCustomizer | HeaderCustomizer[]; // items list configuration @@ -96,23 +101,23 @@ export type ItemListLayoutProps; - tableProps?: Partial>; // low-level table configuration + sortingCallbacks?: TableSortCallbacks; + tableProps?: Partial>; // low-level table configuration renderTableHeader?: (TableCellProps | undefined | null)[]; - renderTableContents: (item: I) => (ReactNode | TableCellProps)[]; - renderItemMenu?: (item: I, store: ItemListStore) => ReactNode; - customizeTableRowProps?: (item: I) => Partial>; + renderTableContents: (item: Item) => (ReactNode | TableCellProps)[]; + renderItemMenu?: (item: Item, store: ItemListStore) => ReactNode; + customizeTableRowProps?: (item: Item) => Partial>; addRemoveButtons?: Partial; virtual?: boolean; // item details view hasDetailsView?: boolean; - detailsItem?: I; - onDetails?: (item: I) => void; + detailsItem?: Item; + onDetails?: (item: Item) => void; // other - customizeRemoveDialog?: (selectedItems: I[]) => Partial; - renderFooter?: (parent: NonInjectedItemListLayout) => React.ReactNode; + customizeRemoveDialog?: (selectedItems: Item[]) => Partial; + renderFooter?: (parent: NonInjectedItemListLayout) => React.ReactNode; /** * Message to display when a store failed to load @@ -121,7 +126,7 @@ export type ItemListLayoutProps; + filterCallbacks?: ItemsFilters; } & ( PreLoadStores extends true ? { @@ -261,6 +266,8 @@ class NonInjectedItemListLayout (
renderHeaderTitle(this) + : renderHeaderTitle + )} customizeHeader={this.props.customizeHeader} />