@grafana/scenes 6.40.0--canary.1255.18001595104.0 → 6.40.0--canary.1272.18407272616.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.
Files changed (31) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/dist/esm/components/VizPanel/VizPanel.js +14 -15
  3. package/dist/esm/components/VizPanel/VizPanel.js.map +1 -1
  4. package/dist/esm/index.js +5 -1
  5. package/dist/esm/index.js.map +1 -1
  6. package/dist/esm/querying/layers/SceneDataLayerControls.js +13 -1
  7. package/dist/esm/querying/layers/SceneDataLayerControls.js.map +1 -1
  8. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +10 -10
  9. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js.map +1 -1
  10. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +6 -6
  11. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js.map +1 -1
  12. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +57 -55
  13. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js.map +1 -1
  14. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +5 -5
  15. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js.map +1 -1
  16. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js +4 -4
  17. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js.map +1 -1
  18. package/dist/esm/variables/adhoc/AdHocFiltersVariable.js +4 -2
  19. package/dist/esm/variables/adhoc/AdHocFiltersVariable.js.map +1 -1
  20. package/dist/esm/variables/adhoc/controller/VariableBackedAdHocFiltersController.js +65 -0
  21. package/dist/esm/variables/adhoc/controller/VariableBackedAdHocFiltersController.js.map +1 -0
  22. package/dist/esm/variables/variants/CustomVariable.js +9 -4
  23. package/dist/esm/variables/variants/CustomVariable.js.map +1 -1
  24. package/dist/esm/variables/variants/SwitchVariable.js +108 -0
  25. package/dist/esm/variables/variants/SwitchVariable.js.map +1 -0
  26. package/dist/esm/variables/variants/guards.js +4 -1
  27. package/dist/esm/variables/variants/guards.js.map +1 -1
  28. package/dist/index.d.ts +148 -4
  29. package/dist/index.js +308 -122
  30. package/dist/index.js.map +1 -1
  31. package/package.json +2 -2
@@ -11,12 +11,17 @@ import { handleOptionGroups } from '../../utils.js';
11
11
  import { useFloatingInteractions, MAX_MENU_HEIGHT } from './useFloatingInteractions.js';
12
12
  import { MultiValuePill } from './MultiValuePill.js';
13
13
  import { getAdhocOptionSearcher } from '../getAdhocOptionSearcher.js';
14
- import { getQueryController } from '../../../core/sceneGraph/getQueryController.js';
15
14
  import { FILTER_CHANGED_INTERACTION, ADHOC_KEYS_DROPDOWN_INTERACTION, ADHOC_VALUES_DROPDOWN_INTERACTION, FILTER_REMOVED_INTERACTION } from '../../../behaviors/SceneRenderProfiler.js';
16
- import { getInteractionTracker } from '../../../core/sceneGraph/getInteractionTracker.js';
17
15
 
18
- const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwaysWip, handleChangeViewMode, focusOnWipInputRef, populateInputOnEdit }, parentRef) {
19
- var _a, _b, _c, _d;
16
+ const AdHocCombobox = forwardRef(function AdHocCombobox2({
17
+ filter,
18
+ controller,
19
+ isAlwaysWip,
20
+ handleChangeViewMode,
21
+ focusOnWipInputRef,
22
+ populateInputOnEdit
23
+ }, parentRef) {
24
+ var _a, _b, _c;
20
25
  const [open, setOpen] = useState(false);
21
26
  const [options, setOptions] = useState([]);
22
27
  const [optionsLoading, setOptionsLoading] = useState(false);
@@ -28,7 +33,7 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
28
33
  const styles = useStyles2(getStyles);
29
34
  const [filterMultiValues, setFilterMultiValues] = useState([]);
30
35
  const [_, setForceRefresh] = useState({});
31
- const allowCustomValue = (_a = model.state.allowCustomValue) != null ? _a : true;
36
+ const { allowCustomValue = true, onAddCustomValue, filters, inputPlaceholder } = controller.useState();
32
37
  const multiValuePillWrapperRef = useRef(null);
33
38
  const hasMultiValueOperator = isMultiValueOperator((filter == null ? void 0 : filter.operator) || "");
34
39
  const isMultiValueEdit = hasMultiValueOperator && filterInputType === "value";
@@ -41,29 +46,30 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
41
46
  if (isAlwaysWip) {
42
47
  return false;
43
48
  }
44
- if (model.state.filters.at(-1) === filter) {
49
+ if (filters.at(-1) === filter) {
45
50
  return true;
46
51
  }
47
52
  return false;
48
- }, [filter, isAlwaysWip, model.state.filters]);
53
+ }, [filter, isAlwaysWip, filters]);
49
54
  const handleResetWip = useCallback(() => {
50
55
  if (isAlwaysWip) {
51
- model._addWip();
56
+ controller.addWip();
52
57
  setInputType("key");
53
58
  setInputValue("");
54
59
  }
55
- }, [model, isAlwaysWip]);
60
+ }, [controller, isAlwaysWip]);
56
61
  const handleMultiValueFilterCommit = useCallback(
57
- (model2, filter2, filterMultiValues2, preventFocus) => {
62
+ (controller2, filter2, filterMultiValues2, preventFocus) => {
63
+ var _a2;
58
64
  if (!filterMultiValues2.length && filter2.origin) {
59
- model2.updateToMatchAll(filter2);
65
+ controller2.updateToMatchAll(filter2);
60
66
  }
61
67
  if (filterMultiValues2.length) {
62
68
  const valueLabels = [];
63
69
  const values = [];
64
70
  filterMultiValues2.forEach((item) => {
65
- var _a2;
66
- valueLabels.push((_a2 = item.label) != null ? _a2 : item.value);
71
+ var _a3;
72
+ valueLabels.push((_a3 = item.label) != null ? _a3 : item.value);
67
73
  values.push(item.value);
68
74
  });
69
75
  let shouldUpdate = true;
@@ -71,16 +77,15 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
71
77
  shouldUpdate = !filter2.values.every((v, i) => v === values[i]);
72
78
  }
73
79
  if (shouldUpdate) {
74
- const queryController = getQueryController(model2);
75
- queryController == null ? void 0 : queryController.startProfile(FILTER_CHANGED_INTERACTION);
80
+ (_a2 = controller2.startProfile) == null ? void 0 : _a2.call(controller2, FILTER_CHANGED_INTERACTION);
76
81
  }
77
- model2._updateFilter(filter2, { valueLabels, values, value: values[0] });
82
+ controller2.updateFilter(filter2, { valueLabels, values, value: values[0] });
78
83
  setFilterMultiValues([]);
79
84
  }
80
85
  if (!preventFocus) {
81
86
  setTimeout(() => {
82
- var _a2;
83
- return (_a2 = refs.domReference.current) == null ? void 0 : _a2.focus();
87
+ var _a3;
88
+ return (_a3 = refs.domReference.current) == null ? void 0 : _a3.focus();
84
89
  });
85
90
  }
86
91
  },
@@ -100,10 +105,10 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
100
105
  setOpen(nextOpen);
101
106
  if (reason && ["outside-press", "escape-key"].includes(reason)) {
102
107
  if (isMultiValueEdit) {
103
- handleMultiValueFilterCommit(model, filter, filterMultiValues);
108
+ handleMultiValueFilterCommit(controller, filter, filterMultiValues);
104
109
  } else {
105
110
  if (filter && filter.origin && inputValue === "") {
106
- model.updateToMatchAll(filter);
111
+ controller.updateToMatchAll(filter);
107
112
  }
108
113
  }
109
114
  handleResetWip();
@@ -118,7 +123,7 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
118
123
  handleResetWip,
119
124
  inputValue,
120
125
  isMultiValueEdit,
121
- model
126
+ controller
122
127
  ]
123
128
  );
124
129
  const outsidePressIdsToIgnore = useMemo(() => {
@@ -177,15 +182,13 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
177
182
  filteredDropDownItems.push(customOptionValue);
178
183
  }
179
184
  }
180
- const onAddCustomValue = model.state.onAddCustomValue;
181
185
  const maxOptionWidth = setupDropdownAccessibility(filteredDropDownItems, listRef, disabledIndicesRef);
182
186
  const handleFetchOptions = useCallback(
183
187
  async (inputType) => {
184
- var _a2;
185
- const profiler = getInteractionTracker(model);
188
+ var _a2, _b2, _c2, _d;
186
189
  const interactionName = inputType === "key" ? ADHOC_KEYS_DROPDOWN_INTERACTION : ADHOC_VALUES_DROPDOWN_INTERACTION;
187
190
  if (inputType !== "operator") {
188
- profiler == null ? void 0 : profiler.startInteraction(interactionName);
191
+ (_a2 = controller.startInteraction) == null ? void 0 : _a2.call(controller, interactionName);
189
192
  }
190
193
  setOptionsError(false);
191
194
  setOptionsLoading(true);
@@ -193,18 +196,18 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
193
196
  let options2 = [];
194
197
  try {
195
198
  if (inputType === "key") {
196
- options2 = await model._getKeys(null);
199
+ options2 = await controller.getKeys(null);
197
200
  } else if (inputType === "operator") {
198
- options2 = model._getOperators();
201
+ options2 = controller.getOperators();
199
202
  } else if (inputType === "value") {
200
- options2 = await model._getValuesFor(filter);
203
+ options2 = await controller.getValuesFor(filter);
201
204
  }
202
205
  if (filterInputTypeRef.current !== inputType) {
203
- profiler == null ? void 0 : profiler.stopInteraction();
206
+ (_b2 = controller.stopInteraction) == null ? void 0 : _b2.call(controller);
204
207
  return;
205
208
  }
206
209
  setOptions(options2);
207
- if ((_a2 = options2[0]) == null ? void 0 : _a2.group) {
210
+ if ((_c2 = options2[0]) == null ? void 0 : _c2.group) {
208
211
  setActiveIndex(1);
209
212
  } else {
210
213
  setActiveIndex(0);
@@ -213,9 +216,9 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
213
216
  setOptionsError(true);
214
217
  }
215
218
  setOptionsLoading(false);
216
- profiler == null ? void 0 : profiler.stopInteraction();
219
+ (_d = controller.stopInteraction) == null ? void 0 : _d.call(controller);
217
220
  },
218
- [filter, model]
221
+ [filter, controller]
219
222
  );
220
223
  const rowVirtualizer = useVirtualizer({
221
224
  count: filteredDropDownItems.length,
@@ -225,6 +228,7 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
225
228
  });
226
229
  const handleBackspaceInput = useCallback(
227
230
  (event, multiValueEdit) => {
231
+ var _a2;
228
232
  if (event.key === "Backspace" && !inputValue) {
229
233
  if (filterInputType === "value") {
230
234
  if (multiValueEdit) {
@@ -245,10 +249,9 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
245
249
  }
246
250
  focusOnWipInputRef == null ? void 0 : focusOnWipInputRef();
247
251
  if (isFilterComplete(filter)) {
248
- const queryController = getQueryController(model);
249
- queryController == null ? void 0 : queryController.startProfile(FILTER_REMOVED_INTERACTION);
252
+ (_a2 = controller.startProfile) == null ? void 0 : _a2.call(controller, FILTER_REMOVED_INTERACTION);
250
253
  }
251
- model._handleComboboxBackspace(filter);
254
+ controller.handleComboboxBackspace(filter);
252
255
  if (isAlwaysWip) {
253
256
  handleResetWip();
254
257
  }
@@ -257,7 +260,7 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
257
260
  [
258
261
  inputValue,
259
262
  filterInputType,
260
- model,
263
+ controller,
261
264
  filter,
262
265
  isAlwaysWip,
263
266
  filterMultiValues.length,
@@ -271,7 +274,7 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
271
274
  if (event.key === "Tab" && !event.shiftKey) {
272
275
  if (multiValueEdit) {
273
276
  event.preventDefault();
274
- handleMultiValueFilterCommit(model, filter, filterMultiValues);
277
+ handleMultiValueFilterCommit(controller, filter, filterMultiValues);
275
278
  (_a2 = refs.domReference.current) == null ? void 0 : _a2.focus();
276
279
  }
277
280
  handleChangeViewMode == null ? void 0 : handleChangeViewMode();
@@ -284,7 +287,7 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
284
287
  handleChangeViewMode,
285
288
  handleMultiValueFilterCommit,
286
289
  handleResetWip,
287
- model,
290
+ controller,
288
291
  refs.domReference
289
292
  ]
290
293
  );
@@ -293,16 +296,17 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
293
296
  if (event.key === "Tab" && event.shiftKey) {
294
297
  if (multiValueEdit) {
295
298
  event.preventDefault();
296
- handleMultiValueFilterCommit(model, filter, filterMultiValues, true);
299
+ handleMultiValueFilterCommit(controller, filter, filterMultiValues, true);
297
300
  }
298
301
  handleChangeViewMode == null ? void 0 : handleChangeViewMode();
299
302
  handleResetWip();
300
303
  }
301
304
  },
302
- [filter, filterMultiValues, handleChangeViewMode, handleMultiValueFilterCommit, handleResetWip, model]
305
+ [filter, filterMultiValues, handleChangeViewMode, handleMultiValueFilterCommit, handleResetWip, controller]
303
306
  );
304
307
  const handleEnterInput = useCallback(
305
308
  (event, multiValueEdit) => {
309
+ var _a2;
306
310
  if (event.key === "Enter" && activeIndex != null) {
307
311
  if (!filteredDropDownItems[activeIndex]) {
308
312
  return;
@@ -320,10 +324,9 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
320
324
  onAddCustomValue
321
325
  });
322
326
  if (filterInputType === "value" && payload.value !== (filter == null ? void 0 : filter.value)) {
323
- const queryController = getQueryController(model);
324
- queryController == null ? void 0 : queryController.startProfile(FILTER_CHANGED_INTERACTION);
327
+ (_a2 = controller.startProfile) == null ? void 0 : _a2.call(controller, FILTER_CHANGED_INTERACTION);
325
328
  }
326
- model._updateFilter(filter, payload);
329
+ controller.updateFilter(filter, payload);
327
330
  populateInputValueOnInputTypeSwitch({
328
331
  populateInputOnEdit,
329
332
  item: selectedItem,
@@ -350,7 +353,7 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
350
353
  activeIndex,
351
354
  filteredDropDownItems,
352
355
  handleLocalMultiValueChange,
353
- model,
356
+ controller,
354
357
  filter,
355
358
  filterInputType,
356
359
  populateInputOnEdit,
@@ -382,7 +385,7 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
382
385
  }
383
386
  }, [open, filterInputType]);
384
387
  useEffect(() => {
385
- var _a2, _b2, _c2, _d2;
388
+ var _a2, _b2, _c2, _d;
386
389
  if (!isAlwaysWip) {
387
390
  if (hasMultiValueOperator && ((_a2 = filter == null ? void 0 : filter.values) == null ? void 0 : _a2.length)) {
388
391
  const multiValueOptions = filter.values.reduce(
@@ -407,7 +410,7 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
407
410
  (_a3 = refs.domReference.current) == null ? void 0 : _a3.select();
408
411
  });
409
412
  }
410
- (_d2 = refs.domReference.current) == null ? void 0 : _d2.focus();
413
+ (_d = refs.domReference.current) == null ? void 0 : _d.focus();
411
414
  }
412
415
  }, []);
413
416
  useEffect(() => {
@@ -426,7 +429,7 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
426
429
  rowVirtualizer.scrollToIndex(activeIndex);
427
430
  }
428
431
  }, [activeIndex, rowVirtualizer]);
429
- const keyLabel = (_b = filter == null ? void 0 : filter.keyLabel) != null ? _b : filter == null ? void 0 : filter.key;
432
+ const keyLabel = (_a = filter == null ? void 0 : filter.keyLabel) != null ? _a : filter == null ? void 0 : filter.key;
430
433
  return /* @__PURE__ */ React.createElement("div", { className: styles.comboboxWrapper }, filter ? /* @__PURE__ */ React.createElement("div", { className: styles.pillWrapper }, (filter == null ? void 0 : filter.key) ? /* @__PURE__ */ React.createElement("div", { className: cx(styles.basePill, styles.keyPill) }, keyLabel) : null, (filter == null ? void 0 : filter.key) && (filter == null ? void 0 : filter.operator) && filterInputType !== "operator" ? /* @__PURE__ */ React.createElement(
431
434
  "div",
432
435
  {
@@ -481,7 +484,7 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
481
484
  onChange,
482
485
  value: inputValue,
483
486
  // dynamic placeholder to display operator and/or value in filter edit mode
484
- placeholder: generatePlaceholder(filter, filterInputType, isMultiValueEdit, isAlwaysWip),
487
+ placeholder: generatePlaceholder(filter, filterInputType, isMultiValueEdit, isAlwaysWip, inputPlaceholder),
485
488
  "aria-autocomplete": "list",
486
489
  onKeyDown(event) {
487
490
  if (!open) {
@@ -505,13 +508,13 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
505
508
  setOpen(true);
506
509
  }
507
510
  }
508
- ), optionsLoading ? /* @__PURE__ */ React.createElement(Spinner, { className: styles.loadingIndicator, inline: true }) : null, /* @__PURE__ */ React.createElement(FloatingPortal, null, open && /* @__PURE__ */ React.createElement(FloatingFocusManager, { context, initialFocus: -1, visuallyHiddenDismiss: true, modal: false }, /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
511
+ ), optionsLoading ? /* @__PURE__ */ React.createElement(Spinner, { className: styles.loadingIndicator, inline: true }) : null, /* @__PURE__ */ React.createElement(FloatingPortal, null, open && /* @__PURE__ */ React.createElement(FloatingFocusManager, { context, initialFocus: -1, visuallyHiddenDismiss: true, modal: true }, /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
509
512
  "div",
510
513
  {
511
514
  style: {
512
515
  ...floatingStyles,
513
516
  width: `${optionsError ? ERROR_STATE_DROPDOWN_WIDTH : maxOptionWidth}px`,
514
- transform: isMultiValueEdit ? `translate(${((_c = multiValuePillWrapperRef.current) == null ? void 0 : _c.getBoundingClientRect().left) || 0}px, ${(((_d = refs.domReference.current) == null ? void 0 : _d.getBoundingClientRect().bottom) || 0) + 10}px )` : floatingStyles.transform
517
+ transform: isMultiValueEdit ? `translate(${((_b = multiValuePillWrapperRef.current) == null ? void 0 : _b.getBoundingClientRect().left) || 0}px, ${(((_c = refs.domReference.current) == null ? void 0 : _c.getBoundingClientRect().bottom) || 0) + 10}px )` : floatingStyles.transform
515
518
  },
516
519
  ref: refs.setFloating,
517
520
  className: styles.dropdownWrapper,
@@ -560,7 +563,7 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
560
563
  listRef.current[index] = node;
561
564
  },
562
565
  onClick(event) {
563
- var _a3;
566
+ var _a3, _b2;
564
567
  if (filterInputType !== "value") {
565
568
  event.stopPropagation();
566
569
  }
@@ -579,10 +582,9 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
579
582
  onAddCustomValue
580
583
  });
581
584
  if (filterInputType === "value" && payload.value !== (filter == null ? void 0 : filter.value)) {
582
- const queryController = getQueryController(model);
583
- queryController == null ? void 0 : queryController.startProfile(FILTER_CHANGED_INTERACTION);
585
+ (_b2 = controller.startProfile) == null ? void 0 : _b2.call(controller, FILTER_CHANGED_INTERACTION);
584
586
  }
585
- model._updateFilter(filter, payload);
587
+ controller.updateFilter(filter, payload);
586
588
  populateInputValueOnInputTypeSwitch({
587
589
  populateInputOnEdit,
588
590
  item,
@@ -626,7 +628,7 @@ const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, isAlwa
626
628
  MultiValueApplyButton,
627
629
  {
628
630
  onApply: () => {
629
- handleMultiValueFilterCommit(model, filter, filterMultiValues);
631
+ handleMultiValueFilterCommit(controller, filter, filterMultiValues);
630
632
  },
631
633
  floatingElement: refs.floating.current,
632
634
  maxOptionWidth,
@@ -1 +1 @@
1
- {"version":3,"file":"AdHocFiltersCombobox.js","sources":["../../../../../src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.tsx"],"sourcesContent":["import { t } from '@grafana/i18n';\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FloatingFocusManager, FloatingPortal, UseFloatingOptions } from '@floating-ui/react';\nimport { Spinner, Text, useStyles2 } from '@grafana/ui';\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { css, cx } from '@emotion/css';\nimport {\n AdHocFilterWithLabels,\n AdHocFiltersVariable,\n isFilterComplete,\n isMultiValueOperator,\n OPERATORS,\n} from '../AdHocFiltersVariable';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport {\n DropdownItem,\n LoadingOptionsPlaceholder,\n MultiValueApplyButton,\n NoOptionsPlaceholder,\n OptionsErrorPlaceholder,\n} from './DropdownItem';\nimport {\n ERROR_STATE_DROPDOWN_WIDTH,\n flattenOptionGroups,\n generateFilterUpdatePayload,\n generatePlaceholder,\n populateInputValueOnInputTypeSwitch,\n setupDropdownAccessibility,\n switchInputType,\n switchToNextInputType,\n VIRTUAL_LIST_ITEM_HEIGHT,\n VIRTUAL_LIST_ITEM_HEIGHT_WITH_DESCRIPTION,\n VIRTUAL_LIST_OVERSCAN,\n} from './utils';\nimport { handleOptionGroups } from '../../utils';\nimport { useFloatingInteractions, MAX_MENU_HEIGHT } from './useFloatingInteractions';\nimport { MultiValuePill } from './MultiValuePill';\nimport { getAdhocOptionSearcher } from '../getAdhocOptionSearcher';\nimport { getQueryController } from '../../../core/sceneGraph/getQueryController';\nimport {\n FILTER_REMOVED_INTERACTION,\n FILTER_CHANGED_INTERACTION,\n ADHOC_KEYS_DROPDOWN_INTERACTION,\n ADHOC_VALUES_DROPDOWN_INTERACTION,\n} from '../../../behaviors/SceneRenderProfiler';\nimport { getInteractionTracker } from '../../../core/sceneGraph/getInteractionTracker';\n\ninterface AdHocComboboxProps {\n filter?: AdHocFilterWithLabels;\n isAlwaysWip?: boolean;\n model: AdHocFiltersVariable;\n handleChangeViewMode?: (event?: React.MouseEvent, shouldFocusOnPillWrapperOverride?: boolean) => void;\n focusOnWipInputRef?: () => void;\n populateInputOnEdit?: boolean;\n}\n\nexport type AdHocInputType = 'key' | 'operator' | 'value';\n\nexport const AdHocCombobox = forwardRef(function AdHocCombobox(\n { filter, model, isAlwaysWip, handleChangeViewMode, focusOnWipInputRef, populateInputOnEdit }: AdHocComboboxProps,\n parentRef\n) {\n const [open, setOpen] = useState(false);\n const [options, setOptions] = useState<Array<SelectableValue<string>>>([]);\n const [optionsLoading, setOptionsLoading] = useState<boolean>(false);\n const [optionsError, setOptionsError] = useState<boolean>(false);\n const [inputValue, setInputValue] = useState('');\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n const [filterInputType, setInputType] = useState<AdHocInputType>(!isAlwaysWip ? 'value' : 'key');\n const [preventFiltering, setPreventFiltering] = useState<boolean>(!isAlwaysWip && filterInputType === 'value');\n const styles = useStyles2(getStyles);\n // control multi values with local state in order to commit all values at once and avoid _wip reset mid creation\n const [filterMultiValues, setFilterMultiValues] = useState<Array<SelectableValue<string>>>([]);\n const [_, setForceRefresh] = useState({});\n const allowCustomValue = model.state.allowCustomValue ?? true;\n\n const multiValuePillWrapperRef = useRef<HTMLDivElement>(null);\n\n const hasMultiValueOperator = isMultiValueOperator(filter?.operator || '');\n const isMultiValueEdit = hasMultiValueOperator && filterInputType === 'value';\n\n // used to identify operator element and prevent dismiss because it registers as outside click\n const operatorIdentifier = useId();\n\n const listRef = useRef<Array<HTMLElement | null>>([]);\n const disabledIndicesRef = useRef<number[]>([]);\n const filterInputTypeRef = useRef<AdHocInputType>(!isAlwaysWip ? 'value' : 'key');\n\n const optionsSearcher = useMemo(() => getAdhocOptionSearcher(options), [options]);\n\n const isLastFilter = useMemo(() => {\n if (isAlwaysWip) {\n return false;\n }\n\n if (model.state.filters.at(-1) === filter) {\n return true;\n }\n return false;\n }, [filter, isAlwaysWip, model.state.filters]);\n\n // reset wip filter. Used when navigating away with incomplete wip filer or when selecting wip filter value\n const handleResetWip = useCallback(() => {\n if (isAlwaysWip) {\n model._addWip();\n setInputType('key');\n setInputValue('');\n }\n }, [model, isAlwaysWip]);\n\n const handleMultiValueFilterCommit = useCallback(\n (\n model: AdHocFiltersVariable,\n filter: AdHocFilterWithLabels,\n filterMultiValues: Array<SelectableValue<string>>,\n preventFocus?: boolean\n ) => {\n if (!filterMultiValues.length && filter.origin) {\n model.updateToMatchAll(filter);\n }\n\n if (filterMultiValues.length) {\n const valueLabels: string[] = [];\n const values: string[] = [];\n filterMultiValues.forEach((item) => {\n valueLabels.push(item.label ?? item.value!);\n values.push(item.value!);\n });\n\n // Only update if values have changed\n let shouldUpdate = true;\n if (Array.isArray(filter.values) && filter.values.length === values.length) {\n shouldUpdate = !filter.values.every((v, i) => v === values[i]);\n }\n\n if (shouldUpdate) {\n const queryController = getQueryController(model);\n queryController?.startProfile(FILTER_CHANGED_INTERACTION);\n }\n\n model._updateFilter(filter!, { valueLabels, values, value: values[0] });\n setFilterMultiValues([]);\n }\n\n if (!preventFocus) {\n setTimeout(() => refs.domReference.current?.focus());\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n const handleLocalMultiValueChange = useCallback((selectedItem: SelectableValue<string>) => {\n setFilterMultiValues((items) => {\n if (items.some((item) => item.value === selectedItem.value)) {\n return items.filter((item) => item.value !== selectedItem.value);\n }\n return [...items, selectedItem];\n });\n }, []);\n\n const onOpenChange = useCallback<NonNullable<UseFloatingOptions['onOpenChange']>>(\n (nextOpen, _, reason) => {\n setOpen(nextOpen);\n // change from filter edit mode to filter view mode when clicked\n // outside input or dropdown\n\n if (reason && ['outside-press', 'escape-key'].includes(reason)) {\n if (isMultiValueEdit) {\n // commit multi value filter values on escape and click-away\n handleMultiValueFilterCommit(model, filter!, filterMultiValues);\n } else {\n if (filter && filter.origin && inputValue === '') {\n model.updateToMatchAll(filter);\n }\n }\n\n handleResetWip();\n handleChangeViewMode?.();\n }\n },\n [\n filter,\n filterMultiValues,\n handleChangeViewMode,\n handleMultiValueFilterCommit,\n handleResetWip,\n inputValue,\n isMultiValueEdit,\n model,\n ]\n );\n\n // generate ids from multi values in order to prevent outside click based on those ids\n const outsidePressIdsToIgnore = useMemo(() => {\n return [\n operatorIdentifier,\n ...filterMultiValues.reduce<string[]>(\n (acc, item, i) => [...acc, `${item.value}-${i}`, `${item.value}-${i}-close-icon`],\n []\n ),\n ];\n }, [operatorIdentifier, filterMultiValues]);\n\n const { refs, floatingStyles, context, getReferenceProps, getFloatingProps, getItemProps } = useFloatingInteractions({\n open,\n onOpenChange,\n activeIndex,\n setActiveIndex,\n outsidePressIdsToIgnore,\n listRef,\n disabledIndicesRef,\n });\n\n // pass ability to focus on input element back to parent\n // parentRef is coming from AdHocFiltersComboboxRenderer\n useImperativeHandle(parentRef, () => () => refs.domReference.current?.focus(), [refs.domReference]);\n\n function onChange(event: React.ChangeEvent<HTMLInputElement>) {\n const value = event.target.value;\n setInputValue(value);\n setActiveIndex(0);\n if (preventFiltering) {\n setPreventFiltering(false);\n }\n }\n\n const handleRemoveMultiValue = useCallback(\n (item: SelectableValue<string>) => {\n setFilterMultiValues((selected) => selected.filter((option) => option.value !== item.value));\n setTimeout(() => refs.domReference.current?.focus());\n },\n [refs.domReference]\n );\n\n // operation order on fetched options:\n // fuzzy search -> extract into groups -> flatten group labels and options\n const filteredDropDownItems = flattenOptionGroups(\n handleOptionGroups(optionsSearcher(preventFiltering ? '' : inputValue))\n );\n\n // adding custom option this way so that virtualiser is aware of it and can scroll to\n if (allowCustomValue && filterInputType !== 'operator' && inputValue) {\n const operatorDefinition = OPERATORS.find((op) => filter?.operator === op.value);\n const customOptionValue: SelectableValue<string> = {\n value: inputValue.trim(),\n label: inputValue.trim(),\n isCustom: true,\n };\n\n // If operator is regex, add custom value option first\n if (operatorDefinition?.isRegex) {\n filteredDropDownItems.unshift(customOptionValue);\n } else {\n filteredDropDownItems.push(customOptionValue);\n }\n }\n\n // Get the optional onAddCustomValue method from the AdHocFiltersVariable if defined\n const onAddCustomValue = model.state.onAddCustomValue;\n\n // calculate width and populate listRef and disabledIndicesRef for arrow key navigation\n const maxOptionWidth = setupDropdownAccessibility(filteredDropDownItems, listRef, disabledIndicesRef);\n\n const handleFetchOptions = useCallback(\n async (inputType: AdHocInputType) => {\n const profiler = getInteractionTracker(model);\n\n // Start profiling the user interaction\n const interactionName = inputType === 'key' ? ADHOC_KEYS_DROPDOWN_INTERACTION : ADHOC_VALUES_DROPDOWN_INTERACTION;\n\n if (inputType !== 'operator') {\n profiler?.startInteraction(interactionName);\n }\n\n setOptionsError(false);\n setOptionsLoading(true);\n setOptions([]);\n\n let options: Array<SelectableValue<string>> = [];\n\n try {\n if (inputType === 'key') {\n options = await model._getKeys(null);\n } else if (inputType === 'operator') {\n options = model._getOperators();\n } else if (inputType === 'value') {\n options = await model._getValuesFor(filter!);\n }\n\n // if input type changed before fetch completed then abort updating options\n // this can cause race condition and return incorrect options when input type changed\n if (filterInputTypeRef.current !== inputType) {\n profiler?.stopInteraction();\n return;\n }\n setOptions(options);\n if (options[0]?.group) {\n setActiveIndex(1);\n } else {\n setActiveIndex(0);\n }\n } catch (e) {\n setOptionsError(true);\n }\n\n setOptionsLoading(false);\n\n profiler?.stopInteraction();\n },\n [filter, model]\n );\n\n const rowVirtualizer = useVirtualizer({\n count: filteredDropDownItems.length,\n getScrollElement: () => refs.floating.current,\n estimateSize: (index) =>\n filteredDropDownItems[index].description ? VIRTUAL_LIST_ITEM_HEIGHT_WITH_DESCRIPTION : VIRTUAL_LIST_ITEM_HEIGHT,\n overscan: VIRTUAL_LIST_OVERSCAN,\n });\n\n //\n // Keyboard interactions\n //\n\n const handleBackspaceInput = useCallback(\n (event: React.KeyboardEvent, multiValueEdit: boolean) => {\n if (event.key === 'Backspace' && !inputValue) {\n if (filterInputType === 'value') {\n if (multiValueEdit) {\n if (filterMultiValues.length) {\n setFilterMultiValues((items) => {\n const updated = [...items];\n updated.splice(-1, 1);\n\n return updated;\n });\n return;\n }\n }\n if (filter?.origin) {\n return;\n }\n\n setInputType('operator');\n return;\n }\n\n // focus back on alway wip input when you delete filter with backspace\n focusOnWipInputRef?.();\n\n if (isFilterComplete(filter!)) {\n const queryController = getQueryController(model);\n queryController?.startProfile(FILTER_REMOVED_INTERACTION);\n }\n\n model._handleComboboxBackspace(filter!);\n\n if (isAlwaysWip) {\n handleResetWip();\n }\n }\n },\n [\n inputValue,\n filterInputType,\n model,\n filter,\n isAlwaysWip,\n filterMultiValues.length,\n handleResetWip,\n focusOnWipInputRef,\n ]\n );\n\n const handleTabInput = useCallback(\n (event: React.KeyboardEvent, multiValueEdit?: boolean) => {\n // change filter to view mode when navigating away with Tab key\n // this is needed because useDismiss only reacts to mousedown\n if (event.key === 'Tab' && !event.shiftKey) {\n if (multiValueEdit) {\n // commit multi value filter values on tab away\n event.preventDefault();\n handleMultiValueFilterCommit(model, filter!, filterMultiValues);\n refs.domReference.current?.focus();\n }\n\n handleChangeViewMode?.();\n handleResetWip();\n }\n },\n [\n filter,\n filterMultiValues,\n handleChangeViewMode,\n handleMultiValueFilterCommit,\n handleResetWip,\n model,\n refs.domReference,\n ]\n );\n\n const handleShiftTabInput = useCallback(\n (event: React.KeyboardEvent, multiValueEdit?: boolean) => {\n if (event.key === 'Tab' && event.shiftKey) {\n if (multiValueEdit) {\n // commit multi value filter values on shift tab away\n event.preventDefault();\n handleMultiValueFilterCommit(model, filter!, filterMultiValues, true);\n }\n handleChangeViewMode?.();\n handleResetWip();\n }\n },\n [filter, filterMultiValues, handleChangeViewMode, handleMultiValueFilterCommit, handleResetWip, model]\n );\n\n const handleEnterInput = useCallback(\n (event: React.KeyboardEvent, multiValueEdit?: boolean) => {\n if (event.key === 'Enter' && activeIndex != null) {\n // safeguard for non existing items\n // note: custom item is added to filteredDropDownItems if allowed\n if (!filteredDropDownItems[activeIndex]) {\n return;\n }\n const selectedItem = filteredDropDownItems[activeIndex];\n\n if (multiValueEdit) {\n handleLocalMultiValueChange(selectedItem);\n setInputValue('');\n } else {\n const payload = generateFilterUpdatePayload({\n filterInputType,\n item: selectedItem,\n filter: filter!,\n setFilterMultiValues,\n onAddCustomValue,\n });\n\n // Only start profile if value has changed\n if (filterInputType === 'value' && payload.value !== filter?.value) {\n const queryController = getQueryController(model);\n queryController?.startProfile(FILTER_CHANGED_INTERACTION);\n }\n\n model._updateFilter(filter!, payload);\n\n populateInputValueOnInputTypeSwitch({\n populateInputOnEdit,\n item: selectedItem,\n filterInputType,\n setInputValue,\n filter,\n });\n\n switchToNextInputType(\n filterInputType,\n setInputType,\n handleChangeViewMode,\n refs.domReference.current,\n // preventing focus on filter pill only when last filter for better backspace experience\n isLastFilter ? false : undefined\n );\n setActiveIndex(null);\n if (isLastFilter) {\n focusOnWipInputRef?.();\n }\n }\n }\n },\n [\n activeIndex,\n filteredDropDownItems,\n handleLocalMultiValueChange,\n model,\n filter,\n filterInputType,\n populateInputOnEdit,\n handleChangeViewMode,\n refs.domReference,\n isLastFilter,\n focusOnWipInputRef,\n onAddCustomValue,\n ]\n );\n\n const handleEditMultiValuePill = useCallback(\n (value: SelectableValue<string>) => {\n const valueLabel = value.label || value.value!;\n setFilterMultiValues((prev) => prev.filter((item) => item.value !== value.value));\n setPreventFiltering(true);\n setInputValue(valueLabel);\n refs.domReference.current?.focus();\n setTimeout(() => {\n refs.domReference.current?.select();\n });\n },\n [refs.domReference]\n );\n\n //\n // Effects\n //\n\n useEffect(() => {\n // fetch options when dropdown is opened.\n if (open) {\n handleFetchOptions(filterInputType);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, filterInputType]);\n\n // when not in wip mode this is the point of switching from view to edit mode\n // and in this case we default to 'value' input type and focus input\n useEffect(() => {\n if (!isAlwaysWip) {\n if (hasMultiValueOperator && filter?.values?.length) {\n const multiValueOptions = (filter.values as string[]).reduce<Array<SelectableValue<string>>>(\n (acc, value, i) => [\n ...acc,\n {\n label: filter.valueLabels?.[i] || value,\n value: value,\n },\n ],\n []\n );\n // populate filter multi values to local state on pill edit enter\n setFilterMultiValues(multiValueOptions);\n }\n\n // populate input when selecting pill for edit\n // this avoids populating input during delete with backspace\n if (!hasMultiValueOperator && populateInputOnEdit) {\n setInputValue(filter?.valueLabels?.[0] ?? (filter?.value || ''));\n setTimeout(() => {\n refs.domReference.current?.select();\n });\n }\n\n refs.domReference.current?.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // this is required only with multi value select in order to update position\n // of the multi value apply button\n useEffect(() => {\n if (isMultiValueEdit && filterMultiValues) {\n setTimeout(() => setForceRefresh({}));\n }\n }, [filterMultiValues, isMultiValueEdit]);\n\n // synch filterInputTypeRef with filterInputType state\n useLayoutEffect(() => {\n if (filterInputTypeRef.current) {\n filterInputTypeRef.current = filterInputType;\n }\n }, [filterInputType]);\n\n useLayoutEffect(() => {\n // this is needed to scroll virtual list to the position of currently selected\n // dropdown item when navigating with arrow up/down keys to end/start of list\n if (\n activeIndex !== null &&\n rowVirtualizer.range &&\n (activeIndex > rowVirtualizer.range?.endIndex || activeIndex < rowVirtualizer.range?.startIndex)\n ) {\n rowVirtualizer.scrollToIndex(activeIndex);\n }\n }, [activeIndex, rowVirtualizer]);\n\n const keyLabel = filter?.keyLabel ?? filter?.key;\n\n return (\n <div className={styles.comboboxWrapper}>\n {filter ? (\n <div className={styles.pillWrapper}>\n {/* Filter key pill render */}\n {filter?.key ? <div className={cx(styles.basePill, styles.keyPill)}>{keyLabel}</div> : null}\n {/* Filter operator pill render */}\n {filter?.key && filter?.operator && filterInputType !== 'operator' ? (\n <div\n id={operatorIdentifier}\n className={cx(\n styles.basePill,\n !filter.origin && styles.operatorPill,\n filter.origin && styles.keyPill,\n operatorIdentifier\n )}\n aria-label={t(\n 'grafana-scenes.variables.ad-hoc-combobox.aria-label-edit-filter-operator',\n 'Edit filter operator'\n )}\n tabIndex={filter.origin ? -1 : 0}\n onClick={(event) => {\n if (filter.origin) {\n handleChangeViewMode?.();\n return;\n }\n\n event.stopPropagation();\n setInputValue('');\n switchInputType('operator', setInputType, undefined, refs.domReference.current);\n }}\n onKeyDown={(event) => {\n if (filter.origin) {\n return;\n }\n\n handleShiftTabInput(event, hasMultiValueOperator);\n if (event.key === 'Enter') {\n setInputValue('');\n switchInputType('operator', setInputType, undefined, refs.domReference.current);\n }\n }}\n {...(!filter.origin && { role: 'button' })}\n >\n {filter.operator}\n </div>\n ) : null}\n\n <div ref={multiValuePillWrapperRef}></div>\n {isMultiValueEdit\n ? filterMultiValues.map((item, i) => (\n <MultiValuePill\n key={`${item.value}-${i}`}\n item={item}\n index={i}\n handleRemoveMultiValue={handleRemoveMultiValue}\n handleEditMultiValuePill={handleEditMultiValuePill}\n />\n ))\n : null}\n </div>\n ) : null}\n\n <input\n {...getReferenceProps({\n ref: refs.setReference,\n onChange,\n value: inputValue,\n // dynamic placeholder to display operator and/or value in filter edit mode\n placeholder: generatePlaceholder(filter!, filterInputType, isMultiValueEdit, isAlwaysWip),\n 'aria-autocomplete': 'list',\n onKeyDown(event) {\n if (!open) {\n setOpen(true);\n return;\n }\n\n if (filterInputType === 'operator') {\n handleShiftTabInput(event);\n }\n handleBackspaceInput(event, isMultiValueEdit);\n handleTabInput(event, isMultiValueEdit);\n handleEnterInput(event, isMultiValueEdit);\n },\n })}\n className={cx(styles.inputStyle, { [styles.loadingInputPadding]: !optionsLoading })}\n onClick={(event) => {\n event.stopPropagation();\n setOpen(true);\n }}\n onFocus={() => {\n setOpen(true);\n }}\n />\n {optionsLoading ? <Spinner className={styles.loadingIndicator} inline={true} /> : null}\n <FloatingPortal>\n {open && (\n <FloatingFocusManager context={context} initialFocus={-1} visuallyHiddenDismiss modal={false}>\n <>\n <div\n style={{\n ...floatingStyles,\n width: `${optionsError ? ERROR_STATE_DROPDOWN_WIDTH : maxOptionWidth}px`,\n transform: isMultiValueEdit\n ? `translate(${multiValuePillWrapperRef.current?.getBoundingClientRect().left || 0}px, ${\n (refs.domReference.current?.getBoundingClientRect().bottom || 0) + 10\n }px )`\n : floatingStyles.transform,\n }}\n ref={refs.setFloating}\n className={styles.dropdownWrapper}\n tabIndex={-1}\n >\n <div\n style={{\n height: `${rowVirtualizer.getTotalSize() || VIRTUAL_LIST_ITEM_HEIGHT}px`, // fallback to 38px for loading/error/no options placeholders\n }}\n {...getFloatingProps()}\n tabIndex={-1}\n >\n {optionsLoading ? (\n <LoadingOptionsPlaceholder />\n ) : optionsError ? (\n <OptionsErrorPlaceholder handleFetchOptions={() => handleFetchOptions(filterInputType)} />\n ) : !filteredDropDownItems.length &&\n (!allowCustomValue || filterInputType === 'operator' || !inputValue) ? (\n <NoOptionsPlaceholder />\n ) : (\n rowVirtualizer.getVirtualItems().map((virtualItem) => {\n const item = filteredDropDownItems[virtualItem.index];\n const index = virtualItem.index;\n\n // render group label\n if (item.options) {\n return (\n <div\n key={`${item.label}+${index}`}\n className={cx(styles.optionGroupLabel, styles.groupTopBorder)}\n style={{\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n >\n <Text weight=\"bold\" variant=\"bodySmall\" color=\"secondary\">\n {item.label!}\n </Text>\n </div>\n );\n }\n\n const nextItem: SelectableValue<string> | undefined =\n filteredDropDownItems[virtualItem.index + 1];\n const shouldAddBottomBorder = nextItem && !nextItem.group && !nextItem.options && item.group;\n\n const itemLabel = item.label ?? item.value;\n\n return (\n // key is included in getItemProps()\n // eslint-disable-next-line react/jsx-key\n <DropdownItem\n {...getItemProps({\n key: `${item.value!}-${index}`,\n ref(node) {\n listRef.current[index] = node;\n },\n onClick(event) {\n if (filterInputType !== 'value') {\n event.stopPropagation();\n }\n\n if (isMultiValueEdit) {\n event.preventDefault();\n event.stopPropagation();\n handleLocalMultiValueChange(item);\n setInputValue('');\n refs.domReference.current?.focus();\n } else {\n const payload = generateFilterUpdatePayload({\n filterInputType,\n item,\n filter: filter!,\n setFilterMultiValues,\n onAddCustomValue,\n });\n\n if (filterInputType === 'value' && payload.value !== filter?.value) {\n const queryController = getQueryController(model);\n queryController?.startProfile(FILTER_CHANGED_INTERACTION);\n }\n model._updateFilter(filter!, payload);\n\n populateInputValueOnInputTypeSwitch({\n populateInputOnEdit,\n item,\n filterInputType,\n setInputValue,\n filter,\n });\n\n switchToNextInputType(\n filterInputType,\n setInputType,\n handleChangeViewMode,\n refs.domReference.current,\n // explicitly preventing focus on filter pill due to a11y error\n false\n );\n }\n },\n })}\n active={activeIndex === index}\n addGroupBottomBorder={shouldAddBottomBorder}\n // virtual item positioning and accessibility\n style={{\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n aria-setsize={filteredDropDownItems.length}\n aria-posinset={virtualItem.index + 1}\n isMultiValueEdit={isMultiValueEdit}\n checked={filterMultiValues.some((val) => val.value === item.value)}\n >\n <span>\n {item.isCustom\n ? t(\n 'grafana-scenes.components.adhoc-filters-combobox.use-custom-value',\n 'Use custom value: {{itemLabel}}',\n { itemLabel }\n )\n : itemLabel}\n </span>\n {item.description ? <div className={styles.descriptionText}>{item.description}</div> : null}\n </DropdownItem>\n );\n })\n )}\n </div>\n </div>\n {isMultiValueEdit && !optionsLoading && !optionsError && filteredDropDownItems.length ? (\n <MultiValueApplyButton\n onApply={() => {\n handleMultiValueFilterCommit(model, filter!, filterMultiValues);\n }}\n floatingElement={refs.floating.current}\n maxOptionWidth={maxOptionWidth}\n menuHeight={Math.min(rowVirtualizer.getTotalSize(), MAX_MENU_HEIGHT)}\n />\n ) : null}\n </>\n </FloatingFocusManager>\n )}\n </FloatingPortal>\n </div>\n );\n});\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n comboboxWrapper: css({\n display: 'flex',\n flexWrap: 'wrap',\n }),\n pillWrapper: css({\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n }),\n basePill: css({\n display: 'flex',\n alignItems: 'center',\n background: theme.colors.action.disabledBackground,\n border: `1px solid ${theme.colors.border.weak}`,\n padding: theme.spacing(0.125, 1, 0.125, 1),\n color: theme.colors.text.primary,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n minHeight: theme.spacing(2.75),\n ...theme.typography.bodySmall,\n cursor: 'pointer',\n }),\n keyPill: css({\n fontWeight: theme.typography.fontWeightBold,\n cursor: 'default',\n }),\n operatorPill: css({\n '&:hover': {\n background: theme.colors.action.hover,\n },\n }),\n dropdownWrapper: css({\n backgroundColor: theme.colors.background.primary,\n color: theme.colors.text.primary,\n boxShadow: theme.shadows.z2,\n overflowY: 'auto',\n zIndex: theme.zIndex.portal,\n }),\n inputStyle: css({\n paddingBlock: 0,\n '&:focus': {\n outline: 'none',\n },\n }),\n loadingIndicator: css({\n color: theme.colors.text.secondary,\n marginLeft: theme.spacing(0.5),\n }),\n loadingInputPadding: css({\n paddingRight: theme.spacing(2.5),\n }),\n optionGroupLabel: css({\n padding: theme.spacing(1),\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n }),\n groupTopBorder: css({\n '&:not(:first-child)': {\n borderTop: `1px solid ${theme.colors.border.weak}`,\n },\n }),\n descriptionText: css({\n ...theme.typography.bodySmall,\n color: theme.colors.text.secondary,\n paddingTop: theme.spacing(0.5),\n }),\n});\n"],"names":["AdHocCombobox","model","filter","filterMultiValues","_a","_","options","_b","_c","_d"],"mappings":"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"}
1
+ {"version":3,"file":"AdHocFiltersCombobox.js","sources":["../../../../../src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.tsx"],"sourcesContent":["import { t } from '@grafana/i18n';\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FloatingFocusManager, FloatingPortal, UseFloatingOptions } from '@floating-ui/react';\nimport { Spinner, Text, useStyles2 } from '@grafana/ui';\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { css, cx } from '@emotion/css';\nimport { AdHocFilterWithLabels, isFilterComplete, isMultiValueOperator, OPERATORS } from '../AdHocFiltersVariable';\nimport { AdHocFiltersController } from '../controller/AdHocFiltersController';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport {\n DropdownItem,\n LoadingOptionsPlaceholder,\n MultiValueApplyButton,\n NoOptionsPlaceholder,\n OptionsErrorPlaceholder,\n} from './DropdownItem';\nimport {\n ERROR_STATE_DROPDOWN_WIDTH,\n flattenOptionGroups,\n generateFilterUpdatePayload,\n generatePlaceholder,\n populateInputValueOnInputTypeSwitch,\n setupDropdownAccessibility,\n switchInputType,\n switchToNextInputType,\n VIRTUAL_LIST_ITEM_HEIGHT,\n VIRTUAL_LIST_ITEM_HEIGHT_WITH_DESCRIPTION,\n VIRTUAL_LIST_OVERSCAN,\n} from './utils';\nimport { handleOptionGroups } from '../../utils';\nimport { useFloatingInteractions, MAX_MENU_HEIGHT } from './useFloatingInteractions';\nimport { MultiValuePill } from './MultiValuePill';\nimport { getAdhocOptionSearcher } from '../getAdhocOptionSearcher';\nimport {\n FILTER_REMOVED_INTERACTION,\n FILTER_CHANGED_INTERACTION,\n ADHOC_KEYS_DROPDOWN_INTERACTION,\n ADHOC_VALUES_DROPDOWN_INTERACTION,\n} from '../../../behaviors/SceneRenderProfiler';\n\ninterface AdHocComboboxProps {\n filter?: AdHocFilterWithLabels;\n isAlwaysWip?: boolean;\n controller: AdHocFiltersController;\n handleChangeViewMode?: (event?: React.MouseEvent, shouldFocusOnPillWrapperOverride?: boolean) => void;\n focusOnWipInputRef?: () => void;\n populateInputOnEdit?: boolean;\n}\n\nexport type AdHocInputType = 'key' | 'operator' | 'value';\n\nexport const AdHocCombobox = forwardRef(function AdHocCombobox(\n {\n filter,\n controller,\n isAlwaysWip,\n handleChangeViewMode,\n focusOnWipInputRef,\n populateInputOnEdit,\n }: AdHocComboboxProps,\n parentRef\n) {\n const [open, setOpen] = useState(false);\n const [options, setOptions] = useState<Array<SelectableValue<string>>>([]);\n const [optionsLoading, setOptionsLoading] = useState<boolean>(false);\n const [optionsError, setOptionsError] = useState<boolean>(false);\n const [inputValue, setInputValue] = useState('');\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n const [filterInputType, setInputType] = useState<AdHocInputType>(!isAlwaysWip ? 'value' : 'key');\n const [preventFiltering, setPreventFiltering] = useState<boolean>(!isAlwaysWip && filterInputType === 'value');\n const styles = useStyles2(getStyles);\n // control multi values with local state in order to commit all values at once and avoid wip reset mid creation\n const [filterMultiValues, setFilterMultiValues] = useState<Array<SelectableValue<string>>>([]);\n const [_, setForceRefresh] = useState({});\n const { allowCustomValue = true, onAddCustomValue, filters, inputPlaceholder } = controller.useState();\n\n const multiValuePillWrapperRef = useRef<HTMLDivElement>(null);\n\n const hasMultiValueOperator = isMultiValueOperator(filter?.operator || '');\n const isMultiValueEdit = hasMultiValueOperator && filterInputType === 'value';\n\n // used to identify operator element and prevent dismiss because it registers as outside click\n const operatorIdentifier = useId();\n\n const listRef = useRef<Array<HTMLElement | null>>([]);\n const disabledIndicesRef = useRef<number[]>([]);\n const filterInputTypeRef = useRef<AdHocInputType>(!isAlwaysWip ? 'value' : 'key');\n\n const optionsSearcher = useMemo(() => getAdhocOptionSearcher(options), [options]);\n\n const isLastFilter = useMemo(() => {\n if (isAlwaysWip) {\n return false;\n }\n\n if (filters.at(-1) === filter) {\n return true;\n }\n return false;\n }, [filter, isAlwaysWip, filters]);\n\n // reset wip filter. Used when navigating away with incomplete wip filer or when selecting wip filter value\n const handleResetWip = useCallback(() => {\n if (isAlwaysWip) {\n controller.addWip();\n setInputType('key');\n setInputValue('');\n }\n }, [controller, isAlwaysWip]);\n\n const handleMultiValueFilterCommit = useCallback(\n (\n controller: AdHocFiltersController,\n filter: AdHocFilterWithLabels,\n filterMultiValues: Array<SelectableValue<string>>,\n preventFocus?: boolean\n ) => {\n if (!filterMultiValues.length && filter.origin) {\n controller.updateToMatchAll(filter);\n }\n\n if (filterMultiValues.length) {\n const valueLabels: string[] = [];\n const values: string[] = [];\n filterMultiValues.forEach((item) => {\n valueLabels.push(item.label ?? item.value!);\n values.push(item.value!);\n });\n\n // Only update if values have changed\n let shouldUpdate = true;\n if (Array.isArray(filter.values) && filter.values.length === values.length) {\n shouldUpdate = !filter.values.every((v, i) => v === values[i]);\n }\n\n if (shouldUpdate) {\n controller.startProfile?.(FILTER_CHANGED_INTERACTION);\n }\n\n controller.updateFilter(filter!, { valueLabels, values, value: values[0] });\n setFilterMultiValues([]);\n }\n\n if (!preventFocus) {\n setTimeout(() => refs.domReference.current?.focus());\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n const handleLocalMultiValueChange = useCallback((selectedItem: SelectableValue<string>) => {\n setFilterMultiValues((items) => {\n if (items.some((item) => item.value === selectedItem.value)) {\n return items.filter((item) => item.value !== selectedItem.value);\n }\n return [...items, selectedItem];\n });\n }, []);\n\n const onOpenChange = useCallback<NonNullable<UseFloatingOptions['onOpenChange']>>(\n (nextOpen, _, reason) => {\n setOpen(nextOpen);\n // change from filter edit mode to filter view mode when clicked\n // outside input or dropdown\n\n if (reason && ['outside-press', 'escape-key'].includes(reason)) {\n if (isMultiValueEdit) {\n // commit multi value filter values on escape and click-away\n handleMultiValueFilterCommit(controller, filter!, filterMultiValues);\n } else {\n if (filter && filter.origin && inputValue === '') {\n controller.updateToMatchAll(filter);\n }\n }\n\n handleResetWip();\n handleChangeViewMode?.();\n }\n },\n [\n filter,\n filterMultiValues,\n handleChangeViewMode,\n handleMultiValueFilterCommit,\n handleResetWip,\n inputValue,\n isMultiValueEdit,\n controller,\n ]\n );\n\n // generate ids from multi values in order to prevent outside click based on those ids\n const outsidePressIdsToIgnore = useMemo(() => {\n return [\n operatorIdentifier,\n ...filterMultiValues.reduce<string[]>(\n (acc, item, i) => [...acc, `${item.value}-${i}`, `${item.value}-${i}-close-icon`],\n []\n ),\n ];\n }, [operatorIdentifier, filterMultiValues]);\n\n const { refs, floatingStyles, context, getReferenceProps, getFloatingProps, getItemProps } = useFloatingInteractions({\n open,\n onOpenChange,\n activeIndex,\n setActiveIndex,\n outsidePressIdsToIgnore,\n listRef,\n disabledIndicesRef,\n });\n\n // pass ability to focus on input element back to parent\n // parentRef is coming from AdHocFiltersComboboxRenderer\n useImperativeHandle(parentRef, () => () => refs.domReference.current?.focus(), [refs.domReference]);\n\n function onChange(event: React.ChangeEvent<HTMLInputElement>) {\n const value = event.target.value;\n setInputValue(value);\n setActiveIndex(0);\n if (preventFiltering) {\n setPreventFiltering(false);\n }\n }\n\n const handleRemoveMultiValue = useCallback(\n (item: SelectableValue<string>) => {\n setFilterMultiValues((selected) => selected.filter((option) => option.value !== item.value));\n setTimeout(() => refs.domReference.current?.focus());\n },\n [refs.domReference]\n );\n\n // operation order on fetched options:\n // fuzzy search -> extract into groups -> flatten group labels and options\n const filteredDropDownItems = flattenOptionGroups(\n handleOptionGroups(optionsSearcher(preventFiltering ? '' : inputValue))\n );\n\n // adding custom option this way so that virtualiser is aware of it and can scroll to\n if (allowCustomValue && filterInputType !== 'operator' && inputValue) {\n const operatorDefinition = OPERATORS.find((op) => filter?.operator === op.value);\n const customOptionValue: SelectableValue<string> = {\n value: inputValue.trim(),\n label: inputValue.trim(),\n isCustom: true,\n };\n\n // If operator is regex, add custom value option first\n if (operatorDefinition?.isRegex) {\n filteredDropDownItems.unshift(customOptionValue);\n } else {\n filteredDropDownItems.push(customOptionValue);\n }\n }\n\n // calculate width and populate listRef and disabledIndicesRef for arrow key navigation\n const maxOptionWidth = setupDropdownAccessibility(filteredDropDownItems, listRef, disabledIndicesRef);\n\n const handleFetchOptions = useCallback(\n async (inputType: AdHocInputType) => {\n // Start profiling the user interaction\n const interactionName = inputType === 'key' ? ADHOC_KEYS_DROPDOWN_INTERACTION : ADHOC_VALUES_DROPDOWN_INTERACTION;\n\n if (inputType !== 'operator') {\n controller.startInteraction?.(interactionName);\n }\n\n setOptionsError(false);\n setOptionsLoading(true);\n setOptions([]);\n\n let options: Array<SelectableValue<string>> = [];\n\n try {\n if (inputType === 'key') {\n options = await controller.getKeys(null);\n } else if (inputType === 'operator') {\n options = controller.getOperators();\n } else if (inputType === 'value') {\n options = await controller.getValuesFor(filter!);\n }\n\n // if input type changed before fetch completed then abort updating options\n // this can cause race condition and return incorrect options when input type changed\n if (filterInputTypeRef.current !== inputType) {\n controller.stopInteraction?.();\n return;\n }\n setOptions(options);\n if (options[0]?.group) {\n setActiveIndex(1);\n } else {\n setActiveIndex(0);\n }\n } catch (e) {\n setOptionsError(true);\n }\n\n setOptionsLoading(false);\n\n controller.stopInteraction?.();\n },\n [filter, controller]\n );\n\n const rowVirtualizer = useVirtualizer({\n count: filteredDropDownItems.length,\n getScrollElement: () => refs.floating.current,\n estimateSize: (index) =>\n filteredDropDownItems[index].description ? VIRTUAL_LIST_ITEM_HEIGHT_WITH_DESCRIPTION : VIRTUAL_LIST_ITEM_HEIGHT,\n overscan: VIRTUAL_LIST_OVERSCAN,\n });\n\n //\n // Keyboard interactions\n //\n\n const handleBackspaceInput = useCallback(\n (event: React.KeyboardEvent, multiValueEdit: boolean) => {\n if (event.key === 'Backspace' && !inputValue) {\n if (filterInputType === 'value') {\n if (multiValueEdit) {\n if (filterMultiValues.length) {\n setFilterMultiValues((items) => {\n const updated = [...items];\n updated.splice(-1, 1);\n\n return updated;\n });\n return;\n }\n }\n if (filter?.origin) {\n return;\n }\n\n setInputType('operator');\n return;\n }\n\n // focus back on alway wip input when you delete filter with backspace\n focusOnWipInputRef?.();\n\n if (isFilterComplete(filter!)) {\n controller.startProfile?.(FILTER_REMOVED_INTERACTION);\n }\n\n controller.handleComboboxBackspace(filter!);\n\n if (isAlwaysWip) {\n handleResetWip();\n }\n }\n },\n [\n inputValue,\n filterInputType,\n controller,\n filter,\n isAlwaysWip,\n filterMultiValues.length,\n handleResetWip,\n focusOnWipInputRef,\n ]\n );\n\n const handleTabInput = useCallback(\n (event: React.KeyboardEvent, multiValueEdit?: boolean) => {\n // change filter to view mode when navigating away with Tab key\n // this is needed because useDismiss only reacts to mousedown\n if (event.key === 'Tab' && !event.shiftKey) {\n if (multiValueEdit) {\n // commit multi value filter values on tab away\n event.preventDefault();\n handleMultiValueFilterCommit(controller, filter!, filterMultiValues);\n refs.domReference.current?.focus();\n }\n\n handleChangeViewMode?.();\n handleResetWip();\n }\n },\n [\n filter,\n filterMultiValues,\n handleChangeViewMode,\n handleMultiValueFilterCommit,\n handleResetWip,\n controller,\n refs.domReference,\n ]\n );\n\n const handleShiftTabInput = useCallback(\n (event: React.KeyboardEvent, multiValueEdit?: boolean) => {\n if (event.key === 'Tab' && event.shiftKey) {\n if (multiValueEdit) {\n // commit multi value filter values on shift tab away\n event.preventDefault();\n handleMultiValueFilterCommit(controller, filter!, filterMultiValues, true);\n }\n handleChangeViewMode?.();\n handleResetWip();\n }\n },\n [filter, filterMultiValues, handleChangeViewMode, handleMultiValueFilterCommit, handleResetWip, controller]\n );\n\n const handleEnterInput = useCallback(\n (event: React.KeyboardEvent, multiValueEdit?: boolean) => {\n if (event.key === 'Enter' && activeIndex != null) {\n // safeguard for non existing items\n // note: custom item is added to filteredDropDownItems if allowed\n if (!filteredDropDownItems[activeIndex]) {\n return;\n }\n const selectedItem = filteredDropDownItems[activeIndex];\n\n if (multiValueEdit) {\n handleLocalMultiValueChange(selectedItem);\n setInputValue('');\n } else {\n const payload = generateFilterUpdatePayload({\n filterInputType,\n item: selectedItem,\n filter: filter!,\n setFilterMultiValues,\n onAddCustomValue,\n });\n\n // Only start profile if value has changed\n if (filterInputType === 'value' && payload.value !== filter?.value) {\n controller.startProfile?.(FILTER_CHANGED_INTERACTION);\n }\n\n controller.updateFilter(filter!, payload);\n\n populateInputValueOnInputTypeSwitch({\n populateInputOnEdit,\n item: selectedItem,\n filterInputType,\n setInputValue,\n filter,\n });\n\n switchToNextInputType(\n filterInputType,\n setInputType,\n handleChangeViewMode,\n refs.domReference.current,\n // preventing focus on filter pill only when last filter for better backspace experience\n isLastFilter ? false : undefined\n );\n setActiveIndex(null);\n if (isLastFilter) {\n focusOnWipInputRef?.();\n }\n }\n }\n },\n [\n activeIndex,\n filteredDropDownItems,\n handleLocalMultiValueChange,\n controller,\n filter,\n filterInputType,\n populateInputOnEdit,\n handleChangeViewMode,\n refs.domReference,\n isLastFilter,\n focusOnWipInputRef,\n onAddCustomValue,\n ]\n );\n\n const handleEditMultiValuePill = useCallback(\n (value: SelectableValue<string>) => {\n const valueLabel = value.label || value.value!;\n setFilterMultiValues((prev) => prev.filter((item) => item.value !== value.value));\n setPreventFiltering(true);\n setInputValue(valueLabel);\n refs.domReference.current?.focus();\n setTimeout(() => {\n refs.domReference.current?.select();\n });\n },\n [refs.domReference]\n );\n\n //\n // Effects\n //\n\n useEffect(() => {\n // fetch options when dropdown is opened.\n if (open) {\n handleFetchOptions(filterInputType);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, filterInputType]);\n\n // when not in wip mode this is the point of switching from view to edit mode\n // and in this case we default to 'value' input type and focus input\n useEffect(() => {\n if (!isAlwaysWip) {\n if (hasMultiValueOperator && filter?.values?.length) {\n const multiValueOptions = (filter.values as string[]).reduce<Array<SelectableValue<string>>>(\n (acc, value, i) => [\n ...acc,\n {\n label: filter.valueLabels?.[i] || value,\n value: value,\n },\n ],\n []\n );\n // populate filter multi values to local state on pill edit enter\n setFilterMultiValues(multiValueOptions);\n }\n\n // populate input when selecting pill for edit\n // this avoids populating input during delete with backspace\n if (!hasMultiValueOperator && populateInputOnEdit) {\n setInputValue(filter?.valueLabels?.[0] ?? (filter?.value || ''));\n setTimeout(() => {\n refs.domReference.current?.select();\n });\n }\n\n refs.domReference.current?.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // this is required only with multi value select in order to update position\n // of the multi value apply button\n useEffect(() => {\n if (isMultiValueEdit && filterMultiValues) {\n setTimeout(() => setForceRefresh({}));\n }\n }, [filterMultiValues, isMultiValueEdit]);\n\n // synch filterInputTypeRef with filterInputType state\n useLayoutEffect(() => {\n if (filterInputTypeRef.current) {\n filterInputTypeRef.current = filterInputType;\n }\n }, [filterInputType]);\n\n useLayoutEffect(() => {\n // this is needed to scroll virtual list to the position of currently selected\n // dropdown item when navigating with arrow up/down keys to end/start of list\n if (\n activeIndex !== null &&\n rowVirtualizer.range &&\n (activeIndex > rowVirtualizer.range?.endIndex || activeIndex < rowVirtualizer.range?.startIndex)\n ) {\n rowVirtualizer.scrollToIndex(activeIndex);\n }\n }, [activeIndex, rowVirtualizer]);\n\n const keyLabel = filter?.keyLabel ?? filter?.key;\n\n return (\n <div className={styles.comboboxWrapper}>\n {filter ? (\n <div className={styles.pillWrapper}>\n {/* Filter key pill render */}\n {filter?.key ? <div className={cx(styles.basePill, styles.keyPill)}>{keyLabel}</div> : null}\n {/* Filter operator pill render */}\n {filter?.key && filter?.operator && filterInputType !== 'operator' ? (\n <div\n id={operatorIdentifier}\n className={cx(\n styles.basePill,\n !filter.origin && styles.operatorPill,\n filter.origin && styles.keyPill,\n operatorIdentifier\n )}\n aria-label={t(\n 'grafana-scenes.variables.ad-hoc-combobox.aria-label-edit-filter-operator',\n 'Edit filter operator'\n )}\n tabIndex={filter.origin ? -1 : 0}\n onClick={(event) => {\n if (filter.origin) {\n handleChangeViewMode?.();\n return;\n }\n\n event.stopPropagation();\n setInputValue('');\n switchInputType('operator', setInputType, undefined, refs.domReference.current);\n }}\n onKeyDown={(event) => {\n if (filter.origin) {\n return;\n }\n\n handleShiftTabInput(event, hasMultiValueOperator);\n if (event.key === 'Enter') {\n setInputValue('');\n switchInputType('operator', setInputType, undefined, refs.domReference.current);\n }\n }}\n {...(!filter.origin && { role: 'button' })}\n >\n {filter.operator}\n </div>\n ) : null}\n\n <div ref={multiValuePillWrapperRef}></div>\n {isMultiValueEdit\n ? filterMultiValues.map((item, i) => (\n <MultiValuePill\n key={`${item.value}-${i}`}\n item={item}\n index={i}\n handleRemoveMultiValue={handleRemoveMultiValue}\n handleEditMultiValuePill={handleEditMultiValuePill}\n />\n ))\n : null}\n </div>\n ) : null}\n\n <input\n {...getReferenceProps({\n ref: refs.setReference,\n onChange,\n value: inputValue,\n // dynamic placeholder to display operator and/or value in filter edit mode\n placeholder: generatePlaceholder(filter!, filterInputType, isMultiValueEdit, isAlwaysWip, inputPlaceholder),\n 'aria-autocomplete': 'list',\n onKeyDown(event) {\n if (!open) {\n setOpen(true);\n return;\n }\n\n if (filterInputType === 'operator') {\n handleShiftTabInput(event);\n }\n handleBackspaceInput(event, isMultiValueEdit);\n handleTabInput(event, isMultiValueEdit);\n handleEnterInput(event, isMultiValueEdit);\n },\n })}\n className={cx(styles.inputStyle, { [styles.loadingInputPadding]: !optionsLoading })}\n onClick={(event) => {\n event.stopPropagation();\n setOpen(true);\n }}\n onFocus={() => {\n setOpen(true);\n }}\n />\n {optionsLoading ? <Spinner className={styles.loadingIndicator} inline={true} /> : null}\n <FloatingPortal>\n {open && (\n <FloatingFocusManager context={context} initialFocus={-1} visuallyHiddenDismiss modal={true}>\n <>\n <div\n style={{\n ...floatingStyles,\n width: `${optionsError ? ERROR_STATE_DROPDOWN_WIDTH : maxOptionWidth}px`,\n transform: isMultiValueEdit\n ? `translate(${multiValuePillWrapperRef.current?.getBoundingClientRect().left || 0}px, ${\n (refs.domReference.current?.getBoundingClientRect().bottom || 0) + 10\n }px )`\n : floatingStyles.transform,\n }}\n ref={refs.setFloating}\n className={styles.dropdownWrapper}\n tabIndex={-1}\n >\n <div\n style={{\n height: `${rowVirtualizer.getTotalSize() || VIRTUAL_LIST_ITEM_HEIGHT}px`, // fallback to 38px for loading/error/no options placeholders\n }}\n {...getFloatingProps()}\n tabIndex={-1}\n >\n {optionsLoading ? (\n <LoadingOptionsPlaceholder />\n ) : optionsError ? (\n <OptionsErrorPlaceholder handleFetchOptions={() => handleFetchOptions(filterInputType)} />\n ) : !filteredDropDownItems.length &&\n (!allowCustomValue || filterInputType === 'operator' || !inputValue) ? (\n <NoOptionsPlaceholder />\n ) : (\n rowVirtualizer.getVirtualItems().map((virtualItem) => {\n const item = filteredDropDownItems[virtualItem.index];\n const index = virtualItem.index;\n\n // render group label\n if (item.options) {\n return (\n <div\n key={`${item.label}+${index}`}\n className={cx(styles.optionGroupLabel, styles.groupTopBorder)}\n style={{\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n >\n <Text weight=\"bold\" variant=\"bodySmall\" color=\"secondary\">\n {item.label!}\n </Text>\n </div>\n );\n }\n\n const nextItem: SelectableValue<string> | undefined =\n filteredDropDownItems[virtualItem.index + 1];\n const shouldAddBottomBorder = nextItem && !nextItem.group && !nextItem.options && item.group;\n\n const itemLabel = item.label ?? item.value;\n\n return (\n // key is included in getItemProps()\n // eslint-disable-next-line react/jsx-key\n <DropdownItem\n {...getItemProps({\n key: `${item.value!}-${index}`,\n ref(node) {\n listRef.current[index] = node;\n },\n onClick(event) {\n if (filterInputType !== 'value') {\n event.stopPropagation();\n }\n\n if (isMultiValueEdit) {\n event.preventDefault();\n event.stopPropagation();\n handleLocalMultiValueChange(item);\n setInputValue('');\n refs.domReference.current?.focus();\n } else {\n const payload = generateFilterUpdatePayload({\n filterInputType,\n item,\n filter: filter!,\n setFilterMultiValues,\n onAddCustomValue,\n });\n\n if (filterInputType === 'value' && payload.value !== filter?.value) {\n controller.startProfile?.(FILTER_CHANGED_INTERACTION);\n }\n controller.updateFilter(filter!, payload);\n\n populateInputValueOnInputTypeSwitch({\n populateInputOnEdit,\n item,\n filterInputType,\n setInputValue,\n filter,\n });\n\n switchToNextInputType(\n filterInputType,\n setInputType,\n handleChangeViewMode,\n refs.domReference.current,\n // explicitly preventing focus on filter pill due to a11y error\n false\n );\n }\n },\n })}\n active={activeIndex === index}\n addGroupBottomBorder={shouldAddBottomBorder}\n // virtual item positioning and accessibility\n style={{\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n aria-setsize={filteredDropDownItems.length}\n aria-posinset={virtualItem.index + 1}\n isMultiValueEdit={isMultiValueEdit}\n checked={filterMultiValues.some((val) => val.value === item.value)}\n >\n <span>\n {item.isCustom\n ? t(\n 'grafana-scenes.components.adhoc-filters-combobox.use-custom-value',\n 'Use custom value: {{itemLabel}}',\n { itemLabel }\n )\n : itemLabel}\n </span>\n {item.description ? <div className={styles.descriptionText}>{item.description}</div> : null}\n </DropdownItem>\n );\n })\n )}\n </div>\n </div>\n {isMultiValueEdit && !optionsLoading && !optionsError && filteredDropDownItems.length ? (\n <MultiValueApplyButton\n onApply={() => {\n handleMultiValueFilterCommit(controller, filter!, filterMultiValues);\n }}\n floatingElement={refs.floating.current}\n maxOptionWidth={maxOptionWidth}\n menuHeight={Math.min(rowVirtualizer.getTotalSize(), MAX_MENU_HEIGHT)}\n />\n ) : null}\n </>\n </FloatingFocusManager>\n )}\n </FloatingPortal>\n </div>\n );\n});\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n comboboxWrapper: css({\n display: 'flex',\n flexWrap: 'wrap',\n }),\n pillWrapper: css({\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n }),\n basePill: css({\n display: 'flex',\n alignItems: 'center',\n background: theme.colors.action.disabledBackground,\n border: `1px solid ${theme.colors.border.weak}`,\n padding: theme.spacing(0.125, 1, 0.125, 1),\n color: theme.colors.text.primary,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n minHeight: theme.spacing(2.75),\n ...theme.typography.bodySmall,\n cursor: 'pointer',\n }),\n keyPill: css({\n fontWeight: theme.typography.fontWeightBold,\n cursor: 'default',\n }),\n operatorPill: css({\n '&:hover': {\n background: theme.colors.action.hover,\n },\n }),\n dropdownWrapper: css({\n backgroundColor: theme.colors.background.primary,\n color: theme.colors.text.primary,\n boxShadow: theme.shadows.z2,\n overflowY: 'auto',\n zIndex: theme.zIndex.portal,\n }),\n inputStyle: css({\n paddingBlock: 0,\n '&:focus': {\n outline: 'none',\n },\n }),\n loadingIndicator: css({\n color: theme.colors.text.secondary,\n marginLeft: theme.spacing(0.5),\n }),\n loadingInputPadding: css({\n paddingRight: theme.spacing(2.5),\n }),\n optionGroupLabel: css({\n padding: theme.spacing(1),\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n }),\n groupTopBorder: css({\n '&:not(:first-child)': {\n borderTop: `1px solid ${theme.colors.border.weak}`,\n },\n }),\n descriptionText: css({\n ...theme.typography.bodySmall,\n color: theme.colors.text.secondary,\n paddingTop: theme.spacing(0.5),\n }),\n});\n"],"names":["AdHocCombobox","controller","filter","filterMultiValues","_a","_","_b","_c","options"],"mappings":"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"}