@procore/saved-views 1.0.1-estimatingFork.5 → 1.0.1-estimatingFork.6.1

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.
@@ -110,7 +110,7 @@ var require_react_is_production_min = __commonJS({
110
110
  var E2 = n2;
111
111
  var F2 = c2;
112
112
  var G2 = f2;
113
- var H3 = e2;
113
+ var H2 = e2;
114
114
  var I = l2;
115
115
  exports.ContextConsumer = h;
116
116
  exports.ContextProvider = z2;
@@ -121,7 +121,7 @@ var require_react_is_production_min = __commonJS({
121
121
  exports.Memo = E2;
122
122
  exports.Portal = F2;
123
123
  exports.Profiler = G2;
124
- exports.StrictMode = H3;
124
+ exports.StrictMode = H2;
125
125
  exports.Suspense = I;
126
126
  exports.isAsyncMode = function() {
127
127
  return false;
@@ -7868,7 +7868,7 @@ function __rest(s2, e2) {
7868
7868
  return t2;
7869
7869
  }
7870
7870
 
7871
- // ../../node_modules/@procore/core-icons/dist/Icon.js
7871
+ // node_modules/@procore/core-icons/dist/Icon.js
7872
7872
  import * as React from "react";
7873
7873
  function getSize(size) {
7874
7874
  if (size === "sm") {
@@ -7887,7 +7887,7 @@ function Icon(_a) {
7887
7887
  return React.isValidElement(children) ? React.cloneElement(children, __assign(__assign({ "aria-hidden": true, "data-qa": "ci-".concat(props.name) }, props), { width: getSize(props.size), height: getSize(props.size), focusable: false, style: __assign(__assign({}, props.style), { flex: "0 0 auto" }) })) : null;
7888
7888
  }
7889
7889
 
7890
- // ../../node_modules/@procore/core-icons/dist/icons/Building.js
7890
+ // node_modules/@procore/core-icons/dist/icons/Building.js
7891
7891
  import * as React2 from "react";
7892
7892
  var Building = React2.forwardRef(function Building2(props, ref) {
7893
7893
  return React2.createElement(
@@ -7903,7 +7903,7 @@ var Building = React2.forwardRef(function Building2(props, ref) {
7903
7903
  Building.displayName = "Building";
7904
7904
  var Building_default = Building;
7905
7905
 
7906
- // ../../node_modules/@procore/core-icons/dist/icons/ChevronDown.js
7906
+ // node_modules/@procore/core-icons/dist/icons/ChevronDown.js
7907
7907
  import * as React3 from "react";
7908
7908
  var ChevronDown = React3.forwardRef(function ChevronDown2(props, ref) {
7909
7909
  return React3.createElement(
@@ -7919,7 +7919,7 @@ var ChevronDown = React3.forwardRef(function ChevronDown2(props, ref) {
7919
7919
  ChevronDown.displayName = "ChevronDown";
7920
7920
  var ChevronDown_default = ChevronDown;
7921
7921
 
7922
- // ../../node_modules/@procore/core-icons/dist/icons/ChevronRight.js
7922
+ // node_modules/@procore/core-icons/dist/icons/ChevronRight.js
7923
7923
  import * as React4 from "react";
7924
7924
  var ChevronRight = React4.forwardRef(function ChevronRight2(props, ref) {
7925
7925
  return React4.createElement(
@@ -7935,7 +7935,7 @@ var ChevronRight = React4.forwardRef(function ChevronRight2(props, ref) {
7935
7935
  ChevronRight.displayName = "ChevronRight";
7936
7936
  var ChevronRight_default = ChevronRight;
7937
7937
 
7938
- // ../../node_modules/@procore/core-icons/dist/icons/Clear.js
7938
+ // node_modules/@procore/core-icons/dist/icons/Clear.js
7939
7939
  import * as React5 from "react";
7940
7940
  var Clear = React5.forwardRef(function Clear2(props, ref) {
7941
7941
  return React5.createElement(
@@ -7951,7 +7951,7 @@ var Clear = React5.forwardRef(function Clear2(props, ref) {
7951
7951
  Clear.displayName = "Clear";
7952
7952
  var Clear_default = Clear;
7953
7953
 
7954
- // ../../node_modules/@procore/core-icons/dist/icons/Excavator.js
7954
+ // node_modules/@procore/core-icons/dist/icons/Excavator.js
7955
7955
  import * as React6 from "react";
7956
7956
  var Excavator = React6.forwardRef(function Excavator2(props, ref) {
7957
7957
  return React6.createElement(
@@ -7968,7 +7968,7 @@ var Excavator = React6.forwardRef(function Excavator2(props, ref) {
7968
7968
  Excavator.displayName = "Excavator";
7969
7969
  var Excavator_default = Excavator;
7970
7970
 
7971
- // ../../node_modules/@procore/core-icons/dist/icons/ExpandSidebar.js
7971
+ // node_modules/@procore/core-icons/dist/icons/ExpandSidebar.js
7972
7972
  import * as React7 from "react";
7973
7973
  var ExpandSidebar = React7.forwardRef(function ExpandSidebar2(props, ref) {
7974
7974
  return React7.createElement(
@@ -7986,7 +7986,7 @@ var ExpandSidebar = React7.forwardRef(function ExpandSidebar2(props, ref) {
7986
7986
  ExpandSidebar.displayName = "ExpandSidebar";
7987
7987
  var ExpandSidebar_default = ExpandSidebar;
7988
7988
 
7989
- // ../../node_modules/@procore/core-icons/dist/icons/Help.js
7989
+ // node_modules/@procore/core-icons/dist/icons/Help.js
7990
7990
  import * as React8 from "react";
7991
7991
  var Help = React8.forwardRef(function Help2(props, ref) {
7992
7992
  return React8.createElement(
@@ -8002,7 +8002,7 @@ var Help = React8.forwardRef(function Help2(props, ref) {
8002
8002
  Help.displayName = "Help";
8003
8003
  var Help_default = Help;
8004
8004
 
8005
- // ../../node_modules/@procore/core-icons/dist/icons/Link.js
8005
+ // node_modules/@procore/core-icons/dist/icons/Link.js
8006
8006
  import * as React9 from "react";
8007
8007
  var Link = React9.forwardRef(function Link2(props, ref) {
8008
8008
  return React9.createElement(
@@ -8019,7 +8019,7 @@ var Link = React9.forwardRef(function Link2(props, ref) {
8019
8019
  Link.displayName = "Link";
8020
8020
  var Link_default = Link;
8021
8021
 
8022
- // ../../node_modules/@procore/core-icons/dist/icons/Person.js
8022
+ // node_modules/@procore/core-icons/dist/icons/Person.js
8023
8023
  import * as React10 from "react";
8024
8024
  var Person = React10.forwardRef(function Person2(props, ref) {
8025
8025
  return React10.createElement(
@@ -8035,7 +8035,7 @@ var Person = React10.forwardRef(function Person2(props, ref) {
8035
8035
  Person.displayName = "Person";
8036
8036
  var Person_default = Person;
8037
8037
 
8038
- // ../../node_modules/@procore/core-icons/dist/icons/Plus.js
8038
+ // node_modules/@procore/core-icons/dist/icons/Plus.js
8039
8039
  import * as React11 from "react";
8040
8040
  var Plus = React11.forwardRef(function Plus2(props, ref) {
8041
8041
  return React11.createElement(
@@ -8148,7 +8148,7 @@ function stylis_min(W2) {
8148
8148
  }
8149
8149
  k2 = M2(c2, r2, k2, g2, a2 + 1);
8150
8150
  t2 = k2.length;
8151
- 0 < A2 && (r2 = X2(O2, f2, I), C2 = H3(3, k2, r2, c2, D2, z2, t2, g2, a2, h), f2 = r2.join(""), void 0 !== C2 && 0 === (t2 = (k2 = C2.trim()).length) && (g2 = 0, k2 = ""));
8151
+ 0 < A2 && (r2 = X2(O2, f2, I), C2 = H2(3, k2, r2, c2, D2, z2, t2, g2, a2, h), f2 = r2.join(""), void 0 !== C2 && 0 === (t2 = (k2 = C2.trim()).length) && (g2 = 0, k2 = ""));
8152
8152
  if (0 < t2)
8153
8153
  switch (g2) {
8154
8154
  case 115:
@@ -8181,7 +8181,7 @@ function stylis_min(W2) {
8181
8181
  case 59:
8182
8182
  f2 = (0 < r2 ? f2.replace(N, "") : f2).trim();
8183
8183
  if (1 < (t2 = f2.length))
8184
- switch (0 === u2 && (q2 = f2.charCodeAt(0), 45 === q2 || 96 < q2 && 123 > q2) && (t2 = (f2 = f2.replace(" ", ":")).length), 0 < A2 && void 0 !== (C2 = H3(1, f2, c2, d, D2, z2, p.length, h, a2, h)) && 0 === (t2 = (f2 = C2.trim()).length) && (f2 = "\0\0"), q2 = f2.charCodeAt(0), g2 = f2.charCodeAt(1), q2) {
8184
+ switch (0 === u2 && (q2 = f2.charCodeAt(0), 45 === q2 || 96 < q2 && 123 > q2) && (t2 = (f2 = f2.replace(" ", ":")).length), 0 < A2 && void 0 !== (C2 = H2(1, f2, c2, d, D2, z2, p.length, h, a2, h)) && 0 === (t2 = (f2 = C2.trim()).length) && (f2 = "\0\0"), q2 = f2.charCodeAt(0), g2 = f2.charCodeAt(1), q2) {
8185
8185
  case 0:
8186
8186
  break;
8187
8187
  case 64:
@@ -8201,7 +8201,7 @@ function stylis_min(W2) {
8201
8201
  case 13:
8202
8202
  case 10:
8203
8203
  47 === b2 ? b2 = 0 : 0 === 1 + q2 && 107 !== h && 0 < f2.length && (r2 = 1, f2 += "\0");
8204
- 0 < A2 * Y2 && H3(0, f2, c2, d, D2, z2, p.length, h, a2, h);
8204
+ 0 < A2 * Y2 && H2(0, f2, c2, d, D2, z2, p.length, h, a2, h);
8205
8205
  z2 = 1;
8206
8206
  D2++;
8207
8207
  break;
@@ -8310,7 +8310,7 @@ function stylis_min(W2) {
8310
8310
  t2 = p.length;
8311
8311
  if (0 < t2) {
8312
8312
  r2 = c2;
8313
- if (0 < A2 && (C2 = H3(2, p, r2, d, D2, z2, t2, h, a2, h), void 0 !== C2 && 0 === (p = C2).length))
8313
+ if (0 < A2 && (C2 = H2(2, p, r2, d, D2, z2, t2, h, a2, h), void 0 !== C2 && 0 === (p = C2).length))
8314
8314
  return G3 + p + F3;
8315
8315
  p = r2.join(",") + "{" + p + "}";
8316
8316
  if (0 !== w2 * E2) {
@@ -8487,7 +8487,7 @@ function stylis_min(W2) {
8487
8487
  var e2 = P4(c2, c2.charCodeAt(0), c2.charCodeAt(1), c2.charCodeAt(2));
8488
8488
  return e2 !== c2 + ";" ? e2.replace(oa, " or ($1)").substring(4) : "(" + c2 + ")";
8489
8489
  }
8490
- function H3(d, c2, e2, h, a2, m2, b2, v2, n2, q2) {
8490
+ function H2(d, c2, e2, h, a2, m2, b2, v2, n2, q2) {
8491
8491
  for (var g2 = 0, x2 = c2, w3; g2 < A2; ++g2) {
8492
8492
  switch (w3 = S2[g2].call(B2, d, x2, e2, h, a2, m2, b2, v2, n2, q2)) {
8493
8493
  case void 0:
@@ -8531,11 +8531,11 @@ function stylis_min(W2) {
8531
8531
  V2 = e2;
8532
8532
  e2 = [V2];
8533
8533
  if (0 < A2) {
8534
- var h = H3(-1, c2, e2, e2, D2, z2, 0, 0, 0, 0);
8534
+ var h = H2(-1, c2, e2, e2, D2, z2, 0, 0, 0, 0);
8535
8535
  void 0 !== h && "string" === typeof h && (c2 = h);
8536
8536
  }
8537
8537
  var a2 = M2(O2, e2, c2, 0, 0);
8538
- 0 < A2 && (h = H3(-2, a2, e2, e2, D2, z2, a2.length, 0, 0, 0), void 0 !== h && (a2 = h));
8538
+ 0 < A2 && (h = H2(-2, a2, e2, e2, D2, z2, a2.length, 0, 0, 0), void 0 !== h && (a2 = h));
8539
8539
  V2 = "";
8540
8540
  E2 = 0;
8541
8541
  z2 = D2 = 1;
@@ -9343,8 +9343,8 @@ var useSavedViewsPanel = (domain, tableName) => {
9343
9343
  setIsOpen(!isOpen);
9344
9344
  localStorage.setItem(key(domain, tableName), JSON.stringify(!isOpen));
9345
9345
  };
9346
- const Button7 = () => /* @__PURE__ */ React14.createElement(SavedViewsButton, { handleClick, isOpen });
9347
- return { isOpen, SavedViewsButton: Button7 };
9346
+ const Button8 = () => /* @__PURE__ */ React14.createElement(SavedViewsButton, { handleClick, isOpen });
9347
+ return { isOpen, SavedViewsButton: Button8 };
9348
9348
  };
9349
9349
  var useSavedViewsPanel_default = useSavedViewsPanel;
9350
9350
 
@@ -9426,6 +9426,17 @@ var SavedViewCollectionMenuItem = (props) => {
9426
9426
  label: i18n.t("savedViews.actions.delete")
9427
9427
  }
9428
9428
  ];
9429
+ const preventEventBubbleToNotTriggerViewSelectEvent = React15.useCallback(
9430
+ (e2) => {
9431
+ e2.stopPropagation();
9432
+ },
9433
+ []
9434
+ );
9435
+ const hasUpdateButton = props.item.view_level !== "default" && props.canUpdate;
9436
+ const hasCopyShareLinkButton = props.enableSharingViews !== false && props.item.view_level !== "default" && props.selected && !props.canUpdate && props.item.id !== "temporary";
9437
+ const hasClearTemporaryButton = props.item.id === "temporary";
9438
+ const hasOverflowMenu = props.item.view_level !== "default" && props.canEditOrDelete;
9439
+ const hasActions = hasUpdateButton || hasCopyShareLinkButton || hasClearTemporaryButton || hasOverflowMenu;
9429
9440
  return /* @__PURE__ */ React15.createElement(
9430
9441
  Container2,
9431
9442
  {
@@ -9435,7 +9446,8 @@ var SavedViewCollectionMenuItem = (props) => {
9435
9446
  "aria-label": i18n.t("savedViews.ariaLabels.menuItem", {
9436
9447
  name: props.item.name
9437
9448
  }),
9438
- "data-testid": "saved-view-collection-menu-item"
9449
+ "data-testid": "saved-view-collection-menu-item",
9450
+ onKeyDown: preventEventBubbleToNotTriggerViewSelectEvent
9439
9451
  },
9440
9452
  /* @__PURE__ */ React15.createElement(
9441
9453
  "span",
@@ -9445,7 +9457,7 @@ var SavedViewCollectionMenuItem = (props) => {
9445
9457
  },
9446
9458
  props.item.name
9447
9459
  ),
9448
- /* @__PURE__ */ React15.createElement(RowActionsBox, null, /* @__PURE__ */ React15.createElement(Box, { justifyContent: "space-between" }, props.item.view_level !== "default" && props.canUpdate && /* @__PURE__ */ React15.createElement("div", null, /* @__PURE__ */ React15.createElement(
9460
+ hasActions && /* @__PURE__ */ React15.createElement(RowActionsBox, null, /* @__PURE__ */ React15.createElement(Box, { justifyContent: "space-between" }, hasUpdateButton && /* @__PURE__ */ React15.createElement(
9449
9461
  Button2,
9450
9462
  {
9451
9463
  onClick: updateItem,
@@ -9456,7 +9468,7 @@ var SavedViewCollectionMenuItem = (props) => {
9456
9468
  loading: props.isUpdateProcessing
9457
9469
  },
9458
9470
  i18n.t("savedViews.actions.update")
9459
- )), (props.enableSharingViews ?? true) && props.item.view_level !== "default" && props.selected && !props.canUpdate && props.item.id !== "temporary" && /* @__PURE__ */ React15.createElement("div", null, /* @__PURE__ */ React15.createElement(
9471
+ ), hasCopyShareLinkButton && /* @__PURE__ */ React15.createElement(
9460
9472
  Button2,
9461
9473
  {
9462
9474
  onClick: copyShareLink,
@@ -9466,7 +9478,7 @@ var SavedViewCollectionMenuItem = (props) => {
9466
9478
  "data-testid": "copy-share-link-button"
9467
9479
  },
9468
9480
  /* @__PURE__ */ React15.createElement(IconWrapper, null, /* @__PURE__ */ React15.createElement(Link_default, { size: "sm" }))
9469
- )), props.item.id === "temporary" && /* @__PURE__ */ React15.createElement("div", null, /* @__PURE__ */ React15.createElement(
9481
+ ), hasClearTemporaryButton && /* @__PURE__ */ React15.createElement(
9470
9482
  Button2,
9471
9483
  {
9472
9484
  onClick: (e2) => {
@@ -9481,7 +9493,7 @@ var SavedViewCollectionMenuItem = (props) => {
9481
9493
  "data-testid": "clear-temporary-view-button"
9482
9494
  },
9483
9495
  /* @__PURE__ */ React15.createElement(IconWrapper, null, /* @__PURE__ */ React15.createElement(Clear_default, { size: "sm" }))
9484
- ))), /* @__PURE__ */ React15.createElement(Box, null, props.item.view_level !== "default" && props.canEditOrDelete && /* @__PURE__ */ React15.createElement("div", { onClick: (e2) => e2.stopPropagation() }, /* @__PURE__ */ React15.createElement(
9496
+ )), /* @__PURE__ */ React15.createElement(Box, null, hasOverflowMenu && /* @__PURE__ */ React15.createElement(
9485
9497
  DropdownFlyout,
9486
9498
  {
9487
9499
  "data-testid": "saved-view-overflow-button",
@@ -9492,7 +9504,7 @@ var SavedViewCollectionMenuItem = (props) => {
9492
9504
  variant: "tertiary",
9493
9505
  disabled: props.isUpdateProcessing
9494
9506
  }
9495
- ))))
9507
+ )))
9496
9508
  );
9497
9509
  };
9498
9510
 
@@ -9526,7 +9538,7 @@ var useScrollToRef = (dependency) => {
9526
9538
  };
9527
9539
 
9528
9540
  // src/components/panels/PanelContent.tsx
9529
- import { Flex as Flex3, useI18nContext as useI18nContext4 } from "@procore/core-react";
9541
+ import { Flex as Flex2, MenuImperative as MenuImperative2, useI18nContext as useI18nContext4 } from "@procore/core-react";
9530
9542
  import { useToastAlertContext as useToastAlertContext2 } from "@procore/toast-alert";
9531
9543
  import React17 from "react";
9532
9544
 
@@ -9534,7 +9546,7 @@ import React17 from "react";
9534
9546
  import {
9535
9547
  colors,
9536
9548
  DetailPage,
9537
- UNSAFE_Menu as MenuImperative,
9549
+ MenuImperative,
9538
9550
  spacing
9539
9551
  } from "@procore/core-react";
9540
9552
  var Row = styled_components_esm_default(MenuImperative.Item)`
@@ -9798,9 +9810,9 @@ var useGroups = (isProjectLevelTool) => {
9798
9810
 
9799
9811
  // src/components/panels/ViewLevelHeader.tsx
9800
9812
  import {
9813
+ Box as Box2,
9814
+ Button as Button3,
9801
9815
  colors as colors2,
9802
- Flex as Flex2,
9803
- spacing as spacing2,
9804
9816
  Typography,
9805
9817
  useI18nContext as useI18nContext3
9806
9818
  } from "@procore/core-react";
@@ -9815,31 +9827,40 @@ var groupIcon = (group) => {
9815
9827
  return /* @__PURE__ */ React16.createElement(Building_default, null);
9816
9828
  }
9817
9829
  };
9818
- var Header = styled_components_esm_default(Flex2)`
9819
- width: 100%;
9830
+ var StyledButton2 = styled_components_esm_default(Button3)`
9820
9831
  &:hover {
9821
9832
  background-color: ${colors2.gray98};
9822
9833
  }
9823
9834
  `;
9824
9835
  var ViewLevelHeader = ({ expanded, toggleGroup, group }) => {
9825
9836
  const I18n = useI18nContext3();
9826
- return /* @__PURE__ */ React16.createElement(
9827
- Header,
9837
+ return /* @__PURE__ */ React16.createElement(Box2, { style: { width: "100%" } }, /* @__PURE__ */ React16.createElement(
9838
+ StyledButton2,
9828
9839
  {
9829
- alignItems: "center",
9830
- padding: `${spacing2.sm}px`,
9831
- gap: `${spacing2.sm}px`,
9832
- style: { cursor: "pointer" },
9833
- onClick: () => toggleGroup(group)
9840
+ block: true,
9841
+ style: {
9842
+ justifyContent: "start",
9843
+ height: "40px"
9844
+ },
9845
+ variant: "tertiary",
9846
+ size: "sm",
9847
+ onClick: () => toggleGroup(group),
9848
+ "aria-controls": `saved-views-collections-${group}`,
9849
+ "aria-expanded": expanded,
9850
+ icon: expanded ? /* @__PURE__ */ React16.createElement(ChevronDown_default, { size: "sm" }) : /* @__PURE__ */ React16.createElement(ChevronRight_default, { size: "sm" })
9834
9851
  },
9835
- expanded ? /* @__PURE__ */ React16.createElement(ChevronDown_default, { size: "sm" }) : /* @__PURE__ */ React16.createElement(ChevronRight_default, { size: "sm" }),
9836
9852
  groupIcon(group),
9837
9853
  /* @__PURE__ */ React16.createElement(Typography, { weight: "semibold" }, I18n.t(`savedViews.viewLevel.${group}`))
9838
- );
9854
+ ));
9839
9855
  };
9840
9856
  var ViewLevelHeader_default = ViewLevelHeader;
9841
9857
 
9842
9858
  // src/components/panels/PanelContent.tsx
9859
+ var StyledMenuImperative = styled_components_esm_default(MenuImperative2)`
9860
+ div[role='listbox'] {
9861
+ padding: 0;
9862
+ }
9863
+ `;
9843
9864
  var PanelContent = (props) => {
9844
9865
  const { queryInput, selectedSavedView, tableConfig } = props;
9845
9866
  const { showToast } = useToastAlertContext2();
@@ -9882,42 +9903,54 @@ var PanelContent = (props) => {
9882
9903
  }
9883
9904
  });
9884
9905
  };
9885
- return /* @__PURE__ */ React17.createElement(Panel2, { "data-testid": "inner-panel" }, /* @__PURE__ */ React17.createElement(Flex3, { direction: "column", style: { height: "100%", width: "100%" } }, temporaryView && /* @__PURE__ */ React17.createElement(
9886
- Row,
9906
+ return /* @__PURE__ */ React17.createElement(Panel2, { "data-testid": "inner-panel" }, /* @__PURE__ */ React17.createElement(Flex2, { direction: "column", style: { height: "100%", width: "100%" } }, (temporaryView || presetViews) && /* @__PURE__ */ React17.createElement(
9907
+ StyledMenuImperative,
9887
9908
  {
9888
- selected: isTemporarySelected,
9889
- onClick: () => props.onSelect({ item: temporaryView }),
9890
- ref: isTemporarySelected ? selectedRowRef : null
9909
+ role: "listbox",
9910
+ onSelect: (selection) => {
9911
+ if ((selectedSavedView == null ? void 0 : selectedSavedView.id) !== selection.item.id) {
9912
+ props.onSelect({ item: selection.item });
9913
+ }
9914
+ }
9891
9915
  },
9892
- /* @__PURE__ */ React17.createElement(
9893
- SavedViewCollectionMenuItem,
9916
+ /* @__PURE__ */ React17.createElement(MenuImperative2.Options, null, temporaryView && /* @__PURE__ */ React17.createElement(
9917
+ Row,
9894
9918
  {
9919
+ key: temporaryView.id,
9895
9920
  item: temporaryView,
9896
9921
  selected: isTemporarySelected,
9897
- onClearTemporary: props.onClearTemporary,
9898
- enableSharingViews: false
9899
- }
9900
- )
9901
- ), presetViews.map((presetView) => {
9902
- const isSelected = (selectedSavedView == null ? void 0 : selectedSavedView.id) === presetView.id;
9903
- return /* @__PURE__ */ React17.createElement(
9904
- Row,
9905
- {
9906
- key: presetView.id,
9907
- selected: isSelected,
9908
- onClick: () => props.onSelect({ item: presetView }),
9909
- ref: isSelected ? selectedRowRef : null
9922
+ ref: isTemporarySelected ? selectedRowRef : null
9910
9923
  },
9911
9924
  /* @__PURE__ */ React17.createElement(
9912
9925
  SavedViewCollectionMenuItem,
9913
9926
  {
9914
- item: presetView,
9915
- selected: isSelected,
9916
- enableSharingViews: false
9927
+ item: temporaryView,
9928
+ selected: isTemporarySelected,
9929
+ onClearTemporary: props.onClearTemporary,
9930
+ enableSharingViews: props.enableSharingViews
9917
9931
  }
9918
9932
  )
9919
- );
9920
- }), viewLevels.map((level) => {
9933
+ ), presetViews.map((presetView) => {
9934
+ const isSelected = (selectedSavedView == null ? void 0 : selectedSavedView.id) === presetView.id;
9935
+ return /* @__PURE__ */ React17.createElement(
9936
+ Row,
9937
+ {
9938
+ key: presetView.id,
9939
+ item: presetView,
9940
+ selected: isSelected,
9941
+ ref: isSelected ? selectedRowRef : null
9942
+ },
9943
+ /* @__PURE__ */ React17.createElement(
9944
+ SavedViewCollectionMenuItem,
9945
+ {
9946
+ item: presetView,
9947
+ selected: isSelected,
9948
+ enableSharingViews: props.enableSharingViews
9949
+ }
9950
+ )
9951
+ );
9952
+ }))
9953
+ ), viewLevels.map((level) => {
9921
9954
  const isExpanded = groups[level];
9922
9955
  const views = isExpanded && savedViews ? savedViews.filter(
9923
9956
  (view) => view.view_level === level && view.id !== "temporary"
@@ -9929,63 +9962,75 @@ var PanelContent = (props) => {
9929
9962
  toggleGroup,
9930
9963
  expanded: isExpanded
9931
9964
  }
9932
- ), views.map((view) => {
9933
- const isSelected = (selectedSavedView == null ? void 0 : selectedSavedView.id) === view.id;
9934
- const canUpdate = isSelected && hasPermissionForViewLevel(view.view_level, permissions) && !isEqual(
9935
- view.table_config,
9936
- tableConfig,
9937
- props.defaultView.table_config,
9938
- props.provider
9939
- );
9940
- const canEditOrDelete = isSelected && hasPermissionForViewLevel(view.view_level, permissions);
9941
- return /* @__PURE__ */ React17.createElement(
9942
- Row,
9943
- {
9944
- key: view.id,
9945
- item: view,
9946
- selected: isSelected,
9947
- onClick: () => {
9948
- props.onSelect({ item: view });
9949
- },
9950
- ref: isSelected ? selectedRowRef : null
9951
- },
9952
- /* @__PURE__ */ React17.createElement(
9953
- SavedViewCollectionMenuItem,
9965
+ ), isExpanded && views.length > 0 && /* @__PURE__ */ React17.createElement(
9966
+ StyledMenuImperative,
9967
+ {
9968
+ id: `saved-views-collections-${level}`,
9969
+ role: "listbox",
9970
+ onSelect: (selection) => {
9971
+ if ((selectedSavedView == null ? void 0 : selectedSavedView.id) !== selection.item.id) {
9972
+ props.onSelect({ item: selection.item });
9973
+ }
9974
+ }
9975
+ },
9976
+ /* @__PURE__ */ React17.createElement(MenuImperative2.Options, null, views.map((view) => {
9977
+ const isSelected = (selectedSavedView == null ? void 0 : selectedSavedView.id) === view.id;
9978
+ const canUpdate = isSelected && hasPermissionForViewLevel(
9979
+ view.view_level,
9980
+ permissions
9981
+ ) && !isEqual(
9982
+ view.table_config,
9983
+ tableConfig,
9984
+ props.defaultView.table_config,
9985
+ props.provider
9986
+ );
9987
+ const canEditOrDelete = isSelected && hasPermissionForViewLevel(view.view_level, permissions);
9988
+ return /* @__PURE__ */ React17.createElement(
9989
+ Row,
9954
9990
  {
9955
- item: view,
9956
9991
  key: view.id,
9992
+ item: view,
9957
9993
  selected: isSelected,
9958
- canUpdate,
9959
- canEditOrDelete,
9960
- onUpdate: (data) => onUpdate(data),
9961
- isUpdateProcessing: isUpdateLoading,
9962
- onEdit: () => props.openModal("update" /* UPDATE */),
9963
- onDelete: props.onDelete,
9964
- permissions,
9965
- enableSharingViews: false
9966
- }
9967
- )
9968
- );
9969
- }));
9994
+ ref: isSelected ? selectedRowRef : null
9995
+ },
9996
+ /* @__PURE__ */ React17.createElement(
9997
+ SavedViewCollectionMenuItem,
9998
+ {
9999
+ item: view,
10000
+ key: view.id,
10001
+ selected: isSelected,
10002
+ canUpdate,
10003
+ canEditOrDelete,
10004
+ onUpdate: (data) => onUpdate(data),
10005
+ isUpdateProcessing: isUpdateLoading,
10006
+ onEdit: () => props.openModal("update" /* UPDATE */),
10007
+ onDelete: props.onDelete,
10008
+ permissions,
10009
+ enableSharingViews: props.enableSharingViews
10010
+ }
10011
+ )
10012
+ );
10013
+ }))
10014
+ ));
9970
10015
  })));
9971
10016
  };
9972
10017
 
9973
10018
  // src/components/saved-views/SavedViews.tsx
9974
10019
  import {
9975
- Box as Box2,
9976
- Button as Button6,
9977
- Flex as Flex6,
10020
+ Box as Box3,
10021
+ Button as Button7,
10022
+ Flex as Flex5,
9978
10023
  Panel as Panel3,
9979
10024
  Tooltip,
9980
- useI18nContext as useI18nContext11
10025
+ useI18nContext as useI18nContext12
9981
10026
  } from "@procore/core-react";
9982
- import React22, { useState as useState4, useEffect as useEffect4, useCallback as useCallback3 } from "react";
10027
+ import React23, { useState as useState4, useEffect as useEffect5, useCallback as useCallback3 } from "react";
9983
10028
  import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
9984
10029
  import { useToastAlertContext as useToastAlertContext3, ToastAlertProvider } from "@procore/toast-alert";
9985
10030
 
9986
10031
  // src/components/modals/DeleteConfirmationModal.tsx
9987
10032
  import {
9988
- Button as Button3,
10033
+ Button as Button4,
9989
10034
  ConfirmModal,
9990
10035
  Modal,
9991
10036
  P as P2,
@@ -10009,28 +10054,27 @@ var SavedViewsDeleteConfirmationModalShared = ({
10009
10054
  style: { overflowWrap: "anywhere" }
10010
10055
  },
10011
10056
  /* @__PURE__ */ React18.createElement(Modal.Body, null, /* @__PURE__ */ React18.createElement(P2, null, i18n.t("savedViews.modal.delete.description"))),
10012
- /* @__PURE__ */ React18.createElement(Modal.Footer, null, /* @__PURE__ */ React18.createElement(Modal.FooterButtons, null, /* @__PURE__ */ React18.createElement(Button3, { variant: "secondary", onClick: onCancel }, i18n.t("savedViews.actions.cancel")), /* @__PURE__ */ React18.createElement(Button3, { variant: "primary", onClick: onDelete }, i18n.t("savedViews.actions.delete"))))
10057
+ /* @__PURE__ */ React18.createElement(Modal.Footer, null, /* @__PURE__ */ React18.createElement(Modal.FooterButtons, null, /* @__PURE__ */ React18.createElement(Button4, { variant: "secondary", onClick: onCancel }, i18n.t("savedViews.actions.cancel")), /* @__PURE__ */ React18.createElement(Button4, { variant: "primary", onClick: onDelete }, i18n.t("savedViews.actions.delete"))))
10013
10058
  );
10014
10059
  };
10015
10060
 
10016
10061
  // src/components/modals/form-modal/FormModal.tsx
10017
- import React20 from "react";
10062
+ import React21 from "react";
10018
10063
 
10019
10064
  // src/components/modals/form-modal/FormModalBase.tsx
10020
10065
  import {
10021
10066
  Banner,
10022
- Button as Button4,
10067
+ Button as Button5,
10023
10068
  colors as colors3,
10024
10069
  ErrorBanner,
10025
- Flex as Flex4,
10026
- Form,
10027
- H2,
10070
+ Flex as Flex3,
10071
+ Form as Form2,
10028
10072
  Modal as Modal2,
10029
- spacing as spacing3,
10073
+ spacing as spacing2,
10030
10074
  Typography as Typography2,
10031
- useI18nContext as useI18nContext6
10075
+ useI18nContext as useI18nContext7
10032
10076
  } from "@procore/core-react";
10033
- import * as React19 from "react";
10077
+ import * as React20 from "react";
10034
10078
  import * as yup from "yup";
10035
10079
 
10036
10080
  // src/components/modals/form-modal/FormModalBaseUtils.ts
@@ -10067,8 +10111,39 @@ function extractMessage(error, I18n) {
10067
10111
  return { form: I18n.t("savedViews.modal.errors.unknown") };
10068
10112
  }
10069
10113
 
10114
+ // src/components/modals/form-modal/NameInputField.tsx
10115
+ import { Form, useFormContext, useI18nContext as useI18nContext6 } from "@procore/core-react";
10116
+ import * as React19 from "react";
10117
+ var NAME_INPUT_ID = "saved-view-form-name-input";
10118
+ var NameInputField = ({
10119
+ error,
10120
+ onResetMutations
10121
+ }) => {
10122
+ const I18n = useI18nContext6();
10123
+ const label = I18n.t("savedViews.modal.fields.name");
10124
+ const { errors: formErrors, submitCount } = useFormContext();
10125
+ React19.useEffect(() => {
10126
+ var _a;
10127
+ if (submitCount > 0 && (formErrors == null ? void 0 : formErrors.name)) {
10128
+ (_a = document.getElementById(NAME_INPUT_ID)) == null ? void 0 : _a.focus();
10129
+ }
10130
+ }, [formErrors == null ? void 0 : formErrors.name, submitCount]);
10131
+ return /* @__PURE__ */ React19.createElement(
10132
+ Form.Text,
10133
+ {
10134
+ id: NAME_INPUT_ID,
10135
+ name: "name",
10136
+ error,
10137
+ placeholder: label,
10138
+ label,
10139
+ colWidth: 12,
10140
+ onChange: onResetMutations
10141
+ }
10142
+ );
10143
+ };
10144
+
10070
10145
  // src/components/modals/form-modal/FormModalBase.tsx
10071
- var { useEffect: useEffect2, useRef: useRef2 } = React19;
10146
+ var { useEffect: useEffect3, useRef: useRef2 } = React20;
10072
10147
  var ScrollContainer = styled_components_esm_default("div")`
10073
10148
  overflow: auto;
10074
10149
  `;
@@ -10088,10 +10163,10 @@ var FormModalBase = ({
10088
10163
  onSelect,
10089
10164
  backend
10090
10165
  }) => {
10091
- const I18n = useI18nContext6();
10166
+ const I18n = useI18nContext7();
10092
10167
  const NAME_MAX_LENGTH = 150;
10093
10168
  const originalBodyWidth = useRef2("");
10094
- useEffect2(() => {
10169
+ useEffect3(() => {
10095
10170
  if (open) {
10096
10171
  originalBodyWidth.current = document.body.style.width || "";
10097
10172
  document.body.style.width = "100%";
@@ -10162,24 +10237,17 @@ var FormModalBase = ({
10162
10237
  I18n,
10163
10238
  isProjectLevelTool
10164
10239
  );
10165
- return /* @__PURE__ */ React19.createElement(
10240
+ return /* @__PURE__ */ React20.createElement(
10166
10241
  Modal2,
10167
10242
  {
10168
- "aria-label": I18n.t("savedViews.ariaLabels.modal"),
10169
- onClickOverlay: onClose,
10243
+ howToClose: ["x", "scrim"],
10244
+ onClose,
10170
10245
  open,
10171
- style: { width: "540px" },
10246
+ width: "md",
10172
10247
  "data-testid": "create-update-modal"
10173
10248
  },
10174
- /* @__PURE__ */ React19.createElement(ScrollContainer, null, /* @__PURE__ */ React19.createElement(
10175
- Modal2.Header,
10176
- {
10177
- onClose,
10178
- style: { borderBottom: `1px solid ${colors3.gray85}` }
10179
- },
10180
- /* @__PURE__ */ React19.createElement(H2, null, header)
10181
- ), /* @__PURE__ */ React19.createElement(
10182
- Form,
10249
+ /* @__PURE__ */ React20.createElement(ScrollContainer, null, /* @__PURE__ */ React20.createElement(Modal2.Header, { style: { borderBottom: `1px solid ${colors3.gray85}` } }, /* @__PURE__ */ React20.createElement(Modal2.Heading, null, header)), /* @__PURE__ */ React20.createElement(
10250
+ Form2,
10183
10251
  {
10184
10252
  initialValues: {
10185
10253
  name: initialName,
@@ -10204,30 +10272,26 @@ var FormModalBase = ({
10204
10272
  onReset: onCancel,
10205
10273
  validateOnChange: true
10206
10274
  },
10207
- /* @__PURE__ */ React19.createElement(Form.Form, { name: header }, /* @__PURE__ */ React19.createElement(
10275
+ /* @__PURE__ */ React20.createElement(Form2.Form, { name: header }, /* @__PURE__ */ React20.createElement(
10208
10276
  Modal2.Body,
10209
10277
  {
10210
- style: { paddingTop: 0, paddingBottom: 0, marginTop: spacing3.lg }
10278
+ style: { paddingTop: 0, paddingBottom: 0, marginTop: spacing2.lg }
10211
10279
  },
10212
- errors && /* @__PURE__ */ React19.createElement(ErrorBanner, { style: { marginBottom: spacing3.xl } }, /* @__PURE__ */ React19.createElement(Banner.Content, null, /* @__PURE__ */ React19.createElement(Banner.Title, null, I18n.t("savedViews.modal.errors.title", { mode })), /* @__PURE__ */ React19.createElement(Banner.Body, null, (errors == null ? void 0 : errors.form) || I18n.t(`savedViews.modal.errors.description.${mode}`)))),
10213
- /* @__PURE__ */ React19.createElement(Form.Row, null, /* @__PURE__ */ React19.createElement(
10214
- Form.Text,
10280
+ errors && /* @__PURE__ */ React20.createElement(ErrorBanner, { style: { marginBottom: spacing2.xl } }, /* @__PURE__ */ React20.createElement(Banner.Content, null, /* @__PURE__ */ React20.createElement(Banner.Title, null, I18n.t("savedViews.modal.errors.title", { mode })), /* @__PURE__ */ React20.createElement(Banner.Body, null, (errors == null ? void 0 : errors.form) || I18n.t(`savedViews.modal.errors.description.${mode}`)))),
10281
+ /* @__PURE__ */ React20.createElement(Form2.Row, null, /* @__PURE__ */ React20.createElement(
10282
+ NameInputField,
10215
10283
  {
10216
- name: "name",
10217
10284
  error: errors == null ? void 0 : errors.name,
10218
- placeholder: I18n.t("savedViews.modal.fields.name"),
10219
- label: I18n.t("savedViews.modal.fields.name"),
10220
- colWidth: 12,
10221
- onChange: () => resetMutations()
10285
+ onResetMutations: resetMutations
10222
10286
  }
10223
10287
  )),
10224
- /* @__PURE__ */ React19.createElement(
10225
- Form.Row,
10288
+ /* @__PURE__ */ React20.createElement(
10289
+ Form2.Row,
10226
10290
  {
10227
- style: { marginTop: (errors == null ? void 0 : errors.name) ? spacing3.xl : spacing3.none }
10291
+ style: { marginTop: (errors == null ? void 0 : errors.name) ? spacing2.xl : spacing2.none }
10228
10292
  },
10229
- /* @__PURE__ */ React19.createElement(
10230
- Form.TextArea,
10293
+ /* @__PURE__ */ React20.createElement(
10294
+ Form2.TextArea,
10231
10295
  {
10232
10296
  name: "description",
10233
10297
  placeholder: I18n.t("savedViews.modal.fields.description"),
@@ -10237,8 +10301,8 @@ var FormModalBase = ({
10237
10301
  }
10238
10302
  )
10239
10303
  ),
10240
- viewLevelOptions.length > 1 && mode === "create" /* CREATE */ ? /* @__PURE__ */ React19.createElement(Form.Row, null, /* @__PURE__ */ React19.createElement(
10241
- Form.Select,
10304
+ viewLevelOptions.length > 1 && mode === "create" /* CREATE */ ? /* @__PURE__ */ React20.createElement(Form2.Row, null, /* @__PURE__ */ React20.createElement(
10305
+ Form2.Select,
10242
10306
  {
10243
10307
  name: "view_level",
10244
10308
  qa: { label: "view-level" },
@@ -10248,9 +10312,9 @@ var FormModalBase = ({
10248
10312
  onSearch: false,
10249
10313
  onClear: false
10250
10314
  }
10251
- )) : /* @__PURE__ */ React19.createElement(React19.Fragment, null)
10252
- ), /* @__PURE__ */ React19.createElement(Modal2.Footer, { style: { borderTop: `1px solid ${colors3.gray85}` } }, /* @__PURE__ */ React19.createElement(Flex4, { grow: "1", justifyContent: "space-between", alignItems: "center" }, /* @__PURE__ */ React19.createElement(Typography2, { color: "gray45", italic: true }, /* @__PURE__ */ React19.createElement(Typography2, { color: "red45" }, "*"), " ", I18n.t("savedViews.modal.info.required_fields")), /* @__PURE__ */ React19.createElement(Modal2.FooterButtons, null, /* @__PURE__ */ React19.createElement(Button4, { type: "reset", variant: "tertiary", disabled: isLoading }, I18n.t("savedViews.actions.cancel")), /* @__PURE__ */ React19.createElement(
10253
- Button4,
10315
+ )) : /* @__PURE__ */ React20.createElement(React20.Fragment, null)
10316
+ ), /* @__PURE__ */ React20.createElement(Modal2.Footer, { style: { borderTop: `1px solid ${colors3.gray85}` } }, /* @__PURE__ */ React20.createElement(Flex3, { grow: "1", justifyContent: "space-between", alignItems: "center" }, /* @__PURE__ */ React20.createElement(Typography2, { color: "gray45", italic: true }, /* @__PURE__ */ React20.createElement(Typography2, { color: "red45" }, "*"), " ", I18n.t("savedViews.modal.info.required_fields")), /* @__PURE__ */ React20.createElement(Modal2.FooterButtons, null, /* @__PURE__ */ React20.createElement(Button5, { type: "reset", variant: "tertiary", disabled: isLoading }, I18n.t("savedViews.actions.cancel")), /* @__PURE__ */ React20.createElement(
10317
+ Button5,
10254
10318
  {
10255
10319
  "data-testid": "create-update-modal-button",
10256
10320
  type: "submit",
@@ -10265,7 +10329,7 @@ var FormModalBase = ({
10265
10329
  };
10266
10330
 
10267
10331
  // src/components/modals/form-modal/FormModal.tsx
10268
- import { useI18nContext as useI18nContext7 } from "@procore/core-react";
10332
+ import { useI18nContext as useI18nContext8 } from "@procore/core-react";
10269
10333
  var FormModal = ({
10270
10334
  open,
10271
10335
  mode,
@@ -10279,8 +10343,8 @@ var FormModal = ({
10279
10343
  defaultView,
10280
10344
  backend
10281
10345
  }) => {
10282
- const i18n = useI18nContext7();
10283
- return /* @__PURE__ */ React20.createElement(
10346
+ const i18n = useI18nContext8();
10347
+ return /* @__PURE__ */ React21.createElement(
10284
10348
  FormModalBase,
10285
10349
  {
10286
10350
  open,
@@ -10304,18 +10368,18 @@ var FormModal = ({
10304
10368
  // src/components/modals/form-modal/SharedViewFormModal.tsx
10305
10369
  import {
10306
10370
  Banner as Banner2,
10307
- Button as Button5,
10371
+ Button as Button6,
10308
10372
  colors as colors4,
10309
10373
  ErrorBanner as ErrorBanner2,
10310
- Flex as Flex5,
10311
- Form as Form2,
10374
+ Flex as Flex4,
10375
+ Form as Form3,
10312
10376
  Modal as Modal3,
10313
10377
  P as P3,
10314
- spacing as spacing4,
10378
+ spacing as spacing3,
10315
10379
  Typography as Typography3,
10316
- useI18nContext as useI18nContext8
10380
+ useI18nContext as useI18nContext9
10317
10381
  } from "@procore/core-react";
10318
- import * as React21 from "react";
10382
+ import * as React22 from "react";
10319
10383
  import * as yup2 from "yup";
10320
10384
  var SharedViewFormModal = ({
10321
10385
  open,
@@ -10327,7 +10391,7 @@ var SharedViewFormModal = ({
10327
10391
  isCreating,
10328
10392
  resetCreateError
10329
10393
  }) => {
10330
- const I18n = useI18nContext8();
10394
+ const I18n = useI18nContext9();
10331
10395
  const NAME_MAX_LENGTH = 150;
10332
10396
  const errors = extractMessage(createError, I18n);
10333
10397
  const handleNameChange = () => {
@@ -10338,35 +10402,36 @@ var SharedViewFormModal = ({
10338
10402
  const handleOnSubmit = (data) => {
10339
10403
  onCreateView(data.name, data.description);
10340
10404
  };
10341
- return /* @__PURE__ */ React21.createElement(
10405
+ return /* @__PURE__ */ React22.createElement(
10342
10406
  Modal3,
10343
10407
  {
10344
10408
  "data-testid": "shared-view-form-modal",
10345
10409
  open,
10346
- onClickOverlay: onClose,
10410
+ howToClose: ["x", "scrim"],
10411
+ onClose,
10347
10412
  style: { width: "540px" }
10348
10413
  },
10349
- /* @__PURE__ */ React21.createElement(
10414
+ /* @__PURE__ */ React22.createElement(
10350
10415
  Modal3.Header,
10351
10416
  {
10352
10417
  onClose,
10353
10418
  style: {
10354
- paddingTop: spacing4.lg,
10355
- paddingBottom: spacing4.xs,
10356
- paddingLeft: spacing4.xl,
10357
- paddingRight: spacing4.xl
10419
+ paddingTop: spacing3.lg,
10420
+ paddingBottom: spacing3.xs,
10421
+ paddingLeft: spacing3.xl,
10422
+ paddingRight: spacing3.xl
10358
10423
  }
10359
10424
  },
10360
- I18n.t("savedViews.modal.create.title")
10425
+ /* @__PURE__ */ React22.createElement(Modal3.Heading, null, I18n.t("savedViews.modal.create.title"))
10361
10426
  ),
10362
- /* @__PURE__ */ React21.createElement(
10427
+ /* @__PURE__ */ React22.createElement(
10363
10428
  P3,
10364
10429
  {
10365
10430
  style: {
10366
- paddingLeft: spacing4.xl,
10367
- paddingRight: spacing4.xl,
10368
- paddingBottom: spacing4.lg,
10369
- paddingTop: spacing4.none,
10431
+ paddingLeft: spacing3.xl,
10432
+ paddingRight: spacing3.xl,
10433
+ paddingBottom: spacing3.lg,
10434
+ paddingTop: spacing3.none,
10370
10435
  margin: 0,
10371
10436
  color: colors4.gray45,
10372
10437
  whiteSpace: "pre-line"
@@ -10374,8 +10439,8 @@ var SharedViewFormModal = ({
10374
10439
  },
10375
10440
  I18n.t("savedViews.modal.copyConfirmation.description")
10376
10441
  ),
10377
- /* @__PURE__ */ React21.createElement(
10378
- Form2,
10442
+ /* @__PURE__ */ React22.createElement(
10443
+ Form3,
10379
10444
  {
10380
10445
  initialValues: {
10381
10446
  name: fetchedView.name,
@@ -10393,36 +10458,32 @@ var SharedViewFormModal = ({
10393
10458
  onSubmit: handleOnSubmit,
10394
10459
  validateOnChange: true
10395
10460
  },
10396
- /* @__PURE__ */ React21.createElement(Form2.Form, { name: "share-view-form" }, /* @__PURE__ */ React21.createElement(
10461
+ /* @__PURE__ */ React22.createElement(Form3.Form, { name: "share-view-form" }, /* @__PURE__ */ React22.createElement(
10397
10462
  Modal3.Body,
10398
10463
  {
10399
10464
  style: {
10400
- paddingTop: spacing4.lg,
10465
+ paddingTop: spacing3.lg,
10401
10466
  paddingBottom: 0,
10402
10467
  borderTop: `1px solid ${colors4.gray85}`
10403
10468
  }
10404
10469
  },
10405
- errors && /* @__PURE__ */ React21.createElement(ErrorBanner2, { style: { marginBottom: spacing4.xl } }, /* @__PURE__ */ React21.createElement(Banner2.Content, null, /* @__PURE__ */ React21.createElement(Banner2.Title, null, I18n.t("savedViews.modal.errors.title", {
10470
+ errors && /* @__PURE__ */ React22.createElement(ErrorBanner2, { style: { marginBottom: spacing3.xl } }, /* @__PURE__ */ React22.createElement(Banner2.Content, null, /* @__PURE__ */ React22.createElement(Banner2.Title, null, I18n.t("savedViews.modal.errors.title", {
10406
10471
  mode: "create"
10407
- })), /* @__PURE__ */ React21.createElement(Banner2.Body, null, (errors == null ? void 0 : errors.form) || I18n.t("savedViews.modal.errors.description.create")))),
10408
- /* @__PURE__ */ React21.createElement(Form2.Row, null, /* @__PURE__ */ React21.createElement(
10409
- Form2.Text,
10472
+ })), /* @__PURE__ */ React22.createElement(Banner2.Body, null, (errors == null ? void 0 : errors.form) || I18n.t("savedViews.modal.errors.description.create")))),
10473
+ /* @__PURE__ */ React22.createElement(Form3.Row, null, /* @__PURE__ */ React22.createElement(
10474
+ NameInputField,
10410
10475
  {
10411
- name: "name",
10412
10476
  error: errors == null ? void 0 : errors.name,
10413
- placeholder: I18n.t("savedViews.modal.fields.name"),
10414
- label: I18n.t("savedViews.modal.fields.name"),
10415
- colWidth: 12,
10416
- onChange: handleNameChange
10477
+ onResetMutations: handleNameChange
10417
10478
  }
10418
10479
  )),
10419
- /* @__PURE__ */ React21.createElement(
10420
- Form2.Row,
10480
+ /* @__PURE__ */ React22.createElement(
10481
+ Form3.Row,
10421
10482
  {
10422
- style: { marginTop: (errors == null ? void 0 : errors.name) ? spacing4.xl : spacing4.none }
10483
+ style: { marginTop: (errors == null ? void 0 : errors.name) ? spacing3.xl : spacing3.none }
10423
10484
  },
10424
- /* @__PURE__ */ React21.createElement(
10425
- Form2.TextArea,
10485
+ /* @__PURE__ */ React22.createElement(
10486
+ Form3.TextArea,
10426
10487
  {
10427
10488
  name: "description",
10428
10489
  placeholder: I18n.t("savedViews.modal.fields.description"),
@@ -10432,8 +10493,8 @@ var SharedViewFormModal = ({
10432
10493
  }
10433
10494
  )
10434
10495
  )
10435
- ), /* @__PURE__ */ React21.createElement(Modal3.Footer, { style: { borderTop: `1px solid ${colors4.gray85}` } }, /* @__PURE__ */ React21.createElement(Flex5, { grow: "1", justifyContent: "space-between", alignItems: "center" }, /* @__PURE__ */ React21.createElement(Typography3, { color: "gray45", italic: true }, /* @__PURE__ */ React21.createElement(Typography3, { color: "red45" }, "*"), " ", I18n.t("savedViews.modal.info.required_fields")), /* @__PURE__ */ React21.createElement(Modal3.FooterButtons, null, /* @__PURE__ */ React21.createElement(
10436
- Button5,
10496
+ ), /* @__PURE__ */ React22.createElement(Modal3.Footer, { style: { borderTop: `1px solid ${colors4.gray85}` } }, /* @__PURE__ */ React22.createElement(Flex4, { grow: "1", justifyContent: "space-between", alignItems: "center" }, /* @__PURE__ */ React22.createElement(Typography3, { color: "gray45", italic: true }, /* @__PURE__ */ React22.createElement(Typography3, { color: "red45" }, "*"), " ", I18n.t("savedViews.modal.info.required_fields")), /* @__PURE__ */ React22.createElement(Modal3.FooterButtons, null, /* @__PURE__ */ React22.createElement(
10497
+ Button6,
10437
10498
  {
10438
10499
  variant: "secondary",
10439
10500
  onClick: onCreateTemporaryView,
@@ -10441,8 +10502,8 @@ var SharedViewFormModal = ({
10441
10502
  disabled: isCreating
10442
10503
  },
10443
10504
  I18n.t("savedViews.actions.viewTemporarily")
10444
- ), /* @__PURE__ */ React21.createElement(
10445
- Button5,
10505
+ ), /* @__PURE__ */ React22.createElement(
10506
+ Button6,
10446
10507
  {
10447
10508
  type: "submit",
10448
10509
  variant: "primary",
@@ -10457,9 +10518,9 @@ var SharedViewFormModal = ({
10457
10518
  };
10458
10519
 
10459
10520
  // src/utils/hooks/useViewSelection.ts
10460
- import { useState as useState3, useCallback as useCallback2, useEffect as useEffect3, useRef as useRef3, useMemo } from "react";
10521
+ import { useState as useState3, useCallback as useCallback2, useEffect as useEffect4, useRef as useRef3, useMemo } from "react";
10461
10522
  import { useSearchParams } from "react-router-dom";
10462
- import { useI18nContext as useI18nContext9 } from "@procore/core-react";
10523
+ import { useI18nContext as useI18nContext10 } from "@procore/core-react";
10463
10524
 
10464
10525
  // src/utils/viewStorage.ts
10465
10526
  var ViewStorage = {
@@ -10522,7 +10583,7 @@ var restoreUrlParameter = (currentParam, previousParam, setSearchParams) => {
10522
10583
  }
10523
10584
  };
10524
10585
  var useViewSelection = (config, savedViews, presetViews, openSharedViewModal) => {
10525
- const I18n = useI18nContext9();
10586
+ const I18n = useI18nContext10();
10526
10587
  const projectIdSegment = config.projectId ?? "company";
10527
10588
  const storageKey = `savedView_${config.domain}_${config.tableName}_${config.companyId}_${projectIdSegment}_${config.userId}`;
10528
10589
  const temporaryStorageKey = `${storageKey}-temporary`;
@@ -10598,7 +10659,7 @@ var useViewSelection = (config, savedViews, presetViews, openSharedViewModal) =>
10598
10659
  },
10599
10660
  [isViewAlreadySelected, openSharedViewModal, allViews, selectView]
10600
10661
  );
10601
- useEffect3(() => {
10662
+ useEffect4(() => {
10602
10663
  const savedViewId = searchParams.get("saved-view");
10603
10664
  restoreUrlParameter(
10604
10665
  savedViewId,
@@ -10629,7 +10690,7 @@ import { useQuery } from "@tanstack/react-query";
10629
10690
  // src/utils/api/queriesHandler.ts
10630
10691
  import { requestJSON } from "@procore/core-http";
10631
10692
  import { useMutation, useQueryClient } from "@tanstack/react-query";
10632
- import { useI18nContext as useI18nContext10 } from "@procore/core-react";
10693
+ import { useI18nContext as useI18nContext11 } from "@procore/core-react";
10633
10694
  var getBasePath = (companyId, projectId) => {
10634
10695
  if (projectId) {
10635
10696
  return `/rest/v2.0/companies/${companyId}/projects/${projectId}/saved_views`;
@@ -10639,7 +10700,7 @@ var getBasePath = (companyId, projectId) => {
10639
10700
  var useApiRequest = (props, method, mutationKey) => {
10640
10701
  const { projectId, companyId, domain, tableName } = props;
10641
10702
  const queryClient2 = useQueryClient();
10642
- const { locale } = useI18nContext10();
10703
+ const { locale } = useI18nContext11();
10643
10704
  const basePath = getBasePath(companyId, projectId);
10644
10705
  const queryKey = ["savedViews", domain, tableName, companyId, projectId];
10645
10706
  return useMutation({
@@ -10786,7 +10847,7 @@ var SavedViewsContent = (props) => {
10786
10847
  const { data: savedViews } = backend.useSavedViewsQuery(queryInput);
10787
10848
  const { mutate: deleteSavedView } = backend.useDeleteSavedView(queryInput);
10788
10849
  const { showToast } = useToastAlertContext3();
10789
- const i18n = useI18nContext11();
10850
+ const i18n = useI18nContext12();
10790
10851
  const [activeModal, setActiveModal] = useState4(null);
10791
10852
  const [modalData, setModalData] = useState4(null);
10792
10853
  const openModal = (type, data) => {
@@ -10832,7 +10893,7 @@ var SavedViewsContent = (props) => {
10832
10893
  error: createError,
10833
10894
  reset: resetCreateError
10834
10895
  } = backend.useCreateSavedView(queryInput);
10835
- useEffect4(() => {
10896
+ useEffect5(() => {
10836
10897
  if (fetchError) {
10837
10898
  showToast.error(i18n.t("savedViews.errors.notFound"));
10838
10899
  selectView(selectedView ?? props.defaultView);
@@ -10880,31 +10941,45 @@ var SavedViewsContent = (props) => {
10880
10941
  deleteSelectedView();
10881
10942
  closeModal();
10882
10943
  };
10883
- return /* @__PURE__ */ React22.createElement(StyledPanel, { provider: props.provider }, /* @__PURE__ */ React22.createElement(
10944
+ return /* @__PURE__ */ React23.createElement(StyledPanel, { provider: props.provider }, /* @__PURE__ */ React23.createElement(
10884
10945
  ExpandedPanel,
10885
10946
  {
10886
10947
  "data-testid": "saved-view-expanded-panel",
10887
10948
  provider: props.provider
10888
10949
  },
10889
- /* @__PURE__ */ React22.createElement(Panel3.Header, { id: "saved-views-collections-panel-header" }, /* @__PURE__ */ React22.createElement(Panel3.Title, null, /* @__PURE__ */ React22.createElement(Flex6, { alignItems: "center" }, /* @__PURE__ */ React22.createElement(Box2, { paddingRight: "sm" }, i18n.t("savedViews.title")), /* @__PURE__ */ React22.createElement(Tooltip, { showDelay: 200, overlay: i18n.t("savedViews.tooltip") }, /* @__PURE__ */ React22.createElement(Help_default, { size: "sm" })))), /* @__PURE__ */ React22.createElement(
10950
+ /* @__PURE__ */ React23.createElement(Panel3.Header, { id: "saved-views-collections-panel-header" }, /* @__PURE__ */ React23.createElement(Panel3.Title, null, /* @__PURE__ */ React23.createElement(Flex5, { alignItems: "center" }, /* @__PURE__ */ React23.createElement(Box3, { paddingRight: "sm" }, i18n.t("savedViews.title")), /* @__PURE__ */ React23.createElement(
10951
+ Tooltip,
10952
+ {
10953
+ showDelay: 200,
10954
+ overlay: /* @__PURE__ */ React23.createElement(Tooltip.Content, null, i18n.t("savedViews.tooltip"))
10955
+ },
10956
+ /* @__PURE__ */ React23.createElement(
10957
+ Help_default,
10958
+ {
10959
+ tabIndex: 0,
10960
+ size: "sm",
10961
+ "aria-label": i18n.t("savedViews.tooltip")
10962
+ }
10963
+ )
10964
+ ))), /* @__PURE__ */ React23.createElement(
10890
10965
  Tooltip,
10891
10966
  {
10892
10967
  overlay: i18n.t("savedViews.actions.create"),
10893
10968
  showDelay: 1e3
10894
10969
  },
10895
- /* @__PURE__ */ React22.createElement("span", null, /* @__PURE__ */ React22.createElement(
10896
- Button6,
10970
+ /* @__PURE__ */ React23.createElement(
10971
+ Button7,
10897
10972
  {
10898
- icon: /* @__PURE__ */ React22.createElement(Plus_default, null),
10973
+ icon: /* @__PURE__ */ React23.createElement(Plus_default, null),
10899
10974
  variant: "secondary",
10900
10975
  "data-testid": "expanded-panel-create-button",
10901
10976
  onClick: () => openModal("create" /* CREATE */),
10902
10977
  "aria-label": i18n.t("savedViews.actions.create")
10903
10978
  },
10904
10979
  i18n.t("savedViews.actions.create")
10905
- ))
10980
+ )
10906
10981
  )),
10907
- /* @__PURE__ */ React22.createElement(Panel3.Body, { style: { display: "flex", flexFlow: "column" } }, /* @__PURE__ */ React22.createElement(
10982
+ /* @__PURE__ */ React23.createElement(Panel3.Body, { style: { display: "flex", flexFlow: "column" } }, /* @__PURE__ */ React23.createElement(
10908
10983
  PanelContent,
10909
10984
  {
10910
10985
  onSelect: ({ item }) => selectView(item),
@@ -10917,12 +10992,13 @@ var SavedViewsContent = (props) => {
10917
10992
  presetViews: props.presetViews,
10918
10993
  savedViews: allViews,
10919
10994
  provider: props.provider,
10920
- userId: props.userId.toString(),
10995
+ userId: props.userId,
10921
10996
  onClearTemporary: clearTemporaryView,
10922
- backend
10997
+ backend,
10998
+ enableSharingViews: props.enableSharingViews
10923
10999
  }
10924
11000
  ))
10925
- ), (isModalOpen("create" /* CREATE */) || isModalOpen("update" /* UPDATE */)) && /* @__PURE__ */ React22.createElement(
11001
+ ), (isModalOpen("create" /* CREATE */) || isModalOpen("update" /* UPDATE */)) && /* @__PURE__ */ React23.createElement(
10926
11002
  FormModal,
10927
11003
  {
10928
11004
  open: true,
@@ -10937,14 +11013,14 @@ var SavedViewsContent = (props) => {
10937
11013
  defaultView: props.defaultView,
10938
11014
  backend
10939
11015
  }
10940
- ), selectedView && isModalOpen("delete" /* DELETE */) && /* @__PURE__ */ React22.createElement(
11016
+ ), selectedView && isModalOpen("delete" /* DELETE */) && /* @__PURE__ */ React23.createElement(
10941
11017
  SavedViewsDeleteConfirmationModalShared,
10942
11018
  {
10943
11019
  open: true,
10944
11020
  onDelete: confirmDeleteAndCloseModal,
10945
11021
  onCancel: closeModal
10946
11022
  }
10947
- ), fetchedView && isModalOpen("sharedView" /* SHARED_VIEW */) && /* @__PURE__ */ React22.createElement(
11023
+ ), fetchedView && isModalOpen("sharedView" /* SHARED_VIEW */) && /* @__PURE__ */ React23.createElement(
10948
11024
  SharedViewFormModal,
10949
11025
  {
10950
11026
  open: true,
@@ -10959,11 +11035,11 @@ var SavedViewsContent = (props) => {
10959
11035
  ));
10960
11036
  };
10961
11037
  var SavedViews = (props) => {
10962
- return /* @__PURE__ */ React22.createElement(EnvironmentI18nProvider, null, /* @__PURE__ */ React22.createElement(QueryClientProvider, { client: queryClient }, /* @__PURE__ */ React22.createElement(ToastAlertProvider, null, /* @__PURE__ */ React22.createElement(SavedViewsContent, { ...props }))));
11038
+ return /* @__PURE__ */ React23.createElement(EnvironmentI18nProvider, null, /* @__PURE__ */ React23.createElement(QueryClientProvider, { client: queryClient }, /* @__PURE__ */ React23.createElement(ToastAlertProvider, null, /* @__PURE__ */ React23.createElement(SavedViewsContent, { ...props }))));
10963
11039
  };
10964
11040
 
10965
11041
  // src/components/adapters/smart-grid/SmartGridSavedViews.tsx
10966
- import React23, { useCallback as useCallback4 } from "react";
11042
+ import React24, { useCallback as useCallback4 } from "react";
10967
11043
 
10968
11044
  // src/components/adapters/smart-grid/SmartGridDefaultSavedView.tsx
10969
11045
  import { useMemo as useMemo2 } from "react";
@@ -11038,7 +11114,7 @@ var useNormalizedDefaultViews = (defaultViews, gridApi) => {
11038
11114
  };
11039
11115
 
11040
11116
  // src/components/adapters/smart-grid/useSmartGridConfig.ts
11041
- import { useState as useState5, useEffect as useEffect5, useRef as useRef4 } from "react";
11117
+ import { useState as useState5, useEffect as useEffect6, useRef as useRef4 } from "react";
11042
11118
  var GRID_STATE_EVENTS = [
11043
11119
  "sortChanged",
11044
11120
  "filterOpened",
@@ -11058,7 +11134,7 @@ var useSmartGridConfig = (gridApi) => {
11058
11134
  () => getSmartGridConfig(gridApi)
11059
11135
  );
11060
11136
  const eventListenersDisabledRef = useRef4(false);
11061
- useEffect5(() => {
11137
+ useEffect6(() => {
11062
11138
  if (!gridApi)
11063
11139
  return;
11064
11140
  const updateConfig = () => {
@@ -11129,7 +11205,7 @@ var SmartGridSavedViews = (props) => {
11129
11205
  },
11130
11206
  [gridApi, tableConfig, setTableConfig]
11131
11207
  );
11132
- return /* @__PURE__ */ React23.createElement(
11208
+ return /* @__PURE__ */ React24.createElement(
11133
11209
  SavedViews,
11134
11210
  {
11135
11211
  onSelect,
@@ -11142,13 +11218,14 @@ var SmartGridSavedViews = (props) => {
11142
11218
  presetViews,
11143
11219
  tableName: props.tableName,
11144
11220
  tableConfig,
11145
- backend: props.backend
11221
+ backend: props.backend,
11222
+ enableSharingViews: props.enableSharingViews
11146
11223
  }
11147
11224
  );
11148
11225
  };
11149
11226
 
11150
11227
  // src/components/adapters/data-table/DataTableSavedViews.tsx
11151
- import React24, {
11228
+ import React25, {
11152
11229
  forwardRef as forwardRef11,
11153
11230
  useImperativeHandle,
11154
11231
  useState as useState6,
@@ -11249,7 +11326,7 @@ var DataTableSavedViews = forwardRef11((props, ref) => {
11249
11326
  if (!internalTableConfig) {
11250
11327
  return null;
11251
11328
  }
11252
- return /* @__PURE__ */ React24.createElement(
11329
+ return /* @__PURE__ */ React25.createElement(
11253
11330
  SavedViews,
11254
11331
  {
11255
11332
  onSelect,
@@ -11261,7 +11338,8 @@ var DataTableSavedViews = forwardRef11((props, ref) => {
11261
11338
  defaultView,
11262
11339
  presetViews,
11263
11340
  tableName: props.tableName,
11264
- tableConfig: internalTableConfig
11341
+ tableConfig: internalTableConfig,
11342
+ enableSharingViews: props.enableSharingViews
11265
11343
  }
11266
11344
  );
11267
11345
  });