@procore/data-table 14.37.0 → 14.39.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.
@@ -54602,6 +54602,32 @@ function SingleSelectFilterRenderer({
54602
54602
  );
54603
54603
  }
54604
54604
 
54605
+ // src/utils/columnEditableHelpers.ts
54606
+ function createColumnEditableUtils(options) {
54607
+ return {
54608
+ overrideEditable: (columnEditable) => {
54609
+ return (params) => {
54610
+ const isGroupNodeExpanded = params.node.group && params.node.expanded;
54611
+ if (params.node?.rowPinned || !options.enableGroupHeaderEdit && isGroupNodeExpanded && !params.node.footer) {
54612
+ return false;
54613
+ }
54614
+ if (typeof columnEditable === "boolean") {
54615
+ return columnEditable;
54616
+ }
54617
+ return columnEditable?.(params) ?? false;
54618
+ };
54619
+ }
54620
+ };
54621
+ }
54622
+ function isColumnEditable(columnEditable) {
54623
+ return (params) => {
54624
+ if (typeof columnEditable === "boolean") {
54625
+ return columnEditable;
54626
+ }
54627
+ return columnEditable?.(params) ?? false;
54628
+ };
54629
+ }
54630
+
54605
54631
  // src/utils/transformers.ts
54606
54632
  var emptyObject = {};
54607
54633
  var DEFAULT_AUTO_GROUP_COLUMN_DEFINITION = {
@@ -54682,22 +54708,11 @@ function transformToColumnDefinition(colDef = emptyObject) {
54682
54708
  valueSetter: colDef.valueSetter
54683
54709
  };
54684
54710
  }
54685
- function isEditable(columnEditable) {
54686
- return (params) => {
54687
- if (params.node?.rowPinned || params.node.group && params.node.expanded && !params.node.footer) {
54688
- return false;
54689
- }
54690
- if (typeof columnEditable === "boolean") {
54691
- return columnEditable;
54692
- }
54693
- return columnEditable?.(params) ?? false;
54694
- };
54695
- }
54696
54711
  function shouldHaveEditStyles(params) {
54697
54712
  if (!params.colDef?.cellEditor) {
54698
54713
  return false;
54699
54714
  }
54700
- return isEditable(params.colDef.editable);
54715
+ return isColumnEditable(params.colDef.editable);
54701
54716
  }
54702
54717
  var toExcelCellClass = (className) => `excel-export--${className}`;
54703
54718
  function transformToExcelStyles(excelDataFormats) {
@@ -54820,11 +54835,11 @@ function transformColumnDefinitionToColDef(dataTableColumnDefinition, enableGrou
54820
54835
  parentData: context?.parentData,
54821
54836
  parentId: context?.parentId
54822
54837
  }) : aggFunc,
54823
- bulkEditable: isEditable(bulkEditable),
54838
+ bulkEditable: isColumnEditable(bulkEditable),
54824
54839
  cellClass: cellExcelDataType ? toExcelCellClass(cellExcelDataType) : void 0,
54825
54840
  cellClassRules,
54826
54841
  comparator,
54827
- editable: isEditable(_editable),
54842
+ editable: isColumnEditable(_editable),
54828
54843
  filter: getFilter(dataTableColumnDefinition),
54829
54844
  // set filter by default
54830
54845
  filterParams: {
@@ -55145,12 +55160,12 @@ function getDecoratedAutoGroupColDef(columnDefinition, enableGroupEditAndValidat
55145
55160
  }
55146
55161
 
55147
55162
  // src/CellRenderers/AutoGroupCell.scss
55148
- var css5 = `._autoGroupCell_pq41h_1 {
55163
+ var css5 = `._autoGroupCell_1qx8z_1 {
55149
55164
  height: 100%;
55150
55165
  width: 100%;
55151
55166
  }
55152
55167
 
55153
- ._indent_pq41h_6 {
55168
+ ._indent_1qx8z_6 {
55154
55169
  border-right: 1px solid #d6dadc;
55155
55170
  background: #f4f5f6;
55156
55171
  position: absolute;
@@ -55158,44 +55173,45 @@ var css5 = `._autoGroupCell_pq41h_1 {
55158
55173
  bottom: -1px;
55159
55174
  width: 12px;
55160
55175
  }
55161
- ._indent_pq41h_6._innermostLastIndent_pq41h_14 {
55176
+ ._indent_1qx8z_6._innermostLastIndent_1qx8z_14 {
55162
55177
  bottom: 0px;
55163
55178
  }
55164
55179
 
55165
- ._expandableCaret_pq41h_18 {
55180
+ ._expandableCaret_1qx8z_18 {
55166
55181
  margin-left: -8px;
55167
55182
  margin-right: 4px;
55168
55183
  width: 24px;
55184
+ flex-shrink: 0;
55169
55185
  }
55170
55186
 
55171
- ._expandCaret_pq41h_24 {
55187
+ ._expandCaret_1qx8z_25 {
55172
55188
  color: #2066df;
55173
55189
  cursor: pointer;
55174
55190
  }
55175
55191
 
55176
- ._collapseCaret_pq41h_29 {
55192
+ ._collapseCaret_1qx8z_30 {
55177
55193
  color: #75838a;
55178
55194
  cursor: pointer;
55179
55195
  }
55180
55196
 
55181
- ._value_pq41h_34 {
55197
+ ._value_1qx8z_35 {
55182
55198
  overflow: hidden;
55183
55199
  text-overflow: ellipsis;
55184
55200
  font-size: 12px;
55185
55201
  }
55186
- ._value_pq41h_34._footer_pq41h_39 {
55202
+ ._value_1qx8z_35._footer_1qx8z_40 {
55187
55203
  color: #6a767c;
55188
55204
  }`;
55189
55205
  document.head.appendChild(document.createElement("style")).appendChild(document.createTextNode(css5));
55190
55206
  var AutoGroupCell_default = {
55191
- "autoGroupCell": "_autoGroupCell_pq41h_1",
55192
- "indent": "_indent_pq41h_6",
55193
- "innermostLastIndent": "_innermostLastIndent_pq41h_14",
55194
- "expandableCaret": "_expandableCaret_pq41h_18",
55195
- "expandCaret": "_expandCaret_pq41h_24",
55196
- "collapseCaret": "_collapseCaret_pq41h_29",
55197
- "value": "_value_pq41h_34",
55198
- "footer": "_footer_pq41h_39"
55207
+ "autoGroupCell": "_autoGroupCell_1qx8z_1",
55208
+ "indent": "_indent_1qx8z_6",
55209
+ "innermostLastIndent": "_innermostLastIndent_1qx8z_14",
55210
+ "expandableCaret": "_expandableCaret_1qx8z_18",
55211
+ "expandCaret": "_expandCaret_1qx8z_25",
55212
+ "collapseCaret": "_collapseCaret_1qx8z_30",
55213
+ "value": "_value_1qx8z_35",
55214
+ "footer": "_footer_1qx8z_40"
55199
55215
  };
55200
55216
 
55201
55217
  // src/utils/rowSelectionHelpers.ts
@@ -56488,9 +56504,10 @@ var GenericHeaderRenderer = (props) => {
56488
56504
  const {
56489
56505
  columnApi,
56490
56506
  tableRef,
56507
+ onExpandOrCollapseAll,
56491
56508
  onServerSideDataRequest,
56492
- showExpandCollapseAllToggle,
56493
- onTableConfigChange
56509
+ onTableConfigChange,
56510
+ showExpandCollapseAllToggle
56494
56511
  } = useInternalTableContext();
56495
56512
  const onSSDR = Boolean(onServerSideDataRequest);
56496
56513
  const [sortOrder, setSortOrder] = React80.useState(props.column.getSort());
@@ -56679,9 +56696,11 @@ var GenericHeaderRenderer = (props) => {
56679
56696
  }
56680
56697
  });
56681
56698
  setExpansionVariant("tierOne");
56699
+ onExpandOrCollapseAll?.(true);
56682
56700
  } else {
56683
56701
  props.api.collapseAll();
56684
56702
  setExpansionVariant("closed");
56703
+ onExpandOrCollapseAll?.(false);
56685
56704
  }
56686
56705
  return;
56687
56706
  }
@@ -56696,10 +56715,13 @@ var GenericHeaderRenderer = (props) => {
56696
56715
  props.api
56697
56716
  );
56698
56717
  setExpansionVariant(hasMoreExpandableNodes ? "tierOne" : "all");
56718
+ onExpandOrCollapseAll?.(true);
56699
56719
  } else if (expansionVariant === "tierOne") {
56700
56720
  props.api.expandAll();
56721
+ onExpandOrCollapseAll?.(true);
56701
56722
  } else {
56702
56723
  props.api.collapseAll();
56724
+ onExpandOrCollapseAll?.(false);
56703
56725
  }
56704
56726
  }
56705
56727
  const tooltipText = {
@@ -56871,7 +56893,8 @@ var GenericHeaderRenderer = (props) => {
56871
56893
  "aria-label": tooltipText[expansionVariant],
56872
56894
  className: "expand-button",
56873
56895
  onClick: onExpandToggle,
56874
- role: "button"
56896
+ role: "button",
56897
+ "data-qa": "expand-or-collapse-all-button"
56875
56898
  },
56876
56899
  /* @__PURE__ */ React80.createElement(ExpansionVariantIcon, { size: "sm" })
56877
56900
  )
@@ -57715,6 +57738,8 @@ var InternalTableContext = React80.createContext({
57715
57738
  gridApi: void 0,
57716
57739
  localStoragePersistenceKey: void 0,
57717
57740
  onBulkEditUpdate: () => Promise.resolve(),
57741
+ onExpandOrCollapseAll: () => {
57742
+ },
57718
57743
  onServerSideDataRequest: void 0,
57719
57744
  onTableConfigChange: () => {
57720
57745
  },
@@ -76259,12 +76284,12 @@ var MenuItemMapper = class MenuItemMapper2 extends BeanStub {
76259
76284
  if (ModuleRegistry.__assertRegistered(ModuleNames.ClipboardModule, "Cut from Menu", this.context.getGridId())) {
76260
76285
  const focusedCell = this.focusService.getFocusedCell();
76261
76286
  const rowNode = focusedCell ? this.rowPositionUtils.getRowNode(focusedCell) : null;
76262
- const isEditable2 = rowNode ? focusedCell === null || focusedCell === void 0 ? void 0 : focusedCell.column.isCellEditable(rowNode) : false;
76287
+ const isEditable = rowNode ? focusedCell === null || focusedCell === void 0 ? void 0 : focusedCell.column.isCellEditable(rowNode) : false;
76263
76288
  return {
76264
76289
  name: localeTextFunc("cut", "Cut"),
76265
76290
  shortcut: localeTextFunc("ctrlX", "Ctrl+X"),
76266
76291
  icon: _.createIconNoSpan("clipboardCut", this.gridOptionsService, null),
76267
- disabled: !isEditable2 || this.gridOptionsService.is("suppressCutToClipboard"),
76292
+ disabled: !isEditable || this.gridOptionsService.is("suppressCutToClipboard"),
76268
76293
  action: () => this.clipboardService.cutToClipboard(void 0, "contextMenu")
76269
76294
  };
76270
76295
  } else {
@@ -108808,6 +108833,7 @@ var DataTable = ({
108808
108833
  getRowId,
108809
108834
  initialTableConfig: _initialTableConfig,
108810
108835
  onBulkEditUpdate,
108836
+ onExpandOrCollapseAll,
108811
108837
  onServerSideDataRequest,
108812
108838
  onTableConfigChange,
108813
108839
  showExpandCollapseAllToggle,
@@ -109054,6 +109080,7 @@ var DataTable = ({
109054
109080
  gridApi,
109055
109081
  initialTableConfig,
109056
109082
  onBulkEditUpdate,
109083
+ onExpandOrCollapseAll,
109057
109084
  onServerSideDataRequest,
109058
109085
  onTableConfigChange: internalOnTableConfigChange,
109059
109086
  rowSelectionRef,
@@ -109140,6 +109167,20 @@ function getServerSideDatasource(onServerSideDataRequestCallbackRef, onEmptyResp
109140
109167
  };
109141
109168
  }
109142
109169
  var minimumColumnWidth = 140;
109170
+ function useComputeAgGridProps(props) {
109171
+ const internalTableContext = useInternalTableContext();
109172
+ const onSSDR = internalTableContext.onServerSideDataRequest;
109173
+ return {
109174
+ groupIncludeFooter: !onSSDR && props.groupIncludeFooter === void 0 ? true : props.groupIncludeFooter,
109175
+ rowDragManaged: onSSDR ? false : props.rowDragManaged ?? true,
109176
+ rowModelType: onSSDR ? "serverSide" : void 0,
109177
+ groupSelectsChildren: (
109178
+ // Always true for client side, defaults to true for server side
109179
+ internalTableContext.totalRowCount > 0 && props.groupSelectsChildren !== false || !onSSDR
109180
+ ),
109181
+ groupDefaultExpanded: props.groupsAlwaysExpanded ? -1 : props.groupDefaultExpanded
109182
+ };
109183
+ }
109143
109184
  var Table = (props) => {
109144
109185
  const { suppressColumnVirtualisation = true, rowActionsConfig = {} } = props;
109145
109186
  const I18n = useI18nContext();
@@ -109189,14 +109230,28 @@ var Table = (props) => {
109189
109230
  React80.useImperativeHandle(internalTableContext.tableRef, () => tableApi, [
109190
109231
  tableApi
109191
109232
  ]);
109233
+ const {
109234
+ groupIncludeFooter,
109235
+ rowDragManaged,
109236
+ rowModelType,
109237
+ groupSelectsChildren,
109238
+ groupDefaultExpanded
109239
+ } = useComputeAgGridProps(props);
109240
+ const { overrideEditable } = createColumnEditableUtils({
109241
+ enableGroupHeaderEdit: props.enableGroupHeaderEdit
109242
+ });
109192
109243
  const decoratedColDefs = React80.useMemo(
109193
- () => internalTableContext.columnDefinitions?.map(
109194
- (colDef) => transformToColDef(
109244
+ () => internalTableContext.columnDefinitions?.map((colDef) => {
109245
+ const newColDef = transformToColDef(
109195
109246
  colDef,
109196
109247
  internalTableContext.enableGroupEditAndValidation,
109197
109248
  internalTableContext.enableDynamicRowHeight
109198
- )
109199
- ),
109249
+ );
109250
+ return {
109251
+ ...newColDef,
109252
+ editable: overrideEditable(colDef.editable)
109253
+ };
109254
+ }),
109200
109255
  [internalTableContext.columnDefinitions]
109201
109256
  );
109202
109257
  const hasRowActions = React80.useMemo(
@@ -109938,13 +109993,10 @@ var Table = (props) => {
109938
109993
  getRowId: internalTableContext.getRowId,
109939
109994
  getRowStyle,
109940
109995
  groupAllowUnbalanced: true,
109941
- groupDefaultExpanded: props.groupsAlwaysExpanded ? -1 : props.groupDefaultExpanded,
109942
- groupIncludeFooter: !onSSDR && props.groupIncludeFooter === void 0 ? true : props.groupIncludeFooter,
109996
+ groupDefaultExpanded,
109997
+ groupIncludeFooter,
109943
109998
  getGroupRowAgg: props.getGroupRowAgg ? getGroupRowAgg : void 0,
109944
- groupSelectsChildren: (
109945
- // Always true for client side, defaults to true for server side
109946
- internalTableContext.totalRowCount > 0 && props.groupSelectsChildren !== false || !onSSDR
109947
- ),
109999
+ groupSelectsChildren,
109948
110000
  groupSelectsFiltered: true,
109949
110001
  headerHeight: props.headerHeight,
109950
110002
  icons: tableIcons,
@@ -110002,8 +110054,8 @@ var Table = (props) => {
110002
110054
  pinnedBottomRowData: props.pinnedBottomRowData,
110003
110055
  rowBuffer: props.rowBuffer,
110004
110056
  rowClassRules,
110005
- rowDragManaged: onSSDR ? false : props.rowDragManaged ?? true,
110006
- rowModelType: onSSDR ? "serverSide" : void 0,
110057
+ rowDragManaged,
110058
+ rowModelType,
110007
110059
  rowSelection: "multiple",
110008
110060
  ...serverSideInfiniteScroll,
110009
110061
  suppressClickEdit: true,
@@ -112032,6 +112084,7 @@ var ClientSideDataTable = ({
112032
112084
  getRowId,
112033
112085
  initialTableConfig: _initialTableConfig,
112034
112086
  onBulkEditUpdate,
112087
+ onExpandOrCollapseAll,
112035
112088
  onTableConfigChange,
112036
112089
  translations: translations2 = {},
112037
112090
  enableCellTextSelection,
@@ -112048,8 +112101,9 @@ var ClientSideDataTable = ({
112048
112101
  filterGroups,
112049
112102
  getRowId,
112050
112103
  initialTableConfig: _initialTableConfig,
112051
- onTableConfigChange,
112052
112104
  onBulkEditUpdate,
112105
+ onExpandOrCollapseAll,
112106
+ onTableConfigChange,
112053
112107
  showExpandCollapseAllToggle: true,
112054
112108
  translations: translations2,
112055
112109
  localStoragePersistenceKey,
@@ -116440,6 +116494,7 @@ var ServerSideDataTable = ({
116440
116494
  getRowId,
116441
116495
  initialTableConfig: _initialTableConfig,
116442
116496
  onBulkEditUpdate,
116497
+ onExpandOrCollapseAll,
116443
116498
  onServerSideDataRequest,
116444
116499
  onTableConfigChange,
116445
116500
  enableCellTextSelection,
@@ -116458,9 +116513,10 @@ var ServerSideDataTable = ({
116458
116513
  filterGroups,
116459
116514
  getRowId,
116460
116515
  initialTableConfig: _initialTableConfig,
116461
- onTableConfigChange,
116462
- onServerSideDataRequest,
116463
116516
  onBulkEditUpdate,
116517
+ onExpandOrCollapseAll,
116518
+ onServerSideDataRequest,
116519
+ onTableConfigChange,
116464
116520
  showExpandCollapseAllToggle,
116465
116521
  translations: translations2,
116466
116522
  customBulkEditorFields,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@procore/data-table",
3
- "version": "14.37.0",
3
+ "version": "14.39.0",
4
4
  "description": "Complex data grid built on top of ag-grid, with DST components and styles.",
5
5
  "author": "Procore Technologies",
6
6
  "homepage": "https://github.com/procore/core/tree/main/packages/data-table",
@@ -59,8 +59,7 @@
59
59
  "pseudo": "pseudolocalize run ./src/locales",
60
60
  "storybook": "storybook dev -p 6006",
61
61
  "storybook-static:server": "http-server ./storybook-static -p 6006 -c-1 --silent",
62
- "test": "jest --runInBand --silent --logHeapUsage",
63
- "test:coverage": "yarn test -- --collectCoverage",
62
+ "test": "jest --runInBand --silent --logHeapUsage --collectCoverage",
64
63
  "test:watch": "yarn run test --watch"
65
64
  },
66
65
  "peerDependencies": {
@@ -107,9 +106,9 @@
107
106
  "@dotenvx/dotenvx": "1.6.4",
108
107
  "@ngneat/falso": "6.4.0",
109
108
  "@procore/core-css": "10.17.0",
110
- "@procore/core-icons": "^12.10.1",
109
+ "@procore/core-icons": "^12.11.0",
111
110
  "@procore/core-prettier": "10.2.0",
112
- "@procore/core-react": "^12.31.0",
111
+ "@procore/core-react": "^12.33.0",
113
112
  "@procore/eslint-config": "10.0.0",
114
113
  "@procore/globalization-toolkit": "3.1.0",
115
114
  "@procore/labs-financials-utils": "4.3.1",