96 lines
2.7 KiB
TypeScript
96 lines
2.7 KiB
TypeScript
// app-demo.ts - petite-vue application using dummy localStorage backend
|
|
|
|
import { createApp } from 'petite-vue'
|
|
import { Config, register, handle, createRandString, sleep} from './common'
|
|
|
|
export const pvapp = {
|
|
run(conf: Config, components: any[]) {
|
|
appdata.conf = conf
|
|
for (const comp of components) {
|
|
appdata[comp.name] = comp
|
|
}
|
|
initData()
|
|
createApp(appdata).mount()
|
|
}
|
|
}
|
|
|
|
const appdata = {
|
|
$delimiters: ['{|', '|}'],
|
|
conf: {} as Config,
|
|
components: {},
|
|
register,
|
|
sendMsg
|
|
}
|
|
|
|
const store_prefix = 'api.storage'
|
|
|
|
// methods
|
|
|
|
async function sendMsg(basemsg: string[], data: any) {
|
|
await sleep(50)
|
|
const [ domain, action, class_, item ] = basemsg
|
|
switch (action) {
|
|
case 'data':
|
|
handle(this, store(domain, class_, item, data))
|
|
break
|
|
case 'delete':
|
|
handle(this, remove(domain, class_, item))
|
|
break
|
|
case 'query':
|
|
handle(this, query(domain, class_, item))
|
|
}
|
|
}
|
|
|
|
// functions
|
|
|
|
function initData() {
|
|
const data = { firstname: 'John', lastname: 'Doe', email: 'jd@example.org' }
|
|
store('demo', 'person', 'wrdlpr', data)
|
|
}
|
|
|
|
function store(domain, class_, item: string, data: any) {
|
|
if (!item) {
|
|
item = createRandString(1)
|
|
}
|
|
console.log('store - item: ', item, ', data: ', data)
|
|
const key = [store_prefix, domain, class_].join('.')
|
|
const rawdata = localStorage.getItem(key)
|
|
const alldata = rawdata ? JSON.parse(rawdata) : {}
|
|
const exists = alldata[item]
|
|
alldata[item] = data
|
|
localStorage.setItem(key, JSON.stringify(alldata))
|
|
const response = { RC: exists ? 3 : 2 }
|
|
const path = [domain, 'response', class_, item].join('/')
|
|
return { path: path, payload: JSON.stringify(response) }
|
|
}
|
|
|
|
function remove(domain, class_, item: string) {
|
|
const key = [store_prefix, domain, class_].join('.')
|
|
const rawdata = localStorage.getItem(key)
|
|
const alldata = rawdata ? JSON.parse(rawdata) : {}
|
|
delete alldata[item]
|
|
localStorage.setItem(key, JSON.stringify(alldata))
|
|
const response = { RC: 3, action: 'delete' }
|
|
const path = [domain, 'response', class_, item].join('/')
|
|
return { path: path, payload: JSON.stringify(response) }
|
|
}
|
|
|
|
function query(domain, class_, item: string) {
|
|
const key = [store_prefix, domain, class_].join('.')
|
|
const rawdata = localStorage.getItem(key)
|
|
const alldata = rawdata ? JSON.parse(rawdata) : {}
|
|
if (!item) {
|
|
const res = []
|
|
for (const key in alldata) {
|
|
const data = alldata[key]
|
|
data._item = key
|
|
res.push(JSON.stringify(data))
|
|
}
|
|
const path = [domain, 'list', class_].join('/')
|
|
return { path: path, payload: res.join('\n') }
|
|
}
|
|
const path = [domain, 'data', class_, item].join('/')
|
|
const payload = alldata[item] || {}
|
|
console.log('query - key: ', key, ', payload: ', payload)
|
|
return { path: path, payload: JSON.stringify(payload) }
|
|
}
|