@appscode/ui-builder
Version:
## Motivation
89 lines (78 loc) • 2.23 kB
JavaScript
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);
}
},
},
};