Jelajahi Sumber

use converter function for aggrid and table

Falko Schindler 1 tahun lalu
induk
melakukan
ac9180c149

+ 1 - 1
nicegui/elements/aggrid.js

@@ -17,7 +17,7 @@ export default {
           this.gridOptions.columnDefs[column].cellRenderer = (params) => (params.value ? params.value : "");
         }
       }
-      convertDynamicProperties(this.gridOptions);
+      convertDynamicProperties(this.gridOptions, true);
 
       // Code for CheckboxRenderer https://blog.ag-grid.com/binding-boolean-values-to-checkboxes-in-ag-grid/
       function CheckboxRenderer() {}

+ 4 - 13
nicegui/elements/table.js

@@ -1,3 +1,5 @@
+import { convertDynamicProperties } from "../../static/utils/dynamic_properties.js";
+
 export default {
   template: `
     <q-table
@@ -15,19 +17,8 @@ export default {
   },
   computed: {
     convertedColumns() {
-      return this.columns.map((column) => {
-        for (const attr in column) {
-          if (attr.startsWith(":")) {
-            try {
-              column[attr.slice(1)] = new Function("return " + column[attr])();
-              delete column[attr];
-            } catch (e) {
-              console.error(`Error while converting ${attr} attribute to function:`, e);
-            }
-          }
-        }
-        return column;
-      });
+      this.columns.forEach((column) => convertDynamicProperties(column, false));
+      return this.columns;
     },
   },
 };

+ 7 - 3
nicegui/static/utils/dynamic_properties.js

@@ -1,9 +1,11 @@
-export function convertDynamicProperties(obj) {
+export function convertDynamicProperties(obj, recursive) {
   if (typeof obj !== "object" || obj === null) {
     return;
   }
   if (Array.isArray(obj)) {
-    obj.forEach((v) => convertDynamicProperties(v));
+    if (recursive) {
+      obj.forEach((v) => convertDynamicProperties(v, true));
+    }
     return;
   }
   for (const [attr, value] of Object.entries(obj)) {
@@ -15,7 +17,9 @@ export function convertDynamicProperties(obj) {
         console.error(`Error while converting ${attr} attribute to function:`, e);
       }
     } else {
-      convertDynamicProperties(value);
+      if (recursive) {
+        convertDynamicProperties(value, true);
+      }
     }
   }
 }