Fix search bar behaviour (step 9)

This commit is contained in:
Joshua Boniface 2025-03-02 14:56:51 -05:00
parent 804f049111
commit 745d554768

View File

@ -186,6 +186,9 @@ onMounted(() => {
searchText.value = savedSearchText; searchText.value = savedSearchText;
} }
// Load saved filters
loadFiltersFromLocalStorage();
// Initialize input value based on selected VM // Initialize input value based on selected VM
if (!props.showList && (props.selectedVM || props.vmFromUrl)) { if (!props.showList && (props.selectedVM || props.vmFromUrl)) {
inputValue.value = props.selectedVM || props.vmFromUrl; inputValue.value = props.selectedVM || props.vmFromUrl;
@ -328,8 +331,11 @@ const clearSearch = () => {
emit('update:modelValue', ''); emit('update:modelValue', '');
emit('clear'); emit('clear');
// Focus the search input after clearing // Scroll to selected VM after clearing search
nextTick(() => { nextTick(() => {
scrollToSelectedVM();
// Focus the search input after clearing
const searchInput = document.querySelector('.search-input'); const searchInput = document.querySelector('.search-input');
if (searchInput) { if (searchInput) {
searchInput.focus(); searchInput.focus();
@ -377,6 +383,7 @@ const toggleFilterMenu = () => {
// Filter toggle // Filter toggle
const handleFilterToggle = (type, value) => { const handleFilterToggle = (type, value) => {
appliedFilters.value[type][value] = !appliedFilters.value[type][value]; appliedFilters.value[type][value] = !appliedFilters.value[type][value];
saveFiltersToLocalStorage();
}; };
// Reset filters // Reset filters
@ -387,6 +394,7 @@ const handleResetFilters = () => {
Object.keys(appliedFilters.value.nodes).forEach(node => { Object.keys(appliedFilters.value.nodes).forEach(node => {
appliedFilters.value.nodes[node] = false; appliedFilters.value.nodes[node] = false;
}); });
saveFiltersToLocalStorage();
showFilterMenu.value = false; showFilterMenu.value = false;
}; };
@ -454,6 +462,9 @@ watch([availableStates, availableNodes], ([states, nodes]) => {
appliedFilters.value.nodes[node] = false; appliedFilters.value.nodes[node] = false;
} }
}); });
// Save updated filters
saveFiltersToLocalStorage();
}); });
// Count active filters // Count active filters
@ -532,6 +543,27 @@ const scrollToSelectedVM = () => {
} }
}); });
}; };
// Add localStorage persistence for filters
const saveFiltersToLocalStorage = () => {
localStorage.setItem('vmFilters', JSON.stringify(appliedFilters.value));
};
const loadFiltersFromLocalStorage = () => {
const savedFilters = localStorage.getItem('vmFilters');
if (savedFilters) {
try {
const parsedFilters = JSON.parse(savedFilters);
// Merge saved filters with current filters to handle new states/nodes
appliedFilters.value = {
states: { ...appliedFilters.value.states, ...parsedFilters.states },
nodes: { ...appliedFilters.value.nodes, ...parsedFilters.nodes }
};
} catch (e) {
console.error('Error parsing saved filters:', e);
}
}
};
</script> </script>
<style scoped> <style scoped>