feat: merge TaskDetailViewModal with modal

This commit is contained in:
Dominik Pschenitschni 2022-02-05 17:29:15 +01:00
parent de626eab31
commit 6827390b77
No known key found for this signature in database
GPG key ID: B257AC0149F43A77
3 changed files with 54 additions and 58 deletions

View file

@ -36,9 +36,14 @@
</router-view> </router-view>
<transition name="modal"> <transition name="modal">
<TaskDetailViewModal v-if="currentModal" > <modal
v-if="currentModal"
@close="closeModal()"
variant="scrolling"
class="task-detail-view-modal"
>
<component :is="currentModal" /> <component :is="currentModal" />
</TaskDetailViewModal> </modal>
</transition> </transition>
<a <a
@ -62,7 +67,6 @@ import {useEventListener} from '@vueuse/core'
import {CURRENT_LIST, KEYBOARD_SHORTCUTS_ACTIVE, MENU_ACTIVE} from '@/store/mutation-types' import {CURRENT_LIST, KEYBOARD_SHORTCUTS_ACTIVE, MENU_ACTIVE} from '@/store/mutation-types'
import Navigation from '@/components/home/navigation.vue' import Navigation from '@/components/home/navigation.vue'
import QuickActions from '@/components/quick-actions/quick-actions.vue' import QuickActions from '@/components/quick-actions/quick-actions.vue'
import TaskDetailViewModal from '@/views/tasks/TaskDetailViewModal.vue'
import BaseButton from '@/components/base/BaseButton.vue' import BaseButton from '@/components/base/BaseButton.vue'
function useRouteWithModal() { function useRouteWithModal() {
@ -100,10 +104,22 @@ function useRouteWithModal() {
) )
}) })
return { routeWithModal, currentModal } function closeModal() {
const historyState = computed(() => route.fullPath && window.history.state)
if (historyState.value) {
router.back()
} else {
const backdropRoute = historyState.value?.backdropView && router.resolve(historyState.value.backdropView)
router.push(backdropRoute)
}
} }
const { routeWithModal, currentModal } = useRouteWithModal() return { routeWithModal, currentModal, closeModal }
}
const { routeWithModal, currentModal, closeModal } = useRouteWithModal()
const store = useStore() const store = useStore()

View file

@ -22,6 +22,13 @@
'is-wide': wide 'is-wide': wide
}" }"
> >
<BaseButton
@click="emit('close')"
class="close"
>
<icon icon="times"/>
</BaseButton>
<slot> <slot>
<div class="header"> <div class="header">
<slot name="header"></slot> <slot name="header"></slot>
@ -54,6 +61,8 @@
</template> </template>
<script> <script>
import BaseButton from '@/components/base/BaseButton.vue'
export const TRANSITION_NAMES = { export const TRANSITION_NAMES = {
MODAL: 'modal', MODAL: 'modal',
FADE: 'fade', FADE: 'fade',
@ -71,6 +80,11 @@ function validValue(values) {
export default { export default {
name: 'modal', name: 'modal',
components: {
BaseButton,
},
mounted() { mounted() {
document.addEventListener('keydown', (e) => { document.addEventListener('keydown', (e) => {
// Close the model when escape is pressed // Close the model when escape is pressed
@ -197,4 +211,23 @@ export default {
} }
} }
} }
.close {
position: fixed;
top: 5px;
right: 26px;
color: var(--white);
font-size: 2rem;
@media screen and (max-width: $desktop) {
color: var(--dark);
}
}
</style>
<style lang="scss">
// Close icon SVG uses currentColor, change the color to keep it visible
.dark .task-detail-view-modal .close {
color: var(--grey-900);
}
</style> </style>

View file

@ -1,53 +0,0 @@
<template>
<modal
@close="close()"
variant="scrolling"
class="task-detail-view-modal"
>
<BaseButton @click="close()" class="close">
<icon icon="times"/>
</BaseButton>
<slot />
</modal>
</template>
<script setup lang="ts">
import {computed} from 'vue'
import {useRouter, useRoute} from 'vue-router'
import BaseButton from '@/components/base/BaseButton.vue'
const route = useRoute()
const historyState = computed(() => route.fullPath && window.history.state)
const router = useRouter()
function close() {
if (historyState.value) {
router.back()
} else {
const backdropRoute = historyState.value?.backdropView && router.resolve(historyState.value.backdropView)
router.push(backdropRoute)
}
}
</script>
<style lang="scss" scoped>
.close {
position: fixed;
top: 5px;
right: 26px;
color: var(--white);
font-size: 2rem;
@media screen and (max-width: $desktop) {
color: var(--dark);
}
}
</style>
<style lang="scss">
// Close icon SVG uses currentColor, change the color to keep it visible
.dark .task-detail-view-modal .close {
color: var(--grey-900);
}
</style>