@procore/data-table 14.24.0 → 14.25.0

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.
@@ -7,6 +7,7 @@ import { Error as Error$1, Grip, Pencil, Building, ExternalLink, Clear, Calendar
7
7
  import classNames from 'classnames';
8
8
  import { isDate, parseISO, isSameDay, formatISO, isBefore } from 'date-fns';
9
9
  import { formatNumber, formatCurrency, formatPercentage } from '@procore/labs-financials-utils';
10
+ import styled4, { css as css$1 } from 'styled-components';
10
11
  import { format } from '@procore/labs-financials-utils/dist/format';
11
12
  import { detectPrng, factory } from 'ulid';
12
13
  import { useToastAlertContext, ToastAlertProvider } from '@procore/toast-alert';
@@ -14,10 +15,9 @@ import ReactDOM, { createPortal } from 'react-dom';
14
15
  import { renderToString, renderToStaticMarkup } from 'react-dom/server';
15
16
  import { storage } from '@procore/web-sdk-storage';
16
17
  import _isEqual from 'lodash.isequal';
17
- import ReactResizeDetector from 'react-resize-detector';
18
+ import { useResizeDetector } from 'react-resize-detector';
18
19
  import { DateTimeSelectField } from '@procore/labs-datetime-select';
19
20
  import Decimal from 'decimal.js';
20
- import styled3, { css as css$1 } from 'styled-components';
21
21
  import { getDatePlaceholder } from '@procore/globalization-toolkit';
22
22
  import { GroupBySelect } from '@procore/labs-group-by-select';
23
23
 
@@ -8667,6 +8667,9 @@ function getDateObject(date) {
8667
8667
  }
8668
8668
  return date;
8669
8669
  }
8670
+ var StyledDateSelect = styled4(DateSelect)`
8671
+ background-color: #ffffff;
8672
+ `;
8670
8673
  var DateCellValue = ({
8671
8674
  columnDefinition,
8672
8675
  isGroup,
@@ -8714,7 +8717,7 @@ var Editor2 = React77.forwardRef(
8714
8717
  timeZone: columnDefinition.cellEditorParams?.timeZone
8715
8718
  },
8716
8719
  /* @__PURE__ */ React77.createElement(
8717
- DateSelect,
8720
+ StyledDateSelect,
8718
8721
  {
8719
8722
  afterHide,
8720
8723
  className: cx4("input-cell"),
@@ -56477,7 +56480,6 @@ var getMainMenuItems = (props, I18n) => {
56477
56480
  }),
56478
56481
  value: "rowUnGroup",
56479
56482
  action() {
56480
- props.columnApi.resetColumnState();
56481
56483
  props.columnApi.removeRowGroupColumn(props.column);
56482
56484
  }
56483
56485
  };
@@ -56487,7 +56489,6 @@ var getMainMenuItems = (props, I18n) => {
56487
56489
  }),
56488
56490
  value: "rowGroup",
56489
56491
  action() {
56490
- props.columnApi.resetColumnState();
56491
56492
  props.columnApi.addRowGroupColumn(props.column);
56492
56493
  }
56493
56494
  };
@@ -56743,8 +56744,18 @@ var GenericHeaderRenderer = (props) => {
56743
56744
  const onSSDR = Boolean(onServerSideDataRequest);
56744
56745
  const [sortOrder, setSortOrder] = React77.useState(props.column.getSort());
56745
56746
  const [isFirstColumn2, setIsFirstColumn] = React77.useState(false);
56747
+ const [isRowGroupActive, setIsRowGroupActive] = React77.useState(
56748
+ () => props.column.isRowGroupActive()
56749
+ );
56746
56750
  const defaultMenuOptions = getMainMenuItems(
56747
- { ...props, onTableConfigChange },
56751
+ {
56752
+ ...props,
56753
+ menuConfig: {
56754
+ ...props.menuConfig,
56755
+ isRowGroupActive
56756
+ },
56757
+ onTableConfigChange
56758
+ },
56748
56759
  I18n
56749
56760
  );
56750
56761
  const headerCellRef = useRef(null);
@@ -56758,6 +56769,18 @@ var GenericHeaderRenderer = (props) => {
56758
56769
  }) : !!headerCheckboxSelection;
56759
56770
  const checkbox = useRef(null);
56760
56771
  const colId = props.column.getId();
56772
+ React77.useEffect(() => {
56773
+ const onRowGroupChanged = () => {
56774
+ setIsRowGroupActive(props.column.isRowGroupActive());
56775
+ };
56776
+ props.column.addEventListener("columnRowGroupChanged", onRowGroupChanged);
56777
+ return () => {
56778
+ props.column.removeEventListener(
56779
+ "columnRowGroupChanged",
56780
+ onRowGroupChanged
56781
+ );
56782
+ };
56783
+ }, []);
56761
56784
  React77.useEffect(() => {
56762
56785
  function calculatePosition() {
56763
56786
  const columns = props.columnApi.getColumnState();
@@ -105000,6 +105023,19 @@ function getRootRowNode(rowNode) {
105000
105023
  return rowNode.level > 0 && rowNode.parent ? getRootRowNode(rowNode.parent) : rowNode;
105001
105024
  }
105002
105025
 
105026
+ // src/utils/mergeRefs.ts
105027
+ function mergeRefs(...refs) {
105028
+ return (value) => {
105029
+ refs.forEach((ref) => {
105030
+ if (typeof ref === "function") {
105031
+ ref(value);
105032
+ } else if (ref != null) {
105033
+ ref.current = value;
105034
+ }
105035
+ });
105036
+ };
105037
+ }
105038
+
105003
105039
  // src/utils/setSiblingGroupsRowSelection.ts
105004
105040
  function setSiblingGroupsRowSelection(groupIndex, gridApi) {
105005
105041
  gridApi?.forEachNode((node) => {
@@ -109578,6 +109614,15 @@ var Table = (props) => {
109578
109614
  ["onGridReady"],
109579
109615
  props.UNSAFE_internalAGGridOverrides ?? {}
109580
109616
  );
109617
+ const { ref: resizeRef } = useResizeDetector({
109618
+ onResize: onContainerResize,
109619
+ refreshMode: "debounce",
109620
+ refreshRate: 400
109621
+ });
109622
+ const combinedRef = React77.useCallback(
109623
+ mergeRefs(wrapperRef, resizeRef),
109624
+ [wrapperRef, resizeRef]
109625
+ );
109581
109626
  return /* @__PURE__ */ React77.createElement(
109582
109627
  Spinner,
109583
109628
  {
@@ -109592,133 +109637,125 @@ var Table = (props) => {
109592
109637
  }
109593
109638
  },
109594
109639
  /* @__PURE__ */ React77.createElement(
109595
- ReactResizeDetector,
109640
+ "div",
109596
109641
  {
109597
- onResize: onContainerResize,
109598
- refreshMode: "debounce",
109599
- refreshRate: 400
109600
- },
109601
- /* @__PURE__ */ React77.createElement(
109602
- "div",
109603
- {
109604
- style: {
109605
- flex: 1,
109606
- width: "100%",
109607
- maxHeight: props.maxHeight && tableHeight < props.maxHeight ? void 0 : props.maxHeight
109608
- },
109609
- className: cx19("ag-theme-alpine", {
109610
- "ag-suppress-column-virtualization": suppressColumnVirtualisation
109611
- }),
109612
- ref: wrapperRef,
109613
- "data-qa": loadingStatus.loading ? "loading" : "loaded"
109642
+ style: {
109643
+ flex: 1,
109644
+ width: "100%",
109645
+ maxHeight: props.maxHeight && tableHeight < props.maxHeight ? void 0 : props.maxHeight
109614
109646
  },
109615
- /* @__PURE__ */ React77.createElement("style", null, `:root {
109647
+ className: cx19("ag-theme-alpine", {
109648
+ "ag-suppress-column-virtualization": suppressColumnVirtualisation
109649
+ }),
109650
+ ref: combinedRef,
109651
+ "data-qa": loadingStatus.loading ? "loading" : "loaded"
109652
+ },
109653
+ /* @__PURE__ */ React77.createElement("style", null, `:root {
109616
109654
  --viewport-width: ${viewportWidth}px;
109617
109655
  --rowActions-width: ${rowActionsWidth.current}px;
109618
109656
  }`),
109619
- /* @__PURE__ */ React77.createElement(
109620
- AgGridReact,
109621
- {
109622
- aggFuncs: aggregationFunctions_exports,
109623
- alwaysAggregateAtRootLevel: !onSSDR,
109624
- autoGroupColumnDef: decoratedAutoGroupColDef,
109625
- cacheBlockSize: props.paginationPageSize || defaultPaginationPageSize,
109626
- isGroupOpenByDefault: isClientSideGroupOpenByDefault,
109627
- isServerSideGroupOpenByDefault,
109628
- defaultColDef,
109629
- enableGroupEdit: internalTableContext.enableGroupEditAndValidation,
109630
- enableCellTextSelection: internalTableContext.enableCellTextSelection,
109631
- enableCellEditingOnBackspace: true,
109632
- excelStyles: transformToExcelStyles(props.excelDataTypeFormats),
109633
- components: frameworkComponents.base,
109634
- fullWidthCellRenderer: FullWidthCellRenderer(
109635
- props.fullWidthCellRenderer
109636
- ),
109637
- getRowHeight: getMainTableRowHeight,
109638
- getRowId: internalTableContext.getRowId,
109639
- getRowStyle,
109640
- groupAllowUnbalanced: true,
109641
- groupDefaultExpanded: props.groupsAlwaysExpanded ? -1 : props.groupDefaultExpanded,
109642
- groupIncludeFooter: !onSSDR && props.groupIncludeFooter === void 0 ? true : props.groupIncludeFooter,
109643
- getGroupRowAgg: props.getGroupRowAgg ? getGroupRowAgg : void 0,
109644
- groupSelectsChildren: internalTableContext.totalRowCount > 0 && props.groupSelectsChildren || !onSSDR,
109645
- groupSelectsFiltered: true,
109646
- headerHeight: props.headerHeight,
109647
- icons: tableIcons,
109648
- isFullWidthRow: (props2) => {
109649
- const node = props2.rowNode;
109650
- return isFullWidthRow(node);
109651
- },
109652
- initialGroupOrderComparator: props.initialGroupOrderComparator ? (params) => props.initialGroupOrderComparator(
109653
- serializeNode(params.nodeA),
109654
- serializeNode(params.nodeB)
109655
- ) : void 0,
109656
- isRowSelectable,
109657
- loadingOverlayComponent: "loadingOverlayRenderer",
109658
- loadingOverlayComponentParams: {
109659
- loading: true
109660
- },
109661
- maintainColumnOrder: props.maintainColumnOrder,
109662
- modules: [
109663
- ...props.modules,
109664
- MasterDetailModule,
109665
- MenuModule,
109666
- RowGroupingModule,
109667
- SetFilterModule,
109668
- CsvExportModule,
109669
- ExcelExportModule,
109670
- SparklinesModule
109671
- ],
109672
- noRowsOverlayComponent: "emptyStateRenderer",
109673
- noRowsOverlayComponentParams: {
109674
- emptyStateRenderer: props.emptyStateRenderer
109675
- },
109676
- onCellValueChanged: internalOnCellValueChanged,
109677
- onColumnGroupOpened,
109678
- onColumnMoved,
109679
- onColumnPinned,
109680
- onColumnResized,
109681
- onColumnRowGroupChanged,
109682
- onDisplayedColumnsChanged,
109683
- onDragStopped,
109684
- onGridReady,
109685
- onColumnEverythingChanged: props.onColumnEverythingChanged,
109686
- onModelUpdated,
109687
- onCellFocused: props.onCellFocused,
109688
- onRowDragEnd,
109689
- onRowDragMove,
109690
- onRowGroupOpened: internalRowGroupOpened,
109691
- onRowSelected: internalOnRowSelected,
109692
- onSortChanged: onSortEventChanged,
109693
- onFilterChanged,
109694
- onFirstDataRendered: props.onFirstDataRendered,
109695
- paginateChildRows: props.paginateChildRows,
109696
- pagination: props.pagination,
109697
- paginationPageSize: props.paginationPageSize || defaultPaginationPageSize,
109698
- popupParent: props.popupParent,
109699
- pinnedBottomRowData: props.pinnedBottomRowData,
109700
- rowBuffer: props.rowBuffer,
109701
- rowClassRules,
109702
- rowDragManaged: onSSDR ? false : props.rowDragManaged ?? true,
109703
- rowModelType: onSSDR ? "serverSide" : void 0,
109704
- rowSelection: "multiple",
109705
- ...serverSideInfiniteScroll,
109706
- suppressClickEdit: true,
109707
- suppressAggFuncInHeader: true,
109708
- suppressColumnMoveAnimation: true,
109709
- suppressColumnVirtualisation,
109710
- suppressContextMenu: true,
109711
- suppressFieldDotNotation: props.suppressFieldDotNotation,
109712
- suppressGroupRowsSticky: !props.stickyExpandedGroupRows,
109713
- suppressPropertyNamesCheck: true,
109714
- suppressRowClickSelection: props.suppressRowClickSelection || tableRowSelectionEnabled,
109715
- suppressPaginationPanel: true,
109716
- tabToNextCell: props.tabToNextCell,
109717
- ...clientSideRowData,
109718
- ...detailRowConfigProps,
109719
- ...overrideProps
109720
- }
109721
- )
109657
+ /* @__PURE__ */ React77.createElement(
109658
+ AgGridReact,
109659
+ {
109660
+ aggFuncs: aggregationFunctions_exports,
109661
+ alwaysAggregateAtRootLevel: !onSSDR,
109662
+ autoGroupColumnDef: decoratedAutoGroupColDef,
109663
+ cacheBlockSize: props.paginationPageSize || defaultPaginationPageSize,
109664
+ isGroupOpenByDefault: isClientSideGroupOpenByDefault,
109665
+ isServerSideGroupOpenByDefault,
109666
+ defaultColDef,
109667
+ enableGroupEdit: internalTableContext.enableGroupEditAndValidation,
109668
+ enableCellTextSelection: internalTableContext.enableCellTextSelection,
109669
+ enableCellEditingOnBackspace: true,
109670
+ excelStyles: transformToExcelStyles(props.excelDataTypeFormats),
109671
+ components: frameworkComponents.base,
109672
+ fullWidthCellRenderer: FullWidthCellRenderer(
109673
+ props.fullWidthCellRenderer
109674
+ ),
109675
+ getRowHeight: getMainTableRowHeight,
109676
+ getRowId: internalTableContext.getRowId,
109677
+ getRowStyle,
109678
+ groupAllowUnbalanced: true,
109679
+ groupDefaultExpanded: props.groupsAlwaysExpanded ? -1 : props.groupDefaultExpanded,
109680
+ groupIncludeFooter: !onSSDR && props.groupIncludeFooter === void 0 ? true : props.groupIncludeFooter,
109681
+ getGroupRowAgg: props.getGroupRowAgg ? getGroupRowAgg : void 0,
109682
+ groupSelectsChildren: internalTableContext.totalRowCount > 0 && props.groupSelectsChildren || !onSSDR,
109683
+ groupSelectsFiltered: true,
109684
+ headerHeight: props.headerHeight,
109685
+ icons: tableIcons,
109686
+ isFullWidthRow: (props2) => {
109687
+ const node = props2.rowNode;
109688
+ return isFullWidthRow(node);
109689
+ },
109690
+ initialGroupOrderComparator: props.initialGroupOrderComparator ? (params) => props.initialGroupOrderComparator(
109691
+ serializeNode(params.nodeA),
109692
+ serializeNode(params.nodeB)
109693
+ ) : void 0,
109694
+ isRowSelectable,
109695
+ loadingOverlayComponent: "loadingOverlayRenderer",
109696
+ loadingOverlayComponentParams: {
109697
+ loading: true
109698
+ },
109699
+ maintainColumnOrder: props.maintainColumnOrder,
109700
+ modules: [
109701
+ ...props.modules,
109702
+ MasterDetailModule,
109703
+ MenuModule,
109704
+ RowGroupingModule,
109705
+ SetFilterModule,
109706
+ CsvExportModule,
109707
+ ExcelExportModule,
109708
+ SparklinesModule
109709
+ ],
109710
+ noRowsOverlayComponent: "emptyStateRenderer",
109711
+ noRowsOverlayComponentParams: {
109712
+ emptyStateRenderer: props.emptyStateRenderer
109713
+ },
109714
+ onCellValueChanged: internalOnCellValueChanged,
109715
+ onColumnGroupOpened,
109716
+ onColumnMoved,
109717
+ onColumnPinned,
109718
+ onColumnResized,
109719
+ onColumnRowGroupChanged,
109720
+ onDisplayedColumnsChanged,
109721
+ onDragStopped,
109722
+ onGridReady,
109723
+ onColumnEverythingChanged: props.onColumnEverythingChanged,
109724
+ onModelUpdated,
109725
+ onCellFocused: props.onCellFocused,
109726
+ onRowDragEnd,
109727
+ onRowDragMove,
109728
+ onRowGroupOpened: internalRowGroupOpened,
109729
+ onRowSelected: internalOnRowSelected,
109730
+ onSortChanged: onSortEventChanged,
109731
+ onFilterChanged,
109732
+ onFirstDataRendered: props.onFirstDataRendered,
109733
+ paginateChildRows: props.paginateChildRows,
109734
+ pagination: props.pagination,
109735
+ paginationPageSize: props.paginationPageSize || defaultPaginationPageSize,
109736
+ popupParent: props.popupParent,
109737
+ pinnedBottomRowData: props.pinnedBottomRowData,
109738
+ rowBuffer: props.rowBuffer,
109739
+ rowClassRules,
109740
+ rowDragManaged: onSSDR ? false : props.rowDragManaged ?? true,
109741
+ rowModelType: onSSDR ? "serverSide" : void 0,
109742
+ rowSelection: "multiple",
109743
+ ...serverSideInfiniteScroll,
109744
+ suppressClickEdit: true,
109745
+ suppressAggFuncInHeader: true,
109746
+ suppressColumnMoveAnimation: true,
109747
+ suppressColumnVirtualisation,
109748
+ suppressContextMenu: true,
109749
+ suppressFieldDotNotation: props.suppressFieldDotNotation,
109750
+ suppressGroupRowsSticky: !props.stickyExpandedGroupRows,
109751
+ suppressPropertyNamesCheck: true,
109752
+ suppressRowClickSelection: props.suppressRowClickSelection || tableRowSelectionEnabled,
109753
+ suppressPaginationPanel: true,
109754
+ tabToNextCell: props.tabToNextCell,
109755
+ ...clientSideRowData,
109756
+ ...detailRowConfigProps,
109757
+ ...overrideProps
109758
+ }
109722
109759
  )
109723
109760
  ),
109724
109761
  props.pagination && gridApi && /* @__PURE__ */ React77.createElement(
@@ -109862,7 +109899,7 @@ var FILTERS_GROUP_EXPANDABLE_AREA_VERTICAL_MARGIN = spacing.md;
109862
109899
  var FILTERS_GROUP_ITEM_HEIGHT = 60;
109863
109900
  var ITEMS_IN_FILTERS_GROUP = 5;
109864
109901
  var FILTERS_GROUP_EXPANDABLE_AREA_HEIGHT = (FILTERS_GROUP_ITEM_HEIGHT + spacing.xl) * ITEMS_IN_FILTERS_GROUP + BORDER_WIDTH;
109865
- var StyledPanelSection = styled3(Panel.Section)`
109902
+ var StyledPanelSection = styled4(Panel.Section)`
109866
109903
  // Filters Group container styles
109867
109904
  &.filters-list-group-section {
109868
109905
  padding-bottom: ${FILTERS_GROUP_VERTICAL_MARGIN}px;
@@ -110155,7 +110192,7 @@ var ConfigPanelButton = () => {
110155
110192
  var QuickFilterLabel = React77.forwardRef(({ enabled, ...props }, ref) => {
110156
110193
  return /* @__PURE__ */ React77.createElement(StyledQuickFilterLabel, { $enabled: enabled }, /* @__PURE__ */ React77.createElement(SelectButton, { ref, ...props }));
110157
110194
  });
110158
- var StyledQuickFilterLabel = styled3.div`
110195
+ var StyledQuickFilterLabel = styled4.div`
110159
110196
  ${StyledSelectButton} {
110160
110197
  width: auto;
110161
110198
  max-width: 380px;
@@ -110782,7 +110819,7 @@ var LocationQuickFilterRenderer = ({
110782
110819
  );
110783
110820
  };
110784
110821
  var LocationQuickFilterRenderer_default = LocationQuickFilterRenderer;
110785
- var StyledFilterPresetPopoverContent = styled3(Popover.Content)`
110822
+ var StyledFilterPresetPopoverContent = styled4(Popover.Content)`
110786
110823
  padding: ${spacing.sm}px ${spacing.lg}px;
110787
110824
  `;
110788
110825
  var getValueLabel = (isValueEmpty, value, placeholder, filterName) => {
@@ -110864,7 +110901,7 @@ var getSuperSelectFilterPreset = (columnDefinition) => {
110864
110901
  selectionStyle: "highlight"
110865
110902
  };
110866
110903
  };
110867
- var StyledSuperSelectWrapper = styled3.div`
110904
+ var StyledSuperSelectWrapper = styled4.div`
110868
110905
  ${UNSAFE_StyledSuperSelectTrigger} {
110869
110906
  width: auto;
110870
110907
  }
@@ -111317,7 +111354,7 @@ var FilterIcon = () => {
111317
111354
  )
111318
111355
  );
111319
111356
  };
111320
- var StyledFilterTokenWrapper = styled3.div`
111357
+ var StyledFilterTokenWrapper = styled4.div`
111321
111358
  ${UNSAFE_StyledFilterTokenLabel} {
111322
111359
  font-weight: ${typographyWeights.semibold};
111323
111360
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@procore/data-table",
3
- "version": "14.24.0",
3
+ "version": "14.25.0",
4
4
  "description": "Complex data grid built on top of ag-grid, with DST components and styles.",
5
5
  "type": "module",
6
6
  "main": "dist/legacy/index.cjs",
@@ -89,7 +89,7 @@
89
89
  "lodash.debounce": "4.0.8",
90
90
  "lodash.isequal": "4.5.0",
91
91
  "ramda": "0.28.0",
92
- "react-resize-detector": "8.0.4",
92
+ "react-resize-detector": "12.0.0",
93
93
  "ulid": "2.3.0"
94
94
  },
95
95
  "devDependencies": {
@@ -112,7 +112,7 @@
112
112
  "@procore/core-css": "10.17.0",
113
113
  "@procore/core-icons": "12.3.0",
114
114
  "@procore/core-prettier": "10.2.0",
115
- "@procore/core-react": "12.17.3",
115
+ "@procore/core-react": "12.17.5",
116
116
  "@procore/eslint-config": "10.0.0",
117
117
  "@procore/globalization-toolkit": "3.1.0",
118
118
  "@procore/labs-financials-utils": "3.0.1",