budget-go/frontend/js/lib/storage.js

46 lines
1.1 KiB
JavaScript

const saveStorage = (key, data, name) => {
if (name) {
const hash = window.location.hash
const values = hash.split('?')
const componant = values[0]
const query = values[1] ?? ''
const search = new URLSearchParams(query)
const params = {}
for (const sKey of search.keys()) {
if (name === 'filters' && sKey.includes('__')) {
continue
}
params[sKey] = search.get(sKey)
}
if (name === 'filters') {
for (const filter of data) {
params[`${filter.key}__${filter.comparator}`] = filter.value
}
} else {
params[name] = data
}
history.pushState({}, '', `/${componant}?${new URLSearchParams(params)}`)
}
localStorage.setItem(key, JSON.stringify(data))
}
const getStorage = (key, defaultValue) => {
try {
const value = JSON.parse(localStorage.getItem(key))
return value === null ? defaultValue : value
} catch {
return defaultValue
}
}
const removeStorage = function (key) {
localStorage.removeItem(key)
}
export {getStorage, saveStorage, removeStorage}