@procore/data-table 13.3.1 → 13.3.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Change Log
2
2
 
3
+ ## 13.3.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 3bc44eccc3: Safely remove event listeners when table is destroyed
8
+
3
9
  ## 13.3.1
4
10
 
5
11
  ### Patch Changes
package/README.md CHANGED
@@ -4,7 +4,7 @@ The description.
4
4
 
5
5
  ## Installation
6
6
 
7
- `yarn add @procore/labs-data-table`
7
+ `yarn add @procore/data-table`
8
8
 
9
9
  ### Dependencies
10
10
 
@@ -1011,6 +1011,43 @@ var rowHeightMap = {
1011
1011
  [rowSize.md]: "medium",
1012
1012
  [rowSize.lg]: "large"
1013
1013
  };
1014
+ var Spinner = ({
1015
+ loading,
1016
+ ...rest
1017
+ }) => /* @__PURE__ */ React82__default.default.createElement(coreReact.Box, { "data-qa": loading ? "loading" : "loaded", display: "flex-row", flex: 1 }, /* @__PURE__ */ React82__default.default.createElement(coreReact.Spinner, { loading, size: "md", centered: true, ...rest }));
1018
+ function isNestedColumnDefinition(Column2) {
1019
+ return "children" in Column2;
1020
+ }
1021
+ function isNestedColDef(colDef) {
1022
+ if (!colDef.groupId) {
1023
+ return false;
1024
+ }
1025
+ return "groupId" in colDef;
1026
+ }
1027
+ function getLeafColDefs(columnDefinitions) {
1028
+ return columnDefinitions.flatMap((colDef) => {
1029
+ return isNestedColDef(colDef) ? getLeafColDefs(colDef.children) : [colDef];
1030
+ });
1031
+ }
1032
+ function isFirstColumn(params) {
1033
+ var _a;
1034
+ const displayedColumns = ((_a = params == null ? void 0 : params.columnApi) == null ? void 0 : _a.getAllDisplayedColumns()) || [];
1035
+ return displayedColumns.length ? displayedColumns[0] === params.column : false;
1036
+ }
1037
+ function getCheckboxColumn(columnApi) {
1038
+ var _a, _b;
1039
+ const isGrouping = ((_b = (_a = columnApi == null ? void 0 : columnApi.getRowGroupColumns) == null ? void 0 : _a.call(columnApi)) == null ? void 0 : _b.length) !== 0;
1040
+ if (isGrouping) {
1041
+ return null;
1042
+ }
1043
+ const displayedColumns = (columnApi == null ? void 0 : columnApi.getAllDisplayedColumns()) || [];
1044
+ return displayedColumns.length ? displayedColumns[0] : null;
1045
+ }
1046
+ function removeEventListenerFromGrid(event, listener, gridApi) {
1047
+ if (!gridApi || (gridApi == null ? void 0 : gridApi.destroyCalled))
1048
+ return;
1049
+ gridApi == null ? void 0 : gridApi.removeEventListener(event, listener);
1050
+ }
1014
1051
 
1015
1052
  // src/styles.scss
1016
1053
  var styles_exports = {};
@@ -54053,8 +54090,16 @@ function useFilterState({
54053
54090
  }
54054
54091
  return () => {
54055
54092
  listenersEnabled.current = false;
54056
- gridApi == null ? void 0 : gridApi.removeEventListener("filterChanged", filterEventFunction);
54057
- gridApi == null ? void 0 : gridApi.removeEventListener("rowDataUpdated", filterEventFunction);
54093
+ removeEventListenerFromGrid(
54094
+ "filterChanged",
54095
+ filterEventFunction,
54096
+ gridApi
54097
+ );
54098
+ removeEventListenerFromGrid(
54099
+ "rowDataUpdated",
54100
+ filterEventFunction,
54101
+ gridApi
54102
+ );
54058
54103
  };
54059
54104
  }, [gridApi, columnDefinitions]);
54060
54105
  return { allAvailableFilters, changeFilterValue, filterableColumns };
@@ -54548,38 +54593,6 @@ var ServerSideFilter = ({
54548
54593
  )
54549
54594
  );
54550
54595
  };
54551
- var Spinner2 = ({
54552
- loading,
54553
- ...rest
54554
- }) => /* @__PURE__ */ React82__default.default.createElement(coreReact.Box, { "data-qa": loading ? "loading" : "loaded", display: "flex-row", flex: 1 }, /* @__PURE__ */ React82__default.default.createElement(coreReact.Spinner, { loading, size: "md", centered: true, ...rest }));
54555
- function isNestedColumnDefinition(Column2) {
54556
- return "children" in Column2;
54557
- }
54558
- function isNestedColDef(colDef) {
54559
- if (!colDef.groupId) {
54560
- return false;
54561
- }
54562
- return "groupId" in colDef;
54563
- }
54564
- function getLeafColDefs(columnDefinitions) {
54565
- return columnDefinitions.flatMap((colDef) => {
54566
- return isNestedColDef(colDef) ? getLeafColDefs(colDef.children) : [colDef];
54567
- });
54568
- }
54569
- function isFirstColumn(params) {
54570
- var _a;
54571
- const displayedColumns = ((_a = params == null ? void 0 : params.columnApi) == null ? void 0 : _a.getAllDisplayedColumns()) || [];
54572
- return displayedColumns.length ? displayedColumns[0] === params.column : false;
54573
- }
54574
- function getCheckboxColumn(columnApi) {
54575
- var _a, _b;
54576
- const isGrouping = ((_b = (_a = columnApi == null ? void 0 : columnApi.getRowGroupColumns) == null ? void 0 : _a.call(columnApi)) == null ? void 0 : _b.length) !== 0;
54577
- if (isGrouping) {
54578
- return null;
54579
- }
54580
- const displayedColumns = (columnApi == null ? void 0 : columnApi.getAllDisplayedColumns()) || [];
54581
- return displayedColumns.length ? displayedColumns[0] : null;
54582
- }
54583
54596
 
54584
54597
  // src/utils/transformers.ts
54585
54598
  var emptyObject = {};
@@ -55294,7 +55307,7 @@ function ClientSideRowCheckbox(props) {
55294
55307
  React82.useEffect(() => {
55295
55308
  props.api.addEventListener("rowSelected", handleRowSelection);
55296
55309
  return () => {
55297
- props.api.removeEventListener("rowSelected", handleRowSelection);
55310
+ removeEventListenerFromGrid("rowSelected", handleRowSelection, props.api);
55298
55311
  };
55299
55312
  }, []);
55300
55313
  return /* @__PURE__ */ React82__default.default.createElement(coreReact.Box, { paddingRight: "md" }, /* @__PURE__ */ React82__default.default.createElement(
@@ -55408,7 +55421,11 @@ function GroupCaret(props) {
55408
55421
  props.api.addEventListener("rowGroupOpened", handleRowGroupToggle);
55409
55422
  return () => {
55410
55423
  mounted.current = false;
55411
- props.api.removeEventListener("rowGroupOpened", handleRowGroupToggle);
55424
+ removeEventListenerFromGrid(
55425
+ "rowGroupOpened",
55426
+ handleRowGroupToggle,
55427
+ props.api
55428
+ );
55412
55429
  };
55413
55430
  }, []);
55414
55431
  return /* @__PURE__ */ React82__default.default.createElement(coreReact.Box, { className: AutoGroupCell_default.expandableCaret }, props.node.isExpandable() && /* @__PURE__ */ React82__default.default.createElement(
@@ -55435,7 +55452,11 @@ var AutoGroupCellRenderer = (props) => {
55435
55452
  React82.useEffect(() => {
55436
55453
  props.api.addEventListener("cellValueChanged", handleCellValueChange);
55437
55454
  return () => {
55438
- props.api.removeEventListener("cellValueChanged", handleCellValueChange);
55455
+ removeEventListenerFromGrid(
55456
+ "cellValueChanged",
55457
+ handleCellValueChange,
55458
+ props.api
55459
+ );
55439
55460
  };
55440
55461
  }, []);
55441
55462
  const adjustedLevel = props.node.footer ? props.node.level + 1 : props.node.level;
@@ -56297,7 +56318,7 @@ var GenericHeaderRenderer = (props) => {
56297
56318
  props.api.addEventListener("columnMoved", calculatePosition);
56298
56319
  calculatePosition();
56299
56320
  return () => {
56300
- props.api.removeEventListener("columnMoved", calculatePosition);
56321
+ removeEventListenerFromGrid("columnMoved", calculatePosition, props.api);
56301
56322
  };
56302
56323
  }, []);
56303
56324
  const onSortToggled = (event) => {
@@ -56376,8 +56397,11 @@ var GenericHeaderRenderer = (props) => {
56376
56397
  };
56377
56398
  (_a2 = props.api) == null ? void 0 : _a2.addEventListener("expandOrCollapseAll", onExpandAllChange);
56378
56399
  return () => {
56379
- var _a3;
56380
- (_a3 = props.api) == null ? void 0 : _a3.removeEventListener("expandOrCollapseAll", onExpandAllChange);
56400
+ removeEventListenerFromGrid(
56401
+ "expandOrCollapseAll",
56402
+ onExpandAllChange,
56403
+ props.api
56404
+ );
56381
56405
  };
56382
56406
  }, [props.api]);
56383
56407
  React82__default.default.useEffect(() => {
@@ -56468,7 +56492,11 @@ var GenericHeaderRenderer = (props) => {
56468
56492
  props.api.addEventListener(selectionChanged, onSelectionChanged);
56469
56493
  onSelectionChanged();
56470
56494
  return () => {
56471
- props.api.removeEventListener(selectionChanged, onSelectionChanged);
56495
+ removeEventListenerFromGrid(
56496
+ selectionChanged,
56497
+ onSelectionChanged,
56498
+ props.api
56499
+ );
56472
56500
  };
56473
56501
  }, [isFirstColumn2, selectAll]);
56474
56502
  const { ref, isOverflowing, recalculate } = useOverflowObserver();
@@ -56480,8 +56508,8 @@ var GenericHeaderRenderer = (props) => {
56480
56508
  props.api.addEventListener("cellMouseOver", handler);
56481
56509
  props.api.addEventListener("columnResized", handler);
56482
56510
  return () => {
56483
- props.api.removeEventListener("cellMouseOver", handler);
56484
- props.api.removeEventListener("columnResized", handler);
56511
+ removeEventListenerFromGrid("cellMouseOver", handler, props.api);
56512
+ removeEventListenerFromGrid("columnResized", handler, props.api);
56485
56513
  };
56486
56514
  }, []);
56487
56515
  React82__default.default.useEffect(() => {
@@ -56507,8 +56535,16 @@ var GenericHeaderRenderer = (props) => {
56507
56535
  props.api.addEventListener(selectionChanged, updateSelectAllCheckbox);
56508
56536
  props.api.addEventListener(paginationChanged, updateSelectAllCheckbox);
56509
56537
  return () => {
56510
- props.api.removeEventListener(selectionChanged, updateSelectAllCheckbox);
56511
- props.api.removeEventListener(paginationChanged, updateSelectAllCheckbox);
56538
+ removeEventListenerFromGrid(
56539
+ selectionChanged,
56540
+ updateSelectAllCheckbox,
56541
+ props.api
56542
+ );
56543
+ removeEventListenerFromGrid(
56544
+ paginationChanged,
56545
+ updateSelectAllCheckbox,
56546
+ props.api
56547
+ );
56512
56548
  };
56513
56549
  }, [isFirstColumn2, props.selectionSSREnabled, props.api, onSSDR]);
56514
56550
  const toggleSelectAll = React82__default.default.useCallback(() => {
@@ -56719,7 +56755,7 @@ function CustomLoader(params) {
56719
56755
  level: params.node.level,
56720
56756
  lastRowInGroup: params.node === groupNodes.last
56721
56757
  }
56722
- ), /* @__PURE__ */ React82__default.default.createElement(Spinner2, { loading: true, size: "sm" }), /* @__PURE__ */ React82__default.default.createElement(coreReact.Box, { paddingLeft: "sm" }, /* @__PURE__ */ React82__default.default.createElement(coreReact.Typography, { color: "gray15", italic: true, intent: "small" }, I18n.t(
56758
+ ), /* @__PURE__ */ React82__default.default.createElement(Spinner, { loading: true, size: "sm" }), /* @__PURE__ */ React82__default.default.createElement(coreReact.Box, { paddingLeft: "sm" }, /* @__PURE__ */ React82__default.default.createElement(coreReact.Typography, { color: "gray15", italic: true, intent: "small" }, I18n.t(
56723
56759
  `dataTable.loading.${params.node === groupNodes.first ? "initial" : "secondary"}`
56724
56760
  ))));
56725
56761
  }
@@ -56729,7 +56765,7 @@ var DefaultFrameworkComponents = {
56729
56765
  agColumnHeader: GenericHeaderRenderer,
56730
56766
  agLoadingCellRenderer: CustomLoader,
56731
56767
  agColumnGroupHeader: GenericColumnGroupHeader,
56732
- loadingOverlayRenderer: Spinner2,
56768
+ loadingOverlayRenderer: Spinner,
56733
56769
  emptyStateRenderer: EmptyState
56734
56770
  };
56735
56771
  function getFrameworkComponents(headerMenuConfig, onSelectAll, selectionSSREnabled) {
@@ -58876,12 +58912,18 @@ var useRowSelectionState = () => {
58876
58912
  const { gridApi, rowSelectionRef } = useInternalTableContext();
58877
58913
  React82__default.default.useEffect(() => {
58878
58914
  function selectionEventFunction() {
58879
- setSelectedRows(getSelectedRows({ gridApi, rowSelectionRef }));
58915
+ if (!(gridApi == null ? void 0 : gridApi.destroyCalled)) {
58916
+ setSelectedRows(getSelectedRows({ gridApi, rowSelectionRef }));
58917
+ }
58880
58918
  }
58881
58919
  selectionEventFunction();
58882
58920
  gridApi == null ? void 0 : gridApi.addEventListener("selectionChanged", selectionEventFunction);
58883
58921
  return () => {
58884
- gridApi == null ? void 0 : gridApi.removeEventListener("selectionChanged", selectionEventFunction);
58922
+ removeEventListenerFromGrid(
58923
+ "selectionChanged",
58924
+ selectionEventFunction,
58925
+ gridApi
58926
+ );
58885
58927
  };
58886
58928
  }, [gridApi]);
58887
58929
  return selectedRows;
@@ -76719,7 +76761,7 @@ var BulkEditInput = (props) => {
76719
76761
  );
76720
76762
  } else {
76721
76763
  console.warn(
76722
- `@procore/labs-data-table: Unable to find the field for ${props.editor}. Will fallback to a Form.Text.`
76764
+ `@procore/data-table: Unable to find the field for ${props.editor}. Will fallback to a Form.Text.`
76723
76765
  );
76724
76766
  return defaultField;
76725
76767
  }
@@ -77194,9 +77236,10 @@ var ConfigurationColumns = React82__default.default.forwardRef(
77194
77236
  onDisplayedColumnsChanged
77195
77237
  );
77196
77238
  return () => {
77197
- gridApi == null ? void 0 : gridApi.removeEventListener(
77239
+ removeEventListenerFromGrid(
77198
77240
  "displayedColumnsChanged",
77199
- onDisplayedColumnsChanged
77241
+ onDisplayedColumnsChanged,
77242
+ gridApi
77200
77243
  );
77201
77244
  };
77202
77245
  }, [gridApi, colDefs]);
@@ -78065,9 +78108,10 @@ var RowGroupSelector = ({ localeText }) => {
78065
78108
  onDisplayedColumnsChanged
78066
78109
  );
78067
78110
  return () => {
78068
- gridApi == null ? void 0 : gridApi.removeEventListener(
78111
+ removeEventListenerFromGrid(
78069
78112
  "displayedColumnsChanged",
78070
- onDisplayedColumnsChanged
78113
+ onDisplayedColumnsChanged,
78114
+ gridApi
78071
78115
  );
78072
78116
  };
78073
78117
  }, [gridApi]);
@@ -81750,7 +81794,9 @@ var Table = (props) => {
81750
81794
  maxHeight = nodeHeight;
81751
81795
  }
81752
81796
  });
81753
- gridApi == null ? void 0 : gridApi.setHeaderHeight(maxHeight);
81797
+ if (!(gridApi == null ? void 0 : gridApi.destroyCalled)) {
81798
+ gridApi == null ? void 0 : gridApi.setHeaderHeight(maxHeight);
81799
+ }
81754
81800
  }
81755
81801
  React82__default.default.useEffect(() => {
81756
81802
  var _a2, _b2;
@@ -81763,7 +81809,11 @@ var Table = (props) => {
81763
81809
  gridApi.addEventListener("firstDataRendered", setHeaderHeight);
81764
81810
  setHeaderHeight();
81765
81811
  return () => {
81766
- gridApi.removeEventListener("firstDataRendered", setHeaderHeight);
81812
+ removeEventListenerFromGrid(
81813
+ "firstDataRendered",
81814
+ setHeaderHeight,
81815
+ gridApi
81816
+ );
81767
81817
  };
81768
81818
  }
81769
81819
  return;
@@ -82005,7 +82055,10 @@ var Table = (props) => {
82005
82055
  }, [internalTableContext.onTableConfigChange]);
82006
82056
  const onDisplayedColumnsChanged = React82__default.default.useCallback(
82007
82057
  (event) => {
82058
+ var _a2;
82008
82059
  if (props.onRowDragEnd) {
82060
+ if ((_a2 = event.columnApi) == null ? void 0 : _a2.destroyCalled)
82061
+ return;
82009
82062
  const firstVisibleColumn = event.columnApi.getAllGridColumns().find((col) => col.isVisible());
82010
82063
  if (!(firstVisibleColumn == null ? void 0 : firstVisibleColumn.getColDef().rowDrag)) {
82011
82064
  adjustRowDragIcon(event.api, event.columnApi);
@@ -82307,7 +82360,7 @@ var Table = (props) => {
82307
82360
  props.UNSAFE_internalAGGridOverrides ?? {}
82308
82361
  );
82309
82362
  return /* @__PURE__ */ React82__default.default.createElement(
82310
- Spinner2,
82363
+ Spinner,
82311
82364
  {
82312
82365
  loading: loadingStatus.loading,
82313
82366
  label: loadingStatus.message,
@@ -82474,7 +82527,11 @@ var TablePagination = ({
82474
82527
  }
82475
82528
  gridApi == null ? void 0 : gridApi.addEventListener("paginationChanged", onPaginationChanged);
82476
82529
  return () => {
82477
- gridApi == null ? void 0 : gridApi.removeEventListener("paginationChanged", onPaginationChanged);
82530
+ removeEventListenerFromGrid(
82531
+ "paginationChanged",
82532
+ onPaginationChanged,
82533
+ gridApi
82534
+ );
82478
82535
  };
82479
82536
  }, []);
82480
82537
  return /* @__PURE__ */ React82__default.default.createElement(