@procore/data-table 14.16.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
@@ -54156,6 +54221,37 @@ function sortColumnDefinitionsByFilterIndex(colDef1, colDef2) {
54156
54221
  }
54157
54222
  return filterIndex1 > filterIndex2 ? 1 : -1;
54158
54223
  }
54224
+ function assignAlphabeticalFilterIndices(columnDefinitions) {
54225
+ const newColumns = columnDefinitions.map((col) => ({
54226
+ ...col,
54227
+ filterProps: col.filterProps ? { ...col.filterProps } : void 0
54228
+ }));
54229
+ const filterColumns = newColumns.filter(
54230
+ (col) => col.filterRenderer || col.filterProps
54231
+ );
54232
+ const groups = {};
54233
+ filterColumns.forEach((col) => {
54234
+ const groupName = col.filterProps?.groupName || "default";
54235
+ if (!groups[groupName]) {
54236
+ groups[groupName] = [];
54237
+ }
54238
+ groups[groupName].push(col);
54239
+ });
54240
+ Object.values(groups).forEach((groupCols) => {
54241
+ groupCols.sort((a, b) => {
54242
+ const headerA = a.headerName || "";
54243
+ const headerB = b.headerName || "";
54244
+ return headerA.localeCompare(headerB);
54245
+ });
54246
+ groupCols.forEach((col, idx) => {
54247
+ if (!col.filterProps) {
54248
+ col.filterProps = {};
54249
+ }
54250
+ col.filterProps.index = idx;
54251
+ });
54252
+ });
54253
+ return newColumns;
54254
+ }
54159
54255
 
54160
54256
  // src/state/useFilterState.ts
54161
54257
  function isNumberFilterModel(value) {
@@ -55894,7 +55990,10 @@ var DataTableCellRenderer = ({
55894
55990
  value
55895
55991
  };
55896
55992
  const hasValue = value !== void 0 && value !== null && value !== "";
55897
- const isSelectCellComponent = columnDefinition.cellEditor?.render?.displayName === "SelectCellEditor";
55993
+ const isSelectCellComponent = columnDefinition.cellRendererSelector?.({
55994
+ ...columnDefinition.cellRendererParams,
55995
+ node
55996
+ }).component?.displayName === "SelectCellRenderer";
55898
55997
  const URL = isSelectCellComponent && columnDefinition?.cellRendererParams?.getURL ? columnDefinition.cellRendererParams.getURL(value) : null;
55899
55998
  const startEditing = React76.useCallback(
55900
55999
  () => api.startEditingCell({
@@ -78088,12 +78187,15 @@ var buildDetailRowsConfig_ = (detailRowConfig, {
78088
78187
  };
78089
78188
 
78090
78189
  // src/utils/expandRows.ts
78190
+ function getStringifiedRoute(node) {
78191
+ return node.getRoute()?.map((r) => typeof r === "object" ? JSON.stringify(r) : r);
78192
+ }
78091
78193
  var getGroupRowState = (gridApi, groupDefaultExpanded = 0) => {
78092
78194
  const expandedRoutes = [];
78093
78195
  const collapsedRoutes = [];
78094
78196
  if (gridApi) {
78095
78197
  gridApi.forEachNode((node) => {
78096
- const route = node.getRoute();
78198
+ const route = getStringifiedRoute(node);
78097
78199
  if (route) {
78098
78200
  const routePath = route.join(",");
78099
78201
  const defaultExpandLevel = groupDefaultExpanded === -1 ? Infinity : groupDefaultExpanded;
@@ -78113,7 +78215,7 @@ var setExpandCollapseRow = (gridApi, tableConfig, groupDefaultExpanded = 0) => {
78113
78215
  const expandedRoutes = tableConfig.groupRowState?.expandedRoutes ?? [];
78114
78216
  const collapsedRoutes = tableConfig.groupRowState?.collapsedRoutes ?? [];
78115
78217
  gridApi.forEachNode((node) => {
78116
- const route = node.getRoute();
78218
+ const route = getStringifiedRoute(node);
78117
78219
  if (route) {
78118
78220
  const routePath = route.join(",");
78119
78221
  const defaultExpandLevel = groupDefaultExpanded === -1 ? Infinity : groupDefaultExpanded;
@@ -78130,7 +78232,7 @@ var setExpandCollapseRow = (gridApi, tableConfig, groupDefaultExpanded = 0) => {
78130
78232
  var isRowOpenedByDefault = (node, tableConfig, groupDefaultExpanded = 0) => {
78131
78233
  const expandedRoutes = tableConfig?.groupRowState?.expandedRoutes ?? [];
78132
78234
  const collapsedRoutes = tableConfig?.groupRowState?.collapsedRoutes ?? [];
78133
- const route = node.getRoute();
78235
+ const route = getStringifiedRoute(node);
78134
78236
  if (!route) {
78135
78237
  return false;
78136
78238
  }
@@ -82698,7 +82800,7 @@ var FILTERS_GROUP_EXPANDABLE_AREA_VERTICAL_MARGIN = coreReact.spacing.md;
82698
82800
  var FILTERS_GROUP_ITEM_HEIGHT = 60;
82699
82801
  var ITEMS_IN_FILTERS_GROUP = 5;
82700
82802
  var FILTERS_GROUP_EXPANDABLE_AREA_HEIGHT = (FILTERS_GROUP_ITEM_HEIGHT + coreReact.spacing.xl) * ITEMS_IN_FILTERS_GROUP + BORDER_WIDTH;
82701
- var StyledPanelSection = styled4__default.default(coreReact.Panel.Section)`
82803
+ var StyledPanelSection = styled3__default.default(coreReact.Panel.Section)`
82702
82804
  // Filters Group container styles
82703
82805
  &.filters-list-group-section {
82704
82806
  padding-bottom: ${FILTERS_GROUP_VERTICAL_MARGIN}px;
@@ -82988,899 +83090,807 @@ var ConfigPanelButton = () => {
82988
83090
  )
82989
83091
  );
82990
83092
  };
82991
- function getFilterTokenText(columnDefinition, filterValue) {
82992
- if (columnDefinition?.filterProps?.getFilterTokenText) {
82993
- return columnDefinition?.filterProps?.getFilterTokenText?.({
82994
- headerName: columnDefinition?.headerName || "",
82995
- value: filterValue
82996
- });
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
+ `}
82997
83123
  }
82998
- 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
+ );
82999
83188
  return /* @__PURE__ */ React76__default.default.createElement(
83000
- OptionalDateTimeProvider,
83189
+ coreReact.OverlayTrigger,
83001
83190
  {
83002
- 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"
83003
83205
  },
83004
83206
  /* @__PURE__ */ React76__default.default.createElement(
83005
- DateFilterTokenText,
83207
+ DateQuickFilterLabel,
83006
83208
  {
83007
- headerName: columnDefinition.headerName,
83008
- value: filterValue
83209
+ headerName,
83210
+ onClear,
83211
+ value: selectedDate,
83212
+ disabled
83009
83213
  }
83010
83214
  )
83011
83215
  );
83012
83216
  }
83013
- if (columnDefinition.filterRenderer === NumberFilterRenderer) {
83014
- return columnDefinition?.headerName;
83015
- }
83016
- if (Array.isArray(filterValue)) {
83017
- if (filterValue.length === 0) {
83018
- return columnDefinition?.headerName;
83019
- }
83020
- if (filterValue.length === 1) {
83021
- return `${columnDefinition?.headerName}: ${getLabel(
83022
- columnDefinition.filterProps?.getLabel,
83023
- filterValue[0]
83024
- )}`;
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
+ );
83025
83253
  }
83026
- return `${columnDefinition?.headerName}: (${filterValue.length})`;
83027
- }
83028
- return columnDefinition?.headerName;
83029
- }
83030
- var ensureArray = (input) => {
83031
- if (input === null) {
83032
- return [];
83033
- }
83034
- return Array.isArray(input) ? input : [input];
83035
- };
83036
- var FiltersPanelToggleButton = ({ hasSelectedFilters, hasDefinedFilters }) => {
83037
- const I18n = coreReact.useI18nContext();
83038
- const { contextPanel } = useInternalTableContext();
83039
- const hasNoContent = useTableHasNoContent();
83040
- if (!hasDefinedFilters) {
83041
- return null;
83042
83254
  }
83043
- return /* @__PURE__ */ React76__default.default.createElement(
83044
- EmptyResultsControlTooltip,
83045
- {
83046
- featureI18nKey: "featureFilter",
83047
- enabled: hasNoContent
83255
+ const onSelectionTypeChange = React76__default.default.useCallback(
83256
+ (newSelectionType) => {
83257
+ setSelectedValue({ type: newSelectionType });
83048
83258
  },
83049
- /* @__PURE__ */ React76__default.default.createElement(
83050
- coreReact.ToggleButton,
83051
- {
83052
- "data-qa": "data-table-show-filters-button",
83053
- disabled: hasNoContent,
83054
- icon: /* @__PURE__ */ React76__default.default.createElement(FilterIcon, null),
83055
- onClick: () => {
83056
- if (contextPanel.content === "filters") {
83057
- contextPanel.hide();
83058
- } else {
83059
- contextPanel.show("filters");
83060
- }
83061
- },
83062
- selected: contextPanel.content === "filters"
83063
- },
83064
- hasSelectedFilters ? I18n.t("dataTable.filters.moreFilters") : I18n.t("dataTable.filters.filters")
83065
- )
83259
+ [setSelectedValue]
83066
83260
  );
83067
- };
83068
- var ServerSideFiltersPanelToggleButton = () => {
83069
- const {
83070
- filterStorage: { hasDefinedFilters, hasSelectedFilters }
83071
- } = useInternalTableContext();
83072
- return /* @__PURE__ */ React76__default.default.createElement(
83073
- 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,
83074
83269
  {
83075
- hasDefinedFilters,
83076
- hasSelectedFilters
83270
+ afterHide: dateRangeAfterHide,
83271
+ headerName,
83272
+ onChange: dateFilterOnChange,
83273
+ position: "start",
83274
+ selectedValue,
83275
+ selectionType,
83276
+ setSelectionType: onSelectionTypeChange,
83277
+ disabled
83077
83278
  }
83078
- );
83079
- };
83080
- var ClientSideFiltersPanelToggleButton = () => {
83081
- const { filterState } = useInternalTableContext();
83082
- const activeFilters = React76__default.default.useMemo(() => {
83083
- return filterState.allAvailableFilters.filter(({ instance }) => {
83084
- return instance.isFilterActive();
83085
- });
83086
- }, [filterState.allAvailableFilters]);
83087
- return /* @__PURE__ */ React76__default.default.createElement(
83088
- FiltersPanelToggleButton,
83279
+ ), selectedValue.type === "range" && /* @__PURE__ */ React76__default.default.createElement(
83280
+ DateFilterSelect2,
83089
83281
  {
83090
- hasDefinedFilters: filterState.allAvailableFilters.length > 0,
83091
- hasSelectedFilters: activeFilters.length > 0
83282
+ headerName,
83283
+ onChange: dateFilterOnChange,
83284
+ position: "end",
83285
+ ref: dateRangeEndDateRef,
83286
+ selectedValue,
83287
+ selectionType,
83288
+ setSelectionType: onSelectionTypeChange,
83289
+ disabled
83092
83290
  }
83093
- );
83094
- };
83095
-
83096
- // src/QuickControls/QuickFilters.tsx
83097
- var FilterIcon = () => {
83098
- return /* @__PURE__ */ React76__default.default.createElement(
83099
- "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,
83100
83303
  {
83101
- focusable: false,
83102
- width: "16",
83103
- height: "16",
83104
- viewBox: "0 0 20 20",
83105
- fill: "none",
83106
- xmlns: "http://www.w3.org/2000/svg"
83107
- },
83108
- /* @__PURE__ */ React76__default.default.createElement(
83109
- "path",
83110
- {
83111
- fillRule: "evenodd",
83112
- clipRule: "evenodd",
83113
- d: "M3 5V7H17V5H3ZM8 15H12V13H8V15ZM15 11H5V9H15V11Z",
83114
- fill: "currentColor"
83115
- }
83116
- )
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"
83117
83331
  );
83332
+ return null;
83118
83333
  };
83119
- var StyledFilterTokenWrapper = styled4__default.default.div`
83120
- ${coreReact.UNSAFE_StyledFilterTokenLabel} {
83121
- 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" }
83122
83355
  }
83123
- `;
83124
- var ClientSideQuickFilters = ({ overlayMatchesTriggerWidth }) => {
83125
- const { tableRef, filterState, getColumnDefinition } = useInternalTableContext();
83126
- const hasNoContent = useTableHasNoContent();
83127
- const { quickFilters, tokens } = React76__default.default.useMemo(() => {
83128
- return filterState.allAvailableFilters.reduce(
83129
- (acc, filter) => {
83130
- const colDef = getColumnDefinition(filter.field);
83131
- if (!colDef) {
83132
- return acc;
83133
- }
83134
- if (colDef?.quickFilterRenderer) {
83135
- return { ...acc, quickFilters: [...acc.quickFilters, filter] };
83136
- } else if (filter.instance.isFilterActive()) {
83137
- return { ...acc, tokens: [...acc.tokens, filter] };
83138
- }
83139
- return acc;
83140
- },
83356
+ };
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,
83141
83368
  {
83142
- quickFilters: [],
83143
- tokens: []
83369
+ enabled: true,
83370
+ disabled,
83371
+ label: `${headerName}: ${dateTime.format(value, "numeric-date")}`,
83372
+ onClear,
83373
+ ref
83144
83374
  }
83145
83375
  );
83146
- }, [filterState.allAvailableFilters, getColumnDefinition]);
83147
- const isEmpty2 = quickFilters.length === 0 && tokens.length === 0;
83148
- return isEmpty2 ? null : /* @__PURE__ */ React76__default.default.createElement(
83149
- coreReact.FlexList,
83376
+ }
83377
+ return /* @__PURE__ */ React76__default.default.createElement(
83378
+ QuickFilterLabel,
83150
83379
  {
83151
- padding: "xs none",
83152
- size: "none",
83153
- alignItems: "center",
83154
- wrap: "wrap",
83155
- gap: "sm"
83156
- },
83157
- quickFilters.map((filter) => {
83158
- const colDef = getColumnDefinition(filter.field);
83159
- const QuickFilter = colDef?.quickFilterRenderer;
83160
- if (!colDef || !QuickFilter) {
83161
- return null;
83162
- }
83163
- return /* @__PURE__ */ React76__default.default.createElement(
83164
- EmptyResultsControlTooltip,
83165
- {
83166
- featureI18nKey: "featureQuickFilter",
83167
- enabled: hasNoContent
83168
- },
83169
- /* @__PURE__ */ React76__default.default.createElement(
83170
- QuickFilter,
83171
- {
83172
- key: filter.field,
83173
- filter,
83174
- columnDefinition: colDef,
83175
- disabled: hasNoContent,
83176
- onChange: (value) => tableRef?.current?.applyListFilter(filter.field, value),
83177
- onRemove: () => tableRef?.current?.removeFilter(filter.field),
83178
- overlayMatchesTriggerWidth
83179
- }
83180
- )
83181
- );
83182
- }),
83183
- tokens.map((filter) => {
83184
- const colDef = getColumnDefinition(filter.field);
83185
- if (!colDef) {
83186
- return null;
83187
- }
83188
- 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(
83189
- coreReact.UNSAFE_FilterToken.Remove,
83190
- {
83191
- onClick: () => tableRef?.current?.removeFilter(filter.field)
83192
- }
83193
- )));
83194
- })
83380
+ enabled: false,
83381
+ disabled,
83382
+ label: `${headerName}: ${globalizationToolkit.getDatePlaceholder(i18n.locale, placeholders)}`,
83383
+ ref
83384
+ }
83195
83385
  );
83386
+ });
83387
+ var DateQuickFilterRenderer_default = QuickDateFilterRenderer;
83388
+ var defaultGetId2 = (option) => option?.id;
83389
+ var defaultGetLabel2 = (option) => {
83390
+ return option?.label ?? option?.name ?? option;
83196
83391
  };
83197
- var ServerSideQuickFilters = ({ overlayMatchesTriggerWidth }) => {
83198
- const {
83199
- filterStorage: {
83200
- hasDefinedFilters,
83201
- onClearFilter,
83202
- possibleFilters,
83203
- selectedFilters,
83204
- getListFilter
83205
- },
83206
- getColumnDefinition
83207
- } = useInternalTableContext();
83208
- const hasNoContent = useTableHasNoContent();
83209
- const { quickFilterNames, tokenNames } = React76__default.default.useMemo(() => {
83210
- const appliedFilterNames = Object.keys(selectedFilters);
83211
- const isActiveFilter = (filterName) => appliedFilterNames.includes(filterName);
83212
- return possibleFilters.reduce(
83213
- (acc, filterName) => {
83214
- const colDef = getColumnDefinition(filterName);
83215
- if (!colDef) {
83216
- return acc;
83217
- }
83218
- if (colDef?.quickFilterRenderer) {
83219
- return {
83220
- ...acc,
83221
- quickFilterNames: [...acc.quickFilterNames, filterName]
83222
- };
83223
- } else if (isActiveFilter(filterName)) {
83224
- return { ...acc, tokenNames: [...acc.tokenNames, filterName] };
83225
- }
83226
- return acc;
83227
- },
83228
- {
83229
- quickFilterNames: [],
83230
- tokenNames: []
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
+ };
83413
+ };
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"
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"
83443
+ };
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();
83231
83451
  }
83232
- );
83233
- }, [possibleFilters, selectedFilters, getColumnDefinition]);
83234
- if (!hasDefinedFilters) {
83235
- return null;
83236
- }
83237
- const isEmpty2 = quickFilterNames.length === 0 && tokenNames.length === 0;
83238
- return isEmpty2 ? null : /* @__PURE__ */ React76__default.default.createElement(
83239
- coreReact.FlexList,
83240
- {
83241
- padding: "xs none",
83242
- size: "none",
83243
- alignItems: "center",
83244
- wrap: "wrap",
83245
- gap: "sm",
83246
- "data-qa": "data-table-quick-filters"
83247
- },
83248
- quickFilterNames.map((fieldName) => {
83249
- const colDef = getColumnDefinition(fieldName);
83250
- const QuickFilter = colDef?.quickFilterRenderer;
83251
- if (!colDef || !QuickFilter) {
83252
- return null;
83452
+ if (selection.item.id === includeSublocationOption.id) {
83453
+ _onSelect(selection);
83454
+ return onSelectSublocations();
83253
83455
  }
83254
- return /* @__PURE__ */ React76__default.default.createElement(
83255
- EmptyResultsControlTooltip,
83456
+ return _onSelect(selection);
83457
+ };
83458
+ function defaultOnSearch(e) {
83459
+ if (e.target.value === "") {
83460
+ setSearching(false);
83461
+ setItems(options);
83462
+ } else {
83463
+ setSearching(true);
83464
+ setItems(
83465
+ options.filter(
83466
+ (item) => getLabel3(item).toLowerCase().includes(e.target.value.toLowerCase())
83467
+ )
83468
+ );
83469
+ }
83470
+ }
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,
83477
+ {
83478
+ ...menuProps,
83479
+ multiple: true,
83480
+ role: "listbox",
83481
+ ref: menuRef,
83482
+ onSelect,
83483
+ className: locationFilterStyles_default.locationFilterMenu
83484
+ },
83485
+ /* @__PURE__ */ React76__default.default.createElement(
83486
+ coreReact.UNSAFE_Menu.Search,
83256
83487
  {
83257
- featureI18nKey: "featureQuickFilter",
83258
- enabled: hasNoContent
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
83259
83497
  },
83260
83498
  /* @__PURE__ */ React76__default.default.createElement(
83261
- QuickFilter,
83499
+ coreReact.UNSAFE_Menu.CheckboxItem,
83262
83500
  {
83263
- key: fieldName,
83264
- columnDefinition: colDef,
83265
- disabled: hasNoContent,
83266
- overlayMatchesTriggerWidth
83267
- }
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)
83268
83516
  )
83269
- );
83270
- }),
83271
- tokenNames.map((fieldName) => {
83272
- const colDef = getColumnDefinition(fieldName);
83273
- if (!colDef) {
83274
- return null;
83275
- }
83276
- const filter = getListFilter(fieldName);
83277
- 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(
83278
- colDef,
83279
- colDef.filterRenderer === DateFilterRenderer_default ? filter.value : filter.selected
83280
- )), /* @__PURE__ */ React76__default.default.createElement(
83281
- coreReact.UNSAFE_FilterToken.Remove,
83282
- {
83283
- "data-qa": "data-table-quick-filter-remove-token",
83284
- onClick: () => onClearFilter(fieldName)
83285
- }
83286
- )));
83287
- })
83288
- );
83289
- };
83290
- var QuickFilters = ({ overlayMatchesTriggerWidth }) => {
83291
- const { onServerSideDataRequest } = useInternalTableContext();
83292
- if (onServerSideDataRequest) {
83293
- return /* @__PURE__ */ React76__default.default.createElement(
83294
- ServerSideQuickFilters,
83295
- {
83296
- overlayMatchesTriggerWidth
83297
- }
83298
- );
83299
- }
83300
- return /* @__PURE__ */ React76__default.default.createElement(
83301
- ClientSideQuickFilters,
83302
- {
83303
- overlayMatchesTriggerWidth
83304
- }
83305
- );
83306
- };
83307
- var FiltersPanelButton = () => {
83308
- const { onServerSideDataRequest } = useInternalTableContext();
83309
- if (onServerSideDataRequest) {
83310
- return /* @__PURE__ */ React76__default.default.createElement(ServerSideFiltersPanelToggleButton, null);
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
+ ));
83311
83532
  }
83312
- return /* @__PURE__ */ React76__default.default.createElement(ClientSideFiltersPanelToggleButton, null);
83313
- };
83314
- var RowGroupSelector = ({ localeText }) => {
83533
+ );
83534
+ var LocationQuickFilterRenderer = ({
83535
+ columnDefinition,
83536
+ disabled
83537
+ }) => {
83315
83538
  const {
83316
- columnDefinitions: _columnDefinitions,
83317
- columnApi,
83318
- gridApi,
83319
- tableRef
83320
- } = useInternalTableContext();
83321
- const hasNoContent = useTableHasNoContent();
83322
- const [columnDefinitions, setColumnDefinitions] = React76__default.default.useState(_columnDefinitions);
83323
- const groupableColumns = React76__default.default.useMemo(
83324
- () => mapColumnsToOptions(
83325
- columnDefinitions.filter((column2) => column2.enableRowGroup)
83326
- ),
83327
- [columnDefinitions]
83328
- );
83329
- const groupedColumns = React76__default.default.useMemo(() => {
83330
- const rowGrouping = columnApi?.getRowGroupColumns() ?? [];
83331
- return rowGrouping.map((column2) => {
83332
- const colDef = column2.getColDef();
83333
- return transformToColumnDefinition(colDef);
83334
- });
83335
- }, [columnDefinitions]);
83336
- const selectedColumns = React76__default.default.useMemo(
83337
- () => mapColumnsToOptions(groupedColumns),
83338
- [groupedColumns]
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";
83557
+ }
83558
+ if (selection.length && (options.length > selection.length || options.length < selection.length)) {
83559
+ return "partial";
83560
+ }
83561
+ if (selection.length === 0) {
83562
+ return "none";
83563
+ }
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)
83339
83570
  );
83340
- const onGroupedClear = React76__default.default.useCallback(() => {
83341
- tableRef?.current?.setRowGrouping([]);
83342
- }, [tableRef]);
83343
- const onGroupedRowChange = React76__default.default.useCallback(
83344
- (newValue) => {
83345
- const fields = newValue.map((val) => {
83346
- return val.id;
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));
83347
83580
  });
83348
- if (!ramda.equals(selectedColumns, newValue)) {
83349
- tableRef?.current?.setRowGrouping(fields);
83350
- }
83581
+ const uniqDisabledValues = ramda.uniqBy(ramda.prop("id"), newDisabledValues).filter(
83582
+ ({ id }) => !selectedValueIds.includes(id)
83583
+ );
83584
+ setDisabledValues(uniqDisabledValues);
83585
+ }
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
+ }))
83633
+ );
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 [];
83649
+ }
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));
83351
83662
  },
83352
- [selectedColumns]
83663
+ [enableSublocations, disabledValues]
83353
83664
  );
83354
83665
  React76__default.default.useEffect(() => {
83355
- function onDisplayedColumnsChanged(event) {
83356
- const agColumnDefs = event.api.getColumnDefs();
83357
- if (agColumnDefs?.length) {
83358
- const flattenedAgColDefs = flattenColDefs(event.api.getColumnDefs());
83359
- const dataTableColumnDefinitions = flattenedAgColDefs.map(
83360
- transformToColumnDefinition
83361
- );
83362
- setColumnDefinitions(dataTableColumnDefinitions);
83363
- }
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
83364
83684
  }
83365
- gridApi?.addEventListener(
83366
- "displayedColumnsChanged",
83367
- onDisplayedColumnsChanged
83368
- );
83369
- return () => {
83370
- removeEventListenerFromGrid(
83371
- "displayedColumnsChanged",
83372
- onDisplayedColumnsChanged,
83373
- gridApi
83374
- );
83375
- };
83376
- }, [gridApi]);
83377
- if (groupableColumns.length === 0) {
83378
- return null;
83379
- }
83685
+ );
83686
+ const triggerLabel = value.length ? value.length === 1 ? `: ${value[0].label}` : `: (${value.length})` : "";
83380
83687
  return /* @__PURE__ */ React76__default.default.createElement(
83381
- EmptyResultsControlTooltip,
83688
+ coreReact.OverlayTrigger,
83382
83689
  {
83383
- featureI18nKey: "featureGroupBy",
83384
- enabled: hasNoContent
83690
+ overlay,
83691
+ beforeShow: getOptions,
83692
+ placement: "bottom-left"
83385
83693
  },
83386
- /* @__PURE__ */ React76__default.default.createElement(
83387
- labsGroupBySelect.GroupBySelect,
83694
+ value.length ? /* @__PURE__ */ React76__default.default.createElement(
83695
+ QuickFilterLabel,
83388
83696
  {
83389
- isDisabled: hasNoContent,
83390
- localeText,
83391
- onBlur: onGroupedRowChange,
83392
- onClear: onGroupedClear,
83393
- options: groupableColumns,
83394
- selected: selectedColumns
83395
- }
83396
- )
83397
- );
83398
- };
83399
- function mapColumnsToOptions(columnDefinitions) {
83400
- return columnDefinitions.map((col) => {
83401
- return {
83402
- label: col.headerName,
83403
- id: col.field,
83404
- key: col.field,
83405
- group: col.columnGroupName
83406
- };
83407
- });
83408
- }
83409
- var cx21 = classnames__default.default.bind(quickControlsStyles_default);
83410
- var ClientSideSearch = ({
83411
- onSearch,
83412
- placeholder
83413
- }) => {
83414
- const [internalValue, setInternalValue] = React76__default.default.useState("");
83415
- const { tableRef } = useInternalTableContext();
83416
- const hasNoContent = useTableHasNoContent();
83417
- const I18n = coreReact.useI18nContext();
83418
- const debouncedSetSearchValue = React76__default.default.useCallback(
83419
- debounce5__default.default((value) => {
83420
- tableRef?.current?.setSearchValue(value);
83421
- }, 250),
83422
- [tableRef?.current?.setSearchValue]
83423
- );
83424
- const onChange = React76__default.default.useCallback(
83425
- (value, event) => {
83426
- setInternalValue(value);
83427
- if (onSearch) {
83428
- onSearch(event);
83429
- } else {
83430
- debouncedSetSearchValue(value);
83697
+ enabled: true,
83698
+ disabled,
83699
+ label: `${I18n.t(
83700
+ "dataTable.filters.locationFilter.locations"
83701
+ )}${triggerLabel}`,
83702
+ onClear: () => {
83703
+ onChange([]);
83704
+ },
83705
+ block: true
83431
83706
  }
83432
- },
83433
- [debouncedSetSearchValue, onSearch]
83434
- );
83435
- return /* @__PURE__ */ React76__default.default.createElement(EmptyResultsControlTooltip, { hasSearch: true, enabled: hasNoContent }, /* @__PURE__ */ React76__default.default.createElement(
83436
- coreReact.Typeahead,
83437
- {
83438
- disabled: hasNoContent,
83439
- "data-qa": "data-table-search",
83440
- value: internalValue,
83441
- className: cx21("search", {
83442
- "search--empty": !internalValue.length
83443
- }),
83444
- onChange,
83445
- placeholder: placeholder || I18n.t("dataTable.search")
83446
- }
83447
- ));
83448
- };
83449
- var Search = (props) => {
83450
- const { onServerSideDataRequest } = useInternalTableContext();
83451
- if (onServerSideDataRequest) {
83452
- return /* @__PURE__ */ React76__default.default.createElement(ServerSideSearch, { ...props });
83453
- }
83454
- return /* @__PURE__ */ React76__default.default.createElement(ClientSideSearch, { ...props });
83455
- };
83456
-
83457
- // src/QuickControls/QuickControls.tsx
83458
- var QuickControls = (props) => {
83459
- const I18n = coreReact.useI18nContext();
83460
- if (props.children) {
83461
- return /* @__PURE__ */ React76__default.default.createElement(
83462
- coreReact.Box,
83707
+ ) : /* @__PURE__ */ React76__default.default.createElement(
83708
+ QuickFilterLabel,
83463
83709
  {
83464
- "data-qa": "data-table-quick-controls",
83465
- padding: "xs none",
83466
- style: props.style
83467
- },
83468
- props.children
83469
- );
83470
- }
83471
- 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(
83472
- Search,
83473
- {
83474
- onSearch: props.onSearch,
83475
- placeholder: props.placeholder,
83476
- disabled: props.disabledSearch
83477
- }
83478
- ), /* @__PURE__ */ React76__default.default.createElement(FiltersPanelButton, null)), /* @__PURE__ */ React76__default.default.createElement(coreReact.FlexList, { size: "xs", alignItems: "center" }, /* @__PURE__ */ React76__default.default.createElement(
83479
- RowGroupSelector,
83480
- {
83481
- localeText: {
83482
- reset: I18n.t("dataTable.tableSettings.reset"),
83483
- placeholder: I18n.t("dataTable.tableSettings.selectColumnGroup"),
83484
- selectedItemsPrefix: I18n.t("dataTable.tableSettings.groupBy")
83710
+ enabled: false,
83711
+ disabled,
83712
+ label: `${I18n.t(
83713
+ "dataTable.filters.locationFilter.locations"
83714
+ )}${triggerLabel}`,
83715
+ block: true
83485
83716
  }
83486
- }
83487
- ), /* @__PURE__ */ React76__default.default.createElement(ConfigPanelButton, null))), /* @__PURE__ */ React76__default.default.createElement(
83488
- QuickFilters,
83489
- {
83490
- overlayMatchesTriggerWidth: props.filterOverlayMatchesTriggerWidth
83491
- }
83492
- ));
83493
- };
83494
-
83495
- // src/utils/addSubcomponents.ts
83496
- var addSubcomponents = (subs, parent) => {
83497
- const assigned = parent;
83498
- Object.keys(subs).forEach((key) => {
83499
- assigned[key] = subs[key];
83500
- });
83501
- return assigned;
83502
- };
83503
-
83504
- // src/ClientSideDataTable.tsx
83505
- var ClientSideDataTable = ({
83506
- analytics,
83507
- children,
83508
- columnDefinitions: _columnDefinitions,
83509
- customBulkEditorFields,
83510
- enableDynamicRowHeight,
83511
- enableGroupEditAndValidation,
83512
- filterGroups,
83513
- getRowId,
83514
- initialTableConfig: _initialTableConfig,
83515
- onBulkEditUpdate,
83516
- onTableConfigChange,
83517
- translations: translations2 = {},
83518
- enableCellTextSelection,
83519
- localStoragePersistenceKey
83520
- }) => {
83521
- return /* @__PURE__ */ React76__default.default.createElement(
83522
- DataTable,
83523
- {
83524
- analytics,
83525
- columnDefinitions: _columnDefinitions,
83526
- enableGroupEditAndValidation,
83527
- enableDynamicRowHeight,
83528
- filterGroups,
83529
- getRowId,
83530
- initialTableConfig: _initialTableConfig,
83531
- onTableConfigChange,
83532
- onBulkEditUpdate,
83533
- showExpandCollapseAllToggle: true,
83534
- translations: translations2,
83535
- localStoragePersistenceKey,
83536
- customBulkEditorFields,
83537
- enableCellTextSelection
83538
- },
83539
- children
83717
+ )
83540
83718
  );
83541
83719
  };
83542
- var Table2 = (props) => {
83543
- const internalTableContext = useInternalTableContext();
83544
- React76__default.default.useEffect(() => {
83545
- internalTableContext.setTotalRowCount(props.rows?.length ?? 0);
83546
- }, [props.rows]);
83547
- return /* @__PURE__ */ React76__default.default.createElement(Table, { ...props, modules: [ClientSideRowModelModule] });
83548
- };
83549
- BulkActions.displayName = "ClientSideDataTable.BulkActions";
83550
- ConfigPanelButton.displayName = "ClientSideDataTable.ConfigPanelButton";
83551
- ContextPanel.displayName = "ClientSideDataTable.ContextPanel";
83552
- QuickControls.displayName = "ClientSideDataTable.QuickControls";
83553
- QuickFilters.displayName = "ClientSideDataTable.QuickFilters";
83554
- RowGroupSelector.displayName = "ClientSideDataTable.RowGroupSelector";
83555
- Search.displayName = "ClientSideDataTable.Search";
83556
- Table2.displayName = "ClientSideDataTable.Table";
83557
- FiltersPanel.displayName = "ClientSideDataTable.FiltersPanel";
83558
- var ClientSideDataTable_default = addSubcomponents(
83559
- {
83560
- BulkActions,
83561
- BulkEditActionButton,
83562
- ConfigPanelButton,
83563
- ContextPanel,
83564
- QuickControls,
83565
- QuickFilters,
83566
- RowGroupSelector,
83567
- Search,
83568
- Table: Table2,
83569
- FiltersPanel,
83570
- FiltersPanelButton
83571
- },
83572
- ClientSideDataTable
83573
- );
83574
- var QuickFilterLabel = React76__default.default.forwardRef(({ enabled, ...props }, ref) => {
83575
- return /* @__PURE__ */ React76__default.default.createElement(StyledQuickFilterLabel, { $enabled: enabled }, /* @__PURE__ */ React76__default.default.createElement(coreReact.SelectButton, { ref, ...props }));
83576
- });
83577
- var StyledQuickFilterLabel = styled4__default.default.div`
83578
- ${coreReact.StyledSelectButton} {
83579
- width: auto;
83580
- max-width: 380px;
83581
- ${({ $enabled }) => $enabled && styled4.css`
83582
- background: ${coreReact.colors.blue96};
83583
- border-color: ${coreReact.colors.blue96};
83584
- font-weight: ${coreReact.typographyWeights.semibold};
83585
- &:hover {
83586
- background: ${coreReact.colors.blue90};
83587
- border-color: ${coreReact.colors.blue90};
83588
- }
83589
- ${coreReact.StyledSelectButtonLabel} {
83590
- color: ${coreReact.colors.blue45};
83591
- }
83592
- ${coreReact.StyledButton} {
83593
- color: ${coreReact.colors.blue45};
83594
- &:hover {
83595
- background: white;
83596
- }
83597
- }
83598
- ${coreReact.StyledSelectArrow} {
83599
- svg {
83600
- fill: ${coreReact.colors.blue45};
83601
- }
83602
- }
83603
- `}
83604
- }
83720
+ var LocationQuickFilterRenderer_default = LocationQuickFilterRenderer;
83721
+ var StyledFilterPresetPopoverContent = styled3__default.default(coreReact.Popover.Content)`
83722
+ padding: ${coreReact.spacing.sm}px ${coreReact.spacing.lg}px;
83605
83723
  `;
83606
-
83607
- // src/QuickFilterRenderers/DateQuickFilterRenderer.tsx
83608
- function getPlacement2(currentSelectionType, position) {
83609
- if (currentSelectionType === "single") {
83610
- return "bottom-left";
83611
- }
83612
- if (position === "start") {
83613
- return "bottom-left";
83614
- }
83615
- return "bottom-right";
83616
- }
83617
- var OptionalDateTimeProvider2 = ({ timeZone, children }) => {
83618
- return timeZone ? /* @__PURE__ */ React76__default.default.createElement(coreReact.DateTimeProvider, { timeZone }, children) : /* @__PURE__ */ React76__default.default.createElement(React76__default.default.Fragment, null, children);
83724
+ var getValueLabel = (isValueEmpty, value, placeholder, filterName) => {
83725
+ const prefixLabel = isValueEmpty ? placeholder || filterName : filterName;
83726
+ const valueLabel = value ? `${prefixLabel ? ": " : ""}${value}` : "";
83727
+ return `${prefixLabel}${valueLabel}`;
83619
83728
  };
83620
- var DateFilterSelect2 = React76__default.default.forwardRef(
83621
- ({
83622
- afterHide,
83623
- selectionType = "either",
83624
- headerName,
83625
- disabled,
83626
- onChange,
83627
- position,
83628
- selectedValue,
83629
- setSelectionType = () => {
83630
- }
83631
- }, ref) => {
83632
- const dateTime = coreReact.useDateTime();
83633
- const { start, end } = selectedValue;
83634
- const selectedDate = (position === "start" ? start : end) ?? void 0;
83635
- const [displayed, setDisplayed2] = React76__default.default.useState(
83636
- // @ts-ignore
83637
- selectedDate || dateTime.newDate()
83638
- );
83639
- React76__default.default.useEffect(() => {
83640
- if (dateFns.isDate(start) && !dateFns.isDate(end) && position === "end") {
83641
- setDisplayed2(start);
83642
- }
83643
- if (!dateFns.isDate(start) && dateFns.isDate(end) && position === "start") {
83644
- setDisplayed2(end);
83645
- }
83646
- }, [position, selectedValue]);
83647
- function onClear() {
83648
- onChange(null, position);
83649
- }
83650
- const clearRef = React76__default.default.useRef(null);
83651
- const monthRef = React76__default.default.useRef(null);
83652
- const yearRef = React76__default.default.useRef(null);
83653
- const overlay = /* @__PURE__ */ React76__default.default.createElement(
83654
- DateFilterOverlay,
83655
- {
83656
- displayDate: displayed,
83657
- selectionType,
83658
- monthRef,
83659
- onSelect: (date) => {
83660
- onChange(date, position);
83661
- },
83662
- position,
83663
- selectedValue,
83664
- setDisplayDate: setDisplayed2,
83665
- setSelectionType,
83666
- yearRef
83667
- }
83668
- );
83669
- return /* @__PURE__ */ React76__default.default.createElement(
83670
- coreReact.OverlayTrigger,
83671
- {
83672
- afterHide,
83673
- autoFocus: true,
83674
- beforeShow: (e) => {
83675
- if (coreReact.isEventSource(clearRef, e)) {
83676
- return false;
83677
- }
83678
- return true;
83679
- },
83680
- clickOutsideIgnoreRefs: [monthRef, yearRef],
83681
- overlay,
83682
- placement: getPlacement2(selectionType, position),
83683
- ref,
83684
- restoreFocusOnHide: true,
83685
- role: "dialog"
83686
- },
83687
- /* @__PURE__ */ React76__default.default.createElement(
83688
- DateQuickFilterLabel,
83689
- {
83690
- headerName,
83691
- onClear,
83692
- value: selectedDate,
83693
- disabled
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
+ ));
83694
83796
  }
83695
- )
83696
- );
83697
- }
83698
- );
83699
- function DateFilter3({
83700
- // TODO: talk to design about potential loading UX for this.
83701
- // core DateSelect doesn't have it
83702
- // loading,
83703
- headerName,
83704
- onChange,
83705
- selectionType = "either",
83706
- value,
83707
- disabled,
83708
- ...props
83709
- }) {
83710
- const [selectedValue, setSelectedValue] = React76__default.default.useState({
83711
- type: selectionType === "either" ? "range" : selectionType
83712
- });
83713
- React76__default.default.useEffect(() => {
83714
- const parsedValue = value.map((date) => {
83715
- if (dateFns.isDate(date)) {
83716
- return date;
83797
+ return /* @__PURE__ */ React76__default.default.createElement("div", null, "Value is not an array");
83717
83798
  }
83718
- return dateFns.parseISO(String(date));
83719
- });
83720
- const type = dateFns.isSameDay(parsedValue[0], parsedValue[1]) ? "single" : "range";
83721
- setSelectedValue({ type, start: parsedValue[0], end: parsedValue[1] });
83722
- }, [value]);
83723
- const dateRangeEndDateRef = React76__default.default.useRef(null);
83724
- function dateFilterOnChange(date, position) {
83725
- const newValue = getValueFromSelection(selectedValue, date, position);
83726
- setSelectedValue(newValue);
83727
- if (isValidDateSelection(newValue)) {
83728
- onChange(
83729
- newValue.start || newValue.end ? [
83730
- newValue.start,
83731
- newValue.type === "single" ? newValue.start : newValue.end
83732
- ] : []
83733
- );
83734
- }
83735
- }
83736
- const onSelectionTypeChange = React76__default.default.useCallback(
83737
- (newSelectionType) => {
83738
- setSelectedValue({ type: newSelectionType });
83739
83799
  },
83740
- [setSelectedValue]
83741
- );
83742
- function dateRangeAfterHide() {
83743
- if (selectedValue.type === "range" && dateFns.isDate(selectedValue.start) && !dateFns.isDate(selectedValue.end)) {
83744
- dateRangeEndDateRef.current?.click();
83745
- }
83746
- return true;
83800
+ selectionStyle: "highlight"
83801
+ };
83802
+ };
83803
+ var StyledSuperSelectWrapper = styled3__default.default.div`
83804
+ ${coreReact.UNSAFE_StyledSuperSelectTrigger} {
83805
+ width: auto;
83747
83806
  }
83748
- return /* @__PURE__ */ React76__default.default.createElement(coreReact.FlexList, { space: "xs", "data-qa": props["data-qa"] }, /* @__PURE__ */ React76__default.default.createElement(
83749
- DateFilterSelect2,
83750
- {
83751
- afterHide: dateRangeAfterHide,
83752
- headerName,
83753
- onChange: dateFilterOnChange,
83754
- position: "start",
83755
- selectedValue,
83756
- selectionType,
83757
- setSelectionType: onSelectionTypeChange,
83758
- disabled
83759
- }
83760
- ), selectedValue.type === "range" && /* @__PURE__ */ React76__default.default.createElement(
83761
- DateFilterSelect2,
83762
- {
83763
- headerName,
83764
- onChange: dateFilterOnChange,
83765
- position: "end",
83766
- ref: dateRangeEndDateRef,
83767
- selectedValue,
83768
- selectionType,
83769
- setSelectionType: onSelectionTypeChange,
83770
- disabled
83771
- }
83772
- ));
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;
83773
83844
  }
83774
- function ServerSideQuickDateFilterRenderer({
83845
+
83846
+ // src/QuickFilterRenderers/MultiSelectQuickFilterRenderer.tsx
83847
+ var ClientSideMultiSelectQuickFilter = ({
83848
+ filter,
83775
83849
  columnDefinition,
83850
+ onChange,
83851
+ onRemove,
83852
+ overlayMatchesTriggerWidth,
83776
83853
  disabled
83777
- }) {
83778
- const { onChange, value = [] } = useServerSideFilter({
83779
- columnDefinition
83780
- });
83781
- const colDef = columnDefinition;
83782
- return /* @__PURE__ */ React76__default.default.createElement(OptionalDateTimeProvider2, { timeZone: colDef.timeZone }, /* @__PURE__ */ React76__default.default.createElement(
83783
- DateFilter3,
83854
+ }) => {
83855
+ return /* @__PURE__ */ React76__default.default.createElement(StyledSuperSelectWrapper, { $enabled: Boolean(filter.filterValues?.length) }, /* @__PURE__ */ React76__default.default.createElement(
83856
+ coreReact.UNSAFE_SuperSelect,
83784
83857
  {
83785
- selectionType: colDef.filterProps?.selectionType ?? "either",
83786
- headerName: colDef.headerName,
83858
+ overlayMatchesTriggerWidth,
83859
+ value: filter.filterValues === null ? [] : filter.filterValues,
83860
+ search: false,
83861
+ multiple: true,
83862
+ options: filter.options,
83787
83863
  disabled,
83788
- onChange: (selected) => {
83789
- onChange(
83790
- selected.map((date) => {
83791
- return date ? {
83792
- // future extensions can go here (month, day, year keys etc)
83793
- date
83794
- } : (
83795
- // TODO: refactor out date-specific getId stuff from useServerSideFilterStorage
83796
- date
83797
- );
83798
- })
83799
- );
83864
+ getOptionValue: (option) => {
83865
+ return getId(columnDefinition.filterProps?.getId, option);
83800
83866
  },
83801
- 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)
83802
83878
  }
83803
83879
  ));
83804
- }
83805
- var QuickDateFilterRenderer = (props) => {
83806
- const { onServerSideDataRequest } = useInternalTableContext();
83807
- if (onServerSideDataRequest) {
83808
- return /* @__PURE__ */ React76__default.default.createElement(ServerSideQuickDateFilterRenderer, { ...props });
83809
- }
83810
- logger.error(
83811
- "Warning: Date Filters are currently only implemented for the serverside row model"
83812
- );
83813
- return null;
83814
- };
83815
- var dateInputLocales = {
83816
- "fr-CA": {
83817
- placeholders: { day: "jj", month: "mm", year: "aaaa" }
83818
- },
83819
- "fr-FR": {
83820
- placeholders: { day: "jj", month: "mm", year: "aaaa" }
83821
- },
83822
- es: {
83823
- placeholders: { day: "dd", month: "mm", year: "aaaa" }
83824
- },
83825
- "es-ES": {
83826
- placeholders: { day: "dd", month: "mm", year: "aaaa" }
83827
- },
83828
- pt: {
83829
- placeholders: { day: "dd", month: "mm", year: "aaaa" }
83830
- },
83831
- "is-IS": {
83832
- placeholders: { day: "dd", month: "mm", year: "\xE1\xE1\xE1\xE1" }
83833
- },
83834
- "de-DE": {
83835
- placeholders: { day: "tt", month: "MM", year: "jjjj" }
83836
- }
83837
- };
83838
- var DateQuickFilterLabel = React76__default.default.forwardRef(({ headerName, onClear, value, disabled }, ref) => {
83839
- const dateTime = coreReact.useDateTime();
83840
- const i18n = coreReact.useI18nContext();
83841
- const placeholders = dateInputLocales[i18n.locale]?.placeholders || {
83842
- day: "dd",
83843
- month: "mm",
83844
- year: "yyyy"
83845
- };
83846
- if (value !== void 0 && dateFns.isDate(value)) {
83847
- return /* @__PURE__ */ React76__default.default.createElement(
83848
- QuickFilterLabel,
83849
- {
83850
- enabled: true,
83851
- disabled,
83852
- label: `${headerName}: ${dateTime.format(value, "numeric-date")}`,
83853
- onClear,
83854
- ref
83855
- }
83856
- );
83857
- }
83858
- return /* @__PURE__ */ React76__default.default.createElement(
83859
- QuickFilterLabel,
83860
- {
83861
- enabled: false,
83862
- disabled,
83863
- label: `${headerName}: ${globalizationToolkit.getDatePlaceholder(i18n.locale, placeholders)}`,
83864
- ref
83865
- }
83866
- );
83867
- });
83868
- var DateQuickFilterRenderer_default = QuickDateFilterRenderer;
83869
- var defaultGetId2 = (option) => option?.id;
83870
- var defaultGetLabel2 = (option) => {
83871
- return option?.label ?? option?.name ?? option;
83872
83880
  };
83873
- var useSuperSelectOptionAsValueWorkaround = ({
83881
+ var useSuperSelectOptionAsValueWorkaround2 = ({
83874
83882
  originValue,
83875
83883
  originOptions,
83876
- getId: getId3 = defaultGetId2,
83884
+ getId: getId3,
83877
83885
  loading
83878
83886
  }) => {
83879
83887
  const isValueFromOptions = React76__default.default.useRef(false);
83880
83888
  const getValueFromOptions = () => {
83881
- const valueIds = originValue.map(getId3);
83889
+ const valueIds = originValue.map((option) => getId(getId3, option));
83882
83890
  isValueFromOptions.current = true;
83883
- return originOptions.filter((option) => valueIds.includes(getId3(option)));
83891
+ return originOptions.filter(
83892
+ (option) => valueIds.includes(getId(getId3, option))
83893
+ );
83884
83894
  };
83885
83895
  const hasOptions = originOptions.length > 0 && !loading;
83886
83896
  const hasValue = originValue?.length > 0;
@@ -83892,684 +83902,814 @@ var useSuperSelectOptionAsValueWorkaround = ({
83892
83902
  getOptionValue: (option) => option
83893
83903
  };
83894
83904
  };
83895
- var LocationQuickFilterOverlay = React76__default.default.forwardRef(
83896
- ({
83897
- getId: getId3,
83898
- 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,
83899
83918
  loading,
83900
- onSelect: _onSelect,
83901
- onSelectAll,
83902
- onSelectSublocations,
83903
- enableSublocations,
83904
- selectState,
83905
- options,
83906
- disabledOptions,
83907
- columnDefinition,
83908
- value
83909
- }, ref) => {
83910
- if (value && !Array.isArray(value)) {
83911
- logger.warn(
83912
- "a value was set that is not compatible with this LocationQuickFilterRenderer"
83913
- );
83914
- return null;
83915
- }
83916
- const [items, setItems] = React76__default.default.useState(options);
83917
- const [searching, setSearching] = React76__default.default.useState(false);
83918
- const menuRef = React76__default.default.useRef(null);
83919
- const { menuProps, menuNavigationTriggerProps } = coreReact.UNSAFE_useMenuImperativeControlNavigation(menuRef);
83920
- const I18n = coreReact.useI18nContext();
83921
- const selectAllOption = {
83922
- label: I18n.t("dataTable.filters.locationFilter.selectAll"),
83923
- id: "select_all"
83924
- };
83925
- const includeSublocationOption = {
83926
- label: I18n.t("dataTable.filters.locationFilter.includeSublocations"),
83927
- id: "include_sublocations"
83928
- };
83929
- const onSelect = (selection) => {
83930
- if (selection.item.id === selectAllOption.id) {
83931
- return onSelectAll();
83932
- }
83933
- if (selection.item.id === includeSublocationOption.id) {
83934
- _onSelect(selection);
83935
- return onSelectSublocations();
83936
- }
83937
- return _onSelect(selection);
83938
- };
83939
- function defaultOnSearch(e) {
83940
- if (e.target.value === "") {
83941
- setSearching(false);
83942
- setItems(options);
83943
- } else {
83944
- setSearching(true);
83945
- setItems(
83946
- options.filter(
83947
- (item) => getLabel3(item).toLowerCase().includes(e.target.value.toLowerCase())
83948
- )
83949
- );
83950
- }
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)
83951
83949
  }
83952
- const _onSearch = columnDefinition.filterProps.onSearch || defaultOnSearch;
83953
- React76__default.default.useEffect(() => {
83954
- menuRef.current?.highlightSuggested();
83955
- }, []);
83956
- return /* @__PURE__ */ React76__default.default.createElement(coreReact.Card, { ref }, /* @__PURE__ */ React76__default.default.createElement(
83957
- 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,
83958
83970
  {
83959
- ...menuProps,
83960
- multiple: true,
83961
- role: "listbox",
83962
- ref: menuRef,
83963
- onSelect,
83964
- className: locationFilterStyles_default.locationFilterMenu
83971
+ timeZone: columnDefinition.timeZone
83965
83972
  },
83966
83973
  /* @__PURE__ */ React76__default.default.createElement(
83967
- coreReact.UNSAFE_Menu.Search,
83974
+ DateFilterTokenText,
83968
83975
  {
83969
- ...menuNavigationTriggerProps,
83970
- onChange: _onSearch
83976
+ headerName: columnDefinition.headerName,
83977
+ value: filterValue
83971
83978
  }
83972
- ),
83973
- /* @__PURE__ */ React76__default.default.createElement(coreReact.UNSAFE_Menu.Options, null, !searching && /* @__PURE__ */ React76__default.default.createElement(
83974
- coreReact.Box,
83975
- {
83976
- className: locationFilterStyles_default.controlsContainer,
83977
- ...coreReact.UNSAFE_menuItemsWrapperAttribute
83978
- },
83979
- /* @__PURE__ */ React76__default.default.createElement(
83980
- coreReact.UNSAFE_Menu.CheckboxItem,
83981
- {
83982
- key: getId3(includeSublocationOption),
83983
- item: includeSublocationOption,
83984
- selected: enableSublocations
83985
- },
83986
- getLabel3(includeSublocationOption)
83987
- ),
83988
- /* @__PURE__ */ React76__default.default.createElement(
83989
- coreReact.UNSAFE_Menu.CheckboxItem,
83990
- {
83991
- key: getId3(selectAllOption),
83992
- item: selectAllOption,
83993
- selected: selectState === "all",
83994
- indeterminate: selectState === "partial"
83995
- },
83996
- getLabel3(selectAllOption)
83997
- )
83998
- ), !loading && items.map((item, i) => {
83999
- return /* @__PURE__ */ React76__default.default.createElement(
84000
- coreReact.UNSAFE_Menu.CheckboxItem,
84001
- {
84002
- key: getId3(item),
84003
- item,
84004
- selected: value.map(({ id }) => id).includes(getId3(item)) || disabledOptions.map(({ id }) => id).includes(getId3(item)),
84005
- suggested: i === 0,
84006
- disabled: disabledOptions.map(({ id }) => id).includes(getId3(item))
84007
- },
84008
- getLabel3(item)
84009
- );
84010
- })),
84011
- 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" })))
84012
- ));
83979
+ )
83980
+ );
84013
83981
  }
84014
- );
84015
- 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,
84016
84009
  columnDefinition,
84010
+ onChange,
84011
+ onRemove,
84012
+ overlayMatchesTriggerWidth,
84017
84013
  disabled
84018
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 }) => {
84019
84070
  const {
84020
84071
  options: originOptions,
84072
+ onClearFilter,
84073
+ fieldName,
84021
84074
  value: originValue = [],
84022
84075
  onChange,
84023
84076
  getOptions,
84024
84077
  loading
84025
84078
  } = useServerSideFilter({ columnDefinition });
84026
- const { options, value } = useSuperSelectOptionAsValueWorkaround({
84079
+ const { options, value, getOptionValue } = useSuperSelectOptionAsValueWorkaround3({
84027
84080
  originOptions,
84028
84081
  originValue,
84029
84082
  loading,
84030
84083
  getId: columnDefinition.filterProps?.getId
84031
84084
  });
84032
- const I18n = coreReact.useI18nContext();
84033
- const getId3 = columnDefinition.filterProps?.getId || defaultGetId2;
84034
- const getLabel3 = columnDefinition.filterProps?.getLabel || defaultGetLabel2;
84035
- const determineSelectedState = (selection) => {
84036
- if (options.length === selection.length) {
84037
- return "all";
84038
- }
84039
- if (selection.length && (options.length > selection.length || options.length < selection.length)) {
84040
- return "partial";
84041
- }
84042
- if (selection.length === 0) {
84043
- return "none";
84044
- }
84045
- return "none";
84046
- };
84047
- const ids = React76__default.default.useMemo(() => value.map(({ id }) => id), [value]);
84048
- const [selectedValueIds, setSelectedValueIds] = React76__default.default.useState(ids);
84049
- const [selectState, setSelectState] = React76__default.default.useState(
84050
- determineSelectedState(value)
84051
- );
84052
- const [disabledValues, setDisabledValues] = React76__default.default.useState([]);
84053
- const [enableSublocations, setEnableSublocations] = React76__default.default.useState(false);
84054
- const onSelectSublocations = React76__default.default.useCallback(() => {
84055
- if (enableSublocations) {
84056
- setDisabledValues([]);
84057
- } else {
84058
- const newDisabledValues = [];
84059
- value.forEach((location) => {
84060
- newDisabledValues.push(...findSublocations(location));
84061
- });
84062
- const uniqDisabledValues = ramda.uniqBy(ramda.prop("id"), newDisabledValues).filter(
84063
- ({ id }) => !selectedValueIds.includes(id)
84064
- );
84065
- setDisabledValues(uniqDisabledValues);
84066
- }
84067
- setEnableSublocations(!enableSublocations);
84068
- }, [enableSublocations, value, selectedValueIds, options]);
84069
- const onSelectAll = React76__default.default.useCallback(() => {
84070
- if (selectState === "none" || selectState === "partial") {
84071
- setSelectState("all");
84072
- setSelectedValueIds(options.map(({ id }) => id));
84073
- onChange(options);
84074
- }
84075
- if (selectState === "all") {
84076
- setSelectState("none");
84077
- setSelectedValueIds([]);
84078
- 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;
84079
84090
  }
84080
- }, [options, selectState, selectedValueIds]);
84081
- const onSelect = (selection) => {
84082
- 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();
84083
84097
  return;
84084
84098
  }
84085
- if (selection.item.id === "include_sublocations") {
84086
- return onChange(
84087
- value.map((item) => ({
84088
- ...item,
84089
- sublocations: enableSublocations ? [] : findSublocations(item)
84090
- }))
84091
- );
84092
- }
84093
- let newSelections = [];
84094
- if (selectedValueIds.includes(getId3(selection.item))) {
84095
- newSelections = removeSelections(selection.item, value);
84096
- } else {
84097
- newSelections = [...value, selection.item];
84098
- const sublocationsToDisable = handleSelectSublocations(selection.item);
84099
- const newDisabledValues = [
84100
- ...disabledValues,
84101
- ...sublocationsToDisable.filter(
84102
- ({ id }) => !selectedValueIds.includes(id)
84103
- )
84104
- ];
84105
- setDisabledValues(newDisabledValues);
84106
- }
84107
- setSelectState(determineSelectedState(newSelections));
84108
- setSelectedValueIds(newSelections.map(({ id }) => id));
84109
- onChange(
84110
- newSelections.map((item) => ({
84111
- ...item,
84112
- sublocations: handleSelectSublocations(item)
84113
- }))
84114
- );
84115
- };
84116
- const findSublocations = (selected) => {
84117
- return options.filter((option) => {
84118
- return ramda.startsWith(
84119
- `${getLabel3(selected).toLowerCase()} > `,
84120
- getLabel3(option).toLowerCase()
84121
- );
84122
- });
84099
+ onChange(selectedValues);
84123
84100
  };
84124
- const handleSelectSublocations = (selected) => {
84125
- if (enableSublocations) {
84126
- const filteredOptions = findSublocations(selected);
84127
- return filteredOptions;
84128
- } else {
84129
- return [];
84101
+ const handleOnOpenChange = (open) => {
84102
+ if (open && !originOptions.length) {
84103
+ getOptions();
84130
84104
  }
84131
84105
  };
84132
- const removeSelections = React76__default.default.useCallback(
84133
- function(selection, selected) {
84134
- const sublocations = handleSelectSublocations(selection);
84135
- const disabledValueIds = disabledValues.map(({ id }) => id);
84136
- const sublocationsToRemoveFromDisabledIds = sublocations.filter(({ id }) => disabledValueIds.includes(id)).map(({ id }) => id);
84137
- setDisabledValues(
84138
- disabledValues.filter(
84139
- ({ id }) => !sublocationsToRemoveFromDisabledIds.includes(id)
84140
- )
84141
- );
84142
- 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"
84143
84111
  },
84144
- [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
+ )
84145
84129
  );
84146
- React76__default.default.useEffect(() => {
84147
- setSelectState(determineSelectedState(value));
84148
- }, [value]);
84149
- const overlay = /* @__PURE__ */ React76__default.default.createElement(
84150
- 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,
84151
84148
  {
84152
- columnDefinition,
84153
- enableSublocations,
84154
- onSelectAll,
84155
- onSelectSublocations,
84156
- selectState,
84157
- value,
84158
- options,
84159
- disabledOptions: disabledValues,
84160
- getId: getId3,
84161
- getLabel: getLabel3,
84162
- loading,
84163
- onSelect,
84164
- 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
84165
84180
  }
84166
84181
  );
84167
- 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]);
84168
84190
  return /* @__PURE__ */ React76__default.default.createElement(
84169
- coreReact.OverlayTrigger,
84191
+ FiltersPanelToggleButton,
84170
84192
  {
84171
- overlay,
84172
- beforeShow: getOptions,
84173
- 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"
84174
84228
  },
84175
- value.length ? /* @__PURE__ */ React76__default.default.createElement(
84176
- QuickFilterLabel,
84177
- {
84178
- enabled: true,
84179
- disabled,
84180
- label: `${I18n.t(
84181
- "dataTable.filters.locationFilter.locations"
84182
- )}${triggerLabel}`,
84183
- onClear: () => {
84184
- onChange([]);
84185
- },
84186
- block: true
84187
- }
84188
- ) : /* @__PURE__ */ React76__default.default.createElement(
84189
- QuickFilterLabel,
84229
+ /* @__PURE__ */ React76__default.default.createElement(
84230
+ "path",
84190
84231
  {
84191
- enabled: false,
84192
- disabled,
84193
- label: `${I18n.t(
84194
- "dataTable.filters.locationFilter.locations"
84195
- )}${triggerLabel}`,
84196
- block: true
84232
+ fillRule: "evenodd",
84233
+ clipRule: "evenodd",
84234
+ d: "M3 5V7H17V5H3ZM8 15H12V13H8V15ZM15 11H5V9H15V11Z",
84235
+ fill: "currentColor"
84197
84236
  }
84198
84237
  )
84199
84238
  );
84200
84239
  };
84201
- var LocationQuickFilterRenderer_default = LocationQuickFilterRenderer;
84202
- var StyledFilterPresetPopoverContent = styled4__default.default(coreReact.Popover.Content)`
84203
- 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
+ }
84204
84244
  `;
84205
- var getValueLabel = (isValueEmpty, value, placeholder, filterName) => {
84206
- const prefixLabel = isValueEmpty ? placeholder || filterName : filterName;
84207
- const valueLabel = value ? `${prefixLabel ? ": " : ""}${value}` : "";
84208
- return `${prefixLabel}${valueLabel}`;
84209
- };
84210
- var getSuperSelectFilterPreset = (columnDefinition) => {
84211
- const filterName = columnDefinition.headerName;
84212
- const getValueLabel_ = typeof columnDefinition.filterProps?.getFilterTokenText === "function" ? (value) => {
84213
- return columnDefinition.filterProps?.getFilterTokenText?.({
84214
- headerName: columnDefinition.headerName,
84215
- value: Array.isArray(value) ? value : [value]
84216
- });
84217
- } : void 0;
84218
- return {
84219
- components: {
84220
- Label: React76__default.default.forwardRef(() => {
84221
- const ctx = coreReact.UNSAFE_useSuperSelectContext();
84222
- const isValueEmpty = ["", null, void 0].includes(
84223
- ctx.state.value
84224
- );
84225
- return /* @__PURE__ */ React76__default.default.createElement(coreReact.UNSAFE_StyledSuperSelectLabel, { $hoverable: false }, typeof getValueLabel_ === "function" ? getValueLabel_(ctx.state.value) : getValueLabel(
84226
- isValueEmpty,
84227
- ctx.state.selectedLabel,
84228
- ctx.config.placeholder,
84229
- filterName
84230
- ));
84231
- }),
84232
- TriggerContainer: React76__default.default.forwardRef((props, ref) => {
84233
- const ctx = coreReact.UNSAFE_useSuperSelectContext();
84234
- if (!Array.isArray(ctx.state.value)) {
84235
- return /* @__PURE__ */ React76__default.default.createElement(
84236
- coreReact.UNSAFE_StyledSuperSelectTrigger,
84237
- {
84238
- $block: ctx.config.block,
84239
- ...props,
84240
- ref
84241
- }
84242
- );
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;
84243
84254
  }
84244
- return /* @__PURE__ */ React76__default.default.createElement(
84245
- coreReact.Popover,
84246
- {
84247
- placement: "top",
84248
- trigger: ctx.state.value.length > 1 ? "hover" : "none",
84249
- overlay: /* @__PURE__ */ React76__default.default.createElement(StyledFilterPresetPopoverContent, null, /* @__PURE__ */ React76__default.default.createElement(coreReact.Typography, null, ctx.state.value.map((v) => {
84250
- const option = ctx.state.options.find(
84251
- (option2) => ctx.option.value(option2) === v
84252
- );
84253
- return option ? ctx.option.label(option) : "";
84254
- }).join(", ")))
84255
- },
84256
- /* @__PURE__ */ React76__default.default.createElement(
84257
- coreReact.UNSAFE_StyledSuperSelectTrigger,
84258
- {
84259
- $block: ctx.config.block,
84260
- ...props,
84261
- ref
84262
- }
84263
- )
84264
- );
84265
- }),
84266
- MultiValueContainer: () => {
84267
- const ctx = coreReact.UNSAFE_useSuperSelectContext();
84268
- if (Array.isArray(ctx.state.value)) {
84269
- const isValueEmpty = !ctx.state.value.length;
84270
- const value = ctx.state.value.length > 1 ? `(${ctx.state.value.length})` : ctx.state.value.length === 1 ? `${ctx.state.selectedLabel}` : "";
84271
- return /* @__PURE__ */ React76__default.default.createElement(coreReact.UNSAFE_StyledSuperSelectLabel, { $hoverable: false }, typeof getValueLabel_ === "function" ? getValueLabel_(ctx.state.value) : getValueLabel(
84272
- isValueEmpty,
84273
- value,
84274
- ctx.config.placeholder,
84275
- filterName
84276
- ));
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] };
84277
84262
  }
84278
- return /* @__PURE__ */ React76__default.default.createElement("div", null, "Value is not an array");
84263
+ return acc;
84264
+ },
84265
+ {
84266
+ quickFilters: [],
84267
+ tokens: []
84279
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"
84280
84280
  },
84281
- selectionStyle: "highlight"
84282
- };
84283
- };
84284
- var StyledSuperSelectWrapper = styled4__default.default.div`
84285
- ${coreReact.UNSAFE_StyledSuperSelectTrigger} {
84286
- width: auto;
84287
- }
84288
-
84289
- ${({ $enabled }) => $enabled && styled4.css`
84290
- ${coreReact.UNSAFE_StyledSuperSelectTrigger} {
84291
- max-width: 360px;
84292
- background: ${coreReact.colors.blue96};
84293
- border-color: ${coreReact.colors.blue96};
84294
- font-weight: ${coreReact.typographyWeights.semibold};
84295
-
84296
- &:hover {
84297
- background: ${coreReact.colors.blue90};
84298
- 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)
84299
84316
  }
84300
-
84301
- ${coreReact.UNSAFE_StyledSuperSelectLabel} {
84302
- 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;
84303
84341
  }
84304
-
84305
- ${coreReact.StyledButton} {
84306
- color: ${coreReact.colors.blue45};
84307
-
84308
- &:hover {
84309
- background: white;
84310
- }
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
+ };
84311
84355
  }
84312
-
84313
- ${coreReact.UNSAFE_StyledSuperSelectArrow} {
84314
- svg {
84315
- 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
84316
84397
  }
84317
- }
84398
+ )
84399
+ );
84400
+ }),
84401
+ tokenNames.map((fieldName) => {
84402
+ const colDef = getColumnDefinition(fieldName);
84403
+ if (!colDef) {
84404
+ return null;
84318
84405
  }
84319
- `}
84320
- `;
84321
-
84322
- // src/QuickFilterRenderers/types.ts
84323
- function isClientSideFilterProps(_value, isServerSideDataRequest) {
84324
- return !isServerSideDataRequest;
84325
- }
84326
-
84327
- // src/QuickFilterRenderers/MultiSelectQuickFilterRenderer.tsx
84328
- var ClientSideMultiSelectQuickFilter = ({
84329
- filter,
84330
- columnDefinition,
84331
- onChange,
84332
- onRemove,
84333
- overlayMatchesTriggerWidth,
84334
- disabled
84335
- }) => {
84336
- return /* @__PURE__ */ React76__default.default.createElement(StyledSuperSelectWrapper, { $enabled: Boolean(filter.filterValues?.length) }, /* @__PURE__ */ React76__default.default.createElement(
84337
- coreReact.UNSAFE_SuperSelect,
84338
- {
84339
- overlayMatchesTriggerWidth,
84340
- value: filter.filterValues === null ? [] : filter.filterValues,
84341
- search: false,
84342
- multiple: true,
84343
- options: filter.options,
84344
- disabled,
84345
- getOptionValue: (option) => {
84346
- return getId(columnDefinition.filterProps?.getId, option);
84347
- },
84348
- getOptionLabel: (option) => {
84349
- return getLabel(columnDefinition.filterProps?.getLabel, option);
84350
- },
84351
- onChange: (values2) => {
84352
- if (Array.isArray(values2) && !values2.length) {
84353
- onRemove?.();
84354
- 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)
84355
84415
  }
84356
- onChange?.(values2);
84357
- },
84358
- ...getSuperSelectFilterPreset(columnDefinition)
84359
- }
84360
- ));
84416
+ )));
84417
+ })
84418
+ );
84361
84419
  };
84362
- var useSuperSelectOptionAsValueWorkaround2 = ({
84363
- originValue,
84364
- originOptions,
84365
- getId: getId3,
84366
- loading
84367
- }) => {
84368
- const isValueFromOptions = React76__default.default.useRef(false);
84369
- const getValueFromOptions = () => {
84370
- const valueIds = originValue.map((option) => getId(getId3, option));
84371
- isValueFromOptions.current = true;
84372
- return originOptions.filter(
84373
- (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
+ }
84374
84428
  );
84375
- };
84376
- const hasOptions = originOptions.length > 0 && !loading;
84377
- const hasValue = originValue?.length > 0;
84378
- const options = !hasOptions && hasValue ? originValue : originOptions;
84379
- const value = !hasOptions ? originValue : isValueFromOptions.current ? originValue : getValueFromOptions();
84380
- return {
84381
- options,
84382
- value,
84383
- getOptionValue: (option) => option
84384
- };
84385
- };
84386
- var ServerSideMultiSelectQuickFilter = ({ columnDefinition, overlayMatchesTriggerWidth, disabled }) => {
84387
- const {
84388
- options: originOptions,
84389
- onClearFilter,
84390
- fieldName,
84391
- value: originValue = [],
84392
- onChange,
84393
- getOptions,
84394
- loading
84395
- } = useServerSideFilter({ columnDefinition });
84396
- const { options, value, getOptionValue } = useSuperSelectOptionAsValueWorkaround2({
84397
- originOptions,
84398
- originValue,
84399
- loading,
84400
- getId: columnDefinition.filterProps?.getId
84401
- });
84402
- return /* @__PURE__ */ React76__default.default.createElement(StyledSuperSelectWrapper, { $enabled: Boolean(value?.length) }, /* @__PURE__ */ React76__default.default.createElement(
84403
- coreReact.UNSAFE_SuperSelect,
84429
+ }
84430
+ return /* @__PURE__ */ React76__default.default.createElement(
84431
+ ClientSideQuickFilters,
84404
84432
  {
84405
- overlayMatchesTriggerWidth,
84406
- loading,
84407
- value: value === null ? [] : value,
84408
- search: false,
84409
- getOptionLabel: (option) => {
84410
- return getLabel(columnDefinition.filterProps?.getLabel, option);
84411
- },
84412
- getOptionValue,
84413
- multiple: true,
84414
- options,
84415
- disabled,
84416
- onChange: (values2) => {
84417
- if (Array.isArray(values2) && !values2.length) {
84418
- onClearFilter?.(fieldName);
84419
- getOptions();
84420
- return;
84421
- }
84422
- onChange(values2);
84423
- },
84424
- onOpenChange: (open) => {
84425
- if (open && !originOptions.length) {
84426
- getOptions();
84427
- }
84428
- },
84429
- ...getSuperSelectFilterPreset(columnDefinition)
84433
+ overlayMatchesTriggerWidth
84430
84434
  }
84431
- ));
84435
+ );
84432
84436
  };
84433
- var MultiSelectQuickFilterRenderer = (props) => {
84437
+ var FiltersPanelButton = () => {
84434
84438
  const { onServerSideDataRequest } = useInternalTableContext();
84435
- if (!isClientSideFilterProps(props, !!onServerSideDataRequest)) {
84436
- return /* @__PURE__ */ React76__default.default.createElement(ServerSideMultiSelectQuickFilter, { ...props });
84439
+ if (onServerSideDataRequest) {
84440
+ return /* @__PURE__ */ React76__default.default.createElement(ServerSideFiltersPanelToggleButton, null);
84437
84441
  }
84438
- return /* @__PURE__ */ React76__default.default.createElement(ClientSideMultiSelectQuickFilter, { ...props });
84442
+ return /* @__PURE__ */ React76__default.default.createElement(ClientSideFiltersPanelToggleButton, null);
84439
84443
  };
84440
- var MultiSelectQuickFilterRenderer_default = MultiSelectQuickFilterRenderer;
84441
- var ClientSideSingleSelectQuickFilter = ({
84442
- filter,
84443
- columnDefinition,
84444
- onChange,
84445
- onRemove,
84446
- overlayMatchesTriggerWidth,
84447
- disabled
84448
- }) => {
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
+ }
84449
84510
  return /* @__PURE__ */ React76__default.default.createElement(
84450
- StyledSuperSelectWrapper,
84511
+ EmptyResultsControlTooltip,
84451
84512
  {
84452
- $enabled: Boolean(filter.filterValues?.length),
84453
- "data-test-id": "client-side-single-select-quick-filter"
84513
+ featureI18nKey: "featureGroupBy",
84514
+ enabled: hasNoContent
84454
84515
  },
84455
84516
  /* @__PURE__ */ React76__default.default.createElement(
84456
- coreReact.UNSAFE_SuperSelect,
84517
+ coreReact.Tooltip,
84457
84518
  {
84458
- overlayMatchesTriggerWidth,
84459
- value: filter.filterValues ?? [],
84460
- search: false,
84461
- multiple: false,
84462
- options: filter.options,
84463
- disabled,
84464
- getOptionValue: (option) => getId(columnDefinition.filterProps?.getId, option),
84465
- getOptionLabel: (option) => getLabel(columnDefinition.filterProps?.getLabel, option),
84466
- onChange: (values2) => {
84467
- const valuesArray = ensureArray(values2);
84468
- if (!valuesArray.length) {
84469
- onRemove?.();
84470
- return;
84471
- }
84472
- onChange?.(valuesArray);
84473
- },
84474
- ...getSuperSelectFilterPreset(columnDefinition)
84475
- }
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
+ ))
84476
84535
  )
84477
84536
  );
84478
84537
  };
84479
- var useSuperSelectOptionAsValueWorkaround3 = ({
84480
- originValue,
84481
- originOptions,
84482
- getId: getId3,
84483
- 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
84484
84552
  }) => {
84485
- const isValueFromOptions = React76__default.default.useRef(false);
84486
- const getValueFromOptions = () => {
84487
- const valueIds = originValue.map((option) => getId(getId3, option));
84488
- isValueFromOptions.current = true;
84489
- return originOptions.filter(
84490
- (option) => valueIds.includes(getId(getId3, option))
84491
- );
84492
- };
84493
- const hasOptions = originOptions.length > 0 && !loading;
84494
- const hasValue = originValue?.length > 0;
84495
- const options = !hasOptions && hasValue ? originValue : originOptions;
84496
- const value = !hasOptions ? originValue : isValueFromOptions.current ? originValue : getValueFromOptions();
84497
- return {
84498
- options,
84499
- value,
84500
- getOptionValue: (option) => option
84501
- };
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
+ ));
84502
84587
  };
84503
- var ServerSideSingleSelectQuickFilter = ({ columnDefinition, overlayMatchesTriggerWidth, disabled }) => {
84504
- const {
84505
- options: originOptions,
84506
- onClearFilter,
84507
- fieldName,
84508
- value: originValue = [],
84509
- onChange,
84510
- getOptions,
84511
- loading
84512
- } = useServerSideFilter({ columnDefinition });
84513
- const { options, value, getOptionValue } = useSuperSelectOptionAsValueWorkaround3({
84514
- originOptions,
84515
- originValue,
84516
- loading,
84517
- getId: columnDefinition.filterProps?.getId
84518
- });
84519
- const hasFetchedOptions = React76__default.default.useRef(false);
84520
- React76__default.default.useEffect(() => {
84521
- if (!hasFetchedOptions.current && !originOptions.length) {
84522
- getOptions();
84523
- 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
84524
84616
  }
84525
- }, [getOptions, originOptions.length]);
84526
- const handleOnChange = (values2) => {
84527
- const selectedValues = ensureArray(values2);
84528
- if (!selectedValues.length) {
84529
- onClearFilter?.(fieldName);
84530
- getOptions();
84531
- 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
+ }
84532
84625
  }
84533
- onChange(selectedValues);
84534
- };
84535
- const handleOnOpenChange = (open) => {
84536
- if (open && !originOptions.length) {
84537
- getOptions();
84626
+ ), /* @__PURE__ */ React76__default.default.createElement(ConfigPanelButton, null))), /* @__PURE__ */ React76__default.default.createElement(
84627
+ QuickFilters,
84628
+ {
84629
+ overlayMatchesTriggerWidth: props.filterOverlayMatchesTriggerWidth
84538
84630
  }
84539
- };
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
+ }) => {
84540
84660
  return /* @__PURE__ */ React76__default.default.createElement(
84541
- StyledSuperSelectWrapper,
84661
+ DataTable,
84542
84662
  {
84543
- $enabled: Boolean(value?.length),
84544
- "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
84545
84677
  },
84546
- /* @__PURE__ */ React76__default.default.createElement(
84547
- coreReact.UNSAFE_SuperSelect,
84548
- {
84549
- overlayMatchesTriggerWidth,
84550
- loading,
84551
- value: value ?? [],
84552
- search: false,
84553
- disabled,
84554
- getOptionLabel: (option) => getLabel(columnDefinition.filterProps?.getLabel, option),
84555
- getOptionValue,
84556
- multiple: false,
84557
- options,
84558
- onChange: handleOnChange,
84559
- onOpenChange: handleOnOpenChange,
84560
- ...getSuperSelectFilterPreset(columnDefinition)
84561
- }
84562
- )
84678
+ children
84563
84679
  );
84564
84680
  };
84565
- var SingleSelectQuickFilterRenderer = (props) => {
84566
- const { onServerSideDataRequest } = useInternalTableContext();
84567
- if (!isClientSideFilterProps(props, !!onServerSideDataRequest)) {
84568
- return /* @__PURE__ */ React76__default.default.createElement(ServerSideSingleSelectQuickFilter, { ...props });
84569
- }
84570
- 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] });
84571
84687
  };
84572
- 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
+ );
84573
84713
 
84574
84714
  // ../../node_modules/@ag-grid-enterprise/server-side-row-model/dist/esm/es6/serverSideRowModel/stores/fullStore.mjs
84575
84715
  var __decorate212 = function(decorators, target, key, desc) {
@@ -89151,6 +89291,7 @@ exports.SingleSelectQuickFilterRenderer = SingleSelectQuickFilterRenderer_defaul
89151
89291
  exports.TextCellEditor = TextCellEditor2;
89152
89292
  exports.TextCellRenderer = TextCellRenderer;
89153
89293
  exports.UNSAFE_useTableContext = UNSAFE_useTableContext;
89294
+ exports.assignAlphabeticalFilterIndices = assignAlphabeticalFilterIndices;
89154
89295
  exports.rowSize = rowSize;
89155
89296
  exports.useAnalyticsContext = useAnalyticsContext;
89156
89297
  exports.useRowSelectionState = useRowSelectionState;