Last active
October 24, 2017 10:19
-
-
Save IftekherSunny/f1e694fcc730938cfdc6a361d7063a06 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Element store | |
const elementStore = class ElementStore { | |
// set initial state | |
@observable path = null | |
@observable visible = false | |
@observable list = {} | |
// create a new instance of element store | |
constructor() { | |
this.list = sortElementsByName(elements) | |
} | |
// dynamically handle element events | |
handle(handlerName, {path}) { | |
switch (handlerName) { | |
case HIDE_ELEMENTS: | |
this.on(HIDE_ELEMENTS, store => console.log(store)); | |
break; | |
case SHOW_ELEMENTS: | |
this.on(SHOW_ELEMENTS, (store, {path}) => console.log(store)); | |
break; | |
case "UPDATE_RECENT_USED_ELEMENT_TIMESTAMP": | |
this.on("UPDATE_RECENT_USED_ELEMENT_TIMESTAMP", updateRecentUsedTimestamp); | |
break; | |
} | |
} | |
// get elements list. | |
// also dynamically bind get method for fetching element property. | |
getList() { | |
return _.map(this.list, (element) => { | |
element.get = (arg) => _.pick(element, [arg])[arg]; | |
return element; | |
}); | |
} | |
} | |
// instance of element store | |
let store = new elementStore(); | |
/** | |
* Uses proxy for the element store. | |
**/ | |
export default new Proxy(store, { | |
get(target, prop) { | |
if(target[prop] === undefined) { | |
return (...args) => _.map(elements, (element) => { | |
let e = _.pick(element, [args[0]]) | |
// dynamically method binding... | |
e.get = (arg) => _.pick(element, [arg])[arg]; | |
return e; | |
}); | |
} else { | |
return target[prop]; | |
} | |
}, | |
set(target, prop) { | |
// set call handeler.... | |
} | |
}); | |
export default proxyStore; | |
/** | |
* example: | |
* | |
* let store = new ElementStore(); | |
* store.get('groups'); // undefined function error | |
* | |
* | |
* let proxyElementStore = proxyStore; | |
* proxyElementStore.get('groups'); // returns array of elements data. | |
* | |
**/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment