@grafana/scenes 5.5.2--canary.830.10005065313.0 → 5.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/esm/index.js +1 -0
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/querying/SceneQueryRunner.js +2 -1
  5. package/dist/esm/querying/SceneQueryRunner.js.map +1 -1
  6. package/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js +4 -1
  7. package/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js.map +1 -1
  8. package/dist/esm/querying/layers/annotations/standardAnnotationQuery.js +2 -1
  9. package/dist/esm/querying/layers/annotations/standardAnnotationQuery.js.map +1 -1
  10. package/dist/esm/utils/SafeSerializableSceneObject.js +39 -0
  11. package/dist/esm/utils/SafeSerializableSceneObject.js.map +1 -0
  12. package/dist/esm/variables/adhoc/AdHocFilterRenderer.js +4 -1
  13. package/dist/esm/variables/adhoc/AdHocFilterRenderer.js.map +1 -1
  14. package/dist/esm/variables/adhoc/AdHocFiltersVariable.js +6 -13
  15. package/dist/esm/variables/adhoc/AdHocFiltersVariable.js.map +1 -1
  16. package/dist/esm/variables/groupby/GroupByVariable.js +8 -5
  17. package/dist/esm/variables/groupby/GroupByVariable.js.map +1 -1
  18. package/dist/esm/variables/variants/query/QueryVariable.js +3 -2
  19. package/dist/esm/variables/variants/query/QueryVariable.js.map +1 -1
  20. package/dist/index.d.ts +12 -5
  21. package/dist/index.js +276 -798
  22. package/dist/index.js.map +1 -1
  23. package/package.json +2 -3
  24. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +0 -406
  25. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js.map +0 -1
  26. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxEditSwitch.js +0 -113
  27. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxEditSwitch.js.map +0 -1
  28. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +0 -63
  29. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grafana/scenes",
3
- "version": "5.5.2--canary.830.10005065313.0",
3
+ "version": "5.6.0",
4
4
  "description": "Grafana framework for building dynamic dashboards",
5
5
  "author": "Grafana Labs",
6
6
  "license": "AGPL-3.0-only",
@@ -37,7 +37,6 @@
37
37
  "url": "https://github.com/grafana/scenes/issues"
38
38
  },
39
39
  "dependencies": {
40
- "@floating-ui/react": "0.26.16",
41
40
  "@grafana/e2e-selectors": "^11.0.0",
42
41
  "@leeoniya/ufuzzy": "^1.0.14",
43
42
  "react-grid-layout": "1.3.4",
@@ -114,5 +113,5 @@
114
113
  "prettier --write"
115
114
  ]
116
115
  },
117
- "gitHead": "d06acd8eee168379baea16bbf86a767acf9eed45"
116
+ "gitHead": "61806a207acaccf96359aa8171e63aad478faf15"
118
117
  }
@@ -1,406 +0,0 @@
1
- import React, { forwardRef, useState, useRef, useCallback, useImperativeHandle, useEffect } from 'react';
2
- import { useId, useFloating, autoUpdate, flip, size, useRole, useDismiss, useListNavigation, useInteractions, FloatingPortal, FloatingFocusManager } from '@floating-ui/react';
3
- import { useTheme2, getSelectStyles, useStyles2 } from '@grafana/ui';
4
- import { cx, css } from '@emotion/css';
5
- import { flushSync } from 'react-dom';
6
-
7
- var __defProp = Object.defineProperty;
8
- var __defProps = Object.defineProperties;
9
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
10
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
11
- var __hasOwnProp = Object.prototype.hasOwnProperty;
12
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
13
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
14
- var __spreadValues = (a, b) => {
15
- for (var prop in b || (b = {}))
16
- if (__hasOwnProp.call(b, prop))
17
- __defNormalProp(a, prop, b[prop]);
18
- if (__getOwnPropSymbols)
19
- for (var prop of __getOwnPropSymbols(b)) {
20
- if (__propIsEnum.call(b, prop))
21
- __defNormalProp(a, prop, b[prop]);
22
- }
23
- return a;
24
- };
25
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
26
- var __objRest = (source, exclude) => {
27
- var target = {};
28
- for (var prop in source)
29
- if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
30
- target[prop] = source[prop];
31
- if (source != null && __getOwnPropSymbols)
32
- for (var prop of __getOwnPropSymbols(source)) {
33
- if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
34
- target[prop] = source[prop];
35
- }
36
- return target;
37
- };
38
- const Item = forwardRef(
39
- (_a, ref) => {
40
- var _b = _a, { children, active } = _b, rest = __objRest(_b, ["children", "active"]);
41
- const theme = useTheme2();
42
- const selectStyles = getSelectStyles(theme);
43
- const id = useId();
44
- return /* @__PURE__ */ React.createElement("div", __spreadValues({
45
- ref,
46
- role: "option",
47
- id,
48
- "aria-selected": active,
49
- className: cx(selectStyles.option, active && selectStyles.optionFocused)
50
- }, rest), /* @__PURE__ */ React.createElement("div", {
51
- className: selectStyles.optionBody,
52
- "data-testid": `data-testid ad hoc filter option value ${children}`
53
- }, /* @__PURE__ */ React.createElement("span", null, children)));
54
- }
55
- );
56
- const AdHocCombobox = forwardRef(function AdHocCombobox2({ filter, model, wip, handleChangeViewMode }, parentRef) {
57
- var _a;
58
- const [open, setOpen] = useState(false);
59
- const [options, setOptions] = useState([]);
60
- const [optionsLoading, setOptionsLoading] = useState(false);
61
- const [optionsError, setOptionsError] = useState(false);
62
- const [inputValue, setInputValue] = useState("");
63
- const [activeIndex, setActiveIndex] = useState(null);
64
- const [inputType, setInputType] = useState(!wip ? "value" : "key");
65
- const styles = useStyles2(getStyles2);
66
- const listRef = useRef([]);
67
- const { _wip } = model.useState();
68
- const handleResetWip = useCallback(() => {
69
- if (wip) {
70
- model._addWip();
71
- setInputType("key");
72
- setInputValue("");
73
- }
74
- }, [model, wip]);
75
- const filterToUse = filter || _wip;
76
- const operatorIdentifier = `${(_a = filterToUse == null ? void 0 : filterToUse.key) != null ? _a : ""}-operator`;
77
- const { refs, floatingStyles, context } = useFloating({
78
- whileElementsMounted: autoUpdate,
79
- open,
80
- onOpenChange: (nextOpen, _, reason) => {
81
- setOpen(nextOpen);
82
- if (["outside-press", "escape-key"].includes(reason || "")) {
83
- handleResetWip();
84
- handleChangeViewMode == null ? void 0 : handleChangeViewMode();
85
- }
86
- },
87
- middleware: [
88
- flip({ padding: 10 }),
89
- size({
90
- apply({ rects, availableHeight, elements }) {
91
- Object.assign(elements.floating.style, {
92
- width: `${rects.reference.width}px`,
93
- maxHeight: `${availableHeight > 256 ? 256 : availableHeight}px`
94
- });
95
- },
96
- padding: 10
97
- })
98
- ]
99
- });
100
- const role = useRole(context, { role: "listbox" });
101
- const dismiss = useDismiss(context, {
102
- outsidePress: (event) => {
103
- return !event.currentTarget.classList.contains(
104
- operatorIdentifier
105
- );
106
- }
107
- });
108
- const listNav = useListNavigation(context, {
109
- listRef,
110
- activeIndex,
111
- onNavigate: setActiveIndex,
112
- virtual: true,
113
- loop: true
114
- });
115
- const { getReferenceProps, getFloatingProps, getItemProps } = useInteractions([role, dismiss, listNav]);
116
- useImperativeHandle(parentRef, () => () => {
117
- var _a2;
118
- return (_a2 = refs.domReference.current) == null ? void 0 : _a2.focus();
119
- }, [refs.domReference]);
120
- function onChange(event) {
121
- var _a2, _b;
122
- if (inputType === "key") {
123
- const lastChar = event.target.value.slice(-1);
124
- if (["=", "!", "<", ">"].includes(lastChar)) {
125
- const key = event.target.value.slice(0, -1);
126
- const optionIndex = options.findIndex((option) => option.value === key);
127
- if (optionIndex >= 0) {
128
- model._updateFilter(filterToUse, inputType, options[optionIndex]);
129
- setInputValue(lastChar);
130
- }
131
- flushSync(() => {
132
- setInputType("operator");
133
- });
134
- (_a2 = refs.domReference.current) == null ? void 0 : _a2.focus();
135
- return;
136
- }
137
- }
138
- if (inputType === "operator") {
139
- const lastChar = event.target.value.slice(-1);
140
- if (/\w/.test(lastChar)) {
141
- const operator = event.target.value.slice(0, -1);
142
- if (!/\w/.test(operator)) {
143
- const optionIndex = options.findIndex((option) => option.value === operator);
144
- if (optionIndex >= 0) {
145
- model._updateFilter(filterToUse, inputType, options[optionIndex]);
146
- setInputValue(lastChar);
147
- }
148
- flushSync(() => {
149
- setInputType("value");
150
- });
151
- (_b = refs.domReference.current) == null ? void 0 : _b.focus();
152
- return;
153
- }
154
- }
155
- }
156
- const value = event.target.value;
157
- setInputValue(value);
158
- setActiveIndex(0);
159
- }
160
- const items = options.filter(
161
- (item) => {
162
- var _a2, _b;
163
- return (_b = (_a2 = item.label) != null ? _a2 : item.value) == null ? void 0 : _b.toLocaleLowerCase().startsWith(inputValue.toLowerCase());
164
- }
165
- );
166
- const flushInputType = useCallback((inputType2) => {
167
- flushSync(() => {
168
- setInputType(inputType2);
169
- });
170
- }, []);
171
- useEffect(() => {
172
- if (wip && !_wip) {
173
- model._addWip();
174
- }
175
- }, [_wip]);
176
- useEffect(() => {
177
- if (!wip && refs.domReference.current) {
178
- setInputType("value");
179
- setInputValue("");
180
- refs.domReference.current.focus();
181
- }
182
- }, []);
183
- const handleFetchOptions = useCallback(
184
- async (inputType2) => {
185
- setOptionsError(false);
186
- setOptionsLoading(true);
187
- setOptions([]);
188
- let options2 = [];
189
- try {
190
- if (inputType2 === "key") {
191
- options2 = await model._getKeys(null);
192
- } else if (inputType2 === "operator") {
193
- options2 = model._getOperators();
194
- } else if (inputType2 === "value") {
195
- options2 = await model._getValuesFor(filterToUse);
196
- }
197
- setOptions(options2);
198
- } catch (e) {
199
- setOptionsError(true);
200
- }
201
- setOptionsLoading(false);
202
- },
203
- [filterToUse, model]
204
- );
205
- const handleBackspaceInput = useCallback(
206
- (event) => {
207
- if (event.key === "Backspace" && !inputValue && inputType === "key") {
208
- model._removeLastFilter();
209
- handleFetchOptions(inputType);
210
- }
211
- },
212
- [inputValue, inputType]
213
- );
214
- const handleTabInput = useCallback((event) => {
215
- if (event.key === "Tab" && !event.shiftKey) {
216
- handleChangeViewMode == null ? void 0 : handleChangeViewMode();
217
- handleResetWip();
218
- }
219
- }, []);
220
- const handleShiftTabInput = useCallback((event) => {
221
- if (event.key === "Tab" && event.shiftKey) {
222
- handleChangeViewMode == null ? void 0 : handleChangeViewMode();
223
- handleResetWip();
224
- }
225
- }, []);
226
- const handleEnterInput = useCallback(
227
- (event) => {
228
- var _a2;
229
- if (event.key === "Enter" && activeIndex != null && items[activeIndex]) {
230
- model._updateFilter(filterToUse, inputType, items[activeIndex]);
231
- setInputValue("");
232
- setActiveIndex(0);
233
- if (inputType === "key") {
234
- flushInputType("operator");
235
- } else if (inputType === "operator") {
236
- flushInputType("value");
237
- } else if (inputType === "value") {
238
- flushInputType("key");
239
- handleChangeViewMode == null ? void 0 : handleChangeViewMode();
240
- }
241
- (_a2 = refs.domReference.current) == null ? void 0 : _a2.focus();
242
- }
243
- },
244
- [activeIndex, filterToUse, inputType, items, model]
245
- );
246
- useEffect(() => {
247
- if (open) {
248
- handleFetchOptions(inputType);
249
- }
250
- }, [open, inputType]);
251
- return /* @__PURE__ */ React.createElement("div", {
252
- className: styles.comboboxWrapper
253
- }, filterToUse ? /* @__PURE__ */ React.createElement("div", {
254
- className: styles.pillWrapper
255
- }, (filterToUse == null ? void 0 : filterToUse.key) ? /* @__PURE__ */ React.createElement("div", {
256
- className: cx(styles.basePill, styles.keyPill)
257
- }, filterToUse.key) : null, (filterToUse == null ? void 0 : filterToUse.key) && (filterToUse == null ? void 0 : filterToUse.operator) && inputType !== "operator" ? /* @__PURE__ */ React.createElement("div", {
258
- className: cx(styles.basePill, styles.operatorPill, operatorIdentifier),
259
- role: "button",
260
- "aria-label": "Edit filter operator",
261
- tabIndex: 0,
262
- onClick: (event) => {
263
- var _a2;
264
- event.stopPropagation();
265
- flushInputType("operator");
266
- (_a2 = refs.domReference.current) == null ? void 0 : _a2.focus();
267
- },
268
- onKeyDown: (event) => {
269
- var _a2;
270
- handleShiftTabInput(event);
271
- if (event.key === "Enter") {
272
- flushInputType("operator");
273
- (_a2 = refs.domReference.current) == null ? void 0 : _a2.focus();
274
- }
275
- }
276
- }, filterToUse.operator) : null, (filterToUse == null ? void 0 : filterToUse.key) && (filterToUse == null ? void 0 : filterToUse.operator) && (filterToUse == null ? void 0 : filterToUse.value) && !["operator", "value"].includes(inputType) ? /* @__PURE__ */ React.createElement("div", {
277
- className: cx(styles.basePill, styles.valuePill)
278
- }, filterToUse.value) : null) : null, /* @__PURE__ */ React.createElement("input", __spreadProps(__spreadValues({}, getReferenceProps({
279
- ref: refs.setReference,
280
- onChange,
281
- value: inputValue,
282
- placeholder: !wip ? inputType === "operator" ? `${filterToUse[inputType]} ${filterToUse.value || ""}` : filterToUse[inputType] : "Filter by label values",
283
- "aria-autocomplete": "list",
284
- onKeyDown(event) {
285
- if (inputType === "operator") {
286
- handleShiftTabInput(event);
287
- }
288
- handleBackspaceInput(event);
289
- handleTabInput(event);
290
- handleEnterInput(event);
291
- }
292
- })), {
293
- className: styles.inputStyle,
294
- onClick: (event) => {
295
- event.stopPropagation();
296
- setOpen(true);
297
- },
298
- onFocus: () => {
299
- setActiveIndex(0);
300
- setOpen(true);
301
- }
302
- })), /* @__PURE__ */ React.createElement(FloatingPortal, null, open && /* @__PURE__ */ React.createElement(FloatingFocusManager, {
303
- context,
304
- initialFocus: -1,
305
- visuallyHiddenDismiss: true
306
- }, /* @__PURE__ */ React.createElement("div", __spreadProps(__spreadValues({}, getFloatingProps({
307
- ref: refs.setFloating,
308
- style: __spreadProps(__spreadValues({}, floatingStyles), {
309
- overflowY: "auto"
310
- })
311
- })), {
312
- className: styles.dropdownWrapper
313
- }), optionsLoading ? /* @__PURE__ */ React.createElement(LoadingOptionsPlaceholder, null) : optionsError ? /* @__PURE__ */ React.createElement(OptionsErrorPlaceholder, {
314
- handleFetchOptions: () => handleFetchOptions(inputType)
315
- }) : !items.length ? /* @__PURE__ */ React.createElement(NoOptionsPlaceholder, null) : items.map((item, index) => {
316
- var _a2;
317
- return /* @__PURE__ */ React.createElement(Item, __spreadProps(__spreadValues({}, getItemProps({
318
- key: item.value,
319
- ref(node) {
320
- listRef.current[index] = node;
321
- },
322
- onClick() {
323
- var _a3;
324
- model._updateFilter(filterToUse, inputType, item);
325
- setInputValue("");
326
- if (inputType === "key") {
327
- flushInputType("operator");
328
- } else if (inputType === "operator") {
329
- flushInputType("value");
330
- } else if (inputType === "value") {
331
- flushInputType("key");
332
- handleChangeViewMode == null ? void 0 : handleChangeViewMode();
333
- }
334
- (_a3 = refs.domReference.current) == null ? void 0 : _a3.focus();
335
- }
336
- })), {
337
- active: activeIndex === index
338
- }), (_a2 = item.label) != null ? _a2 : item.value);
339
- })))));
340
- });
341
- const LoadingOptionsPlaceholder = () => {
342
- return /* @__PURE__ */ React.createElement(Item, {
343
- active: false
344
- }, "Loading options...");
345
- };
346
- const NoOptionsPlaceholder = () => {
347
- return /* @__PURE__ */ React.createElement(Item, {
348
- active: false
349
- }, "No options found");
350
- };
351
- const OptionsErrorPlaceholder = ({ handleFetchOptions }) => {
352
- return /* @__PURE__ */ React.createElement(Item, {
353
- active: false,
354
- onClick: handleFetchOptions
355
- }, "Error. Click to try again!");
356
- };
357
- const getStyles2 = (theme) => ({
358
- comboboxWrapper: css({
359
- display: "flex",
360
- flexWrap: "nowrap"
361
- }),
362
- pillWrapper: css({
363
- display: "flex",
364
- alignItems: "center",
365
- whiteSpace: "nowrap"
366
- }),
367
- basePill: css(__spreadProps(__spreadValues({
368
- display: "flex",
369
- alignItems: "center",
370
- background: theme.colors.action.disabledBackground,
371
- border: `1px solid ${theme.colors.border.weak}`,
372
- padding: theme.spacing(0.125, 1, 0.125, 1),
373
- color: theme.colors.text.primary,
374
- overflow: "hidden",
375
- whiteSpace: "nowrap",
376
- minHeight: "22px"
377
- }, theme.typography.bodySmall), {
378
- cursor: "pointer"
379
- })),
380
- keyPill: css({
381
- fontWeight: theme.typography.fontWeightBold,
382
- cursor: "default"
383
- }),
384
- operatorPill: css({
385
- "&:hover": {
386
- background: theme.colors.action.hover
387
- }
388
- }),
389
- valuePill: css({
390
- background: theme.colors.action.selected
391
- }),
392
- dropdownWrapper: css({
393
- backgroundColor: theme.colors.background.primary,
394
- color: theme.colors.text.primary,
395
- boxShadow: theme.shadows.z2
396
- }),
397
- inputStyle: css({
398
- paddingBlock: 0,
399
- "&:focus": {
400
- outline: "none"
401
- }
402
- })
403
- });
404
-
405
- export { AdHocCombobox };
406
- //# sourceMappingURL=AdHocFiltersCombobox.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AdHocFiltersCombobox.js","sources":["../../../../../src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.tsx"],"sourcesContent":["import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport {\n autoUpdate,\n size,\n flip,\n useId,\n useDismiss,\n useFloating,\n useInteractions,\n useListNavigation,\n useRole,\n FloatingFocusManager,\n FloatingPortal,\n} from '@floating-ui/react';\nimport { getSelectStyles, useStyles2, useTheme2 } from '@grafana/ui';\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { css, cx } from '@emotion/css';\nimport { AdHocFilterWithLabels, AdHocFiltersVariable } from '../AdHocFiltersVariable';\nimport { flushSync } from 'react-dom';\n\ninterface ItemProps {\n children: React.ReactNode;\n active: boolean;\n}\n\n// eslint-disable-next-line react/display-name\nconst Item = forwardRef<HTMLDivElement, ItemProps & React.HTMLProps<HTMLDivElement>>(\n ({ children, active, ...rest }, ref) => {\n const theme = useTheme2();\n const selectStyles = getSelectStyles(theme);\n const id = useId();\n return (\n <div\n ref={ref}\n role=\"option\"\n id={id}\n aria-selected={active}\n className={cx(selectStyles.option, active && selectStyles.optionFocused)}\n {...rest}\n >\n <div className={selectStyles.optionBody} data-testid={`data-testid ad hoc filter option value ${children}`}>\n <span>{children}</span>\n </div>\n </div>\n );\n }\n);\n\ninterface AdHocComboboxProps {\n filter?: AdHocFilterWithLabels;\n wip?: boolean;\n model: AdHocFiltersVariable;\n handleChangeViewMode?: () => void;\n}\n\ntype AdHocInputType = 'key' | 'operator' | 'value';\n\nexport const AdHocCombobox = forwardRef(function AdHocCombobox(\n { filter, model, wip, handleChangeViewMode }: AdHocComboboxProps,\n parentRef\n) {\n const [open, setOpen] = useState(false);\n\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 [inputType, setInputType] = useState<AdHocInputType>(!wip ? 'value' : 'key');\n const styles = useStyles2(getStyles2);\n\n const listRef = useRef<Array<HTMLElement | null>>([]);\n const { _wip } = model.useState();\n\n const handleResetWip = useCallback(() => {\n if (wip) {\n model._addWip();\n setInputType('key');\n setInputValue('');\n }\n }, [model, wip]);\n\n const filterToUse = filter || _wip;\n\n const operatorIdentifier = `${filterToUse?.key ?? ''}-operator`;\n\n const { refs, floatingStyles, context } = useFloating<HTMLInputElement>({\n whileElementsMounted: autoUpdate,\n open,\n onOpenChange: (nextOpen, _, reason) => {\n setOpen(nextOpen);\n // change from filter edit mode to filter view mode when clicked\n // outside input or dropdown\n if (['outside-press', 'escape-key'].includes(reason || '')) {\n handleResetWip();\n handleChangeViewMode?.();\n }\n },\n middleware: [\n flip({ padding: 10 }),\n size({\n apply({ rects, availableHeight, elements }) {\n Object.assign(elements.floating.style, {\n width: `${rects.reference.width}px`,\n // limit the maxHeight of dropdown\n maxHeight: `${availableHeight > 256 ? 256 : availableHeight}px`,\n });\n },\n padding: 10,\n }),\n ],\n });\n\n const role = useRole(context, { role: 'listbox' });\n const dismiss = useDismiss(context, {\n // if outside click lands on operator pill, then ignore outside click\n outsidePress: (event) => {\n return !(event as unknown as React.MouseEvent<HTMLElement, MouseEvent>).currentTarget.classList.contains(\n operatorIdentifier\n );\n },\n });\n const listNav = useListNavigation(context, {\n listRef,\n activeIndex,\n onNavigate: setActiveIndex,\n virtual: true,\n loop: true,\n });\n\n const { getReferenceProps, getFloatingProps, getItemProps } = useInteractions([role, dismiss, listNav]);\n\n // pass ability to focus on input element back to parent\n useImperativeHandle(parentRef, () => () => refs.domReference.current?.focus(), [refs.domReference]);\n\n function onChange(event: React.ChangeEvent<HTMLInputElement>) {\n // part of POC for seamless filter parser\n if (inputType === 'key') {\n const lastChar = event.target.value.slice(-1);\n if (['=', '!', '<', '>'].includes(lastChar)) {\n const key = event.target.value.slice(0, -1);\n const optionIndex = options.findIndex((option) => option.value === key);\n if (optionIndex >= 0) {\n model._updateFilter(filterToUse!, inputType, options[optionIndex]);\n setInputValue(lastChar);\n }\n flushSync(() => {\n setInputType('operator');\n });\n refs.domReference.current?.focus();\n return;\n }\n }\n if (inputType === 'operator') {\n const lastChar = event.target.value.slice(-1);\n if (/\\w/.test(lastChar)) {\n const operator = event.target.value.slice(0, -1);\n if (!/\\w/.test(operator)) {\n const optionIndex = options.findIndex((option) => option.value === operator);\n if (optionIndex >= 0) {\n model._updateFilter(filterToUse!, inputType, options[optionIndex]);\n setInputValue(lastChar);\n }\n flushSync(() => {\n setInputType('value');\n });\n refs.domReference.current?.focus();\n return;\n }\n }\n }\n\n const value = event.target.value;\n setInputValue(value);\n setActiveIndex(0);\n }\n\n const items = options.filter((item) =>\n (item.label ?? item.value)?.toLocaleLowerCase().startsWith(inputValue.toLowerCase())\n );\n\n const flushInputType = useCallback((inputType: AdHocInputType) => {\n flushSync(() => {\n setInputType(inputType);\n });\n }, []);\n\n // when combobox is in wip mode then check and add _wip if its missing\n // needed on first render and when _wip is reset on filter value commit\n useEffect(() => {\n if (wip && !_wip) {\n model._addWip();\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [_wip]);\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 (!wip && refs.domReference.current) {\n setInputType('value');\n setInputValue('');\n\n refs.domReference.current.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleFetchOptions = useCallback(\n async (inputType: AdHocInputType) => {\n setOptionsError(false);\n setOptionsLoading(true);\n setOptions([]);\n let options: Array<SelectableValue<string>> = [];\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(filterToUse!);\n }\n setOptions(options);\n } catch (e) {\n setOptionsError(true);\n }\n setOptionsLoading(false);\n },\n [filterToUse, model]\n );\n\n const handleBackspaceInput = useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === 'Backspace' && !inputValue && inputType === 'key') {\n model._removeLastFilter();\n handleFetchOptions(inputType);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [inputValue, inputType]\n );\n\n const handleTabInput = useCallback((event: React.KeyboardEvent) => {\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 handleChangeViewMode?.();\n handleResetWip();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleShiftTabInput = useCallback((event: React.KeyboardEvent) => {\n if (event.key === 'Tab' && event.shiftKey) {\n handleChangeViewMode?.();\n handleResetWip();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleEnterInput = useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === 'Enter' && activeIndex != null && items[activeIndex]) {\n model._updateFilter(filterToUse!, inputType, items[activeIndex]);\n setInputValue('');\n setActiveIndex(0);\n\n if (inputType === 'key') {\n flushInputType('operator');\n } else if (inputType === 'operator') {\n flushInputType('value');\n } else if (inputType === 'value') {\n flushInputType('key');\n\n handleChangeViewMode?.();\n }\n\n refs.domReference.current?.focus();\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [activeIndex, filterToUse, inputType, items, model]\n );\n\n useEffect(() => {\n if (open) {\n handleFetchOptions(inputType);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, inputType]);\n\n return (\n <div className={styles.comboboxWrapper}>\n {filterToUse ? (\n <div className={styles.pillWrapper}>\n {filterToUse?.key ? <div className={cx(styles.basePill, styles.keyPill)}>{filterToUse.key}</div> : null}\n {filterToUse?.key && filterToUse?.operator && inputType !== 'operator' ? (\n <div\n className={cx(styles.basePill, styles.operatorPill, operatorIdentifier)}\n role=\"button\"\n aria-label=\"Edit filter operator\"\n tabIndex={0}\n onClick={(event) => {\n event.stopPropagation();\n flushInputType('operator');\n\n refs.domReference.current?.focus();\n }}\n onKeyDown={(event) => {\n handleShiftTabInput(event);\n if (event.key === 'Enter') {\n flushInputType('operator');\n refs.domReference.current?.focus();\n }\n }}\n >\n {filterToUse.operator}\n </div>\n ) : null}\n {filterToUse?.key &&\n filterToUse?.operator &&\n filterToUse?.value &&\n !['operator', 'value'].includes(inputType) ? (\n <div className={cx(styles.basePill, styles.valuePill)}>{filterToUse.value}</div>\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: !wip\n ? inputType === 'operator'\n ? `${filterToUse![inputType]} ${filterToUse!.value || ''}`\n : filterToUse![inputType]\n : 'Filter by label values',\n 'aria-autocomplete': 'list',\n onKeyDown(event) {\n if (inputType === 'operator') {\n handleShiftTabInput(event);\n }\n handleBackspaceInput(event);\n handleTabInput(event);\n handleEnterInput(event);\n },\n })}\n className={styles.inputStyle}\n onClick={(event) => {\n event.stopPropagation();\n setOpen(true);\n }}\n onFocus={() => {\n setActiveIndex(0);\n setOpen(true);\n }}\n />\n <FloatingPortal>\n {open && (\n <FloatingFocusManager context={context} initialFocus={-1} visuallyHiddenDismiss>\n <div\n {...getFloatingProps({\n ref: refs.setFloating,\n style: {\n ...floatingStyles,\n overflowY: 'auto',\n },\n })}\n className={styles.dropdownWrapper}\n >\n {optionsLoading ? (\n <LoadingOptionsPlaceholder />\n ) : optionsError ? (\n <OptionsErrorPlaceholder handleFetchOptions={() => handleFetchOptions(inputType)} />\n ) : !items.length ? (\n <NoOptionsPlaceholder />\n ) : (\n items.map((item, index) => (\n // eslint-disable-next-line react/jsx-key\n <Item\n {...getItemProps({\n key: item.value!,\n ref(node) {\n listRef.current[index] = node;\n },\n onClick() {\n model._updateFilter(filterToUse!, inputType, item);\n setInputValue('');\n\n if (inputType === 'key') {\n flushInputType('operator');\n } else if (inputType === 'operator') {\n flushInputType('value');\n } else if (inputType === 'value') {\n flushInputType('key');\n handleChangeViewMode?.();\n }\n\n refs.domReference.current?.focus();\n },\n })}\n active={activeIndex === index}\n >\n {item.label ?? item.value}\n </Item>\n ))\n )}\n </div>\n </FloatingFocusManager>\n )}\n </FloatingPortal>\n </div>\n );\n});\n\nconst LoadingOptionsPlaceholder = () => {\n return <Item active={false}>Loading options...</Item>;\n};\n\nconst NoOptionsPlaceholder = () => {\n return <Item active={false}>No options found</Item>;\n};\n\nconst OptionsErrorPlaceholder = ({ handleFetchOptions }: { handleFetchOptions: () => void }) => {\n return (\n <Item active={false} onClick={handleFetchOptions}>\n Error. Click to try again!\n </Item>\n );\n};\n\nconst getStyles2 = (theme: GrafanaTheme2) => ({\n comboboxWrapper: css({\n display: 'flex',\n flexWrap: 'nowrap',\n }),\n pillWrapper: css({\n display: 'flex',\n alignItems: 'center',\n whiteSpace: 'nowrap',\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: '22px',\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 valuePill: css({\n background: theme.colors.action.selected,\n }),\n dropdownWrapper: css({\n backgroundColor: theme.colors.background.primary,\n color: theme.colors.text.primary,\n boxShadow: theme.shadows.z2,\n }),\n inputStyle: css({\n paddingBlock: 0,\n '&:focus': {\n outline: 'none',\n },\n }),\n});\n"],"names":["AdHocCombobox","_a","inputType","options"],"mappings":"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"}
@@ -1,113 +0,0 @@
1
- import { css } from '@emotion/css';
2
- import { useStyles2, IconButton } from '@grafana/ui';
3
- import React, { useState, useRef, useCallback } from 'react';
4
- import { flushSync } from 'react-dom';
5
- import { AdHocCombobox } from './AdHocFiltersCombobox.js';
6
-
7
- var __defProp = Object.defineProperty;
8
- var __defProps = Object.defineProperties;
9
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
10
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
11
- var __hasOwnProp = Object.prototype.hasOwnProperty;
12
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
13
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
14
- var __spreadValues = (a, b) => {
15
- for (var prop in b || (b = {}))
16
- if (__hasOwnProp.call(b, prop))
17
- __defNormalProp(a, prop, b[prop]);
18
- if (__getOwnPropSymbols)
19
- for (var prop of __getOwnPropSymbols(b)) {
20
- if (__propIsEnum.call(b, prop))
21
- __defNormalProp(a, prop, b[prop]);
22
- }
23
- return a;
24
- };
25
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
26
- function AdHocFiltersComboboxEditSwitch({
27
- filter,
28
- model
29
- }) {
30
- const styles = useStyles2(getStyles);
31
- const [viewMode, setViewMode] = useState(true);
32
- const pillWrapperRef = useRef(null);
33
- const handleChangeViewMode = useCallback((event) => {
34
- var _a;
35
- event == null ? void 0 : event.stopPropagation();
36
- let viewMode2 = false;
37
- flushSync(() => {
38
- setViewMode((mode) => {
39
- viewMode2 = mode;
40
- return !mode;
41
- });
42
- });
43
- if (!viewMode2) {
44
- (_a = pillWrapperRef.current) == null ? void 0 : _a.focus();
45
- }
46
- }, []);
47
- if (viewMode) {
48
- return /* @__PURE__ */ React.createElement("div", {
49
- className: styles.combinedFilterPill,
50
- onClick: handleChangeViewMode,
51
- onKeyDown: (e) => {
52
- if (e.key === "Enter") {
53
- handleChangeViewMode();
54
- }
55
- },
56
- role: "button",
57
- "aria-label": "Edit filter",
58
- tabIndex: 0,
59
- ref: pillWrapperRef
60
- }, /* @__PURE__ */ React.createElement("span", null, filter.key, " ", filter.operator, " ", filter.value), /* @__PURE__ */ React.createElement(IconButton, {
61
- onClick: (e) => {
62
- e.stopPropagation();
63
- model._removeFilter(filter);
64
- },
65
- onKeyDownCapture: (e) => {
66
- if (e.key === "Enter") {
67
- e.preventDefault();
68
- e.stopPropagation();
69
- model._removeFilter(filter);
70
- }
71
- },
72
- name: "times",
73
- size: "md",
74
- className: styles.removeButton,
75
- tooltip: "Remove filter"
76
- }));
77
- }
78
- return /* @__PURE__ */ React.createElement(AdHocCombobox, {
79
- filter,
80
- model,
81
- handleChangeViewMode
82
- });
83
- }
84
- const getStyles = (theme) => ({
85
- combinedFilterPill: css(__spreadProps(__spreadValues({
86
- display: "flex",
87
- alignItems: "center",
88
- background: theme.colors.action.selected,
89
- borderRadius: theme.shape.radius.default,
90
- border: `1px solid ${theme.colors.border.weak}`,
91
- padding: theme.spacing(0.125, 0, 0.125, 1),
92
- color: theme.colors.text.primary,
93
- overflow: "hidden",
94
- whiteSpace: "nowrap",
95
- minHeight: "22px"
96
- }, theme.typography.bodySmall), {
97
- fontWeight: theme.typography.fontWeightBold,
98
- cursor: "pointer",
99
- "&:hover": {
100
- background: theme.colors.action.hover
101
- }
102
- })),
103
- removeButton: css({
104
- marginInline: theme.spacing(0.5),
105
- cursor: "pointer",
106
- "&:hover": {
107
- color: theme.colors.text.primary
108
- }
109
- })
110
- });
111
-
112
- export { AdHocFiltersComboboxEditSwitch };
113
- //# sourceMappingURL=AdHocFiltersComboboxEditSwitch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AdHocFiltersComboboxEditSwitch.js","sources":["../../../../../src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxEditSwitch.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2, IconButton } from '@grafana/ui';\nimport React, { useState, useRef, useCallback } from 'react';\nimport { flushSync } from 'react-dom';\nimport { AdHocCombobox } from './AdHocFiltersCombobox';\nimport { AdHocFilterWithLabels, AdHocFiltersVariable } from '../AdHocFiltersVariable';\n\nexport function AdHocFiltersComboboxEditSwitch({\n filter,\n model,\n}: {\n filter: AdHocFilterWithLabels;\n model: AdHocFiltersVariable;\n}) {\n const styles = useStyles2(getStyles);\n const [viewMode, setViewMode] = useState(true);\n const pillWrapperRef = useRef<HTMLDivElement>(null);\n\n const handleChangeViewMode = useCallback((event?: React.MouseEvent) => {\n event?.stopPropagation();\n let viewMode = false;\n flushSync(() => {\n setViewMode((mode) => {\n viewMode = mode;\n return !mode;\n });\n });\n if (!viewMode) {\n pillWrapperRef.current?.focus();\n }\n }, []);\n\n if (viewMode) {\n return (\n <div\n className={styles.combinedFilterPill}\n onClick={handleChangeViewMode}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n handleChangeViewMode();\n }\n }}\n role=\"button\"\n aria-label=\"Edit filter\"\n tabIndex={0}\n ref={pillWrapperRef}\n >\n <span>\n {filter.key} {filter.operator} {filter.value}\n </span>\n <IconButton\n onClick={(e) => {\n e.stopPropagation();\n model._removeFilter(filter);\n }}\n onKeyDownCapture={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n model._removeFilter(filter);\n }\n }}\n name=\"times\"\n size=\"md\"\n className={styles.removeButton}\n tooltip=\"Remove filter\"\n />\n </div>\n );\n }\n\n return <AdHocCombobox filter={filter} model={model} handleChangeViewMode={handleChangeViewMode} />;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n combinedFilterPill: css({\n display: 'flex',\n alignItems: 'center',\n background: theme.colors.action.selected,\n borderRadius: theme.shape.radius.default,\n border: `1px solid ${theme.colors.border.weak}`,\n padding: theme.spacing(0.125, 0, 0.125, 1),\n color: theme.colors.text.primary,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n minHeight: '22px',\n ...theme.typography.bodySmall,\n fontWeight: theme.typography.fontWeightBold,\n cursor: 'pointer',\n\n '&:hover': {\n background: theme.colors.action.hover,\n },\n }),\n removeButton: css({\n marginInline: theme.spacing(0.5),\n cursor: 'pointer',\n '&:hover': {\n color: theme.colors.text.primary,\n },\n }),\n});\n"],"names":["viewMode"],"mappings":"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"}