feat(10-10): wire OsDragOverlay into App.vue; expose handleOsDrop on FileManagerView
- App.vue: import + mount <OsDragOverlay @files-dropped="onOsFilesDropped" />
after <ToastContainer /> (overlay z-[9998] stays below toast z-[9999])
- App.vue: add onOsFilesDropped handler -> routeViewRef.value?.handleOsDrop?.(files)
- FileManagerView: extend defineExpose to include handleOsDrop delegating to
existing onFilesSelected({ files, autoClassify: true }) — no duplicate upload logic
- Full test suite: 198 passed, 0 failures
This commit is contained in:
@@ -7,6 +7,7 @@
|
|||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
<ToastContainer />
|
<ToastContainer />
|
||||||
|
<OsDragOverlay @files-dropped="onOsFilesDropped" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@@ -15,12 +16,17 @@ import { useRoute } from 'vue-router'
|
|||||||
import AppSidebar from './components/layout/AppSidebar.vue'
|
import AppSidebar from './components/layout/AppSidebar.vue'
|
||||||
import AuthLayout from './layouts/AuthLayout.vue'
|
import AuthLayout from './layouts/AuthLayout.vue'
|
||||||
import ToastContainer from './components/ui/ToastContainer.vue'
|
import ToastContainer from './components/ui/ToastContainer.vue'
|
||||||
|
import OsDragOverlay from './components/layout/OsDragOverlay.vue'
|
||||||
import { useTopicsStore } from './stores/topics.js'
|
import { useTopicsStore } from './stores/topics.js'
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const topicsStore = useTopicsStore()
|
const topicsStore = useTopicsStore()
|
||||||
const routeViewRef = ref(null)
|
const routeViewRef = ref(null)
|
||||||
|
|
||||||
|
function onOsFilesDropped(files) {
|
||||||
|
routeViewRef.value?.handleOsDrop?.(files)
|
||||||
|
}
|
||||||
|
|
||||||
function onKeydown(e) {
|
function onKeydown(e) {
|
||||||
const tag = document.activeElement?.tagName
|
const tag = document.activeElement?.tagName
|
||||||
if (['INPUT', 'TEXTAREA', 'SELECT'].includes(tag) || document.activeElement?.isContentEditable) return
|
if (['INPUT', 'TEXTAREA', 'SELECT'].includes(tag) || document.activeElement?.isContentEditable) return
|
||||||
|
|||||||
@@ -186,5 +186,6 @@ defineExpose({
|
|||||||
triggerUpload: () => browserRef.value?.triggerUpload?.(),
|
triggerUpload: () => browserRef.value?.triggerUpload?.(),
|
||||||
startNewFolder: () => browserRef.value?.startNewFolder?.(),
|
startNewFolder: () => browserRef.value?.startNewFolder?.(),
|
||||||
clearSearch: () => browserRef.value?.clearSearch?.(),
|
clearSearch: () => browserRef.value?.clearSearch?.(),
|
||||||
|
handleOsDrop: (files) => onFilesSelected({ files, autoClassify: true }),
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user