From 592a3e35441007b080d3801617112c8a67470345 Mon Sep 17 00:00:00 2001 From: myix765 Date: Sun, 17 Nov 2024 12:31:04 -0500 Subject: [PATCH] styled levels page, added conversation classes --- backend/server.js | 44 +- public/images/blue_mountains.png | Bin 0 -> 51801 bytes src/api/class-wrapper.js | 16 +- src/components/Button.jsx | 4 +- src/components/ConversationClass.jsx | 17 + src/components/Dropdown/Dropdown.jsx | 2 +- src/components/Dropdown/LanguageDropdown.jsx | 4 +- src/components/Level.jsx | 36 +- src/components/NavBar/NavBar.jsx | 2 +- src/components/NavBar/NavLink.jsx | 2 +- src/index.css | 5 + src/pages/About.jsx | 45 +- src/pages/Classes.jsx | 2 +- src/pages/Home.jsx | 4 +- src/pages/Levels.jsx | 59 ++- src/pages/Login.jsx | 2 +- src/pages/SignUp.jsx | 2 +- src/pages/StyleGuide.jsx | 442 ++++++++++--------- 18 files changed, 390 insertions(+), 298 deletions(-) create mode 100644 public/images/blue_mountains.png create mode 100644 src/components/ConversationClass.jsx diff --git a/backend/server.js b/backend/server.js index 368843f..a271ace 100644 --- a/backend/server.js +++ b/backend/server.js @@ -79,6 +79,7 @@ const UserSchema = new Schema({ const User = mongoose.model("User", UserSchema) + // Contact Schema const ContactSchema = new Schema({ name: { type: String, required: true }, @@ -89,11 +90,14 @@ const ContactSchema = new Schema({ const Contact = mongoose.model('Contact', ContactSchema); -// Class Schema + +// Schedule Schema const ScheduleSchema = new Schema({ day: { type: String, required: true }, time: { type: String, required: true }, }) + +// Class Schema const ClassSchema = new Schema({ title: { type: String, required: true }, level: { type: String, required: true }, @@ -105,6 +109,18 @@ const ClassSchema = new Schema({ const Class = mongoose.model("Class", ClassSchema) + +// Conversation Schema +const ConversationSchema = new Schema({ + instructor: { type: String, required: true }, + ageGroup: { type: String, required: true }, + schedule: { type: [ScheduleSchema], required: true, default: [] }, + roster: { type: [Schema.Types.ObjectId], default: [] } +}, { collection: 'conversations' }) + +const Conversation = mongoose.model("Conversation", ConversationSchema) + + // Level Schema const LevelSchema = new Schema({ level: { type: Number, required: true }, @@ -193,7 +209,7 @@ app.get('/api/users', async (req, res) => { } }) -// Contact +// Post Contact app.post('/api/contact', async (req, res) => { const { name, email, subject, message } = req.body try { @@ -208,12 +224,11 @@ app.post('/api/contact', async (req, res) => { res.status(201).json({ message: 'Inquiry submitted successfully' }) } catch (err) { - console.error('Error submitting inquiry:', err); - res.status(500).json({ message: 'Error submitting inquiry' }) + res.status(500).json({ message: 'Error submitting inquiry' }); } }) -// Classes +// Get Classes app.get('/api/classes', async (req, res) => { try { const allowedFields = ['level', 'instructor', 'ageGroup']; @@ -221,21 +236,30 @@ app.get('/api/classes', async (req, res) => { //apply the filters directly to the database query const data = await Class.find(filters); - res.json(data) - + res.json(data); } catch (err) { res.status(500).send(err); } }) -// Levels +// Get Levels app.get("/api/levels", async (req, res) => { try { - const allowedFields = ['level'] - const filters = validateInput(req.query, allowedFields) + const allowedFields = ['level']; + const filters = validateInput(req.query, allowedFields); const data = await Level.find(filters); res.json(data); } catch (err) { res.status(500).send(err); } +}) + +// Get Conversation classes +app.get("/api/conversations", async (req, res) => { + try { + const data = await Conversation.find(); + res.status(200).json(data); + } catch (error) { + res.status(500).send(err); + } }) \ No newline at end of file diff --git a/public/images/blue_mountains.png b/public/images/blue_mountains.png new file mode 100644 index 0000000000000000000000000000000000000000..5dc8885a2f47ee15442e85bd75581775af5fad14 GIT binary patch literal 51801 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.Ex(b{6) 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 i<&EWugi0Xq;QSZLVJ?cvg73}%0000 `${import.meta.env.VITE_API_URL}${endpoint}` // query should be a string -const getClasses = async (query) => { +const getClasses = async (query = "") => { try { const response = await axios.get(apiUrl(`/api/classes?${query}`)) return response.data @@ -13,7 +13,7 @@ const getClasses = async (query) => { } // query should be a string -const getLevels = async (query) => { +const getLevels = async (query = "") => { try { const response = await axios.get(apiUrl(`/api/levels?${query}`)); return response.data @@ -22,7 +22,17 @@ const getLevels = async (query) => { } } +const getConversations = async () => { + try { + const response = await axios.get(apiUrl("/api/conversations/")) + return response.data + } catch (error) { + console.error('Error fetching conversations:', error) + } +} + export { getClasses, - getLevels + getLevels, + getConversations, } \ No newline at end of file diff --git a/src/components/Button.jsx b/src/components/Button.jsx index 6181c88..1f0fd87 100644 --- a/src/components/Button.jsx +++ b/src/components/Button.jsx @@ -3,8 +3,8 @@ const Button = ({ label, isOutline, onClick }) => { return ( {/* dropdown */} {isOpen && ( diff --git a/src/components/Dropdown/LanguageDropdown.jsx b/src/components/Dropdown/LanguageDropdown.jsx index 6883c31..bc18a11 100644 --- a/src/components/Dropdown/LanguageDropdown.jsx +++ b/src/components/Dropdown/LanguageDropdown.jsx @@ -32,11 +32,11 @@ const LanguageDropdown = () => { - + {selectedLang} } - buttonClassName="flex items-center space-x-1 text-sm font-medium text-gray-600 hover:text-gray-900 min-w-[90px] pl-3 pr-4 py-2 sm:px-3 sm:py-2" + buttonClassName="flex items-center space-x-1 text-base font-normal text-black min-w-fit pl-3 pr-4 py-2 sm:px-3 sm:py-2" > {/* drop down links */} {Object.keys(langMapping).map((lang) => ( diff --git a/src/components/Level.jsx b/src/components/Level.jsx index c120c41..9aa4bd4 100644 --- a/src/components/Level.jsx +++ b/src/components/Level.jsx @@ -1,28 +1,22 @@ -import { Link } from "wouter" const Level = ({ level, isSimplified }) => { - const params = new URLSearchParams() - params.set("level", level.level) - - return ( - - {isSimplified ? - // TODO (Fahim & Tony): work on the simplified version of the Level component seen on the Class pages -
- : + return isSimplified ? ( + // TODO (Fahim & Tony): work on the simplified version of the Level component seen on the Class pages +
+ ) : ( +
+
+
+

Level: {level.level}

+

{level.name}

-

Level: {level.level}

-

{level.name}

-
-

Instructors:

- {level.instructors.map((instructor, instructorIndex) => ( -

{instructor}

- ))} -
+

Instructors:

+ {level.instructors.map((instructor, instructorIndex) => ( +

{instructor}

+ ))}
- } - - +
+
) } diff --git a/src/components/NavBar/NavBar.jsx b/src/components/NavBar/NavBar.jsx index 8e327e9..0c5ae8b 100644 --- a/src/components/NavBar/NavBar.jsx +++ b/src/components/NavBar/NavBar.jsx @@ -17,7 +17,7 @@ const NavBar = () => { Dillar English Academy {/* Desktop navigation */} -
+
About Courses Contact diff --git a/src/components/NavBar/NavLink.jsx b/src/components/NavBar/NavLink.jsx index d01741d..10a5343 100644 --- a/src/components/NavBar/NavLink.jsx +++ b/src/components/NavBar/NavLink.jsx @@ -3,7 +3,7 @@ import { Link } from 'wouter'; const NavLink = ({ href, isMobile, children }) => ( {children} diff --git a/src/index.css b/src/index.css index ae9859a..39b50c8 100644 --- a/src/index.css +++ b/src/index.css @@ -2,6 +2,11 @@ @tailwind components; @tailwind utilities; +@font-face { + font-family: 'Avenir'; + src: url('./assets/fonts/AvenirLTStd-Book.otf') format('opentype'); +} + @font-face { font-family: 'Avenir'; src: url('./assets/fonts/AvenirLTStd-Roman.otf') format('opentype'); diff --git a/src/pages/About.jsx b/src/pages/About.jsx index 95c0077..3f25f5e 100644 --- a/src/pages/About.jsx +++ b/src/pages/About.jsx @@ -1,33 +1,30 @@ -import founder from '../assets/founder.jpg' +import founder from '../assets/founder.jpg'; import { useTranslation } from "react-i18next"; function About() { const { t } = useTranslation(); return ( - <> -
-
- dummy-founder-image -
-
-

{t("about_heading")}

-

Dillar English Academy was founded by Dilnawa and Dilziba Dilmurat - Kizghin to help Uyghurs around the world learn English without cost. - With the help and commitment of our volunteer teachers, our goal is - to bridge the educational disparity gap among Uyghurs worldwide. -

- Dillar Academy has grown exponentially in a short time! Recognizing a - need in the international Uyghur community, we have recruited Uyghur - college students in America to volunteer their time and teach various - levels of English. Although our teachers are not certified English - language instructors, they are native English speakers who invest - time into teaching the best information that they can. -

-
+
+
+ dummy-founder-image
- - +
+

{t("about_heading")}

+

Dillar English Academy was founded by Dilnawa and Dilziba Dilmurat + Kizghin to help Uyghurs around the world learn English without cost. + With the help and commitment of our volunteer teachers, our goal is + to bridge the educational disparity gap among Uyghurs worldwide. +

+ Dillar Academy has grown exponentially in a short time! Recognizing a + need in the international Uyghur community, we have recruited Uyghur + college students in America to volunteer their time and teach various + levels of English. Although our teachers are not certified English + language instructors, they are native English speakers who invest + time into teaching the best information that they can. +

+
+
) } -export default About +export default About; diff --git a/src/pages/Classes.jsx b/src/pages/Classes.jsx index 5be2200..e73c89c 100644 --- a/src/pages/Classes.jsx +++ b/src/pages/Classes.jsx @@ -37,7 +37,7 @@ const Classes = () => { return (

Level {level.level}

-

{level.name}

+

{level.name}

{classes.map((classObj, classIndex) => ( diff --git a/src/pages/Home.jsx b/src/pages/Home.jsx index df51054..2be7014 100644 --- a/src/pages/Home.jsx +++ b/src/pages/Home.jsx @@ -28,7 +28,7 @@ const Home = () => { <>
-

Dillar Academy

+

Dillar Academy

Free English education for Uyghurs around the world.

-

How It Works

+

How It Works

{sections.map((section, index) => (
{section.imgAlt} diff --git a/src/pages/Levels.jsx b/src/pages/Levels.jsx index dc9acb6..5d2c791 100644 --- a/src/pages/Levels.jsx +++ b/src/pages/Levels.jsx @@ -1,27 +1,64 @@ -import axios from 'axios'; + import { useState, useEffect } from 'react'; import Level from '@/components/Level' -import { getLevels } from '../api/class-wrapper'; +import ConversationClass from '../components/ConversationClass'; +import { getConversations, getLevels } from '../api/class-wrapper'; +import { Link } from "wouter" const Levels = () => { const [levels, setLevels] = useState([]); + const [conversations, setConversations] = useState([]); + const params = new URLSearchParams() + + // styles + const h3Style = "text-3xl font-extrabold" + const descriptionStyle = "font-light text-lg" + const sectionStyle = "mb-12" + const courseDivStyle = "mt-8 sm:grid gap-8" useEffect(() => { const fetchLevels = async () => { - const levels = await getLevels() - setLevels(levels) + const levels = await getLevels(); + setLevels(levels); + const conversations = await getConversations(); + setConversations(conversations); }; fetchLevels(); }, []); + if (levels.length == 0 || conversations.length == 0) { + return <> + } + return ( -
-

Browse Levels

-
- {levels.map((level, levelIndex) => ( - - ))} -
+
+
+

Browse Classes

+

Dillar Academy offers classes at a variety of levels, based on your English skill level! Browse all the levels and classes here.

+
+
+

Levels

+

Browse levels to determine which one is most suitable for you!

+
+ {levels.map((level, levelIndex) => { + params.set("level", level.level) + return ( + + + + ) + })} +
+
+
+

Conversations

+

Practice your English conversation skills with native speakers.

+
+ {conversations.map((conversation, conversationIndex) => ( + + ))} +
+
); } diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx index 33524b0..070e207 100644 --- a/src/pages/Login.jsx +++ b/src/pages/Login.jsx @@ -44,7 +44,7 @@ export default function Login() {

Login

Don't have an account? - Sign up + Sign up

Sign up

Already have an account? - Log In + Log In

{/* Form Values and the Borders */} diff --git a/src/pages/StyleGuide.jsx b/src/pages/StyleGuide.jsx index 3665a33..cd542b8 100644 --- a/src/pages/StyleGuide.jsx +++ b/src/pages/StyleGuide.jsx @@ -1,232 +1,240 @@ const StyleGuide = () => { - const colorPalette = [ - { - hex: "#59BCF5", - name: "blue", - variations: [ - { - number: 100, - hex: "#ECF7FE", - }, - { - number: 200, - hex: "#B7E2FB", - }, - { - number: 300, - hex: "#87CEF8", - }, - { - number: 400, - hex: "#59BCF5", - }, - { - number: 500, - hex: "#22A6F2", - }, - { - number: 600, - hex: "#0D8ED8", - }, - { - number: 700, - hex: "#0A6FA8", - }, - { - number: 800, - hex: "#074F78", - }, - ] - }, - { - hex: "#0F084B", - name: "dark-blue", - variations: [ - { - number: 100, - hex: "#EEEDFD", - }, - { - number: 200, - hex: "#C5BEF8", - }, - { - number: 300, - hex: "#9B90F3", - }, - { - number: 400, - hex: "#7163EE", - }, - { - number: 500, - hex: "#4735E9", - }, - { - number: 600, - hex: "#2112A6", - }, - { - number: 700, - hex: "#180D78", - }, - { - number: 800, - hex: "#0F084B", - }, - ] - }, - { - hex: "#26769B", - name: "turquoise", - variations: [ - { - number: 100, - hex: "#F7FBFD", - }, - { - number: 200, - hex: "#CEE7F3", - }, - { - number: 300, - hex: "#A5D3E9", - }, - { - number: 400, - hex: "#53ACD5", - }, - { - number: 500, - hex: "#3096C5", - }, - { - number: 600, - hex: "#26769B", - }, - { - number: 700, - hex: "#1C5773", - }, - { - number: 800, - hex: "#12384A", - }, - ] - }, - { - hex: "#4C4B63", - name: "neutral", - variations: [ - { - number: 200, - hex: "#E8E8ED", - }, - { - number: 300, - hex: "#B4B4C6", - }, - { - number: 400, - hex: "#7B7A9A", - }, - { - number: 500, - hex: "#626180", - }, - { - number: 600, - hex: "#4C4B63", - }, - { - number: 700, - hex: "#2A2A37", - }, - ] - }, - { - hex: "#FFFFFF", - name: "white", - }, - { - hex: "#000000", - name: "black", - }, - ] - - const fontStyles = [ + const colorPalette = [ + { + hex: "#59BCF5", + name: "blue", + variations: [ + { + number: 100, + hex: "#ECF7FE", + }, + { + number: 200, + hex: "#B7E2FB", + }, + { + number: 300, + hex: "#87CEF8", + }, + { + number: 400, + hex: "#59BCF5", + }, + { + number: 500, + hex: "#22A6F2", + }, + { + number: 600, + hex: "#0D8ED8", + }, + { + number: 700, + hex: "#0A6FA8", + }, + { + number: 800, + hex: "#074F78", + }, + ] + }, + { + hex: "#0F084B", + name: "dark-blue", + variations: [ + { + number: 100, + hex: "#EEEDFD", + }, + { + number: 200, + hex: "#C5BEF8", + }, + { + number: 300, + hex: "#9B90F3", + }, + { + number: 400, + hex: "#7163EE", + }, + { + number: 500, + hex: "#4735E9", + }, + { + number: 600, + hex: "#2112A6", + }, { - name: "Heavy", - weightStyle: "font-bold", + number: 700, + hex: "#180D78", }, { - name: "Medium", - weightStyle: "font-medium", + number: 800, + hex: "#0F084B", }, + ] + }, + { + hex: "#26769B", + name: "turquoise", + variations: [ { - name: "Roman", - weightStyle: "text-normal", + number: 100, + hex: "#F7FBFD", }, - ] + { + number: 200, + hex: "#CEE7F3", + }, + { + number: 300, + hex: "#A5D3E9", + }, + { + number: 400, + hex: "#53ACD5", + }, + { + number: 500, + hex: "#3096C5", + }, + { + number: 600, + hex: "#26769B", + }, + { + number: 700, + hex: "#1C5773", + }, + { + number: 800, + hex: "#12384A", + }, + ] + }, + { + hex: "#4C4B63", + name: "neutral", + variations: [ + { + number: 200, + hex: "#E8E8ED", + }, + { + number: 300, + hex: "#B4B4C6", + }, + { + number: 400, + hex: "#7B7A9A", + }, + { + number: 500, + hex: "#626180", + }, + { + number: 600, + hex: "#4C4B63", + }, + { + number: 700, + hex: "#2A2A37", + }, + ] + }, + { + hex: "#FFFFFF", + name: "white", + }, + { + hex: "#000000", + name: "black", + }, + ] - const h2Style = `text-3xl mb-2 font-bold` - const sectionStyle = `py-6 px-8` + const fontStyles = [ + { + name: "Heavy", + weightStyle: "font-extrabold", + weightNum: 800, + }, + // { + // name: "Medium", + // weightStyle: "font-medium", + // }, + { + name: "Roman", + weightStyle: "text-normal", + weightNum: 400, + }, + { + name: "Book", + weightStyle: "text-light", + weightNum: 300, + }, + ] - return ( -
-

Style Guide

- {/* color palette */} -
-

Color Palette

-

Lists the tailwind color name, opacities, and hex codes. The colors have all been added to the Tailwind config so you can use them like any Tailwind color class

-

Ex: className="bg-blue-200 text-dark-blue-500"

-
- {colorPalette.map((color, index) => ( -
-

Color name: {color.name}

- {color.variations ? ( - color.variations.map((variation, variationIndex) => ( -
-
-
-

Number: {variation.number}

-

Hex: {variation.hex}

-
-
- )) - ) : ( -
-
-

Hex: {color.hex}

-
- )} -
- ))} -
-
- {/* fonts */} -
-

Font: Avenir

-

Font styles

-
- {fontStyles.map((style, index) => ( -
-

{style.name}

-

Tailwind weight style: {style.weightStyle}

-
- ))} + const h2Style = `text-3xl mb-2 font-extrabold` + const sectionStyle = `py-6 px-8` + + return ( +
+

Style Guide

+ {/* color palette */} +
+

Color Palette

+

Lists the tailwind color name, opacities, and hex codes. The colors have all been added to the Tailwind config so you can use them like any Tailwind color class

+

Ex: className="bg-blue-200 text-dark-blue-500"

+
+ {colorPalette.map((color, index) => ( +
+

Color name: {color.name}

+ {color.variations ? ( + color.variations.map((variation, variationIndex) => ( +
+
+
+

Number: {variation.number}

+

Hex: {variation.hex}

+
+
+ )) + ) : ( +
+
+

Hex: {color.hex}

-
- {/* icons */} -
-

Icon pack: Ionicons 5

- Link to icons -

To access the Ionicons 5 icons we will be using the react-icon library. To add an icon, click on the icon on the page, copy the import statement, and then use the icon like a regular component.

-

Note: react-icons is a library containing a bunch of icon packs, make sure the icon you import is from react-icons/io5!

-
+ )} +
+ ))} +
+
+ {/* fonts */} +
+

Font: Avenir

+

Font styles

+
+ {fontStyles.map((style, index) => ( +
+

{style.name}

+

Tailwind weight style: {style.weightStyle}

+

Weight Number: {style.weightNum}

+
+ ))}
- ) +
+ {/* icons */} +
+

Icon pack: Ionicons 5

+ Link to icons +

To access the Ionicons 5 icons we will be using the react-icon library. To add an icon, click on the icon on the page, copy the import statement, and then use the icon like a regular component.

+

Note: react-icons is a library containing a bunch of icon packs, make sure the icon you import is from react-icons/io5!

+
+
+ ) } export default StyleGuide \ No newline at end of file