feat: parse tab expressions

This commit is contained in:
Fine 2023-12-14 11:15:14 +08:00
parent 762b3e8894
commit 1954c0609c
2 changed files with 32 additions and 6 deletions

View File

@ -39,11 +39,11 @@ limitations under the License. -->
const originConfig = dashboardStore.selectedGrid; const originConfig = dashboardStore.selectedGrid;
const expressions = reactive<{ [key: string]: string }>({}); const expressions = reactive<{ [key: string]: string }>({});
const widgetTabs = computed(() => const widgetTabs = computed(() =>
dashboardStore.selectedGrid.children.filter((child: any[]) => (dashboardStore.selectedGrid.children || []).filter((child: any) =>
child.find((item: any) => item.type === WidgetType.Widget), child.children.find((item: any) => item.type === WidgetType.Widget),
), ),
); );
console.log(widgetTabs.value);
for (const child of originConfig.children || []) { for (const child of originConfig.children || []) {
expressions[child.name] = child.expression || ""; expressions[child.name] = child.expression || "";
} }

View File

@ -127,7 +127,7 @@ limitations under the License. -->
import type { LayoutConfig } from "@/types/dashboard"; import type { LayoutConfig } from "@/types/dashboard";
import { useDashboardStore } from "@/store/modules/dashboard"; import { useDashboardStore } from "@/store/modules/dashboard";
import controls from "./tab"; import controls from "./tab";
import { dragIgnoreFrom, WidgetType } from "../data"; import { dragIgnoreFrom, WidgetType, ListEntity } from "../data";
import copy from "@/utils/copy"; import copy from "@/utils/copy";
import { useExpressionsQueryProcessor } from "@/hooks/useExpressionsProcessor"; import { useExpressionsQueryProcessor } from "@/hooks/useExpressionsProcessor";
@ -250,11 +250,28 @@ limitations under the License. -->
async function queryExpressions() { async function queryExpressions() {
const tabsProps = props.data; const tabsProps = props.data;
console.log(tabsProps);
const metrics = []; const metrics = [];
const listMetrics = [];
for (const child of tabsProps.children || []) { for (const child of tabsProps.children || []) {
child.expression && metrics.push(child.expression); let isList = false;
if (child.expression) {
const expList = parseTabsExpression(child.expression);
for (const exp of expList) {
const item = child.children.find((d: any) => d.expressions.includes(exp));
if (item && item.graph && ListEntity.includes(item.graph.type)) {
isList = true;
}
}
if (isList) {
listMetrics.push(child.expression);
} else {
metrics.push(child.expression);
}
}
} }
if (!metrics.length) { if (![...metrics, ...listMetrics].length) {
return; return;
} }
const params: { [key: string]: any } = (await useExpressionsQueryProcessor({ metrics })) || {}; const params: { [key: string]: any } = (await useExpressionsQueryProcessor({ metrics })) || {};
@ -271,6 +288,15 @@ limitations under the License. -->
dashboardStore.setConfigs(tabsProps); dashboardStore.setConfigs(tabsProps);
} }
function parseTabsExpression(inputString: string) {
const regex = /is_present\s*\(\s*([^,)\s]+)\s*,\s*([^,)\s]+)\s*\)/;
const match = inputString.match(regex);
const result = match ? [match[1], match[2]] : [];
return result;
}
watch( watch(
() => (props.data.children || []).map((d: any) => d.expression), () => (props.data.children || []).map((d: any) => d.expression),
(old: string[], data: string[]) => { (old: string[], data: string[]) => {