Procházet zdrojové kódy

final filtering for key value array

Ivan Galakhov před 4 roky
rodič
revize
4c325b0080

+ 3 - 4
dashboard/src/components/form-refactor/PorterFormContextProvider.tsx

@@ -9,6 +9,7 @@ import {
 } from "./types";
 import { ShowIf, ShowIfAnd, ShowIfNot, ShowIfOr } from "../../shared/types";
 import { getFinalVariablesForStringInput } from "./field-components/Input";
+import { getFinalVariablesForKeyValueArray } from "./field-components/KeyValueArray";
 
 interface Props {
   rawFormData: PorterFormData;
@@ -287,6 +288,7 @@ export const PorterFormContextProvider: React.FC<Props> = (props) => {
     ];
     const finalFunctions: Record<string, GetFinalVariablesFunction> = {
       "string-input": getFinalVariablesForStringInput,
+      "key-value-array": getFinalVariablesForKeyValueArray,
     };
 
     formData.tabs.map((tab) =>
@@ -297,16 +299,13 @@ export const PorterFormContextProvider: React.FC<Props> = (props) => {
               finalFunctions[field.type](
                 state.variables,
                 field,
-                state.components[field.id]
+                state.components[field.id].state
               )
             );
         })
       )
     );
 
-    console.log("??");
-    console.log(state.variables);
-
     props.onSubmit(Object.assign.apply({}, varList));
   };
 

+ 25 - 1
dashboard/src/components/form-refactor/field-components/KeyValueArray.tsx

@@ -323,7 +323,31 @@ export const getFinalVariablesForKeyValueArray: GetFinalVariablesFunction = (
   props: KeyValueArrayField,
   state: KeyValueArrayFieldState
 ) => {
-  return {};
+  let obj = {} as any;
+  const rg = /(?:^|[^\\])(\\n)/g;
+  const fixNewlines = (s: string) => {
+    while (rg.test(s)) {
+      s = s.replace(rg, (str) => {
+        if (str.length == 2) return "\n";
+        if (str[0] != "\\") return str[0] + "\n";
+        return "\\n";
+      });
+    }
+    return s;
+  };
+  const isNumber = (s: string) => {
+    return !isNaN(!s ? NaN : Number(String(s).trim()));
+  };
+  state.values.forEach((entry: any, i: number) => {
+    if (isNumber(entry.value)) {
+      obj[entry.key] = entry.value;
+    } else {
+      obj[entry.key] = fixNewlines(entry.value);
+    }
+  });
+  return {
+    [props.variable]: obj,
+  };
 };
 
 export default KeyValueArray;