initial: bootstrap from BukidBountyApp base
This commit is contained in:
59
resources/js/stores/prefetch.js
Normal file
59
resources/js/stores/prefetch.js
Normal file
@@ -0,0 +1,59 @@
|
||||
// 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
|
||||
};
|
||||
});
|
||||
Reference in New Issue
Block a user