diff --git a/canvas/app/dashboard/project/all/create-project-form.tsx b/canvas/app/dashboard/project/all/create-project-form.tsx index be862e8..6d2b85e 100644 --- a/canvas/app/dashboard/project/all/create-project-form.tsx +++ b/canvas/app/dashboard/project/all/create-project-form.tsx @@ -120,6 +120,29 @@ export function CreateProjectForm(props: TCreateProjectFormProps) { )} /> + {/* Workspace URI */} + ( + + Workspace + + + + + S3 Bucket URI for the workspace where you want to create this + project. + + + + )} + /> + {/* Parser */} ) { @@ -61,7 +45,11 @@ export function ProjectStepJobRuns(props: TProjectStepJobRunProps) { }); if (response.ok) { - submitJob(); + mutateFetchJob(); + } else { + toast({ + title: "Failed to save inputs.", + }); } } @@ -77,12 +65,6 @@ export function ProjectStepJobRuns(props: TProjectStepJobRunProps) { })); }, [job.inputs, project.dataset_uri]); - React.useEffect(() => { - if (isError || isSuccess) { - mutateFetchJob(); - } - }, [isError, isSuccess]); - return (
@@ -94,7 +76,7 @@ export function ProjectStepJobRuns(props: TProjectStepJobRunProps) { isEditable={true} buttonTitle="Edit job inputs" primaryAction={{ - label: "Run job", + label: "Save", onClick: updateAndSubmitJob, }} emptyInputPlaceholder="Add input" diff --git a/canvas/app/dashboard/project/id/[id]/view-input-modal.tsx b/canvas/app/dashboard/project/id/[id]/view-input-modal.tsx index e953a6a..07eea16 100644 --- a/canvas/app/dashboard/project/id/[id]/view-input-modal.tsx +++ b/canvas/app/dashboard/project/id/[id]/view-input-modal.tsx @@ -10,6 +10,7 @@ import { } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; +import { toast } from "@/components/ui/use-toast"; import { TProjectStepJobInput } from "@/services/job"; import { uploadToS3 } from "@/services/s3"; import { useProjectStore } from "@/stores/project"; @@ -46,14 +47,28 @@ export function ViewInputModal(props: TViewInputModalProps) { if (!fileInput) return; const file = fileInput.files?.[0]; - if (!file) return; + if (!file) { + return; + } setIsUploading(true); - await uploadToS3(url, { + const res = await uploadToS3(url, { ContentType: file.type, Body: file, projectId: project.id, }); + + if (!res) { + toast({ + title: "Failed to upload file.", + variant: "destructive", + }); + } else { + toast({ + title: "File uploaded successfully.", + }); + } + setIsUploading(false); } diff --git a/canvas/schema/create-project.ts b/canvas/schema/create-project.ts index 86c5180..5fc2889 100644 --- a/canvas/schema/create-project.ts +++ b/canvas/schema/create-project.ts @@ -6,6 +6,7 @@ export const createProjectSchema = z.object({ type: z.string(), description: z.string().min(10).max(60), name: z.string().min(3).max(30), + workspaceURI: z.string(), }); export type TCreateProjectFormData = z.infer; diff --git a/canvas/services/projects.ts b/canvas/services/projects.ts index 80ff921..1756673 100644 --- a/canvas/services/projects.ts +++ b/canvas/services/projects.ts @@ -8,6 +8,7 @@ export type TProject = { description: string; type: string; parser: string; + workspace_uri: string; }; export async function getProjects(): Promise> { @@ -55,12 +56,13 @@ export type TCreateProjectOptions = { type: string; name: string; description: string; + workspaceURI: string; }; export async function createProject( options: TCreateProjectOptions ): Promise { - const { dataset, parser, type, name, description } = options; + const { dataset, parser, type, name, description, workspaceURI } = options; const response = (await api .post( { @@ -69,6 +71,7 @@ export async function createProject( type, parser_type: parser, dataset_uri: dataset, + workspace_uri: workspaceURI, }, "/project" )