Files
2026-06-06 18:43:00 +08:00

60 lines
1.5 KiB
JavaScript

// resources/js/stores/prefetch.js
import { defineStore } from 'pinia';
import { ref, watch } from 'vue';
const CACHE_KEY = 'bukid_prefetch_cache';
const SIX_MONTH_MS = 6 * 30 * 24 * 60 * 60 * 1000;
export const usePrefetchStore = defineStore('prefetch', () => {
// Load initial state from localStorage
const saved = localStorage.getItem(CACHE_KEY);
const caches = ref(saved ? JSON.parse(saved) : {});
// Save to localStorage whenever caches changes
watch(caches, (newCaches) => {
localStorage.setItem(CACHE_KEY, JSON.stringify(newCaches));
}, { deep: true });
const setCache = (key, data) => {
caches.value[key] = {
data,
timestamp: Date.now()
};
};
const getCache = (key) => {
const entry = caches.value[key];
if (!entry) return null;
// Check if within 6-month validity window
if (Date.now() - entry.timestamp > SIX_MONTH_MS) {
delete caches.value[key];
return null;
}
return entry.data;
};
const hasCache = (key) => {
const entry = caches.value[key];
if (!entry) return false;
if (Date.now() - entry.timestamp > SIX_MONTH_MS) {
delete caches.value[key];
return false;
}
return true;
};
const clearCache = () => {
caches.value = {};
};
return {
caches,
setCache,
getCache,
hasCache,
clearCache
};
});