@grafana/scenes 6.4.1 → 6.5.0--canary.1062.13949528214.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.
- package/CHANGELOG.md +0 -24
- package/dist/esm/components/VizPanel/VizPanelExploreButton.js +4 -6
- package/dist/esm/components/VizPanel/VizPanelExploreButton.js.map +1 -1
- package/dist/esm/utils/explore.js +1 -5
- package/dist/esm/utils/explore.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +12 -3
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +19 -5
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersVariable.js +118 -16
- package/dist/esm/variables/adhoc/AdHocFiltersVariable.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +41 -9
- package/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js.map +1 -1
- package/dist/esm/variables/adhoc/getAdHocFiltersFromScopes.js.map +1 -1
- package/dist/esm/variables/utils.js +11 -1
- package/dist/esm/variables/utils.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +202 -42
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../src/variables/utils.ts"],"sourcesContent":["import { isEqual } from 'lodash';\nimport { VariableValue } from './types';\nimport { AdHocVariableFilter, DataQueryError, GetTagResponse, MetricFindValue, SelectableValue } from '@grafana/data';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneDataQuery, SceneObject, SceneObjectState } from '../core/types';\nimport { SceneQueryRunner } from '../querying/SceneQueryRunner';\nimport { DataSourceRef } from '@grafana/schema';\n\nexport function isVariableValueEqual(a: VariableValue | null | undefined, b: VariableValue | null | undefined) {\n if (a === b) {\n return true;\n }\n\n return isEqual(a, b);\n}\n\nexport function safeStringifyValue(value: unknown) {\n // Avoid circular references ignoring those references\n const getCircularReplacer = () => {\n const seen = new WeakSet();\n return (_: string, value: object | null) => {\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return;\n }\n seen.add(value);\n }\n return value;\n };\n };\n\n try {\n return JSON.stringify(value, getCircularReplacer());\n } catch (error) {\n console.error(error);\n }\n\n return '';\n}\n\nexport function renderPrometheusLabelFilters(filters: AdHocVariableFilter[]) {\n return filters.map((filter) => renderFilter(filter)).join(',');\n}\n\nfunction renderFilter(filter: AdHocVariableFilter) {\n let value = '';\n let operator = filter.operator;\n\n // map \"one of\" operator to regex\n if (operator === '=|') {\n operator = '=~';\n // TODO remove when we're on the latest version of @grafana/data\n // @ts-expect-error\n value = filter.values?.map(escapeLabelValueInRegexSelector).join('|');\n } else if (operator === '!=|') {\n operator = '!~';\n // TODO remove when we're on the latest version of @grafana/data\n // @ts-expect-error\n value = filter.values?.map(escapeLabelValueInRegexSelector).join('|');\n } else if (operator === '=~' || operator === '!~') {\n value = escapeLabelValueInRegexSelector(filter.value);\n } else {\n value = escapeLabelValueInExactSelector(filter.value);\n }\n\n return `${filter.key}${operator}\"${value}\"`;\n}\n\n// based on the openmetrics-documentation, the 3 symbols we have to handle are:\n// - \\n ... the newline character\n// - \\ ... the backslash character\n// - \" ... the double-quote character\nexport function escapeLabelValueInExactSelector(labelValue: string): string {\n return labelValue.replace(/\\\\/g, '\\\\\\\\').replace(/\\n/g, '\\\\n').replace(/\"/g, '\\\\\"');\n}\n\nexport function escapeLabelValueInRegexSelector(labelValue: string): string {\n return escapeLabelValueInExactSelector(escapeLokiRegexp(labelValue));\n}\n\nexport function isRegexSelector(selector?: string) {\n if (selector && (selector.includes('=~') || selector.includes('!~'))) {\n return true;\n }\n return false;\n}\n\n// Loki regular-expressions use the RE2 syntax (https://github.com/google/re2/wiki/Syntax),\n// so every character that matches something in that list has to be escaped.\n// the list of meta characters is: *+?()|\\.[]{}^$\n// we make a javascript regular expression that matches those characters:\nconst RE2_METACHARACTERS = /[*+?()|\\\\.\\[\\]{}^$]/g;\nfunction escapeLokiRegexp(value: string): string {\n return value.replace(RE2_METACHARACTERS, '\\\\$&');\n}\n\n/**\n * Get all queries in the scene that have the same datasource as provided source object\n */\nexport function getQueriesForVariables(\n sourceObject: SceneObject<SceneObjectState & { datasource: DataSourceRef | null }>\n) {\n const runners = sceneGraph.findAllObjects(\n sourceObject.getRoot(),\n (o) => o instanceof SceneQueryRunner\n ) as SceneQueryRunner[];\n\n const interpolatedDsUuid = sceneGraph.interpolate(sourceObject, sourceObject.state.datasource?.uid);\n\n const applicableRunners = filterOutInactiveRunnerDuplicates(runners).filter((r) => {\n const interpolatedQueryDsUuid = sceneGraph.interpolate(sourceObject, r.state.datasource?.uid);\n\n return interpolatedQueryDsUuid === interpolatedDsUuid;\n });\n\n if (applicableRunners.length === 0) {\n return [];\n }\n\n const result: SceneDataQuery[] = [];\n applicableRunners.forEach((r) => {\n result.push(\n ...r.state.queries.filter((q) => {\n if (!q.datasource || !q.datasource.uid) {\n return true;\n }\n\n const interpolatedQueryDsUuid = sceneGraph.interpolate(sourceObject, q.datasource.uid);\n return interpolatedQueryDsUuid === interpolatedDsUuid;\n })\n );\n });\n\n return result;\n}\n\n// Filters out inactive runner duplicates, keeping only the ones that are currently active.\n// This is needed for scnearios whan a query runner is cloned and the original is not removed but de-activated.\n// Can happen i.e. when editing a panel in Grafana Core dashboards.\nfunction filterOutInactiveRunnerDuplicates(runners: SceneQueryRunner[]) {\n // Group items by key\n const groupedItems: { [key: string]: SceneQueryRunner[] } = {};\n\n for (const item of runners) {\n if (item.state.key) {\n if (!(item.state.key in groupedItems)) {\n groupedItems[item.state.key] = [];\n }\n groupedItems[item.state.key].push(item);\n }\n }\n\n // Filter out inactive items and concatenate active items\n return Object.values(groupedItems).flatMap((group) => {\n const activeItems = group.filter((item) => item.isActive);\n // Keep inactive items if there's only one item with the key\n if (activeItems.length === 0 && group.length === 1) {\n return group;\n }\n return activeItems;\n });\n}\n\nexport function escapeUrlPipeDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n // Replace the pipe due to using it as a filter separator\n return (value = /\\|/g[Symbol.replace](value, '__gfp__'));\n}\n\nexport function escapeUrlCommaDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n // Replace the comma due to using it as a value/label separator\n return /,/g[Symbol.replace](value, '__gfc__');\n}\n\nexport function escapeURLDelimiters(value: string | undefined): string {\n return escapeUrlCommaDelimiters(escapeUrlPipeDelimiters(value));\n}\n\nexport function unescapeUrlDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n value = /__gfp__/g[Symbol.replace](value, '|');\n value = /__gfc__/g[Symbol.replace](value, ',');\n\n return value;\n}\n\nexport function toUrlCommaDelimitedString(key: string, label?: string): string {\n // Omit for identical key/label or when label is not set at all\n if (!label || key === label) {\n return escapeUrlCommaDelimiters(key);\n }\n\n return [key, label].map(escapeUrlCommaDelimiters).join(',');\n}\n\nexport function dataFromResponse(response: GetTagResponse | MetricFindValue[]) {\n return Array.isArray(response) ? response : response.data;\n}\n\nexport function responseHasError(\n response: GetTagResponse | MetricFindValue[]\n): response is GetTagResponse & { error: DataQueryError } {\n return !Array.isArray(response) && Boolean(response.error);\n}\n\n// Collect a flat list of SelectableValues with a `group` property into a hierarchical list with groups\nexport function handleOptionGroups(values: SelectableValue[]): Array<SelectableValue<string>> {\n const result: Array<SelectableValue<string>> = [];\n const groupedResults = new Map<string, Array<SelectableValue<string>>>();\n\n for (const value of values) {\n const groupLabel = value.group;\n if (groupLabel) {\n let group = groupedResults.get(groupLabel);\n\n if (!group) {\n group = [];\n groupedResults.set(groupLabel, group);\n result.push({ label: groupLabel, options: group });\n }\n\n group.push(value);\n } else {\n result.push(value);\n }\n }\n\n return result;\n}\n"],"names":["value","_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../src/variables/utils.ts"],"sourcesContent":["import { isEqual } from 'lodash';\nimport { VariableValue } from './types';\nimport { AdHocVariableFilter, DataQueryError, GetTagResponse, MetricFindValue, SelectableValue } from '@grafana/data';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneDataQuery, SceneObject, SceneObjectState } from '../core/types';\nimport { SceneQueryRunner } from '../querying/SceneQueryRunner';\nimport { DataSourceRef } from '@grafana/schema';\n\nexport function isVariableValueEqual(a: VariableValue | null | undefined, b: VariableValue | null | undefined) {\n if (a === b) {\n return true;\n }\n\n return isEqual(a, b);\n}\n\nexport function safeStringifyValue(value: unknown) {\n // Avoid circular references ignoring those references\n const getCircularReplacer = () => {\n const seen = new WeakSet();\n return (_: string, value: object | null) => {\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return;\n }\n seen.add(value);\n }\n return value;\n };\n };\n\n try {\n return JSON.stringify(value, getCircularReplacer());\n } catch (error) {\n console.error(error);\n }\n\n return '';\n}\n\nexport function renderPrometheusLabelFilters(filters: AdHocVariableFilter[]) {\n return filters.map((filter) => renderFilter(filter)).join(',');\n}\n\nfunction renderFilter(filter: AdHocVariableFilter) {\n let value = '';\n let operator = filter.operator;\n\n // map \"one of\" operator to regex\n if (operator === '=|') {\n operator = '=~';\n // TODO remove when we're on the latest version of @grafana/data\n // @ts-expect-error\n value = filter.values?.map(escapeLabelValueInRegexSelector).join('|');\n } else if (operator === '!=|') {\n operator = '!~';\n // TODO remove when we're on the latest version of @grafana/data\n // @ts-expect-error\n value = filter.values?.map(escapeLabelValueInRegexSelector).join('|');\n } else if (operator === '=~' || operator === '!~') {\n value = escapeLabelValueInRegexSelector(filter.value);\n } else {\n value = escapeLabelValueInExactSelector(filter.value);\n }\n\n return `${filter.key}${operator}\"${value}\"`;\n}\n\n// based on the openmetrics-documentation, the 3 symbols we have to handle are:\n// - \\n ... the newline character\n// - \\ ... the backslash character\n// - \" ... the double-quote character\nexport function escapeLabelValueInExactSelector(labelValue: string): string {\n return labelValue.replace(/\\\\/g, '\\\\\\\\').replace(/\\n/g, '\\\\n').replace(/\"/g, '\\\\\"');\n}\n\nexport function escapeLabelValueInRegexSelector(labelValue: string): string {\n return escapeLabelValueInExactSelector(escapeLokiRegexp(labelValue));\n}\n\nexport function isRegexSelector(selector?: string) {\n if (selector && (selector.includes('=~') || selector.includes('!~'))) {\n return true;\n }\n return false;\n}\n\n// Loki regular-expressions use the RE2 syntax (https://github.com/google/re2/wiki/Syntax),\n// so every character that matches something in that list has to be escaped.\n// the list of meta characters is: *+?()|\\.[]{}^$\n// we make a javascript regular expression that matches those characters:\nconst RE2_METACHARACTERS = /[*+?()|\\\\.\\[\\]{}^$]/g;\nfunction escapeLokiRegexp(value: string): string {\n return value.replace(RE2_METACHARACTERS, '\\\\$&');\n}\n\n/**\n * Get all queries in the scene that have the same datasource as provided source object\n */\nexport function getQueriesForVariables(\n sourceObject: SceneObject<SceneObjectState & { datasource: DataSourceRef | null }>\n) {\n const runners = sceneGraph.findAllObjects(\n sourceObject.getRoot(),\n (o) => o instanceof SceneQueryRunner\n ) as SceneQueryRunner[];\n\n const interpolatedDsUuid = sceneGraph.interpolate(sourceObject, sourceObject.state.datasource?.uid);\n\n const applicableRunners = filterOutInactiveRunnerDuplicates(runners).filter((r) => {\n const interpolatedQueryDsUuid = sceneGraph.interpolate(sourceObject, r.state.datasource?.uid);\n\n return interpolatedQueryDsUuid === interpolatedDsUuid;\n });\n\n if (applicableRunners.length === 0) {\n return [];\n }\n\n const result: SceneDataQuery[] = [];\n applicableRunners.forEach((r) => {\n result.push(\n ...r.state.queries.filter((q) => {\n if (!q.datasource || !q.datasource.uid) {\n return true;\n }\n\n const interpolatedQueryDsUuid = sceneGraph.interpolate(sourceObject, q.datasource.uid);\n return interpolatedQueryDsUuid === interpolatedDsUuid;\n })\n );\n });\n\n return result;\n}\n\n// Filters out inactive runner duplicates, keeping only the ones that are currently active.\n// This is needed for scnearios whan a query runner is cloned and the original is not removed but de-activated.\n// Can happen i.e. when editing a panel in Grafana Core dashboards.\nfunction filterOutInactiveRunnerDuplicates(runners: SceneQueryRunner[]) {\n // Group items by key\n const groupedItems: { [key: string]: SceneQueryRunner[] } = {};\n\n for (const item of runners) {\n if (item.state.key) {\n if (!(item.state.key in groupedItems)) {\n groupedItems[item.state.key] = [];\n }\n groupedItems[item.state.key].push(item);\n }\n }\n\n // Filter out inactive items and concatenate active items\n return Object.values(groupedItems).flatMap((group) => {\n const activeItems = group.filter((item) => item.isActive);\n // Keep inactive items if there's only one item with the key\n if (activeItems.length === 0 && group.length === 1) {\n return group;\n }\n return activeItems;\n });\n}\n\nexport function escapeUrlPipeDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n // Replace the pipe due to using it as a filter separator\n return (value = /\\|/g[Symbol.replace](value, '__gfp__'));\n}\n\nexport function escapeUrlCommaDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n // Replace the comma due to using it as a value/label separator\n return /,/g[Symbol.replace](value, '__gfc__');\n}\n\nexport function escapeUrlHashDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n // Replace the hash due to using it as a value/label separator\n return /#/g[Symbol.replace](value, '__gfh__');\n}\n\nexport function escapeInjectedFilterUrlDelimiters(value: string | undefined): string {\n return escapeUrlHashDelimiters(escapeUrlPipeDelimiters(value));\n}\n\nexport function escapeURLDelimiters(value: string | undefined): string {\n return escapeUrlCommaDelimiters(escapeUrlPipeDelimiters(value));\n}\n\nexport function unescapeUrlDelimiters(value: string | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n value = /__gfp__/g[Symbol.replace](value, '|');\n value = /__gfc__/g[Symbol.replace](value, ',');\n value = /__gfh__/g[Symbol.replace](value, '#');\n\n return value;\n}\n\nexport function toUrlCommaDelimitedString(key: string, label?: string): string {\n // Omit for identical key/label or when label is not set at all\n if (!label || key === label) {\n return escapeUrlCommaDelimiters(key);\n }\n\n return [key, label].map(escapeUrlCommaDelimiters).join(',');\n}\n\nexport function dataFromResponse(response: GetTagResponse | MetricFindValue[]) {\n return Array.isArray(response) ? response : response.data;\n}\n\nexport function responseHasError(\n response: GetTagResponse | MetricFindValue[]\n): response is GetTagResponse & { error: DataQueryError } {\n return !Array.isArray(response) && Boolean(response.error);\n}\n\n// Collect a flat list of SelectableValues with a `group` property into a hierarchical list with groups\nexport function handleOptionGroups(values: SelectableValue[]): Array<SelectableValue<string>> {\n const result: Array<SelectableValue<string>> = [];\n const groupedResults = new Map<string, Array<SelectableValue<string>>>();\n\n for (const value of values) {\n const groupLabel = value.group;\n if (groupLabel) {\n let group = groupedResults.get(groupLabel);\n\n if (!group) {\n group = [];\n groupedResults.set(groupLabel, group);\n result.push({ label: groupLabel, options: group });\n }\n\n group.push(value);\n } else {\n result.push(value);\n }\n }\n\n return result;\n}\n"],"names":["value","_a"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -878,6 +878,7 @@ interface AdHocFilterWithLabels<M extends Record<string, any> = {}> extends AdHo
|
|
|
878
878
|
hidden?: boolean;
|
|
879
879
|
meta?: M;
|
|
880
880
|
origin?: FilterOrigin;
|
|
881
|
+
originalValue?: string[];
|
|
881
882
|
}
|
|
882
883
|
type AdHocControlsLayout = ControlsLayout | 'combobox';
|
|
883
884
|
declare enum FilterOrigin {
|
|
@@ -985,6 +986,7 @@ declare class AdHocFiltersVariable extends SceneObjectBase<AdHocFiltersVariableS
|
|
|
985
986
|
private _scopedVars;
|
|
986
987
|
private _dataSourceSrv;
|
|
987
988
|
private _scopesBridge;
|
|
989
|
+
private _overwriteScopes;
|
|
988
990
|
protected _urlSync: AdHocFiltersVariableUrlSyncHandler;
|
|
989
991
|
constructor(state: Partial<AdHocFiltersVariableState>);
|
|
990
992
|
private _activationHandler;
|
|
@@ -999,6 +1001,7 @@ declare class AdHocFiltersVariable extends SceneObjectBase<AdHocFiltersVariableS
|
|
|
999
1001
|
skipPublish?: boolean;
|
|
1000
1002
|
forcePublish?: boolean;
|
|
1001
1003
|
}): void;
|
|
1004
|
+
restoreOriginalFilter(filter: AdHocFilterWithLabels): void;
|
|
1002
1005
|
getValue(): VariableValue | undefined;
|
|
1003
1006
|
_updateFilter(filter: AdHocFilterWithLabels, update: Partial<AdHocFilterWithLabels>): void;
|
|
1004
1007
|
_removeFilter(filter: AdHocFilterWithLabels): void;
|
package/dist/index.js
CHANGED
|
@@ -3972,19 +3972,44 @@ class AdHocFiltersVariableUrlSyncHandler {
|
|
|
3972
3972
|
}
|
|
3973
3973
|
getUrlState() {
|
|
3974
3974
|
const filters = this._variable.state.filters;
|
|
3975
|
-
|
|
3975
|
+
const baseFilters = this._variable.state.baseFilters;
|
|
3976
|
+
let value = [];
|
|
3977
|
+
if (filters.length === 0 && (baseFilters == null ? void 0 : baseFilters.length) === 0) {
|
|
3976
3978
|
return { [this.getKey()]: [""] };
|
|
3977
3979
|
}
|
|
3978
|
-
|
|
3979
|
-
|
|
3980
|
+
if (filters.length) {
|
|
3981
|
+
value.push(
|
|
3982
|
+
...filters.filter(isFilterComplete).filter((filter) => !filter.hidden).map((filter) => toArray(filter).map(escapeUrlPipeDelimiters).join("|"))
|
|
3983
|
+
);
|
|
3984
|
+
}
|
|
3985
|
+
if (baseFilters == null ? void 0 : baseFilters.length) {
|
|
3986
|
+
value.push(
|
|
3987
|
+
...baseFilters == null ? void 0 : baseFilters.filter(isFilterComplete).filter((filter) => !filter.hidden && filter.origin && filter.originalValue).map(
|
|
3988
|
+
(filter) => {
|
|
3989
|
+
var _a, _b;
|
|
3990
|
+
return toArray(filter).map(escapeInjectedFilterUrlDelimiters).join("|").concat(
|
|
3991
|
+
`#${(_b = (_a = filter.originalValue) == null ? void 0 : _a.map(escapeInjectedFilterUrlDelimiters).join("|")) != null ? _b : ""}#${filter.origin}`
|
|
3992
|
+
);
|
|
3993
|
+
}
|
|
3994
|
+
)
|
|
3995
|
+
);
|
|
3996
|
+
}
|
|
3997
|
+
return {
|
|
3998
|
+
[this.getKey()]: value.length ? value : [""]
|
|
3999
|
+
};
|
|
3980
4000
|
}
|
|
3981
4001
|
updateFromUrl(values) {
|
|
3982
4002
|
const urlValue = values[this.getKey()];
|
|
3983
4003
|
if (urlValue == null) {
|
|
3984
4004
|
return;
|
|
3985
4005
|
}
|
|
3986
|
-
|
|
3987
|
-
|
|
4006
|
+
if (urlValue) {
|
|
4007
|
+
const filters = deserializeUrlToFilters(urlValue);
|
|
4008
|
+
this._variable.setState({
|
|
4009
|
+
filters: filters.filter((f) => !f.origin),
|
|
4010
|
+
baseFilters: filters.filter((f) => f.origin)
|
|
4011
|
+
});
|
|
4012
|
+
}
|
|
3988
4013
|
}
|
|
3989
4014
|
}
|
|
3990
4015
|
function deserializeUrlToFilters(value) {
|
|
@@ -4009,10 +4034,12 @@ function toArray(filter) {
|
|
|
4009
4034
|
return result;
|
|
4010
4035
|
}
|
|
4011
4036
|
function toFilter(urlValue) {
|
|
4037
|
+
var _a;
|
|
4012
4038
|
if (typeof urlValue !== "string" || urlValue.length === 0) {
|
|
4013
4039
|
return null;
|
|
4014
4040
|
}
|
|
4015
|
-
const [
|
|
4041
|
+
const [filter, originalValues, origin] = urlValue.split("#");
|
|
4042
|
+
const [key, keyLabel, operator, _operatorLabel, ...values] = filter.split("|").reduce((acc, v) => {
|
|
4016
4043
|
const [key2, label] = v.split(",");
|
|
4017
4044
|
acc.push(key2, label != null ? label : key2);
|
|
4018
4045
|
return acc;
|
|
@@ -4024,9 +4051,14 @@ function toFilter(urlValue) {
|
|
|
4024
4051
|
value: values[0],
|
|
4025
4052
|
values: isMultiValueOperator(operator) ? values.filter((_, index) => index % 2 === 0) : void 0,
|
|
4026
4053
|
valueLabels: values.filter((_, index) => index % 2 === 1),
|
|
4027
|
-
condition: ""
|
|
4054
|
+
condition: "",
|
|
4055
|
+
origin: isFilterOrigin(origin) ? origin : void 0,
|
|
4056
|
+
originalValue: originalValues && originalValues.length ? (_a = originalValues.split("|")) != null ? _a : [originalValues] : void 0
|
|
4028
4057
|
};
|
|
4029
4058
|
}
|
|
4059
|
+
function isFilterOrigin(value) {
|
|
4060
|
+
return value === FilterOrigin.Scopes || value === FilterOrigin.Dashboards;
|
|
4061
|
+
}
|
|
4030
4062
|
function isFilter(filter) {
|
|
4031
4063
|
return filter !== null && typeof filter.key === "string" && typeof filter.value === "string";
|
|
4032
4064
|
}
|
|
@@ -4688,6 +4720,9 @@ const AdHocCombobox = React.forwardRef(function AdHocCombobox2({ filter, model,
|
|
|
4688
4720
|
return;
|
|
4689
4721
|
}
|
|
4690
4722
|
}
|
|
4723
|
+
if (filter == null ? void 0 : filter.origin) {
|
|
4724
|
+
return;
|
|
4725
|
+
}
|
|
4691
4726
|
setInputType("operator");
|
|
4692
4727
|
return;
|
|
4693
4728
|
}
|
|
@@ -4874,25 +4909,36 @@ const AdHocCombobox = React.forwardRef(function AdHocCombobox2({ filter, model,
|
|
|
4874
4909
|
className: styles.pillWrapper
|
|
4875
4910
|
}, (filter == null ? void 0 : filter.key) ? /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
4876
4911
|
className: css.cx(styles.basePill, styles.keyPill)
|
|
4877
|
-
}, keyLabel) : null, (filter == null ? void 0 : filter.key) && (filter == null ? void 0 : filter.operator) && filterInputType !== "operator" ? /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
4912
|
+
}, keyLabel) : null, (filter == null ? void 0 : filter.key) && (filter == null ? void 0 : filter.operator) && filterInputType !== "operator" ? /* @__PURE__ */ React__default["default"].createElement("div", __spreadValues$B({
|
|
4878
4913
|
id: operatorIdentifier,
|
|
4879
|
-
className: css.cx(
|
|
4880
|
-
|
|
4914
|
+
className: css.cx(
|
|
4915
|
+
styles.basePill,
|
|
4916
|
+
!filter.origin && styles.operatorPill,
|
|
4917
|
+
filter.origin && styles.keyPill,
|
|
4918
|
+
operatorIdentifier
|
|
4919
|
+
),
|
|
4881
4920
|
"aria-label": "Edit filter operator",
|
|
4882
|
-
tabIndex: 0,
|
|
4921
|
+
tabIndex: filter.origin ? -1 : 0,
|
|
4883
4922
|
onClick: (event) => {
|
|
4923
|
+
if (filter.origin) {
|
|
4924
|
+
handleChangeViewMode == null ? void 0 : handleChangeViewMode();
|
|
4925
|
+
return;
|
|
4926
|
+
}
|
|
4884
4927
|
event.stopPropagation();
|
|
4885
4928
|
setInputValue("");
|
|
4886
4929
|
switchInputType("operator", setInputType, void 0, refs.domReference.current);
|
|
4887
4930
|
},
|
|
4888
4931
|
onKeyDown: (event) => {
|
|
4932
|
+
if (filter.origin) {
|
|
4933
|
+
return;
|
|
4934
|
+
}
|
|
4889
4935
|
handleShiftTabInput(event, hasMultiValueOperator);
|
|
4890
4936
|
if (event.key === "Enter") {
|
|
4891
4937
|
setInputValue("");
|
|
4892
4938
|
switchInputType("operator", setInputType, void 0, refs.domReference.current);
|
|
4893
4939
|
}
|
|
4894
4940
|
}
|
|
4895
|
-
}, filter.operator) : null, /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
4941
|
+
}, !filter.origin && { role: "button" }), filter.operator) : null, /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
4896
4942
|
ref: multiValuePillWrapperRef
|
|
4897
4943
|
}), isMultiValueEdit ? filterMultiValues.map((item, i) => /* @__PURE__ */ React__default["default"].createElement(MultiValuePill, {
|
|
4898
4944
|
key: `${item.value}-${i}`,
|
|
@@ -5139,13 +5185,13 @@ function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
|
|
|
5139
5185
|
const handleChangeViewMode = React.useCallback(
|
|
5140
5186
|
(event, shouldFocusOnPillWrapperOverride) => {
|
|
5141
5187
|
event == null ? void 0 : event.stopPropagation();
|
|
5142
|
-
if (readOnly
|
|
5188
|
+
if (readOnly) {
|
|
5143
5189
|
return;
|
|
5144
5190
|
}
|
|
5145
5191
|
setShouldFocusOnPillWrapper(shouldFocusOnPillWrapperOverride != null ? shouldFocusOnPillWrapperOverride : !viewMode);
|
|
5146
5192
|
setViewMode(!viewMode);
|
|
5147
5193
|
},
|
|
5148
|
-
[readOnly, viewMode
|
|
5194
|
+
[readOnly, viewMode]
|
|
5149
5195
|
);
|
|
5150
5196
|
React.useEffect(() => {
|
|
5151
5197
|
var _a2;
|
|
@@ -5209,11 +5255,20 @@ function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
|
|
|
5209
5255
|
size: "md",
|
|
5210
5256
|
className: styles.pillIcon,
|
|
5211
5257
|
tooltip: `Remove filter with key ${keyLabel}`
|
|
5212
|
-
}) : null, filter.origin && /* @__PURE__ */ React__default["default"].createElement(ui.IconButton, {
|
|
5258
|
+
}) : null, filter.origin && !filter.originalValue && /* @__PURE__ */ React__default["default"].createElement(ui.IconButton, {
|
|
5213
5259
|
name: "info-circle",
|
|
5214
5260
|
size: "md",
|
|
5215
5261
|
className: styles.pillIcon,
|
|
5216
5262
|
tooltip: `This is a ${filter.origin} injected filter`
|
|
5263
|
+
}), filter.origin && filter.originalValue && /* @__PURE__ */ React__default["default"].createElement(ui.IconButton, {
|
|
5264
|
+
onClick: (e) => {
|
|
5265
|
+
e.stopPropagation();
|
|
5266
|
+
model.restoreOriginalFilter(filter);
|
|
5267
|
+
},
|
|
5268
|
+
name: "history",
|
|
5269
|
+
size: "md",
|
|
5270
|
+
className: styles.pillIcon,
|
|
5271
|
+
tooltip: `Restore filter to its original value`
|
|
5217
5272
|
}));
|
|
5218
5273
|
}
|
|
5219
5274
|
return /* @__PURE__ */ React__default["default"].createElement(AdHocCombobox, {
|
|
@@ -5478,14 +5533,17 @@ const OPERATORS = [
|
|
|
5478
5533
|
];
|
|
5479
5534
|
class AdHocFiltersVariable extends SceneObjectBase {
|
|
5480
5535
|
constructor(state) {
|
|
5481
|
-
var _a, _b;
|
|
5536
|
+
var _a, _b, _c, _d, _e;
|
|
5482
5537
|
super(__spreadValues$z({
|
|
5483
5538
|
type: "adhoc",
|
|
5484
5539
|
name: (_a = state.name) != null ? _a : "Filters",
|
|
5485
5540
|
filters: [],
|
|
5486
5541
|
datasource: null,
|
|
5487
5542
|
applyMode: "auto",
|
|
5488
|
-
filterExpression: (
|
|
5543
|
+
filterExpression: (_e = state.filterExpression) != null ? _e : renderExpression(state.expressionBuilder, [
|
|
5544
|
+
...(_c = (_b = state.baseFilters) == null ? void 0 : _b.filter((filter) => filter.origin)) != null ? _c : [],
|
|
5545
|
+
...(_d = state.filters) != null ? _d : []
|
|
5546
|
+
])
|
|
5489
5547
|
}, state));
|
|
5490
5548
|
this._scopedVars = { __sceneObject: wrapInSafeSerializableSceneObject(this) };
|
|
5491
5549
|
this._dataSourceSrv = runtime.getDataSourceSrv();
|
|
@@ -5498,18 +5556,44 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
5498
5556
|
this._updateScopesFilters(scopes);
|
|
5499
5557
|
}
|
|
5500
5558
|
const sub = (_b = this._scopesBridge) == null ? void 0 : _b.subscribeToValue((n, _) => {
|
|
5501
|
-
|
|
5559
|
+
var _a2;
|
|
5560
|
+
this._updateScopesFilters(n, (_a2 = this._scopesBridge) == null ? void 0 : _a2.isLoading());
|
|
5502
5561
|
});
|
|
5503
5562
|
return () => {
|
|
5504
5563
|
sub == null ? void 0 : sub.unsubscribe();
|
|
5505
5564
|
};
|
|
5506
5565
|
};
|
|
5507
|
-
this._updateScopesFilters = (scopes) => {
|
|
5508
|
-
var _a
|
|
5509
|
-
const
|
|
5510
|
-
|
|
5511
|
-
|
|
5512
|
-
|
|
5566
|
+
this._updateScopesFilters = (scopes, areScopesLoading) => {
|
|
5567
|
+
var _a;
|
|
5568
|
+
const scopeFilters = getAdHocFiltersFromScopes(scopes);
|
|
5569
|
+
if (!scopeFilters.length) {
|
|
5570
|
+
this._overwriteScopes = areScopesLoading;
|
|
5571
|
+
return;
|
|
5572
|
+
}
|
|
5573
|
+
let finalFilters = scopeFilters;
|
|
5574
|
+
const scopeInjectedFilters = [];
|
|
5575
|
+
const remainingFilters = [];
|
|
5576
|
+
(_a = this.state.baseFilters) == null ? void 0 : _a.forEach((filter) => {
|
|
5577
|
+
if (filter.origin === "scopes" /* Scopes */) {
|
|
5578
|
+
scopeInjectedFilters.push(filter);
|
|
5579
|
+
} else {
|
|
5580
|
+
remainingFilters.push(filter);
|
|
5581
|
+
}
|
|
5582
|
+
});
|
|
5583
|
+
if (!this._overwriteScopes) {
|
|
5584
|
+
const editedScopeFilters = scopeInjectedFilters.filter((filter) => {
|
|
5585
|
+
var _a2;
|
|
5586
|
+
return (_a2 = filter.originalValue) == null ? void 0 : _a2.length;
|
|
5587
|
+
});
|
|
5588
|
+
const editedScopeFilterKeys = editedScopeFilters.map((filter) => filter.key);
|
|
5589
|
+
const scopeFilterKeys = scopeFilters.map((filter) => filter.key);
|
|
5590
|
+
finalFilters = [
|
|
5591
|
+
...editedScopeFilters.filter((filter) => scopeFilterKeys.includes(filter.key)),
|
|
5592
|
+
...scopeFilters.filter((filter) => !editedScopeFilterKeys.includes(filter.key))
|
|
5593
|
+
];
|
|
5594
|
+
this._overwriteScopes = false;
|
|
5595
|
+
}
|
|
5596
|
+
const newFilters = [...remainingFilters, ...finalFilters];
|
|
5513
5597
|
this.setState({ baseFilters: newFilters });
|
|
5514
5598
|
};
|
|
5515
5599
|
if (this.state.applyMode === "auto") {
|
|
@@ -5518,9 +5602,15 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
5518
5602
|
this.addActivationHandler(this._activationHandler);
|
|
5519
5603
|
}
|
|
5520
5604
|
setState(update) {
|
|
5605
|
+
var _a, _b, _c;
|
|
5521
5606
|
let filterExpressionChanged = false;
|
|
5522
|
-
if (update.filters && update.filters !== this.state.filters && !update.filterExpression) {
|
|
5523
|
-
update.
|
|
5607
|
+
if ((update.filters && update.filters !== this.state.filters || update.baseFilters && update.baseFilters !== this.state.baseFilters) && !update.filterExpression) {
|
|
5608
|
+
const filters = (_a = update.filters) != null ? _a : this.state.filters;
|
|
5609
|
+
const baseFilters = (_b = update.baseFilters) != null ? _b : this.state.baseFilters;
|
|
5610
|
+
update.filterExpression = renderExpression(this.state.expressionBuilder, [
|
|
5611
|
+
...(_c = baseFilters == null ? void 0 : baseFilters.filter((filter) => filter.origin)) != null ? _c : [],
|
|
5612
|
+
...filters != null ? filters : []
|
|
5613
|
+
]);
|
|
5524
5614
|
filterExpressionChanged = update.filterExpression !== this.state.filterExpression;
|
|
5525
5615
|
}
|
|
5526
5616
|
super.setState(update);
|
|
@@ -5529,10 +5619,14 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
5529
5619
|
}
|
|
5530
5620
|
}
|
|
5531
5621
|
updateFilters(filters, options) {
|
|
5622
|
+
var _a, _b;
|
|
5532
5623
|
let filterExpressionChanged = false;
|
|
5533
5624
|
let filterExpression = void 0;
|
|
5534
5625
|
if (filters && filters !== this.state.filters) {
|
|
5535
|
-
filterExpression = renderExpression(this.state.expressionBuilder,
|
|
5626
|
+
filterExpression = renderExpression(this.state.expressionBuilder, [
|
|
5627
|
+
...(_b = (_a = this.state.baseFilters) == null ? void 0 : _a.filter((filter) => filter.origin)) != null ? _b : [],
|
|
5628
|
+
...filters
|
|
5629
|
+
]);
|
|
5536
5630
|
filterExpressionChanged = filterExpression !== this.state.filterExpression;
|
|
5537
5631
|
}
|
|
5538
5632
|
super.setState({
|
|
@@ -5543,11 +5637,40 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
5543
5637
|
this.publishEvent(new SceneVariableValueChangedEvent(this), true);
|
|
5544
5638
|
}
|
|
5545
5639
|
}
|
|
5640
|
+
restoreOriginalFilter(filter) {
|
|
5641
|
+
var _a;
|
|
5642
|
+
const original = {
|
|
5643
|
+
originalValue: void 0
|
|
5644
|
+
};
|
|
5645
|
+
if ((_a = filter.originalValue) == null ? void 0 : _a.length) {
|
|
5646
|
+
original.value = filter.originalValue[0];
|
|
5647
|
+
original.values = filter.originalValue;
|
|
5648
|
+
original.valueLabels = filter.originalValue;
|
|
5649
|
+
}
|
|
5650
|
+
this._updateFilter(filter, original);
|
|
5651
|
+
}
|
|
5546
5652
|
getValue() {
|
|
5547
5653
|
return this.state.filterExpression;
|
|
5548
5654
|
}
|
|
5549
5655
|
_updateFilter(filter, update) {
|
|
5550
|
-
|
|
5656
|
+
var _a;
|
|
5657
|
+
const { baseFilters, filters, _wip } = this.state;
|
|
5658
|
+
if (filter.origin) {
|
|
5659
|
+
const currentValues = filter.values ? filter.values : [filter.value];
|
|
5660
|
+
const updateValues = update.values || (update.value ? [update.value] : void 0);
|
|
5661
|
+
const originalValueOverride = update.hasOwnProperty("originalValue");
|
|
5662
|
+
if (!originalValueOverride && updateValues && !filter.originalValue && !lodash.isEqual(currentValues, updateValues)) {
|
|
5663
|
+
update.originalValue = currentValues;
|
|
5664
|
+
}
|
|
5665
|
+
if (!originalValueOverride && lodash.isEqual(updateValues, filter.originalValue)) {
|
|
5666
|
+
update.originalValue = void 0;
|
|
5667
|
+
}
|
|
5668
|
+
const updatedBaseFilters = (_a = baseFilters == null ? void 0 : baseFilters.map((f) => {
|
|
5669
|
+
return f === filter ? __spreadValues$z(__spreadValues$z({}, f), update) : f;
|
|
5670
|
+
})) != null ? _a : [];
|
|
5671
|
+
this.setState({ baseFilters: updatedBaseFilters });
|
|
5672
|
+
return;
|
|
5673
|
+
}
|
|
5551
5674
|
if (filter === _wip) {
|
|
5552
5675
|
if ("value" in update && update["value"] !== "") {
|
|
5553
5676
|
this.setState({ filters: [...filters, __spreadValues$z(__spreadValues$z({}, _wip), update)], _wip: void 0 });
|
|
@@ -5575,6 +5698,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
5575
5698
|
}
|
|
5576
5699
|
}
|
|
5577
5700
|
_handleComboboxBackspace(filter) {
|
|
5701
|
+
var _a;
|
|
5578
5702
|
if (this.state.filters.length) {
|
|
5579
5703
|
let filterToForceIndex = this.state.filters.length - 1;
|
|
5580
5704
|
if (filter !== this.state._wip) {
|
|
@@ -5596,6 +5720,27 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
5596
5720
|
return [...acc, f];
|
|
5597
5721
|
}, [])
|
|
5598
5722
|
});
|
|
5723
|
+
} else if ((_a = this.state.baseFilters) == null ? void 0 : _a.length) {
|
|
5724
|
+
let filterToForceIndex = this.state.baseFilters.length - 1;
|
|
5725
|
+
if (filter !== this.state._wip) {
|
|
5726
|
+
filterToForceIndex = -1;
|
|
5727
|
+
}
|
|
5728
|
+
this.setState({
|
|
5729
|
+
baseFilters: this.state.baseFilters.reduce((acc, f, index) => {
|
|
5730
|
+
if (index === filterToForceIndex) {
|
|
5731
|
+
return [
|
|
5732
|
+
...acc,
|
|
5733
|
+
__spreadProps$n(__spreadValues$z({}, f), {
|
|
5734
|
+
forceEdit: true
|
|
5735
|
+
})
|
|
5736
|
+
];
|
|
5737
|
+
}
|
|
5738
|
+
if (f === filter) {
|
|
5739
|
+
return acc;
|
|
5740
|
+
}
|
|
5741
|
+
return [...acc, f];
|
|
5742
|
+
}, [])
|
|
5743
|
+
});
|
|
5599
5744
|
}
|
|
5600
5745
|
}
|
|
5601
5746
|
async _getKeys(currentKey) {
|
|
@@ -5634,7 +5779,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
5634
5779
|
return keys.map(toSelectableValue);
|
|
5635
5780
|
}
|
|
5636
5781
|
async _getValuesFor(filter) {
|
|
5637
|
-
var _a, _b, _c, _d;
|
|
5782
|
+
var _a, _b, _c, _d, _e;
|
|
5638
5783
|
const override = await ((_b = (_a = this.state).getTagValuesProvider) == null ? void 0 : _b.call(_a, this, filter));
|
|
5639
5784
|
if (override && override.replace) {
|
|
5640
5785
|
return dataFromResponse(override.values).map(toSelectableValue);
|
|
@@ -5643,15 +5788,26 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
5643
5788
|
if (!ds || !ds.getTagValues) {
|
|
5644
5789
|
return [];
|
|
5645
5790
|
}
|
|
5646
|
-
const
|
|
5791
|
+
const filteredBaseFilters = (_d = (_c = this.state.baseFilters) == null ? void 0 : _c.filter((f) => f.origin && f.key !== filter.key)) != null ? _d : [];
|
|
5792
|
+
const otherFilters = this.state.filters.filter((f) => f.key !== filter.key).concat(filteredBaseFilters);
|
|
5647
5793
|
const timeRange = sceneGraph.getTimeRange(this).state.value;
|
|
5648
5794
|
const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : void 0;
|
|
5795
|
+
let scopes = (_e = this._scopesBridge) == null ? void 0 : _e.getValue();
|
|
5796
|
+
if (filter.origin === "scopes" /* Scopes */) {
|
|
5797
|
+
scopes = scopes == null ? void 0 : scopes.map((scope) => {
|
|
5798
|
+
return __spreadProps$n(__spreadValues$z({}, scope), {
|
|
5799
|
+
spec: __spreadProps$n(__spreadValues$z({}, scope.spec), {
|
|
5800
|
+
filters: scope.spec.filters.filter((f) => f.key !== filter.key)
|
|
5801
|
+
})
|
|
5802
|
+
});
|
|
5803
|
+
});
|
|
5804
|
+
}
|
|
5649
5805
|
const response = await ds.getTagValues(__spreadValues$z({
|
|
5650
5806
|
key: filter.key,
|
|
5651
5807
|
filters: otherFilters,
|
|
5652
5808
|
timeRange,
|
|
5653
5809
|
queries,
|
|
5654
|
-
scopes
|
|
5810
|
+
scopes
|
|
5655
5811
|
}, getEnrichedFiltersRequest(this)));
|
|
5656
5812
|
if (responseHasError(response)) {
|
|
5657
5813
|
this.setState({ error: response.error.message });
|
|
@@ -6370,6 +6526,15 @@ function escapeUrlCommaDelimiters(value) {
|
|
|
6370
6526
|
}
|
|
6371
6527
|
return /,/g[Symbol.replace](value, "__gfc__");
|
|
6372
6528
|
}
|
|
6529
|
+
function escapeUrlHashDelimiters(value) {
|
|
6530
|
+
if (value === null || value === void 0) {
|
|
6531
|
+
return "";
|
|
6532
|
+
}
|
|
6533
|
+
return /#/g[Symbol.replace](value, "__gfh__");
|
|
6534
|
+
}
|
|
6535
|
+
function escapeInjectedFilterUrlDelimiters(value) {
|
|
6536
|
+
return escapeUrlHashDelimiters(escapeUrlPipeDelimiters(value));
|
|
6537
|
+
}
|
|
6373
6538
|
function escapeURLDelimiters(value) {
|
|
6374
6539
|
return escapeUrlCommaDelimiters(escapeUrlPipeDelimiters(value));
|
|
6375
6540
|
}
|
|
@@ -6379,6 +6544,7 @@ function unescapeUrlDelimiters(value) {
|
|
|
6379
6544
|
}
|
|
6380
6545
|
value = /__gfp__/g[Symbol.replace](value, "|");
|
|
6381
6546
|
value = /__gfc__/g[Symbol.replace](value, ",");
|
|
6547
|
+
value = /__gfh__/g[Symbol.replace](value, "#");
|
|
6382
6548
|
return value;
|
|
6383
6549
|
}
|
|
6384
6550
|
function toUrlCommaDelimitedString(key, label) {
|
|
@@ -10824,11 +10990,7 @@ async function getExploreURL(data, model, timeRange, transform) {
|
|
|
10824
10990
|
return (_a2 = transform == null ? void 0 : transform(q)) != null ? _a2 : q;
|
|
10825
10991
|
});
|
|
10826
10992
|
const queries = interpolatedQueries != null ? interpolatedQueries : [];
|
|
10827
|
-
const
|
|
10828
|
-
var _a2;
|
|
10829
|
-
return (_a2 = q.datasource) == null ? void 0 : _a2.uid;
|
|
10830
|
-
})).size > 1;
|
|
10831
|
-
let datasource = hasMixedDatasources ? "-- Mixed --" : (_d = (_c = queries.find((query) => {
|
|
10993
|
+
const datasource = (_d = (_c = queries.find((query) => {
|
|
10832
10994
|
var _a2;
|
|
10833
10995
|
return !!((_a2 = query.datasource) == null ? void 0 : _a2.uid);
|
|
10834
10996
|
})) == null ? void 0 : _c.datasource) == null ? void 0 : _d.uid;
|
|
@@ -10858,12 +11020,10 @@ function VizPanelExploreButtonComponent({ model }) {
|
|
|
10858
11020
|
const { options } = model.useState();
|
|
10859
11021
|
const { data } = sceneGraph.getData(model).useState();
|
|
10860
11022
|
const { from, to } = sceneGraph.getTimeRange(model).useState();
|
|
10861
|
-
const { value: exploreLink } = reactUse.useAsync(
|
|
10862
|
-
|
|
10863
|
-
|
|
10864
|
-
|
|
10865
|
-
return getExploreURL(data, model, { from, to }, options.transform);
|
|
10866
|
-
}, [data, model, from, to]);
|
|
11023
|
+
const { value: exploreLink } = reactUse.useAsync(
|
|
11024
|
+
async () => data ? getExploreURL(data, model, { from, to }, options.transform) : "",
|
|
11025
|
+
[data, model, from, to]
|
|
11026
|
+
);
|
|
10867
11027
|
const returnToPrevious = runtime.useReturnToPrevious();
|
|
10868
11028
|
if (exploreLink) {
|
|
10869
11029
|
return /* @__PURE__ */ React__default["default"].createElement(ui.LinkButton, {
|