UNPKG

mframejs

Version:
98 lines (90 loc) 3.36 kB
import { getCorrectContext } from './contextOfObject'; import { Cache } from '../utils/exported'; import { IBindingContext } from '../interface/exported'; /** * simple function for setting value with token key * */ export function setValue(_class: IBindingContext, key: string, value: any) { _class = getCorrectContext(key, _class); _class = _class.__bindingContext ? _class.$context : _class; // types const keys = Cache.keyMaps.getCreate(key); try { let ref: any; // more then 1, then its array if (keys.length > 1) { keys.forEach((prop: any, i: number) => { if (prop) { if (i === keys.length - 1) { ref[prop] = value; } else { if (i === 0) { ref = _class[prop]; } else { ref = ref[prop]; } } } }); } else { _class[key] = value; } } catch (e) { // if key is not found, we will try and build it // first we make a object to what we want to build try { console.warn('key not found, rebuilding', key); let newObject = {}; let ref: any; keys.forEach((prop: any, i: number) => { if (prop) { if (i === keys.length - 1) { if (i === 0) { newObject[prop] = {}; ref = newObject[prop]; } else { ref[prop] = value; } } else { if (i === 0) { newObject[prop] = {}; ref = newObject[prop]; } else { ref[prop] = {}; ref = ref[prop]; } } } }); // not we add it to class // let refx = newObject; let classRef = _class; keys.forEach((prop: any, i: number) => { if (prop) { if (i === keys.length - 1) { if (!classRef[prop]) { classRef[prop] = newObject[prop]; } } else { if (i === 0) { if (!classRef[prop]) { classRef[prop] = newObject[prop]; } newObject = newObject[prop]; classRef = classRef[prop]; } else { if (!classRef[prop]) { classRef[prop] = newObject[prop]; } newObject = newObject[prop]; classRef = classRef[prop]; } } } }); } catch (e) { console.error('key not found', key); } } }