From d2be4c98d52b1548f5e95047884a2c356e59c47c Mon Sep 17 00:00:00 2001 From: senshiacy Date: Tue, 23 Sep 2025 08:47:52 -0300 Subject: [PATCH 1/4] feat: add a page to register lectures --- src/app/semana/admin/palestra/page.tsx | 8 +- src/components/palestras/palestras_forms.tsx | 92 ++++++++++++++++++++ src/lib/submit.ts | 7 ++ 3 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 src/components/palestras/palestras_forms.tsx create mode 100644 src/lib/submit.ts diff --git a/src/app/semana/admin/palestra/page.tsx b/src/app/semana/admin/palestra/page.tsx index ff4c5d8..66413e3 100644 --- a/src/app/semana/admin/palestra/page.tsx +++ b/src/app/semana/admin/palestra/page.tsx @@ -1,3 +1,7 @@ +import PalestrasForms from "@/components/palestras/palestras_forms" + export default function PalestraPage() { - return <> -} + return ( + + ) +} \ No newline at end of file diff --git a/src/components/palestras/palestras_forms.tsx b/src/components/palestras/palestras_forms.tsx new file mode 100644 index 0000000..8563bf8 --- /dev/null +++ b/src/components/palestras/palestras_forms.tsx @@ -0,0 +1,92 @@ +'use client' + +import React from "react"; +import { useState, FormEvent, ChangeEvent } from 'react' + +export default function PalestrasForms() { + + const [numPalestrantes, setNumPalestrantes] = useState(1); // Por Default + + async function cadastrar_palestra(event : FormEvent) { + //'use server' + const formData = new FormData(event.currentTarget); + const title = formData.get("title"); + const name = formData.get("name"); + const day = formData.get("data"); + + const response = await fetch('/api/atividade/', { + method: 'POST', + headers: {'Content-Type': 'application/json'}, + body: JSON.stringify({ + "title" : title, + "name" : name, + "day" : day + }), + }) + + const res = await response.json(); + } + + function handleNumPlestrantes (event : ChangeEvent) { + event.preventDefault(); + + const value = parseInt(event.target.value); + if(!isNaN(value)) { + setNumPalestrantes(value); + } + } + + return ( + <> +
+
+
+ + +
+
+ + +
+ + {[...Array(numPalestrantes)].map((_, index) => ( +
+ + +
+ ))} + +
+ + +
+
+ +
+
+
+ + ) +} \ No newline at end of file diff --git a/src/lib/submit.ts b/src/lib/submit.ts new file mode 100644 index 0000000..d1776cd --- /dev/null +++ b/src/lib/submit.ts @@ -0,0 +1,7 @@ +import type { NextApiRequest, NextApiResponse } from "next"; + +export default async function handler(req : NextApiRequest, res : NextApiResponse) { + const data = req.body + const id = await createItem(data) + res.status(200).json({id}) +} \ No newline at end of file From b847e38bba1fa28f23a85260a1d19f9b0ef6288a Mon Sep 17 00:00:00 2001 From: senshiacy Date: Tue, 23 Sep 2025 09:04:41 -0300 Subject: [PATCH 2/4] fix: fixing date limits Now, you can set a date between 2025-10-20 to 2025-10-25 (12h-18h). --- src/app/semana/admin/palestra/page.tsx | 8 +- src/components/palestras/palestras_forms.tsx | 174 +++++++++++-------- src/lib/submit.ts | 12 +- 3 files changed, 106 insertions(+), 88 deletions(-) diff --git a/src/app/semana/admin/palestra/page.tsx b/src/app/semana/admin/palestra/page.tsx index 66413e3..a9d61f3 100644 --- a/src/app/semana/admin/palestra/page.tsx +++ b/src/app/semana/admin/palestra/page.tsx @@ -1,7 +1,5 @@ -import PalestrasForms from "@/components/palestras/palestras_forms" +import PalestrasForms from '@/components/palestras/palestras_forms' export default function PalestraPage() { - return ( - - ) -} \ No newline at end of file + return +} diff --git a/src/components/palestras/palestras_forms.tsx b/src/components/palestras/palestras_forms.tsx index 8563bf8..47f99ad 100644 --- a/src/components/palestras/palestras_forms.tsx +++ b/src/components/palestras/palestras_forms.tsx @@ -1,92 +1,112 @@ 'use client' -import React from "react"; +import React from 'react' import { useState, FormEvent, ChangeEvent } from 'react' export default function PalestrasForms() { + const [numPalestrantes, setNumPalestrantes] = useState(1) // Por Default - const [numPalestrantes, setNumPalestrantes] = useState(1); // Por Default + async function cadastrar_palestra(event: FormEvent) { + //'use server' + const formData = new FormData(event.currentTarget) + const title = formData.get('title') + const day = formData.get('data') - async function cadastrar_palestra(event : FormEvent) { - //'use server' - const formData = new FormData(event.currentTarget); - const title = formData.get("title"); - const name = formData.get("name"); - const day = formData.get("data"); + const name : string[] = []; + for(let i = 0; i < numPalestrantes; i++) { + const nome = formData.get(`name-${i}`); + if(nome) { + name.push(nome.toString()); + } + } - const response = await fetch('/api/atividade/', { - method: 'POST', - headers: {'Content-Type': 'application/json'}, - body: JSON.stringify({ - "title" : title, - "name" : name, - "day" : day - }), - }) + const response = await fetch('/api/atividade/', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + title: title, + name: name, + day: day, + }), + }) - const res = await response.json(); - } + const res = await response.json() + } - function handleNumPlestrantes (event : ChangeEvent) { - event.preventDefault(); + function handleNumPlestrantes(event: ChangeEvent) { + event.preventDefault() - const value = parseInt(event.target.value); - if(!isNaN(value)) { - setNumPalestrantes(value); - } + const value = parseInt(event.target.value) + if (!isNaN(value)) { + setNumPalestrantes(value) } + } - return ( - <> -
-
-
- - -
-
- - -
- - {[...Array(numPalestrantes)].map((_, index) => ( -
- - -
- ))} + return ( + <> +
+ +
+ + +
+
+ + +
-
- - -
-
- -
- + {[...Array(numPalestrantes)].map((_, index) => ( +
+ +
- - ) -} \ No newline at end of file + ))} + +
+ + +
+
+ +
+ +
+ + ) +} diff --git a/src/lib/submit.ts b/src/lib/submit.ts index d1776cd..0750cb5 100644 --- a/src/lib/submit.ts +++ b/src/lib/submit.ts @@ -1,7 +1,7 @@ -import type { NextApiRequest, NextApiResponse } from "next"; +import type { NextApiRequest, NextApiResponse } from 'next' -export default async function handler(req : NextApiRequest, res : NextApiResponse) { - const data = req.body - const id = await createItem(data) - res.status(200).json({id}) -} \ No newline at end of file +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + const data = req.body + const id = await createItem(data) + res.status(200).json({ id }) +} From 4334bf998afb28d689dde3a005e54bf8dcbe4c4f Mon Sep 17 00:00:00 2001 From: senshiacy Date: Tue, 23 Sep 2025 09:42:42 -0300 Subject: [PATCH 3/4] fix: fixing range of speakers --- src/components/palestras/palestras_forms.tsx | 45 ++++++++++++-------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/src/components/palestras/palestras_forms.tsx b/src/components/palestras/palestras_forms.tsx index 47f99ad..10379c2 100644 --- a/src/components/palestras/palestras_forms.tsx +++ b/src/components/palestras/palestras_forms.tsx @@ -1,23 +1,23 @@ 'use client' import React from 'react' -import { useState, FormEvent, ChangeEvent } from 'react' +import { useState, ChangeEvent } from 'react' export default function PalestrasForms() { const [numPalestrantes, setNumPalestrantes] = useState(1) // Por Default + const [erroPalestrantes, setErroPalestrantes] = useState('') - async function cadastrar_palestra(event: FormEvent) { - //'use server' - const formData = new FormData(event.currentTarget) + async function cadastrar_palestra(formData: FormData) { + //const formData = new FormData(event.currentTarget) const title = formData.get('title') const day = formData.get('data') - const name : string[] = []; - for(let i = 0; i < numPalestrantes; i++) { - const nome = formData.get(`name-${i}`); - if(nome) { - name.push(nome.toString()); - } + const name: string[] = [] + for (let i = 0; i < numPalestrantes; i++) { + const nome = formData.get(`name-${i}`) + if (nome) { + name.push(nome.toString()) + } } const response = await fetch('/api/atividade/', { @@ -34,11 +34,13 @@ export default function PalestrasForms() { } function handleNumPlestrantes(event: ChangeEvent) { - event.preventDefault() - const value = parseInt(event.target.value) - if (!isNaN(value)) { + if (!isNaN(value) && value >= 1 && value <= 20) { + setErroPalestrantes('') setNumPalestrantes(value) + } else { + setErroPalestrantes('Digite um valor entre 1 e 20') + setNumPalestrantes(0) } } @@ -47,13 +49,18 @@ export default function PalestrasForms() {
- +
{[...Array(numPalestrantes)].map((_, index) => (
-
From e7e2bf36c69af26e6cdef2fbf8d13e5411b5e2c8 Mon Sep 17 00:00:00 2001 From: senshiacy Date: Thu, 25 Sep 2025 10:33:04 -0300 Subject: [PATCH 4/4] feat: New Implementation --- src/components/palestras/palestras_forms.tsx | 150 ++++++++++--------- src/components/palestras/palestras_label.tsx | 24 +++ 2 files changed, 106 insertions(+), 68 deletions(-) create mode 100644 src/components/palestras/palestras_label.tsx diff --git a/src/components/palestras/palestras_forms.tsx b/src/components/palestras/palestras_forms.tsx index 10379c2..48647fc 100644 --- a/src/components/palestras/palestras_forms.tsx +++ b/src/components/palestras/palestras_forms.tsx @@ -1,12 +1,14 @@ 'use client' import React from 'react' -import { useState, ChangeEvent } from 'react' +import { useState, MouseEventHandler } from 'react' +import PalestrasLabel from './palestras_label' export default function PalestrasForms() { const [numPalestrantes, setNumPalestrantes] = useState(1) // Por Default - const [erroPalestrantes, setErroPalestrantes] = useState('') + /* + const [erroPalestrantes, setErroPalestrantes] = useState('') async function cadastrar_palestra(formData: FormData) { //const formData = new FormData(event.currentTarget) const title = formData.get('title') @@ -32,87 +34,99 @@ export default function PalestrasForms() { const res = await response.json() } + */ - function handleNumPlestrantes(event: ChangeEvent) { - const value = parseInt(event.target.value) - if (!isNaN(value) && value >= 1 && value <= 20) { - setErroPalestrantes('') - setNumPalestrantes(value) - } else { - setErroPalestrantes('Digite um valor entre 1 e 20') - setNumPalestrantes(0) - } + function handleNumPalestrantes() { + setNumPalestrantes(numPalestrantes + 1); + } + + function removePalestrantes() { + setNumPalestrantes(numPalestrantes - 1); } return ( <> -
+
-
- - -
-
- - - {erroPalestrantes && ( - {erroPalestrantes} - )} -
+

Adicionar Palestra

+ + {[...Array(numPalestrantes)].map((_, index) => ( -
- - -
+ + ))} -
-