Many an update!
This commit is contained in:
parent
85195d6c7a
commit
d588c49946
35 changed files with 3528 additions and 1142 deletions
83
app/composables/useCalendarSearch.js
Normal file
83
app/composables/useCalendarSearch.js
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
// 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,
|
||||
};
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue