46 lines
1.1 KiB
JavaScript
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}
|