diff --git a/package-lock.json b/package-lock.json index 24952b6..0bc78fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.1.0", "dependencies": { "@hookform/resolvers": "^3.9.0", + "@radix-ui/react-alert-dialog": "^1.1.2", "@radix-ui/react-avatar": "^1.1.0", "@radix-ui/react-dialog": "^1.1.2", "@radix-ui/react-dropdown-menu": "^2.1.1", @@ -940,6 +941,33 @@ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==" }, + "node_modules/@radix-ui/react-alert-dialog": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.2.tgz", + "integrity": "sha512-eGSlLzPhKO+TErxkiGcCZGuvbVMnLA1MTnyBksGOeGRGkxHiiJUujsjmNTdWTm4iHVSRaUao9/4Ur671auMghQ==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dialog": "1.1.2", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-arrow": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", diff --git a/src/app/project/apply/page.tsx b/src/app/project/apply/page.tsx index 546c281..c3b9518 100644 --- a/src/app/project/apply/page.tsx +++ b/src/app/project/apply/page.tsx @@ -16,6 +16,7 @@ const BUCKET_PHOTOS_NAME = "project-additional-photos"; export default function ApplyProject() { const onSubmit: SubmitHandler = async (data) => { alert("มาแน้ววว"); + console.table(data); console.log(typeof data["projectPhotos"], data["projectPhotos"]); }; @@ -26,20 +27,16 @@ export default function ApplyProject() { const pitchType = typeof recvData["projectPitchDeck"]; const { data, error } = await supabase - .from("business_application") + .from("project_application") .insert([ { user_id: user?.id, - business_name: recvData["projectName"], - business_type_id: recvData["industry"], - location: recvData["country"], - is_for_sale: recvData["isForSale"], - is_generating_revenue: recvData["isGenerating"], - is_in_us: recvData["isInUS"], pitch_deck_url: pitchType === "string" ? recvData["businessPitchDeck"] : "", - money_raised_to_date: recvData["totalRaised"], - community_size: recvData["communitySize"], + target_investment: recvData["targetInvest"], + deadline: recvData["deadline"], + project_name: recvData["projectName"], + }, ]) .select(); diff --git a/src/components/ProjectForm.tsx b/src/components/ProjectForm.tsx index f9699e8..9a0a81b 100644 --- a/src/components/ProjectForm.tsx +++ b/src/components/ProjectForm.tsx @@ -55,7 +55,9 @@ const ProjectForm = ({ const [projectPitchFile, setProjectPitchFile] = useState(""); const [tag, setTag] = useState<{ id: number; value: string }[]>([]); const [open, setOpen] = useState(false); - const [selectedTag, setSelectedTag] = useState([]); + const [selectedTag, setSelectedTag] = useState< + { id: number; value: string }[] + >([]); const handleFileChange = ( event: React.ChangeEvent, @@ -165,7 +167,7 @@ const ProjectForm = ({ fieldName="projectType" choices={projectType} handleFunction={(selectedValues: any) => { - field.onChange(selectedValues.name); + field.onChange(selectedValues.id); }} description={ <>Please specify the primary purpose of the funds @@ -492,7 +494,7 @@ const ProjectForm = ({ className="w-96 justify-between overflow-hidden text-ellipsis whitespace-nowrap" > {selectedTag.length > 0 - ? selectedTag.join(", ") + ? selectedTag.map((t) => t.value).join(", ") : "Select tags..."} @@ -505,19 +507,19 @@ const ProjectForm = ({ {tag.map((tag) => ( { + onSelect={() => { setSelectedTag((prev) => { - const updatedTags = prev.includes( - currentValue - ) - ? prev.filter( - (item) => item !== currentValue - ) - : [...prev, currentValue]; - field.onChange(updatedTags); - + const exists = prev.find( + (t) => t.id === tag.id + ); + const updatedTags = exists + ? prev.filter((t) => t.id !== tag.id) + : [...prev, tag]; + field.onChange( + updatedTags.map((t) => t.id) + ); return updatedTags; }); setOpen(false); @@ -526,7 +528,7 @@ const ProjectForm = ({ t.id === tag.id) ? "opacity-100" : "opacity-0" )} @@ -552,23 +554,21 @@ const ProjectForm = ({
{selectedTag.map((tag) => (
- {tag} + {tag.value}
diff --git a/src/components/projectCard.tsx b/src/components/projectCard.tsx index 5734f04..b29d726 100644 --- a/src/components/projectCard.tsx +++ b/src/components/projectCard.tsx @@ -25,7 +25,7 @@ export function ProjectCard(props: ProjectCardProps) { return (
@@ -58,7 +58,7 @@ export function ProjectCard(props: ProjectCardProps) { {/* Info 1 */}
-
+
@@ -79,7 +79,7 @@ export function ProjectCard(props: ProjectCardProps) {
{/* Info 2 */} -
+
{/* Info 2 (Visible on hover) */}

diff --git a/src/types/schemas/application.schema.ts b/src/types/schemas/application.schema.ts index 6e0c32b..f4472e4 100644 --- a/src/types/schemas/application.schema.ts +++ b/src/types/schemas/application.schema.ts @@ -21,7 +21,7 @@ const projectFormSchema = z.object({ projectName: z.string().min(5, { message: "Project name must be at least 5 characters.", }), - projectType: z.string({ + projectType: z.number({ required_error: "Please select one of the option", }), shortDescription: z @@ -91,7 +91,7 @@ const projectFormSchema = z.object({ message: "Deadline must be in the future.", }), tag: z - .array(z.string()) + .array(z.number()) .min(1, "Please provide at least one tag.") .max(5, "You can provide up to 5 tags."), });