@vuu-ui/vuu-table 0.8.26-debug → 0.8.27-debug

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/esm/index.js CHANGED
@@ -76,7 +76,7 @@ var SortIndicator = ({ column }) => {
76
76
  import { useCallback as useCallback2, useRef } from "react";
77
77
  import { jsx as jsx4 } from "react/jsx-runtime";
78
78
  var NOOP = () => void 0;
79
- var baseClass = "vuuColumnResizerNext";
79
+ var baseClass = "vuuColumnResizer";
80
80
  var ColumnResizer = ({
81
81
  onDrag,
82
82
  onDragEnd = NOOP,
@@ -303,8 +303,13 @@ var GroupHeaderCell = ({
303
303
  };
304
304
 
305
305
  // src/header-cell/HeaderCell.tsx
306
+ import { useContextMenu } from "@vuu-ui/vuu-popups";
306
307
  import cx5 from "clsx";
307
- import { useCallback as useCallback5, useRef as useRef4 } from "react";
308
+ import {
309
+ useCallback as useCallback5,
310
+ useMemo as useMemo2,
311
+ useRef as useRef4
312
+ } from "react";
308
313
 
309
314
  // src/column-menu/ColumnMenu.tsx
310
315
  import { PopupMenu } from "@vuu-ui/vuu-popups";
@@ -331,9 +336,9 @@ var HeaderCell = ({
331
336
  column,
332
337
  onClick,
333
338
  onResize,
339
+ showMenu = true,
334
340
  ...htmlAttributes
335
341
  }) => {
336
- var _a;
337
342
  const { HeaderCellContentRenderer, HeaderCellLabelRenderer } = column;
338
343
  const rootRef = useRef4(null);
339
344
  const { isResizing, ...resizeProps } = useTableColumnResize({
@@ -341,26 +346,66 @@ var HeaderCell = ({
341
346
  onResize,
342
347
  rootRef
343
348
  });
349
+ const [showContextMenu] = useContextMenu();
350
+ const handleContextMenu = useMemo2(() => {
351
+ if (showMenu) {
352
+ return void 0;
353
+ } else {
354
+ return (e) => showContextMenu(e, "column-menu", { column });
355
+ }
356
+ }, [column, showContextMenu, showMenu]);
357
+ const headerItems = useMemo2(() => {
358
+ var _a;
359
+ const sortIndicator = /* @__PURE__ */ jsx7(SortIndicator, { column });
360
+ const columnLabel = HeaderCellLabelRenderer ? /* @__PURE__ */ jsx7(
361
+ HeaderCellLabelRenderer,
362
+ {
363
+ className: `${classBase4}-label`,
364
+ column
365
+ }
366
+ ) : /* @__PURE__ */ jsx7("div", { className: `${classBase4}-label`, children: (_a = column.label) != null ? _a : column.name });
367
+ const columnContent = HeaderCellContentRenderer ? [/* @__PURE__ */ jsx7(HeaderCellContentRenderer, { column }, "content")] : [];
368
+ if (showMenu) {
369
+ const columnMenu = /* @__PURE__ */ jsx7(ColumnMenu, { column });
370
+ if (column.align === "right") {
371
+ return [sortIndicator, columnLabel, columnContent, columnMenu];
372
+ } else {
373
+ return [columnMenu, columnLabel, sortIndicator, columnContent];
374
+ }
375
+ } else {
376
+ if (column.align === "right") {
377
+ return [sortIndicator, columnLabel, columnContent];
378
+ } else {
379
+ return [columnLabel, sortIndicator, columnContent];
380
+ }
381
+ }
382
+ }, [HeaderCellContentRenderer, HeaderCellLabelRenderer, column, showMenu]);
344
383
  const handleClick = useCallback5(
345
384
  (evt) => {
346
385
  !isResizing && (onClick == null ? void 0 : onClick(evt));
347
386
  },
348
387
  [isResizing, onClick]
349
388
  );
389
+ const handleKeyDown = useCallback5(
390
+ (evt) => {
391
+ if (evt.key === "Enter") {
392
+ onClick == null ? void 0 : onClick(evt);
393
+ }
394
+ },
395
+ [onClick]
396
+ );
350
397
  const { className, style } = useCell(column, classBase4, true);
351
- const columnMenu = /* @__PURE__ */ jsx7(ColumnMenu, { column });
352
- const columnLabel = HeaderCellLabelRenderer ? /* @__PURE__ */ jsx7(HeaderCellLabelRenderer, { className: `${classBase4}-label`, column }) : /* @__PURE__ */ jsx7("div", { className: `${classBase4}-label`, children: (_a = column.label) != null ? _a : column.name });
353
- const columnContent = HeaderCellContentRenderer ? [/* @__PURE__ */ jsx7(HeaderCellContentRenderer, { column }, "content")] : [];
354
- const sortIndicator = /* @__PURE__ */ jsx7(SortIndicator, { column });
355
- const headerItems = column.align === "right" ? [sortIndicator, columnLabel].concat(columnContent).concat(columnMenu) : [columnMenu, columnLabel, sortIndicator].concat(columnContent);
356
398
  return /* @__PURE__ */ jsxs5(
357
399
  "div",
358
400
  {
359
401
  ...htmlAttributes,
360
402
  className: cx5(className, classNameProp, {
361
- [`${classBase4}-resizing`]: isResizing
403
+ [`${classBase4}-resizing`]: isResizing,
404
+ [`${classBase4}-noMenu`]: showMenu === false
362
405
  }),
363
406
  onClick: handleClick,
407
+ onContextMenu: handleContextMenu,
408
+ onKeyDown: handleKeyDown,
364
409
  ref: rootRef,
365
410
  role: "columnheader",
366
411
  style,
@@ -614,7 +659,11 @@ import { memo as memo2 } from "react";
614
659
  import {
615
660
  useDragDrop
616
661
  } from "@vuu-ui/vuu-ui-controls";
617
- import { moveColumnTo, visibleColumnAtIndex } from "@vuu-ui/vuu-utils";
662
+ import {
663
+ moveColumnTo,
664
+ queryClosest,
665
+ visibleColumnAtIndex
666
+ } from "@vuu-ui/vuu-utils";
618
667
  import { useCallback as useCallback9, useRef as useRef5 } from "react";
619
668
  var useTableHeader = ({
620
669
  columns,
@@ -651,10 +700,7 @@ var useTableHeader = ({
651
700
  const handleColumnHeaderClick = useCallback9(
652
701
  (evt) => {
653
702
  var _a;
654
- const targetElement = evt.target;
655
- const headerCell = targetElement.closest(
656
- ".vuuTableHeaderCell"
657
- );
703
+ const headerCell = queryClosest(evt.target, ".vuuTableHeaderCell");
658
704
  const colIdx = parseInt((_a = headerCell == null ? void 0 : headerCell.dataset.index) != null ? _a : "-1");
659
705
  const column = visibleColumnAtIndex(columns, colIdx);
660
706
  const isAdditive = evt.shiftKey;
@@ -696,6 +742,7 @@ var TableHeader = memo2(
696
742
  onRemoveGroupColumn,
697
743
  onResizeColumn,
698
744
  onSortColumn,
745
+ showColumnHeaderMenus,
699
746
  tableConfig,
700
747
  tableId,
701
748
  virtualColSpan = 0
@@ -747,7 +794,8 @@ var TableHeader = memo2(
747
794
  id: `${tableId}-col-${i}`,
748
795
  onClick,
749
796
  onMouseDown,
750
- onResize: onResizeColumn
797
+ onResize: onResizeColumn,
798
+ showMenu: showColumnHeaderMenus
751
799
  },
752
800
  col.name
753
801
  )
@@ -764,7 +812,7 @@ import {
764
812
  useDragDrop as useDragDrop2
765
813
  } from "@vuu-ui/vuu-ui-controls";
766
814
  import {
767
- applySort,
815
+ toggleOrApplySort,
768
816
  asDataSourceRowObject,
769
817
  buildColumnMap as buildColumnMap2,
770
818
  getIndexFromRowElement as getIndexFromRowElement3,
@@ -778,7 +826,7 @@ import {
778
826
  import {
779
827
  useCallback as useCallback18,
780
828
  useEffect as useEffect4,
781
- useMemo as useMemo7,
829
+ useMemo as useMemo8,
782
830
  useRef as useRef13,
783
831
  useState as useState6
784
832
  } from "react";
@@ -1231,7 +1279,7 @@ var useCellEditing = ({ navigate }) => {
1231
1279
 
1232
1280
  // src/useDataSource.ts
1233
1281
  import { getFullRange, NULL_RANGE, rangesAreSame } from "@vuu-ui/vuu-utils";
1234
- import { useCallback as useCallback11, useEffect, useMemo as useMemo2, useRef as useRef6, useState as useState3 } from "react";
1282
+ import { useCallback as useCallback11, useEffect, useMemo as useMemo3, useRef as useRef6, useState as useState3 } from "react";
1235
1283
 
1236
1284
  // src/moving-window.ts
1237
1285
  import {
@@ -1309,7 +1357,7 @@ var useDataSource = ({
1309
1357
  const isMounted = useRef6(true);
1310
1358
  const hasUpdated = useRef6(false);
1311
1359
  const rangeRef = useRef6(range);
1312
- const dataWindow = useMemo2(
1360
+ const dataWindow = useMemo3(
1313
1361
  () => new MovingWindow(getFullRange(range, renderBufferSize)),
1314
1362
  // eslint-disable-next-line react-hooks/exhaustive-deps
1315
1363
  []
@@ -1395,10 +1443,10 @@ var useDataSource = ({
1395
1443
  };
1396
1444
 
1397
1445
  // src/useInitialValue.ts
1398
- import { useMemo as useMemo3, useRef as useRef7 } from "react";
1446
+ import { useMemo as useMemo4, useRef as useRef7 } from "react";
1399
1447
  var useInitialValue = (value) => {
1400
1448
  const ref = useRef7(value);
1401
- return useMemo3(() => ref.current, []);
1449
+ return useMemo4(() => ref.current, []);
1402
1450
  };
1403
1451
 
1404
1452
  // src/useKeyboardNavigation.ts
@@ -1822,6 +1870,7 @@ import {
1822
1870
  applyFilterToColumns,
1823
1871
  applyGroupByToColumns,
1824
1872
  applySortToColumns,
1873
+ existingSort,
1825
1874
  getCellRenderer,
1826
1875
  getColumnHeaderContentRenderer,
1827
1876
  getColumnHeaderLabelRenderer,
@@ -1833,6 +1882,7 @@ import {
1833
1882
  isGroupColumn as isGroupColumn3,
1834
1883
  isPinned,
1835
1884
  logger,
1885
+ removeSort,
1836
1886
  replaceColumn,
1837
1887
  sortPinnedColumns,
1838
1888
  stripFilterFromColumns,
@@ -2108,6 +2158,11 @@ function updateTableConfig2(state, { confirmed, filter, groupBy, sort }) {
2108
2158
  ...state,
2109
2159
  columns: applySortToColumns(result.columns, sort)
2110
2160
  };
2161
+ } else if (existingSort(result.columns)) {
2162
+ result = {
2163
+ ...state,
2164
+ columns: removeSort(result.columns)
2165
+ };
2111
2166
  }
2112
2167
  if (hasFilter) {
2113
2168
  result = {
@@ -2133,7 +2188,7 @@ import {
2133
2188
  useCallback as useCallback15,
2134
2189
  useEffect as useEffect3,
2135
2190
  useImperativeHandle,
2136
- useMemo as useMemo4,
2191
+ useMemo as useMemo5,
2137
2192
  useRef as useRef10,
2138
2193
  useState as useState4
2139
2194
  } from "react";
@@ -2239,7 +2294,7 @@ var useTableScroll = ({
2239
2294
  const columnsWithinViewportRef = useRef10([]);
2240
2295
  const [, forceRefresh] = useState4({});
2241
2296
  const preSpanRef = useRef10(0);
2242
- useMemo4(() => {
2297
+ useMemo5(() => {
2243
2298
  const [visibleColumns, offset] = getColumnsInViewport(
2244
2299
  columns,
2245
2300
  contentContainerPosRef.current.scrollLeft,
@@ -2471,7 +2526,7 @@ var useTableScroll = ({
2471
2526
  viewportRowCount
2472
2527
  ]
2473
2528
  );
2474
- const scrollHandles = useMemo4(
2529
+ const scrollHandles = useMemo5(
2475
2530
  // TODO not complete yet
2476
2531
  () => ({
2477
2532
  scrollToIndex: (rowIndex) => {
@@ -2530,7 +2585,7 @@ import {
2530
2585
  measurePinnedColumns,
2531
2586
  virtualRowPositioning
2532
2587
  } from "@vuu-ui/vuu-utils";
2533
- import { useCallback as useCallback16, useMemo as useMemo5, useRef as useRef11 } from "react";
2588
+ import { useCallback as useCallback16, useMemo as useMemo6, useRef as useRef11 } from "react";
2534
2589
  var MAX_PIXEL_HEIGHT = 1e7;
2535
2590
  var UNMEASURED_VIEWPORT = {
2536
2591
  appliedPageSize: 0,
@@ -2564,15 +2619,15 @@ var useTableViewport = ({
2564
2619
  const pixelContentHeight = Math.min(rowHeight * rowCount, MAX_PIXEL_HEIGHT);
2565
2620
  const virtualContentHeight = rowCount * rowHeight;
2566
2621
  const virtualisedExtent = virtualContentHeight - pixelContentHeight;
2567
- const { pinnedWidthLeft, pinnedWidthRight, unpinnedWidth } = useMemo5(
2622
+ const { pinnedWidthLeft, pinnedWidthRight, unpinnedWidth } = useMemo6(
2568
2623
  () => measurePinnedColumns(columns, selectionEndSize),
2569
2624
  [columns, selectionEndSize]
2570
2625
  );
2571
2626
  const totalHeaderHeightRef = useRef11(headerHeight);
2572
- useMemo5(() => {
2627
+ useMemo6(() => {
2573
2628
  totalHeaderHeightRef.current = headerHeight * (1 + headings.length);
2574
2629
  }, [headerHeight, headings.length]);
2575
- const [getRowOffset, getRowAtPosition, isVirtualScroll] = useMemo5(() => {
2630
+ const [getRowOffset, getRowAtPosition, isVirtualScroll] = useMemo6(() => {
2576
2631
  if (virtualisedExtent) {
2577
2632
  const [_getRowOffset, getRowAtPosition2, _isVirtual] = virtualRowPositioning(rowHeight, virtualisedExtent, pctScrollTopRef);
2578
2633
  const getOffset = (row) => {
@@ -2596,7 +2651,7 @@ var useTableViewport = ({
2596
2651
  );
2597
2652
  }
2598
2653
  }, []);
2599
- return useMemo5(() => {
2654
+ return useMemo6(() => {
2600
2655
  if (size) {
2601
2656
  const { current: totalHeaderHeight } = totalHeaderHeightRef;
2602
2657
  const scrollbarSize = 15;
@@ -2776,7 +2831,7 @@ var useTableAndColumnSettings = ({
2776
2831
  import {
2777
2832
  getRowClassNameGenerator
2778
2833
  } from "@vuu-ui/vuu-utils";
2779
- import { useMemo as useMemo6 } from "react";
2834
+ import { useMemo as useMemo7 } from "react";
2780
2835
  var createClassNameGenerator = (ids) => {
2781
2836
  const functions = [];
2782
2837
  ids == null ? void 0 : ids.forEach((id) => {
@@ -2799,7 +2854,7 @@ var createClassNameGenerator = (ids) => {
2799
2854
  var useRowClassNameGenerators = ({
2800
2855
  rowClassNameGenerators
2801
2856
  }) => {
2802
- return useMemo6(() => {
2857
+ return useMemo7(() => {
2803
2858
  return createClassNameGenerator(rowClassNameGenerators);
2804
2859
  }, [rowClassNameGenerators]);
2805
2860
  };
@@ -2850,7 +2905,7 @@ var useTable = ({
2850
2905
  }
2851
2906
  const rowClassNameGenerator = useRowClassNameGenerators(config);
2852
2907
  const useRowDragDrop = allowDragDrop ? useDragDrop2 : useNullDragDrop;
2853
- const menuBuilder = useMemo7(
2908
+ const menuBuilder = useMemo8(
2854
2909
  () => buildContextMenuDescriptors(dataSource),
2855
2910
  [dataSource]
2856
2911
  );
@@ -2882,7 +2937,7 @@ var useTable = ({
2882
2937
  },
2883
2938
  [dataSource, dispatchTableModelAction, onConfigChange]
2884
2939
  );
2885
- const columnMap = useMemo7(
2940
+ const columnMap = useMemo8(
2886
2941
  () => buildColumnMap2(dataSource.columns),
2887
2942
  [dataSource.columns]
2888
2943
  );
@@ -3048,7 +3103,7 @@ var useTable = ({
3048
3103
  const handleSort = useCallback18(
3049
3104
  (column, extendSort = false, sortType) => {
3050
3105
  if (dataSource) {
3051
- dataSource.sort = applySort(
3106
+ dataSource.sort = toggleOrApplySort(
3052
3107
  dataSource.sort,
3053
3108
  column,
3054
3109
  extendSort,
@@ -3341,13 +3396,13 @@ var useTable = ({
3341
3396
 
3342
3397
  // src/useRowHeight.ts
3343
3398
  import { isValidNumber as isValidNumber2 } from "@vuu-ui/vuu-utils";
3344
- import { useCallback as useCallback19, useMemo as useMemo8, useRef as useRef14, useState as useState7 } from "react";
3399
+ import { useCallback as useCallback19, useMemo as useMemo9, useRef as useRef14, useState as useState7 } from "react";
3345
3400
  var useRowHeight = ({
3346
3401
  rowHeight: rowHeightProp = 0
3347
3402
  }) => {
3348
3403
  const [rowHeight, setRowHeight] = useState7(rowHeightProp);
3349
3404
  const heightRef = useRef14(rowHeight);
3350
- const resizeObserver = useMemo8(() => {
3405
+ const resizeObserver = useMemo9(() => {
3351
3406
  return new ResizeObserver((entries) => {
3352
3407
  for (const entry of entries) {
3353
3408
  const [{ blockSize: measuredSize }] = entry.borderBoxSize;
@@ -3407,6 +3462,7 @@ var TableCore = ({
3407
3462
  scrollingApiRef,
3408
3463
  selectionModel = "extended",
3409
3464
  showColumnHeaders = true,
3465
+ showColumnHeaderMenus = true,
3410
3466
  headerHeight = showColumnHeaders ? rowHeight * 1.25 : 0,
3411
3467
  size
3412
3468
  }) => {
@@ -3517,6 +3573,7 @@ var TableCore = ({
3517
3573
  onRemoveGroupColumn,
3518
3574
  onResizeColumn,
3519
3575
  onSortColumn,
3576
+ showColumnHeaderMenus,
3520
3577
  tableConfig,
3521
3578
  tableId: id,
3522
3579
  virtualColSpan: scrollProps.virtualColSpan
@@ -3575,6 +3632,7 @@ var Table = forwardRef2(function TableNext({
3575
3632
  scrollingApiRef,
3576
3633
  selectionModel,
3577
3634
  showColumnHeaders,
3635
+ showColumnHeaderMenus,
3578
3636
  headerHeight,
3579
3637
  style: styleProp,
3580
3638
  ...htmlAttributes
@@ -3590,7 +3648,6 @@ var Table = forwardRef2(function TableNext({
3590
3648
  if (dataSource === void 0) {
3591
3649
  throw Error("vuu Table requires dataSource prop");
3592
3650
  }
3593
- console.log({ rowHeight });
3594
3651
  return /* @__PURE__ */ jsxs9(
3595
3652
  MeasuredContainer,
3596
3653
  {
@@ -3629,6 +3686,7 @@ var Table = forwardRef2(function TableNext({
3629
3686
  scrollingApiRef,
3630
3687
  selectionModel,
3631
3688
  showColumnHeaders,
3689
+ showColumnHeaderMenus,
3632
3690
  size
3633
3691
  }
3634
3692
  ) : null