@trackunit/react-table 0.0.483 → 0.0.485

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 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
- setColumnOrder(localColumns.map(column => column.id));
367
- }, [localColumns, setColumnOrder]);
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, useState, useEffect, useCallback } from 'react';
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
- setColumnOrder(localColumns.map(column => column.id));
348
- }, [localColumns, setColumnOrder]);
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trackunit/react-table",
3
- "version": "0.0.483",
3
+ "version": "0.0.485",
4
4
  "repository": "https://github.com/Trackunit/manager",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "engines": {
@@ -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
  }