From f460feb21d8470871f75ffdaec59ff3c54e75de4 Mon Sep 17 00:00:00 2001 From: seorang42 Date: Sat, 15 Feb 2025 17:07:11 +0900 Subject: [PATCH 01/13] =?UTF-8?q?:bug:=20[fix]=20:=20=EC=98=A4=EB=B2=84?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=20=EC=83=9D=EA=B8=B8=20=EB=95=8C=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A1=A4=20=EC=82=AC=EB=9D=BC=EC=A7=90=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=EB=A0=88=EC=9D=B4=EC=95=84?= =?UTF-8?q?=EC=9B=83=20=EB=B0=80=EB=A6=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/common/ModalView.vue | 12 +++++----- src/components/common/TaskCard.vue | 4 +++- src/components/task-detail/TaskDetail.vue | 6 +++-- src/components/top-bar/TopBar.vue | 6 +++-- src/stores/counter.ts | 12 ---------- src/stores/isOverlayOpen.ts | 27 +++++++++++++++++++++++ 6 files changed, 43 insertions(+), 24 deletions(-) delete mode 100644 src/stores/counter.ts create mode 100644 src/stores/isOverlayOpen.ts diff --git a/src/components/common/ModalView.vue b/src/components/common/ModalView.vue index 64077d65..ad4e03a5 100644 --- a/src/components/common/ModalView.vue +++ b/src/components/common/ModalView.vue @@ -81,10 +81,10 @@ diff --git a/src/components/common/TaskCard.vue b/src/components/common/TaskCard.vue index f8508312..f2979130 100644 --- a/src/components/common/TaskCard.vue +++ b/src/components/common/TaskCard.vue @@ -51,6 +51,7 @@ import TaskDetail from '../task-detail/TaskDetail.vue' import CommonIcons from './CommonIcons.vue' import ImageContainer from './ImageContainer.vue' import TaskLabel from './TaskLabel.vue' +import { useIsOverlayOpenStore } from '@/stores/isOverlayOpen' const { data } = defineProps<{ data: TaskCardProps; draggable?: boolean }>() const emit = defineEmits(['toggleModal']) @@ -62,6 +63,7 @@ const borderLeft = computed(() => { return `border-${statusAsColor(data.taskStatus as Status)}-1` }) +const { setIsOverlayOpen } = useIsOverlayOpenStore() const handleModal = (id: number | null) => { if (!id) { queryClient.invalidateQueries({ @@ -70,7 +72,7 @@ const handleModal = (id: number | null) => { queryClient.invalidateQueries({ queryKey: ['teamStatus', params] }) - document.body.style.overflow = '' + setIsOverlayOpen(false) } emit('toggleModal') selectedID.value = id diff --git a/src/components/task-detail/TaskDetail.vue b/src/components/task-detail/TaskDetail.vue index 1e698d21..e644bada 100644 --- a/src/components/task-detail/TaskDetail.vue +++ b/src/components/task-detail/TaskDetail.vue @@ -41,6 +41,7 @@ import TaskDetailHistory from './TaskDetailHistory.vue' import TaskDetailLeft from './TaskDetailLeft.vue' import TaskDetailRight from './TaskDetailRight.vue' import TaskDetailTopBar from './TaskDetailTopBar.vue' +import { useIsOverlayOpenStore } from '@/stores/isOverlayOpen' const { closeTaskDetail, selectedId } = defineProps() @@ -62,10 +63,11 @@ const { data: historyData } = useQuery({ enabled: isLogined }) +const { setIsOverlayOpen } = useIsOverlayOpenStore() onMounted(() => { - document.body.style.overflow = 'hidden' + setIsOverlayOpen(true) }) onUnmounted(() => { - document.body.style.overflow = '' + setIsOverlayOpen(false) }) diff --git a/src/components/top-bar/TopBar.vue b/src/components/top-bar/TopBar.vue index 1f61320b..cd51d551 100644 --- a/src/components/top-bar/TopBar.vue +++ b/src/components/top-bar/TopBar.vue @@ -67,6 +67,7 @@ import { getNotifiCount } from '@/api/common' import ImageContainer from '../common/ImageContainer.vue' import { useOutsideClick } from '@/hooks/useOutsideClick' import { useRouter } from 'vue-router' +import { useIsOverlayOpenStore } from '@/stores/isOverlayOpen' const memberStore = useMemberStore() const { isLogined, info } = storeToRefs(memberStore) @@ -99,9 +100,10 @@ const toggleProfile = () => { isProfileVisible.value = !isProfileVisible.value } +const { setIsOverlayOpen } = useIsOverlayOpenStore() const onCloseSide = () => { isSideOpen.value = false - document.body.style.overflow = '' + setIsOverlayOpen(false) } watch( @@ -118,7 +120,7 @@ const { htmlRef: notifiRef } = useOutsideClick(() => isNotifiVisible.value && to const { htmlRef: profileRef } = useOutsideClick(() => isProfileVisible.value && toggleProfile()) const onOpenSide = () => { - document.body.style.overflow = 'hidden' + setIsOverlayOpen(true) isSideOpen.value = !isSideOpen.value } diff --git a/src/stores/counter.ts b/src/stores/counter.ts deleted file mode 100644 index 69a97a25..00000000 --- a/src/stores/counter.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { defineStore } from 'pinia' -import { computed, ref } from 'vue' - -export const useCounterStore = defineStore('counter', () => { - const count = ref(0) - const doubleCount = computed(() => count.value * 2) - function increment() { - count.value++ - } - - return { count, doubleCount, increment } -}) diff --git a/src/stores/isOverlayOpen.ts b/src/stores/isOverlayOpen.ts new file mode 100644 index 00000000..5b8ea707 --- /dev/null +++ b/src/stores/isOverlayOpen.ts @@ -0,0 +1,27 @@ +import { preventEnter } from '@/utils/preventEnter' +import { defineStore } from 'pinia' +import { ref } from 'vue' + +export const useIsOverlayOpenStore = defineStore('isOverlayOpen', () => { + const isOverlayOpen = ref(false) + const scrollbarWidth = ref(0) + + const setIsOverlayOpen = (isOpen: boolean) => { + if (isOpen) { + scrollbarWidth.value = window.innerWidth - document.documentElement.clientWidth + document.body.style.overflow = 'hidden' + window.addEventListener('keydown', preventEnter) + if (scrollbarWidth.value > 0) { + document.body.style.paddingRight = `${scrollbarWidth.value}px` + } + isOverlayOpen.value = true + } else { + document.body.style.overflow = '' + window.removeEventListener('keydown', preventEnter) + document.body.style.paddingRight = '' + isOverlayOpen.value = false + } + } + + return { isOverlayOpen, setIsOverlayOpen } +}) From 8267da1cb183ac070d36bdf0a44f0588905de0a1 Mon Sep 17 00:00:00 2001 From: seorang42 Date: Sat, 15 Feb 2025 17:27:24 +0900 Subject: [PATCH 02/13] =?UTF-8?q?:bug:=20[fix]=20:=20=EC=98=A4=EB=B2=84?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=20=EC=83=9D=EA=B8=B8=20=EB=95=8C=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A1=A4=20=EC=82=AC=EB=9D=BC=EC=A7=90=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20TopBar=20=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=95=84=EC=9B=83=20=EB=B0=80=EB=A6=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/top-bar/TopBar.vue | 18 ++++++++++++++---- src/stores/isOverlayOpen.ts | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/components/top-bar/TopBar.vue b/src/components/top-bar/TopBar.vue index cd51d551..0e79c106 100644 --- a/src/components/top-bar/TopBar.vue +++ b/src/components/top-bar/TopBar.vue @@ -1,5 +1,7 @@