Browse Source

feat: prefill project directory from last-used path in new project flow

Saves the base directory to localStorage when creating a project and
prefills it next time the "New Project" modal opens, reducing repetitive
path entry for users who store projects under the same parent directory.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
handoff-20260429-1057
shrimbly 4 months ago
parent
commit
c7fd3cd241
  1. 6
      src/components/ProjectSetupModal.tsx
  2. 12
      src/store/utils/localStorage.ts

6
src/components/ProjectSetupModal.tsx

@ -5,7 +5,7 @@ import { generateWorkflowId, useWorkflowStore } from "@/store/workflowStore";
import { ProviderType, ProviderSettings, NodeDefaultsConfig, LLMProvider, LLMModelType } from "@/types";
import { CanvasNavigationSettings, PanMode, ZoomMode, SelectionMode } from "@/types/canvas";
import { EnvStatusResponse } from "@/app/api/env-status/route";
import { loadNodeDefaults, saveNodeDefaults } from "@/store/utils/localStorage";
import { loadNodeDefaults, saveNodeDefaults, getLastProjectBaseDir, setLastProjectBaseDir } from "@/store/utils/localStorage";
import { ProviderModel } from "@/lib/providers/types";
import { ModelSearchDialog } from "@/components/modals/ModelSearchDialog";
import { useInlineParameters } from "@/hooks/useInlineParameters";
@ -199,7 +199,7 @@ export function ProjectSetupModal({
setExternalStorage(useExternalImageStorage);
} else if (mode === "new") {
setName("");
setDirectoryPath("");
setDirectoryPath(getLastProjectBaseDir() || "");
setExternalStorage(true);
}
@ -300,6 +300,8 @@ export function ProjectSetupModal({
const id = mode === "new" ? generateWorkflowId() : useWorkflowStore.getState().workflowId || generateWorkflowId();
// Update external storage setting
setUseExternalImageStorage(externalStorage);
// Remember the base directory for next time
setLastProjectBaseDir(directoryPath);
onSave(id, name.trim(), fullProjectPath);
setIsValidating(false);
} catch (err) {

12
src/store/utils/localStorage.ts

@ -19,6 +19,7 @@ export const PROVIDER_SETTINGS_KEY = "node-banana-provider-settings";
export const RECENT_MODELS_KEY = "node-banana-recent-models";
export const NODE_DEFAULTS_KEY = "node-banana-node-defaults";
export const CANVAS_NAVIGATION_KEY = "node-banana-canvas-navigation";
export const LAST_PROJECT_BASE_DIR_KEY = "node-banana-last-project-dir";
// Maximum recent models to store (show 4 in UI, keep 8 for persistence)
export const MAX_RECENT_MODELS = 8;
@ -216,6 +217,17 @@ export const saveCanvasNavigationSettings = (settings: CanvasNavigationSettings)
localStorage.setItem(CANVAS_NAVIGATION_KEY, JSON.stringify(settings));
};
// Last project base directory helpers
export const getLastProjectBaseDir = (): string | null => {
if (typeof window === "undefined") return null;
return localStorage.getItem(LAST_PROJECT_BASE_DIR_KEY);
};
export const setLastProjectBaseDir = (dir: string): void => {
if (typeof window === "undefined") return;
localStorage.setItem(LAST_PROJECT_BASE_DIR_KEY, dir);
};
// Workflow ID generator
export const generateWorkflowId = (): string =>
`wf_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;

Loading…
Cancel
Save