@procore/data-table 14.41.0 → 14.43.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,22 @@
1
1
  # Change Log
2
2
 
3
+ ## 14.43.0
4
+
5
+ ### Minor Changes
6
+
7
+ - b910752: Fix bulk edit crash for custom fields with peopleMultiSelect editor
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [26ca426]
12
+ - @procore/labs-datetime-select@0.2.2
13
+
14
+ ## 14.42.0
15
+
16
+ ### Minor Changes
17
+
18
+ - 433e594: Add a callOnRowDragEndAfterLeave prop to know where rows are moved if the user drags a row outside the table
19
+
3
20
  ## 14.41.0
4
21
 
5
22
  ### Minor Changes
@@ -103435,7 +103435,7 @@ var BulkEditInput = (props) => {
103435
103435
  name: field.input.name
103436
103436
  }
103437
103437
  );
103438
- case "currency":
103438
+ case "currency": {
103439
103439
  const {
103440
103440
  placeholder: currencyPlaceholder,
103441
103441
  ...currencyParams
@@ -103453,7 +103453,8 @@ var BulkEditInput = (props) => {
103453
103453
  value: field.input.value ?? ""
103454
103454
  }
103455
103455
  );
103456
- case "dateSelect":
103456
+ }
103457
+ case "dateSelect": {
103457
103458
  const dateSelectParams = props.editorParams;
103458
103459
  return /* @__PURE__ */ React80__default.default.createElement(
103459
103460
  coreReact.Form.DateSelect,
@@ -103466,7 +103467,8 @@ var BulkEditInput = (props) => {
103466
103467
  name: field.input.name
103467
103468
  }
103468
103469
  );
103469
- case "dateTimeSelect":
103470
+ }
103471
+ case "dateTimeSelect": {
103470
103472
  const dateTimeSelectParams = props.editorParams;
103471
103473
  return /* @__PURE__ */ React80__default.default.createElement(
103472
103474
  labsDatetimeSelect.DateTimeSelectField,
@@ -103479,7 +103481,8 @@ var BulkEditInput = (props) => {
103479
103481
  name: field.input.name
103480
103482
  }
103481
103483
  );
103482
- case "multiSelect":
103484
+ }
103485
+ case "multiSelect": {
103483
103486
  const {
103484
103487
  placeholder: multiSelectPlaceholder,
103485
103488
  ...multiSelectParams
@@ -103501,6 +103504,7 @@ var BulkEditInput = (props) => {
103501
103504
  placeholder: multiSelectPlaceholder ?? placeholderForField
103502
103505
  }
103503
103506
  );
103507
+ }
103504
103508
  case "number":
103505
103509
  return /* @__PURE__ */ React80__default.default.createElement(
103506
103510
  coreReact.Form.Number,
@@ -103514,7 +103518,7 @@ var BulkEditInput = (props) => {
103514
103518
  value: field.input.value ?? ""
103515
103519
  }
103516
103520
  );
103517
- case "person":
103521
+ case "person": {
103518
103522
  const {
103519
103523
  placeholder: personPlaceholder,
103520
103524
  ...personParams
@@ -103537,7 +103541,8 @@ var BulkEditInput = (props) => {
103537
103541
  placeholder: personPlaceholder ?? placeholderForField
103538
103542
  }
103539
103543
  );
103540
- case "peopleMultiSelect":
103544
+ }
103545
+ case "peopleMultiSelect": {
103541
103546
  const {
103542
103547
  placeholder: peopleMultiSelectPlaceholder,
103543
103548
  ...peopleMultiSelectParams
@@ -103560,6 +103565,7 @@ var BulkEditInput = (props) => {
103560
103565
  placeholder: peopleMultiSelectPlaceholder ?? placeholderForField
103561
103566
  }
103562
103567
  );
103568
+ }
103563
103569
  case "radio":
103564
103570
  return /* @__PURE__ */ React80__default.default.createElement(
103565
103571
  RadioList,
@@ -103573,7 +103579,7 @@ var BulkEditInput = (props) => {
103573
103579
  options
103574
103580
  }
103575
103581
  );
103576
- case "select":
103582
+ case "select": {
103577
103583
  const {
103578
103584
  placeholder: selectPlaceholder,
103579
103585
  ...selectParams
@@ -103595,7 +103601,8 @@ var BulkEditInput = (props) => {
103595
103601
  placeholder: selectPlaceholder ?? placeholderForField
103596
103602
  }
103597
103603
  );
103598
- case "company":
103604
+ }
103605
+ case "company": {
103599
103606
  const {
103600
103607
  placeholder: companyPlaceholder,
103601
103608
  ...companyParams
@@ -103618,7 +103625,8 @@ var BulkEditInput = (props) => {
103618
103625
  placeholder: companyPlaceholder ?? placeholderForField
103619
103626
  }
103620
103627
  );
103621
- case "companiesMultiSelect":
103628
+ }
103629
+ case "companiesMultiSelect": {
103622
103630
  const {
103623
103631
  placeholder: companiesMultiSelectPlaceholder,
103624
103632
  ...companiesBulkEditorParams
@@ -103641,6 +103649,7 @@ var BulkEditInput = (props) => {
103641
103649
  placeholder: companiesMultiSelectPlaceholder ?? placeholderForField
103642
103650
  }
103643
103651
  );
103652
+ }
103644
103653
  default:
103645
103654
  if (props.editor && (customBulkEditorFields == null ? void 0 : customBulkEditorFields[props.editor])) {
103646
103655
  return /* @__PURE__ */ React80__default.default.createElement(
@@ -104497,6 +104506,63 @@ var buildDetailRowsConfig_ = (detailRowConfig, {
104497
104506
  };
104498
104507
  };
104499
104508
 
104509
+ // src/utils/dragging.ts
104510
+ function handleDragStopped({
104511
+ event,
104512
+ internalTableContext,
104513
+ moveColumnEvent: moveColumnEvent2,
104514
+ rowDragMoveEvent: rowDragMoveEvent2,
104515
+ rowDragEndEvent: rowDragEndEvent2,
104516
+ tableProps
104517
+ }) {
104518
+ var _a, _b, _c;
104519
+ if (event.target.className.includes("ag-header-cell")) {
104520
+ internalTableContext.onTableConfigChange();
104521
+ }
104522
+ if (moveColumnEvent2) {
104523
+ (_b = internalTableContext.analytics) == null ? void 0 : _b.client.addEvent(
104524
+ "design_system.data_table.column.repositioned",
104525
+ {
104526
+ client: internalTableContext.analytics.clientName,
104527
+ column: (_a = moveColumnEvent2.column) == null ? void 0 : _a.getColId(),
104528
+ position: moveColumnEvent2.toIndex
104529
+ }
104530
+ );
104531
+ if (tableProps.onRowDragEnd) {
104532
+ const allColumns = event.columnApi.getAllGridColumns();
104533
+ const firstVisibleColumnIndex = allColumns.findIndex(
104534
+ (col) => col.isVisible()
104535
+ );
104536
+ if (moveColumnEvent2.toIndex === firstVisibleColumnIndex || ((_c = moveColumnEvent2.column) == null ? void 0 : _c.getColDef().rowDrag)) {
104537
+ adjustRowDragIcon(event.api, event.columnApi);
104538
+ }
104539
+ }
104540
+ moveColumnEvent2 = void 0;
104541
+ }
104542
+ if (tableProps.onRowDragEnd && rowDragMoveEvent2) {
104543
+ if (rowDragEndEvent2 && rowDragEndEvent2.overIndex >= 0) {
104544
+ tableProps.onRowDragEnd(
104545
+ rowDragEndEvent2.node.data,
104546
+ rowDragEndEvent2.node.rowIndex,
104547
+ rowDragEndEvent2.node,
104548
+ rowDragEndEvent2.overNode
104549
+ );
104550
+ } else if (tableProps.callOnRowDragEndAfterLeave) {
104551
+ tableProps.onRowDragEnd(
104552
+ rowDragMoveEvent2.node.data,
104553
+ rowDragMoveEvent2.node.rowIndex,
104554
+ rowDragMoveEvent2.node,
104555
+ rowDragMoveEvent2.overNode
104556
+ );
104557
+ }
104558
+ if (tableProps.rows && !tableProps.rowDragManaged) {
104559
+ event.api.setRowData(tableProps.rows);
104560
+ }
104561
+ }
104562
+ rowDragMoveEvent2 = void 0;
104563
+ rowDragEndEvent2 = void 0;
104564
+ }
104565
+
104500
104566
  // src/utils/expandRows.ts
104501
104567
  function getStringifiedRoute(node) {
104502
104568
  var _a;
@@ -109866,50 +109932,18 @@ var Table = (props) => {
109866
109932
  }
109867
109933
  const onDragStopped = React80__default.default.useCallback(
109868
109934
  // eslint-disable-next-line complexity
109869
- (event) => {
109870
- var _a2, _b2, _c2;
109871
- if (event.target.className.includes("ag-header-cell")) {
109872
- internalTableContext.onTableConfigChange();
109873
- }
109874
- if (moveColumnEvent) {
109875
- (_b2 = internalTableContext.analytics) == null ? void 0 : _b2.client.addEvent(
109876
- "design_system.data_table.column.repositioned",
109877
- {
109878
- client: internalTableContext.analytics.clientName,
109879
- column: (_a2 = moveColumnEvent.column) == null ? void 0 : _a2.getColId(),
109880
- position: moveColumnEvent.toIndex
109881
- }
109882
- );
109883
- if (props.onRowDragEnd) {
109884
- const allColumns = event.columnApi.getAllGridColumns();
109885
- const firstVisibleColumnIndex = allColumns.findIndex(
109886
- (col) => col.isVisible()
109887
- );
109888
- if (moveColumnEvent.toIndex === firstVisibleColumnIndex || ((_c2 = moveColumnEvent.column) == null ? void 0 : _c2.getColDef().rowDrag)) {
109889
- adjustRowDragIcon(event.api, event.columnApi);
109890
- }
109891
- }
109892
- moveColumnEvent = void 0;
109893
- }
109894
- if (props.onRowDragEnd && rowDragMoveEvent) {
109895
- if (rowDragEndEvent && rowDragEndEvent.overIndex >= 0) {
109896
- props.onRowDragEnd(
109897
- rowDragEndEvent.node.data,
109898
- rowDragEndEvent.node.rowIndex,
109899
- rowDragEndEvent.node,
109900
- rowDragEndEvent.overNode
109901
- );
109902
- }
109903
- if (props.rows && !props.rowDragManaged) {
109904
- event.api.setRowData(props.rows);
109905
- }
109906
- }
109907
- rowDragMoveEvent = void 0;
109908
- rowDragEndEvent = void 0;
109909
- },
109935
+ (event) => handleDragStopped({
109936
+ event,
109937
+ internalTableContext,
109938
+ moveColumnEvent,
109939
+ rowDragMoveEvent,
109940
+ rowDragEndEvent,
109941
+ tableProps: props
109942
+ }),
109910
109943
  [
109911
109944
  internalTableContext.onTableConfigChange,
109912
109945
  props.onRowDragEnd,
109946
+ props.callOnRowDragEndAfterLeave,
109913
109947
  props.rowDragManaged,
109914
109948
  props.rows
109915
109949
  ]
@@ -1006,6 +1006,7 @@ interface TableProps<TRow = any, TBottomRow = any> {
1006
1006
  modules: Module[];
1007
1007
  onCellValueChanged?: (params: CellValueChangeParams<any>) => void;
1008
1008
  onRowDragEnd?: (row: TRow, endIndex: number, node: Pick<RowNode, 'childIndex' | 'group'>, overNode?: Pick<RowNode, 'childIndex' | 'group' | 'data'>) => void;
1009
+ callOnRowDragEndAfterLeave?: boolean;
1009
1010
  onRowGroupOpened?: (event: RowGroupToggledEvent<TRow>) => void;
1010
1011
  onRowSelected?: (event: RowSelectedEvent) => void;
1011
1012
  onSelectAll?: (param: SelectAllState.All | SelectAllState.None) => void;
@@ -1006,6 +1006,7 @@ interface TableProps<TRow = any, TBottomRow = any> {
1006
1006
  modules: Module[];
1007
1007
  onCellValueChanged?: (params: CellValueChangeParams<any>) => void;
1008
1008
  onRowDragEnd?: (row: TRow, endIndex: number, node: Pick<RowNode, 'childIndex' | 'group'>, overNode?: Pick<RowNode, 'childIndex' | 'group' | 'data'>) => void;
1009
+ callOnRowDragEndAfterLeave?: boolean;
1009
1010
  onRowGroupOpened?: (event: RowGroupToggledEvent<TRow>) => void;
1010
1011
  onRowSelected?: (event: RowSelectedEvent) => void;
1011
1012
  onSelectAll?: (param: SelectAllState.All | SelectAllState.None) => void;
@@ -103422,7 +103422,7 @@ var BulkEditInput = (props) => {
103422
103422
  name: field.input.name
103423
103423
  }
103424
103424
  );
103425
- case "currency":
103425
+ case "currency": {
103426
103426
  const {
103427
103427
  placeholder: currencyPlaceholder,
103428
103428
  ...currencyParams
@@ -103440,7 +103440,8 @@ var BulkEditInput = (props) => {
103440
103440
  value: field.input.value ?? ""
103441
103441
  }
103442
103442
  );
103443
- case "dateSelect":
103443
+ }
103444
+ case "dateSelect": {
103444
103445
  const dateSelectParams = props.editorParams;
103445
103446
  return /* @__PURE__ */ React80.createElement(
103446
103447
  Form.DateSelect,
@@ -103453,7 +103454,8 @@ var BulkEditInput = (props) => {
103453
103454
  name: field.input.name
103454
103455
  }
103455
103456
  );
103456
- case "dateTimeSelect":
103457
+ }
103458
+ case "dateTimeSelect": {
103457
103459
  const dateTimeSelectParams = props.editorParams;
103458
103460
  return /* @__PURE__ */ React80.createElement(
103459
103461
  DateTimeSelectField,
@@ -103466,7 +103468,8 @@ var BulkEditInput = (props) => {
103466
103468
  name: field.input.name
103467
103469
  }
103468
103470
  );
103469
- case "multiSelect":
103471
+ }
103472
+ case "multiSelect": {
103470
103473
  const {
103471
103474
  placeholder: multiSelectPlaceholder,
103472
103475
  ...multiSelectParams
@@ -103488,6 +103491,7 @@ var BulkEditInput = (props) => {
103488
103491
  placeholder: multiSelectPlaceholder ?? placeholderForField
103489
103492
  }
103490
103493
  );
103494
+ }
103491
103495
  case "number":
103492
103496
  return /* @__PURE__ */ React80.createElement(
103493
103497
  Form.Number,
@@ -103501,7 +103505,7 @@ var BulkEditInput = (props) => {
103501
103505
  value: field.input.value ?? ""
103502
103506
  }
103503
103507
  );
103504
- case "person":
103508
+ case "person": {
103505
103509
  const {
103506
103510
  placeholder: personPlaceholder,
103507
103511
  ...personParams
@@ -103524,7 +103528,8 @@ var BulkEditInput = (props) => {
103524
103528
  placeholder: personPlaceholder ?? placeholderForField
103525
103529
  }
103526
103530
  );
103527
- case "peopleMultiSelect":
103531
+ }
103532
+ case "peopleMultiSelect": {
103528
103533
  const {
103529
103534
  placeholder: peopleMultiSelectPlaceholder,
103530
103535
  ...peopleMultiSelectParams
@@ -103547,6 +103552,7 @@ var BulkEditInput = (props) => {
103547
103552
  placeholder: peopleMultiSelectPlaceholder ?? placeholderForField
103548
103553
  }
103549
103554
  );
103555
+ }
103550
103556
  case "radio":
103551
103557
  return /* @__PURE__ */ React80.createElement(
103552
103558
  RadioList,
@@ -103560,7 +103566,7 @@ var BulkEditInput = (props) => {
103560
103566
  options
103561
103567
  }
103562
103568
  );
103563
- case "select":
103569
+ case "select": {
103564
103570
  const {
103565
103571
  placeholder: selectPlaceholder,
103566
103572
  ...selectParams
@@ -103582,7 +103588,8 @@ var BulkEditInput = (props) => {
103582
103588
  placeholder: selectPlaceholder ?? placeholderForField
103583
103589
  }
103584
103590
  );
103585
- case "company":
103591
+ }
103592
+ case "company": {
103586
103593
  const {
103587
103594
  placeholder: companyPlaceholder,
103588
103595
  ...companyParams
@@ -103605,7 +103612,8 @@ var BulkEditInput = (props) => {
103605
103612
  placeholder: companyPlaceholder ?? placeholderForField
103606
103613
  }
103607
103614
  );
103608
- case "companiesMultiSelect":
103615
+ }
103616
+ case "companiesMultiSelect": {
103609
103617
  const {
103610
103618
  placeholder: companiesMultiSelectPlaceholder,
103611
103619
  ...companiesBulkEditorParams
@@ -103628,6 +103636,7 @@ var BulkEditInput = (props) => {
103628
103636
  placeholder: companiesMultiSelectPlaceholder ?? placeholderForField
103629
103637
  }
103630
103638
  );
103639
+ }
103631
103640
  default:
103632
103641
  if (props.editor && (customBulkEditorFields == null ? void 0 : customBulkEditorFields[props.editor])) {
103633
103642
  return /* @__PURE__ */ React80.createElement(
@@ -104484,6 +104493,63 @@ var buildDetailRowsConfig_ = (detailRowConfig, {
104484
104493
  };
104485
104494
  };
104486
104495
 
104496
+ // src/utils/dragging.ts
104497
+ function handleDragStopped({
104498
+ event,
104499
+ internalTableContext,
104500
+ moveColumnEvent: moveColumnEvent2,
104501
+ rowDragMoveEvent: rowDragMoveEvent2,
104502
+ rowDragEndEvent: rowDragEndEvent2,
104503
+ tableProps
104504
+ }) {
104505
+ var _a, _b, _c;
104506
+ if (event.target.className.includes("ag-header-cell")) {
104507
+ internalTableContext.onTableConfigChange();
104508
+ }
104509
+ if (moveColumnEvent2) {
104510
+ (_b = internalTableContext.analytics) == null ? void 0 : _b.client.addEvent(
104511
+ "design_system.data_table.column.repositioned",
104512
+ {
104513
+ client: internalTableContext.analytics.clientName,
104514
+ column: (_a = moveColumnEvent2.column) == null ? void 0 : _a.getColId(),
104515
+ position: moveColumnEvent2.toIndex
104516
+ }
104517
+ );
104518
+ if (tableProps.onRowDragEnd) {
104519
+ const allColumns = event.columnApi.getAllGridColumns();
104520
+ const firstVisibleColumnIndex = allColumns.findIndex(
104521
+ (col) => col.isVisible()
104522
+ );
104523
+ if (moveColumnEvent2.toIndex === firstVisibleColumnIndex || ((_c = moveColumnEvent2.column) == null ? void 0 : _c.getColDef().rowDrag)) {
104524
+ adjustRowDragIcon(event.api, event.columnApi);
104525
+ }
104526
+ }
104527
+ moveColumnEvent2 = void 0;
104528
+ }
104529
+ if (tableProps.onRowDragEnd && rowDragMoveEvent2) {
104530
+ if (rowDragEndEvent2 && rowDragEndEvent2.overIndex >= 0) {
104531
+ tableProps.onRowDragEnd(
104532
+ rowDragEndEvent2.node.data,
104533
+ rowDragEndEvent2.node.rowIndex,
104534
+ rowDragEndEvent2.node,
104535
+ rowDragEndEvent2.overNode
104536
+ );
104537
+ } else if (tableProps.callOnRowDragEndAfterLeave) {
104538
+ tableProps.onRowDragEnd(
104539
+ rowDragMoveEvent2.node.data,
104540
+ rowDragMoveEvent2.node.rowIndex,
104541
+ rowDragMoveEvent2.node,
104542
+ rowDragMoveEvent2.overNode
104543
+ );
104544
+ }
104545
+ if (tableProps.rows && !tableProps.rowDragManaged) {
104546
+ event.api.setRowData(tableProps.rows);
104547
+ }
104548
+ }
104549
+ rowDragMoveEvent2 = void 0;
104550
+ rowDragEndEvent2 = void 0;
104551
+ }
104552
+
104487
104553
  // src/utils/expandRows.ts
104488
104554
  function getStringifiedRoute(node) {
104489
104555
  var _a;
@@ -109853,50 +109919,18 @@ var Table = (props) => {
109853
109919
  }
109854
109920
  const onDragStopped = React80.useCallback(
109855
109921
  // eslint-disable-next-line complexity
109856
- (event) => {
109857
- var _a2, _b2, _c2;
109858
- if (event.target.className.includes("ag-header-cell")) {
109859
- internalTableContext.onTableConfigChange();
109860
- }
109861
- if (moveColumnEvent) {
109862
- (_b2 = internalTableContext.analytics) == null ? void 0 : _b2.client.addEvent(
109863
- "design_system.data_table.column.repositioned",
109864
- {
109865
- client: internalTableContext.analytics.clientName,
109866
- column: (_a2 = moveColumnEvent.column) == null ? void 0 : _a2.getColId(),
109867
- position: moveColumnEvent.toIndex
109868
- }
109869
- );
109870
- if (props.onRowDragEnd) {
109871
- const allColumns = event.columnApi.getAllGridColumns();
109872
- const firstVisibleColumnIndex = allColumns.findIndex(
109873
- (col) => col.isVisible()
109874
- );
109875
- if (moveColumnEvent.toIndex === firstVisibleColumnIndex || ((_c2 = moveColumnEvent.column) == null ? void 0 : _c2.getColDef().rowDrag)) {
109876
- adjustRowDragIcon(event.api, event.columnApi);
109877
- }
109878
- }
109879
- moveColumnEvent = void 0;
109880
- }
109881
- if (props.onRowDragEnd && rowDragMoveEvent) {
109882
- if (rowDragEndEvent && rowDragEndEvent.overIndex >= 0) {
109883
- props.onRowDragEnd(
109884
- rowDragEndEvent.node.data,
109885
- rowDragEndEvent.node.rowIndex,
109886
- rowDragEndEvent.node,
109887
- rowDragEndEvent.overNode
109888
- );
109889
- }
109890
- if (props.rows && !props.rowDragManaged) {
109891
- event.api.setRowData(props.rows);
109892
- }
109893
- }
109894
- rowDragMoveEvent = void 0;
109895
- rowDragEndEvent = void 0;
109896
- },
109922
+ (event) => handleDragStopped({
109923
+ event,
109924
+ internalTableContext,
109925
+ moveColumnEvent,
109926
+ rowDragMoveEvent,
109927
+ rowDragEndEvent,
109928
+ tableProps: props
109929
+ }),
109897
109930
  [
109898
109931
  internalTableContext.onTableConfigChange,
109899
109932
  props.onRowDragEnd,
109933
+ props.callOnRowDragEndAfterLeave,
109900
109934
  props.rowDragManaged,
109901
109935
  props.rows
109902
109936
  ]
@@ -103323,7 +103323,7 @@ var BulkEditInput = (props) => {
103323
103323
  name: field.input.name
103324
103324
  }
103325
103325
  );
103326
- case "currency":
103326
+ case "currency": {
103327
103327
  const {
103328
103328
  placeholder: currencyPlaceholder,
103329
103329
  ...currencyParams
@@ -103341,7 +103341,8 @@ var BulkEditInput = (props) => {
103341
103341
  value: field.input.value ?? ""
103342
103342
  }
103343
103343
  );
103344
- case "dateSelect":
103344
+ }
103345
+ case "dateSelect": {
103345
103346
  const dateSelectParams = props.editorParams;
103346
103347
  return /* @__PURE__ */ React80__default.default.createElement(
103347
103348
  coreReact.Form.DateSelect,
@@ -103354,7 +103355,8 @@ var BulkEditInput = (props) => {
103354
103355
  name: field.input.name
103355
103356
  }
103356
103357
  );
103357
- case "dateTimeSelect":
103358
+ }
103359
+ case "dateTimeSelect": {
103358
103360
  const dateTimeSelectParams = props.editorParams;
103359
103361
  return /* @__PURE__ */ React80__default.default.createElement(
103360
103362
  labsDatetimeSelect.DateTimeSelectField,
@@ -103367,7 +103369,8 @@ var BulkEditInput = (props) => {
103367
103369
  name: field.input.name
103368
103370
  }
103369
103371
  );
103370
- case "multiSelect":
103372
+ }
103373
+ case "multiSelect": {
103371
103374
  const {
103372
103375
  placeholder: multiSelectPlaceholder,
103373
103376
  ...multiSelectParams
@@ -103389,6 +103392,7 @@ var BulkEditInput = (props) => {
103389
103392
  placeholder: multiSelectPlaceholder ?? placeholderForField
103390
103393
  }
103391
103394
  );
103395
+ }
103392
103396
  case "number":
103393
103397
  return /* @__PURE__ */ React80__default.default.createElement(
103394
103398
  coreReact.Form.Number,
@@ -103402,7 +103406,7 @@ var BulkEditInput = (props) => {
103402
103406
  value: field.input.value ?? ""
103403
103407
  }
103404
103408
  );
103405
- case "person":
103409
+ case "person": {
103406
103410
  const {
103407
103411
  placeholder: personPlaceholder,
103408
103412
  ...personParams
@@ -103425,7 +103429,8 @@ var BulkEditInput = (props) => {
103425
103429
  placeholder: personPlaceholder ?? placeholderForField
103426
103430
  }
103427
103431
  );
103428
- case "peopleMultiSelect":
103432
+ }
103433
+ case "peopleMultiSelect": {
103429
103434
  const {
103430
103435
  placeholder: peopleMultiSelectPlaceholder,
103431
103436
  ...peopleMultiSelectParams
@@ -103448,6 +103453,7 @@ var BulkEditInput = (props) => {
103448
103453
  placeholder: peopleMultiSelectPlaceholder ?? placeholderForField
103449
103454
  }
103450
103455
  );
103456
+ }
103451
103457
  case "radio":
103452
103458
  return /* @__PURE__ */ React80__default.default.createElement(
103453
103459
  RadioList,
@@ -103461,7 +103467,7 @@ var BulkEditInput = (props) => {
103461
103467
  options
103462
103468
  }
103463
103469
  );
103464
- case "select":
103470
+ case "select": {
103465
103471
  const {
103466
103472
  placeholder: selectPlaceholder,
103467
103473
  ...selectParams
@@ -103483,7 +103489,8 @@ var BulkEditInput = (props) => {
103483
103489
  placeholder: selectPlaceholder ?? placeholderForField
103484
103490
  }
103485
103491
  );
103486
- case "company":
103492
+ }
103493
+ case "company": {
103487
103494
  const {
103488
103495
  placeholder: companyPlaceholder,
103489
103496
  ...companyParams
@@ -103506,7 +103513,8 @@ var BulkEditInput = (props) => {
103506
103513
  placeholder: companyPlaceholder ?? placeholderForField
103507
103514
  }
103508
103515
  );
103509
- case "companiesMultiSelect":
103516
+ }
103517
+ case "companiesMultiSelect": {
103510
103518
  const {
103511
103519
  placeholder: companiesMultiSelectPlaceholder,
103512
103520
  ...companiesBulkEditorParams
@@ -103529,6 +103537,7 @@ var BulkEditInput = (props) => {
103529
103537
  placeholder: companiesMultiSelectPlaceholder ?? placeholderForField
103530
103538
  }
103531
103539
  );
103540
+ }
103532
103541
  default:
103533
103542
  if (props.editor && customBulkEditorFields?.[props.editor]) {
103534
103543
  return /* @__PURE__ */ React80__default.default.createElement(
@@ -104363,6 +104372,62 @@ var buildDetailRowsConfig_ = (detailRowConfig, {
104363
104372
  };
104364
104373
  };
104365
104374
 
104375
+ // src/utils/dragging.ts
104376
+ function handleDragStopped({
104377
+ event,
104378
+ internalTableContext,
104379
+ moveColumnEvent: moveColumnEvent2,
104380
+ rowDragMoveEvent: rowDragMoveEvent2,
104381
+ rowDragEndEvent: rowDragEndEvent2,
104382
+ tableProps
104383
+ }) {
104384
+ if (event.target.className.includes("ag-header-cell")) {
104385
+ internalTableContext.onTableConfigChange();
104386
+ }
104387
+ if (moveColumnEvent2) {
104388
+ internalTableContext.analytics?.client.addEvent(
104389
+ "design_system.data_table.column.repositioned",
104390
+ {
104391
+ client: internalTableContext.analytics.clientName,
104392
+ column: moveColumnEvent2.column?.getColId(),
104393
+ position: moveColumnEvent2.toIndex
104394
+ }
104395
+ );
104396
+ if (tableProps.onRowDragEnd) {
104397
+ const allColumns = event.columnApi.getAllGridColumns();
104398
+ const firstVisibleColumnIndex = allColumns.findIndex(
104399
+ (col) => col.isVisible()
104400
+ );
104401
+ if (moveColumnEvent2.toIndex === firstVisibleColumnIndex || moveColumnEvent2.column?.getColDef().rowDrag) {
104402
+ adjustRowDragIcon(event.api, event.columnApi);
104403
+ }
104404
+ }
104405
+ moveColumnEvent2 = void 0;
104406
+ }
104407
+ if (tableProps.onRowDragEnd && rowDragMoveEvent2) {
104408
+ if (rowDragEndEvent2 && rowDragEndEvent2.overIndex >= 0) {
104409
+ tableProps.onRowDragEnd(
104410
+ rowDragEndEvent2.node.data,
104411
+ rowDragEndEvent2.node.rowIndex,
104412
+ rowDragEndEvent2.node,
104413
+ rowDragEndEvent2.overNode
104414
+ );
104415
+ } else if (tableProps.callOnRowDragEndAfterLeave) {
104416
+ tableProps.onRowDragEnd(
104417
+ rowDragMoveEvent2.node.data,
104418
+ rowDragMoveEvent2.node.rowIndex,
104419
+ rowDragMoveEvent2.node,
104420
+ rowDragMoveEvent2.overNode
104421
+ );
104422
+ }
104423
+ if (tableProps.rows && !tableProps.rowDragManaged) {
104424
+ event.api.setRowData(tableProps.rows);
104425
+ }
104426
+ }
104427
+ rowDragMoveEvent2 = void 0;
104428
+ rowDragEndEvent2 = void 0;
104429
+ }
104430
+
104366
104431
  // src/utils/expandRows.ts
104367
104432
  function getStringifiedRoute(node) {
104368
104433
  return node.getRoute()?.map((r) => typeof r === "object" ? JSON.stringify(r) : r);
@@ -109685,49 +109750,18 @@ var Table = (props) => {
109685
109750
  }
109686
109751
  const onDragStopped = React80__default.default.useCallback(
109687
109752
  // eslint-disable-next-line complexity
109688
- (event) => {
109689
- if (event.target.className.includes("ag-header-cell")) {
109690
- internalTableContext.onTableConfigChange();
109691
- }
109692
- if (moveColumnEvent) {
109693
- internalTableContext.analytics?.client.addEvent(
109694
- "design_system.data_table.column.repositioned",
109695
- {
109696
- client: internalTableContext.analytics.clientName,
109697
- column: moveColumnEvent.column?.getColId(),
109698
- position: moveColumnEvent.toIndex
109699
- }
109700
- );
109701
- if (props.onRowDragEnd) {
109702
- const allColumns = event.columnApi.getAllGridColumns();
109703
- const firstVisibleColumnIndex = allColumns.findIndex(
109704
- (col) => col.isVisible()
109705
- );
109706
- if (moveColumnEvent.toIndex === firstVisibleColumnIndex || moveColumnEvent.column?.getColDef().rowDrag) {
109707
- adjustRowDragIcon(event.api, event.columnApi);
109708
- }
109709
- }
109710
- moveColumnEvent = void 0;
109711
- }
109712
- if (props.onRowDragEnd && rowDragMoveEvent) {
109713
- if (rowDragEndEvent && rowDragEndEvent.overIndex >= 0) {
109714
- props.onRowDragEnd(
109715
- rowDragEndEvent.node.data,
109716
- rowDragEndEvent.node.rowIndex,
109717
- rowDragEndEvent.node,
109718
- rowDragEndEvent.overNode
109719
- );
109720
- }
109721
- if (props.rows && !props.rowDragManaged) {
109722
- event.api.setRowData(props.rows);
109723
- }
109724
- }
109725
- rowDragMoveEvent = void 0;
109726
- rowDragEndEvent = void 0;
109727
- },
109753
+ (event) => handleDragStopped({
109754
+ event,
109755
+ internalTableContext,
109756
+ moveColumnEvent,
109757
+ rowDragMoveEvent,
109758
+ rowDragEndEvent,
109759
+ tableProps: props
109760
+ }),
109728
109761
  [
109729
109762
  internalTableContext.onTableConfigChange,
109730
109763
  props.onRowDragEnd,
109764
+ props.callOnRowDragEndAfterLeave,
109731
109765
  props.rowDragManaged,
109732
109766
  props.rows
109733
109767
  ]
@@ -1006,6 +1006,7 @@ interface TableProps<TRow = any, TBottomRow = any> {
1006
1006
  modules: Module[];
1007
1007
  onCellValueChanged?: (params: CellValueChangeParams<any>) => void;
1008
1008
  onRowDragEnd?: (row: TRow, endIndex: number, node: Pick<RowNode, 'childIndex' | 'group'>, overNode?: Pick<RowNode, 'childIndex' | 'group' | 'data'>) => void;
1009
+ callOnRowDragEndAfterLeave?: boolean;
1009
1010
  onRowGroupOpened?: (event: RowGroupToggledEvent<TRow>) => void;
1010
1011
  onRowSelected?: (event: RowSelectedEvent) => void;
1011
1012
  onSelectAll?: (param: SelectAllState.All | SelectAllState.None) => void;
@@ -1006,6 +1006,7 @@ interface TableProps<TRow = any, TBottomRow = any> {
1006
1006
  modules: Module[];
1007
1007
  onCellValueChanged?: (params: CellValueChangeParams<any>) => void;
1008
1008
  onRowDragEnd?: (row: TRow, endIndex: number, node: Pick<RowNode, 'childIndex' | 'group'>, overNode?: Pick<RowNode, 'childIndex' | 'group' | 'data'>) => void;
1009
+ callOnRowDragEndAfterLeave?: boolean;
1009
1010
  onRowGroupOpened?: (event: RowGroupToggledEvent<TRow>) => void;
1010
1011
  onRowSelected?: (event: RowSelectedEvent) => void;
1011
1012
  onSelectAll?: (param: SelectAllState.All | SelectAllState.None) => void;
@@ -103310,7 +103310,7 @@ var BulkEditInput = (props) => {
103310
103310
  name: field.input.name
103311
103311
  }
103312
103312
  );
103313
- case "currency":
103313
+ case "currency": {
103314
103314
  const {
103315
103315
  placeholder: currencyPlaceholder,
103316
103316
  ...currencyParams
@@ -103328,7 +103328,8 @@ var BulkEditInput = (props) => {
103328
103328
  value: field.input.value ?? ""
103329
103329
  }
103330
103330
  );
103331
- case "dateSelect":
103331
+ }
103332
+ case "dateSelect": {
103332
103333
  const dateSelectParams = props.editorParams;
103333
103334
  return /* @__PURE__ */ React80.createElement(
103334
103335
  Form.DateSelect,
@@ -103341,7 +103342,8 @@ var BulkEditInput = (props) => {
103341
103342
  name: field.input.name
103342
103343
  }
103343
103344
  );
103344
- case "dateTimeSelect":
103345
+ }
103346
+ case "dateTimeSelect": {
103345
103347
  const dateTimeSelectParams = props.editorParams;
103346
103348
  return /* @__PURE__ */ React80.createElement(
103347
103349
  DateTimeSelectField,
@@ -103354,7 +103356,8 @@ var BulkEditInput = (props) => {
103354
103356
  name: field.input.name
103355
103357
  }
103356
103358
  );
103357
- case "multiSelect":
103359
+ }
103360
+ case "multiSelect": {
103358
103361
  const {
103359
103362
  placeholder: multiSelectPlaceholder,
103360
103363
  ...multiSelectParams
@@ -103376,6 +103379,7 @@ var BulkEditInput = (props) => {
103376
103379
  placeholder: multiSelectPlaceholder ?? placeholderForField
103377
103380
  }
103378
103381
  );
103382
+ }
103379
103383
  case "number":
103380
103384
  return /* @__PURE__ */ React80.createElement(
103381
103385
  Form.Number,
@@ -103389,7 +103393,7 @@ var BulkEditInput = (props) => {
103389
103393
  value: field.input.value ?? ""
103390
103394
  }
103391
103395
  );
103392
- case "person":
103396
+ case "person": {
103393
103397
  const {
103394
103398
  placeholder: personPlaceholder,
103395
103399
  ...personParams
@@ -103412,7 +103416,8 @@ var BulkEditInput = (props) => {
103412
103416
  placeholder: personPlaceholder ?? placeholderForField
103413
103417
  }
103414
103418
  );
103415
- case "peopleMultiSelect":
103419
+ }
103420
+ case "peopleMultiSelect": {
103416
103421
  const {
103417
103422
  placeholder: peopleMultiSelectPlaceholder,
103418
103423
  ...peopleMultiSelectParams
@@ -103435,6 +103440,7 @@ var BulkEditInput = (props) => {
103435
103440
  placeholder: peopleMultiSelectPlaceholder ?? placeholderForField
103436
103441
  }
103437
103442
  );
103443
+ }
103438
103444
  case "radio":
103439
103445
  return /* @__PURE__ */ React80.createElement(
103440
103446
  RadioList,
@@ -103448,7 +103454,7 @@ var BulkEditInput = (props) => {
103448
103454
  options
103449
103455
  }
103450
103456
  );
103451
- case "select":
103457
+ case "select": {
103452
103458
  const {
103453
103459
  placeholder: selectPlaceholder,
103454
103460
  ...selectParams
@@ -103470,7 +103476,8 @@ var BulkEditInput = (props) => {
103470
103476
  placeholder: selectPlaceholder ?? placeholderForField
103471
103477
  }
103472
103478
  );
103473
- case "company":
103479
+ }
103480
+ case "company": {
103474
103481
  const {
103475
103482
  placeholder: companyPlaceholder,
103476
103483
  ...companyParams
@@ -103493,7 +103500,8 @@ var BulkEditInput = (props) => {
103493
103500
  placeholder: companyPlaceholder ?? placeholderForField
103494
103501
  }
103495
103502
  );
103496
- case "companiesMultiSelect":
103503
+ }
103504
+ case "companiesMultiSelect": {
103497
103505
  const {
103498
103506
  placeholder: companiesMultiSelectPlaceholder,
103499
103507
  ...companiesBulkEditorParams
@@ -103516,6 +103524,7 @@ var BulkEditInput = (props) => {
103516
103524
  placeholder: companiesMultiSelectPlaceholder ?? placeholderForField
103517
103525
  }
103518
103526
  );
103527
+ }
103519
103528
  default:
103520
103529
  if (props.editor && customBulkEditorFields?.[props.editor]) {
103521
103530
  return /* @__PURE__ */ React80.createElement(
@@ -104350,6 +104359,62 @@ var buildDetailRowsConfig_ = (detailRowConfig, {
104350
104359
  };
104351
104360
  };
104352
104361
 
104362
+ // src/utils/dragging.ts
104363
+ function handleDragStopped({
104364
+ event,
104365
+ internalTableContext,
104366
+ moveColumnEvent: moveColumnEvent2,
104367
+ rowDragMoveEvent: rowDragMoveEvent2,
104368
+ rowDragEndEvent: rowDragEndEvent2,
104369
+ tableProps
104370
+ }) {
104371
+ if (event.target.className.includes("ag-header-cell")) {
104372
+ internalTableContext.onTableConfigChange();
104373
+ }
104374
+ if (moveColumnEvent2) {
104375
+ internalTableContext.analytics?.client.addEvent(
104376
+ "design_system.data_table.column.repositioned",
104377
+ {
104378
+ client: internalTableContext.analytics.clientName,
104379
+ column: moveColumnEvent2.column?.getColId(),
104380
+ position: moveColumnEvent2.toIndex
104381
+ }
104382
+ );
104383
+ if (tableProps.onRowDragEnd) {
104384
+ const allColumns = event.columnApi.getAllGridColumns();
104385
+ const firstVisibleColumnIndex = allColumns.findIndex(
104386
+ (col) => col.isVisible()
104387
+ );
104388
+ if (moveColumnEvent2.toIndex === firstVisibleColumnIndex || moveColumnEvent2.column?.getColDef().rowDrag) {
104389
+ adjustRowDragIcon(event.api, event.columnApi);
104390
+ }
104391
+ }
104392
+ moveColumnEvent2 = void 0;
104393
+ }
104394
+ if (tableProps.onRowDragEnd && rowDragMoveEvent2) {
104395
+ if (rowDragEndEvent2 && rowDragEndEvent2.overIndex >= 0) {
104396
+ tableProps.onRowDragEnd(
104397
+ rowDragEndEvent2.node.data,
104398
+ rowDragEndEvent2.node.rowIndex,
104399
+ rowDragEndEvent2.node,
104400
+ rowDragEndEvent2.overNode
104401
+ );
104402
+ } else if (tableProps.callOnRowDragEndAfterLeave) {
104403
+ tableProps.onRowDragEnd(
104404
+ rowDragMoveEvent2.node.data,
104405
+ rowDragMoveEvent2.node.rowIndex,
104406
+ rowDragMoveEvent2.node,
104407
+ rowDragMoveEvent2.overNode
104408
+ );
104409
+ }
104410
+ if (tableProps.rows && !tableProps.rowDragManaged) {
104411
+ event.api.setRowData(tableProps.rows);
104412
+ }
104413
+ }
104414
+ rowDragMoveEvent2 = void 0;
104415
+ rowDragEndEvent2 = void 0;
104416
+ }
104417
+
104353
104418
  // src/utils/expandRows.ts
104354
104419
  function getStringifiedRoute(node) {
104355
104420
  return node.getRoute()?.map((r) => typeof r === "object" ? JSON.stringify(r) : r);
@@ -109672,49 +109737,18 @@ var Table = (props) => {
109672
109737
  }
109673
109738
  const onDragStopped = React80.useCallback(
109674
109739
  // eslint-disable-next-line complexity
109675
- (event) => {
109676
- if (event.target.className.includes("ag-header-cell")) {
109677
- internalTableContext.onTableConfigChange();
109678
- }
109679
- if (moveColumnEvent) {
109680
- internalTableContext.analytics?.client.addEvent(
109681
- "design_system.data_table.column.repositioned",
109682
- {
109683
- client: internalTableContext.analytics.clientName,
109684
- column: moveColumnEvent.column?.getColId(),
109685
- position: moveColumnEvent.toIndex
109686
- }
109687
- );
109688
- if (props.onRowDragEnd) {
109689
- const allColumns = event.columnApi.getAllGridColumns();
109690
- const firstVisibleColumnIndex = allColumns.findIndex(
109691
- (col) => col.isVisible()
109692
- );
109693
- if (moveColumnEvent.toIndex === firstVisibleColumnIndex || moveColumnEvent.column?.getColDef().rowDrag) {
109694
- adjustRowDragIcon(event.api, event.columnApi);
109695
- }
109696
- }
109697
- moveColumnEvent = void 0;
109698
- }
109699
- if (props.onRowDragEnd && rowDragMoveEvent) {
109700
- if (rowDragEndEvent && rowDragEndEvent.overIndex >= 0) {
109701
- props.onRowDragEnd(
109702
- rowDragEndEvent.node.data,
109703
- rowDragEndEvent.node.rowIndex,
109704
- rowDragEndEvent.node,
109705
- rowDragEndEvent.overNode
109706
- );
109707
- }
109708
- if (props.rows && !props.rowDragManaged) {
109709
- event.api.setRowData(props.rows);
109710
- }
109711
- }
109712
- rowDragMoveEvent = void 0;
109713
- rowDragEndEvent = void 0;
109714
- },
109740
+ (event) => handleDragStopped({
109741
+ event,
109742
+ internalTableContext,
109743
+ moveColumnEvent,
109744
+ rowDragMoveEvent,
109745
+ rowDragEndEvent,
109746
+ tableProps: props
109747
+ }),
109715
109748
  [
109716
109749
  internalTableContext.onTableConfigChange,
109717
109750
  props.onRowDragEnd,
109751
+ props.callOnRowDragEndAfterLeave,
109718
109752
  props.rowDragManaged,
109719
109753
  props.rows
109720
109754
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@procore/data-table",
3
- "version": "14.41.0",
3
+ "version": "14.43.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",
@@ -75,7 +75,7 @@
75
75
  "dependencies": {
76
76
  "@procore/cdn-translations": "0.1.13",
77
77
  "@procore/error-pages": "^0.2.3",
78
- "@procore/labs-datetime-select": "^0.2.0",
78
+ "@procore/labs-datetime-select": "^0.2.2",
79
79
  "@procore/labs-group-by-select": "4.1.0",
80
80
  "@procore/toast-alert": "^5.1.2",
81
81
  "@procore/web-sdk-storage": "^0.1.0",
@@ -108,7 +108,7 @@
108
108
  "@procore/core-css": "10.17.0",
109
109
  "@procore/core-icons": "^12.12.0",
110
110
  "@procore/core-prettier": "10.2.0",
111
- "@procore/core-react": "^12.35.0",
111
+ "@procore/core-react": "^12.37.0",
112
112
  "@procore/eslint-config": "10.0.0",
113
113
  "@procore/globalization-toolkit": "3.1.0",
114
114
  "@procore/labs-financials-utils": "4.3.1",
@@ -132,7 +132,7 @@
132
132
  "@typescript-eslint/eslint-plugin": "5.48.2",
133
133
  "@typescript-eslint/parser": "5.48.1",
134
134
  "css-loader": "6.7.1",
135
- "cypress": "^13.15.1",
135
+ "cypress": "^13.17.0",
136
136
  "cypress-axe": "1.5.0",
137
137
  "cypress-multi-reporters": "^2.0.5",
138
138
  "cypress-real-events": "^1.11.0",