UNPKG

@appscode/ui-builder

Version:
89 lines (78 loc) 2.23 kB
import { mapGetters } from "vuex"; import { getValue } from "@/plugins/json-ref-resolver"; export default { props: { individualItemDisabilityChecker: { type: String, default: null, }, contextObject: { type: Object, default: () => ({}), }, }, data() { return { individualItemDisabilityVerdict: [], }; }, computed: { ...mapGetters({ functions: "wizard/functions", }), }, watch: { individualItemDisabilityChecker: { immediate: true, async handler(n) { if (n) { await this.calculateIndividualItemDisabilityVerdict(); } }, }, individualItemsArray: { deep: true, immediate: true, async handler() { await this.calculateIndividualItemDisabilityVerdict(); }, }, }, methods: { async calculateIndividualItemDisabilityVerdict() { // parse out the function name const funcName = this.individualItemDisabilityChecker && this.individualItemDisabilityChecker.split("::").shift(); if (this.individualItemsArray) { const promiseArray = this.individualItemsArray.map((item) => { return (funcName && this.performFuncCall(funcName, item)) || false; }); this.individualItemDisabilityVerdict = await Promise.all(promiseArray); } }, async performFuncCall(funcName, itemCtx) { // split to separate function name and parameters try { const split = funcName.split("|"); const functionName = split.shift(); const parameters = [...split]; const func = getValue(this.functions, functionName); // execute the function mentioned in ui json, if not declared in functions js file, then throw error if (func === undefined) throw new Error( `function "${functionName}" not declared in your functions.js file` ); else { const resp = await func( { ...this.contextObject, itemCtx }, // pass item context along with the normal context ...parameters ); return resp; } } catch (e) { console.log(e); } }, }, };