11<template lang="pug">
2- .layout.default-layout
2+ .layout.default-layout ( @drag.stop.prevent @dragstart.stop.prevent @dragend.stop.prevent @dragover.stop.prevent @drop.prevent )
33 AppPreloader
44 AppHeader( @on-click-credits-dialog ="isOpenCreditsDialog = true" )
55
66 // Main
7- .layout__inner
7+ .layout__inner (
8+ :class ="[dragEnterActiveClass]"
9+ @drag.stop.prevent
10+ @dragstart.stop.prevent
11+ @dragend.stop.prevent
12+ @dragover.stop.prevent ="onDragOver"
13+ @drop.prevent ="onFileDrop"
14+ )
815 .col.col-12
916 .router-view
1017 nuxt
1118
19+ // Drop target
20+ .drop-target ( v-if ="!preloader.isLoading && !isReady" @dragleave.stop.prevent ="onDragLeave" )
21+ span.drop-target__title {{ $t('uploader.drop') }}
22+
1223 // App Credits Dialog
1324 AppCreditsDialog( :is-open ="isOpenCreditsDialog" @on-close ="isOpenCreditsDialog = false" )
1425</template >
1526
1627<script >
17- import { defineComponent , ref } from ' @nuxtjs/composition-api'
28+ import { defineComponent , useStore , ref , computed } from ' @nuxtjs/composition-api'
1829import { AppPreloader } from ' @/components/Preloader'
1930import { AppHeader } from ' @/components/Header'
2031import { AppCreditsDialog } from ' @/components/Dialog'
@@ -26,10 +37,47 @@ export default defineComponent({
2637 AppCreditsDialog
2738 },
2839 setup () {
40+ const baseClassName = ' default-layout'
41+
42+ const store = useStore ()
43+
44+ const isActiveDragOver = ref (false )
45+
2946 const isOpenCreditsDialog = ref (false )
3047
48+ const preloader = computed (() => store .getters [' preloader/preloader' ])
49+ const isReady = computed (() => store .getters [' editor/isReady' ])
50+
51+ const onDragOver = () => {
52+ isActiveDragOver .value = true
53+ }
54+
55+ const onDragLeave = () => {
56+ isActiveDragOver .value = false
57+ }
58+
59+ const onFileDrop = event => {
60+ if (! isReady .value ) {
61+ store .commit (' editor/SET_DROPPED_FILES' , event .dataTransfer .files )
62+
63+ isActiveDragOver .value = false
64+ }
65+ }
66+
67+ const dragEnterActiveClass = computed (() => {
68+ if (isActiveDragOver .value ) {
69+ return ` ${ baseClassName} --dragOver`
70+ }
71+ })
72+
3173 return {
32- isOpenCreditsDialog
74+ preloader,
75+ isReady,
76+ isOpenCreditsDialog,
77+ onDragOver,
78+ onDragLeave,
79+ onFileDrop,
80+ dragEnterActiveClass
3381 }
3482 }
3583})
0 commit comments