diff --git a/src/App.vue b/src/App.vue
index 64735e3..6b5a69d 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -13,6 +13,7 @@
+
@@ -43,6 +44,7 @@
import HelpModal from './components/HelpModal.vue';
import FeedbackModal from './components/FeedbackModal.vue';
import Breadcrumbs from './components/Breadcrumbs.vue';
+ import ToastContainer from './components/utilities/ToastContainer.vue';
const isHelpModalOpen = ref(false);
const isFeedbackModalOpen = ref(false);
diff --git a/src/components/layout/Navbar.vue b/src/components/layout/Navbar.vue
index 0c962e4..2928bbe 100644
--- a/src/components/layout/Navbar.vue
+++ b/src/components/layout/Navbar.vue
@@ -16,7 +16,7 @@
-
+
@@ -46,6 +46,7 @@
('save');
+ const isSaving = ref(false);
const authStore = useAuthStore();
const projectStore = useProjectStore();
const { createProject, openProject, saveProject, saveAsProject } = useProjectManager();
+ const { addToast } = useToast();
const handleOpenProject = async (project: Project) => {
await openProject(project);
@@ -111,21 +115,38 @@
const handleQuickSave = async () => {
if (projectStore.currentProject?.name) {
- await saveProject(projectStore.currentProject.name);
+ isSaving.value = true;
+ try {
+ await saveProject(projectStore.currentProject.name);
+ addToast('Project saved successfully', 'success');
+ } catch (error) {
+ addToast('Failed to save project', 'error');
+ console.error(error);
+ } finally {
+ isSaving.value = false;
+ }
} else {
openSaveModal('save');
}
};
const handleSaveProject = async (name: string) => {
+ isSaving.value = true;
try {
if (saveMode.value === 'save-as') {
await saveAsProject(name);
+ addToast('Project saved as new copy', 'success');
} else {
await saveProject(name);
+ addToast('Project saved successfully', 'success');
}
- } catch {
- // Error handled in composable
+ isSaveProjectModalOpen.value = false;
+ } catch (error) {
+ addToast('Failed to save project', 'error');
+ console.error(error);
+ // Error handled in composable but kept here for toast
+ } finally {
+ isSaving.value = false;
}
};
diff --git a/src/components/layout/navbar/NavbarMobileMenu.vue b/src/components/layout/navbar/NavbarMobileMenu.vue
index 8c5f492..ab4165e 100644
--- a/src/components/layout/navbar/NavbarMobileMenu.vue
+++ b/src/components/layout/navbar/NavbarMobileMenu.vue
@@ -58,8 +58,14 @@
$emit('close');
"
class="w-full text-left flex items-center gap-3 px-3 py-2 rounded-md text-base font-medium text-gray-700 dark:text-gray-200 hover:bg-gray-50 dark:hover:bg-gray-800 hover:text-indigo-600 dark:hover:text-indigo-400 transition-colors"
+ :disabled="isSaving"
>
- Save project
+
+
+ {{ isSaving ? 'Saving...' : 'Save project' }}