CreateWine is sort of working. It's not pushing producer id though
Some checks failed
Vercel Production Deployment / Deploy-Production (push) Failing after 43s
Some checks failed
Vercel Production Deployment / Deploy-Production (push) Failing after 43s
This commit is contained in:
parent
52a39c9ede
commit
17c0c0e853
@ -1,7 +1,6 @@
|
||||
import { type Config } from "drizzle-kit";
|
||||
import "./src/server/db/envConfig"
|
||||
|
||||
|
||||
export default {
|
||||
schema: "./src/server/db/schema.ts",
|
||||
dialect: "postgresql",
|
||||
|
@ -1,24 +1,59 @@
|
||||
"use client";
|
||||
|
||||
import { FormEvent } from "react";
|
||||
import { allProducers, insertWine } from "~/server/db";
|
||||
'use client'
|
||||
import { ChangeEvent, FormEvent, useEffect, useState } from "react";
|
||||
import { addWine } from "../server/actions/addWine";
|
||||
import { getProducers } from "../server/actions/allProducers";
|
||||
|
||||
export default function CreateWine() {
|
||||
function handleSubmit(event: FormEvent<HTMLFormElement>) {
|
||||
event.preventDefault();
|
||||
interface Producer {
|
||||
id: string;
|
||||
name: string;
|
||||
createdAt: Date;
|
||||
country: string;
|
||||
region: string;
|
||||
email: string;
|
||||
}
|
||||
|
||||
const formData = new FormData(event.currentTarget);
|
||||
const response = insertWine(formData);
|
||||
|
||||
|
||||
export default function CreateWine(){
|
||||
const [name, setName] = useState('');
|
||||
const [producer, setProducer] = useState('');
|
||||
const [allProducers, setAllProducers] = useState<Producer[]>([]);
|
||||
|
||||
useEffect(() => {
|
||||
const fetchProducers = async () => {
|
||||
try {
|
||||
const producers = await getProducers();
|
||||
setAllProducers(producers);
|
||||
} catch (error) {
|
||||
console.error("Failed to fetch producers:", error);
|
||||
}
|
||||
};
|
||||
fetchProducers();
|
||||
}, []);
|
||||
|
||||
const handleName = (event: ChangeEvent<HTMLInputElement>) => {
|
||||
setName(event.target.value);
|
||||
}
|
||||
const handleProducer = (event: ChangeEvent<HTMLSelectElement>) => {
|
||||
setProducer(event.target.value);
|
||||
}
|
||||
const handleAdd = async (event: FormEvent) => {
|
||||
event.preventDefault();
|
||||
addWine(producer, name);
|
||||
setName('');
|
||||
};
|
||||
return (
|
||||
<form onSubmit={handleSubmit}>
|
||||
<select name="producer" id="producer">
|
||||
{allProducers.map((producer) => (
|
||||
<option key={producer.id} value={producer.id}>
|
||||
{producer.name}
|
||||
<div>
|
||||
<input type="text" onChange={handleName} value={name} />
|
||||
<select name="producer" onSelect={handleProducer}>
|
||||
{allProducers.map((item) => (
|
||||
<option key={item.id} value={item.id}>
|
||||
{item.name}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
</form>
|
||||
<button onClick={handleAdd} >Submit wine</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
@ -1,9 +1,11 @@
|
||||
import { FormEvent } from "react";
|
||||
import { allWines, insertWine, allProducers } from "~/server/db";
|
||||
import { getProducers } from "~/server/actions/allProducers";
|
||||
import { getWines } from "../server/actions/allWines";
|
||||
import CreateWine from "./CreateWine";
|
||||
|
||||
export const dynamic = "force-dynamic";
|
||||
|
||||
const allWines = await getWines();
|
||||
const allProducers = await getProducers();
|
||||
|
||||
function WineCards() {
|
||||
return (
|
||||
<>
|
||||
@ -21,7 +23,7 @@ export default async function HomePage() {
|
||||
<main className="">
|
||||
<div className="container ">
|
||||
<h1>Yes hello</h1>
|
||||
{/* <CreateWine /> */}
|
||||
<CreateWine />
|
||||
<WineCards />
|
||||
</div>
|
||||
</main>
|
||||
|
11
src/server/actions/addWine.ts
Normal file
11
src/server/actions/addWine.ts
Normal file
@ -0,0 +1,11 @@
|
||||
'use server'
|
||||
import { db } from '../db/index'
|
||||
import { wines } from '../db/schema'
|
||||
|
||||
export const addWine = async (producer: string, name: string) => {
|
||||
await db.insert(wines).values({
|
||||
producer: producer,
|
||||
name: name,
|
||||
})
|
||||
.returning();
|
||||
};
|
7
src/server/actions/allProducers.ts
Normal file
7
src/server/actions/allProducers.ts
Normal file
@ -0,0 +1,7 @@
|
||||
'use server'
|
||||
import { db } from "../db/index";
|
||||
|
||||
|
||||
export async function getProducers(){
|
||||
return db.query.producers.findMany();
|
||||
}
|
7
src/server/actions/allWines.ts
Normal file
7
src/server/actions/allWines.ts
Normal file
@ -0,0 +1,7 @@
|
||||
'use server'
|
||||
import { db } from "../db/index";
|
||||
|
||||
|
||||
export async function getWines(){
|
||||
return db.query.wines.findMany();
|
||||
}
|
@ -1,5 +1,3 @@
|
||||
import { drizzle } from 'drizzle-orm/vercel-postgres';
|
||||
import { sql } from "@vercel/postgres";
|
||||
import {
|
||||
pgTableCreator,
|
||||
text,
|
||||
|
Loading…
Reference in New Issue
Block a user