瀏覽代碼

fix: 跳转Chart时支持携带控制器参数

zhengjie 7 月之前
父節點
當前提交
90bad0b02c
共有 3 個文件被更改,包括 38 次插入27 次删除
  1. 0 1
      src/app/components/ChartEditor.tsx
  2. 35 23
      src/app/hooks/useChartInteractions.ts
  3. 3 3
      src/app/utils/internalChartHelper.ts

+ 0 - 1
src/app/components/ChartEditor.tsx

@@ -319,7 +319,6 @@ export const ChartEditor: FC<ChartEditorProps> = ({
     const finalChartConfig = clearRuntimeDateLevelFieldsInChartConfig(
       transferChartConfigs(targetChartConfig, shadowChartConfig || chartConfig),
     );
-
     const computedFields = updateBy(dataview?.computedFields || [], draft => {
       draft.forEach((v, i) => {
         delete draft[i][RUNTIME_DATE_LEVEL_KEY];

+ 35 - 23
src/app/hooks/useChartInteractions.ts

@@ -142,6 +142,34 @@ const useChartInteractions = (props: {
     }
   };
 
+  const addGlobalVariables = (
+    clickFilters,
+    globalFilters
+  ) => {
+    // 根据查询变量(控制器),对点击对象中的字段进行过滤 by zj
+    const queryVars = clickFilters.map(v => v.column);
+    const crossQueryVariables = globalFilters?.filter(f => {
+        if(queryVars.join(',').indexOf(f.column.join(','))<0) {
+          return true
+        }
+        return false
+    }) || [];
+    // 如果存在没有包含的查询变量,则获取查询(控制器)变量,确保控制器参数可传递 by zj
+    if(crossQueryVariables?.length>0) {
+      const crossQueryVars = crossQueryVariables.map(v => {
+        return {
+          column: v.column?.[0],
+          values: v.values,
+          sqlOperator: v.sqlOperator,
+          isMatchByName: true
+        }
+      });
+      crossQueryVars.forEach(v => {
+        clickFilters.push(v);
+      })
+    }
+  };
+
   const handleDrillThroughEvent = useCallback(
     ({
       drillOption,
@@ -204,6 +232,10 @@ const useChartInteractions = (props: {
             const relId = rule?.[rule.category!]?.relId;
 
             if (rule.category === InteractionCategory.JumpToChart) {
+
+              // 添加全局变量
+              addGlobalVariables(clickFilters, globalFilters);
+
               const urlFilters = getJumpOperationFiltersByInteractionRule(
                 clickFilters,
                 sourceChartFilters,
@@ -237,29 +269,9 @@ const useChartInteractions = (props: {
                 getVariablesByInteractionRule(queryVariables, rule),
               );
 
-              // 根据查询变量(控制器),对点击对象中的字段进行过滤 by zj
-              const queryVars = clickFilters.map(v => v.column);
-              const crossQueryVariables = globalFilters?.filter(f => {
-                  if(queryVars.join(',').indexOf(f.column.join(','))<0) {
-                    return true
-                  }
-                  return false
-              }) || [];
-              // 如果存在没有包含的查询变量,则获取查询(控制器)变量,确保控制器参数可传递 by zj
-              if(crossQueryVariables?.length>0) {
-                const crossQueryVars = crossQueryVariables.map(v => {
-                  return {
-                    column: v.column?.[0],
-                    values: v.values,
-                    sqlOperator: v.sqlOperator,
-                    isMatchByName: true
-                  }
-                });
-                crossQueryVars.forEach(v => {
-                  clickFilters.push(v);
-                })
-              }
-
+              // 添加全局变量
+              addGlobalVariables(clickFilters, globalFilters);
+              debugger
               const urlFilters = getJumpFiltersByInteractionRule(
                 clickFilters,
                 sourceChartNonAggFilters,

+ 3 - 3
src/app/utils/internalChartHelper.ts

@@ -820,9 +820,9 @@ export const getJumpFiltersByInteractionRule = (
       if (isEmpty(f)) {
         return null;
       }
-      if (f?.sqlOperator !== FilterSqlOperator.In) {
-        return null;
-      }
+      // if (f?.sqlOperator !== FilterSqlOperator.In) {
+      //   return null;
+      // }
       const jumpRule = rule?.[rule.category!] as
         | JumpToDashboardRule
         | JumpToUrlRule;