import { ref } from 'vue'
export function useLocalStorage() {
function setItem(key, value, options = {}) {
const { expireMinutes = null, expireToday = false } = options
let expire = null
let expireDate = null
if (expireMinutes) {
expire = Date.now() + expireMinutes * 60 * 1000
}
if (expireToday) {
const now = new Date()
expireDate = new Date(
now.getFullYear(),
now.getMonth(),
now.getDate(),
23, 59, 59, 999
).getTime()
}
const data = {
value,
expire,
expireDate,
}
localStorage.setItem(key, JSON.stringify(data))
}
function getItem(key) {
const itemStr = localStorage.getItem(key)
if (!itemStr) return null
try {
const item = JSON.parse(itemStr)
const now = Date.now()
if (item.expire && now > item.expire) {
localStorage.removeItem(key)
return null
}
if (item.expireDate && now > item.expireDate) {
localStorage.removeItem(key)
return null
}
return item.value
} catch {
localStorage.removeItem(key)
return null
}
}
function removeItem(key) {
localStorage.removeItem(key)
}
function hasItem(key) {
return getItem(key) !== null
}
return {
setItem,
getItem,
removeItem,
hasItem,
}
}