Refactor package dependencies and update ApplyProject component

This commit is contained in:
Pattadon 2024-10-24 15:14:09 +07:00
parent 29be79f6e8
commit 4b5be49874
5 changed files with 63 additions and 38 deletions

28
package-lock.json generated
View File

@ -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",

View File

@ -16,6 +16,7 @@ const BUCKET_PHOTOS_NAME = "project-additional-photos";
export default function ApplyProject() {
const onSubmit: SubmitHandler<projectSchema> = 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();

View File

@ -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<string[]>([]);
const [selectedTag, setSelectedTag] = useState<
{ id: number; value: string }[]
>([]);
const handleFileChange = (
event: React.ChangeEvent<HTMLInputElement>,
@ -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..."}
<ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
</Button>
@ -505,19 +507,19 @@ const ProjectForm = ({
<CommandGroup>
{tag.map((tag) => (
<CommandItem
key={tag.value}
key={tag.id}
value={tag.value}
onSelect={(currentValue) => {
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 = ({
<Check
className={cn(
"h-4",
selectedTag.includes(tag.value)
selectedTag.some((t) => t.id === tag.id)
? "opacity-100"
: "opacity-0"
)}
@ -552,23 +554,21 @@ const ProjectForm = ({
<div className="flex flex-wrap space-x-3">
{selectedTag.map((tag) => (
<div
key={tag}
key={tag.id}
className="flex items-center space-x-1 p-1 rounded mt-2 outline outline-offset-2 outline-1"
>
<span>{tag}</span>
<span>{tag.value}</span>
<button
onClick={() =>
onClick={() => {
setSelectedTag((prev) => {
const updatedTags = prev.filter(
(item) => item !== tag
(t) => t.id !== tag.id
);
field.onChange(updatedTags);
field.onChange(updatedTags.map((t) => t.id));
return updatedTags;
})
}
});
}}
>
{/* delete button */}
<X className="h-4 w-4" />
</button>
</div>

View File

@ -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."),
});