Add way to clear localstorage of last VM

This commit is contained in:
Joshua Boniface 2025-03-02 17:52:23 -05:00
parent e26c5defa4
commit 8d1028ab47
3 changed files with 77 additions and 3 deletions

View File

@ -27,9 +27,10 @@
class="form-control search-input" class="form-control search-input"
> >
<button <button
v-if="modelValue && showList && showClearButton" v-if="shouldShowClearButton"
class="btn-clear" class="btn-clear"
@click.stop="clearSearch" @click.stop="handleClearButton"
:title="showList ? 'Clear search' : 'Clear selected VM'"
> >
<i class="fas fa-times"></i> <i class="fas fa-times"></i>
</button> </button>
@ -158,7 +159,8 @@ const emit = defineEmits([
'toggle-list', 'toggle-list',
'select-vm', 'select-vm',
'toggle-filter', 'toggle-filter',
'reset-filters' 'reset-filters',
'clear-vm'
]); ]);
// UI state refs // UI state refs
@ -179,6 +181,15 @@ const appliedFilters = ref({
nodes: {} nodes: {}
}); });
// Add a computed property to determine if the clear button should be shown
const shouldShowClearButton = computed(() => {
// Show when:
// 1. List is open and there's a search query
// 2. List is closed and there's a selected VM
return (props.showList && props.modelValue && props.showClearButton) ||
(!props.showList && (props.selectedVM || localStorage.getItem('selectedVMId')));
});
// Initialize the component // Initialize the component
onMounted(() => { onMounted(() => {
// Set up click outside handler // Set up click outside handler
@ -337,6 +348,17 @@ const toggleList = () => {
emit('toggle-list'); emit('toggle-list');
}; };
// Handle clear button click
const handleClearButton = () => {
if (props.showList) {
// If the list is open, clear the search
clearSearch();
} else {
// If the list is closed, clear the selected VM
clearSelectedVM();
}
};
// Clear search // Clear search
const clearSearch = () => { const clearSearch = () => {
inputValue.value = ''; inputValue.value = '';
@ -361,6 +383,21 @@ const clearSearch = () => {
}); });
}; };
// Clear selected VM
const clearSelectedVM = () => {
// Clear the input value
inputValue.value = '';
// Clear from localStorage
localStorage.removeItem('selectedVMId');
// Show the VM list
emit('toggle-list');
// Emit event to parent component
emit('clear-vm');
};
// Select a VM // Select a VM
const handleVMSelect = (vm) => { const handleVMSelect = (vm) => {
console.log('Selecting VM:', vm); console.log('Selecting VM:', vm);
@ -679,6 +716,12 @@ const loadFiltersFromLocalStorage = () => {
cursor: pointer; cursor: pointer;
padding: 0; padding: 0;
font-size: 0.875rem; font-size: 0.875rem;
transition: color 0.2s;
z-index: 5; /* Ensure it's above other elements */
}
.btn-clear:hover {
color: #dc3545; /* Red color on hover */
} }
.list-toggle-btn { .list-toggle-btn {

View File

@ -13,6 +13,7 @@
@clear="clearSearch" @clear="clearSearch"
@toggle-list="toggleVMList" @toggle-list="toggleVMList"
@select-vm="selectVM" @select-vm="selectVM"
@clear-vm="clearSelectedVM"
/> />
<!-- VM Details --> <!-- VM Details -->
@ -224,6 +225,24 @@ const clearSearch = () => {
localStorage.removeItem('vmSearchQuery'); localStorage.removeItem('vmSearchQuery');
}; };
// Add a method to clear the selected VM
const clearSelectedVM = () => {
// Clear the selected VM
selectedVM.value = '';
invalidVMSelected.value = false;
// Show the VM list
showVMList.value = true;
// Clear from localStorage
localStorage.removeItem('selectedVMId');
// Clear URL parameter if it exists
if (route.query.vm) {
router.replace({ path: '/vms' }, { replace: true });
}
};
// Lifecycle hooks // Lifecycle hooks
onMounted(() => { onMounted(() => {
console.log('VMOverview mounted'); console.log('VMOverview mounted');

View File

@ -24,4 +24,16 @@ export function navigateToNode(nodeId, router) {
// Navigate to the Nodes page // Navigate to the Nodes page
router.push('/nodes'); router.push('/nodes');
}
/**
* Clear the selected VM and return to the default VM page view
* @param {import('vue-router').Router} router - Vue Router instance
*/
export function clearSelectedVM(router) {
// Clear from localStorage
localStorage.removeItem('selectedVMId');
// Navigate to the VMs page without query parameters
router.push('/vms');
} }