From 7629d1c46b526ea334a44e67d7a48dc67491dc83 Mon Sep 17 00:00:00 2001 From: austinkelsay Date: Wed, 20 Mar 2024 14:20:45 -0500 Subject: [PATCH] Basic forms ui, not handling submit yet --- src/components/forms/CourseForm.js | 78 ++++++++++++++++++++++++++++ src/components/forms/WorkshopForm.js | 60 +++++++++++++++++++++ src/components/menutab/MenuTab.js | 6 ++- src/pages/create.js | 34 +++++++++--- 4 files changed, 168 insertions(+), 10 deletions(-) create mode 100644 src/components/forms/CourseForm.js create mode 100644 src/components/forms/WorkshopForm.js diff --git a/src/components/forms/CourseForm.js b/src/components/forms/CourseForm.js new file mode 100644 index 0000000..7f632f9 --- /dev/null +++ b/src/components/forms/CourseForm.js @@ -0,0 +1,78 @@ +import React, { useState } from "react"; +import { InputText } from "primereact/inputtext"; +import { InputNumber } from "primereact/inputnumber"; +import { InputSwitch } from "primereact/inputswitch"; +import { Editor } from "primereact/editor"; +import { Button } from "primereact/button"; +import 'primeicons/primeicons.css'; + +const CourseForm = () => { + const [title, setTitle] = useState(''); + const [summary, setSummary] = useState(''); + const [checked, setChecked] = useState(false); + const [price, setPrice] = useState(0); + const [text, setText] = useState(''); + const [resources, setResources] = useState(['']); // Start with one empty resource + + const addResource = () => { + setResources([...resources, '']); // Add another empty resource + }; + + const handleResourceChange = (value, index) => { + const updatedResources = resources.map((resource, i) => + i === index ? value : resource + ); + setResources(updatedResources); + }; + + const handleSubmit = (e) => { + e.preventDefault(); + const payload = { + title, + summary, + isPaidResource: checked, + price: checked ? price : null, + content: text, + resources // Add the resources to the payload + }; + console.log(payload); + } + + return ( +
+
+ setTitle(e.target.value)} placeholder="Title" /> +
+
+ setSummary(e.target.value)} placeholder="Summary" /> +
+ +
+

Paid Course

+ setChecked(e.value)} /> +
+ {checked && ( + <> + + setPrice(e.value)} placeholder="Price (sats)" /> + + )} +
+
+ {resources.map((resource, index) => ( +
+ handleResourceChange(e.target.value, index)} placeholder={`Resource #${index + 1}`} /> +
+ ))} +
+
+ +
+
+
+ ); +} + +export default CourseForm; diff --git a/src/components/forms/WorkshopForm.js b/src/components/forms/WorkshopForm.js new file mode 100644 index 0000000..7a8d7d0 --- /dev/null +++ b/src/components/forms/WorkshopForm.js @@ -0,0 +1,60 @@ +import React, { useState } from "react"; +import { InputText } from "primereact/inputtext"; +import { InputNumber } from "primereact/inputnumber"; +import { InputSwitch } from "primereact/inputswitch"; +import { Editor } from "primereact/editor"; +import { Button } from "primereact/button"; +import 'primeicons/primeicons.css'; + +const WorkshopForm = () => { + const [title, setTitle] = useState(''); + const [summary, setSummary] = useState(''); + const [checked, setChecked] = useState(false); + const [price, setPrice] = useState(0); + const [text, setText] = useState(''); + + const handleSubmit = (e) => { + e.preventDefault(); // Prevents the default form submission mechanism + const payload = { + title, + summary, + isPaidResource: checked, + price: checked ? price : null, + content: text + }; + console.log(payload); + } + + return ( +
+
+ setTitle(e.target.value)} placeholder="Title" /> +
+
+ setSummary(e.target.value)} placeholder="Summary" /> +
+ +
+

Paid Workshop

+ setChecked(e.value)} /> +
+ {checked && ( + <> + + setPrice(e.value)} placeholder="Price (sats)" /> + + )} +
+
+
+ Content + setText(e.htmlValue)} style={{ height: '320px' }} /> +
+
+
+
+ ); +} + +export default WorkshopForm; diff --git a/src/components/menutab/MenuTab.js b/src/components/menutab/MenuTab.js index d7fb3a9..fa9505f 100644 --- a/src/components/menutab/MenuTab.js +++ b/src/components/menutab/MenuTab.js @@ -1,12 +1,14 @@ import React from 'react'; import { TabMenu } from 'primereact/tabmenu'; -export default function MenuTab({items}) { +export default function MenuTab({items, activeIndex, onTabChange}) { return (
onTabChange(e.index)} pt={{ tabmenu: { menu: ({ context }) => ({ @@ -19,5 +21,5 @@ export default function MenuTab({items}) { }} />
- ) + ); } diff --git a/src/pages/create.js b/src/pages/create.js index ae80ec8..7f3a252 100644 --- a/src/pages/create.js +++ b/src/pages/create.js @@ -1,20 +1,38 @@ -import React from "react"; +import React, { useState } from "react"; import MenuTab from "@/components/menutab/MenuTab"; import ResourceForm from "@/components/forms/ResourceForm"; +import WorkshopForm from "@/components/forms/WorkshopForm"; +import CourseForm from "@/components/forms/CourseForm"; const Create = () => { + const [activeIndex, setActiveIndex] = useState(0); // State to track the active tab index const homeItems = [ { label: 'Course', icon: 'pi pi-desktop' }, { label: 'Workshop', icon: 'pi pi-cog' }, { label: 'Resource', icon: 'pi pi-book' }, - ]; + ]; + + // Function to render the correct form based on the active tab + const renderForm = () => { + switch (homeItems[activeIndex].label) { + case 'Course': + return ; + case 'Workshop': + return ; + case 'Resource': + return ; + default: + return null; // or a default component + } + }; + return (
-

Create

- - +

Create a {homeItems[activeIndex].label}

+ + {renderForm()}
- ) -} + ); +}; -export default Create; \ No newline at end of file +export default Create;