Skip to content

Commit 171dbd2

Browse files
committed
fix(navbar): invert tooltip direction when in bottom mode
1 parent ee8ad29 commit 171dbd2

File tree

8 files changed

+91
-18
lines changed

8 files changed

+91
-18
lines changed

src/components/AppComponent.vue

+5-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,11 @@ const onBack = () => {
7979
<template v-if="Component" #drawer="{ parentElement }">
8080
<Transition name="scale" mode="out-in">
8181
<KeepAlive>
82-
<component :is="Component" :parent-element="parentElement" />
82+
<component
83+
:is="Component"
84+
:parent-element="parentElement"
85+
:reverse="reverse"
86+
/>
8387
</KeepAlive>
8488
</Transition>
8589
</template>

src/components/common/buttons/ButtonLinkExternal.vue

+8-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
import { NButton, NIcon, NTooltip } from 'naive-ui';
33
import { type Component, type PropType, ref } from 'vue';
44
5+
import type { TooltipProps } from 'naive-ui';
6+
57
import IconExternalLinkRounded from '~/components/icons/IconExternalLinkRounded.vue';
68
79
defineOptions({
@@ -31,6 +33,11 @@ defineProps({
3133
required: false,
3234
default: false,
3335
},
36+
placement: {
37+
type: String as PropType<TooltipProps['placement']>,
38+
required: false,
39+
default: 'bottom',
40+
},
3441
});
3542
3643
const anchor = ref();
@@ -41,7 +48,7 @@ const anchor = ref();
4148
class="button-link-external-tooltip"
4249
:disabled="disabled || !label || !href"
4350
:show-arrow="false"
44-
placement="bottom"
51+
:placement="placement"
4552
:delay="300"
4653
trigger="hover"
4754
:to="anchor"

src/components/common/navbar/NavbarPageSizeSelect.vue

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
<script setup lang="ts">
22
import { NIcon, NSelect, NTooltip } from 'naive-ui';
33
4-
import { computed, defineProps, onMounted, ref, toRefs, watch } from 'vue';
4+
import { computed, defineProps, onMounted, type PropType, ref, toRefs, watch } from 'vue';
5+
6+
import type { TooltipProps } from 'naive-ui';
57
68
import IconChevron from '~/components/icons/IconChevronDownSmall.vue';
79
import IconPage from '~/components/icons/IconPage.vue';
@@ -25,6 +27,11 @@ const props = defineProps({
2527
type: Boolean,
2628
required: false,
2729
},
30+
placement: {
31+
type: String as PropType<TooltipProps['placement']>,
32+
required: false,
33+
default: 'bottom',
34+
},
2835
});
2936
3037
const emit = defineEmits<{
@@ -48,7 +55,7 @@ const pageIcon = computed(() => (pageSize.value > 200 ? IconPageDouble : IconPag
4855
class="page-size-tooltip"
4956
:disabled="open"
5057
:show-arrow="false"
51-
placement="bottom"
58+
:placement="placement"
5259
:delay="300"
5360
trigger="hover"
5461
:to="parentElement"

src/components/views/calendar/CalendarNavbar.vue

+15-4
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,16 @@ import { useCalendarStore, useCalendarStoreRefs } from '~/stores/data/calendar.s
1414
import { useI18n } from '~/utils/i18n.utils';
1515
import { useDebouncedSearch } from '~/utils/store.utils';
1616
17-
defineProps({
17+
const { reverse } = defineProps({
1818
parentElement: {
1919
type: HTMLElement,
2020
required: false,
2121
},
22+
reverse: {
23+
type: Boolean,
24+
required: false,
25+
default: false,
26+
},
2227
});
2328
2429
const i18n = useI18n('navbar', 'calendar');
@@ -46,6 +51,8 @@ const external = computed(() => {
4651
return ResolveExternalLinks.trakt.calendar();
4752
});
4853
54+
const placement = computed(() => (reverse ? 'top' : 'bottom'));
55+
4956
const open = ref(false);
5057
</script>
5158

@@ -58,7 +65,7 @@ const open = ref(false);
5865
type="date"
5966
:to="parentElement"
6067
:disabled="loading"
61-
placement="bottom"
68+
:placement="placement"
6269
update-value-on-close
6370
close-on-select
6471
clearable
@@ -70,7 +77,7 @@ const open = ref(false);
7077
<NTooltip
7178
class="calendar-tooltip"
7279
:show-arrow="false"
73-
placement="bottom"
80+
:placement="placement"
7481
:delay="100"
7582
trigger="focus"
7683
:to="parentElement"
@@ -90,7 +97,11 @@ const open = ref(false);
9097
</NInput>
9198
</template>
9299
</NTooltip>
93-
<ButtonLinkExternal :href="external" :label="i18n('calendar', 'common', 'link')" />
100+
<ButtonLinkExternal
101+
:href="external"
102+
:label="i18n('calendar', 'common', 'link')"
103+
:placement="placement"
104+
/>
94105
</NFlex>
95106
</template>
96107

src/components/views/history/HistoryNavbar.vue

+14-3
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,16 @@ const external = computed(() =>
3333
}),
3434
);
3535
36-
defineProps({
36+
const { reverse } = defineProps({
3737
parentElement: {
3838
type: HTMLElement,
3939
required: false,
4040
},
41+
reverse: {
42+
type: Boolean,
43+
required: false,
44+
default: false,
45+
},
4146
});
4247
4348
const pickerValues = computed<[number, number] | null>(() => {
@@ -51,6 +56,7 @@ const onDateChange = debounce((values?: [number, number]) => {
5156
setHistoryRange({ start: new Date(start), end: new Date(end) });
5257
}, 350);
5358
59+
const placement = computed(() => (reverse ? 'top' : 'bottom'));
5460
const open = ref(false);
5561
</script>
5662

@@ -62,7 +68,7 @@ const open = ref(false);
6268
type="daterange"
6369
:to="parentElement"
6470
:default-value="[Date.now(), Date.now()]"
65-
placement="bottom"
71+
:placement="placement"
6672
update-value-on-close
6773
close-on-select
6874
clearable
@@ -90,8 +96,13 @@ const open = ref(false);
9096
v-model:page-size="pageSize"
9197
:parent-element="parentElement"
9298
:disabled="loading"
99+
:placement="placement"
100+
/>
101+
<ButtonLinkExternal
102+
:href="external"
103+
:label="i18n('history', 'common', 'link')"
104+
:placement="placement"
93105
/>
94-
<ButtonLinkExternal :href="external" :label="i18n('history', 'common', 'link')" />
95106
</NFlex>
96107
</template>
97108

src/components/views/releases/ReleasesNavbar.vue

+9-2
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,16 @@ import { useReleasesStore, useReleasesStoreRefs } from '~/stores/data/releases.s
1010
import { useI18n } from '~/utils/i18n.utils';
1111
import { useActiveAndDocumentVisible } from '~/utils/store.utils';
1212
13-
defineProps({
13+
const { reverse } = defineProps({
1414
parentElement: {
1515
type: HTMLElement,
1616
required: false,
1717
},
18+
reverse: {
19+
type: Boolean,
20+
required: false,
21+
default: false,
22+
},
1823
});
1924
2025
const i18n = useI18n('navbar', 'releases');
@@ -46,6 +51,7 @@ const regionOptions = computed<SelectOption[]>(() =>
4651
})),
4752
);
4853
54+
const placement = computed(() => (reverse ? 'top' : 'bottom'));
4955
const open = ref(false);
5056
5157
onActivated(() => fetchRegions());
@@ -63,6 +69,7 @@ useActiveAndDocumentVisible({
6369
:options="typesOptions"
6470
:to="parentElement"
6571
:disabled="loading"
72+
:placement="placement"
6673
/>
6774
<NDatePicker
6875
v-model:show="open"
@@ -71,7 +78,7 @@ useActiveAndDocumentVisible({
7178
type="date"
7279
:to="parentElement"
7380
:disabled="loading"
74-
placement="bottom"
81+
:placement="placement"
7582
update-value-on-close
7683
close-on-select
7784
clearable

src/components/views/search/SearchNavbar.vue

+16-3
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,16 @@ const historyOptions = computed(() =>
6262
filteredHistory.value.map(value => ({ value, label: value })),
6363
);
6464
65-
defineProps({
65+
const { reverse } = defineProps({
6666
parentElement: {
6767
type: HTMLElement,
6868
required: false,
6969
},
70+
reverse: {
71+
type: Boolean,
72+
required: false,
73+
default: false,
74+
},
7075
});
7176
7277
const selectedValues = computed({
@@ -160,6 +165,8 @@ const inputRef = ref();
160165
161166
const route = useRoute();
162167
168+
const placement = computed(() => (reverse ? 'top' : 'bottom'));
169+
163170
onActivated(() => {
164171
if (!search.value) inputRef.value?.focus();
165172
if (typeof route?.query?.search === 'string') search.value = route.query.search;
@@ -177,6 +184,7 @@ onActivated(() => {
177184
:render-label="renderLabel"
178185
:max-tag-count="1"
179186
:clearable="false"
187+
:placement="placement"
180188
:ellipsis-tag-popover-props="{ disabled: true }"
181189
multiple
182190
>
@@ -188,7 +196,7 @@ onActivated(() => {
188196
<NTooltip
189197
class="search-tooltip"
190198
:class="{ active: tooltipHover }"
191-
placement="bottom"
199+
:placement="placement"
192200
trigger="focus"
193201
:show-arrow="false"
194202
:disabled="!query"
@@ -230,8 +238,13 @@ onActivated(() => {
230238
v-model:page-size="pageSize"
231239
:parent-element="parentElement"
232240
:disabled="loading"
241+
:placement="placement"
242+
/>
243+
<ButtonLinkExternal
244+
:href="external"
245+
:label="i18n('search', 'common', 'link')"
246+
:placement="placement"
233247
/>
234-
<ButtonLinkExternal :href="external" :label="i18n('search', 'common', 'link')" />
235248

236249
<NSwitch
237250
v-if="false"

src/components/views/watchlist/WatchlistNavbar.vue

+15-2
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,20 @@ const selectValue = computed({
7171
7272
const debouncedSearch = useDebouncedSearch(searchList);
7373
74-
defineProps({
74+
const { reverse } = defineProps({
7575
parentElement: {
7676
type: HTMLElement,
7777
required: false,
7878
},
79+
reverse: {
80+
type: Boolean,
81+
required: false,
82+
default: false,
83+
},
7984
});
8085
86+
const placement = computed(() => (reverse ? 'top' : 'bottom'));
87+
8188
watchUserChange({
8289
fetch: fetchLists,
8390
userChange: ({ active, authenticated }) => {
@@ -117,6 +124,7 @@ const renderTag = ({ option }: { option: SelectOption }) => option.label?.toStri
117124
:render-label="renderLabel"
118125
:render-tag="renderTag"
119126
filterable
127+
:placement="placement"
120128
>
121129
<template #arrow>
122130
<NIcon :component="open ? IconLoop : selectedIcon" />
@@ -137,8 +145,13 @@ const renderTag = ({ option }: { option: SelectOption }) => option.label?.toStri
137145
v-model:page-size="pageSize"
138146
:parent-element="parentElement"
139147
:disabled="listLoading"
148+
:placement="placement"
149+
/>
150+
<ButtonLinkExternal
151+
:href="external"
152+
:label="i18n('list', 'common', 'link')"
153+
:placement="placement"
140154
/>
141-
<ButtonLinkExternal :href="external" :label="i18n('list', 'common', 'link')" />
142155
</NFlex>
143156
</template>
144157

0 commit comments

Comments
 (0)