@procore/data-table 14.33.0 → 14.34.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Change Log
2
2
 
3
+ ## 14.34.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 5848cca: Update I18nProviders to have the option to pull translations from the CDN package cdn-translations
8
+
9
+ ### Patch Changes
10
+
11
+ - 46714d4: Fix broken "groupSelectsChildren" prop behaviour
12
+
3
13
  ## 14.33.0
4
14
 
5
15
  ### Minor Changes
@@ -12,6 +12,7 @@ var labsFinancialsUtils = require('@procore/labs-financials-utils');
12
12
  var styled4 = require('styled-components');
13
13
  var format = require('@procore/labs-financials-utils/dist/format');
14
14
  var ulid$1 = require('ulid');
15
+ var cdnTranslations = require('@procore/cdn-translations');
15
16
  var toastAlert = require('@procore/toast-alert');
16
17
  var ReactDOM = require('react-dom');
17
18
  var server = require('react-dom/server');
@@ -55419,19 +55420,15 @@ function getAffectedRows(currentRows, selectionNode, affectedRows) {
55419
55420
  function noop2() {
55420
55421
  }
55421
55422
  function getSelectedState(node, affectedRows) {
55422
- var _a;
55423
55423
  const self = affectedRows[node.id];
55424
55424
  if ((self == null ? void 0 : self.selectedState) === "selected") {
55425
55425
  return true;
55426
- } else if (node.parent && !isNodeRootLevelOfGrid(node.parent) && ((_a = affectedRows[node.parent.id]) == null ? void 0 : _a.selectedState) === "selected") {
55427
- node.setSelected(true, void 0, self == null ? void 0 : self.selectedState);
55428
- affectedRows[node.id] = {
55429
- node,
55430
- selectedState: "selected"
55431
- };
55426
+ } else if (node.isSelected()) {
55427
+ node.setSelected(true, void 0);
55428
+ affectedRows[node.id] = { node, selectedState: "selected" };
55432
55429
  return true;
55433
55430
  } else {
55434
- return !!node.isSelected();
55431
+ return false;
55435
55432
  }
55436
55433
  }
55437
55434
  function getCheckboxState(node, isServerSideDataRequest, rowSelectionRef) {
@@ -108206,7 +108203,8 @@ var DataTable = ({
108206
108203
  showExpandCollapseAllToggle,
108207
108204
  translations: translations2 = {},
108208
108205
  enableCellTextSelection,
108209
- localStoragePersistenceKey
108206
+ localStoragePersistenceKey,
108207
+ enableCDN
108210
108208
  }) => {
108211
108209
  const initialTableConfig = localStoragePersistenceKey && webSdkStorage.storage.local.getItem(localStoragePersistenceKey) || _initialTableConfig;
108212
108210
  const onServerSideDataRequestRef = React80__default.default.useRef(onServerSideDataRequest);
@@ -108218,14 +108216,28 @@ var DataTable = ({
108218
108216
  );
108219
108217
  const contextPanel = useContextPanel();
108220
108218
  const clientI18n = coreReact.useI18nContext();
108219
+ const isCDNEnabled = cdnTranslations.isCDNFeatureFlagEnabled(clientI18n, enableCDN);
108220
+ const cdnTranslations$1 = cdnTranslations.useRequestTranslations(
108221
+ {
108222
+ locale: clientI18n.locale,
108223
+ type: "file",
108224
+ absolute_file_path: (locale) => `core/packages/data-table/src/locales/${locale}.json`
108225
+ },
108226
+ { en: translations.en, pseudo: translations.pseudo },
108227
+ {
108228
+ oldTranslations: translations,
108229
+ enableCDN: isCDNEnabled
108230
+ }
108231
+ );
108221
108232
  const internalI18n = coreReact.useI18n({
108222
- ...clientI18n,
108233
+ locale: clientI18n.locale,
108223
108234
  translations: ramda.mergeDeepLeft(
108224
108235
  ramda.mergeDeepLeft(clientI18n.translations, {
108225
108236
  [clientI18n.locale]: translations2
108226
108237
  }),
108227
- translations
108228
- )
108238
+ cdnTranslations$1.translations
108239
+ ),
108240
+ enableCDN: isCDNEnabled
108229
108241
  });
108230
108242
  const rowSelectionRef = React80__default.default.useRef({
108231
108243
  affectedRows: {},
@@ -109355,7 +109367,10 @@ var Table = (props) => {
109355
109367
  groupDefaultExpanded: props.groupsAlwaysExpanded ? -1 : props.groupDefaultExpanded,
109356
109368
  groupIncludeFooter: !onSSDR && props.groupIncludeFooter === void 0 ? true : props.groupIncludeFooter,
109357
109369
  getGroupRowAgg: props.getGroupRowAgg ? getGroupRowAgg : void 0,
109358
- groupSelectsChildren: internalTableContext.totalRowCount > 0 && props.groupSelectsChildren || !onSSDR,
109370
+ groupSelectsChildren: (
109371
+ // Always true for client side, defaults to true for server side
109372
+ internalTableContext.totalRowCount > 0 && props.groupSelectsChildren !== false || !onSSDR
109373
+ ),
109359
109374
  groupSelectsFiltered: true,
109360
109375
  headerHeight: props.headerHeight,
109361
109376
  icons: tableIcons,
@@ -111488,7 +111503,8 @@ var ClientSideDataTable = ({
111488
111503
  onTableConfigChange,
111489
111504
  translations: translations2 = {},
111490
111505
  enableCellTextSelection,
111491
- localStoragePersistenceKey
111506
+ localStoragePersistenceKey,
111507
+ enableCDN
111492
111508
  }) => {
111493
111509
  return /* @__PURE__ */ React80__default.default.createElement(
111494
111510
  DataTable,
@@ -111506,7 +111522,8 @@ var ClientSideDataTable = ({
111506
111522
  translations: translations2,
111507
111523
  localStoragePersistenceKey,
111508
111524
  customBulkEditorFields,
111509
- enableCellTextSelection
111525
+ enableCellTextSelection,
111526
+ enableCDN
111510
111527
  },
111511
111528
  children
111512
111529
  );
@@ -115897,7 +115914,8 @@ var ServerSideDataTable = ({
115897
115914
  enableCellTextSelection,
115898
115915
  showExpandCollapseAllToggle,
115899
115916
  translations: translations2 = {},
115900
- localStoragePersistenceKey
115917
+ localStoragePersistenceKey,
115918
+ enableCDN
115901
115919
  }) => {
115902
115920
  return /* @__PURE__ */ React80__default.default.createElement(
115903
115921
  DataTable,
@@ -115916,7 +115934,8 @@ var ServerSideDataTable = ({
115916
115934
  translations: translations2,
115917
115935
  customBulkEditorFields,
115918
115936
  enableCellTextSelection,
115919
- localStoragePersistenceKey
115937
+ localStoragePersistenceKey,
115938
+ enableCDN
115920
115939
  },
115921
115940
  children
115922
115941
  );
@@ -1151,6 +1151,10 @@ interface DataTableProps {
1151
1151
  showExpandCollapseAllToggle?: boolean;
1152
1152
  translations?: DataTableTranslations;
1153
1153
  enableCellTextSelection?: boolean;
1154
+ /**
1155
+ * Whether to pull data-table translations from the CDN or not, by default it follows the value passed down through the parent I18nProvider.
1156
+ */
1157
+ enableCDN?: boolean;
1154
1158
  }
1155
1159
  interface ClientSideDataTableProps extends Omit<DataTableProps, 'onServerSideDataRequest' | 'showExpandCollapseAllToggle'> {
1156
1160
  }
@@ -1443,7 +1447,7 @@ interface BulkActionProps {
1443
1447
  style?: React__default.CSSProperties;
1444
1448
  }
1445
1449
 
1446
- declare const _default$1: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onTableConfigChange, translations, enableCellTextSelection, localStoragePersistenceKey, }: React__default.PropsWithChildren<ClientSideDataTableProps>) => React__default.JSX.Element) & {
1450
+ declare const _default$1: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onTableConfigChange, translations, enableCellTextSelection, localStoragePersistenceKey, enableCDN, }: React__default.PropsWithChildren<ClientSideDataTableProps>) => React__default.JSX.Element) & {
1447
1451
  BulkActions: React__default.FunctionComponent<React__default.PropsWithChildren<BulkActionProps>>;
1448
1452
  BulkEditActionButton: React__default.FunctionComponent<ActionButtonProps>;
1449
1453
  ConfigPanelButton: React__default.FC<{}>;
@@ -1480,7 +1484,7 @@ declare const MultiSelectQuickFilterRenderer: (props: FilterProps<any[]>) => Rea
1480
1484
 
1481
1485
  declare const SingleSelectQuickFilterRenderer: (props: FilterProps<any[]>) => React__default.JSX.Element;
1482
1486
 
1483
- declare const _default: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onServerSideDataRequest, onTableConfigChange, enableCellTextSelection, showExpandCollapseAllToggle, translations, localStoragePersistenceKey, }: React__default.PropsWithChildren<DataTableProps>) => React__default.JSX.Element) & {
1487
+ declare const _default: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onServerSideDataRequest, onTableConfigChange, enableCellTextSelection, showExpandCollapseAllToggle, translations, localStoragePersistenceKey, enableCDN, }: React__default.PropsWithChildren<DataTableProps>) => React__default.JSX.Element) & {
1484
1488
  BulkActions: React__default.FunctionComponent<React__default.PropsWithChildren<BulkActionProps>>;
1485
1489
  BulkEditActionButton: React__default.FunctionComponent<ActionButtonProps>;
1486
1490
  ConfigPanelButton: React__default.FC<{}>;
@@ -1151,6 +1151,10 @@ interface DataTableProps {
1151
1151
  showExpandCollapseAllToggle?: boolean;
1152
1152
  translations?: DataTableTranslations;
1153
1153
  enableCellTextSelection?: boolean;
1154
+ /**
1155
+ * Whether to pull data-table translations from the CDN or not, by default it follows the value passed down through the parent I18nProvider.
1156
+ */
1157
+ enableCDN?: boolean;
1154
1158
  }
1155
1159
  interface ClientSideDataTableProps extends Omit<DataTableProps, 'onServerSideDataRequest' | 'showExpandCollapseAllToggle'> {
1156
1160
  }
@@ -1443,7 +1447,7 @@ interface BulkActionProps {
1443
1447
  style?: React__default.CSSProperties;
1444
1448
  }
1445
1449
 
1446
- declare const _default$1: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onTableConfigChange, translations, enableCellTextSelection, localStoragePersistenceKey, }: React__default.PropsWithChildren<ClientSideDataTableProps>) => React__default.JSX.Element) & {
1450
+ declare const _default$1: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onTableConfigChange, translations, enableCellTextSelection, localStoragePersistenceKey, enableCDN, }: React__default.PropsWithChildren<ClientSideDataTableProps>) => React__default.JSX.Element) & {
1447
1451
  BulkActions: React__default.FunctionComponent<React__default.PropsWithChildren<BulkActionProps>>;
1448
1452
  BulkEditActionButton: React__default.FunctionComponent<ActionButtonProps>;
1449
1453
  ConfigPanelButton: React__default.FC<{}>;
@@ -1480,7 +1484,7 @@ declare const MultiSelectQuickFilterRenderer: (props: FilterProps<any[]>) => Rea
1480
1484
 
1481
1485
  declare const SingleSelectQuickFilterRenderer: (props: FilterProps<any[]>) => React__default.JSX.Element;
1482
1486
 
1483
- declare const _default: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onServerSideDataRequest, onTableConfigChange, enableCellTextSelection, showExpandCollapseAllToggle, translations, localStoragePersistenceKey, }: React__default.PropsWithChildren<DataTableProps>) => React__default.JSX.Element) & {
1487
+ declare const _default: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onServerSideDataRequest, onTableConfigChange, enableCellTextSelection, showExpandCollapseAllToggle, translations, localStoragePersistenceKey, enableCDN, }: React__default.PropsWithChildren<DataTableProps>) => React__default.JSX.Element) & {
1484
1488
  BulkActions: React__default.FunctionComponent<React__default.PropsWithChildren<BulkActionProps>>;
1485
1489
  BulkEditActionButton: React__default.FunctionComponent<ActionButtonProps>;
1486
1490
  ConfigPanelButton: React__default.FC<{}>;
@@ -10,6 +10,7 @@ import { formatNumber, formatCurrency, formatPercentage } from '@procore/labs-fi
10
10
  import styled4, { css as css$1 } from 'styled-components';
11
11
  import { format } from '@procore/labs-financials-utils/dist/format';
12
12
  import { detectPrng, factory } from 'ulid';
13
+ import { isCDNFeatureFlagEnabled, useRequestTranslations } from '@procore/cdn-translations';
13
14
  import { useToastAlertContext, ToastAlertProvider } from '@procore/toast-alert';
14
15
  import ReactDOM, { createPortal } from 'react-dom';
15
16
  import { renderToString, renderToStaticMarkup } from 'react-dom/server';
@@ -55406,19 +55407,15 @@ function getAffectedRows(currentRows, selectionNode, affectedRows) {
55406
55407
  function noop2() {
55407
55408
  }
55408
55409
  function getSelectedState(node, affectedRows) {
55409
- var _a;
55410
55410
  const self = affectedRows[node.id];
55411
55411
  if ((self == null ? void 0 : self.selectedState) === "selected") {
55412
55412
  return true;
55413
- } else if (node.parent && !isNodeRootLevelOfGrid(node.parent) && ((_a = affectedRows[node.parent.id]) == null ? void 0 : _a.selectedState) === "selected") {
55414
- node.setSelected(true, void 0, self == null ? void 0 : self.selectedState);
55415
- affectedRows[node.id] = {
55416
- node,
55417
- selectedState: "selected"
55418
- };
55413
+ } else if (node.isSelected()) {
55414
+ node.setSelected(true, void 0);
55415
+ affectedRows[node.id] = { node, selectedState: "selected" };
55419
55416
  return true;
55420
55417
  } else {
55421
- return !!node.isSelected();
55418
+ return false;
55422
55419
  }
55423
55420
  }
55424
55421
  function getCheckboxState(node, isServerSideDataRequest, rowSelectionRef) {
@@ -108193,7 +108190,8 @@ var DataTable = ({
108193
108190
  showExpandCollapseAllToggle,
108194
108191
  translations: translations2 = {},
108195
108192
  enableCellTextSelection,
108196
- localStoragePersistenceKey
108193
+ localStoragePersistenceKey,
108194
+ enableCDN
108197
108195
  }) => {
108198
108196
  const initialTableConfig = localStoragePersistenceKey && storage.local.getItem(localStoragePersistenceKey) || _initialTableConfig;
108199
108197
  const onServerSideDataRequestRef = React80.useRef(onServerSideDataRequest);
@@ -108205,14 +108203,28 @@ var DataTable = ({
108205
108203
  );
108206
108204
  const contextPanel = useContextPanel();
108207
108205
  const clientI18n = useI18nContext();
108206
+ const isCDNEnabled = isCDNFeatureFlagEnabled(clientI18n, enableCDN);
108207
+ const cdnTranslations = useRequestTranslations(
108208
+ {
108209
+ locale: clientI18n.locale,
108210
+ type: "file",
108211
+ absolute_file_path: (locale) => `core/packages/data-table/src/locales/${locale}.json`
108212
+ },
108213
+ { en: translations.en, pseudo: translations.pseudo },
108214
+ {
108215
+ oldTranslations: translations,
108216
+ enableCDN: isCDNEnabled
108217
+ }
108218
+ );
108208
108219
  const internalI18n = useI18n({
108209
- ...clientI18n,
108220
+ locale: clientI18n.locale,
108210
108221
  translations: mergeDeepLeft(
108211
108222
  mergeDeepLeft(clientI18n.translations, {
108212
108223
  [clientI18n.locale]: translations2
108213
108224
  }),
108214
- translations
108215
- )
108225
+ cdnTranslations.translations
108226
+ ),
108227
+ enableCDN: isCDNEnabled
108216
108228
  });
108217
108229
  const rowSelectionRef = React80.useRef({
108218
108230
  affectedRows: {},
@@ -109342,7 +109354,10 @@ var Table = (props) => {
109342
109354
  groupDefaultExpanded: props.groupsAlwaysExpanded ? -1 : props.groupDefaultExpanded,
109343
109355
  groupIncludeFooter: !onSSDR && props.groupIncludeFooter === void 0 ? true : props.groupIncludeFooter,
109344
109356
  getGroupRowAgg: props.getGroupRowAgg ? getGroupRowAgg : void 0,
109345
- groupSelectsChildren: internalTableContext.totalRowCount > 0 && props.groupSelectsChildren || !onSSDR,
109357
+ groupSelectsChildren: (
109358
+ // Always true for client side, defaults to true for server side
109359
+ internalTableContext.totalRowCount > 0 && props.groupSelectsChildren !== false || !onSSDR
109360
+ ),
109346
109361
  groupSelectsFiltered: true,
109347
109362
  headerHeight: props.headerHeight,
109348
109363
  icons: tableIcons,
@@ -111475,7 +111490,8 @@ var ClientSideDataTable = ({
111475
111490
  onTableConfigChange,
111476
111491
  translations: translations2 = {},
111477
111492
  enableCellTextSelection,
111478
- localStoragePersistenceKey
111493
+ localStoragePersistenceKey,
111494
+ enableCDN
111479
111495
  }) => {
111480
111496
  return /* @__PURE__ */ React80.createElement(
111481
111497
  DataTable,
@@ -111493,7 +111509,8 @@ var ClientSideDataTable = ({
111493
111509
  translations: translations2,
111494
111510
  localStoragePersistenceKey,
111495
111511
  customBulkEditorFields,
111496
- enableCellTextSelection
111512
+ enableCellTextSelection,
111513
+ enableCDN
111497
111514
  },
111498
111515
  children
111499
111516
  );
@@ -115884,7 +115901,8 @@ var ServerSideDataTable = ({
115884
115901
  enableCellTextSelection,
115885
115902
  showExpandCollapseAllToggle,
115886
115903
  translations: translations2 = {},
115887
- localStoragePersistenceKey
115904
+ localStoragePersistenceKey,
115905
+ enableCDN
115888
115906
  }) => {
115889
115907
  return /* @__PURE__ */ React80.createElement(
115890
115908
  DataTable,
@@ -115903,7 +115921,8 @@ var ServerSideDataTable = ({
115903
115921
  translations: translations2,
115904
115922
  customBulkEditorFields,
115905
115923
  enableCellTextSelection,
115906
- localStoragePersistenceKey
115924
+ localStoragePersistenceKey,
115925
+ enableCDN
115907
115926
  },
115908
115927
  children
115909
115928
  );
@@ -12,6 +12,7 @@ var labsFinancialsUtils = require('@procore/labs-financials-utils');
12
12
  var styled4 = require('styled-components');
13
13
  var format = require('@procore/labs-financials-utils/dist/format');
14
14
  var ulid$1 = require('ulid');
15
+ var cdnTranslations = require('@procore/cdn-translations');
15
16
  var toastAlert = require('@procore/toast-alert');
16
17
  var ReactDOM = require('react-dom');
17
18
  var server = require('react-dom/server');
@@ -55361,15 +55362,12 @@ function getSelectedState(node, affectedRows) {
55361
55362
  const self = affectedRows[node.id];
55362
55363
  if (self?.selectedState === "selected") {
55363
55364
  return true;
55364
- } else if (node.parent && !isNodeRootLevelOfGrid(node.parent) && affectedRows[node.parent.id]?.selectedState === "selected") {
55365
- node.setSelected(true, void 0, self?.selectedState);
55366
- affectedRows[node.id] = {
55367
- node,
55368
- selectedState: "selected"
55369
- };
55365
+ } else if (node.isSelected()) {
55366
+ node.setSelected(true, void 0);
55367
+ affectedRows[node.id] = { node, selectedState: "selected" };
55370
55368
  return true;
55371
55369
  } else {
55372
- return !!node.isSelected();
55370
+ return false;
55373
55371
  }
55374
55372
  }
55375
55373
  function getCheckboxState(node, isServerSideDataRequest, rowSelectionRef) {
@@ -108053,7 +108051,8 @@ var DataTable = ({
108053
108051
  showExpandCollapseAllToggle,
108054
108052
  translations: translations2 = {},
108055
108053
  enableCellTextSelection,
108056
- localStoragePersistenceKey
108054
+ localStoragePersistenceKey,
108055
+ enableCDN
108057
108056
  }) => {
108058
108057
  const initialTableConfig = localStoragePersistenceKey && webSdkStorage.storage.local.getItem(localStoragePersistenceKey) || _initialTableConfig;
108059
108058
  const onServerSideDataRequestRef = React80__default.default.useRef(onServerSideDataRequest);
@@ -108065,14 +108064,28 @@ var DataTable = ({
108065
108064
  );
108066
108065
  const contextPanel = useContextPanel();
108067
108066
  const clientI18n = coreReact.useI18nContext();
108067
+ const isCDNEnabled = cdnTranslations.isCDNFeatureFlagEnabled(clientI18n, enableCDN);
108068
+ const cdnTranslations$1 = cdnTranslations.useRequestTranslations(
108069
+ {
108070
+ locale: clientI18n.locale,
108071
+ type: "file",
108072
+ absolute_file_path: (locale) => `core/packages/data-table/src/locales/${locale}.json`
108073
+ },
108074
+ { en: translations.en, pseudo: translations.pseudo },
108075
+ {
108076
+ oldTranslations: translations,
108077
+ enableCDN: isCDNEnabled
108078
+ }
108079
+ );
108068
108080
  const internalI18n = coreReact.useI18n({
108069
- ...clientI18n,
108081
+ locale: clientI18n.locale,
108070
108082
  translations: ramda.mergeDeepLeft(
108071
108083
  ramda.mergeDeepLeft(clientI18n.translations, {
108072
108084
  [clientI18n.locale]: translations2
108073
108085
  }),
108074
- translations
108075
- )
108086
+ cdnTranslations$1.translations
108087
+ ),
108088
+ enableCDN: isCDNEnabled
108076
108089
  });
108077
108090
  const rowSelectionRef = React80__default.default.useRef({
108078
108091
  affectedRows: {},
@@ -109165,7 +109178,10 @@ var Table = (props) => {
109165
109178
  groupDefaultExpanded: props.groupsAlwaysExpanded ? -1 : props.groupDefaultExpanded,
109166
109179
  groupIncludeFooter: !onSSDR && props.groupIncludeFooter === void 0 ? true : props.groupIncludeFooter,
109167
109180
  getGroupRowAgg: props.getGroupRowAgg ? getGroupRowAgg : void 0,
109168
- groupSelectsChildren: internalTableContext.totalRowCount > 0 && props.groupSelectsChildren || !onSSDR,
109181
+ groupSelectsChildren: (
109182
+ // Always true for client side, defaults to true for server side
109183
+ internalTableContext.totalRowCount > 0 && props.groupSelectsChildren !== false || !onSSDR
109184
+ ),
109169
109185
  groupSelectsFiltered: true,
109170
109186
  headerHeight: props.headerHeight,
109171
109187
  icons: tableIcons,
@@ -111256,7 +111272,8 @@ var ClientSideDataTable = ({
111256
111272
  onTableConfigChange,
111257
111273
  translations: translations2 = {},
111258
111274
  enableCellTextSelection,
111259
- localStoragePersistenceKey
111275
+ localStoragePersistenceKey,
111276
+ enableCDN
111260
111277
  }) => {
111261
111278
  return /* @__PURE__ */ React80__default.default.createElement(
111262
111279
  DataTable,
@@ -111274,7 +111291,8 @@ var ClientSideDataTable = ({
111274
111291
  translations: translations2,
111275
111292
  localStoragePersistenceKey,
111276
111293
  customBulkEditorFields,
111277
- enableCellTextSelection
111294
+ enableCellTextSelection,
111295
+ enableCDN
111278
111296
  },
111279
111297
  children
111280
111298
  );
@@ -115664,7 +115682,8 @@ var ServerSideDataTable = ({
115664
115682
  enableCellTextSelection,
115665
115683
  showExpandCollapseAllToggle,
115666
115684
  translations: translations2 = {},
115667
- localStoragePersistenceKey
115685
+ localStoragePersistenceKey,
115686
+ enableCDN
115668
115687
  }) => {
115669
115688
  return /* @__PURE__ */ React80__default.default.createElement(
115670
115689
  DataTable,
@@ -115683,7 +115702,8 @@ var ServerSideDataTable = ({
115683
115702
  translations: translations2,
115684
115703
  customBulkEditorFields,
115685
115704
  enableCellTextSelection,
115686
- localStoragePersistenceKey
115705
+ localStoragePersistenceKey,
115706
+ enableCDN
115687
115707
  },
115688
115708
  children
115689
115709
  );
@@ -1151,6 +1151,10 @@ interface DataTableProps {
1151
1151
  showExpandCollapseAllToggle?: boolean;
1152
1152
  translations?: DataTableTranslations;
1153
1153
  enableCellTextSelection?: boolean;
1154
+ /**
1155
+ * Whether to pull data-table translations from the CDN or not, by default it follows the value passed down through the parent I18nProvider.
1156
+ */
1157
+ enableCDN?: boolean;
1154
1158
  }
1155
1159
  interface ClientSideDataTableProps extends Omit<DataTableProps, 'onServerSideDataRequest' | 'showExpandCollapseAllToggle'> {
1156
1160
  }
@@ -1443,7 +1447,7 @@ interface BulkActionProps {
1443
1447
  style?: React__default.CSSProperties;
1444
1448
  }
1445
1449
 
1446
- declare const _default$1: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onTableConfigChange, translations, enableCellTextSelection, localStoragePersistenceKey, }: React__default.PropsWithChildren<ClientSideDataTableProps>) => React__default.JSX.Element) & {
1450
+ declare const _default$1: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onTableConfigChange, translations, enableCellTextSelection, localStoragePersistenceKey, enableCDN, }: React__default.PropsWithChildren<ClientSideDataTableProps>) => React__default.JSX.Element) & {
1447
1451
  BulkActions: React__default.FunctionComponent<React__default.PropsWithChildren<BulkActionProps>>;
1448
1452
  BulkEditActionButton: React__default.FunctionComponent<ActionButtonProps>;
1449
1453
  ConfigPanelButton: React__default.FC<{}>;
@@ -1480,7 +1484,7 @@ declare const MultiSelectQuickFilterRenderer: (props: FilterProps<any[]>) => Rea
1480
1484
 
1481
1485
  declare const SingleSelectQuickFilterRenderer: (props: FilterProps<any[]>) => React__default.JSX.Element;
1482
1486
 
1483
- declare const _default: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onServerSideDataRequest, onTableConfigChange, enableCellTextSelection, showExpandCollapseAllToggle, translations, localStoragePersistenceKey, }: React__default.PropsWithChildren<DataTableProps>) => React__default.JSX.Element) & {
1487
+ declare const _default: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onServerSideDataRequest, onTableConfigChange, enableCellTextSelection, showExpandCollapseAllToggle, translations, localStoragePersistenceKey, enableCDN, }: React__default.PropsWithChildren<DataTableProps>) => React__default.JSX.Element) & {
1484
1488
  BulkActions: React__default.FunctionComponent<React__default.PropsWithChildren<BulkActionProps>>;
1485
1489
  BulkEditActionButton: React__default.FunctionComponent<ActionButtonProps>;
1486
1490
  ConfigPanelButton: React__default.FC<{}>;
@@ -1151,6 +1151,10 @@ interface DataTableProps {
1151
1151
  showExpandCollapseAllToggle?: boolean;
1152
1152
  translations?: DataTableTranslations;
1153
1153
  enableCellTextSelection?: boolean;
1154
+ /**
1155
+ * Whether to pull data-table translations from the CDN or not, by default it follows the value passed down through the parent I18nProvider.
1156
+ */
1157
+ enableCDN?: boolean;
1154
1158
  }
1155
1159
  interface ClientSideDataTableProps extends Omit<DataTableProps, 'onServerSideDataRequest' | 'showExpandCollapseAllToggle'> {
1156
1160
  }
@@ -1443,7 +1447,7 @@ interface BulkActionProps {
1443
1447
  style?: React__default.CSSProperties;
1444
1448
  }
1445
1449
 
1446
- declare const _default$1: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onTableConfigChange, translations, enableCellTextSelection, localStoragePersistenceKey, }: React__default.PropsWithChildren<ClientSideDataTableProps>) => React__default.JSX.Element) & {
1450
+ declare const _default$1: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onTableConfigChange, translations, enableCellTextSelection, localStoragePersistenceKey, enableCDN, }: React__default.PropsWithChildren<ClientSideDataTableProps>) => React__default.JSX.Element) & {
1447
1451
  BulkActions: React__default.FunctionComponent<React__default.PropsWithChildren<BulkActionProps>>;
1448
1452
  BulkEditActionButton: React__default.FunctionComponent<ActionButtonProps>;
1449
1453
  ConfigPanelButton: React__default.FC<{}>;
@@ -1480,7 +1484,7 @@ declare const MultiSelectQuickFilterRenderer: (props: FilterProps<any[]>) => Rea
1480
1484
 
1481
1485
  declare const SingleSelectQuickFilterRenderer: (props: FilterProps<any[]>) => React__default.JSX.Element;
1482
1486
 
1483
- declare const _default: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onServerSideDataRequest, onTableConfigChange, enableCellTextSelection, showExpandCollapseAllToggle, translations, localStoragePersistenceKey, }: React__default.PropsWithChildren<DataTableProps>) => React__default.JSX.Element) & {
1487
+ declare const _default: (({ analytics, children, columnDefinitions: _columnDefinitions, customBulkEditorFields, enableDynamicRowHeight, enableGroupEditAndValidation, filterGroups, getRowId, initialTableConfig: _initialTableConfig, onBulkEditUpdate, onServerSideDataRequest, onTableConfigChange, enableCellTextSelection, showExpandCollapseAllToggle, translations, localStoragePersistenceKey, enableCDN, }: React__default.PropsWithChildren<DataTableProps>) => React__default.JSX.Element) & {
1484
1488
  BulkActions: React__default.FunctionComponent<React__default.PropsWithChildren<BulkActionProps>>;
1485
1489
  BulkEditActionButton: React__default.FunctionComponent<ActionButtonProps>;
1486
1490
  ConfigPanelButton: React__default.FC<{}>;
@@ -10,6 +10,7 @@ import { formatNumber, formatCurrency, formatPercentage } from '@procore/labs-fi
10
10
  import styled4, { css as css$1 } from 'styled-components';
11
11
  import { format } from '@procore/labs-financials-utils/dist/format';
12
12
  import { detectPrng, factory } from 'ulid';
13
+ import { isCDNFeatureFlagEnabled, useRequestTranslations } from '@procore/cdn-translations';
13
14
  import { useToastAlertContext, ToastAlertProvider } from '@procore/toast-alert';
14
15
  import ReactDOM, { createPortal } from 'react-dom';
15
16
  import { renderToString, renderToStaticMarkup } from 'react-dom/server';
@@ -55348,15 +55349,12 @@ function getSelectedState(node, affectedRows) {
55348
55349
  const self = affectedRows[node.id];
55349
55350
  if (self?.selectedState === "selected") {
55350
55351
  return true;
55351
- } else if (node.parent && !isNodeRootLevelOfGrid(node.parent) && affectedRows[node.parent.id]?.selectedState === "selected") {
55352
- node.setSelected(true, void 0, self?.selectedState);
55353
- affectedRows[node.id] = {
55354
- node,
55355
- selectedState: "selected"
55356
- };
55352
+ } else if (node.isSelected()) {
55353
+ node.setSelected(true, void 0);
55354
+ affectedRows[node.id] = { node, selectedState: "selected" };
55357
55355
  return true;
55358
55356
  } else {
55359
- return !!node.isSelected();
55357
+ return false;
55360
55358
  }
55361
55359
  }
55362
55360
  function getCheckboxState(node, isServerSideDataRequest, rowSelectionRef) {
@@ -108040,7 +108038,8 @@ var DataTable = ({
108040
108038
  showExpandCollapseAllToggle,
108041
108039
  translations: translations2 = {},
108042
108040
  enableCellTextSelection,
108043
- localStoragePersistenceKey
108041
+ localStoragePersistenceKey,
108042
+ enableCDN
108044
108043
  }) => {
108045
108044
  const initialTableConfig = localStoragePersistenceKey && storage.local.getItem(localStoragePersistenceKey) || _initialTableConfig;
108046
108045
  const onServerSideDataRequestRef = React80.useRef(onServerSideDataRequest);
@@ -108052,14 +108051,28 @@ var DataTable = ({
108052
108051
  );
108053
108052
  const contextPanel = useContextPanel();
108054
108053
  const clientI18n = useI18nContext();
108054
+ const isCDNEnabled = isCDNFeatureFlagEnabled(clientI18n, enableCDN);
108055
+ const cdnTranslations = useRequestTranslations(
108056
+ {
108057
+ locale: clientI18n.locale,
108058
+ type: "file",
108059
+ absolute_file_path: (locale) => `core/packages/data-table/src/locales/${locale}.json`
108060
+ },
108061
+ { en: translations.en, pseudo: translations.pseudo },
108062
+ {
108063
+ oldTranslations: translations,
108064
+ enableCDN: isCDNEnabled
108065
+ }
108066
+ );
108055
108067
  const internalI18n = useI18n({
108056
- ...clientI18n,
108068
+ locale: clientI18n.locale,
108057
108069
  translations: mergeDeepLeft(
108058
108070
  mergeDeepLeft(clientI18n.translations, {
108059
108071
  [clientI18n.locale]: translations2
108060
108072
  }),
108061
- translations
108062
- )
108073
+ cdnTranslations.translations
108074
+ ),
108075
+ enableCDN: isCDNEnabled
108063
108076
  });
108064
108077
  const rowSelectionRef = React80.useRef({
108065
108078
  affectedRows: {},
@@ -109152,7 +109165,10 @@ var Table = (props) => {
109152
109165
  groupDefaultExpanded: props.groupsAlwaysExpanded ? -1 : props.groupDefaultExpanded,
109153
109166
  groupIncludeFooter: !onSSDR && props.groupIncludeFooter === void 0 ? true : props.groupIncludeFooter,
109154
109167
  getGroupRowAgg: props.getGroupRowAgg ? getGroupRowAgg : void 0,
109155
- groupSelectsChildren: internalTableContext.totalRowCount > 0 && props.groupSelectsChildren || !onSSDR,
109168
+ groupSelectsChildren: (
109169
+ // Always true for client side, defaults to true for server side
109170
+ internalTableContext.totalRowCount > 0 && props.groupSelectsChildren !== false || !onSSDR
109171
+ ),
109156
109172
  groupSelectsFiltered: true,
109157
109173
  headerHeight: props.headerHeight,
109158
109174
  icons: tableIcons,
@@ -111243,7 +111259,8 @@ var ClientSideDataTable = ({
111243
111259
  onTableConfigChange,
111244
111260
  translations: translations2 = {},
111245
111261
  enableCellTextSelection,
111246
- localStoragePersistenceKey
111262
+ localStoragePersistenceKey,
111263
+ enableCDN
111247
111264
  }) => {
111248
111265
  return /* @__PURE__ */ React80.createElement(
111249
111266
  DataTable,
@@ -111261,7 +111278,8 @@ var ClientSideDataTable = ({
111261
111278
  translations: translations2,
111262
111279
  localStoragePersistenceKey,
111263
111280
  customBulkEditorFields,
111264
- enableCellTextSelection
111281
+ enableCellTextSelection,
111282
+ enableCDN
111265
111283
  },
111266
111284
  children
111267
111285
  );
@@ -115651,7 +115669,8 @@ var ServerSideDataTable = ({
115651
115669
  enableCellTextSelection,
115652
115670
  showExpandCollapseAllToggle,
115653
115671
  translations: translations2 = {},
115654
- localStoragePersistenceKey
115672
+ localStoragePersistenceKey,
115673
+ enableCDN
115655
115674
  }) => {
115656
115675
  return /* @__PURE__ */ React80.createElement(
115657
115676
  DataTable,
@@ -115670,7 +115689,8 @@ var ServerSideDataTable = ({
115670
115689
  translations: translations2,
115671
115690
  customBulkEditorFields,
115672
115691
  enableCellTextSelection,
115673
- localStoragePersistenceKey
115692
+ localStoragePersistenceKey,
115693
+ enableCDN
115674
115694
  },
115675
115695
  children
115676
115696
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@procore/data-table",
3
- "version": "14.33.0",
3
+ "version": "14.34.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",
@@ -74,6 +74,7 @@
74
74
  "styled-components": ">= 5.1.1 < 7"
75
75
  },
76
76
  "dependencies": {
77
+ "@procore/cdn-translations": "0.1.12",
77
78
  "@procore/error-pages": "^0.2.3",
78
79
  "@procore/labs-datetime-select": "^0.1.3",
79
80
  "@procore/labs-group-by-select": "^4.1.0",
@@ -106,9 +107,9 @@
106
107
  "@dotenvx/dotenvx": "1.6.4",
107
108
  "@ngneat/falso": "6.4.0",
108
109
  "@procore/core-css": "10.17.0",
109
- "@procore/core-icons": "^12.7.0",
110
+ "@procore/core-icons": "^12.8.0",
110
111
  "@procore/core-prettier": "10.2.0",
111
- "@procore/core-react": "^12.22.0",
112
+ "@procore/core-react": "^12.23.0",
112
113
  "@procore/eslint-config": "10.0.0",
113
114
  "@procore/globalization-toolkit": "3.1.0",
114
115
  "@procore/labs-financials-utils": "4.3.1",