@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.
@@ -1,6 +1,6 @@
1
1
  import React82, { useState, forwardRef, useContext, useRef, useImperativeHandle, useLayoutEffect, useCallback, useMemo, memo, useEffect, Component as Component$1, createElement } from 'react';
2
2
  import { startsWith, equals, omit, isNil, mergeDeepLeft, intersection, isEmpty, groupBy } from 'ramda';
3
- import { useI18nContext, Select, Input, UNSAFE_useOverlayTriggerContext, Card, Flex, Box, SegmentedController, Calendar, useDateTime, OverlayTrigger, isEventSource, DateInput, UNSAFE_isValidYearRange, DateSelect, PillSelect, TextArea, UNSAFE_useMenuImperativeControlNavigation, UNSAFE_Menu, UNSAFE_menuItemsWrapperAttribute, Spinner, FlexList, Typography, Tooltip, Button, Required, colors, Form, spacing, Switch, Panel, UNSAFE_StyledFilterTokenLabel, typographyWeights, SelectButton, StyledSelectButton, StyledSelectButtonLabel, StyledButton, StyledSelectArrow, Popover, UNSAFE_StyledSuperSelectTrigger, UNSAFE_StyledSuperSelectLabel, UNSAFE_StyledSuperSelectArrow, DateTimeProvider, useField, Label, UNSAFE_mergeRefs, ContactItem as ContactItem$1, ToggleButton, Pagination, Link, AvatarStack, Pill, Typeahead, UNSAFE_FilterToken, useI18n, I18nContext, UNSAFE_SuperSelect, Avatar, MultiSelect, H3, Checkbox, useVisibility, UNSAFE_useSuperSelectContext, DropdownFlyout, StyledDropdownFlyoutLabel, StyledDropdownFlyoutExpandIcon, EmptyState as EmptyState$1 } from '@procore/core-react';
3
+ import { useI18nContext, Select, Input, UNSAFE_useOverlayTriggerContext, Card, Flex, Box, SegmentedController, Calendar, useDateTime, OverlayTrigger, isEventSource, DateInput, UNSAFE_isValidYearRange, DateSelect, PillSelect, TextArea, UNSAFE_useMenuImperativeControlNavigation, UNSAFE_Menu, UNSAFE_menuItemsWrapperAttribute, Spinner as Spinner$1, FlexList, Typography, Tooltip, Button, Required, colors, Form, spacing, Switch, Panel, UNSAFE_StyledFilterTokenLabel, typographyWeights, SelectButton, StyledSelectButton, StyledSelectButtonLabel, StyledButton, StyledSelectArrow, Popover, UNSAFE_StyledSuperSelectTrigger, UNSAFE_StyledSuperSelectLabel, UNSAFE_StyledSuperSelectArrow, DateTimeProvider, useField, Label, UNSAFE_mergeRefs, ContactItem as ContactItem$1, ToggleButton, Pagination, Link, AvatarStack, Pill, Typeahead, UNSAFE_FilterToken, useI18n, I18nContext, UNSAFE_SuperSelect, Avatar, MultiSelect, H3, Checkbox, useVisibility, UNSAFE_useSuperSelectContext, DropdownFlyout, StyledDropdownFlyoutLabel, StyledDropdownFlyoutExpandIcon, EmptyState as EmptyState$1 } from '@procore/core-react';
4
4
  import classnames from 'classnames/bind';
5
5
  import { Error as Error$1, Grip, Pencil, Building, Calendar as Calendar$1, CaretsInVertical, CaretsOutVertical, CaretsOutVerticalWithLine, CaretsIn, CaretsOut, CaretDown, CaretRight, ArrowDown, ArrowUp } from '@procore/core-icons';
6
6
  import classNames from 'classnames';
@@ -996,6 +996,41 @@ var rowHeightMap = {
996
996
  [rowSize.md]: "medium",
997
997
  [rowSize.lg]: "large"
998
998
  };
999
+ var Spinner = ({
1000
+ loading,
1001
+ ...rest
1002
+ }) => /* @__PURE__ */ React82.createElement(Box, { "data-qa": loading ? "loading" : "loaded", display: "flex-row", flex: 1 }, /* @__PURE__ */ React82.createElement(Spinner$1, { loading, size: "md", centered: true, ...rest }));
1003
+ function isNestedColumnDefinition(Column2) {
1004
+ return "children" in Column2;
1005
+ }
1006
+ function isNestedColDef(colDef) {
1007
+ if (!colDef.groupId) {
1008
+ return false;
1009
+ }
1010
+ return "groupId" in colDef;
1011
+ }
1012
+ function getLeafColDefs(columnDefinitions) {
1013
+ return columnDefinitions.flatMap((colDef) => {
1014
+ return isNestedColDef(colDef) ? getLeafColDefs(colDef.children) : [colDef];
1015
+ });
1016
+ }
1017
+ function isFirstColumn(params) {
1018
+ const displayedColumns = params?.columnApi?.getAllDisplayedColumns() || [];
1019
+ return displayedColumns.length ? displayedColumns[0] === params.column : false;
1020
+ }
1021
+ function getCheckboxColumn(columnApi) {
1022
+ const isGrouping = columnApi?.getRowGroupColumns?.()?.length !== 0;
1023
+ if (isGrouping) {
1024
+ return null;
1025
+ }
1026
+ const displayedColumns = columnApi?.getAllDisplayedColumns() || [];
1027
+ return displayedColumns.length ? displayedColumns[0] : null;
1028
+ }
1029
+ function removeEventListenerFromGrid(event, listener, gridApi) {
1030
+ if (!gridApi || gridApi?.destroyCalled)
1031
+ return;
1032
+ gridApi?.removeEventListener(event, listener);
1033
+ }
999
1034
 
1000
1035
  // src/styles.scss
1001
1036
  var styles_exports = {};
@@ -53792,7 +53827,7 @@ var LocationFilterOverlay = React82.forwardRef(
53792
53827
  getLabel3(item)
53793
53828
  );
53794
53829
  })),
53795
- loading && /* @__PURE__ */ React82.createElement(UNSAFE_Menu.Footer, null, /* @__PURE__ */ React82.createElement(Flex, { justifyContent: "center" }, /* @__PURE__ */ React82.createElement(Spinner, { size: "sm" })))
53830
+ loading && /* @__PURE__ */ React82.createElement(UNSAFE_Menu.Footer, null, /* @__PURE__ */ React82.createElement(Flex, { justifyContent: "center" }, /* @__PURE__ */ React82.createElement(Spinner$1, { size: "sm" })))
53796
53831
  ));
53797
53832
  }
53798
53833
  );
@@ -53995,8 +54030,16 @@ function useFilterState({
53995
54030
  }
53996
54031
  return () => {
53997
54032
  listenersEnabled.current = false;
53998
- gridApi?.removeEventListener("filterChanged", filterEventFunction);
53999
- gridApi?.removeEventListener("rowDataUpdated", filterEventFunction);
54033
+ removeEventListenerFromGrid(
54034
+ "filterChanged",
54035
+ filterEventFunction,
54036
+ gridApi
54037
+ );
54038
+ removeEventListenerFromGrid(
54039
+ "rowDataUpdated",
54040
+ filterEventFunction,
54041
+ gridApi
54042
+ );
54000
54043
  };
54001
54044
  }, [gridApi, columnDefinitions]);
54002
54045
  return { allAvailableFilters, changeFilterValue, filterableColumns };
@@ -54478,36 +54521,6 @@ var ServerSideFilter = ({
54478
54521
  )
54479
54522
  );
54480
54523
  };
54481
- var Spinner2 = ({
54482
- loading,
54483
- ...rest
54484
- }) => /* @__PURE__ */ React82.createElement(Box, { "data-qa": loading ? "loading" : "loaded", display: "flex-row", flex: 1 }, /* @__PURE__ */ React82.createElement(Spinner, { loading, size: "md", centered: true, ...rest }));
54485
- function isNestedColumnDefinition(Column2) {
54486
- return "children" in Column2;
54487
- }
54488
- function isNestedColDef(colDef) {
54489
- if (!colDef.groupId) {
54490
- return false;
54491
- }
54492
- return "groupId" in colDef;
54493
- }
54494
- function getLeafColDefs(columnDefinitions) {
54495
- return columnDefinitions.flatMap((colDef) => {
54496
- return isNestedColDef(colDef) ? getLeafColDefs(colDef.children) : [colDef];
54497
- });
54498
- }
54499
- function isFirstColumn(params) {
54500
- const displayedColumns = params?.columnApi?.getAllDisplayedColumns() || [];
54501
- return displayedColumns.length ? displayedColumns[0] === params.column : false;
54502
- }
54503
- function getCheckboxColumn(columnApi) {
54504
- const isGrouping = columnApi?.getRowGroupColumns?.()?.length !== 0;
54505
- if (isGrouping) {
54506
- return null;
54507
- }
54508
- const displayedColumns = columnApi?.getAllDisplayedColumns() || [];
54509
- return displayedColumns.length ? displayedColumns[0] : null;
54510
- }
54511
54524
 
54512
54525
  // src/utils/transformers.ts
54513
54526
  var emptyObject = {};
@@ -55205,7 +55218,7 @@ function ClientSideRowCheckbox(props) {
55205
55218
  useEffect(() => {
55206
55219
  props.api.addEventListener("rowSelected", handleRowSelection);
55207
55220
  return () => {
55208
- props.api.removeEventListener("rowSelected", handleRowSelection);
55221
+ removeEventListenerFromGrid("rowSelected", handleRowSelection, props.api);
55209
55222
  };
55210
55223
  }, []);
55211
55224
  return /* @__PURE__ */ React82.createElement(Box, { paddingRight: "md" }, /* @__PURE__ */ React82.createElement(
@@ -55316,7 +55329,11 @@ function GroupCaret(props) {
55316
55329
  props.api.addEventListener("rowGroupOpened", handleRowGroupToggle);
55317
55330
  return () => {
55318
55331
  mounted.current = false;
55319
- props.api.removeEventListener("rowGroupOpened", handleRowGroupToggle);
55332
+ removeEventListenerFromGrid(
55333
+ "rowGroupOpened",
55334
+ handleRowGroupToggle,
55335
+ props.api
55336
+ );
55320
55337
  };
55321
55338
  }, []);
55322
55339
  return /* @__PURE__ */ React82.createElement(Box, { className: AutoGroupCell_default.expandableCaret }, props.node.isExpandable() && /* @__PURE__ */ React82.createElement(
@@ -55342,7 +55359,11 @@ var AutoGroupCellRenderer = (props) => {
55342
55359
  useEffect(() => {
55343
55360
  props.api.addEventListener("cellValueChanged", handleCellValueChange);
55344
55361
  return () => {
55345
- props.api.removeEventListener("cellValueChanged", handleCellValueChange);
55362
+ removeEventListenerFromGrid(
55363
+ "cellValueChanged",
55364
+ handleCellValueChange,
55365
+ props.api
55366
+ );
55346
55367
  };
55347
55368
  }, []);
55348
55369
  const adjustedLevel = props.node.footer ? props.node.level + 1 : props.node.level;
@@ -56193,7 +56214,7 @@ var GenericHeaderRenderer = (props) => {
56193
56214
  props.api.addEventListener("columnMoved", calculatePosition);
56194
56215
  calculatePosition();
56195
56216
  return () => {
56196
- props.api.removeEventListener("columnMoved", calculatePosition);
56217
+ removeEventListenerFromGrid("columnMoved", calculatePosition, props.api);
56197
56218
  };
56198
56219
  }, []);
56199
56220
  const onSortToggled = (event) => {
@@ -56270,7 +56291,11 @@ var GenericHeaderRenderer = (props) => {
56270
56291
  };
56271
56292
  props.api?.addEventListener("expandOrCollapseAll", onExpandAllChange);
56272
56293
  return () => {
56273
- props.api?.removeEventListener("expandOrCollapseAll", onExpandAllChange);
56294
+ removeEventListenerFromGrid(
56295
+ "expandOrCollapseAll",
56296
+ onExpandAllChange,
56297
+ props.api
56298
+ );
56274
56299
  };
56275
56300
  }, [props.api]);
56276
56301
  React82.useEffect(() => {
@@ -56361,7 +56386,11 @@ var GenericHeaderRenderer = (props) => {
56361
56386
  props.api.addEventListener(selectionChanged, onSelectionChanged);
56362
56387
  onSelectionChanged();
56363
56388
  return () => {
56364
- props.api.removeEventListener(selectionChanged, onSelectionChanged);
56389
+ removeEventListenerFromGrid(
56390
+ selectionChanged,
56391
+ onSelectionChanged,
56392
+ props.api
56393
+ );
56365
56394
  };
56366
56395
  }, [isFirstColumn2, selectAll]);
56367
56396
  const { ref, isOverflowing, recalculate } = useOverflowObserver();
@@ -56370,8 +56399,8 @@ var GenericHeaderRenderer = (props) => {
56370
56399
  props.api.addEventListener("cellMouseOver", handler);
56371
56400
  props.api.addEventListener("columnResized", handler);
56372
56401
  return () => {
56373
- props.api.removeEventListener("cellMouseOver", handler);
56374
- props.api.removeEventListener("columnResized", handler);
56402
+ removeEventListenerFromGrid("cellMouseOver", handler, props.api);
56403
+ removeEventListenerFromGrid("columnResized", handler, props.api);
56375
56404
  };
56376
56405
  }, []);
56377
56406
  React82.useEffect(() => {
@@ -56397,8 +56426,16 @@ var GenericHeaderRenderer = (props) => {
56397
56426
  props.api.addEventListener(selectionChanged, updateSelectAllCheckbox);
56398
56427
  props.api.addEventListener(paginationChanged, updateSelectAllCheckbox);
56399
56428
  return () => {
56400
- props.api.removeEventListener(selectionChanged, updateSelectAllCheckbox);
56401
- props.api.removeEventListener(paginationChanged, updateSelectAllCheckbox);
56429
+ removeEventListenerFromGrid(
56430
+ selectionChanged,
56431
+ updateSelectAllCheckbox,
56432
+ props.api
56433
+ );
56434
+ removeEventListenerFromGrid(
56435
+ paginationChanged,
56436
+ updateSelectAllCheckbox,
56437
+ props.api
56438
+ );
56402
56439
  };
56403
56440
  }, [isFirstColumn2, props.selectionSSREnabled, props.api, onSSDR]);
56404
56441
  const toggleSelectAll = React82.useCallback(() => {
@@ -56606,7 +56643,7 @@ function CustomLoader(params) {
56606
56643
  level: params.node.level,
56607
56644
  lastRowInGroup: params.node === groupNodes.last
56608
56645
  }
56609
- ), /* @__PURE__ */ React82.createElement(Spinner2, { loading: true, size: "sm" }), /* @__PURE__ */ React82.createElement(Box, { paddingLeft: "sm" }, /* @__PURE__ */ React82.createElement(Typography, { color: "gray15", italic: true, intent: "small" }, I18n.t(
56646
+ ), /* @__PURE__ */ React82.createElement(Spinner, { loading: true, size: "sm" }), /* @__PURE__ */ React82.createElement(Box, { paddingLeft: "sm" }, /* @__PURE__ */ React82.createElement(Typography, { color: "gray15", italic: true, intent: "small" }, I18n.t(
56610
56647
  `dataTable.loading.${params.node === groupNodes.first ? "initial" : "secondary"}`
56611
56648
  ))));
56612
56649
  }
@@ -56616,7 +56653,7 @@ var DefaultFrameworkComponents = {
56616
56653
  agColumnHeader: GenericHeaderRenderer,
56617
56654
  agLoadingCellRenderer: CustomLoader,
56618
56655
  agColumnGroupHeader: GenericColumnGroupHeader,
56619
- loadingOverlayRenderer: Spinner2,
56656
+ loadingOverlayRenderer: Spinner,
56620
56657
  emptyStateRenderer: EmptyState
56621
56658
  };
56622
56659
  function getFrameworkComponents(headerMenuConfig, onSelectAll, selectionSSREnabled) {
@@ -58753,12 +58790,18 @@ var useRowSelectionState = () => {
58753
58790
  const { gridApi, rowSelectionRef } = useInternalTableContext();
58754
58791
  React82.useEffect(() => {
58755
58792
  function selectionEventFunction() {
58756
- setSelectedRows(getSelectedRows({ gridApi, rowSelectionRef }));
58793
+ if (!gridApi?.destroyCalled) {
58794
+ setSelectedRows(getSelectedRows({ gridApi, rowSelectionRef }));
58795
+ }
58757
58796
  }
58758
58797
  selectionEventFunction();
58759
58798
  gridApi?.addEventListener("selectionChanged", selectionEventFunction);
58760
58799
  return () => {
58761
- gridApi?.removeEventListener("selectionChanged", selectionEventFunction);
58800
+ removeEventListenerFromGrid(
58801
+ "selectionChanged",
58802
+ selectionEventFunction,
58803
+ gridApi
58804
+ );
58762
58805
  };
58763
58806
  }, [gridApi]);
58764
58807
  return selectedRows;
@@ -76259,7 +76302,7 @@ function personOptionRenderer(editorParams) {
76259
76302
  };
76260
76303
  }
76261
76304
  function LoadingField() {
76262
- return /* @__PURE__ */ React82.createElement(Box, { marginTop: "md" }, /* @__PURE__ */ React82.createElement(Spinner, { size: "sm", loading: true }));
76305
+ return /* @__PURE__ */ React82.createElement(Box, { marginTop: "md" }, /* @__PURE__ */ React82.createElement(Spinner$1, { size: "sm", loading: true }));
76263
76306
  }
76264
76307
  function RadioList({
76265
76308
  getId: getId3,
@@ -76587,7 +76630,7 @@ var BulkEditInput = (props) => {
76587
76630
  );
76588
76631
  } else {
76589
76632
  console.warn(
76590
- `@procore/labs-data-table: Unable to find the field for ${props.editor}. Will fallback to a Form.Text.`
76633
+ `@procore/data-table: Unable to find the field for ${props.editor}. Will fallback to a Form.Text.`
76591
76634
  );
76592
76635
  return defaultField;
76593
76636
  }
@@ -77048,9 +77091,10 @@ var ConfigurationColumns = React82.forwardRef(
77048
77091
  onDisplayedColumnsChanged
77049
77092
  );
77050
77093
  return () => {
77051
- gridApi?.removeEventListener(
77094
+ removeEventListenerFromGrid(
77052
77095
  "displayedColumnsChanged",
77053
- onDisplayedColumnsChanged
77096
+ onDisplayedColumnsChanged,
77097
+ gridApi
77054
77098
  );
77055
77099
  };
77056
77100
  }, [gridApi, colDefs]);
@@ -77895,9 +77939,10 @@ var RowGroupSelector = ({ localeText }) => {
77895
77939
  onDisplayedColumnsChanged
77896
77940
  );
77897
77941
  return () => {
77898
- gridApi?.removeEventListener(
77942
+ removeEventListenerFromGrid(
77899
77943
  "displayedColumnsChanged",
77900
- onDisplayedColumnsChanged
77944
+ onDisplayedColumnsChanged,
77945
+ gridApi
77901
77946
  );
77902
77947
  };
77903
77948
  }, [gridApi]);
@@ -81550,7 +81595,9 @@ var Table = (props) => {
81550
81595
  maxHeight = nodeHeight;
81551
81596
  }
81552
81597
  });
81553
- gridApi?.setHeaderHeight(maxHeight);
81598
+ if (!gridApi?.destroyCalled) {
81599
+ gridApi?.setHeaderHeight(maxHeight);
81600
+ }
81554
81601
  }
81555
81602
  React82.useEffect(() => {
81556
81603
  if (gridApi && columnApi && internalTableContext.tableRef?.current) {
@@ -81561,7 +81608,11 @@ var Table = (props) => {
81561
81608
  gridApi.addEventListener("firstDataRendered", setHeaderHeight);
81562
81609
  setHeaderHeight();
81563
81610
  return () => {
81564
- gridApi.removeEventListener("firstDataRendered", setHeaderHeight);
81611
+ removeEventListenerFromGrid(
81612
+ "firstDataRendered",
81613
+ setHeaderHeight,
81614
+ gridApi
81615
+ );
81565
81616
  };
81566
81617
  }
81567
81618
  return;
@@ -81793,6 +81844,8 @@ var Table = (props) => {
81793
81844
  const onDisplayedColumnsChanged = React82.useCallback(
81794
81845
  (event) => {
81795
81846
  if (props.onRowDragEnd) {
81847
+ if (event.columnApi?.destroyCalled)
81848
+ return;
81796
81849
  const firstVisibleColumn = event.columnApi.getAllGridColumns().find((col) => col.isVisible());
81797
81850
  if (!firstVisibleColumn?.getColDef().rowDrag) {
81798
81851
  adjustRowDragIcon(event.api, event.columnApi);
@@ -82086,7 +82139,7 @@ var Table = (props) => {
82086
82139
  props.UNSAFE_internalAGGridOverrides ?? {}
82087
82140
  );
82088
82141
  return /* @__PURE__ */ React82.createElement(
82089
- Spinner2,
82142
+ Spinner,
82090
82143
  {
82091
82144
  loading: loadingStatus.loading,
82092
82145
  label: loadingStatus.message,
@@ -82253,7 +82306,11 @@ var TablePagination = ({
82253
82306
  }
82254
82307
  gridApi?.addEventListener("paginationChanged", onPaginationChanged);
82255
82308
  return () => {
82256
- gridApi?.removeEventListener("paginationChanged", onPaginationChanged);
82309
+ removeEventListenerFromGrid(
82310
+ "paginationChanged",
82311
+ onPaginationChanged,
82312
+ gridApi
82313
+ );
82257
82314
  };
82258
82315
  }, []);
82259
82316
  return /* @__PURE__ */ React82.createElement(
@@ -82813,7 +82870,7 @@ var LocationQuickFilterOverlay = React82.forwardRef(
82813
82870
  getLabel3(item)
82814
82871
  );
82815
82872
  })),
82816
- loading && /* @__PURE__ */ React82.createElement(UNSAFE_Menu.Footer, null, /* @__PURE__ */ React82.createElement(Flex, { justifyContent: "center" }, /* @__PURE__ */ React82.createElement(Spinner, { size: "sm" })))
82873
+ loading && /* @__PURE__ */ React82.createElement(UNSAFE_Menu.Footer, null, /* @__PURE__ */ React82.createElement(Flex, { justifyContent: "center" }, /* @__PURE__ */ React82.createElement(Spinner$1, { size: "sm" })))
82817
82874
  ));
82818
82875
  }
82819
82876
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@procore/data-table",
3
- "version": "13.3.1",
3
+ "version": "13.3.2",
4
4
  "description": "Complex data grid built on top of ag-grid, with DST components and styles.",
5
5
  "main": "dist/legacy/index.js",
6
6
  "module": "dist/legacy/index.mjs",