mframejs
Version:
simple framework
98 lines (90 loc) • 3.36 kB
text/typescript
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);
}
}
}