From a5f49f643cb430cf15f520d406f9e7509c710e2f Mon Sep 17 00:00:00 2001 From: Juthatip McDevitt Date: Sat, 27 Apr 2024 22:58:29 -0500 Subject: [PATCH] updated meeting form functionality & add preview meeting form section --- .../create_meeting/_components/meetingForm.js | 8 +-- .../_components/previewMeeting.js | 57 ++++++++++++++++- .../app/(routes)/create_meeting/page.js | 2 +- scheduler_app/components/ui/calendar.jsx | 62 +++++++++++++++++++ scheduler_app/package-lock.json | 24 +++++++ scheduler_app/package.json | 2 + 6 files changed, 146 insertions(+), 9 deletions(-) create mode 100644 scheduler_app/components/ui/calendar.jsx diff --git a/scheduler_app/app/(routes)/create_meeting/_components/meetingForm.js b/scheduler_app/app/(routes)/create_meeting/_components/meetingForm.js index a67953b..ade0663 100644 --- a/scheduler_app/app/(routes)/create_meeting/_components/meetingForm.js +++ b/scheduler_app/app/(routes)/create_meeting/_components/meetingForm.js @@ -18,7 +18,6 @@ const MeetingForm = ({setFormEvent}) => { const [locationMeeting, setLocationMeeting] = useState(); const [urlMeeting, setUrlMeeting] = useState(); - useEffect(() => { setFormEvent({ eventName: eventName, @@ -30,7 +29,6 @@ const MeetingForm = ({setFormEvent}) => { }, [eventName, timeDuration, locationMeeting, urlMeeting, themeColor]) - return (

Go back

@@ -55,7 +53,7 @@ const MeetingForm = ({setFormEvent}) => {

Location *

{LocationOption.map((option, index) => ( -
setLocationMeeting(option.name)} className={`border rounded-md flex flex-col justify-center items-center text-center p-2 hover:bg-gray-200 cursor-pointer ${locationMeeting == option.name && 'bg-gray-200'}`}> +
setLocationMeeting(option.name)} className={`border rounded-md flex flex-col justify-center items-center text-center p-2 hover:bg-gray-200 cursor-pointer ${locationMeeting == option.name && 'bg-gray-200'}`}> {option.name}/

{option.name}

@@ -63,14 +61,14 @@ const MeetingForm = ({setFormEvent}) => {
{locationMeeting &&
-

Add {locationMeeting} url *

+

Add {locationMeeting} url or number *

setUrlMeeting(ev.target.value)} placeholder='Add url' className='text-sm'/>
}

Select Color

{ThemeOption.map((color,index) => ( -
setThemeColor(color)} className={`h-6 w-6 rounded-full ${themeColor == color && 'border-2 border-black'}`} style={{backgroundColor:color}}>
+
setThemeColor(color)} className={`h-6 w-6 rounded-full ${themeColor == color && 'border-2 border-black'}`} style={{backgroundColor:color}}>
))}
diff --git a/scheduler_app/app/(routes)/create_meeting/_components/previewMeeting.js b/scheduler_app/app/(routes)/create_meeting/_components/previewMeeting.js index 79af2dc..dc9b093 100644 --- a/scheduler_app/app/(routes)/create_meeting/_components/previewMeeting.js +++ b/scheduler_app/app/(routes)/create_meeting/_components/previewMeeting.js @@ -1,8 +1,59 @@ -import React from 'react' +import { GoClock } from "react-icons/go"; +import { PiMapPinLight } from "react-icons/pi"; +import { Calendar } from "@/components/ui/calendar" +import React, { useEffect, useState } from 'react' +import Link from "next/link"; +import { Button } from '@/components/ui/button' -const PreviewMeeting = () => { +const PreviewMeeting = ({formEvent}) => { + const [date, setDate] = useState(new Date()); + const [timeSlots, setTimeSlots] = useState(); + + useEffect(() => { + formEvent?.timeDuration && createTimeSlot(formEvent?.timeDuration) + }, [formEvent]) + //create time slot + const createTimeSlot = (interval) => { + const startTime = 8 * 60; + const endTime = 22 * 60; + const totalSlots = (endTime - startTime) / interval; + const slots = Array.from({length: totalSlots}, (_, i) => { + const totalMinutes = startTime + i * interval; + const hours = Math.floor(totalMinutes / 60); + const minutes = totalMinutes % 60; + const formattedHours = hours > 12 ? hours - 12: hours; + const period = hours >= 12? 'PM' : 'AM'; + return `${String(formattedHours).padStart(2, '0')} : ${String(minutes).padStart(2, '0')} ${period}` + }); + setTimeSlots(slots); + } + + return ( -
This is a preview meeting section
+
+

Schedule.Me

+
+
+

Event Name: {formEvent?.eventName?formEvent?.eventName:'Meeting/Event Name'}

+
+

{formEvent?.timeDuration} minutes

+

{formEvent?.locationMeeting}

+ {formEvent?.urlMeeting} +
+
+
+
+

Select your meeting date & time

+ +
+
+ {timeSlots?.map((time, index) => ( + + ))} +
+
+
+
) } diff --git a/scheduler_app/app/(routes)/create_meeting/page.js b/scheduler_app/app/(routes)/create_meeting/page.js index 47c5cd5..6019a51 100644 --- a/scheduler_app/app/(routes)/create_meeting/page.js +++ b/scheduler_app/app/(routes)/create_meeting/page.js @@ -12,7 +12,7 @@ const CreateMeeting = () => { setFormEvent(value)}/>
- +
) diff --git a/scheduler_app/components/ui/calendar.jsx b/scheduler_app/components/ui/calendar.jsx new file mode 100644 index 0000000..fcf6c46 --- /dev/null +++ b/scheduler_app/components/ui/calendar.jsx @@ -0,0 +1,62 @@ +"use client"; +import * as React from "react" +import { ChevronLeft, ChevronRight } from "lucide-react" +import { DayPicker } from "react-day-picker" + +import { cn } from "@/lib/utils" +import { buttonVariants } from "@/components/ui/button" + +function Calendar({ + className, + classNames, + showOutsideDays = true, + ...props +}) { + return ( + ( , + IconRight: ({ ...props }) => , + }} + {...props} />) + ); +} +Calendar.displayName = "Calendar" + +export { Calendar } diff --git a/scheduler_app/package-lock.json b/scheduler_app/package-lock.json index a4d5d37..f89d5e8 100644 --- a/scheduler_app/package-lock.json +++ b/scheduler_app/package-lock.json @@ -13,11 +13,13 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", + "date-fns": "^3.6.0", "firebase": "^10.11.0", "lucide-react": "^0.373.0", "next": "14.2.3", "next-themes": "^0.3.0", "react": "^18", + "react-day-picker": "^8.10.1", "react-dom": "^18", "react-icons": "^5.1.0", "sonner": "^1.4.41", @@ -3513,6 +3515,15 @@ "node": ">=4" } }, + "node_modules/date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -4441,6 +4452,19 @@ "node": ">=0.10.0" } }, + "node_modules/react-day-picker": { + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.1.tgz", + "integrity": "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "date-fns": "^2.28.0 || ^3.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", diff --git a/scheduler_app/package.json b/scheduler_app/package.json index 05ec409..d89accc 100644 --- a/scheduler_app/package.json +++ b/scheduler_app/package.json @@ -14,11 +14,13 @@ "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", + "date-fns": "^3.6.0", "firebase": "^10.11.0", "lucide-react": "^0.373.0", "next": "14.2.3", "next-themes": "^0.3.0", "react": "^18", + "react-day-picker": "^8.10.1", "react-dom": "^18", "react-icons": "^5.1.0", "sonner": "^1.4.41",