JSFiddle - React, Tailwind, and code Playground
Registering and executing functions
by tonytlwu
JavaScript
var registeredFunctions= {};
// Function registration, i.e. Fliplet.Navigate.registerFunction()
function registerFunction(name, fn) {
registeredFunctions[name] = fn;
}
// Not used
function generatePayload(payloadStr) {
var regex = /^this\.|\[.+$/;
var result;
try {
result = eval(payloadStr);
} catch(e) {
console.error(`${payloadStr} is not a valid variable`)
}
return result;
}
// Function execution, i.e. Fliplet.Navigate.runFunction()
function runFunction(fnName, context = {}) {
if (!fnName) {
throw new Error('Function name must be provided');
}
// var fnName = 'sendEmail'; // Extracted from jsString
// var payload = 'this.fields.to, "Email subject here"'.split(',').map(param => param.trim()); // Extracted from jsString
var fn = registeredFunctions[fnName];
if (typeof fn !== 'function') {
throw new Error(`${fnName} is not a registered function. You must use Fliplet.Navigate.registerFunction() to register the function before calling it.`);
}
return fn.bind(context).call(this);
// fn.bind(context).call(this, ...payload.map(param => generatePayload.bind(context).call(this, param)));
}
// Function registered in custom code
registerFunction('sendEmail', function() {
// Expects "fields" to be an available property in this
console.log('Available variables', this);
});
// JavaScript calling string provided by Studio user in action provider
var jsString = 'sendEmail';
// Executing function from the form when user clicks on button
runFunction(jsString, {
fields: { to: '[email protected]' }
});