60 lines
1.5 KiB
JavaScript
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
|
|
};
|
|
});
|