Skip to content

Commit 083cb20

Browse files
committed
feat: add teleportToTop prop and enhance dropdown rendering in Select component
1 parent 5786efc commit 083cb20

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

adminforth/spa/src/afcl/Select.vue

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,32 @@
6161
</div>
6262
</teleport>
6363

64-
<div v-if="!teleportToBody && showDropdown" ref="dropdownEl" :style="dropdownStyle" :class="{'shadow-none': isTop}"
64+
<teleport to="body" v-if="teleportToTop && showDropdown">
65+
<div ref="dropdownEl" :style="getDropdownPosition" :class="{'shadow-none': isTop}"
66+
class="fixed z-[50] w-full bg-white shadow-lg dark:shadow-black dark:bg-gray-700
67+
dark:border-gray-600 rounded-md py-1 text-base ring-1 ring-black ring-opacity-5 overflow-auto focus:outline-none sm:text-sm max-h-48"
68+
@scroll="handleDropdownScroll">
69+
<div
70+
v-for="item in filteredItems"
71+
:key="item.value"
72+
class="px-4 py-2 cursor-pointer hover:bg-lightDropdownOptionsHoverBackground dark:hover:bg-darkDropdownOptionsHoverBackground text-lightDropdownOptionsText dark:text-darkDropdownOptionsText"
73+
:class="{ 'bg-lightDropdownPicked dark:bg-darkDropdownPicked': selectedItems.includes(item) }"
74+
@click="toogleItem(item)"
75+
>
76+
<slot name="item" :option="item"></slot>
77+
<label v-if="!$slots.item" :for="item.value">{{ item.label }}</label>
78+
</div>
79+
<div v-if="!filteredItems.length" class="px-4 py-2 cursor-pointer text-lightDropdownOptionsText dark:text-darkDropdownOptionsText">
80+
{{ options.length ? $t('No results found') : $t('No items here') }}
81+
</div>
82+
83+
<div v-if="$slots['extra-item']" class="px-4 py-2 dark:text-gray-400">
84+
<slot name="extra-item"></slot>
85+
</div>
86+
</div>
87+
</teleport>
88+
89+
<div v-if="!teleportToBody && !teleportToTop && showDropdown" ref="dropdownEl" :style="dropdownStyle" :class="{'shadow-none': isTop}"
6590
class="absolute z-10 mt-1 w-full bg-lightDropdownOptionsBackground shadow-lg text-lightDropdownButtonsText dark:shadow-black dark:bg-darkDropdownOptionsBackground
6691
dark:border-gray-600 rounded-md py-1 text-base ring-1 ring-black ring-opacity-5 overflow-auto focus:outline-none sm:text-sm max-h-48"
6792
@scroll="handleDropdownScroll">
@@ -143,6 +168,10 @@ const props = defineProps({
143168
type: Boolean,
144169
default: false,
145170
},
171+
teleportToTop: {
172+
type: Boolean,
173+
default: false,
174+
},
146175
});
147176
148177
const emit = defineEmits(['update:modelValue', 'scroll-near-end', 'search']);

0 commit comments

Comments
 (0)