@trackunit/react-table 0.0.481 → 0.0.484
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/index.cjs.js +16 -4
- package/index.esm.js +17 -5
- package/package.json +1 -1
- package/src/menus/ColumnFilter.d.ts +1 -0
package/index.cjs.js
CHANGED
|
@@ -336,6 +336,12 @@ const cvaColumnFilterGrabbable = cssClassVarianceUtilities.cvaMerge(["flex", "it
|
|
|
336
336
|
const ColumnFilter = ({ columns, setColumnOrder, defaultColumnOrder = [], columnOrder, onUserEvent, }) => {
|
|
337
337
|
const [t] = useTranslation();
|
|
338
338
|
const numberOfHiddenColumns = columns.filter(column => !column.getIsVisible()).length;
|
|
339
|
+
React.useEffect(() => {
|
|
340
|
+
if (defaultColumnOrder.length > 0) {
|
|
341
|
+
setColumnOrder(defaultColumnOrder);
|
|
342
|
+
}
|
|
343
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
344
|
+
}, []); //This should only run once, at page load
|
|
339
345
|
const resetHiddenColumns = React__namespace.useCallback(() => {
|
|
340
346
|
columns.forEach(column => { var _a; return column.toggleVisibility(!((_a = column.columnDef.meta) === null || _a === void 0 ? void 0 : _a.hiddenByDefault)); });
|
|
341
347
|
setColumnOrder(defaultColumnOrder);
|
|
@@ -355,16 +361,22 @@ const ColumnFilter = ({ columns, setColumnOrder, defaultColumnOrder = [], column
|
|
|
355
361
|
}
|
|
356
362
|
return t("table.columnFilters.columns");
|
|
357
363
|
};
|
|
358
|
-
return (jsxRuntime.jsx(reactDnd.DndProvider, { backend: reactDndHtml5Backend.HTML5Backend, children: jsxRuntime.jsx(reactComponents.Tooltip, { label: t("table.columnFilters.tooltip"), placement: "bottom", children: jsxRuntime.jsxs(reactComponents.Popover, { placement: "bottom-start", children: [jsxRuntime.jsx(reactComponents.PopoverTrigger, { children: jsxRuntime.jsx(reactComponents.Button, { prefix: jsxRuntime.jsx(reactComponents.Icon, { name: "ViewColumns", size: "small" }), size: "small", variant: "ghost-neutral", children: jsxRuntime.jsx("span", { className: "hidden sm:block", children: getColumnButtonText() }) }) }), jsxRuntime.jsx(reactComponents.PopoverContent, { children: () => (jsxRuntime.jsxs(reactComponents.MenuList, { className: "relative max-h-[55vh] w-72 overflow-y-auto pr-4", children: [jsxRuntime.jsxs("div", { className: "mb-2 flex items-center justify-between", children: [jsxRuntime.jsx(reactComponents.Text, { size: "small", subtle: true, children: t("table.columnFilters.title") }), jsxRuntime.jsx(reactComponents.Button, { className: "p-0", onClick: () => resetHiddenColumns(), size: "small", variant: "ghost-neutral", children: t("layout.actions.reset") })] }), jsxRuntime.jsx(ColumnFiltersDragAndDrop, { columns: sortedColumns, onUserEvent: onUserEvent, setColumnOrder: setColumnOrder })] })) })] }) }) }));
|
|
364
|
+
return (jsxRuntime.jsx(reactDnd.DndProvider, { backend: reactDndHtml5Backend.HTML5Backend, children: jsxRuntime.jsx(reactComponents.Tooltip, { label: t("table.columnFilters.tooltip"), placement: "bottom", children: jsxRuntime.jsxs(reactComponents.Popover, { placement: "bottom-start", children: [jsxRuntime.jsx(reactComponents.PopoverTrigger, { children: jsxRuntime.jsx(reactComponents.Button, { prefix: jsxRuntime.jsx(reactComponents.Icon, { name: "ViewColumns", size: "small" }), size: "small", variant: "ghost-neutral", children: jsxRuntime.jsx("span", { className: "hidden sm:block", children: getColumnButtonText() }) }) }), jsxRuntime.jsx(reactComponents.PopoverContent, { children: () => (jsxRuntime.jsxs(reactComponents.MenuList, { className: "relative max-h-[55vh] w-72 overflow-y-auto pr-4", children: [jsxRuntime.jsxs("div", { className: "mb-2 flex items-center justify-between", children: [jsxRuntime.jsx(reactComponents.Text, { size: "small", subtle: true, children: t("table.columnFilters.title") }), jsxRuntime.jsx(reactComponents.Button, { className: "p-0", onClick: () => resetHiddenColumns(), size: "small", variant: "ghost-neutral", children: t("layout.actions.reset") })] }), jsxRuntime.jsx(ColumnFiltersDragAndDrop, { columns: sortedColumns, defaultColumnOrder: defaultColumnOrder, onUserEvent: onUserEvent, setColumnOrder: setColumnOrder })] })) })] }) }) }));
|
|
359
365
|
};
|
|
360
|
-
const ColumnFiltersDragAndDrop = ({ columns, setColumnOrder, onUserEvent, }) => {
|
|
366
|
+
const ColumnFiltersDragAndDrop = ({ columns, setColumnOrder, onUserEvent, defaultColumnOrder, }) => {
|
|
361
367
|
const [localColumns, setLocalColumns] = React__namespace.useState(columns);
|
|
362
368
|
React__namespace.useEffect(() => {
|
|
363
369
|
setLocalColumns(columns);
|
|
364
370
|
}, [columns]);
|
|
365
371
|
const onColumDrop = React__namespace.useCallback(() => {
|
|
366
|
-
|
|
367
|
-
|
|
372
|
+
var _a;
|
|
373
|
+
const firstElement = defaultColumnOrder[0];
|
|
374
|
+
const firstLocalColumnId = (_a = localColumns[0]) === null || _a === void 0 ? void 0 : _a.id;
|
|
375
|
+
const newColumnOrder = firstElement === firstLocalColumnId
|
|
376
|
+
? localColumns.map(column => column.id)
|
|
377
|
+
: [firstElement, ...localColumns.map(column => column.id)].filter((id) => id !== undefined);
|
|
378
|
+
setColumnOrder(newColumnOrder);
|
|
379
|
+
}, [localColumns, setColumnOrder, defaultColumnOrder]);
|
|
368
380
|
const onCancelColumDrop = React__namespace.useCallback(() => {
|
|
369
381
|
setLocalColumns(columns);
|
|
370
382
|
}, [columns]);
|
package/index.esm.js
CHANGED
|
@@ -3,7 +3,7 @@ import { registerTranslations, useNamespaceTranslation } from '@trackunit/i18n-l
|
|
|
3
3
|
import { MenuItem, Icon, Text, Button, useOverflowItems, MoreMenu, MenuList, IconButton, Card, cvaInteractableItem, Spinner, EmptyState, Tooltip, Popover, PopoverTrigger, PopoverContent } from '@trackunit/react-components';
|
|
4
4
|
import { objectValues, truthy, objectKeys, objectEntries } from '@trackunit/shared-utils';
|
|
5
5
|
import * as React from 'react';
|
|
6
|
-
import { useMemo, Children, cloneElement, useRef,
|
|
6
|
+
import { useMemo, Children, cloneElement, useRef, useEffect, useState, useCallback } from 'react';
|
|
7
7
|
import { cvaMerge } from '@trackunit/css-class-variance-utilities';
|
|
8
8
|
import { Link } from '@tanstack/react-router';
|
|
9
9
|
import { flexRender, useReactTable, getSortedRowModel, getCoreRowModel, createColumnHelper } from '@tanstack/react-table';
|
|
@@ -317,6 +317,12 @@ const cvaColumnFilterGrabbable = cvaMerge(["flex", "items-center", "justify-cent
|
|
|
317
317
|
const ColumnFilter = ({ columns, setColumnOrder, defaultColumnOrder = [], columnOrder, onUserEvent, }) => {
|
|
318
318
|
const [t] = useTranslation();
|
|
319
319
|
const numberOfHiddenColumns = columns.filter(column => !column.getIsVisible()).length;
|
|
320
|
+
useEffect(() => {
|
|
321
|
+
if (defaultColumnOrder.length > 0) {
|
|
322
|
+
setColumnOrder(defaultColumnOrder);
|
|
323
|
+
}
|
|
324
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
325
|
+
}, []); //This should only run once, at page load
|
|
320
326
|
const resetHiddenColumns = React.useCallback(() => {
|
|
321
327
|
columns.forEach(column => { var _a; return column.toggleVisibility(!((_a = column.columnDef.meta) === null || _a === void 0 ? void 0 : _a.hiddenByDefault)); });
|
|
322
328
|
setColumnOrder(defaultColumnOrder);
|
|
@@ -336,16 +342,22 @@ const ColumnFilter = ({ columns, setColumnOrder, defaultColumnOrder = [], column
|
|
|
336
342
|
}
|
|
337
343
|
return t("table.columnFilters.columns");
|
|
338
344
|
};
|
|
339
|
-
return (jsx(DndProvider, { backend: HTML5Backend, children: jsx(Tooltip, { label: t("table.columnFilters.tooltip"), placement: "bottom", children: jsxs(Popover, { placement: "bottom-start", children: [jsx(PopoverTrigger, { children: jsx(Button, { prefix: jsx(Icon, { name: "ViewColumns", size: "small" }), size: "small", variant: "ghost-neutral", children: jsx("span", { className: "hidden sm:block", children: getColumnButtonText() }) }) }), jsx(PopoverContent, { children: () => (jsxs(MenuList, { className: "relative max-h-[55vh] w-72 overflow-y-auto pr-4", children: [jsxs("div", { className: "mb-2 flex items-center justify-between", children: [jsx(Text, { size: "small", subtle: true, children: t("table.columnFilters.title") }), jsx(Button, { className: "p-0", onClick: () => resetHiddenColumns(), size: "small", variant: "ghost-neutral", children: t("layout.actions.reset") })] }), jsx(ColumnFiltersDragAndDrop, { columns: sortedColumns, onUserEvent: onUserEvent, setColumnOrder: setColumnOrder })] })) })] }) }) }));
|
|
345
|
+
return (jsx(DndProvider, { backend: HTML5Backend, children: jsx(Tooltip, { label: t("table.columnFilters.tooltip"), placement: "bottom", children: jsxs(Popover, { placement: "bottom-start", children: [jsx(PopoverTrigger, { children: jsx(Button, { prefix: jsx(Icon, { name: "ViewColumns", size: "small" }), size: "small", variant: "ghost-neutral", children: jsx("span", { className: "hidden sm:block", children: getColumnButtonText() }) }) }), jsx(PopoverContent, { children: () => (jsxs(MenuList, { className: "relative max-h-[55vh] w-72 overflow-y-auto pr-4", children: [jsxs("div", { className: "mb-2 flex items-center justify-between", children: [jsx(Text, { size: "small", subtle: true, children: t("table.columnFilters.title") }), jsx(Button, { className: "p-0", onClick: () => resetHiddenColumns(), size: "small", variant: "ghost-neutral", children: t("layout.actions.reset") })] }), jsx(ColumnFiltersDragAndDrop, { columns: sortedColumns, defaultColumnOrder: defaultColumnOrder, onUserEvent: onUserEvent, setColumnOrder: setColumnOrder })] })) })] }) }) }));
|
|
340
346
|
};
|
|
341
|
-
const ColumnFiltersDragAndDrop = ({ columns, setColumnOrder, onUserEvent, }) => {
|
|
347
|
+
const ColumnFiltersDragAndDrop = ({ columns, setColumnOrder, onUserEvent, defaultColumnOrder, }) => {
|
|
342
348
|
const [localColumns, setLocalColumns] = React.useState(columns);
|
|
343
349
|
React.useEffect(() => {
|
|
344
350
|
setLocalColumns(columns);
|
|
345
351
|
}, [columns]);
|
|
346
352
|
const onColumDrop = React.useCallback(() => {
|
|
347
|
-
|
|
348
|
-
|
|
353
|
+
var _a;
|
|
354
|
+
const firstElement = defaultColumnOrder[0];
|
|
355
|
+
const firstLocalColumnId = (_a = localColumns[0]) === null || _a === void 0 ? void 0 : _a.id;
|
|
356
|
+
const newColumnOrder = firstElement === firstLocalColumnId
|
|
357
|
+
? localColumns.map(column => column.id)
|
|
358
|
+
: [firstElement, ...localColumns.map(column => column.id)].filter((id) => id !== undefined);
|
|
359
|
+
setColumnOrder(newColumnOrder);
|
|
360
|
+
}, [localColumns, setColumnOrder, defaultColumnOrder]);
|
|
349
361
|
const onCancelColumDrop = React.useCallback(() => {
|
|
350
362
|
setLocalColumns(columns);
|
|
351
363
|
}, [columns]);
|
package/package.json
CHANGED
|
@@ -19,4 +19,5 @@ export interface ColumnFiltersDragAndDropProps<TColumnFiltersDragAndDrop extends
|
|
|
19
19
|
columns: Column<TColumnFiltersDragAndDrop, TColumnFiltersDragAndDropValue>[];
|
|
20
20
|
setColumnOrder: (updater: Updater<ColumnOrderState>) => void;
|
|
21
21
|
onUserEvent?: (event: "Column Reordering" | "Column Filter", payload: Record<string, unknown>) => void;
|
|
22
|
+
defaultColumnOrder: ColumnOrderState;
|
|
22
23
|
}
|