export const FormObjToJSON = function(o, fn){ let obj = Object.assign({}, o); Object.keys(obj).map((key) => { let t = obj[key]; if("label" in t && "type" in t && "default" in t && "value" in t){ if(typeof fn === "function"){ fn(obj, key); } else { obj[key] = obj[key].value; } } else { obj[key] = FormObjToJSON(obj[key], fn); } }); return obj }; export function createFormBackend(backend_available, backend_data){ if(!backend_available) return {}; else if(!backend_available[backend_data.type]) return {}; let template = JSON.parse(JSON.stringify(backend_available[backend_data.type])); for(let key in backend_data){ if(key in template){ template[key].value = backend_data[key]; template[key].enabled = true; } else { // create a form object if data isn't available in the template let obj = {}; obj[key] = { label: key, type: "text", value: null, default: backend_data[key] }; template = Object.assign(obj, template); } if(key === "label"){ template[key].placeholder = "Name as shown on the login screen."; template[key].value = backend_data[key]; template[key].enabled = true; } else if(key === "type"){ template[key].enabled = true; } else if(key === "advanced"){ template[key].enabled = true; } } let obj = {}; obj[backend_data.type] = template; return obj; } /* * return a new list of autocompletion candidates considering the current input */ export function autocomplete(values, list) { if(values.length === 0) return list; let candidates_input = [], candidates_output = []; for(let i=0; i 1) { return candidates_input.map((candidate) => { return candidate.join(", "); }); } return candidates_output.map((candidate, idx) => { return candidates_input[0] .concat(candidate) .join(", ") .replace(/\,\s?$/, ""); }); }