83 lines
2.1 KiB
JavaScript
83 lines
2.1 KiB
JavaScript
// Composable for managing calendar search and filter state
|
|
export const useCalendarSearch = () => {
|
|
const searchQuery = ref("");
|
|
const includePastEvents = ref(false);
|
|
const searchResults = ref([]);
|
|
const selectedCategories = ref([]);
|
|
const isSearching = computed(() => {
|
|
return (
|
|
searchQuery.value.length > 0 ||
|
|
selectedCategories.value.length > 0
|
|
);
|
|
});
|
|
|
|
// Save search state to sessionStorage for persistence across navigation
|
|
const saveSearchState = (
|
|
query,
|
|
categories,
|
|
includePast,
|
|
results
|
|
) => {
|
|
if (process.client) {
|
|
sessionStorage.setItem(
|
|
"calendarSearchState",
|
|
JSON.stringify({
|
|
searchQuery: query,
|
|
selectedCategories: categories,
|
|
includePastEvents: includePast,
|
|
searchResults: results,
|
|
timestamp: Date.now(),
|
|
})
|
|
);
|
|
}
|
|
};
|
|
|
|
// Load search state from sessionStorage
|
|
const loadSearchState = () => {
|
|
if (process.client) {
|
|
const saved = sessionStorage.getItem("calendarSearchState");
|
|
if (saved) {
|
|
try {
|
|
const state = JSON.parse(saved);
|
|
// Only restore if saved less than 30 minutes ago
|
|
if (Date.now() - state.timestamp < 30 * 60 * 1000) {
|
|
searchQuery.value = state.searchQuery;
|
|
selectedCategories.value = state.selectedCategories;
|
|
includePastEvents.value = state.includePastEvents;
|
|
searchResults.value = state.searchResults;
|
|
return true;
|
|
}
|
|
} catch (e) {
|
|
console.error("Failed to load search state:", e);
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
|
|
// Clear all search filters
|
|
const clearSearch = () => {
|
|
searchQuery.value = "";
|
|
selectedCategories.value = [];
|
|
searchResults.value = [];
|
|
};
|
|
|
|
// Clear search state from sessionStorage
|
|
const clearSearchState = () => {
|
|
if (process.client) {
|
|
sessionStorage.removeItem("calendarSearchState");
|
|
}
|
|
};
|
|
|
|
return {
|
|
searchQuery,
|
|
includePastEvents,
|
|
searchResults,
|
|
selectedCategories,
|
|
isSearching,
|
|
saveSearchState,
|
|
loadSearchState,
|
|
clearSearch,
|
|
clearSearchState,
|
|
};
|
|
};
|