From aaae298f1512d4dc5ae865696e0921932afa199d Mon Sep 17 00:00:00 2001 From: kolaente Date: Wed, 6 Mar 2024 18:09:17 +0100 Subject: [PATCH] feat(filter): make the autocomplete look pretty --- .../components/input/AutocompleteDropdown.vue | 79 ++++++++++++------- .../project/partials/FilterInput.vue | 7 +- 2 files changed, 56 insertions(+), 30 deletions(-) diff --git a/frontend/src/components/input/AutocompleteDropdown.vue b/frontend/src/components/input/AutocompleteDropdown.vue index 096ee09c7..927d7fa14 100644 --- a/frontend/src/components/input/AutocompleteDropdown.vue +++ b/frontend/src/components/input/AutocompleteDropdown.vue @@ -12,7 +12,6 @@ type state = 'unfocused' | 'focused' const selectedIndex = ref(-1) const state = ref('unfocused') const val = ref('') -const isResizing = ref(false) const model = defineModel() const suggestionScrollerRef = ref(null) @@ -77,38 +76,10 @@ function updateSuggestionScroll() { }) } -function updateScrollWindowSize() { - if (isResizing.value) { - return - } - - isResizing.value = true - - nextTick(() => { - isResizing.value = false - - const scroller = suggestionScrollerRef.value - const parent = containerRef.value - if (scroller) { - const rect = parent.getBoundingClientRect() - const pxTop = rect.top - const pxBottom = window.innerHeight - rect.bottom - const maxHeight = Math.max(pxTop, pxBottom, props.maxHeight) - const isReversed = pxBottom < props.maxHeight && pxTop > pxBottom - scroller.style.maxHeight = Math.min(isReversed ? pxTop : pxBottom, props.maxHeight) + 'px' - scroller.parentNode.style.transform = - isReversed ? 'translateY(-100%) translateY(-1.4rem)' - : 'translateY(.4rem)' - } - }) -} - function setState(stateName: state) { state.value = stateName if (stateName === 'unfocused') { emit('blur') - } else { - updateScrollWindowSize() } } @@ -235,3 +206,53 @@ function onUpdateField(e) { + + diff --git a/frontend/src/components/project/partials/FilterInput.vue b/frontend/src/components/project/partials/FilterInput.vue index 06b32a684..9fbffd514 100644 --- a/frontend/src/components/project/partials/FilterInput.vue +++ b/frontend/src/components/project/partials/FilterInput.vue @@ -240,6 +240,7 @@ const autocompleteResults = ref([]) spellcheck="false" v-model="filterQuery" class="input" + :class="{'has-autocomplete-results': autocompleteResults.length > 0}" ref="filterInput" >
([])
@@ -323,6 +324,10 @@ const autocompleteResults = ref([]) -webkit-text-fill-color: transparent; background: transparent !important; resize: none; + + &.has-autocomplete-results { + border-radius: var(--input-radius) var(--input-radius) 0 0; + } } .filter-input-highlight {