From 79f9e3f7b203a2a4608f438fe3c5cc4e38c2755c Mon Sep 17 00:00:00 2001 From: root Date: Fri, 2 Jan 2026 00:47:41 +0100 Subject: [PATCH] [FEAT] Re-organize files --- src/App.vue | 7 +- .../layout/navbar/NavbarMobileMenu.vue | 7 +- .../layout/navbar/NavbarProjectActions.vue | 7 +- src/composables/useProjectManager.ts | 47 +- src/router/index.ts | 5 + src/views/EditorView.vue | 659 ++++++++++++++++++ src/views/HomeView.vue | 603 +--------------- 7 files changed, 733 insertions(+), 602 deletions(-) create mode 100644 src/views/EditorView.vue diff --git a/src/App.vue b/src/App.vue index 593e77b..64735e3 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,9 +1,9 @@ diff --git a/src/composables/useProjectManager.ts b/src/composables/useProjectManager.ts index f2a6721..587e97c 100644 --- a/src/composables/useProjectManager.ts +++ b/src/composables/useProjectManager.ts @@ -1,16 +1,15 @@ -import { ref, toRef, watch } from 'vue'; -import { useLayers, createEmptyLayer, getMaxDimensionsAcrossLayers } from '@/composables/useLayers'; +import { useRouter } from 'vue-router'; +import { toRef } from 'vue'; +import { useLayers, createEmptyLayer } from '@/composables/useLayers'; import { useSettingsStore } from '@/stores/useSettingsStore'; import { useProjectStore, type Project } from '@/stores/useProjectStore'; import { useExportLayers } from '@/composables/useExportLayers'; -// Global state for editor visibility -const isEditorActive = ref(false); - export const useProjectManager = () => { + const router = useRouter(); const settingsStore = useSettingsStore(); const projectStore = useProjectStore(); - const { layers, columns, activeLayerId, visibleLayers } = useLayers(); + const { layers, columns, activeLayerId } = useLayers(); const { generateProjectJSON, loadProjectData } = useExportLayers( layers, @@ -23,15 +22,6 @@ export const useProjectManager = () => { toRef(settingsStore, 'manualCellHeight') ); - // Watch for sprites to automatically open editor (legacy behavior support) - watch( - () => layers.value.some(l => l.sprites.length > 0), - hasSprites => { - if (hasSprites) isEditorActive.value = true; - }, - { immediate: true } - ); - const createProject = (config: { width: number; height: number; columns: number; rows: number }) => { // 1. Reset Settings settingsStore.setManualCellSize(config.width, config.height); @@ -48,8 +38,8 @@ export const useProjectManager = () => { // 4. Reset Project Store projectStore.currentProject = null; - // 5. Force Editor Active - isEditorActive.value = true; + // 5. Navigate to Editor + router.push('/editor'); }; const openProject = async (project: Project) => { @@ -58,7 +48,7 @@ export const useProjectManager = () => { await loadProjectData(project.data); } projectStore.currentProject = project; - isEditorActive.value = true; + router.push({ name: 'editor', params: { id: project.id } }); } catch (e) { console.error('Failed to open project', e); alert('Failed to open project data'); @@ -75,6 +65,10 @@ export const useProjectManager = () => { } else { // Create new project if none exists await projectStore.createProject(name, data); + // After creating, we should update route to include ID so subsequent saves update it + if (projectStore.currentProject) { + router.replace({ name: 'editor', params: { id: projectStore.currentProject.id } }); + } } } catch (e) { console.error(e); @@ -88,6 +82,10 @@ export const useProjectManager = () => { const data = await generateProjectJSON(); // Always create new await projectStore.createProject(name, data); + // Navigate to new project + if (projectStore.currentProject) { + router.push({ name: 'editor', params: { id: projectStore.currentProject.id } }); + } } catch (e) { console.error(e); alert('Failed to save project as new'); @@ -95,10 +93,6 @@ export const useProjectManager = () => { } }; - const closeEditor = () => { - isEditorActive.value = false; - }; - const closeProject = () => { // Reset Layers const newLayer = createEmptyLayer('Base'); @@ -111,12 +105,15 @@ export const useProjectManager = () => { // Reset Project Store projectStore.currentProject = null; - // Close Editor - isEditorActive.value = false; + // Navigate Home + router.push('/'); + }; + + const closeEditor = () => { + closeProject(); }; return { - isEditorActive, createProject, openProject, saveProject, diff --git a/src/router/index.ts b/src/router/index.ts index 704ac15..665ee18 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -44,6 +44,11 @@ const router = createRouter({ name: 'share', component: () => import('../views/ShareView.vue'), }, + { + path: '/editor/:id?', + name: 'editor', + component: () => import('../views/EditorView.vue'), + }, ], scrollBehavior(to, from, savedPosition) { if (savedPosition) { diff --git a/src/views/EditorView.vue b/src/views/EditorView.vue new file mode 100644 index 0000000..b545672 --- /dev/null +++ b/src/views/EditorView.vue @@ -0,0 +1,659 @@ + + + + + diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index c361fbf..4cf0142 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -1,7 +1,7 @@