Skip to content

Commit 2be1cc3

Browse files
committed
feat(web): adds touch support
1 parent 5a97206 commit 2be1cc3

File tree

4 files changed

+25
-10
lines changed

4 files changed

+25
-10
lines changed

src/components/AppComponent.vue

+12-4
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
NFlex,
88
NIcon,
99
} from 'naive-ui';
10-
import { ref, Transition, watch } from 'vue';
10+
import { onBeforeUnmount, onMounted, ref, Transition, watch } from 'vue';
1111
import { RouterView, useRouter } from 'vue-router';
1212
1313
import GridBackground from '~/components/common/background/GridBackground.vue';
@@ -17,6 +17,7 @@ import NavbarComponent from '~/components/common/navbar/NavbarComponent.vue';
1717
import IconChevronLeft from '~/components/icons/IconChevronLeft.vue';
1818
import IconClose from '~/components/icons/IconClose.vue';
1919
import CheckinComponent from '~/components/views/checkin/CheckinComponent.vue';
20+
import { NavbarService } from '~/services/navbar.service';
2021
import { useAppStateStoreRefs } from '~/stores/app-state.store';
2122
import { useAuthSettingsStoreRefs } from '~/stores/settings/auth.store';
2223
@@ -27,9 +28,9 @@ const { footerOpen, panelOpen, panelDirty } = useAppStateStoreRefs();
2728
2829
const base = ref();
2930
30-
const appRef = ref();
31-
const mainRef = ref();
32-
const footerRef = ref();
31+
const appRef = ref<HTMLDivElement>();
32+
const mainRef = ref<HTMLDivElement>();
33+
const footerRef = ref<HTMLDivElement>();
3334
3435
watch(
3536
currentRoute,
@@ -59,6 +60,13 @@ const onBack = () => {
5960
if (window.history.state.back) return back();
6061
return onClose();
6162
};
63+
64+
onMounted(() => {
65+
mainRef.value?.addEventListener('touchstart', NavbarService.hideDrawer);
66+
});
67+
onBeforeUnmount(() => {
68+
mainRef.value?.removeEventListener('touchstart', NavbarService.hideDrawer);
69+
});
6270
</script>
6371

6472
<template>

src/components/common/navbar/NavbarComponent.vue

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<script lang="ts" setup>
22
import { NTab, NTabs } from 'naive-ui';
3-
import { computed, ref, toRefs, useSlots } from 'vue';
3+
import { computed, toRefs, useSlots } from 'vue';
44
import { useRoute, useRouter } from 'vue-router';
55
66
import NavbarSettingsDropdown from '~/components/common/navbar/NavbarSettingsDopdown.vue';
@@ -43,8 +43,7 @@ const activeRoute = computed(() => {
4343
);
4444
});
4545
46-
const isHover = ref(false);
47-
const isFocus = ref(false);
46+
const { isHover, isFocus, ref: navElement } = NavbarService;
4847
4948
const hasDrawer = computed(() => {
5049
const drawer = !!route.name && !!slots.drawer;
@@ -57,15 +56,14 @@ const showDrawer = computed(() => {
5756
NavbarService.open.value = show;
5857
return show;
5958
});
60-
61-
const navElement = ref<HTMLElement>();
6259
</script>
6360

6461
<template>
6562
<nav
6663
ref="navElement"
6764
@mouseenter="isHover = true"
6865
@mouseleave="isHover = false"
66+
@touchstart="isHover = true"
6967
@focusin="isFocus = true"
7068
@focusout="isFocus = false"
7169
>

src/components/common/navbar/NavbarSettingsDopdown.vue

+2-1
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ const onSelect: DropdownProps['onSelect'] = async (key: string, { label }) => {
130130
Logger.error('Unknown key:', key);
131131
}
132132
};
133+
const { dropdown } = NavbarService;
133134
</script>
134135

135136
<template>
@@ -141,7 +142,7 @@ const onSelect: DropdownProps['onSelect'] = async (key: string, { label }) => {
141142
size="small"
142143
class="settings-dropdown"
143144
:style="{ '--tab-count': enabledRoutes.length + 1 }"
144-
:on-update:show="(visible: boolean) => (NavbarService.dropdown.value = visible)"
145+
:on-update:show="(visible: boolean) => (dropdown = visible)"
145146
@select="onSelect"
146147
>
147148
<NFlex justify="space-around" align="center" :wrap="false">

src/services/navbar.service.ts

+8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
import { ref } from 'vue';
22

33
export class NavbarService {
4+
static readonly ref = ref<HTMLElement>();
45
static readonly open = ref(false);
56
static readonly drawer = ref(false);
67
static readonly dropdown = ref(false);
8+
static readonly isHover = ref(false);
9+
static readonly isFocus = ref(false);
10+
11+
static hideDrawer() {
12+
NavbarService.ref.value?.blur();
13+
NavbarService.ref.value?.dispatchEvent(new Event('mouseleave'));
14+
}
715
}

0 commit comments

Comments
 (0)