From f9fda3004502d1fdfe99b2f1edc35149aca1b281 Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Fri, 14 May 2021 11:53:39 +0300 Subject: [PATCH] Add table sorting Signed-off-by: Alex Andreev --- .../+extensions/installed-extensions.tsx | 4 +- .../components/table/react-table.module.css | 4 +- src/renderer/components/table/react-table.tsx | 11 +- types/react-table.config.d.ts | 120 ++++++++++++++++++ 4 files changed, 134 insertions(+), 5 deletions(-) create mode 100644 types/react-table.config.d.ts diff --git a/src/renderer/components/+extensions/installed-extensions.tsx b/src/renderer/components/+extensions/installed-extensions.tsx index bbf27bd76f..e86c397e28 100644 --- a/src/renderer/components/+extensions/installed-extensions.tsx +++ b/src/renderer/components/+extensions/installed-extensions.tsx @@ -100,7 +100,7 @@ export function InstalledExtensions({ extensions, uninstall }: Props) { disabled={isUninstalling} onClick={() => extension.isEnabled = true} > - + Enable )} @@ -108,7 +108,7 @@ export function InstalledExtensions({ extensions, uninstall }: Props) { disabled={isUninstalling} onClick={() => uninstall(extension)} > - + Uninstall diff --git a/src/renderer/components/table/react-table.module.css b/src/renderer/components/table/react-table.module.css index ea3398c70a..52ebc2f29d 100644 --- a/src/renderer/components/table/react-table.module.css +++ b/src/renderer/components/table/react-table.module.css @@ -7,11 +7,11 @@ @apply overflow-hidden font-bold; border-bottom: thin solid var(--hrColor); color: var(--textColorAccent); + padding-top: 6px; height: 33px; } -.tr:last-child { - border-bottom: thin solid var(--hrColor); +.tr { } .th { diff --git a/src/renderer/components/table/react-table.tsx b/src/renderer/components/table/react-table.tsx index f096aaff52..5cfae508f8 100644 --- a/src/renderer/components/table/react-table.tsx +++ b/src/renderer/components/table/react-table.tsx @@ -3,6 +3,7 @@ import React from "react"; import { useCallback, useMemo } from "react"; import { useFlexLayout, useSortBy, useTable, UseTableOptions } from "react-table"; import { FixedSizeList } from "react-window"; +import { Icon } from "../icon"; import { cssNames } from "../../utils"; interface Props extends UseTableOptions { @@ -69,8 +70,16 @@ export function Table({ columns, data, virtual, headless }: Props) { {headerGroups.map(headerGroup => (
{headerGroup.headers.map(column => ( -
+
{column.render("Header")} + {/* Sort direction indicator */} + + {column.isSorted + ? column.isSortedDesc + ? + : + : !column.disableSortBy && } +
))}
diff --git a/types/react-table.config.d.ts b/types/react-table.config.d.ts new file mode 100644 index 0000000000..ab89ea5113 --- /dev/null +++ b/types/react-table.config.d.ts @@ -0,0 +1,120 @@ +import { + UseColumnOrderInstanceProps, + UseColumnOrderState, + UseExpandedHooks, + UseExpandedInstanceProps, + UseExpandedOptions, + UseExpandedRowProps, + UseExpandedState, + UseFiltersColumnOptions, + UseFiltersColumnProps, + UseFiltersInstanceProps, + UseFiltersOptions, + UseFiltersState, + UseGlobalFiltersColumnOptions, + UseGlobalFiltersInstanceProps, + UseGlobalFiltersOptions, + UseGlobalFiltersState, + UseGroupByCellProps, + UseGroupByColumnOptions, + UseGroupByColumnProps, + UseGroupByHooks, + UseGroupByInstanceProps, + UseGroupByOptions, + UseGroupByRowProps, + UseGroupByState, + UsePaginationInstanceProps, + UsePaginationOptions, + UsePaginationState, + UseResizeColumnsColumnOptions, + UseResizeColumnsColumnProps, + UseResizeColumnsOptions, + UseResizeColumnsState, + UseRowSelectHooks, + UseRowSelectInstanceProps, + UseRowSelectOptions, + UseRowSelectRowProps, + UseRowSelectState, + UseRowStateCellProps, + UseRowStateInstanceProps, + UseRowStateOptions, + UseRowStateRowProps, + UseRowStateState, + UseSortByColumnOptions, + UseSortByColumnProps, + UseSortByHooks, + UseSortByInstanceProps, + UseSortByOptions, + UseSortByState +} from "react-table"; + +declare module "react-table" { + // take this file as-is, or comment out the sections that don't apply to your plugin configuration + + export interface TableOptions> + extends UseExpandedOptions, + UseFiltersOptions, + UseGlobalFiltersOptions, + UseGroupByOptions, + UsePaginationOptions, + UseResizeColumnsOptions, + UseRowSelectOptions, + UseRowStateOptions, + UseSortByOptions, + // note that having Record here allows you to add anything to the options, this matches the spirit of the + // underlying js library, but might be cleaner if it's replaced by a more specific type that matches your + // feature set, this is a safe default. + Record {} + + export interface Hooks = Record> + extends UseExpandedHooks, + UseGroupByHooks, + UseRowSelectHooks, + UseSortByHooks {} + + export interface TableInstance = Record> + extends UseColumnOrderInstanceProps, + UseExpandedInstanceProps, + UseFiltersInstanceProps, + UseGlobalFiltersInstanceProps, + UseGroupByInstanceProps, + UsePaginationInstanceProps, + UseRowSelectInstanceProps, + UseRowStateInstanceProps, + UseSortByInstanceProps {} + + export interface TableState = Record> + extends UseColumnOrderState, + UseExpandedState, + UseFiltersState, + UseGlobalFiltersState, + UseGroupByState, + UsePaginationState, + UseResizeColumnsState, + UseRowSelectState, + UseRowStateState, + UseSortByState {} + + export interface ColumnInterface = Record> + extends UseFiltersColumnOptions, + UseGlobalFiltersColumnOptions, + UseGroupByColumnOptions, + UseResizeColumnsColumnOptions, + UseSortByColumnOptions {} + + export interface ColumnInstance = Record> + extends UseFiltersColumnProps, + UseGroupByColumnProps, + UseResizeColumnsColumnProps, + UseSortByColumnProps {} + + export interface Cell = Record, V = any> + extends UseGroupByCellProps, + UseRowStateCellProps {} + + export interface Row = Record> + extends UseExpandedRowProps, + UseGroupByRowProps, + UseRowSelectRowProps, + UseRowStateRowProps {} +}