@7pound/westore
Version:
miniprogram-westore
46 lines (39 loc) • 1.01 kB
text/typescript
type IInstance = {
data: AnyObject
setData: (data) => void
}
const parseData = (store: WeStore) => {
const data: AnyObject = {}
if (Array.isArray(store.data)) return store.data
if (typeof store.data !== 'object') return store.data
Object.keys(store.data).forEach(key => {
const v = store.data[key]
data[key] = typeof v === 'function' ? v.apply(store) : v
})
return data
}
class WeStore {
data: AnyObject
pages: Map<IInstance, string>
constructor() {
this.data = {}
this.pages = new Map()
}
bind(instance: IInstance, name: string) {
if (!name) throw new Error('name is undefined')
if (this.pages.has(instance) === false) {
this.pages.set(instance, name)
instance.setData({[name]: parseData(this)})
}
}
unBind(instance: IInstance) {
this.pages.delete(instance)
}
update() {
const data = parseData(this)
this.pages.forEach((value, instance) => {
instance.setData({[value]: data})
})
}
}
export default WeStore