summaryrefslogtreecommitdiff
path: root/packages/frontend/src/components/MkPopupMenu.vue
diff options
context:
space:
mode:
authortamaina <tamaina@hotmail.co.jp>2023-08-09 09:08:47 +0900
committerGitHub <noreply@github.com>2023-08-09 09:08:47 +0900
commite6f3dd81ba4ad492158e278ecb0f9d9893bf2958 (patch)
treec20e9671edd38da0bba9c42dd6c71263274014a7 /packages/frontend/src/components/MkPopupMenu.vue
parentfix(backend/ApNoteService): try retrieving again when failed by duplication (... (diff)
downloadmisskey-e6f3dd81ba4ad492158e278ecb0f9d9893bf2958.tar.gz
misskey-e6f3dd81ba4ad492158e278ecb0f9d9893bf2958.tar.bz2
misskey-e6f3dd81ba4ad492158e278ecb0f9d9893bf2958.zip
fix(frontend): MkPopupMenuがドロワーで子メニューの出現と同時にpopupをresolveさせるのをやめさせる (#11441)
* fix(frontend): MkPopupMenuがドロワーで子メニューの出現と同時にpopupをresolveさせるのをやめさせる * fix * noCache * :v: * fix * ???? * a * a * :v: * fix emoji picker * ????? * close * 1 * fix2 * :v: * fix * :v: * :v: * :v: * preferClick * :v: * fix lint * a * rm nocache
Diffstat (limited to 'packages/frontend/src/components/MkPopupMenu.vue')
-rw-r--r--packages/frontend/src/components/MkPopupMenu.vue46
1 files changed, 43 insertions, 3 deletions
diff --git a/packages/frontend/src/components/MkPopupMenu.vue b/packages/frontend/src/components/MkPopupMenu.vue
index 6e7656f745..ee7dbecf05 100644
--- a/packages/frontend/src/components/MkPopupMenu.vue
+++ b/packages/frontend/src/components/MkPopupMenu.vue
@@ -4,13 +4,13 @@ SPDX-License-Identifier: AGPL-3.0-only
-->
<template>
-<MkModal ref="modal" v-slot="{ type, maxHeight }" :zPriority="'high'" :src="src" :transparentBg="true" @click="modal.close()" @close="emit('closing')" @closed="emit('closed')">
- <MkMenu :items="items" :align="align" :width="width" :max-height="maxHeight" :asDrawer="type === 'drawer'" :class="{ [$style.drawer]: type === 'drawer' }" @close="modal.close()"/>
+<MkModal ref="modal" v-slot="{ type, maxHeight }" :manualShowing="manualShowing" :zPriority="'high'" :src="src" :transparentBg="true" @click="click" @close="onModalClose" @closed="onModalClosed">
+ <MkMenu :items="items" :align="align" :width="width" :max-height="maxHeight" :asDrawer="type === 'drawer'" :class="{ [$style.drawer]: type === 'drawer' }" @close="onMenuClose" @hide="hide"/>
</MkModal>
</template>
<script lang="ts" setup>
-import { } from 'vue';
+import { ref } from 'vue';
import MkModal from './MkModal.vue';
import MkMenu from './MkMenu.vue';
import { MenuItem } from '@/types/menu';
@@ -29,6 +29,46 @@ const emit = defineEmits<{
}>();
let modal = $shallowRef<InstanceType<typeof MkModal>>();
+const manualShowing = ref(true);
+const hiding = ref(false);
+
+function click() {
+ close();
+}
+
+function onModalClose() {
+ emit('closing');
+}
+
+function onMenuClose() {
+ close();
+ if (hiding.value) {
+ // hidingであればclosedを発火
+ emit('closed');
+ }
+}
+
+function onModalClosed() {
+ if (!hiding.value) {
+ // hidingでなければclosedを発火
+ emit('closed');
+ }
+}
+
+function hide() {
+ manualShowing.value = false;
+ hiding.value = true;
+
+ // closeは呼ぶ必要がある
+ modal?.close();
+}
+
+function close() {
+ manualShowing.value = false;
+
+ // closeは呼ぶ必要がある
+ modal?.close();
+}
</script>
<style lang="scss" module>