[FEAT] Format code
This commit is contained in:
95
src/composables/useProjectManager.ts
Normal file
95
src/composables/useProjectManager.ts
Normal file
@@ -0,0 +1,95 @@
|
||||
import { ref, toRef, watch } from 'vue';
|
||||
import { useLayers, createEmptyLayer, getMaxDimensionsAcrossLayers } 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 settingsStore = useSettingsStore();
|
||||
const projectStore = useProjectStore();
|
||||
const { layers, columns, activeLayerId, visibleLayers } = useLayers();
|
||||
|
||||
const { generateProjectJSON, loadProjectData } = useExportLayers(
|
||||
layers,
|
||||
columns,
|
||||
toRef(settingsStore, 'negativeSpacingEnabled'),
|
||||
activeLayerId,
|
||||
toRef(settingsStore, 'backgroundColor'),
|
||||
toRef(settingsStore, 'manualCellSizeEnabled'),
|
||||
toRef(settingsStore, 'manualCellWidth'),
|
||||
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);
|
||||
settingsStore.manualCellSizeEnabled = true;
|
||||
|
||||
// 2. Reset Layers
|
||||
const newLayer = createEmptyLayer('Base');
|
||||
layers.value = [newLayer];
|
||||
activeLayerId.value = newLayer.id;
|
||||
|
||||
// 3. Set Columns
|
||||
columns.value = config.columns;
|
||||
|
||||
// 4. Reset Project Store
|
||||
projectStore.currentProject = null;
|
||||
|
||||
// 5. Force Editor Active
|
||||
isEditorActive.value = true;
|
||||
};
|
||||
|
||||
const openProject = async (project: Project) => {
|
||||
try {
|
||||
if (project.data) {
|
||||
await loadProjectData(project.data);
|
||||
}
|
||||
projectStore.currentProject = project;
|
||||
isEditorActive.value = true;
|
||||
} catch (e) {
|
||||
console.error('Failed to open project', e);
|
||||
alert('Failed to open project data');
|
||||
}
|
||||
};
|
||||
|
||||
const saveProject = async (name: string) => {
|
||||
try {
|
||||
const data = await generateProjectJSON();
|
||||
|
||||
if (projectStore.currentProject && projectStore.currentProject.name === name) {
|
||||
await projectStore.updateProject(projectStore.currentProject.id, data);
|
||||
} else {
|
||||
await projectStore.createProject(name, data);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
alert('Failed to save project');
|
||||
throw e; // Re-throw to let caller know
|
||||
}
|
||||
};
|
||||
|
||||
const closeEditor = () => {
|
||||
isEditorActive.value = false;
|
||||
};
|
||||
|
||||
return {
|
||||
isEditorActive,
|
||||
createProject,
|
||||
openProject,
|
||||
saveProject,
|
||||
closeEditor,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user