Enhance search bar and hide filters when unneeded
This commit is contained in:
parent
21d98f1a98
commit
1dd1387624
@ -21,6 +21,7 @@
|
|||||||
:value="showVMList ? searchQuery : (selectedVMData?.name || '')"
|
:value="showVMList ? searchQuery : (selectedVMData?.name || '')"
|
||||||
@input="handleSearch"
|
@input="handleSearch"
|
||||||
@focus="handleSearchFocus"
|
@focus="handleSearchFocus"
|
||||||
|
@blur="handleSearchBlur"
|
||||||
class="form-control search-input"
|
class="form-control search-input"
|
||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
@ -35,6 +36,7 @@
|
|||||||
<div class="filter-dropdown">
|
<div class="filter-dropdown">
|
||||||
<button
|
<button
|
||||||
class="btn btn-outline-secondary dropdown-toggle"
|
class="btn btn-outline-secondary dropdown-toggle"
|
||||||
|
:disabled="!showVMList"
|
||||||
@click="toggleFilterMenu"
|
@click="toggleFilterMenu"
|
||||||
>
|
>
|
||||||
<i class="fas fa-filter"></i> Filters
|
<i class="fas fa-filter"></i> Filters
|
||||||
@ -295,13 +297,31 @@ const closeFilterMenuOnClickOutside = (event) => {
|
|||||||
// Add event listener for clicks outside filter menu
|
// Add event listener for clicks outside filter menu
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
document.addEventListener('click', closeFilterMenuOnClickOutside);
|
document.addEventListener('click', closeFilterMenuOnClickOutside);
|
||||||
|
// Add event listener for clicks outside the VM list area
|
||||||
|
document.addEventListener('click', handleClickOutside);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Remove event listener when component is unmounted
|
// Remove event listener when component is unmounted
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
document.removeEventListener('click', closeFilterMenuOnClickOutside);
|
document.removeEventListener('click', closeFilterMenuOnClickOutside);
|
||||||
|
document.removeEventListener('click', handleClickOutside);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Handle clicks outside the VM list area
|
||||||
|
const handleClickOutside = (event) => {
|
||||||
|
// Only handle this if a VM is selected and the list is showing
|
||||||
|
if (selectedVM.value && showVMList.value) {
|
||||||
|
const vmControls = document.querySelector('.vm-controls-container');
|
||||||
|
const vmList = document.querySelector('.vm-list-fullpage');
|
||||||
|
|
||||||
|
// If click is outside both the controls and list, close the list
|
||||||
|
if ((!vmControls || !vmControls.contains(event.target)) &&
|
||||||
|
(!vmList || !vmList.contains(event.target))) {
|
||||||
|
showVMList.value = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Toggle section visibility
|
// Toggle section visibility
|
||||||
const toggleSection = (section) => {
|
const toggleSection = (section) => {
|
||||||
sections.value[section] = !sections.value[section];
|
sections.value[section] = !sections.value[section];
|
||||||
@ -486,6 +506,27 @@ const handleSearchFocus = () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Handle search blur
|
||||||
|
const handleSearchBlur = (event) => {
|
||||||
|
// Don't close the list if clicking on another element within the list
|
||||||
|
const vmList = document.querySelector('.vm-list-fullpage');
|
||||||
|
if (vmList && vmList.contains(event.relatedTarget)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If a VM is selected and user clicks away from search, close the list
|
||||||
|
if (selectedVM.value && !event.relatedTarget) {
|
||||||
|
// Use setTimeout to allow click events to process first
|
||||||
|
setTimeout(() => {
|
||||||
|
// Only close if we're not clicking on a VM in the list
|
||||||
|
if (!document.activeElement || document.activeElement.tagName !== 'BUTTON' ||
|
||||||
|
!document.activeElement.classList.contains('vm-list-item')) {
|
||||||
|
showVMList.value = false;
|
||||||
|
}
|
||||||
|
}, 100);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Filter VMs based on current search and filters
|
// Filter VMs based on current search and filters
|
||||||
const filterVMs = () => {
|
const filterVMs = () => {
|
||||||
// This is handled by the computed property
|
// This is handled by the computed property
|
||||||
|
Loading…
x
Reference in New Issue
Block a user