UNPKG

@fto-consult/expo-ui

Version:

Bibliothèque de composants UI Expo,react-native

109 lines (97 loc) 4.43 kB
import {isObj,isNonNullString,isFunction,defaultObj,extendObj,defaultBool} from "$cutils"; import APP from "$capp/instance"; import {observable,addObserver,isObservable} from "$observable"; let MANAGER = { forms : { },///les actions de formulaire actions : { }, }; if(!isObj(APP.FormsManager)){ Object.defineProperties(APP,{ FormsManager : { value : MANAGER, writable:false, override : false } }); observable(APP.FormsManager); addObserver(APP.FormsManager); const fManager = APP.FormsManager; APP.FormsManager.on("mount",(formName,formObject)=>{ formObject._fields = defaultObj(formObject._fields); formObject._actions= defaultObj(formObject._actions); APP.FormsManager.forms[formName] = formObject; APP.trigger("MOUNT_FORM",formName); }); fManager.on("unmount",(formName)=>{ delete APP.FormsManager.forms[formName]; }); fManager.on("registerField",(fieldName,formName,fieldObj)=>{ if(fieldObj && isObservable(fieldObj)){ APP.FormsManager.forms[formName] = defaultObj(APP.FormsManager.forms[formName]); APP.FormsManager.forms[formName]._fields = defaultObj(APP.FormsManager.forms[formName]._fields); APP.FormsManager.forms[formName]._fields[fieldName] = fieldObj; let form = APP.FormsManager.forms[formName]; let formField = form._fields[fieldName]; if(isFunction(formField.onRegister)) formField.onRegister(fieldName,fieldObj); } }); fManager.on("unregisterField",(fieldName,formName)=>{ if(isNonNullString(fieldName) && isNonNullString(formName)){ APP.FormsManager.forms[formName] = defaultObj(APP.FormsManager.forms[formName]); APP.FormsManager.forms[formName]._fields = defaultObj(APP.FormsManager.forms[formName]._fields); delete APP.FormsManager.forms[formName]._fields[fieldName]; } }); fManager.on("mountAction",(formName,actionObj)=>{ if(!isNonNullString(formName) || !isObj(actionObj)) { console.error("MSForm Action, l'action, nom du formulaire non définit ",formName,actionObj) return; } APP.FormsManager.actions = defaultObj(APP.FormsManager.actions); APP.FormsManager.actions[formName] = defaultObj(APP.FormsManager.actions[formName]); APP.FormsManager.actions[formName][actionObj.getId()] = actionObj; }); fManager.on("unmountAction",(formName,actionId)=>{ if(!isNonNullString(formName) || !isNonNullString(actionId)) return; if(!isObj(APP.FormsManager.actions) || !isObj(APP.FormsManager.actions[formName])) return; delete APP.FormsManager.actions[formName][actionId] }) } else { MANAGER = APP.FormsManager; } export default MANAGER; export const getFormInstance = (formName) =>{ return MANAGER.forms[formName]; } export const getForm = getFormInstance; export const getFormFields = (formName)=>{ if(!isNonNullString(formName)) return {}; if(!isObj(APP.FormsManager.forms[formName]) || !isObj(APP.FormsManager.forms[formName]._fields))return {}; return APP.FormsManager.forms[formName]._fields; } /*** retourne l'instance d'un champ à partir du nom du formulaire et celui du champ en question * @param : formName : le nom de la form dans lequel est définit le cham * @parm f: string field name : le nom du champ à récupérer */ export const getFormField = (formName,fieldName)=>{ if(!isNonNullString(formName)||!isNonNullString(fieldName)) return null; let fields = getFormFields(formName); if(isObj(fields)){ return fields[fieldName]; } return null; } export const getFormData = (formName)=>{ const instance = getForm(formName); if(instance) return instance.getData(); return {}; } export const getActions = (formName) =>{ if(!isNonNullString(formName)) return {}; if(!isObj(APP.FormsManager.actions)) return {} ; return defaultObj(APP.FormsManager.actions[formName]); } export const warning = (payload,msg) => {if(!isNonNullString(msg)) msg = "⚠ Forms, Missing field name";else msg = "⚠ Forms, "+msg;console.warn(`⚠ Forms, Missing field name: ${payload}`);} export {MANAGER as Manager,MANAGER}