@procore/data-table 14.17.0 → 14.18.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.
@@ -19,9 +19,9 @@ var _isEqual = require('lodash.isequal');
19
19
  var ReactResizeDetector = require('react-resize-detector');
20
20
  var labsDatetimeSelect = require('@procore/labs-datetime-select');
21
21
  var Decimal = require('decimal.js');
22
- var styled4 = require('styled-components');
23
- var labsGroupBySelect = require('@procore/labs-group-by-select');
22
+ var styled3 = require('styled-components');
24
23
  var globalizationToolkit = require('@procore/globalization-toolkit');
24
+ var labsGroupBySelect = require('@procore/labs-group-by-select');
25
25
 
26
26
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
27
27
 
@@ -33,7 +33,7 @@ var ReactDOM__default = /*#__PURE__*/_interopDefault(ReactDOM);
33
33
  var _isEqual__default = /*#__PURE__*/_interopDefault(_isEqual);
34
34
  var ReactResizeDetector__default = /*#__PURE__*/_interopDefault(ReactResizeDetector);
35
35
  var Decimal__default = /*#__PURE__*/_interopDefault(Decimal);
36
- var styled4__default = /*#__PURE__*/_interopDefault(styled4);
36
+ var styled3__default = /*#__PURE__*/_interopDefault(styled3);
37
37
 
38
38
  var __create = Object.create;
39
39
  var __defProp = Object.defineProperty;
@@ -1422,7 +1422,7 @@ ag-grid, ag-grid-angular, ag-grid-ng2, ag-grid-polymer, ag-grid-aurelia {
1422
1422
  animation-iteration-count: infinite;
1423
1423
  animation-name: ag-shake-left-to-right;
1424
1424
  }
1425
- @keyframes _ag-shake-left-to-right_1t4e8_369 {
1425
+ @keyframes _ag-shake-left-to-right_18odb_369 {
1426
1426
  from {
1427
1427
  padding-left: 6px;
1428
1428
  padding-right: 2px;
@@ -5423,7 +5423,7 @@ input[class^=ag-][type=button]:focus, button[class^=ag-]:focus {
5423
5423
  animation-iteration-count: infinite;
5424
5424
  animation-timing-function: linear;
5425
5425
  }
5426
- @keyframes _spin_1t4e8_1 {
5426
+ @keyframes _spin_18odb_1 {
5427
5427
  from {
5428
5428
  transform: rotate(0deg);
5429
5429
  }
@@ -7729,7 +7729,7 @@ input[class^=ag-][type=range]:disabled {
7729
7729
  .ag-theme-alpine.ag-theme-alpine .ag-details-row-auto-height .ag-center-cols-viewport, .ag-theme-alpine.ag-theme-alpine .ag-layout-auto-height .ag-center-cols-viewport {
7730
7730
  min-height: 0px;
7731
7731
  }
7732
- .ag-theme-alpine.ag-theme-alpine .ag-overlay button {
7732
+ .ag-theme-alpine.ag-theme-alpine .ag-overlay .ag-react-container {
7733
7733
  pointer-events: initial;
7734
7734
  }
7735
7735
  .ag-theme-alpine.ag-theme-alpine .ag-menu, .ag-theme-alpine.ag-theme-alpine .ag-menu-header {
@@ -7928,7 +7928,7 @@ input[class^=ag-][type=range]:disabled {
7928
7928
  padding-left: 16px;
7929
7929
  }
7930
7930
 
7931
- div._contextPanel_1t4e8_7153 {
7931
+ div._contextPanel_18odb_7153 {
7932
7932
  width: 400px;
7933
7933
  transition: all ease 500ms;
7934
7934
  flex: 0 0 auto;
@@ -7937,7 +7937,7 @@ div._contextPanel_1t4e8_7153 {
7937
7937
  border: 1px solid #d6dadc;
7938
7938
  display: flex;
7939
7939
  }
7940
- div._contextPanel--hidden_1t4e8_7162 {
7940
+ div._contextPanel--hidden_18odb_7162 {
7941
7941
  border: none;
7942
7942
  overflow: hidden;
7943
7943
  padding: 0px;
@@ -7945,50 +7945,50 @@ div._contextPanel--hidden_1t4e8_7162 {
7945
7945
  width: 0px;
7946
7946
  }
7947
7947
 
7948
- ._contextPanelWrapper_1t4e8_7170 {
7948
+ ._contextPanelWrapper_18odb_7170 {
7949
7949
  position: relative;
7950
7950
  flex-grow: 1;
7951
7951
  }
7952
7952
 
7953
- ._contextPanelBody_1t4e8_7175 {
7953
+ ._contextPanelBody_18odb_7175 {
7954
7954
  width: clamp(380px, 400px, 100%);
7955
7955
  }
7956
7956
 
7957
- ._contextPanel-stickyHeader_1t4e8_7179 {
7957
+ ._contextPanel-stickyHeader_18odb_7179 {
7958
7958
  background-color: #ffffff;
7959
7959
  position: sticky;
7960
7960
  top: 0;
7961
7961
  z-index: 5;
7962
7962
  }
7963
7963
 
7964
- ._filters-list_1t4e8_7186 {
7964
+ ._filters-list_18odb_7186 {
7965
7965
  padding: 0;
7966
7966
  margin: 0;
7967
7967
  }
7968
- ._filters-list_1t4e8_7186 ol {
7968
+ ._filters-list_18odb_7186 ol {
7969
7969
  padding: 0;
7970
7970
  margin: 0;
7971
7971
  }
7972
7972
 
7973
- ._col-drag-column-icon_1t4e8_7195 {
7973
+ ._col-drag-column-icon_18odb_7195 {
7974
7974
  color: #6a767c;
7975
7975
  }
7976
7976
 
7977
- ._tabular-nums_1t4e8_7199 {
7977
+ ._tabular-nums_18odb_7199 {
7978
7978
  font-variant-numeric: tabular-nums;
7979
7979
  }`;
7980
7980
  document.head.appendChild(document.createElement("style")).appendChild(document.createTextNode(css));
7981
7981
  var styles_default = {
7982
- "contextPanel": "_contextPanel_1t4e8_7153",
7983
- "contextPanel--hidden": "_contextPanel--hidden_1t4e8_7162",
7984
- "contextPanelWrapper": "_contextPanelWrapper_1t4e8_7170",
7985
- "contextPanelBody": "_contextPanelBody_1t4e8_7175",
7986
- "contextPanel-stickyHeader": "_contextPanel-stickyHeader_1t4e8_7179",
7987
- "filters-list": "_filters-list_1t4e8_7186",
7988
- "col-drag-column-icon": "_col-drag-column-icon_1t4e8_7195",
7989
- "tabular-nums": "_tabular-nums_1t4e8_7199",
7990
- "ag-shake-left-to-right": "_ag-shake-left-to-right_1t4e8_369",
7991
- "spin": "_spin_1t4e8_1"
7982
+ "contextPanel": "_contextPanel_18odb_7153",
7983
+ "contextPanel--hidden": "_contextPanel--hidden_18odb_7162",
7984
+ "contextPanelWrapper": "_contextPanelWrapper_18odb_7170",
7985
+ "contextPanelBody": "_contextPanelBody_18odb_7175",
7986
+ "contextPanel-stickyHeader": "_contextPanel-stickyHeader_18odb_7179",
7987
+ "filters-list": "_filters-list_18odb_7186",
7988
+ "col-drag-column-icon": "_col-drag-column-icon_18odb_7195",
7989
+ "tabular-nums": "_tabular-nums_18odb_7199",
7990
+ "ag-shake-left-to-right": "_ag-shake-left-to-right_18odb_369",
7991
+ "spin": "_spin_18odb_1"
7992
7992
  };
7993
7993
 
7994
7994
  // src/utils/getCellValueTypographyProps.ts
@@ -8075,7 +8075,7 @@ var Renderer = ({
8075
8075
  var ButtonsCellRenderer = withDataTableRenderer(Renderer, "select");
8076
8076
 
8077
8077
  // src/utils/truncation.scss
8078
- var css2 = `._truncatingText_114ye_1 {
8078
+ var css2 = `._truncatingText_c077g_1 {
8079
8079
  white-space: normal;
8080
8080
  overflow: hidden;
8081
8081
  word-wrap: break-word;
@@ -8084,17 +8084,43 @@ var css2 = `._truncatingText_114ye_1 {
8084
8084
  -webkit-box-orient: vertical;
8085
8085
  -webkit-line-clamp: 1;
8086
8086
  }
8087
- ._truncatingText--md_114ye_10 {
8087
+ ._truncatingText--md_c077g_10 {
8088
8088
  -webkit-line-clamp: 2;
8089
8089
  }
8090
- ._truncatingText--lg_114ye_13 {
8090
+ ._truncatingText--lg_c077g_13 {
8091
8091
  -webkit-line-clamp: 3;
8092
+ }
8093
+ ._truncatingText--overflowVisible_c077g_16 {
8094
+ overflow: visible;
8095
+ }
8096
+
8097
+ ._extendClickableArea_c077g_20 {
8098
+ display: inline-block;
8099
+ position: relative;
8100
+ width: 100%;
8101
+ }
8102
+ ._extendClickableArea_c077g_20::before {
8103
+ content: "";
8104
+ position: absolute;
8105
+ top: 50%;
8106
+ left: 50%;
8107
+ width: 48px;
8108
+ height: 48px;
8109
+ transform: translate(-50%, -50%);
8110
+ pointer-events: auto;
8111
+ background: transparent;
8112
+ }
8113
+ ._extendClickableArea--rowHeightSm_c077g_36::before {
8114
+ height: 32px;
8092
8115
  }`;
8093
8116
  document.head.appendChild(document.createElement("style")).appendChild(document.createTextNode(css2));
8094
8117
  var truncation_default = {
8095
- "truncatingText": "_truncatingText_114ye_1",
8096
- "truncatingText--md": "_truncatingText--md_114ye_10",
8097
- "truncatingText--lg": "_truncatingText--lg_114ye_13"
8118
+ "truncatingText": "_truncatingText_c077g_1",
8119
+ "truncatingText--md": "_truncatingText--md_c077g_10",
8120
+ "truncatingText--lg": "_truncatingText--lg_c077g_13",
8121
+ "truncatingText--overflowVisible": "_truncatingText--overflowVisible_c077g_16",
8122
+ "extendClickableArea": "_extendClickableArea_c077g_20",
8123
+ "extendClickableArea--rowHeightSm": "_extendClickableArea--rowHeightSm_c077g_36"
8098
8124
  };
8099
8125
 
8100
8126
  // src/utils/ContactItem.tsx
@@ -52958,7 +52984,10 @@ globalObj.MouseEvent = typeof MouseEvent === "undefined" ? {} : MouseEvent;
52958
52984
  // src/CellRenderers/GroupCell.tsx
52959
52985
  var GroupCellRenderer2 = GroupCellRenderer;
52960
52986
  var cx6 = classnames__default.default.bind(truncation_default);
52987
+ var MIN_LINK_WIDTH = 48;
52961
52988
  var InternalLinkCellRenderer = ({ columnDefinition, isGroup, data, rowHeight, value }) => {
52989
+ const [isLinkWidthBelowMin, setIsLinkWidthBelowMin] = React76.useState(false);
52990
+ const linkRef = React76.useRef(null);
52962
52991
  const internalValue = value ? columnDefinition.getStringFormattedValue?.(value) : "";
52963
52992
  const typographyProps = getCellValueTypographyProps(
52964
52993
  columnDefinition.cellRendererParams?.typographyProps
@@ -52969,14 +52998,24 @@ var InternalLinkCellRenderer = ({ columnDefinition, isGroup, data, rowHeight, va
52969
52998
  "truncatingText",
52970
52999
  {
52971
53000
  "truncatingText--md": rowHeight === rowSize.md,
52972
- "truncatingText--lg": rowHeight === rowSize.lg
53001
+ "truncatingText--lg": rowHeight === rowSize.lg,
53002
+ "truncatingText--overflowVisible": isLinkWidthBelowMin
52973
53003
  }
52974
53004
  );
52975
53005
  if (isGroup) {
52976
53006
  return /* @__PURE__ */ React76__default.default.createElement(coreReact.Typography, { ...typographyProps, className, weight: "semibold" }, value);
52977
53007
  }
53008
+ React76.useEffect(() => {
53009
+ if (linkRef.current) {
53010
+ const { width } = linkRef.current.getBoundingClientRect();
53011
+ setIsLinkWidthBelowMin(width < MIN_LINK_WIDTH);
53012
+ }
53013
+ }, [internalValue]);
52978
53014
  const isExternalLink = columnDefinition.cellRendererParams.isExternalLink ?? false;
52979
53015
  const URL = columnDefinition.cellRendererParams.getURL(value, data);
53016
+ const extendClickableAreaClassNames = isLinkWidthBelowMin ? cx6("extendClickableArea", {
53017
+ "extendClickableArea--rowHeightSm": rowHeight === rowSize.sm
53018
+ }) : "";
52980
53019
  if (isExternalLink && value && URL) {
52981
53020
  return /* @__PURE__ */ React76__default.default.createElement(
52982
53021
  coreReact.Typography,
@@ -52996,7 +53035,7 @@ var InternalLinkCellRenderer = ({ columnDefinition, isGroup, data, rowHeight, va
52996
53035
  )
52997
53036
  );
52998
53037
  }
52999
- return URL ? /* @__PURE__ */ React76__default.default.createElement(coreReact.Typography, { ...typographyProps, className }, /* @__PURE__ */ React76__default.default.createElement(coreReact.Link, { href: URL }, internalValue)) : /* @__PURE__ */ React76__default.default.createElement(coreReact.Typography, { ...typographyProps }, internalValue);
53038
+ return URL ? /* @__PURE__ */ React76__default.default.createElement(coreReact.Typography, { ...typographyProps, className }, /* @__PURE__ */ React76__default.default.createElement(coreReact.Link, { href: URL, className: extendClickableAreaClassNames, ref: linkRef }, internalValue)) : /* @__PURE__ */ React76__default.default.createElement(coreReact.Typography, { ...typographyProps }, internalValue);
53000
53039
  };
53001
53040
  var LinkCellRenderer = withDataTableRenderer(
53002
53041
  InternalLinkCellRenderer,
@@ -53075,7 +53114,7 @@ var NumberCellEditor2 = withDataTableEditor(
53075
53114
  );
53076
53115
 
53077
53116
  // src/CellRenderers/peopleCellStyles.scss
53078
- var css3 = `._truncatingText_3wkw2_1 {
53117
+ var css3 = `._truncatingText_14qzu_1 {
53079
53118
  white-space: normal;
53080
53119
  overflow: hidden;
53081
53120
  word-wrap: break-word;
@@ -53084,33 +53123,59 @@ var css3 = `._truncatingText_3wkw2_1 {
53084
53123
  -webkit-box-orient: vertical;
53085
53124
  -webkit-line-clamp: 1;
53086
53125
  }
53087
- ._truncatingText--md_3wkw2_10 {
53126
+ ._truncatingText--md_14qzu_10 {
53088
53127
  -webkit-line-clamp: 2;
53089
53128
  }
53090
- ._truncatingText--lg_3wkw2_13 {
53129
+ ._truncatingText--lg_14qzu_13 {
53091
53130
  -webkit-line-clamp: 3;
53092
53131
  }
53132
+ ._truncatingText--overflowVisible_14qzu_16 {
53133
+ overflow: visible;
53134
+ }
53135
+
53136
+ ._extendClickableArea_14qzu_20 {
53137
+ display: inline-block;
53138
+ position: relative;
53139
+ width: 100%;
53140
+ }
53141
+ ._extendClickableArea_14qzu_20::before {
53142
+ content: "";
53143
+ position: absolute;
53144
+ top: 50%;
53145
+ left: 50%;
53146
+ width: 48px;
53147
+ height: 48px;
53148
+ transform: translate(-50%, -50%);
53149
+ pointer-events: auto;
53150
+ background: transparent;
53151
+ }
53152
+ ._extendClickableArea--rowHeightSm_14qzu_36::before {
53153
+ height: 32px;
53154
+ }
53093
53155
 
53094
- ._inlineListItems_3wkw2_17 {
53156
+ ._inlineListItems_14qzu_40 {
53095
53157
  list-style: none;
53096
53158
  margin: 0;
53097
53159
  padding: 0;
53098
53160
  }
53099
- ._inlineListItems_3wkw2_17 > li {
53161
+ ._inlineListItems_14qzu_40 > li {
53100
53162
  display: inline;
53101
53163
  }
53102
53164
 
53103
- ._dynamicRowHeightSpacing_3wkw2_26 {
53165
+ ._dynamicRowHeightSpacing_14qzu_49 {
53104
53166
  margin-top: 8px;
53105
53167
  margin-bottom: 8px;
53106
53168
  }`;
53107
53169
  document.head.appendChild(document.createElement("style")).appendChild(document.createTextNode(css3));
53108
53170
  var peopleCellStyles_default = {
53109
- "truncatingText": "_truncatingText_3wkw2_1",
53110
- "truncatingText--md": "_truncatingText--md_3wkw2_10",
53111
- "truncatingText--lg": "_truncatingText--lg_3wkw2_13",
53112
- "inlineListItems": "_inlineListItems_3wkw2_17",
53113
- "dynamicRowHeightSpacing": "_dynamicRowHeightSpacing_3wkw2_26"
53171
+ "truncatingText": "_truncatingText_14qzu_1",
53172
+ "truncatingText--md": "_truncatingText--md_14qzu_10",
53173
+ "truncatingText--lg": "_truncatingText--lg_14qzu_13",
53174
+ "truncatingText--overflowVisible": "_truncatingText--overflowVisible_14qzu_16",
53175
+ "extendClickableArea": "_extendClickableArea_14qzu_20",
53176
+ "extendClickableArea--rowHeightSm": "_extendClickableArea--rowHeightSm_14qzu_36",
53177
+ "inlineListItems": "_inlineListItems_14qzu_40",
53178
+ "dynamicRowHeightSpacing": "_dynamicRowHeightSpacing_14qzu_49"
53114
53179
  };
53115
53180
 
53116
53181
  // src/CellRenderers/PeopleCell.tsx
@@ -82735,7 +82800,7 @@ var FILTERS_GROUP_EXPANDABLE_AREA_VERTICAL_MARGIN = coreReact.spacing.md;
82735
82800
  var FILTERS_GROUP_ITEM_HEIGHT = 60;
82736
82801
  var ITEMS_IN_FILTERS_GROUP = 5;
82737
82802
  var FILTERS_GROUP_EXPANDABLE_AREA_HEIGHT = (FILTERS_GROUP_ITEM_HEIGHT + coreReact.spacing.xl) * ITEMS_IN_FILTERS_GROUP + BORDER_WIDTH;
82738
- var StyledPanelSection = styled4__default.default(coreReact.Panel.Section)`
82803
+ var StyledPanelSection = styled3__default.default(coreReact.Panel.Section)`
82739
82804
  // Filters Group container styles
82740
82805
  &.filters-list-group-section {
82741
82806
  padding-bottom: ${FILTERS_GROUP_VERTICAL_MARGIN}px;
@@ -83025,899 +83090,807 @@ var ConfigPanelButton = () => {
83025
83090
  )
83026
83091
  );
83027
83092
  };
83028
- function getFilterTokenText(columnDefinition, filterValue) {
83029
- if (columnDefinition?.filterProps?.getFilterTokenText) {
83030
- return columnDefinition?.filterProps?.getFilterTokenText?.({
83031
- headerName: columnDefinition?.headerName || "",
83032
- value: filterValue
83033
- });
83093
+ var QuickFilterLabel = React76__default.default.forwardRef(({ enabled, ...props }, ref) => {
83094
+ return /* @__PURE__ */ React76__default.default.createElement(StyledQuickFilterLabel, { $enabled: enabled }, /* @__PURE__ */ React76__default.default.createElement(coreReact.SelectButton, { ref, ...props }));
83095
+ });
83096
+ var StyledQuickFilterLabel = styled3__default.default.div`
83097
+ ${coreReact.StyledSelectButton} {
83098
+ width: auto;
83099
+ max-width: 380px;
83100
+ ${({ $enabled }) => $enabled && styled3.css`
83101
+ background: ${coreReact.colors.blue96};
83102
+ border-color: ${coreReact.colors.blue96};
83103
+ font-weight: ${coreReact.typographyWeights.semibold};
83104
+ &:hover {
83105
+ background: ${coreReact.colors.blue90};
83106
+ border-color: ${coreReact.colors.blue90};
83107
+ }
83108
+ ${coreReact.StyledSelectButtonLabel} {
83109
+ color: ${coreReact.colors.blue45};
83110
+ }
83111
+ ${coreReact.StyledButton} {
83112
+ color: ${coreReact.colors.blue45};
83113
+ &:hover {
83114
+ background: white;
83115
+ }
83116
+ }
83117
+ ${coreReact.StyledSelectArrow} {
83118
+ svg {
83119
+ fill: ${coreReact.colors.blue45};
83120
+ }
83121
+ }
83122
+ `}
83034
83123
  }
83035
- if (columnDefinition.filterRenderer === DateFilterRenderer_default) {
83124
+ `;
83125
+
83126
+ // src/QuickFilterRenderers/DateQuickFilterRenderer.tsx
83127
+ function getPlacement2(currentSelectionType, position) {
83128
+ if (currentSelectionType === "single") {
83129
+ return "bottom-left";
83130
+ }
83131
+ if (position === "start") {
83132
+ return "bottom-left";
83133
+ }
83134
+ return "bottom-right";
83135
+ }
83136
+ var OptionalDateTimeProvider2 = ({ timeZone, children }) => {
83137
+ return timeZone ? /* @__PURE__ */ React76__default.default.createElement(coreReact.DateTimeProvider, { timeZone }, children) : /* @__PURE__ */ React76__default.default.createElement(React76__default.default.Fragment, null, children);
83138
+ };
83139
+ var DateFilterSelect2 = React76__default.default.forwardRef(
83140
+ ({
83141
+ afterHide,
83142
+ selectionType = "either",
83143
+ headerName,
83144
+ disabled,
83145
+ onChange,
83146
+ position,
83147
+ selectedValue,
83148
+ setSelectionType = () => {
83149
+ }
83150
+ }, ref) => {
83151
+ const dateTime = coreReact.useDateTime();
83152
+ const { start, end } = selectedValue;
83153
+ const selectedDate = (position === "start" ? start : end) ?? void 0;
83154
+ const [displayed, setDisplayed2] = React76__default.default.useState(
83155
+ // @ts-ignore
83156
+ selectedDate || dateTime.newDate()
83157
+ );
83158
+ React76__default.default.useEffect(() => {
83159
+ if (dateFns.isDate(start) && !dateFns.isDate(end) && position === "end") {
83160
+ setDisplayed2(start);
83161
+ }
83162
+ if (!dateFns.isDate(start) && dateFns.isDate(end) && position === "start") {
83163
+ setDisplayed2(end);
83164
+ }
83165
+ }, [position, selectedValue]);
83166
+ function onClear() {
83167
+ onChange(null, position);
83168
+ }
83169
+ const clearRef = React76__default.default.useRef(null);
83170
+ const monthRef = React76__default.default.useRef(null);
83171
+ const yearRef = React76__default.default.useRef(null);
83172
+ const overlay = /* @__PURE__ */ React76__default.default.createElement(
83173
+ DateFilterOverlay,
83174
+ {
83175
+ displayDate: displayed,
83176
+ selectionType,
83177
+ monthRef,
83178
+ onSelect: (date) => {
83179
+ onChange(date, position);
83180
+ },
83181
+ position,
83182
+ selectedValue,
83183
+ setDisplayDate: setDisplayed2,
83184
+ setSelectionType,
83185
+ yearRef
83186
+ }
83187
+ );
83036
83188
  return /* @__PURE__ */ React76__default.default.createElement(
83037
- OptionalDateTimeProvider,
83189
+ coreReact.OverlayTrigger,
83038
83190
  {
83039
- timeZone: columnDefinition.timeZone
83191
+ afterHide,
83192
+ autoFocus: true,
83193
+ beforeShow: (e) => {
83194
+ if (coreReact.isEventSource(clearRef, e)) {
83195
+ return false;
83196
+ }
83197
+ return true;
83198
+ },
83199
+ clickOutsideIgnoreRefs: [monthRef, yearRef],
83200
+ overlay,
83201
+ placement: getPlacement2(selectionType, position),
83202
+ ref,
83203
+ restoreFocusOnHide: true,
83204
+ role: "dialog"
83040
83205
  },
83041
83206
  /* @__PURE__ */ React76__default.default.createElement(
83042
- DateFilterTokenText,
83207
+ DateQuickFilterLabel,
83043
83208
  {
83044
- headerName: columnDefinition.headerName,
83045
- value: filterValue
83209
+ headerName,
83210
+ onClear,
83211
+ value: selectedDate,
83212
+ disabled
83046
83213
  }
83047
83214
  )
83048
83215
  );
83049
83216
  }
83050
- if (columnDefinition.filterRenderer === NumberFilterRenderer) {
83051
- return columnDefinition?.headerName;
83052
- }
83053
- if (Array.isArray(filterValue)) {
83054
- if (filterValue.length === 0) {
83055
- return columnDefinition?.headerName;
83056
- }
83057
- if (filterValue.length === 1) {
83058
- return `${columnDefinition?.headerName}: ${getLabel(
83059
- columnDefinition.filterProps?.getLabel,
83060
- filterValue[0]
83061
- )}`;
83217
+ );
83218
+ function DateFilter3({
83219
+ // TODO: talk to design about potential loading UX for this.
83220
+ // core DateSelect doesn't have it
83221
+ // loading,
83222
+ headerName,
83223
+ onChange,
83224
+ selectionType = "either",
83225
+ value,
83226
+ disabled,
83227
+ ...props
83228
+ }) {
83229
+ const [selectedValue, setSelectedValue] = React76__default.default.useState({
83230
+ type: selectionType === "either" ? "range" : selectionType
83231
+ });
83232
+ React76__default.default.useEffect(() => {
83233
+ const parsedValue = value.map((date) => {
83234
+ if (dateFns.isDate(date)) {
83235
+ return date;
83236
+ }
83237
+ return dateFns.parseISO(String(date));
83238
+ });
83239
+ const type = dateFns.isSameDay(parsedValue[0], parsedValue[1]) ? "single" : "range";
83240
+ setSelectedValue({ type, start: parsedValue[0], end: parsedValue[1] });
83241
+ }, [value]);
83242
+ const dateRangeEndDateRef = React76__default.default.useRef(null);
83243
+ function dateFilterOnChange(date, position) {
83244
+ const newValue = getValueFromSelection(selectedValue, date, position);
83245
+ setSelectedValue(newValue);
83246
+ if (isValidDateSelection(newValue)) {
83247
+ onChange(
83248
+ newValue.start || newValue.end ? [
83249
+ newValue.start,
83250
+ newValue.type === "single" ? newValue.start : newValue.end
83251
+ ] : []
83252
+ );
83062
83253
  }
83063
- return `${columnDefinition?.headerName}: (${filterValue.length})`;
83064
- }
83065
- return columnDefinition?.headerName;
83066
- }
83067
- var ensureArray = (input) => {
83068
- if (input === null) {
83069
- return [];
83070
- }
83071
- return Array.isArray(input) ? input : [input];
83072
- };
83073
- var FiltersPanelToggleButton = ({ hasSelectedFilters, hasDefinedFilters }) => {
83074
- const I18n = coreReact.useI18nContext();
83075
- const { contextPanel } = useInternalTableContext();
83076
- const hasNoContent = useTableHasNoContent();
83077
- if (!hasDefinedFilters) {
83078
- return null;
83079
83254
  }
83080
- return /* @__PURE__ */ React76__default.default.createElement(
83081
- EmptyResultsControlTooltip,
83082
- {
83083
- featureI18nKey: "featureFilter",
83084
- enabled: hasNoContent
83255
+ const onSelectionTypeChange = React76__default.default.useCallback(
83256
+ (newSelectionType) => {
83257
+ setSelectedValue({ type: newSelectionType });
83085
83258
  },
83086
- /* @__PURE__ */ React76__default.default.createElement(
83087
- coreReact.ToggleButton,
83088
- {
83089
- "data-qa": "data-table-show-filters-button",
83090
- disabled: hasNoContent,
83091
- icon: /* @__PURE__ */ React76__default.default.createElement(FilterIcon, null),
83092
- onClick: () => {
83093
- if (contextPanel.content === "filters") {
83094
- contextPanel.hide();
83095
- } else {
83096
- contextPanel.show("filters");
83097
- }
83098
- },
83099
- selected: contextPanel.content === "filters"
83100
- },
83101
- hasSelectedFilters ? I18n.t("dataTable.filters.moreFilters") : I18n.t("dataTable.filters.filters")
83102
- )
83259
+ [setSelectedValue]
83103
83260
  );
83104
- };
83105
- var ServerSideFiltersPanelToggleButton = () => {
83106
- const {
83107
- filterStorage: { hasDefinedFilters, hasSelectedFilters }
83108
- } = useInternalTableContext();
83109
- return /* @__PURE__ */ React76__default.default.createElement(
83110
- FiltersPanelToggleButton,
83261
+ function dateRangeAfterHide() {
83262
+ if (selectedValue.type === "range" && dateFns.isDate(selectedValue.start) && !dateFns.isDate(selectedValue.end)) {
83263
+ dateRangeEndDateRef.current?.click();
83264
+ }
83265
+ return true;
83266
+ }
83267
+ return /* @__PURE__ */ React76__default.default.createElement(coreReact.FlexList, { space: "xs", "data-qa": props["data-qa"] }, /* @__PURE__ */ React76__default.default.createElement(
83268
+ DateFilterSelect2,
83111
83269
  {
83112
- hasDefinedFilters,
83113
- hasSelectedFilters
83270
+ afterHide: dateRangeAfterHide,
83271
+ headerName,
83272
+ onChange: dateFilterOnChange,
83273
+ position: "start",
83274
+ selectedValue,
83275
+ selectionType,
83276
+ setSelectionType: onSelectionTypeChange,
83277
+ disabled
83114
83278
  }
83115
- );
83116
- };
83117
- var ClientSideFiltersPanelToggleButton = () => {
83118
- const { filterState } = useInternalTableContext();
83119
- const activeFilters = React76__default.default.useMemo(() => {
83120
- return filterState.allAvailableFilters.filter(({ instance }) => {
83121
- return instance.isFilterActive();
83122
- });
83123
- }, [filterState.allAvailableFilters]);
83124
- return /* @__PURE__ */ React76__default.default.createElement(
83125
- FiltersPanelToggleButton,
83279
+ ), selectedValue.type === "range" && /* @__PURE__ */ React76__default.default.createElement(
83280
+ DateFilterSelect2,
83126
83281
  {
83127
- hasDefinedFilters: filterState.allAvailableFilters.length > 0,
83128
- hasSelectedFilters: activeFilters.length > 0
83282
+ headerName,
83283
+ onChange: dateFilterOnChange,
83284
+ position: "end",
83285
+ ref: dateRangeEndDateRef,
83286
+ selectedValue,
83287
+ selectionType,
83288
+ setSelectionType: onSelectionTypeChange,
83289
+ disabled
83129
83290
  }
83130
- );
83131
- };
83132
-
83133
- // src/QuickControls/QuickFilters.tsx
83134
- var FilterIcon = () => {
83135
- return /* @__PURE__ */ React76__default.default.createElement(
83136
- "svg",
83291
+ ));
83292
+ }
83293
+ function ServerSideQuickDateFilterRenderer({
83294
+ columnDefinition,
83295
+ disabled
83296
+ }) {
83297
+ const { onChange, value = [] } = useServerSideFilter({
83298
+ columnDefinition
83299
+ });
83300
+ const colDef = columnDefinition;
83301
+ return /* @__PURE__ */ React76__default.default.createElement(OptionalDateTimeProvider2, { timeZone: colDef.timeZone }, /* @__PURE__ */ React76__default.default.createElement(
83302
+ DateFilter3,
83137
83303
  {
83138
- focusable: false,
83139
- width: "16",
83140
- height: "16",
83141
- viewBox: "0 0 20 20",
83142
- fill: "none",
83143
- xmlns: "http://www.w3.org/2000/svg"
83144
- },
83145
- /* @__PURE__ */ React76__default.default.createElement(
83146
- "path",
83147
- {
83148
- fillRule: "evenodd",
83149
- clipRule: "evenodd",
83150
- d: "M3 5V7H17V5H3ZM8 15H12V13H8V15ZM15 11H5V9H15V11Z",
83151
- fill: "currentColor"
83152
- }
83153
- )
83304
+ selectionType: colDef.filterProps?.selectionType ?? "either",
83305
+ headerName: colDef.headerName,
83306
+ disabled,
83307
+ onChange: (selected) => {
83308
+ onChange(
83309
+ selected.map((date) => {
83310
+ return date ? {
83311
+ // future extensions can go here (month, day, year keys etc)
83312
+ date
83313
+ } : (
83314
+ // TODO: refactor out date-specific getId stuff from useServerSideFilterStorage
83315
+ date
83316
+ );
83317
+ })
83318
+ );
83319
+ },
83320
+ value: value.map((option) => option ? option.date : option)
83321
+ }
83322
+ ));
83323
+ }
83324
+ var QuickDateFilterRenderer = (props) => {
83325
+ const { onServerSideDataRequest } = useInternalTableContext();
83326
+ if (onServerSideDataRequest) {
83327
+ return /* @__PURE__ */ React76__default.default.createElement(ServerSideQuickDateFilterRenderer, { ...props });
83328
+ }
83329
+ logger.error(
83330
+ "Warning: Date Filters are currently only implemented for the serverside row model"
83154
83331
  );
83332
+ return null;
83155
83333
  };
83156
- var StyledFilterTokenWrapper = styled4__default.default.div`
83157
- ${coreReact.UNSAFE_StyledFilterTokenLabel} {
83158
- font-weight: ${coreReact.typographyWeights.semibold};
83334
+ var dateInputLocales = {
83335
+ "fr-CA": {
83336
+ placeholders: { day: "jj", month: "mm", year: "aaaa" }
83337
+ },
83338
+ "fr-FR": {
83339
+ placeholders: { day: "jj", month: "mm", year: "aaaa" }
83340
+ },
83341
+ es: {
83342
+ placeholders: { day: "dd", month: "mm", year: "aaaa" }
83343
+ },
83344
+ "es-ES": {
83345
+ placeholders: { day: "dd", month: "mm", year: "aaaa" }
83346
+ },
83347
+ pt: {
83348
+ placeholders: { day: "dd", month: "mm", year: "aaaa" }
83349
+ },
83350
+ "is-IS": {
83351
+ placeholders: { day: "dd", month: "mm", year: "\xE1\xE1\xE1\xE1" }
83352
+ },
83353
+ "de-DE": {
83354
+ placeholders: { day: "tt", month: "MM", year: "jjjj" }
83159
83355
  }
83160
- `;
83161
- var ClientSideQuickFilters = ({ overlayMatchesTriggerWidth }) => {
83162
- const { tableRef, filterState, getColumnDefinition } = useInternalTableContext();
83163
- const hasNoContent = useTableHasNoContent();
83164
- const { quickFilters, tokens } = React76__default.default.useMemo(() => {
83165
- return filterState.allAvailableFilters.reduce(
83166
- (acc, filter) => {
83167
- const colDef = getColumnDefinition(filter.field);
83168
- if (!colDef) {
83169
- return acc;
83170
- }
83171
- if (colDef?.quickFilterRenderer) {
83172
- return { ...acc, quickFilters: [...acc.quickFilters, filter] };
83173
- } else if (filter.instance.isFilterActive()) {
83174
- return { ...acc, tokens: [...acc.tokens, filter] };
83175
- }
83176
- return acc;
83177
- },
83178
- {
83179
- quickFilters: [],
83180
- tokens: []
83181
- }
83182
- );
83183
- }, [filterState.allAvailableFilters, getColumnDefinition]);
83184
- const isEmpty2 = quickFilters.length === 0 && tokens.length === 0;
83185
- return isEmpty2 ? null : /* @__PURE__ */ React76__default.default.createElement(
83186
- coreReact.FlexList,
83187
- {
83188
- padding: "xs none",
83189
- size: "none",
83190
- alignItems: "center",
83191
- wrap: "wrap",
83192
- gap: "sm"
83193
- },
83194
- quickFilters.map((filter) => {
83195
- const colDef = getColumnDefinition(filter.field);
83196
- const QuickFilter = colDef?.quickFilterRenderer;
83197
- if (!colDef || !QuickFilter) {
83198
- return null;
83199
- }
83200
- return /* @__PURE__ */ React76__default.default.createElement(
83201
- EmptyResultsControlTooltip,
83202
- {
83203
- featureI18nKey: "featureQuickFilter",
83204
- enabled: hasNoContent
83205
- },
83206
- /* @__PURE__ */ React76__default.default.createElement(
83207
- QuickFilter,
83208
- {
83209
- key: filter.field,
83210
- filter,
83211
- columnDefinition: colDef,
83212
- disabled: hasNoContent,
83213
- onChange: (value) => tableRef?.current?.applyListFilter(filter.field, value),
83214
- onRemove: () => tableRef?.current?.removeFilter(filter.field),
83215
- overlayMatchesTriggerWidth
83216
- }
83217
- )
83218
- );
83219
- }),
83220
- tokens.map((filter) => {
83221
- const colDef = getColumnDefinition(filter.field);
83222
- if (!colDef) {
83223
- return null;
83224
- }
83225
- return /* @__PURE__ */ React76__default.default.createElement(StyledFilterTokenWrapper, { key: filter.field }, /* @__PURE__ */ React76__default.default.createElement(coreReact.UNSAFE_FilterToken, null, /* @__PURE__ */ React76__default.default.createElement(coreReact.UNSAFE_FilterToken.Label, null, getFilterTokenText(colDef, filter.filterValues)), /* @__PURE__ */ React76__default.default.createElement(
83226
- coreReact.UNSAFE_FilterToken.Remove,
83227
- {
83228
- onClick: () => tableRef?.current?.removeFilter(filter.field)
83229
- }
83230
- )));
83231
- })
83232
- );
83233
83356
  };
83234
- var ServerSideQuickFilters = ({ overlayMatchesTriggerWidth }) => {
83235
- const {
83236
- filterStorage: {
83237
- hasDefinedFilters,
83238
- onClearFilter,
83239
- possibleFilters,
83240
- selectedFilters,
83241
- getListFilter
83242
- },
83243
- getColumnDefinition
83244
- } = useInternalTableContext();
83245
- const hasNoContent = useTableHasNoContent();
83246
- const { quickFilterNames, tokenNames } = React76__default.default.useMemo(() => {
83247
- const appliedFilterNames = Object.keys(selectedFilters);
83248
- const isActiveFilter = (filterName) => appliedFilterNames.includes(filterName);
83249
- return possibleFilters.reduce(
83250
- (acc, filterName) => {
83251
- const colDef = getColumnDefinition(filterName);
83252
- if (!colDef) {
83253
- return acc;
83254
- }
83255
- if (colDef?.quickFilterRenderer) {
83256
- return {
83257
- ...acc,
83258
- quickFilterNames: [...acc.quickFilterNames, filterName]
83259
- };
83260
- } else if (isActiveFilter(filterName)) {
83261
- return { ...acc, tokenNames: [...acc.tokenNames, filterName] };
83262
- }
83263
- return acc;
83264
- },
83357
+ var DateQuickFilterLabel = React76__default.default.forwardRef(({ headerName, onClear, value, disabled }, ref) => {
83358
+ const dateTime = coreReact.useDateTime();
83359
+ const i18n = coreReact.useI18nContext();
83360
+ const placeholders = dateInputLocales[i18n.locale]?.placeholders || {
83361
+ day: "dd",
83362
+ month: "mm",
83363
+ year: "yyyy"
83364
+ };
83365
+ if (value !== void 0 && dateFns.isDate(value)) {
83366
+ return /* @__PURE__ */ React76__default.default.createElement(
83367
+ QuickFilterLabel,
83265
83368
  {
83266
- quickFilterNames: [],
83267
- tokenNames: []
83369
+ enabled: true,
83370
+ disabled,
83371
+ label: `${headerName}: ${dateTime.format(value, "numeric-date")}`,
83372
+ onClear,
83373
+ ref
83268
83374
  }
83269
83375
  );
83270
- }, [possibleFilters, selectedFilters, getColumnDefinition]);
83271
- if (!hasDefinedFilters) {
83272
- return null;
83273
83376
  }
83274
- const isEmpty2 = quickFilterNames.length === 0 && tokenNames.length === 0;
83275
- return isEmpty2 ? null : /* @__PURE__ */ React76__default.default.createElement(
83276
- coreReact.FlexList,
83377
+ return /* @__PURE__ */ React76__default.default.createElement(
83378
+ QuickFilterLabel,
83277
83379
  {
83278
- padding: "xs none",
83279
- size: "none",
83280
- alignItems: "center",
83281
- wrap: "wrap",
83282
- gap: "sm",
83283
- "data-qa": "data-table-quick-filters"
83284
- },
83285
- quickFilterNames.map((fieldName) => {
83286
- const colDef = getColumnDefinition(fieldName);
83287
- const QuickFilter = colDef?.quickFilterRenderer;
83288
- if (!colDef || !QuickFilter) {
83289
- return null;
83290
- }
83291
- return /* @__PURE__ */ React76__default.default.createElement(
83292
- EmptyResultsControlTooltip,
83293
- {
83294
- featureI18nKey: "featureQuickFilter",
83295
- enabled: hasNoContent
83296
- },
83297
- /* @__PURE__ */ React76__default.default.createElement(
83298
- QuickFilter,
83299
- {
83300
- key: fieldName,
83301
- columnDefinition: colDef,
83302
- disabled: hasNoContent,
83303
- overlayMatchesTriggerWidth
83304
- }
83305
- )
83306
- );
83307
- }),
83308
- tokenNames.map((fieldName) => {
83309
- const colDef = getColumnDefinition(fieldName);
83310
- if (!colDef) {
83311
- return null;
83312
- }
83313
- const filter = getListFilter(fieldName);
83314
- return /* @__PURE__ */ React76__default.default.createElement(StyledFilterTokenWrapper, { key: fieldName }, /* @__PURE__ */ React76__default.default.createElement(coreReact.UNSAFE_FilterToken, null, /* @__PURE__ */ React76__default.default.createElement(coreReact.UNSAFE_FilterToken.Label, null, getFilterTokenText(
83315
- colDef,
83316
- colDef.filterRenderer === DateFilterRenderer_default ? filter.value : filter.selected
83317
- )), /* @__PURE__ */ React76__default.default.createElement(
83318
- coreReact.UNSAFE_FilterToken.Remove,
83319
- {
83320
- "data-qa": "data-table-quick-filter-remove-token",
83321
- onClick: () => onClearFilter(fieldName)
83322
- }
83323
- )));
83324
- })
83325
- );
83326
- };
83327
- var QuickFilters = ({ overlayMatchesTriggerWidth }) => {
83328
- const { onServerSideDataRequest } = useInternalTableContext();
83329
- if (onServerSideDataRequest) {
83330
- return /* @__PURE__ */ React76__default.default.createElement(
83331
- ServerSideQuickFilters,
83332
- {
83333
- overlayMatchesTriggerWidth
83334
- }
83335
- );
83336
- }
83337
- return /* @__PURE__ */ React76__default.default.createElement(
83338
- ClientSideQuickFilters,
83339
- {
83340
- overlayMatchesTriggerWidth
83380
+ enabled: false,
83381
+ disabled,
83382
+ label: `${headerName}: ${globalizationToolkit.getDatePlaceholder(i18n.locale, placeholders)}`,
83383
+ ref
83341
83384
  }
83342
83385
  );
83386
+ });
83387
+ var DateQuickFilterRenderer_default = QuickDateFilterRenderer;
83388
+ var defaultGetId2 = (option) => option?.id;
83389
+ var defaultGetLabel2 = (option) => {
83390
+ return option?.label ?? option?.name ?? option;
83343
83391
  };
83344
- var FiltersPanelButton = () => {
83345
- const { onServerSideDataRequest } = useInternalTableContext();
83346
- if (onServerSideDataRequest) {
83347
- return /* @__PURE__ */ React76__default.default.createElement(ServerSideFiltersPanelToggleButton, null);
83348
- }
83349
- return /* @__PURE__ */ React76__default.default.createElement(ClientSideFiltersPanelToggleButton, null);
83392
+ var useSuperSelectOptionAsValueWorkaround = ({
83393
+ originValue,
83394
+ originOptions,
83395
+ getId: getId3 = defaultGetId2,
83396
+ loading
83397
+ }) => {
83398
+ const isValueFromOptions = React76__default.default.useRef(false);
83399
+ const getValueFromOptions = () => {
83400
+ const valueIds = originValue.map(getId3);
83401
+ isValueFromOptions.current = true;
83402
+ return originOptions.filter((option) => valueIds.includes(getId3(option)));
83403
+ };
83404
+ const hasOptions = originOptions.length > 0 && !loading;
83405
+ const hasValue = originValue?.length > 0;
83406
+ const options = !hasOptions && hasValue ? originValue : originOptions;
83407
+ const value = !hasOptions ? originValue : isValueFromOptions.current ? originValue : getValueFromOptions();
83408
+ return {
83409
+ options,
83410
+ value,
83411
+ getOptionValue: (option) => option
83412
+ };
83350
83413
  };
83351
- var RowGroupSelector = ({ localeText }) => {
83352
- const {
83353
- columnDefinitions: _columnDefinitions,
83354
- columnApi,
83355
- gridApi,
83356
- tableRef
83357
- } = useInternalTableContext();
83358
- const hasNoContent = useTableHasNoContent();
83359
- const [columnDefinitions, setColumnDefinitions] = React76__default.default.useState(_columnDefinitions);
83360
- const groupableColumns = React76__default.default.useMemo(
83361
- () => mapColumnsToOptions(
83362
- columnDefinitions.filter((column2) => column2.enableRowGroup)
83363
- ),
83364
- [columnDefinitions]
83365
- );
83366
- const groupedColumns = React76__default.default.useMemo(() => {
83367
- const rowGrouping = columnApi?.getRowGroupColumns() ?? [];
83368
- return rowGrouping.map((column2) => {
83369
- const colDef = column2.getColDef();
83370
- return transformToColumnDefinition(colDef);
83371
- });
83372
- }, [columnDefinitions]);
83373
- const selectedColumns = React76__default.default.useMemo(
83374
- () => mapColumnsToOptions(groupedColumns),
83375
- [groupedColumns]
83376
- );
83377
- const onGroupedClear = React76__default.default.useCallback(() => {
83378
- tableRef?.current?.setRowGrouping([]);
83379
- }, [tableRef]);
83380
- const onGroupedRowChange = React76__default.default.useCallback(
83381
- (newValue) => {
83382
- const fields = newValue.map((val) => {
83383
- return val.id;
83384
- });
83385
- if (!ramda.equals(selectedColumns, newValue)) {
83386
- tableRef?.current?.setRowGrouping(fields);
83387
- }
83388
- },
83389
- [selectedColumns]
83390
- );
83391
- React76__default.default.useEffect(() => {
83392
- function onDisplayedColumnsChanged(event) {
83393
- const agColumnDefs = event.api.getColumnDefs();
83394
- if (agColumnDefs?.length) {
83395
- const flattenedAgColDefs = flattenColDefs(event.api.getColumnDefs());
83396
- const dataTableColumnDefinitions = flattenedAgColDefs.map(
83397
- transformToColumnDefinition
83398
- );
83399
- setColumnDefinitions(dataTableColumnDefinitions);
83400
- }
83401
- }
83402
- gridApi?.addEventListener(
83403
- "displayedColumnsChanged",
83404
- onDisplayedColumnsChanged
83405
- );
83406
- return () => {
83407
- removeEventListenerFromGrid(
83408
- "displayedColumnsChanged",
83409
- onDisplayedColumnsChanged,
83410
- gridApi
83414
+ var LocationQuickFilterOverlay = React76__default.default.forwardRef(
83415
+ ({
83416
+ getId: getId3,
83417
+ getLabel: getLabel3,
83418
+ loading,
83419
+ onSelect: _onSelect,
83420
+ onSelectAll,
83421
+ onSelectSublocations,
83422
+ enableSublocations,
83423
+ selectState,
83424
+ options,
83425
+ disabledOptions,
83426
+ columnDefinition,
83427
+ value
83428
+ }, ref) => {
83429
+ if (value && !Array.isArray(value)) {
83430
+ logger.warn(
83431
+ "a value was set that is not compatible with this LocationQuickFilterRenderer"
83411
83432
  );
83433
+ return null;
83434
+ }
83435
+ const [items, setItems] = React76__default.default.useState(options);
83436
+ const [searching, setSearching] = React76__default.default.useState(false);
83437
+ const menuRef = React76__default.default.useRef(null);
83438
+ const { menuProps, menuNavigationTriggerProps } = coreReact.UNSAFE_useMenuImperativeControlNavigation(menuRef);
83439
+ const I18n = coreReact.useI18nContext();
83440
+ const selectAllOption = {
83441
+ label: I18n.t("dataTable.filters.locationFilter.selectAll"),
83442
+ id: "select_all"
83412
83443
  };
83413
- }, [gridApi]);
83414
- if (groupableColumns.length === 0) {
83415
- return null;
83416
- }
83417
- return /* @__PURE__ */ React76__default.default.createElement(
83418
- EmptyResultsControlTooltip,
83419
- {
83420
- featureI18nKey: "featureGroupBy",
83421
- enabled: hasNoContent
83422
- },
83423
- /* @__PURE__ */ React76__default.default.createElement(
83424
- labsGroupBySelect.GroupBySelect,
83425
- {
83426
- isDisabled: hasNoContent,
83427
- localeText,
83428
- onBlur: onGroupedRowChange,
83429
- onClear: onGroupedClear,
83430
- options: groupableColumns,
83431
- selected: selectedColumns
83444
+ const includeSublocationOption = {
83445
+ label: I18n.t("dataTable.filters.locationFilter.includeSublocations"),
83446
+ id: "include_sublocations"
83447
+ };
83448
+ const onSelect = (selection) => {
83449
+ if (selection.item.id === selectAllOption.id) {
83450
+ return onSelectAll();
83432
83451
  }
83433
- )
83434
- );
83435
- };
83436
- function mapColumnsToOptions(columnDefinitions) {
83437
- return columnDefinitions.map((col) => {
83438
- return {
83439
- label: col.headerName,
83440
- id: col.field,
83441
- key: col.field,
83442
- group: col.columnGroupName
83452
+ if (selection.item.id === includeSublocationOption.id) {
83453
+ _onSelect(selection);
83454
+ return onSelectSublocations();
83455
+ }
83456
+ return _onSelect(selection);
83443
83457
  };
83444
- });
83445
- }
83446
- var cx21 = classnames__default.default.bind(quickControlsStyles_default);
83447
- var ClientSideSearch = ({
83448
- onSearch,
83449
- placeholder
83450
- }) => {
83451
- const [internalValue, setInternalValue] = React76__default.default.useState("");
83452
- const { tableRef } = useInternalTableContext();
83453
- const hasNoContent = useTableHasNoContent();
83454
- const I18n = coreReact.useI18nContext();
83455
- const debouncedSetSearchValue = React76__default.default.useCallback(
83456
- debounce5__default.default((value) => {
83457
- tableRef?.current?.setSearchValue(value);
83458
- }, 250),
83459
- [tableRef?.current?.setSearchValue]
83460
- );
83461
- const onChange = React76__default.default.useCallback(
83462
- (value, event) => {
83463
- setInternalValue(value);
83464
- if (onSearch) {
83465
- onSearch(event);
83458
+ function defaultOnSearch(e) {
83459
+ if (e.target.value === "") {
83460
+ setSearching(false);
83461
+ setItems(options);
83466
83462
  } else {
83467
- debouncedSetSearchValue(value);
83463
+ setSearching(true);
83464
+ setItems(
83465
+ options.filter(
83466
+ (item) => getLabel3(item).toLowerCase().includes(e.target.value.toLowerCase())
83467
+ )
83468
+ );
83468
83469
  }
83469
- },
83470
- [debouncedSetSearchValue, onSearch]
83471
- );
83472
- return /* @__PURE__ */ React76__default.default.createElement(EmptyResultsControlTooltip, { hasSearch: true, enabled: hasNoContent }, /* @__PURE__ */ React76__default.default.createElement(
83473
- coreReact.Typeahead,
83474
- {
83475
- disabled: hasNoContent,
83476
- "data-qa": "data-table-search",
83477
- value: internalValue,
83478
- className: cx21("search", {
83479
- "search--empty": !internalValue.length
83480
- }),
83481
- onChange,
83482
- placeholder: placeholder || I18n.t("dataTable.search")
83483
83470
  }
83484
- ));
83485
- };
83486
- var Search = (props) => {
83487
- const { onServerSideDataRequest } = useInternalTableContext();
83488
- if (onServerSideDataRequest) {
83489
- return /* @__PURE__ */ React76__default.default.createElement(ServerSideSearch, { ...props });
83490
- }
83491
- return /* @__PURE__ */ React76__default.default.createElement(ClientSideSearch, { ...props });
83492
- };
83493
-
83494
- // src/QuickControls/QuickControls.tsx
83495
- var QuickControls = (props) => {
83496
- const I18n = coreReact.useI18nContext();
83497
- if (props.children) {
83498
- return /* @__PURE__ */ React76__default.default.createElement(
83499
- coreReact.Box,
83471
+ const _onSearch = columnDefinition.filterProps.onSearch || defaultOnSearch;
83472
+ React76__default.default.useEffect(() => {
83473
+ menuRef.current?.highlightSuggested();
83474
+ }, []);
83475
+ return /* @__PURE__ */ React76__default.default.createElement(coreReact.Card, { ref }, /* @__PURE__ */ React76__default.default.createElement(
83476
+ coreReact.UNSAFE_Menu,
83500
83477
  {
83501
- "data-qa": "data-table-quick-controls",
83502
- padding: "xs none",
83503
- style: props.style
83478
+ ...menuProps,
83479
+ multiple: true,
83480
+ role: "listbox",
83481
+ ref: menuRef,
83482
+ onSelect,
83483
+ className: locationFilterStyles_default.locationFilterMenu
83504
83484
  },
83505
- props.children
83506
- );
83485
+ /* @__PURE__ */ React76__default.default.createElement(
83486
+ coreReact.UNSAFE_Menu.Search,
83487
+ {
83488
+ ...menuNavigationTriggerProps,
83489
+ onChange: _onSearch
83490
+ }
83491
+ ),
83492
+ /* @__PURE__ */ React76__default.default.createElement(coreReact.UNSAFE_Menu.Options, null, !searching && /* @__PURE__ */ React76__default.default.createElement(
83493
+ coreReact.Box,
83494
+ {
83495
+ className: locationFilterStyles_default.controlsContainer,
83496
+ ...coreReact.UNSAFE_menuItemsWrapperAttribute
83497
+ },
83498
+ /* @__PURE__ */ React76__default.default.createElement(
83499
+ coreReact.UNSAFE_Menu.CheckboxItem,
83500
+ {
83501
+ key: getId3(includeSublocationOption),
83502
+ item: includeSublocationOption,
83503
+ selected: enableSublocations
83504
+ },
83505
+ getLabel3(includeSublocationOption)
83506
+ ),
83507
+ /* @__PURE__ */ React76__default.default.createElement(
83508
+ coreReact.UNSAFE_Menu.CheckboxItem,
83509
+ {
83510
+ key: getId3(selectAllOption),
83511
+ item: selectAllOption,
83512
+ selected: selectState === "all",
83513
+ indeterminate: selectState === "partial"
83514
+ },
83515
+ getLabel3(selectAllOption)
83516
+ )
83517
+ ), !loading && items.map((item, i) => {
83518
+ return /* @__PURE__ */ React76__default.default.createElement(
83519
+ coreReact.UNSAFE_Menu.CheckboxItem,
83520
+ {
83521
+ key: getId3(item),
83522
+ item,
83523
+ selected: value.map(({ id }) => id).includes(getId3(item)) || disabledOptions.map(({ id }) => id).includes(getId3(item)),
83524
+ suggested: i === 0,
83525
+ disabled: disabledOptions.map(({ id }) => id).includes(getId3(item))
83526
+ },
83527
+ getLabel3(item)
83528
+ );
83529
+ })),
83530
+ loading && /* @__PURE__ */ React76__default.default.createElement(coreReact.UNSAFE_Menu.Footer, null, /* @__PURE__ */ React76__default.default.createElement(coreReact.Flex, { justifyContent: "center" }, /* @__PURE__ */ React76__default.default.createElement(coreReact.Spinner, { size: "sm" })))
83531
+ ));
83507
83532
  }
83508
- return /* @__PURE__ */ React76__default.default.createElement(coreReact.Box, { padding: "xs none", style: props.style }, /* @__PURE__ */ React76__default.default.createElement(coreReact.Box, { padding: "xs none", display: "flex-row", justifyContent: "space-between" }, /* @__PURE__ */ React76__default.default.createElement(coreReact.FlexList, { size: "xs", alignItems: "center", marginRight: "sm" }, /* @__PURE__ */ React76__default.default.createElement(
83509
- Search,
83510
- {
83511
- onSearch: props.onSearch,
83512
- placeholder: props.placeholder,
83513
- disabled: props.disabledSearch
83533
+ );
83534
+ var LocationQuickFilterRenderer = ({
83535
+ columnDefinition,
83536
+ disabled
83537
+ }) => {
83538
+ const {
83539
+ options: originOptions,
83540
+ value: originValue = [],
83541
+ onChange,
83542
+ getOptions,
83543
+ loading
83544
+ } = useServerSideFilter({ columnDefinition });
83545
+ const { options, value } = useSuperSelectOptionAsValueWorkaround({
83546
+ originOptions,
83547
+ originValue,
83548
+ loading,
83549
+ getId: columnDefinition.filterProps?.getId
83550
+ });
83551
+ const I18n = coreReact.useI18nContext();
83552
+ const getId3 = columnDefinition.filterProps?.getId || defaultGetId2;
83553
+ const getLabel3 = columnDefinition.filterProps?.getLabel || defaultGetLabel2;
83554
+ const determineSelectedState = (selection) => {
83555
+ if (options.length === selection.length) {
83556
+ return "all";
83514
83557
  }
83515
- ), /* @__PURE__ */ React76__default.default.createElement(FiltersPanelButton, null)), /* @__PURE__ */ React76__default.default.createElement(coreReact.FlexList, { size: "xs", alignItems: "center" }, /* @__PURE__ */ React76__default.default.createElement(
83516
- RowGroupSelector,
83517
- {
83518
- localeText: {
83519
- reset: I18n.t("dataTable.tableSettings.reset"),
83520
- placeholder: I18n.t("dataTable.tableSettings.selectColumnGroup"),
83521
- selectedItemsPrefix: I18n.t("dataTable.tableSettings.groupBy")
83522
- }
83558
+ if (selection.length && (options.length > selection.length || options.length < selection.length)) {
83559
+ return "partial";
83523
83560
  }
83524
- ), /* @__PURE__ */ React76__default.default.createElement(ConfigPanelButton, null))), /* @__PURE__ */ React76__default.default.createElement(
83525
- QuickFilters,
83526
- {
83527
- overlayMatchesTriggerWidth: props.filterOverlayMatchesTriggerWidth
83561
+ if (selection.length === 0) {
83562
+ return "none";
83528
83563
  }
83529
- ));
83530
- };
83531
-
83532
- // src/utils/addSubcomponents.ts
83533
- var addSubcomponents = (subs, parent) => {
83534
- const assigned = parent;
83535
- Object.keys(subs).forEach((key) => {
83536
- assigned[key] = subs[key];
83537
- });
83538
- return assigned;
83539
- };
83540
-
83541
- // src/ClientSideDataTable.tsx
83542
- var ClientSideDataTable = ({
83543
- analytics,
83544
- children,
83545
- columnDefinitions: _columnDefinitions,
83546
- customBulkEditorFields,
83547
- enableDynamicRowHeight,
83548
- enableGroupEditAndValidation,
83549
- filterGroups,
83550
- getRowId,
83551
- initialTableConfig: _initialTableConfig,
83552
- onBulkEditUpdate,
83553
- onTableConfigChange,
83554
- translations: translations2 = {},
83555
- enableCellTextSelection,
83556
- localStoragePersistenceKey
83557
- }) => {
83558
- return /* @__PURE__ */ React76__default.default.createElement(
83559
- DataTable,
83560
- {
83561
- analytics,
83562
- columnDefinitions: _columnDefinitions,
83563
- enableGroupEditAndValidation,
83564
- enableDynamicRowHeight,
83565
- filterGroups,
83566
- getRowId,
83567
- initialTableConfig: _initialTableConfig,
83568
- onTableConfigChange,
83569
- onBulkEditUpdate,
83570
- showExpandCollapseAllToggle: true,
83571
- translations: translations2,
83572
- localStoragePersistenceKey,
83573
- customBulkEditorFields,
83574
- enableCellTextSelection
83575
- },
83576
- children
83564
+ return "none";
83565
+ };
83566
+ const ids = React76__default.default.useMemo(() => value.map(({ id }) => id), [value]);
83567
+ const [selectedValueIds, setSelectedValueIds] = React76__default.default.useState(ids);
83568
+ const [selectState, setSelectState] = React76__default.default.useState(
83569
+ determineSelectedState(value)
83577
83570
  );
83578
- };
83579
- var Table2 = (props) => {
83580
- const internalTableContext = useInternalTableContext();
83581
- React76__default.default.useEffect(() => {
83582
- internalTableContext.setTotalRowCount(props.rows?.length ?? 0);
83583
- }, [props.rows]);
83584
- return /* @__PURE__ */ React76__default.default.createElement(Table, { ...props, modules: [ClientSideRowModelModule] });
83585
- };
83586
- BulkActions.displayName = "ClientSideDataTable.BulkActions";
83587
- ConfigPanelButton.displayName = "ClientSideDataTable.ConfigPanelButton";
83588
- ContextPanel.displayName = "ClientSideDataTable.ContextPanel";
83589
- QuickControls.displayName = "ClientSideDataTable.QuickControls";
83590
- QuickFilters.displayName = "ClientSideDataTable.QuickFilters";
83591
- RowGroupSelector.displayName = "ClientSideDataTable.RowGroupSelector";
83592
- Search.displayName = "ClientSideDataTable.Search";
83593
- Table2.displayName = "ClientSideDataTable.Table";
83594
- FiltersPanel.displayName = "ClientSideDataTable.FiltersPanel";
83595
- var ClientSideDataTable_default = addSubcomponents(
83596
- {
83597
- BulkActions,
83598
- BulkEditActionButton,
83599
- ConfigPanelButton,
83600
- ContextPanel,
83601
- QuickControls,
83602
- QuickFilters,
83603
- RowGroupSelector,
83604
- Search,
83605
- Table: Table2,
83606
- FiltersPanel,
83607
- FiltersPanelButton
83608
- },
83609
- ClientSideDataTable
83610
- );
83611
- var QuickFilterLabel = React76__default.default.forwardRef(({ enabled, ...props }, ref) => {
83612
- return /* @__PURE__ */ React76__default.default.createElement(StyledQuickFilterLabel, { $enabled: enabled }, /* @__PURE__ */ React76__default.default.createElement(coreReact.SelectButton, { ref, ...props }));
83613
- });
83614
- var StyledQuickFilterLabel = styled4__default.default.div`
83615
- ${coreReact.StyledSelectButton} {
83616
- width: auto;
83617
- max-width: 380px;
83618
- ${({ $enabled }) => $enabled && styled4.css`
83619
- background: ${coreReact.colors.blue96};
83620
- border-color: ${coreReact.colors.blue96};
83621
- font-weight: ${coreReact.typographyWeights.semibold};
83622
- &:hover {
83623
- background: ${coreReact.colors.blue90};
83624
- border-color: ${coreReact.colors.blue90};
83625
- }
83626
- ${coreReact.StyledSelectButtonLabel} {
83627
- color: ${coreReact.colors.blue45};
83628
- }
83629
- ${coreReact.StyledButton} {
83630
- color: ${coreReact.colors.blue45};
83631
- &:hover {
83632
- background: white;
83633
- }
83634
- }
83635
- ${coreReact.StyledSelectArrow} {
83636
- svg {
83637
- fill: ${coreReact.colors.blue45};
83638
- }
83639
- }
83640
- `}
83641
- }
83642
- `;
83643
-
83644
- // src/QuickFilterRenderers/DateQuickFilterRenderer.tsx
83645
- function getPlacement2(currentSelectionType, position) {
83646
- if (currentSelectionType === "single") {
83647
- return "bottom-left";
83648
- }
83649
- if (position === "start") {
83650
- return "bottom-left";
83651
- }
83652
- return "bottom-right";
83653
- }
83654
- var OptionalDateTimeProvider2 = ({ timeZone, children }) => {
83655
- return timeZone ? /* @__PURE__ */ React76__default.default.createElement(coreReact.DateTimeProvider, { timeZone }, children) : /* @__PURE__ */ React76__default.default.createElement(React76__default.default.Fragment, null, children);
83656
- };
83657
- var DateFilterSelect2 = React76__default.default.forwardRef(
83658
- ({
83659
- afterHide,
83660
- selectionType = "either",
83661
- headerName,
83662
- disabled,
83663
- onChange,
83664
- position,
83665
- selectedValue,
83666
- setSelectionType = () => {
83571
+ const [disabledValues, setDisabledValues] = React76__default.default.useState([]);
83572
+ const [enableSublocations, setEnableSublocations] = React76__default.default.useState(false);
83573
+ const onSelectSublocations = React76__default.default.useCallback(() => {
83574
+ if (enableSublocations) {
83575
+ setDisabledValues([]);
83576
+ } else {
83577
+ const newDisabledValues = [];
83578
+ value.forEach((location) => {
83579
+ newDisabledValues.push(...findSublocations(location));
83580
+ });
83581
+ const uniqDisabledValues = ramda.uniqBy(ramda.prop("id"), newDisabledValues).filter(
83582
+ ({ id }) => !selectedValueIds.includes(id)
83583
+ );
83584
+ setDisabledValues(uniqDisabledValues);
83667
83585
  }
83668
- }, ref) => {
83669
- const dateTime = coreReact.useDateTime();
83670
- const { start, end } = selectedValue;
83671
- const selectedDate = (position === "start" ? start : end) ?? void 0;
83672
- const [displayed, setDisplayed2] = React76__default.default.useState(
83673
- // @ts-ignore
83674
- selectedDate || dateTime.newDate()
83586
+ setEnableSublocations(!enableSublocations);
83587
+ }, [enableSublocations, value, selectedValueIds, options]);
83588
+ const onSelectAll = React76__default.default.useCallback(() => {
83589
+ if (selectState === "none" || selectState === "partial") {
83590
+ setSelectState("all");
83591
+ setSelectedValueIds(options.map(({ id }) => id));
83592
+ onChange(options);
83593
+ }
83594
+ if (selectState === "all") {
83595
+ setSelectState("none");
83596
+ setSelectedValueIds([]);
83597
+ onChange([]);
83598
+ }
83599
+ }, [options, selectState, selectedValueIds]);
83600
+ const onSelect = (selection) => {
83601
+ if (selection.item.id === "select_all") {
83602
+ return;
83603
+ }
83604
+ if (selection.item.id === "include_sublocations") {
83605
+ return onChange(
83606
+ value.map((item) => ({
83607
+ ...item,
83608
+ sublocations: enableSublocations ? [] : findSublocations(item)
83609
+ }))
83610
+ );
83611
+ }
83612
+ let newSelections = [];
83613
+ if (selectedValueIds.includes(getId3(selection.item))) {
83614
+ newSelections = removeSelections(selection.item, value);
83615
+ } else {
83616
+ newSelections = [...value, selection.item];
83617
+ const sublocationsToDisable = handleSelectSublocations(selection.item);
83618
+ const newDisabledValues = [
83619
+ ...disabledValues,
83620
+ ...sublocationsToDisable.filter(
83621
+ ({ id }) => !selectedValueIds.includes(id)
83622
+ )
83623
+ ];
83624
+ setDisabledValues(newDisabledValues);
83625
+ }
83626
+ setSelectState(determineSelectedState(newSelections));
83627
+ setSelectedValueIds(newSelections.map(({ id }) => id));
83628
+ onChange(
83629
+ newSelections.map((item) => ({
83630
+ ...item,
83631
+ sublocations: handleSelectSublocations(item)
83632
+ }))
83675
83633
  );
83676
- React76__default.default.useEffect(() => {
83677
- if (dateFns.isDate(start) && !dateFns.isDate(end) && position === "end") {
83678
- setDisplayed2(start);
83679
- }
83680
- if (!dateFns.isDate(start) && dateFns.isDate(end) && position === "start") {
83681
- setDisplayed2(end);
83682
- }
83683
- }, [position, selectedValue]);
83684
- function onClear() {
83685
- onChange(null, position);
83634
+ };
83635
+ const findSublocations = (selected) => {
83636
+ return options.filter((option) => {
83637
+ return ramda.startsWith(
83638
+ `${getLabel3(selected).toLowerCase()} > `,
83639
+ getLabel3(option).toLowerCase()
83640
+ );
83641
+ });
83642
+ };
83643
+ const handleSelectSublocations = (selected) => {
83644
+ if (enableSublocations) {
83645
+ const filteredOptions = findSublocations(selected);
83646
+ return filteredOptions;
83647
+ } else {
83648
+ return [];
83686
83649
  }
83687
- const clearRef = React76__default.default.useRef(null);
83688
- const monthRef = React76__default.default.useRef(null);
83689
- const yearRef = React76__default.default.useRef(null);
83690
- const overlay = /* @__PURE__ */ React76__default.default.createElement(
83691
- DateFilterOverlay,
83650
+ };
83651
+ const removeSelections = React76__default.default.useCallback(
83652
+ function(selection, selected) {
83653
+ const sublocations = handleSelectSublocations(selection);
83654
+ const disabledValueIds = disabledValues.map(({ id }) => id);
83655
+ const sublocationsToRemoveFromDisabledIds = sublocations.filter(({ id }) => disabledValueIds.includes(id)).map(({ id }) => id);
83656
+ setDisabledValues(
83657
+ disabledValues.filter(
83658
+ ({ id }) => !sublocationsToRemoveFromDisabledIds.includes(id)
83659
+ )
83660
+ );
83661
+ return selected.filter((item) => getId3(item) !== getId3(selection));
83662
+ },
83663
+ [enableSublocations, disabledValues]
83664
+ );
83665
+ React76__default.default.useEffect(() => {
83666
+ setSelectState(determineSelectedState(value));
83667
+ }, [value]);
83668
+ const overlay = /* @__PURE__ */ React76__default.default.createElement(
83669
+ LocationQuickFilterOverlay,
83670
+ {
83671
+ columnDefinition,
83672
+ enableSublocations,
83673
+ onSelectAll,
83674
+ onSelectSublocations,
83675
+ selectState,
83676
+ value,
83677
+ options,
83678
+ disabledOptions: disabledValues,
83679
+ getId: getId3,
83680
+ getLabel: getLabel3,
83681
+ loading,
83682
+ onSelect,
83683
+ selectedValueIds
83684
+ }
83685
+ );
83686
+ const triggerLabel = value.length ? value.length === 1 ? `: ${value[0].label}` : `: (${value.length})` : "";
83687
+ return /* @__PURE__ */ React76__default.default.createElement(
83688
+ coreReact.OverlayTrigger,
83689
+ {
83690
+ overlay,
83691
+ beforeShow: getOptions,
83692
+ placement: "bottom-left"
83693
+ },
83694
+ value.length ? /* @__PURE__ */ React76__default.default.createElement(
83695
+ QuickFilterLabel,
83692
83696
  {
83693
- displayDate: displayed,
83694
- selectionType,
83695
- monthRef,
83696
- onSelect: (date) => {
83697
- onChange(date, position);
83697
+ enabled: true,
83698
+ disabled,
83699
+ label: `${I18n.t(
83700
+ "dataTable.filters.locationFilter.locations"
83701
+ )}${triggerLabel}`,
83702
+ onClear: () => {
83703
+ onChange([]);
83698
83704
  },
83699
- position,
83700
- selectedValue,
83701
- setDisplayDate: setDisplayed2,
83702
- setSelectionType,
83703
- yearRef
83705
+ block: true
83704
83706
  }
83705
- );
83706
- return /* @__PURE__ */ React76__default.default.createElement(
83707
- coreReact.OverlayTrigger,
83707
+ ) : /* @__PURE__ */ React76__default.default.createElement(
83708
+ QuickFilterLabel,
83708
83709
  {
83709
- afterHide,
83710
- autoFocus: true,
83711
- beforeShow: (e) => {
83712
- if (coreReact.isEventSource(clearRef, e)) {
83713
- return false;
83714
- }
83715
- return true;
83716
- },
83717
- clickOutsideIgnoreRefs: [monthRef, yearRef],
83718
- overlay,
83719
- placement: getPlacement2(selectionType, position),
83720
- ref,
83721
- restoreFocusOnHide: true,
83722
- role: "dialog"
83723
- },
83724
- /* @__PURE__ */ React76__default.default.createElement(
83725
- DateQuickFilterLabel,
83726
- {
83727
- headerName,
83728
- onClear,
83729
- value: selectedDate,
83730
- disabled
83710
+ enabled: false,
83711
+ disabled,
83712
+ label: `${I18n.t(
83713
+ "dataTable.filters.locationFilter.locations"
83714
+ )}${triggerLabel}`,
83715
+ block: true
83716
+ }
83717
+ )
83718
+ );
83719
+ };
83720
+ var LocationQuickFilterRenderer_default = LocationQuickFilterRenderer;
83721
+ var StyledFilterPresetPopoverContent = styled3__default.default(coreReact.Popover.Content)`
83722
+ padding: ${coreReact.spacing.sm}px ${coreReact.spacing.lg}px;
83723
+ `;
83724
+ var getValueLabel = (isValueEmpty, value, placeholder, filterName) => {
83725
+ const prefixLabel = isValueEmpty ? placeholder || filterName : filterName;
83726
+ const valueLabel = value ? `${prefixLabel ? ": " : ""}${value}` : "";
83727
+ return `${prefixLabel}${valueLabel}`;
83728
+ };
83729
+ var getSuperSelectFilterPreset = (columnDefinition) => {
83730
+ const filterName = columnDefinition.headerName;
83731
+ const getValueLabel_ = typeof columnDefinition.filterProps?.getFilterTokenText === "function" ? (value) => {
83732
+ return columnDefinition.filterProps?.getFilterTokenText?.({
83733
+ headerName: columnDefinition.headerName,
83734
+ value: Array.isArray(value) ? value : [value]
83735
+ });
83736
+ } : void 0;
83737
+ return {
83738
+ components: {
83739
+ Label: React76__default.default.forwardRef(() => {
83740
+ const ctx = coreReact.UNSAFE_useSuperSelectContext();
83741
+ const isValueEmpty = ["", null, void 0].includes(
83742
+ ctx.state.value
83743
+ );
83744
+ return /* @__PURE__ */ React76__default.default.createElement(coreReact.UNSAFE_StyledSuperSelectLabel, { $hoverable: false }, typeof getValueLabel_ === "function" ? getValueLabel_(ctx.state.value) : getValueLabel(
83745
+ isValueEmpty,
83746
+ ctx.state.selectedLabel,
83747
+ ctx.config.placeholder,
83748
+ filterName
83749
+ ));
83750
+ }),
83751
+ TriggerContainer: React76__default.default.forwardRef((props, ref) => {
83752
+ const ctx = coreReact.UNSAFE_useSuperSelectContext();
83753
+ if (!Array.isArray(ctx.state.value)) {
83754
+ return /* @__PURE__ */ React76__default.default.createElement(
83755
+ coreReact.UNSAFE_StyledSuperSelectTrigger,
83756
+ {
83757
+ $block: ctx.config.block,
83758
+ ...props,
83759
+ ref
83760
+ }
83761
+ );
83762
+ }
83763
+ return /* @__PURE__ */ React76__default.default.createElement(
83764
+ coreReact.Popover,
83765
+ {
83766
+ placement: "top",
83767
+ trigger: ctx.state.value.length > 1 ? "hover" : "none",
83768
+ overlay: /* @__PURE__ */ React76__default.default.createElement(StyledFilterPresetPopoverContent, null, /* @__PURE__ */ React76__default.default.createElement(coreReact.Typography, null, ctx.state.value.map((v) => {
83769
+ const option = ctx.state.options.find(
83770
+ (option2) => ctx.option.value(option2) === v
83771
+ );
83772
+ return option ? ctx.option.label(option) : "";
83773
+ }).join(", ")))
83774
+ },
83775
+ /* @__PURE__ */ React76__default.default.createElement(
83776
+ coreReact.UNSAFE_StyledSuperSelectTrigger,
83777
+ {
83778
+ $block: ctx.config.block,
83779
+ ...props,
83780
+ ref
83781
+ }
83782
+ )
83783
+ );
83784
+ }),
83785
+ MultiValueContainer: () => {
83786
+ const ctx = coreReact.UNSAFE_useSuperSelectContext();
83787
+ if (Array.isArray(ctx.state.value)) {
83788
+ const isValueEmpty = !ctx.state.value.length;
83789
+ const value = ctx.state.value.length > 1 ? `(${ctx.state.value.length})` : ctx.state.value.length === 1 ? `${ctx.state.selectedLabel}` : "";
83790
+ return /* @__PURE__ */ React76__default.default.createElement(coreReact.UNSAFE_StyledSuperSelectLabel, { $hoverable: false }, typeof getValueLabel_ === "function" ? getValueLabel_(ctx.state.value) : getValueLabel(
83791
+ isValueEmpty,
83792
+ value,
83793
+ ctx.config.placeholder,
83794
+ filterName
83795
+ ));
83731
83796
  }
83732
- )
83733
- );
83734
- }
83735
- );
83736
- function DateFilter3({
83737
- // TODO: talk to design about potential loading UX for this.
83738
- // core DateSelect doesn't have it
83739
- // loading,
83740
- headerName,
83741
- onChange,
83742
- selectionType = "either",
83743
- value,
83744
- disabled,
83745
- ...props
83746
- }) {
83747
- const [selectedValue, setSelectedValue] = React76__default.default.useState({
83748
- type: selectionType === "either" ? "range" : selectionType
83749
- });
83750
- React76__default.default.useEffect(() => {
83751
- const parsedValue = value.map((date) => {
83752
- if (dateFns.isDate(date)) {
83753
- return date;
83797
+ return /* @__PURE__ */ React76__default.default.createElement("div", null, "Value is not an array");
83754
83798
  }
83755
- return dateFns.parseISO(String(date));
83756
- });
83757
- const type = dateFns.isSameDay(parsedValue[0], parsedValue[1]) ? "single" : "range";
83758
- setSelectedValue({ type, start: parsedValue[0], end: parsedValue[1] });
83759
- }, [value]);
83760
- const dateRangeEndDateRef = React76__default.default.useRef(null);
83761
- function dateFilterOnChange(date, position) {
83762
- const newValue = getValueFromSelection(selectedValue, date, position);
83763
- setSelectedValue(newValue);
83764
- if (isValidDateSelection(newValue)) {
83765
- onChange(
83766
- newValue.start || newValue.end ? [
83767
- newValue.start,
83768
- newValue.type === "single" ? newValue.start : newValue.end
83769
- ] : []
83770
- );
83771
- }
83772
- }
83773
- const onSelectionTypeChange = React76__default.default.useCallback(
83774
- (newSelectionType) => {
83775
- setSelectedValue({ type: newSelectionType });
83776
83799
  },
83777
- [setSelectedValue]
83778
- );
83779
- function dateRangeAfterHide() {
83780
- if (selectedValue.type === "range" && dateFns.isDate(selectedValue.start) && !dateFns.isDate(selectedValue.end)) {
83781
- dateRangeEndDateRef.current?.click();
83782
- }
83783
- return true;
83800
+ selectionStyle: "highlight"
83801
+ };
83802
+ };
83803
+ var StyledSuperSelectWrapper = styled3__default.default.div`
83804
+ ${coreReact.UNSAFE_StyledSuperSelectTrigger} {
83805
+ width: auto;
83784
83806
  }
83785
- return /* @__PURE__ */ React76__default.default.createElement(coreReact.FlexList, { space: "xs", "data-qa": props["data-qa"] }, /* @__PURE__ */ React76__default.default.createElement(
83786
- DateFilterSelect2,
83787
- {
83788
- afterHide: dateRangeAfterHide,
83789
- headerName,
83790
- onChange: dateFilterOnChange,
83791
- position: "start",
83792
- selectedValue,
83793
- selectionType,
83794
- setSelectionType: onSelectionTypeChange,
83795
- disabled
83796
- }
83797
- ), selectedValue.type === "range" && /* @__PURE__ */ React76__default.default.createElement(
83798
- DateFilterSelect2,
83799
- {
83800
- headerName,
83801
- onChange: dateFilterOnChange,
83802
- position: "end",
83803
- ref: dateRangeEndDateRef,
83804
- selectedValue,
83805
- selectionType,
83806
- setSelectionType: onSelectionTypeChange,
83807
- disabled
83808
- }
83809
- ));
83807
+
83808
+ ${({ $enabled }) => $enabled && styled3.css`
83809
+ ${coreReact.UNSAFE_StyledSuperSelectTrigger} {
83810
+ max-width: 360px;
83811
+ background: ${coreReact.colors.blue96};
83812
+ border-color: ${coreReact.colors.blue96};
83813
+ font-weight: ${coreReact.typographyWeights.semibold};
83814
+
83815
+ &:hover {
83816
+ background: ${coreReact.colors.blue90};
83817
+ border-color: ${coreReact.colors.blue90};
83818
+ }
83819
+
83820
+ ${coreReact.UNSAFE_StyledSuperSelectLabel} {
83821
+ color: ${coreReact.colors.blue45};
83822
+ }
83823
+
83824
+ ${coreReact.StyledButton} {
83825
+ color: ${coreReact.colors.blue45};
83826
+
83827
+ &:hover {
83828
+ background: white;
83829
+ }
83830
+ }
83831
+
83832
+ ${coreReact.UNSAFE_StyledSuperSelectArrow} {
83833
+ svg {
83834
+ fill: ${coreReact.colors.blue45};
83835
+ }
83836
+ }
83837
+ }
83838
+ `}
83839
+ `;
83840
+
83841
+ // src/QuickFilterRenderers/types.ts
83842
+ function isClientSideFilterProps(_value, isServerSideDataRequest) {
83843
+ return !isServerSideDataRequest;
83810
83844
  }
83811
- function ServerSideQuickDateFilterRenderer({
83845
+
83846
+ // src/QuickFilterRenderers/MultiSelectQuickFilterRenderer.tsx
83847
+ var ClientSideMultiSelectQuickFilter = ({
83848
+ filter,
83812
83849
  columnDefinition,
83850
+ onChange,
83851
+ onRemove,
83852
+ overlayMatchesTriggerWidth,
83813
83853
  disabled
83814
- }) {
83815
- const { onChange, value = [] } = useServerSideFilter({
83816
- columnDefinition
83817
- });
83818
- const colDef = columnDefinition;
83819
- return /* @__PURE__ */ React76__default.default.createElement(OptionalDateTimeProvider2, { timeZone: colDef.timeZone }, /* @__PURE__ */ React76__default.default.createElement(
83820
- DateFilter3,
83854
+ }) => {
83855
+ return /* @__PURE__ */ React76__default.default.createElement(StyledSuperSelectWrapper, { $enabled: Boolean(filter.filterValues?.length) }, /* @__PURE__ */ React76__default.default.createElement(
83856
+ coreReact.UNSAFE_SuperSelect,
83821
83857
  {
83822
- selectionType: colDef.filterProps?.selectionType ?? "either",
83823
- headerName: colDef.headerName,
83858
+ overlayMatchesTriggerWidth,
83859
+ value: filter.filterValues === null ? [] : filter.filterValues,
83860
+ search: false,
83861
+ multiple: true,
83862
+ options: filter.options,
83824
83863
  disabled,
83825
- onChange: (selected) => {
83826
- onChange(
83827
- selected.map((date) => {
83828
- return date ? {
83829
- // future extensions can go here (month, day, year keys etc)
83830
- date
83831
- } : (
83832
- // TODO: refactor out date-specific getId stuff from useServerSideFilterStorage
83833
- date
83834
- );
83835
- })
83836
- );
83864
+ getOptionValue: (option) => {
83865
+ return getId(columnDefinition.filterProps?.getId, option);
83837
83866
  },
83838
- value: value.map((option) => option ? option.date : option)
83867
+ getOptionLabel: (option) => {
83868
+ return getLabel(columnDefinition.filterProps?.getLabel, option);
83869
+ },
83870
+ onChange: (values2) => {
83871
+ if (Array.isArray(values2) && !values2.length) {
83872
+ onRemove?.();
83873
+ return;
83874
+ }
83875
+ onChange?.(values2);
83876
+ },
83877
+ ...getSuperSelectFilterPreset(columnDefinition)
83839
83878
  }
83840
83879
  ));
83841
- }
83842
- var QuickDateFilterRenderer = (props) => {
83843
- const { onServerSideDataRequest } = useInternalTableContext();
83844
- if (onServerSideDataRequest) {
83845
- return /* @__PURE__ */ React76__default.default.createElement(ServerSideQuickDateFilterRenderer, { ...props });
83846
- }
83847
- logger.error(
83848
- "Warning: Date Filters are currently only implemented for the serverside row model"
83849
- );
83850
- return null;
83851
- };
83852
- var dateInputLocales = {
83853
- "fr-CA": {
83854
- placeholders: { day: "jj", month: "mm", year: "aaaa" }
83855
- },
83856
- "fr-FR": {
83857
- placeholders: { day: "jj", month: "mm", year: "aaaa" }
83858
- },
83859
- es: {
83860
- placeholders: { day: "dd", month: "mm", year: "aaaa" }
83861
- },
83862
- "es-ES": {
83863
- placeholders: { day: "dd", month: "mm", year: "aaaa" }
83864
- },
83865
- pt: {
83866
- placeholders: { day: "dd", month: "mm", year: "aaaa" }
83867
- },
83868
- "is-IS": {
83869
- placeholders: { day: "dd", month: "mm", year: "\xE1\xE1\xE1\xE1" }
83870
- },
83871
- "de-DE": {
83872
- placeholders: { day: "tt", month: "MM", year: "jjjj" }
83873
- }
83874
- };
83875
- var DateQuickFilterLabel = React76__default.default.forwardRef(({ headerName, onClear, value, disabled }, ref) => {
83876
- const dateTime = coreReact.useDateTime();
83877
- const i18n = coreReact.useI18nContext();
83878
- const placeholders = dateInputLocales[i18n.locale]?.placeholders || {
83879
- day: "dd",
83880
- month: "mm",
83881
- year: "yyyy"
83882
- };
83883
- if (value !== void 0 && dateFns.isDate(value)) {
83884
- return /* @__PURE__ */ React76__default.default.createElement(
83885
- QuickFilterLabel,
83886
- {
83887
- enabled: true,
83888
- disabled,
83889
- label: `${headerName}: ${dateTime.format(value, "numeric-date")}`,
83890
- onClear,
83891
- ref
83892
- }
83893
- );
83894
- }
83895
- return /* @__PURE__ */ React76__default.default.createElement(
83896
- QuickFilterLabel,
83897
- {
83898
- enabled: false,
83899
- disabled,
83900
- label: `${headerName}: ${globalizationToolkit.getDatePlaceholder(i18n.locale, placeholders)}`,
83901
- ref
83902
- }
83903
- );
83904
- });
83905
- var DateQuickFilterRenderer_default = QuickDateFilterRenderer;
83906
- var defaultGetId2 = (option) => option?.id;
83907
- var defaultGetLabel2 = (option) => {
83908
- return option?.label ?? option?.name ?? option;
83909
83880
  };
83910
- var useSuperSelectOptionAsValueWorkaround = ({
83881
+ var useSuperSelectOptionAsValueWorkaround2 = ({
83911
83882
  originValue,
83912
83883
  originOptions,
83913
- getId: getId3 = defaultGetId2,
83884
+ getId: getId3,
83914
83885
  loading
83915
83886
  }) => {
83916
83887
  const isValueFromOptions = React76__default.default.useRef(false);
83917
83888
  const getValueFromOptions = () => {
83918
- const valueIds = originValue.map(getId3);
83889
+ const valueIds = originValue.map((option) => getId(getId3, option));
83919
83890
  isValueFromOptions.current = true;
83920
- return originOptions.filter((option) => valueIds.includes(getId3(option)));
83891
+ return originOptions.filter(
83892
+ (option) => valueIds.includes(getId(getId3, option))
83893
+ );
83921
83894
  };
83922
83895
  const hasOptions = originOptions.length > 0 && !loading;
83923
83896
  const hasValue = originValue?.length > 0;
@@ -83929,684 +83902,814 @@ var useSuperSelectOptionAsValueWorkaround = ({
83929
83902
  getOptionValue: (option) => option
83930
83903
  };
83931
83904
  };
83932
- var LocationQuickFilterOverlay = React76__default.default.forwardRef(
83933
- ({
83934
- getId: getId3,
83935
- getLabel: getLabel3,
83905
+ var ServerSideMultiSelectQuickFilter = ({ columnDefinition, overlayMatchesTriggerWidth, disabled }) => {
83906
+ const {
83907
+ options: originOptions,
83908
+ onClearFilter,
83909
+ fieldName,
83910
+ value: originValue = [],
83911
+ onChange,
83912
+ getOptions,
83913
+ loading
83914
+ } = useServerSideFilter({ columnDefinition });
83915
+ const { options, value, getOptionValue } = useSuperSelectOptionAsValueWorkaround2({
83916
+ originOptions,
83917
+ originValue,
83936
83918
  loading,
83937
- onSelect: _onSelect,
83938
- onSelectAll,
83939
- onSelectSublocations,
83940
- enableSublocations,
83941
- selectState,
83942
- options,
83943
- disabledOptions,
83944
- columnDefinition,
83945
- value
83946
- }, ref) => {
83947
- if (value && !Array.isArray(value)) {
83948
- logger.warn(
83949
- "a value was set that is not compatible with this LocationQuickFilterRenderer"
83950
- );
83951
- return null;
83952
- }
83953
- const [items, setItems] = React76__default.default.useState(options);
83954
- const [searching, setSearching] = React76__default.default.useState(false);
83955
- const menuRef = React76__default.default.useRef(null);
83956
- const { menuProps, menuNavigationTriggerProps } = coreReact.UNSAFE_useMenuImperativeControlNavigation(menuRef);
83957
- const I18n = coreReact.useI18nContext();
83958
- const selectAllOption = {
83959
- label: I18n.t("dataTable.filters.locationFilter.selectAll"),
83960
- id: "select_all"
83961
- };
83962
- const includeSublocationOption = {
83963
- label: I18n.t("dataTable.filters.locationFilter.includeSublocations"),
83964
- id: "include_sublocations"
83965
- };
83966
- const onSelect = (selection) => {
83967
- if (selection.item.id === selectAllOption.id) {
83968
- return onSelectAll();
83969
- }
83970
- if (selection.item.id === includeSublocationOption.id) {
83971
- _onSelect(selection);
83972
- return onSelectSublocations();
83973
- }
83974
- return _onSelect(selection);
83975
- };
83976
- function defaultOnSearch(e) {
83977
- if (e.target.value === "") {
83978
- setSearching(false);
83979
- setItems(options);
83980
- } else {
83981
- setSearching(true);
83982
- setItems(
83983
- options.filter(
83984
- (item) => getLabel3(item).toLowerCase().includes(e.target.value.toLowerCase())
83985
- )
83986
- );
83987
- }
83919
+ getId: columnDefinition.filterProps?.getId
83920
+ });
83921
+ return /* @__PURE__ */ React76__default.default.createElement(StyledSuperSelectWrapper, { $enabled: Boolean(value?.length) }, /* @__PURE__ */ React76__default.default.createElement(
83922
+ coreReact.UNSAFE_SuperSelect,
83923
+ {
83924
+ overlayMatchesTriggerWidth,
83925
+ loading,
83926
+ value: value === null ? [] : value,
83927
+ search: false,
83928
+ getOptionLabel: (option) => {
83929
+ return getLabel(columnDefinition.filterProps?.getLabel, option);
83930
+ },
83931
+ getOptionValue,
83932
+ multiple: true,
83933
+ options,
83934
+ disabled,
83935
+ onChange: (values2) => {
83936
+ if (Array.isArray(values2) && !values2.length) {
83937
+ onClearFilter?.(fieldName);
83938
+ getOptions();
83939
+ return;
83940
+ }
83941
+ onChange(values2);
83942
+ },
83943
+ onOpenChange: (open) => {
83944
+ if (open && !originOptions.length) {
83945
+ getOptions();
83946
+ }
83947
+ },
83948
+ ...getSuperSelectFilterPreset(columnDefinition)
83988
83949
  }
83989
- const _onSearch = columnDefinition.filterProps.onSearch || defaultOnSearch;
83990
- React76__default.default.useEffect(() => {
83991
- menuRef.current?.highlightSuggested();
83992
- }, []);
83993
- return /* @__PURE__ */ React76__default.default.createElement(coreReact.Card, { ref }, /* @__PURE__ */ React76__default.default.createElement(
83994
- coreReact.UNSAFE_Menu,
83950
+ ));
83951
+ };
83952
+ var MultiSelectQuickFilterRenderer = (props) => {
83953
+ const { onServerSideDataRequest } = useInternalTableContext();
83954
+ if (!isClientSideFilterProps(props, !!onServerSideDataRequest)) {
83955
+ return /* @__PURE__ */ React76__default.default.createElement(ServerSideMultiSelectQuickFilter, { ...props });
83956
+ }
83957
+ return /* @__PURE__ */ React76__default.default.createElement(ClientSideMultiSelectQuickFilter, { ...props });
83958
+ };
83959
+ var MultiSelectQuickFilterRenderer_default = MultiSelectQuickFilterRenderer;
83960
+ function getFilterTokenText(columnDefinition, filterValue) {
83961
+ if (columnDefinition?.filterProps?.getFilterTokenText) {
83962
+ return columnDefinition?.filterProps?.getFilterTokenText?.({
83963
+ headerName: columnDefinition?.headerName || "",
83964
+ value: filterValue
83965
+ });
83966
+ }
83967
+ if (columnDefinition.filterRenderer === DateFilterRenderer_default) {
83968
+ return /* @__PURE__ */ React76__default.default.createElement(
83969
+ OptionalDateTimeProvider,
83995
83970
  {
83996
- ...menuProps,
83997
- multiple: true,
83998
- role: "listbox",
83999
- ref: menuRef,
84000
- onSelect,
84001
- className: locationFilterStyles_default.locationFilterMenu
83971
+ timeZone: columnDefinition.timeZone
84002
83972
  },
84003
83973
  /* @__PURE__ */ React76__default.default.createElement(
84004
- coreReact.UNSAFE_Menu.Search,
83974
+ DateFilterTokenText,
84005
83975
  {
84006
- ...menuNavigationTriggerProps,
84007
- onChange: _onSearch
83976
+ headerName: columnDefinition.headerName,
83977
+ value: filterValue
84008
83978
  }
84009
- ),
84010
- /* @__PURE__ */ React76__default.default.createElement(coreReact.UNSAFE_Menu.Options, null, !searching && /* @__PURE__ */ React76__default.default.createElement(
84011
- coreReact.Box,
84012
- {
84013
- className: locationFilterStyles_default.controlsContainer,
84014
- ...coreReact.UNSAFE_menuItemsWrapperAttribute
84015
- },
84016
- /* @__PURE__ */ React76__default.default.createElement(
84017
- coreReact.UNSAFE_Menu.CheckboxItem,
84018
- {
84019
- key: getId3(includeSublocationOption),
84020
- item: includeSublocationOption,
84021
- selected: enableSublocations
84022
- },
84023
- getLabel3(includeSublocationOption)
84024
- ),
84025
- /* @__PURE__ */ React76__default.default.createElement(
84026
- coreReact.UNSAFE_Menu.CheckboxItem,
84027
- {
84028
- key: getId3(selectAllOption),
84029
- item: selectAllOption,
84030
- selected: selectState === "all",
84031
- indeterminate: selectState === "partial"
84032
- },
84033
- getLabel3(selectAllOption)
84034
- )
84035
- ), !loading && items.map((item, i) => {
84036
- return /* @__PURE__ */ React76__default.default.createElement(
84037
- coreReact.UNSAFE_Menu.CheckboxItem,
84038
- {
84039
- key: getId3(item),
84040
- item,
84041
- selected: value.map(({ id }) => id).includes(getId3(item)) || disabledOptions.map(({ id }) => id).includes(getId3(item)),
84042
- suggested: i === 0,
84043
- disabled: disabledOptions.map(({ id }) => id).includes(getId3(item))
84044
- },
84045
- getLabel3(item)
84046
- );
84047
- })),
84048
- loading && /* @__PURE__ */ React76__default.default.createElement(coreReact.UNSAFE_Menu.Footer, null, /* @__PURE__ */ React76__default.default.createElement(coreReact.Flex, { justifyContent: "center" }, /* @__PURE__ */ React76__default.default.createElement(coreReact.Spinner, { size: "sm" })))
84049
- ));
83979
+ )
83980
+ );
84050
83981
  }
84051
- );
84052
- var LocationQuickFilterRenderer = ({
83982
+ if (columnDefinition.filterRenderer === NumberFilterRenderer) {
83983
+ return columnDefinition?.headerName;
83984
+ }
83985
+ if (Array.isArray(filterValue)) {
83986
+ if (filterValue.length === 0) {
83987
+ return columnDefinition?.headerName;
83988
+ }
83989
+ if (filterValue.length === 1) {
83990
+ return `${columnDefinition?.headerName}: ${getLabel(
83991
+ columnDefinition.filterProps?.getLabel,
83992
+ filterValue[0]
83993
+ )}`;
83994
+ }
83995
+ return `${columnDefinition?.headerName}: (${filterValue.length})`;
83996
+ }
83997
+ return columnDefinition?.headerName;
83998
+ }
83999
+ var ensureArray = (input) => {
84000
+ if (input === null) {
84001
+ return [];
84002
+ }
84003
+ return Array.isArray(input) ? input : [input];
84004
+ };
84005
+
84006
+ // src/QuickFilterRenderers/SingleSelectQuickFilterRenderer.tsx
84007
+ var ClientSideSingleSelectQuickFilter = ({
84008
+ filter,
84053
84009
  columnDefinition,
84010
+ onChange,
84011
+ onRemove,
84012
+ overlayMatchesTriggerWidth,
84054
84013
  disabled
84055
84014
  }) => {
84015
+ return /* @__PURE__ */ React76__default.default.createElement(
84016
+ StyledSuperSelectWrapper,
84017
+ {
84018
+ $enabled: Boolean(filter.filterValues?.length),
84019
+ "data-test-id": "client-side-single-select-quick-filter"
84020
+ },
84021
+ /* @__PURE__ */ React76__default.default.createElement(
84022
+ coreReact.UNSAFE_SuperSelect,
84023
+ {
84024
+ overlayMatchesTriggerWidth,
84025
+ value: filter.filterValues ?? [],
84026
+ search: false,
84027
+ multiple: false,
84028
+ options: filter.options,
84029
+ disabled,
84030
+ getOptionValue: (option) => getId(columnDefinition.filterProps?.getId, option),
84031
+ getOptionLabel: (option) => getLabel(columnDefinition.filterProps?.getLabel, option),
84032
+ onChange: (values2) => {
84033
+ const valuesArray = ensureArray(values2);
84034
+ if (!valuesArray.length) {
84035
+ onRemove?.();
84036
+ return;
84037
+ }
84038
+ onChange?.(valuesArray);
84039
+ },
84040
+ ...getSuperSelectFilterPreset(columnDefinition)
84041
+ }
84042
+ )
84043
+ );
84044
+ };
84045
+ var useSuperSelectOptionAsValueWorkaround3 = ({
84046
+ originValue,
84047
+ originOptions,
84048
+ getId: getId3,
84049
+ loading
84050
+ }) => {
84051
+ const isValueFromOptions = React76__default.default.useRef(false);
84052
+ const getValueFromOptions = () => {
84053
+ const valueIds = originValue.map((option) => getId(getId3, option));
84054
+ isValueFromOptions.current = true;
84055
+ return originOptions.filter(
84056
+ (option) => valueIds.includes(getId(getId3, option))
84057
+ );
84058
+ };
84059
+ const hasOptions = originOptions.length > 0 && !loading;
84060
+ const hasValue = originValue?.length > 0;
84061
+ const options = !hasOptions && hasValue ? originValue : originOptions;
84062
+ const value = !hasOptions ? originValue : isValueFromOptions.current ? originValue : getValueFromOptions();
84063
+ return {
84064
+ options,
84065
+ value,
84066
+ getOptionValue: (option) => option
84067
+ };
84068
+ };
84069
+ var ServerSideSingleSelectQuickFilter = ({ columnDefinition, overlayMatchesTriggerWidth, disabled }) => {
84056
84070
  const {
84057
84071
  options: originOptions,
84072
+ onClearFilter,
84073
+ fieldName,
84058
84074
  value: originValue = [],
84059
84075
  onChange,
84060
84076
  getOptions,
84061
84077
  loading
84062
84078
  } = useServerSideFilter({ columnDefinition });
84063
- const { options, value } = useSuperSelectOptionAsValueWorkaround({
84079
+ const { options, value, getOptionValue } = useSuperSelectOptionAsValueWorkaround3({
84064
84080
  originOptions,
84065
84081
  originValue,
84066
84082
  loading,
84067
84083
  getId: columnDefinition.filterProps?.getId
84068
84084
  });
84069
- const I18n = coreReact.useI18nContext();
84070
- const getId3 = columnDefinition.filterProps?.getId || defaultGetId2;
84071
- const getLabel3 = columnDefinition.filterProps?.getLabel || defaultGetLabel2;
84072
- const determineSelectedState = (selection) => {
84073
- if (options.length === selection.length) {
84074
- return "all";
84075
- }
84076
- if (selection.length && (options.length > selection.length || options.length < selection.length)) {
84077
- return "partial";
84078
- }
84079
- if (selection.length === 0) {
84080
- return "none";
84081
- }
84082
- return "none";
84083
- };
84084
- const ids = React76__default.default.useMemo(() => value.map(({ id }) => id), [value]);
84085
- const [selectedValueIds, setSelectedValueIds] = React76__default.default.useState(ids);
84086
- const [selectState, setSelectState] = React76__default.default.useState(
84087
- determineSelectedState(value)
84088
- );
84089
- const [disabledValues, setDisabledValues] = React76__default.default.useState([]);
84090
- const [enableSublocations, setEnableSublocations] = React76__default.default.useState(false);
84091
- const onSelectSublocations = React76__default.default.useCallback(() => {
84092
- if (enableSublocations) {
84093
- setDisabledValues([]);
84094
- } else {
84095
- const newDisabledValues = [];
84096
- value.forEach((location) => {
84097
- newDisabledValues.push(...findSublocations(location));
84098
- });
84099
- const uniqDisabledValues = ramda.uniqBy(ramda.prop("id"), newDisabledValues).filter(
84100
- ({ id }) => !selectedValueIds.includes(id)
84101
- );
84102
- setDisabledValues(uniqDisabledValues);
84103
- }
84104
- setEnableSublocations(!enableSublocations);
84105
- }, [enableSublocations, value, selectedValueIds, options]);
84106
- const onSelectAll = React76__default.default.useCallback(() => {
84107
- if (selectState === "none" || selectState === "partial") {
84108
- setSelectState("all");
84109
- setSelectedValueIds(options.map(({ id }) => id));
84110
- onChange(options);
84111
- }
84112
- if (selectState === "all") {
84113
- setSelectState("none");
84114
- setSelectedValueIds([]);
84115
- onChange([]);
84085
+ const hasFetchedOptions = React76__default.default.useRef(false);
84086
+ React76__default.default.useEffect(() => {
84087
+ if (!hasFetchedOptions.current && !originOptions.length) {
84088
+ getOptions();
84089
+ hasFetchedOptions.current = true;
84116
84090
  }
84117
- }, [options, selectState, selectedValueIds]);
84118
- const onSelect = (selection) => {
84119
- if (selection.item.id === "select_all") {
84091
+ }, [getOptions, originOptions.length]);
84092
+ const handleOnChange = (values2) => {
84093
+ const selectedValues = ensureArray(values2);
84094
+ if (!selectedValues.length) {
84095
+ onClearFilter?.(fieldName);
84096
+ getOptions();
84120
84097
  return;
84121
84098
  }
84122
- if (selection.item.id === "include_sublocations") {
84123
- return onChange(
84124
- value.map((item) => ({
84125
- ...item,
84126
- sublocations: enableSublocations ? [] : findSublocations(item)
84127
- }))
84128
- );
84129
- }
84130
- let newSelections = [];
84131
- if (selectedValueIds.includes(getId3(selection.item))) {
84132
- newSelections = removeSelections(selection.item, value);
84133
- } else {
84134
- newSelections = [...value, selection.item];
84135
- const sublocationsToDisable = handleSelectSublocations(selection.item);
84136
- const newDisabledValues = [
84137
- ...disabledValues,
84138
- ...sublocationsToDisable.filter(
84139
- ({ id }) => !selectedValueIds.includes(id)
84140
- )
84141
- ];
84142
- setDisabledValues(newDisabledValues);
84143
- }
84144
- setSelectState(determineSelectedState(newSelections));
84145
- setSelectedValueIds(newSelections.map(({ id }) => id));
84146
- onChange(
84147
- newSelections.map((item) => ({
84148
- ...item,
84149
- sublocations: handleSelectSublocations(item)
84150
- }))
84151
- );
84152
- };
84153
- const findSublocations = (selected) => {
84154
- return options.filter((option) => {
84155
- return ramda.startsWith(
84156
- `${getLabel3(selected).toLowerCase()} > `,
84157
- getLabel3(option).toLowerCase()
84158
- );
84159
- });
84099
+ onChange(selectedValues);
84160
84100
  };
84161
- const handleSelectSublocations = (selected) => {
84162
- if (enableSublocations) {
84163
- const filteredOptions = findSublocations(selected);
84164
- return filteredOptions;
84165
- } else {
84166
- return [];
84101
+ const handleOnOpenChange = (open) => {
84102
+ if (open && !originOptions.length) {
84103
+ getOptions();
84167
84104
  }
84168
84105
  };
84169
- const removeSelections = React76__default.default.useCallback(
84170
- function(selection, selected) {
84171
- const sublocations = handleSelectSublocations(selection);
84172
- const disabledValueIds = disabledValues.map(({ id }) => id);
84173
- const sublocationsToRemoveFromDisabledIds = sublocations.filter(({ id }) => disabledValueIds.includes(id)).map(({ id }) => id);
84174
- setDisabledValues(
84175
- disabledValues.filter(
84176
- ({ id }) => !sublocationsToRemoveFromDisabledIds.includes(id)
84177
- )
84178
- );
84179
- return selected.filter((item) => getId3(item) !== getId3(selection));
84106
+ return /* @__PURE__ */ React76__default.default.createElement(
84107
+ StyledSuperSelectWrapper,
84108
+ {
84109
+ $enabled: Boolean(value?.length),
84110
+ "data-test-id": "server-side-single-select-quick-filter"
84180
84111
  },
84181
- [enableSublocations, disabledValues]
84112
+ /* @__PURE__ */ React76__default.default.createElement(
84113
+ coreReact.UNSAFE_SuperSelect,
84114
+ {
84115
+ overlayMatchesTriggerWidth,
84116
+ loading,
84117
+ value: value ?? [],
84118
+ search: false,
84119
+ disabled,
84120
+ getOptionLabel: (option) => getLabel(columnDefinition.filterProps?.getLabel, option),
84121
+ getOptionValue,
84122
+ multiple: false,
84123
+ options,
84124
+ onChange: handleOnChange,
84125
+ onOpenChange: handleOnOpenChange,
84126
+ ...getSuperSelectFilterPreset(columnDefinition)
84127
+ }
84128
+ )
84182
84129
  );
84183
- React76__default.default.useEffect(() => {
84184
- setSelectState(determineSelectedState(value));
84185
- }, [value]);
84186
- const overlay = /* @__PURE__ */ React76__default.default.createElement(
84187
- LocationQuickFilterOverlay,
84130
+ };
84131
+ var SingleSelectQuickFilterRenderer = (props) => {
84132
+ const { onServerSideDataRequest } = useInternalTableContext();
84133
+ if (!isClientSideFilterProps(props, !!onServerSideDataRequest)) {
84134
+ return /* @__PURE__ */ React76__default.default.createElement(ServerSideSingleSelectQuickFilter, { ...props });
84135
+ }
84136
+ return /* @__PURE__ */ React76__default.default.createElement(ClientSideSingleSelectQuickFilter, { ...props });
84137
+ };
84138
+ var SingleSelectQuickFilterRenderer_default = SingleSelectQuickFilterRenderer;
84139
+ var FiltersPanelToggleButton = ({ hasSelectedFilters, hasDefinedFilters }) => {
84140
+ const I18n = coreReact.useI18nContext();
84141
+ const { contextPanel } = useInternalTableContext();
84142
+ const hasNoContent = useTableHasNoContent();
84143
+ if (!hasDefinedFilters) {
84144
+ return null;
84145
+ }
84146
+ return /* @__PURE__ */ React76__default.default.createElement(
84147
+ EmptyResultsControlTooltip,
84188
84148
  {
84189
- columnDefinition,
84190
- enableSublocations,
84191
- onSelectAll,
84192
- onSelectSublocations,
84193
- selectState,
84194
- value,
84195
- options,
84196
- disabledOptions: disabledValues,
84197
- getId: getId3,
84198
- getLabel: getLabel3,
84199
- loading,
84200
- onSelect,
84201
- selectedValueIds
84149
+ featureI18nKey: "featureFilter",
84150
+ enabled: hasNoContent
84151
+ },
84152
+ /* @__PURE__ */ React76__default.default.createElement(
84153
+ coreReact.ToggleButton,
84154
+ {
84155
+ "data-qa": "data-table-show-filters-button",
84156
+ disabled: hasNoContent,
84157
+ icon: /* @__PURE__ */ React76__default.default.createElement(FilterIcon, null),
84158
+ onClick: () => {
84159
+ if (contextPanel.content === "filters") {
84160
+ contextPanel.hide();
84161
+ } else {
84162
+ contextPanel.show("filters");
84163
+ }
84164
+ },
84165
+ selected: contextPanel.content === "filters"
84166
+ },
84167
+ hasSelectedFilters ? I18n.t("dataTable.filters.moreFilters") : I18n.t("dataTable.filters.filters")
84168
+ )
84169
+ );
84170
+ };
84171
+ var ServerSideFiltersPanelToggleButton = () => {
84172
+ const {
84173
+ filterStorage: { hasDefinedFilters, hasSelectedFilters }
84174
+ } = useInternalTableContext();
84175
+ return /* @__PURE__ */ React76__default.default.createElement(
84176
+ FiltersPanelToggleButton,
84177
+ {
84178
+ hasDefinedFilters,
84179
+ hasSelectedFilters
84202
84180
  }
84203
84181
  );
84204
- const triggerLabel = value.length ? value.length === 1 ? `: ${value[0].label}` : `: (${value.length})` : "";
84182
+ };
84183
+ var ClientSideFiltersPanelToggleButton = () => {
84184
+ const { filterState } = useInternalTableContext();
84185
+ const activeFilters = React76__default.default.useMemo(() => {
84186
+ return filterState.allAvailableFilters.filter(({ instance }) => {
84187
+ return instance.isFilterActive();
84188
+ });
84189
+ }, [filterState.allAvailableFilters]);
84205
84190
  return /* @__PURE__ */ React76__default.default.createElement(
84206
- coreReact.OverlayTrigger,
84191
+ FiltersPanelToggleButton,
84207
84192
  {
84208
- overlay,
84209
- beforeShow: getOptions,
84210
- placement: "bottom-left"
84193
+ hasDefinedFilters: filterState.allAvailableFilters.length > 0,
84194
+ hasSelectedFilters: activeFilters.length > 0
84195
+ }
84196
+ );
84197
+ };
84198
+
84199
+ // src/QuickControls/QuickFilters.tsx
84200
+ var defaultQuickFilterRenderers = {
84201
+ MultiSelectFilterRenderer: MultiSelectQuickFilterRenderer_default,
84202
+ DateFilterRenderer: DateQuickFilterRenderer_default,
84203
+ LocationFilterRenderer: LocationQuickFilterRenderer_default,
84204
+ SingleSelectFilterRenderer: SingleSelectQuickFilterRenderer_default
84205
+ };
84206
+ function getQuickFilterRenderer(colDef) {
84207
+ if (!colDef)
84208
+ return null;
84209
+ if (colDef.quickFilterRenderer) {
84210
+ return colDef.quickFilterRenderer;
84211
+ }
84212
+ const filterRendererName = colDef.filterRenderer?.displayName;
84213
+ if (filterRendererName) {
84214
+ return defaultQuickFilterRenderers[filterRendererName] || null;
84215
+ }
84216
+ return null;
84217
+ }
84218
+ var FilterIcon = () => {
84219
+ return /* @__PURE__ */ React76__default.default.createElement(
84220
+ "svg",
84221
+ {
84222
+ focusable: false,
84223
+ width: "16",
84224
+ height: "16",
84225
+ viewBox: "0 0 20 20",
84226
+ fill: "none",
84227
+ xmlns: "http://www.w3.org/2000/svg"
84211
84228
  },
84212
- value.length ? /* @__PURE__ */ React76__default.default.createElement(
84213
- QuickFilterLabel,
84214
- {
84215
- enabled: true,
84216
- disabled,
84217
- label: `${I18n.t(
84218
- "dataTable.filters.locationFilter.locations"
84219
- )}${triggerLabel}`,
84220
- onClear: () => {
84221
- onChange([]);
84222
- },
84223
- block: true
84224
- }
84225
- ) : /* @__PURE__ */ React76__default.default.createElement(
84226
- QuickFilterLabel,
84229
+ /* @__PURE__ */ React76__default.default.createElement(
84230
+ "path",
84227
84231
  {
84228
- enabled: false,
84229
- disabled,
84230
- label: `${I18n.t(
84231
- "dataTable.filters.locationFilter.locations"
84232
- )}${triggerLabel}`,
84233
- block: true
84232
+ fillRule: "evenodd",
84233
+ clipRule: "evenodd",
84234
+ d: "M3 5V7H17V5H3ZM8 15H12V13H8V15ZM15 11H5V9H15V11Z",
84235
+ fill: "currentColor"
84234
84236
  }
84235
84237
  )
84236
84238
  );
84237
84239
  };
84238
- var LocationQuickFilterRenderer_default = LocationQuickFilterRenderer;
84239
- var StyledFilterPresetPopoverContent = styled4__default.default(coreReact.Popover.Content)`
84240
- padding: ${coreReact.spacing.sm}px ${coreReact.spacing.lg}px;
84240
+ var StyledFilterTokenWrapper = styled3__default.default.div`
84241
+ ${coreReact.UNSAFE_StyledFilterTokenLabel} {
84242
+ font-weight: ${coreReact.typographyWeights.semibold};
84243
+ }
84241
84244
  `;
84242
- var getValueLabel = (isValueEmpty, value, placeholder, filterName) => {
84243
- const prefixLabel = isValueEmpty ? placeholder || filterName : filterName;
84244
- const valueLabel = value ? `${prefixLabel ? ": " : ""}${value}` : "";
84245
- return `${prefixLabel}${valueLabel}`;
84246
- };
84247
- var getSuperSelectFilterPreset = (columnDefinition) => {
84248
- const filterName = columnDefinition.headerName;
84249
- const getValueLabel_ = typeof columnDefinition.filterProps?.getFilterTokenText === "function" ? (value) => {
84250
- return columnDefinition.filterProps?.getFilterTokenText?.({
84251
- headerName: columnDefinition.headerName,
84252
- value: Array.isArray(value) ? value : [value]
84253
- });
84254
- } : void 0;
84255
- return {
84256
- components: {
84257
- Label: React76__default.default.forwardRef(() => {
84258
- const ctx = coreReact.UNSAFE_useSuperSelectContext();
84259
- const isValueEmpty = ["", null, void 0].includes(
84260
- ctx.state.value
84261
- );
84262
- return /* @__PURE__ */ React76__default.default.createElement(coreReact.UNSAFE_StyledSuperSelectLabel, { $hoverable: false }, typeof getValueLabel_ === "function" ? getValueLabel_(ctx.state.value) : getValueLabel(
84263
- isValueEmpty,
84264
- ctx.state.selectedLabel,
84265
- ctx.config.placeholder,
84266
- filterName
84267
- ));
84268
- }),
84269
- TriggerContainer: React76__default.default.forwardRef((props, ref) => {
84270
- const ctx = coreReact.UNSAFE_useSuperSelectContext();
84271
- if (!Array.isArray(ctx.state.value)) {
84272
- return /* @__PURE__ */ React76__default.default.createElement(
84273
- coreReact.UNSAFE_StyledSuperSelectTrigger,
84274
- {
84275
- $block: ctx.config.block,
84276
- ...props,
84277
- ref
84278
- }
84279
- );
84245
+ var ClientSideQuickFilters = ({ overlayMatchesTriggerWidth }) => {
84246
+ const { tableRef, filterState, getColumnDefinition } = useInternalTableContext();
84247
+ const hasNoContent = useTableHasNoContent();
84248
+ const { quickFilters, tokens } = React76__default.default.useMemo(() => {
84249
+ return filterState.allAvailableFilters.reduce(
84250
+ (acc, filter) => {
84251
+ const colDef = getColumnDefinition(filter.field);
84252
+ if (!colDef) {
84253
+ return acc;
84280
84254
  }
84281
- return /* @__PURE__ */ React76__default.default.createElement(
84282
- coreReact.Popover,
84283
- {
84284
- placement: "top",
84285
- trigger: ctx.state.value.length > 1 ? "hover" : "none",
84286
- overlay: /* @__PURE__ */ React76__default.default.createElement(StyledFilterPresetPopoverContent, null, /* @__PURE__ */ React76__default.default.createElement(coreReact.Typography, null, ctx.state.value.map((v) => {
84287
- const option = ctx.state.options.find(
84288
- (option2) => ctx.option.value(option2) === v
84289
- );
84290
- return option ? ctx.option.label(option) : "";
84291
- }).join(", ")))
84292
- },
84293
- /* @__PURE__ */ React76__default.default.createElement(
84294
- coreReact.UNSAFE_StyledSuperSelectTrigger,
84295
- {
84296
- $block: ctx.config.block,
84297
- ...props,
84298
- ref
84299
- }
84300
- )
84301
- );
84302
- }),
84303
- MultiValueContainer: () => {
84304
- const ctx = coreReact.UNSAFE_useSuperSelectContext();
84305
- if (Array.isArray(ctx.state.value)) {
84306
- const isValueEmpty = !ctx.state.value.length;
84307
- const value = ctx.state.value.length > 1 ? `(${ctx.state.value.length})` : ctx.state.value.length === 1 ? `${ctx.state.selectedLabel}` : "";
84308
- return /* @__PURE__ */ React76__default.default.createElement(coreReact.UNSAFE_StyledSuperSelectLabel, { $hoverable: false }, typeof getValueLabel_ === "function" ? getValueLabel_(ctx.state.value) : getValueLabel(
84309
- isValueEmpty,
84310
- value,
84311
- ctx.config.placeholder,
84312
- filterName
84313
- ));
84255
+ const isInteractive = colDef?.filterProps?.isInteractiveFilterToken === true;
84256
+ const hasQuickFilterRenderer = !!colDef?.quickFilterRenderer;
84257
+ const filterIsActive = filter.instance.isFilterActive();
84258
+ if (hasQuickFilterRenderer || filterIsActive && isInteractive && getQuickFilterRenderer(colDef) !== null) {
84259
+ return { ...acc, quickFilters: [...acc.quickFilters, filter] };
84260
+ } else if (filterIsActive) {
84261
+ return { ...acc, tokens: [...acc.tokens, filter] };
84314
84262
  }
84315
- return /* @__PURE__ */ React76__default.default.createElement("div", null, "Value is not an array");
84263
+ return acc;
84264
+ },
84265
+ {
84266
+ quickFilters: [],
84267
+ tokens: []
84316
84268
  }
84269
+ );
84270
+ }, [filterState.allAvailableFilters, getColumnDefinition]);
84271
+ const isEmpty2 = quickFilters.length === 0 && tokens.length === 0;
84272
+ return isEmpty2 ? null : /* @__PURE__ */ React76__default.default.createElement(
84273
+ coreReact.FlexList,
84274
+ {
84275
+ padding: "xs none",
84276
+ size: "none",
84277
+ alignItems: "center",
84278
+ wrap: "wrap",
84279
+ gap: "sm"
84317
84280
  },
84318
- selectionStyle: "highlight"
84319
- };
84320
- };
84321
- var StyledSuperSelectWrapper = styled4__default.default.div`
84322
- ${coreReact.UNSAFE_StyledSuperSelectTrigger} {
84323
- width: auto;
84324
- }
84325
-
84326
- ${({ $enabled }) => $enabled && styled4.css`
84327
- ${coreReact.UNSAFE_StyledSuperSelectTrigger} {
84328
- max-width: 360px;
84329
- background: ${coreReact.colors.blue96};
84330
- border-color: ${coreReact.colors.blue96};
84331
- font-weight: ${coreReact.typographyWeights.semibold};
84332
-
84333
- &:hover {
84334
- background: ${coreReact.colors.blue90};
84335
- border-color: ${coreReact.colors.blue90};
84281
+ quickFilters.map((filter) => {
84282
+ const colDef = getColumnDefinition(filter.field);
84283
+ const QuickFilter = getQuickFilterRenderer(colDef);
84284
+ if (!colDef || !QuickFilter) {
84285
+ return null;
84286
+ }
84287
+ return /* @__PURE__ */ React76__default.default.createElement(
84288
+ EmptyResultsControlTooltip,
84289
+ {
84290
+ featureI18nKey: "featureQuickFilter",
84291
+ enabled: hasNoContent
84292
+ },
84293
+ /* @__PURE__ */ React76__default.default.createElement(
84294
+ QuickFilter,
84295
+ {
84296
+ key: filter.field,
84297
+ filter,
84298
+ columnDefinition: colDef,
84299
+ disabled: hasNoContent,
84300
+ onChange: (value) => tableRef?.current?.applyListFilter(filter.field, value),
84301
+ onRemove: () => tableRef?.current?.removeFilter(filter.field),
84302
+ overlayMatchesTriggerWidth
84303
+ }
84304
+ )
84305
+ );
84306
+ }),
84307
+ tokens.map((filter) => {
84308
+ const colDef = getColumnDefinition(filter.field);
84309
+ if (!colDef) {
84310
+ return null;
84311
+ }
84312
+ return /* @__PURE__ */ React76__default.default.createElement(StyledFilterTokenWrapper, { key: filter.field }, /* @__PURE__ */ React76__default.default.createElement(coreReact.UNSAFE_FilterToken, null, /* @__PURE__ */ React76__default.default.createElement(coreReact.UNSAFE_FilterToken.Label, null, getFilterTokenText(colDef, filter.filterValues)), /* @__PURE__ */ React76__default.default.createElement(
84313
+ coreReact.UNSAFE_FilterToken.Remove,
84314
+ {
84315
+ onClick: () => tableRef?.current?.removeFilter(filter.field)
84336
84316
  }
84337
-
84338
- ${coreReact.UNSAFE_StyledSuperSelectLabel} {
84339
- color: ${coreReact.colors.blue45};
84317
+ )));
84318
+ })
84319
+ );
84320
+ };
84321
+ var ServerSideQuickFilters = ({ overlayMatchesTriggerWidth }) => {
84322
+ const {
84323
+ filterStorage: {
84324
+ hasDefinedFilters,
84325
+ onClearFilter,
84326
+ possibleFilters,
84327
+ selectedFilters,
84328
+ getListFilter
84329
+ },
84330
+ getColumnDefinition
84331
+ } = useInternalTableContext();
84332
+ const hasNoContent = useTableHasNoContent();
84333
+ const { quickFilterNames, tokenNames } = React76__default.default.useMemo(() => {
84334
+ const appliedFilterNames = Object.keys(selectedFilters);
84335
+ const isActiveFilter = (filterName) => appliedFilterNames.includes(filterName);
84336
+ return possibleFilters.reduce(
84337
+ (acc, filterName) => {
84338
+ const colDef = getColumnDefinition(filterName);
84339
+ if (!colDef) {
84340
+ return acc;
84340
84341
  }
84341
-
84342
- ${coreReact.StyledButton} {
84343
- color: ${coreReact.colors.blue45};
84344
-
84345
- &:hover {
84346
- background: white;
84347
- }
84342
+ const isInteractive = colDef?.filterProps?.isInteractiveFilterToken === true;
84343
+ const hasQuickFilterRenderer = !!colDef?.quickFilterRenderer;
84344
+ const filterIsActive = isActiveFilter(filterName);
84345
+ if (hasQuickFilterRenderer || filterIsActive && isInteractive && getQuickFilterRenderer(colDef) !== null) {
84346
+ return {
84347
+ ...acc,
84348
+ quickFilterNames: [...acc.quickFilterNames, filterName]
84349
+ };
84350
+ } else if (filterIsActive) {
84351
+ return {
84352
+ ...acc,
84353
+ tokenNames: [...acc.tokenNames, filterName]
84354
+ };
84348
84355
  }
84349
-
84350
- ${coreReact.UNSAFE_StyledSuperSelectArrow} {
84351
- svg {
84352
- fill: ${coreReact.colors.blue45};
84356
+ return acc;
84357
+ },
84358
+ {
84359
+ quickFilterNames: [],
84360
+ tokenNames: []
84361
+ }
84362
+ );
84363
+ }, [possibleFilters, selectedFilters, getColumnDefinition]);
84364
+ if (!hasDefinedFilters) {
84365
+ return null;
84366
+ }
84367
+ const isEmpty2 = quickFilterNames.length === 0 && tokenNames.length === 0;
84368
+ return isEmpty2 ? null : /* @__PURE__ */ React76__default.default.createElement(
84369
+ coreReact.FlexList,
84370
+ {
84371
+ padding: "xs none",
84372
+ size: "none",
84373
+ alignItems: "center",
84374
+ wrap: "wrap",
84375
+ gap: "sm",
84376
+ "data-qa": "data-table-quick-filters"
84377
+ },
84378
+ quickFilterNames.map((fieldName) => {
84379
+ const colDef = getColumnDefinition(fieldName);
84380
+ const QuickFilter = getQuickFilterRenderer(colDef);
84381
+ if (!colDef || !QuickFilter) {
84382
+ return null;
84383
+ }
84384
+ return /* @__PURE__ */ React76__default.default.createElement(
84385
+ EmptyResultsControlTooltip,
84386
+ {
84387
+ featureI18nKey: "featureQuickFilter",
84388
+ enabled: hasNoContent
84389
+ },
84390
+ /* @__PURE__ */ React76__default.default.createElement(
84391
+ QuickFilter,
84392
+ {
84393
+ key: fieldName,
84394
+ columnDefinition: colDef,
84395
+ disabled: hasNoContent,
84396
+ overlayMatchesTriggerWidth
84353
84397
  }
84354
- }
84398
+ )
84399
+ );
84400
+ }),
84401
+ tokenNames.map((fieldName) => {
84402
+ const colDef = getColumnDefinition(fieldName);
84403
+ if (!colDef) {
84404
+ return null;
84355
84405
  }
84356
- `}
84357
- `;
84358
-
84359
- // src/QuickFilterRenderers/types.ts
84360
- function isClientSideFilterProps(_value, isServerSideDataRequest) {
84361
- return !isServerSideDataRequest;
84362
- }
84363
-
84364
- // src/QuickFilterRenderers/MultiSelectQuickFilterRenderer.tsx
84365
- var ClientSideMultiSelectQuickFilter = ({
84366
- filter,
84367
- columnDefinition,
84368
- onChange,
84369
- onRemove,
84370
- overlayMatchesTriggerWidth,
84371
- disabled
84372
- }) => {
84373
- return /* @__PURE__ */ React76__default.default.createElement(StyledSuperSelectWrapper, { $enabled: Boolean(filter.filterValues?.length) }, /* @__PURE__ */ React76__default.default.createElement(
84374
- coreReact.UNSAFE_SuperSelect,
84375
- {
84376
- overlayMatchesTriggerWidth,
84377
- value: filter.filterValues === null ? [] : filter.filterValues,
84378
- search: false,
84379
- multiple: true,
84380
- options: filter.options,
84381
- disabled,
84382
- getOptionValue: (option) => {
84383
- return getId(columnDefinition.filterProps?.getId, option);
84384
- },
84385
- getOptionLabel: (option) => {
84386
- return getLabel(columnDefinition.filterProps?.getLabel, option);
84387
- },
84388
- onChange: (values2) => {
84389
- if (Array.isArray(values2) && !values2.length) {
84390
- onRemove?.();
84391
- return;
84406
+ const filter = getListFilter(fieldName);
84407
+ return /* @__PURE__ */ React76__default.default.createElement(StyledFilterTokenWrapper, { key: fieldName }, /* @__PURE__ */ React76__default.default.createElement(coreReact.UNSAFE_FilterToken, null, /* @__PURE__ */ React76__default.default.createElement(coreReact.UNSAFE_FilterToken.Label, null, getFilterTokenText(
84408
+ colDef,
84409
+ colDef.filterRenderer === DateFilterRenderer_default ? filter.value : filter.selected
84410
+ )), /* @__PURE__ */ React76__default.default.createElement(
84411
+ coreReact.UNSAFE_FilterToken.Remove,
84412
+ {
84413
+ "data-qa": "data-table-quick-filter-remove-token",
84414
+ onClick: () => onClearFilter(fieldName)
84392
84415
  }
84393
- onChange?.(values2);
84394
- },
84395
- ...getSuperSelectFilterPreset(columnDefinition)
84396
- }
84397
- ));
84416
+ )));
84417
+ })
84418
+ );
84398
84419
  };
84399
- var useSuperSelectOptionAsValueWorkaround2 = ({
84400
- originValue,
84401
- originOptions,
84402
- getId: getId3,
84403
- loading
84404
- }) => {
84405
- const isValueFromOptions = React76__default.default.useRef(false);
84406
- const getValueFromOptions = () => {
84407
- const valueIds = originValue.map((option) => getId(getId3, option));
84408
- isValueFromOptions.current = true;
84409
- return originOptions.filter(
84410
- (option) => valueIds.includes(getId(getId3, option))
84420
+ var QuickFilters = ({ overlayMatchesTriggerWidth }) => {
84421
+ const { onServerSideDataRequest } = useInternalTableContext();
84422
+ if (onServerSideDataRequest) {
84423
+ return /* @__PURE__ */ React76__default.default.createElement(
84424
+ ServerSideQuickFilters,
84425
+ {
84426
+ overlayMatchesTriggerWidth
84427
+ }
84411
84428
  );
84412
- };
84413
- const hasOptions = originOptions.length > 0 && !loading;
84414
- const hasValue = originValue?.length > 0;
84415
- const options = !hasOptions && hasValue ? originValue : originOptions;
84416
- const value = !hasOptions ? originValue : isValueFromOptions.current ? originValue : getValueFromOptions();
84417
- return {
84418
- options,
84419
- value,
84420
- getOptionValue: (option) => option
84421
- };
84422
- };
84423
- var ServerSideMultiSelectQuickFilter = ({ columnDefinition, overlayMatchesTriggerWidth, disabled }) => {
84424
- const {
84425
- options: originOptions,
84426
- onClearFilter,
84427
- fieldName,
84428
- value: originValue = [],
84429
- onChange,
84430
- getOptions,
84431
- loading
84432
- } = useServerSideFilter({ columnDefinition });
84433
- const { options, value, getOptionValue } = useSuperSelectOptionAsValueWorkaround2({
84434
- originOptions,
84435
- originValue,
84436
- loading,
84437
- getId: columnDefinition.filterProps?.getId
84438
- });
84439
- return /* @__PURE__ */ React76__default.default.createElement(StyledSuperSelectWrapper, { $enabled: Boolean(value?.length) }, /* @__PURE__ */ React76__default.default.createElement(
84440
- coreReact.UNSAFE_SuperSelect,
84429
+ }
84430
+ return /* @__PURE__ */ React76__default.default.createElement(
84431
+ ClientSideQuickFilters,
84441
84432
  {
84442
- overlayMatchesTriggerWidth,
84443
- loading,
84444
- value: value === null ? [] : value,
84445
- search: false,
84446
- getOptionLabel: (option) => {
84447
- return getLabel(columnDefinition.filterProps?.getLabel, option);
84448
- },
84449
- getOptionValue,
84450
- multiple: true,
84451
- options,
84452
- disabled,
84453
- onChange: (values2) => {
84454
- if (Array.isArray(values2) && !values2.length) {
84455
- onClearFilter?.(fieldName);
84456
- getOptions();
84457
- return;
84458
- }
84459
- onChange(values2);
84460
- },
84461
- onOpenChange: (open) => {
84462
- if (open && !originOptions.length) {
84463
- getOptions();
84464
- }
84465
- },
84466
- ...getSuperSelectFilterPreset(columnDefinition)
84433
+ overlayMatchesTriggerWidth
84467
84434
  }
84468
- ));
84435
+ );
84469
84436
  };
84470
- var MultiSelectQuickFilterRenderer = (props) => {
84437
+ var FiltersPanelButton = () => {
84471
84438
  const { onServerSideDataRequest } = useInternalTableContext();
84472
- if (!isClientSideFilterProps(props, !!onServerSideDataRequest)) {
84473
- return /* @__PURE__ */ React76__default.default.createElement(ServerSideMultiSelectQuickFilter, { ...props });
84439
+ if (onServerSideDataRequest) {
84440
+ return /* @__PURE__ */ React76__default.default.createElement(ServerSideFiltersPanelToggleButton, null);
84474
84441
  }
84475
- return /* @__PURE__ */ React76__default.default.createElement(ClientSideMultiSelectQuickFilter, { ...props });
84442
+ return /* @__PURE__ */ React76__default.default.createElement(ClientSideFiltersPanelToggleButton, null);
84476
84443
  };
84477
- var MultiSelectQuickFilterRenderer_default = MultiSelectQuickFilterRenderer;
84478
- var ClientSideSingleSelectQuickFilter = ({
84479
- filter,
84480
- columnDefinition,
84481
- onChange,
84482
- onRemove,
84483
- overlayMatchesTriggerWidth,
84484
- disabled
84485
- }) => {
84444
+ var RowGroupSelector = ({ localeText }) => {
84445
+ const {
84446
+ columnDefinitions: _columnDefinitions,
84447
+ columnApi,
84448
+ gridApi,
84449
+ tableRef
84450
+ } = useInternalTableContext();
84451
+ const hasNoContent = useTableHasNoContent();
84452
+ const [columnDefinitions, setColumnDefinitions] = React76__default.default.useState(_columnDefinitions);
84453
+ const groupableColumns = React76__default.default.useMemo(
84454
+ () => mapColumnsToOptions(
84455
+ columnDefinitions.filter((column2) => column2.enableRowGroup)
84456
+ ),
84457
+ [columnDefinitions]
84458
+ );
84459
+ const groupedColumns = React76__default.default.useMemo(() => {
84460
+ const rowGrouping = columnApi?.getRowGroupColumns() ?? [];
84461
+ return rowGrouping.map((column2) => {
84462
+ const colDef = column2.getColDef();
84463
+ return transformToColumnDefinition(colDef);
84464
+ });
84465
+ }, [columnDefinitions]);
84466
+ const selectedColumns = React76__default.default.useMemo(
84467
+ () => mapColumnsToOptions(groupedColumns),
84468
+ [groupedColumns]
84469
+ );
84470
+ const onGroupedClear = React76__default.default.useCallback(() => {
84471
+ tableRef?.current?.setRowGrouping([]);
84472
+ }, [tableRef]);
84473
+ const onGroupedRowChange = React76__default.default.useCallback(
84474
+ (newValue) => {
84475
+ const fields = newValue.map((val) => {
84476
+ return val.id;
84477
+ });
84478
+ if (!ramda.equals(selectedColumns, newValue)) {
84479
+ tableRef?.current?.setRowGrouping(fields);
84480
+ }
84481
+ },
84482
+ [selectedColumns]
84483
+ );
84484
+ React76__default.default.useEffect(() => {
84485
+ function onDisplayedColumnsChanged(event) {
84486
+ const agColumnDefs = event.api.getColumnDefs();
84487
+ if (agColumnDefs?.length) {
84488
+ const flattenedAgColDefs = flattenColDefs(event.api.getColumnDefs());
84489
+ const dataTableColumnDefinitions = flattenedAgColDefs.map(
84490
+ transformToColumnDefinition
84491
+ );
84492
+ setColumnDefinitions(dataTableColumnDefinitions);
84493
+ }
84494
+ }
84495
+ gridApi?.addEventListener(
84496
+ "displayedColumnsChanged",
84497
+ onDisplayedColumnsChanged
84498
+ );
84499
+ return () => {
84500
+ removeEventListenerFromGrid(
84501
+ "displayedColumnsChanged",
84502
+ onDisplayedColumnsChanged,
84503
+ gridApi
84504
+ );
84505
+ };
84506
+ }, [gridApi]);
84507
+ if (groupableColumns.length === 0) {
84508
+ return null;
84509
+ }
84486
84510
  return /* @__PURE__ */ React76__default.default.createElement(
84487
- StyledSuperSelectWrapper,
84511
+ EmptyResultsControlTooltip,
84488
84512
  {
84489
- $enabled: Boolean(filter.filterValues?.length),
84490
- "data-test-id": "client-side-single-select-quick-filter"
84513
+ featureI18nKey: "featureGroupBy",
84514
+ enabled: hasNoContent
84491
84515
  },
84492
84516
  /* @__PURE__ */ React76__default.default.createElement(
84493
- coreReact.UNSAFE_SuperSelect,
84517
+ coreReact.Tooltip,
84494
84518
  {
84495
- overlayMatchesTriggerWidth,
84496
- value: filter.filterValues ?? [],
84497
- search: false,
84498
- multiple: false,
84499
- options: filter.options,
84500
- disabled,
84501
- getOptionValue: (option) => getId(columnDefinition.filterProps?.getId, option),
84502
- getOptionLabel: (option) => getLabel(columnDefinition.filterProps?.getLabel, option),
84503
- onChange: (values2) => {
84504
- const valuesArray = ensureArray(values2);
84505
- if (!valuesArray.length) {
84506
- onRemove?.();
84507
- return;
84508
- }
84509
- onChange?.(valuesArray);
84510
- },
84511
- ...getSuperSelectFilterPreset(columnDefinition)
84512
- }
84519
+ overlay: localeText.placeholder,
84520
+ trigger: "hover",
84521
+ placement: "top",
84522
+ showDelay: 400
84523
+ },
84524
+ /* @__PURE__ */ React76__default.default.createElement(coreReact.Box, { style: { width: "100%" } }, /* @__PURE__ */ React76__default.default.createElement(
84525
+ labsGroupBySelect.GroupBySelect,
84526
+ {
84527
+ isDisabled: hasNoContent,
84528
+ localeText,
84529
+ onBlur: onGroupedRowChange,
84530
+ onClear: onGroupedClear,
84531
+ options: groupableColumns,
84532
+ selected: selectedColumns
84533
+ }
84534
+ ))
84513
84535
  )
84514
84536
  );
84515
84537
  };
84516
- var useSuperSelectOptionAsValueWorkaround3 = ({
84517
- originValue,
84518
- originOptions,
84519
- getId: getId3,
84520
- loading
84538
+ function mapColumnsToOptions(columnDefinitions) {
84539
+ return columnDefinitions.map((col) => {
84540
+ return {
84541
+ label: col.headerName,
84542
+ id: col.field,
84543
+ key: col.field,
84544
+ group: col.columnGroupName
84545
+ };
84546
+ });
84547
+ }
84548
+ var cx21 = classnames__default.default.bind(quickControlsStyles_default);
84549
+ var ClientSideSearch = ({
84550
+ onSearch,
84551
+ placeholder
84521
84552
  }) => {
84522
- const isValueFromOptions = React76__default.default.useRef(false);
84523
- const getValueFromOptions = () => {
84524
- const valueIds = originValue.map((option) => getId(getId3, option));
84525
- isValueFromOptions.current = true;
84526
- return originOptions.filter(
84527
- (option) => valueIds.includes(getId(getId3, option))
84528
- );
84529
- };
84530
- const hasOptions = originOptions.length > 0 && !loading;
84531
- const hasValue = originValue?.length > 0;
84532
- const options = !hasOptions && hasValue ? originValue : originOptions;
84533
- const value = !hasOptions ? originValue : isValueFromOptions.current ? originValue : getValueFromOptions();
84534
- return {
84535
- options,
84536
- value,
84537
- getOptionValue: (option) => option
84538
- };
84553
+ const [internalValue, setInternalValue] = React76__default.default.useState("");
84554
+ const { tableRef } = useInternalTableContext();
84555
+ const hasNoContent = useTableHasNoContent();
84556
+ const I18n = coreReact.useI18nContext();
84557
+ const debouncedSetSearchValue = React76__default.default.useCallback(
84558
+ debounce5__default.default((value) => {
84559
+ tableRef?.current?.setSearchValue(value);
84560
+ }, 250),
84561
+ [tableRef?.current?.setSearchValue]
84562
+ );
84563
+ const onChange = React76__default.default.useCallback(
84564
+ (value, event) => {
84565
+ setInternalValue(value);
84566
+ if (onSearch) {
84567
+ onSearch(event);
84568
+ } else {
84569
+ debouncedSetSearchValue(value);
84570
+ }
84571
+ },
84572
+ [debouncedSetSearchValue, onSearch]
84573
+ );
84574
+ return /* @__PURE__ */ React76__default.default.createElement(EmptyResultsControlTooltip, { hasSearch: true, enabled: hasNoContent }, /* @__PURE__ */ React76__default.default.createElement(
84575
+ coreReact.Typeahead,
84576
+ {
84577
+ disabled: hasNoContent,
84578
+ "data-qa": "data-table-search",
84579
+ value: internalValue,
84580
+ className: cx21("search", {
84581
+ "search--empty": !internalValue.length
84582
+ }),
84583
+ onChange,
84584
+ placeholder: placeholder || I18n.t("dataTable.search")
84585
+ }
84586
+ ));
84539
84587
  };
84540
- var ServerSideSingleSelectQuickFilter = ({ columnDefinition, overlayMatchesTriggerWidth, disabled }) => {
84541
- const {
84542
- options: originOptions,
84543
- onClearFilter,
84544
- fieldName,
84545
- value: originValue = [],
84546
- onChange,
84547
- getOptions,
84548
- loading
84549
- } = useServerSideFilter({ columnDefinition });
84550
- const { options, value, getOptionValue } = useSuperSelectOptionAsValueWorkaround3({
84551
- originOptions,
84552
- originValue,
84553
- loading,
84554
- getId: columnDefinition.filterProps?.getId
84555
- });
84556
- const hasFetchedOptions = React76__default.default.useRef(false);
84557
- React76__default.default.useEffect(() => {
84558
- if (!hasFetchedOptions.current && !originOptions.length) {
84559
- getOptions();
84560
- hasFetchedOptions.current = true;
84588
+ var Search = (props) => {
84589
+ const { onServerSideDataRequest } = useInternalTableContext();
84590
+ if (onServerSideDataRequest) {
84591
+ return /* @__PURE__ */ React76__default.default.createElement(ServerSideSearch, { ...props });
84592
+ }
84593
+ return /* @__PURE__ */ React76__default.default.createElement(ClientSideSearch, { ...props });
84594
+ };
84595
+
84596
+ // src/QuickControls/QuickControls.tsx
84597
+ var QuickControls = (props) => {
84598
+ const I18n = coreReact.useI18nContext();
84599
+ if (props.children) {
84600
+ return /* @__PURE__ */ React76__default.default.createElement(
84601
+ coreReact.Box,
84602
+ {
84603
+ "data-qa": "data-table-quick-controls",
84604
+ padding: "xs none",
84605
+ style: props.style
84606
+ },
84607
+ props.children
84608
+ );
84609
+ }
84610
+ return /* @__PURE__ */ React76__default.default.createElement(coreReact.Box, { padding: "xs none", style: props.style }, /* @__PURE__ */ React76__default.default.createElement(coreReact.Box, { padding: "xs none", display: "flex-row", justifyContent: "space-between" }, /* @__PURE__ */ React76__default.default.createElement(coreReact.FlexList, { size: "xs", alignItems: "center", marginRight: "sm" }, /* @__PURE__ */ React76__default.default.createElement(
84611
+ Search,
84612
+ {
84613
+ onSearch: props.onSearch,
84614
+ placeholder: props.placeholder,
84615
+ disabled: props.disabledSearch
84561
84616
  }
84562
- }, [getOptions, originOptions.length]);
84563
- const handleOnChange = (values2) => {
84564
- const selectedValues = ensureArray(values2);
84565
- if (!selectedValues.length) {
84566
- onClearFilter?.(fieldName);
84567
- getOptions();
84568
- return;
84617
+ ), /* @__PURE__ */ React76__default.default.createElement(FiltersPanelButton, null)), /* @__PURE__ */ React76__default.default.createElement(coreReact.FlexList, { size: "xs", alignItems: "center" }, /* @__PURE__ */ React76__default.default.createElement(
84618
+ RowGroupSelector,
84619
+ {
84620
+ localeText: {
84621
+ reset: I18n.t("dataTable.tableSettings.reset"),
84622
+ placeholder: I18n.t("dataTable.tableSettings.selectColumnGroup"),
84623
+ selectedItemsPrefix: I18n.t("dataTable.tableSettings.groupBy")
84624
+ }
84569
84625
  }
84570
- onChange(selectedValues);
84571
- };
84572
- const handleOnOpenChange = (open) => {
84573
- if (open && !originOptions.length) {
84574
- getOptions();
84626
+ ), /* @__PURE__ */ React76__default.default.createElement(ConfigPanelButton, null))), /* @__PURE__ */ React76__default.default.createElement(
84627
+ QuickFilters,
84628
+ {
84629
+ overlayMatchesTriggerWidth: props.filterOverlayMatchesTriggerWidth
84575
84630
  }
84576
- };
84631
+ ));
84632
+ };
84633
+
84634
+ // src/utils/addSubcomponents.ts
84635
+ var addSubcomponents = (subs, parent) => {
84636
+ const assigned = parent;
84637
+ Object.keys(subs).forEach((key) => {
84638
+ assigned[key] = subs[key];
84639
+ });
84640
+ return assigned;
84641
+ };
84642
+
84643
+ // src/ClientSideDataTable.tsx
84644
+ var ClientSideDataTable = ({
84645
+ analytics,
84646
+ children,
84647
+ columnDefinitions: _columnDefinitions,
84648
+ customBulkEditorFields,
84649
+ enableDynamicRowHeight,
84650
+ enableGroupEditAndValidation,
84651
+ filterGroups,
84652
+ getRowId,
84653
+ initialTableConfig: _initialTableConfig,
84654
+ onBulkEditUpdate,
84655
+ onTableConfigChange,
84656
+ translations: translations2 = {},
84657
+ enableCellTextSelection,
84658
+ localStoragePersistenceKey
84659
+ }) => {
84577
84660
  return /* @__PURE__ */ React76__default.default.createElement(
84578
- StyledSuperSelectWrapper,
84661
+ DataTable,
84579
84662
  {
84580
- $enabled: Boolean(value?.length),
84581
- "data-test-id": "server-side-single-select-quick-filter"
84663
+ analytics,
84664
+ columnDefinitions: _columnDefinitions,
84665
+ enableGroupEditAndValidation,
84666
+ enableDynamicRowHeight,
84667
+ filterGroups,
84668
+ getRowId,
84669
+ initialTableConfig: _initialTableConfig,
84670
+ onTableConfigChange,
84671
+ onBulkEditUpdate,
84672
+ showExpandCollapseAllToggle: true,
84673
+ translations: translations2,
84674
+ localStoragePersistenceKey,
84675
+ customBulkEditorFields,
84676
+ enableCellTextSelection
84582
84677
  },
84583
- /* @__PURE__ */ React76__default.default.createElement(
84584
- coreReact.UNSAFE_SuperSelect,
84585
- {
84586
- overlayMatchesTriggerWidth,
84587
- loading,
84588
- value: value ?? [],
84589
- search: false,
84590
- disabled,
84591
- getOptionLabel: (option) => getLabel(columnDefinition.filterProps?.getLabel, option),
84592
- getOptionValue,
84593
- multiple: false,
84594
- options,
84595
- onChange: handleOnChange,
84596
- onOpenChange: handleOnOpenChange,
84597
- ...getSuperSelectFilterPreset(columnDefinition)
84598
- }
84599
- )
84678
+ children
84600
84679
  );
84601
84680
  };
84602
- var SingleSelectQuickFilterRenderer = (props) => {
84603
- const { onServerSideDataRequest } = useInternalTableContext();
84604
- if (!isClientSideFilterProps(props, !!onServerSideDataRequest)) {
84605
- return /* @__PURE__ */ React76__default.default.createElement(ServerSideSingleSelectQuickFilter, { ...props });
84606
- }
84607
- return /* @__PURE__ */ React76__default.default.createElement(ClientSideSingleSelectQuickFilter, { ...props });
84681
+ var Table2 = (props) => {
84682
+ const internalTableContext = useInternalTableContext();
84683
+ React76__default.default.useEffect(() => {
84684
+ internalTableContext.setTotalRowCount(props.rows?.length ?? 0);
84685
+ }, [props.rows]);
84686
+ return /* @__PURE__ */ React76__default.default.createElement(Table, { ...props, modules: [ClientSideRowModelModule] });
84608
84687
  };
84609
- var SingleSelectQuickFilterRenderer_default = SingleSelectQuickFilterRenderer;
84688
+ BulkActions.displayName = "ClientSideDataTable.BulkActions";
84689
+ ConfigPanelButton.displayName = "ClientSideDataTable.ConfigPanelButton";
84690
+ ContextPanel.displayName = "ClientSideDataTable.ContextPanel";
84691
+ QuickControls.displayName = "ClientSideDataTable.QuickControls";
84692
+ QuickFilters.displayName = "ClientSideDataTable.QuickFilters";
84693
+ RowGroupSelector.displayName = "ClientSideDataTable.RowGroupSelector";
84694
+ Search.displayName = "ClientSideDataTable.Search";
84695
+ Table2.displayName = "ClientSideDataTable.Table";
84696
+ FiltersPanel.displayName = "ClientSideDataTable.FiltersPanel";
84697
+ var ClientSideDataTable_default = addSubcomponents(
84698
+ {
84699
+ BulkActions,
84700
+ BulkEditActionButton,
84701
+ ConfigPanelButton,
84702
+ ContextPanel,
84703
+ QuickControls,
84704
+ QuickFilters,
84705
+ RowGroupSelector,
84706
+ Search,
84707
+ Table: Table2,
84708
+ FiltersPanel,
84709
+ FiltersPanelButton
84710
+ },
84711
+ ClientSideDataTable
84712
+ );
84610
84713
 
84611
84714
  // ../../node_modules/@ag-grid-enterprise/server-side-row-model/dist/esm/es6/serverSideRowModel/stores/fullStore.mjs
84612
84715
  var __decorate212 = function(decorators, target, key, desc) {