diff --git a/src/data/form/emailVerification.schema.ts b/src/data/form/account/emailVerification.schema.ts similarity index 100% rename from src/data/form/emailVerification.schema.ts rename to src/data/form/account/emailVerification.schema.ts diff --git a/src/data/form/login.schema.ts b/src/data/form/account/login.schema.ts similarity index 97% rename from src/data/form/login.schema.ts rename to src/data/form/account/login.schema.ts index bf402c2..304bd9d 100644 --- a/src/data/form/login.schema.ts +++ b/src/data/form/account/login.schema.ts @@ -1,20 +1,20 @@ -import { Validator } from '@/util/Validator'; -import * as z from 'zod'; - -export const LoginSchema = z.object({ - id: z - .string() - .refine((val) => { - if (val.includes('@')) { - return Validator.isEmail(val); - } - return true; - }, { - message: "이메일 형식이 올바르지 않습니다." - }) - , password: z - .string() - .min(8, "비밀번호는 8-12 자리여야 합니다.") - .max(12, "비밀번호는 8-12 자리여야 합니다.") - .regex(/^(?=.*[0-9])(?=.*[!@#$%^])[a-zA-Z0-9!@#$%^]+$/, "비밀번호는 영소문자로 시작하여 숫자, 특수문자(!@#$)를 한 개 이상 포함하여야 합니다.") +import { Validator } from '@/util/Validator'; +import * as z from 'zod'; + +export const LoginSchema = z.object({ + id: z + .string() + .refine((val) => { + if (val.includes('@')) { + return Validator.isEmail(val); + } + return true; + }, { + message: "이메일 형식이 올바르지 않습니다." + }) + , password: z + .string() + .min(8, "비밀번호는 8-12 자리여야 합니다.") + .max(12, "비밀번호는 8-12 자리여야 합니다.") + .regex(/^(?=.*[0-9])(?=.*[!@#$%^])[a-zA-Z0-9!@#$%^]+$/, "비밀번호는 영소문자로 시작하여 숫자, 특수문자(!@#$)를 한 개 이상 포함하여야 합니다.") }); \ No newline at end of file diff --git a/src/data/form/resetPassword.schema.ts b/src/data/form/account/resetPassword.schema.ts similarity index 97% rename from src/data/form/resetPassword.schema.ts rename to src/data/form/account/resetPassword.schema.ts index bedde81..d8f6f0a 100644 --- a/src/data/form/resetPassword.schema.ts +++ b/src/data/form/account/resetPassword.schema.ts @@ -1,21 +1,21 @@ -import * as z from 'zod'; - -export const ResetPasswordSchema = z.object({ - email: z - .email() - , code: z - .string() - .length(8) - .regex(/^(?=.*[0-9])(?=.*[!@#$%^])[a-zA-Z0-9!@#$%^]+$/, "영소문자로 시작하고 숫자와 특수문자(!@#$%^)를 포함해야 합니다.") - , password: z - .string() - .min(8, "비밀번호는 8-12 자리여야 합니다.") - .max(12, "비밀번호는 8-12 자리여야 합니다.") - .regex(/^(?=.*[0-9])(?=.*[!@#$%^])[a-zA-Z0-9!@#$%^]+$/, "영소문자로 시작하고 숫자와 특수문자(!@#$%^)를 포함해야 합니다.") - , passwordConfirm: z - .string() -}) -.refine((data) => data.password === data.passwordConfirm, { - path: ["passwordConfirm"], - error: "비밀번호가 일치하지 않습니다." +import * as z from 'zod'; + +export const ResetPasswordSchema = z.object({ + email: z + .email() + , code: z + .string() + .length(8) + .regex(/^(?=.*[0-9])(?=.*[!@#$%^])[a-zA-Z0-9!@#$%^]+$/, "영소문자로 시작하고 숫자와 특수문자(!@#$%^)를 포함해야 합니다.") + , password: z + .string() + .min(8, "비밀번호는 8-12 자리여야 합니다.") + .max(12, "비밀번호는 8-12 자리여야 합니다.") + .regex(/^(?=.*[0-9])(?=.*[!@#$%^])[a-zA-Z0-9!@#$%^]+$/, "영소문자로 시작하고 숫자와 특수문자(!@#$%^)를 포함해야 합니다.") + , passwordConfirm: z + .string() +}) +.refine((data) => data.password === data.passwordConfirm, { + path: ["passwordConfirm"], + error: "비밀번호가 일치하지 않습니다." }); \ No newline at end of file diff --git a/src/data/form/signup.schema.ts b/src/data/form/account/signup.schema.ts similarity index 97% rename from src/data/form/signup.schema.ts rename to src/data/form/account/signup.schema.ts index 55abb14..ce9c6ec 100644 --- a/src/data/form/signup.schema.ts +++ b/src/data/form/account/signup.schema.ts @@ -1,34 +1,34 @@ -import * as z from 'zod'; - -export const SignUpSchema = z.object({ - accountId: z - .string() - .min(5, "아이디는 6-14자여야 합니다.") - .max(14, "아이디는 6-14자여야합니다.") - .refine((val) => { - return /^[a-zA-z-_.]*$/.test(val); - }, { - message: "영문, 숫자, '- _ .' 를 제외한 문자를 사용할 수 없습니다." - }) - , email: z - .string() - .min(5, "이메일을 입력해주십시오.") - , password: z - .string() - .min(8, "비밀번호는 8-12자여야 합니다.") - .max(12, "비밀번호는 8-12자여야 합니다.") - .regex(/^(?=.*[0-9])(?=.*[!@#$%^])[a-zA-Z0-9!@#$%^]+$/, "영소문자로 시작하고 숫자와 특수문자(!@#$%^)를 포함해야 합니다.") - , name: z - .string() - .min(1, "이름을 입력해주시십시오.") - .max(14, "너무 긴 이름은 사용하실 수 없습니다.") - , nickname: z - .string() - .min(1, "닉네임을 입력해주십시오.") - , passwordConfirm: z - .string() -}) -.refine((data) => data.password === data.passwordConfirm, { - path: ["passwordConfirm"], - error: "비밀번호가 일치하지 않습니다." +import * as z from 'zod'; + +export const SignUpSchema = z.object({ + accountId: z + .string() + .min(5, "아이디는 6-14자여야 합니다.") + .max(14, "아이디는 6-14자여야합니다.") + .refine((val) => { + return /^[a-zA-z-_.]*$/.test(val); + }, { + message: "영문, 숫자, '- _ .' 를 제외한 문자를 사용할 수 없습니다." + }) + , email: z + .string() + .min(5, "이메일을 입력해주십시오.") + , password: z + .string() + .min(8, "비밀번호는 8-12자여야 합니다.") + .max(12, "비밀번호는 8-12자여야 합니다.") + .regex(/^(?=.*[0-9])(?=.*[!@#$%^])[a-zA-Z0-9!@#$%^]+$/, "영소문자로 시작하고 숫자와 특수문자(!@#$%^)를 포함해야 합니다.") + , name: z + .string() + .min(1, "이름을 입력해주시십시오.") + .max(14, "너무 긴 이름은 사용하실 수 없습니다.") + , nickname: z + .string() + .min(1, "닉네임을 입력해주십시오.") + , passwordConfirm: z + .string() +}) +.refine((data) => data.password === data.passwordConfirm, { + path: ["passwordConfirm"], + error: "비밀번호가 일치하지 않습니다." }); \ No newline at end of file diff --git a/src/data/form/index.ts b/src/data/form/index.ts index 02e4965..7f94200 100644 --- a/src/data/form/index.ts +++ b/src/data/form/index.ts @@ -1,4 +1,4 @@ -export { SignUpSchema } from './signup.schema'; -export { LoginSchema } from './login.schema'; -export { ResetPasswordSchema } from './resetPassword.schema'; -export { EmailVerificationSchema } from './emailVerification.schema'; \ No newline at end of file +export { SignUpSchema } from './account/signup.schema'; +export { LoginSchema } from './account/login.schema'; +export { ResetPasswordSchema } from './account/resetPassword.schema'; +export { EmailVerificationSchema } from './account/emailVerification.schema'; \ No newline at end of file diff --git a/src/data/form/createSchedule.schema.ts b/src/data/form/schedule/createSchedule.schema.ts similarity index 100% rename from src/data/form/createSchedule.schema.ts rename to src/data/form/schedule/createSchedule.schema.ts diff --git a/src/data/form/schedule/listSchedule.schema.ts b/src/data/form/schedule/listSchedule.schema.ts new file mode 100644 index 0000000..b371d89 --- /dev/null +++ b/src/data/form/schedule/listSchedule.schema.ts @@ -0,0 +1,22 @@ +import * as z from "zod"; + +export const ListScheduleSchema = z.object({ + name: z + .string() + .optional() + , startDate: z + .date() + .optional() + , endDate: z + .date() + .optional() + , status: z + .string() + .optional() + , styleList: z + .array(z.string()) + .optional() + , typeList: z + .array(z.string()) + .optional() +}); \ No newline at end of file diff --git a/src/data/form/updateSchedule.schema.ts b/src/data/form/schedule/updateSchedule.schema.ts similarity index 100% rename from src/data/form/updateSchedule.schema.ts rename to src/data/form/schedule/updateSchedule.schema.ts diff --git a/src/data/request/schedule/CreateScheduleRequest.ts b/src/data/request/schedule/CreateScheduleRequest.ts index e781cf9..0946ce9 100644 --- a/src/data/request/schedule/CreateScheduleRequest.ts +++ b/src/data/request/schedule/CreateScheduleRequest.ts @@ -11,7 +11,7 @@ export class CreateScheduleRequest { startTime: string; endTime: string; style: string; - participantList: string[]; + // participantList: string[]; constructor ( name: string, @@ -23,7 +23,7 @@ export class CreateScheduleRequest { startTime: string, endTime: string, style: string, - participantList: string[] + // participantList: string[] ) { this.name = name; this.content = content; @@ -34,6 +34,6 @@ export class CreateScheduleRequest { this.startTime = startTime; this.endTime = endTime; this.style = style; - this.participantList = participantList; + // this.participantList = participantList; } } \ No newline at end of file diff --git a/src/data/request/schedule/ScheduleListRequest.ts b/src/data/request/schedule/ScheduleListRequest.ts index 3e2e742..4d94a6b 100644 --- a/src/data/request/schedule/ScheduleListRequest.ts +++ b/src/data/request/schedule/ScheduleListRequest.ts @@ -2,12 +2,10 @@ import type { ScheduleStatus } from "@/const/schedule/ScheduleStatus"; import type { ScheduleType } from "@/const/schedule/ScheduleType"; export class ScheduleListRequest { - filterAccountIdList?: string[]; - filterStartDate?: Date; - filterEndDate?: Date; - filterDate?: Date; - filterTypeList?: ScheduleType[]; - filterStyleList?: string[]; - filterStatusList?: ScheduleStatus[]; - filterName?: string; + startDate?: Date; + endDate?: Date; + typeList?: ScheduleType[]; + styleList?: string[]; + status?: ScheduleStatus; + name?: string; } \ No newline at end of file diff --git a/src/hooks/use-time.ts b/src/hooks/use-time.ts index f2cb332..0465ae3 100644 --- a/src/hooks/use-time.ts +++ b/src/hooks/use-time.ts @@ -1,21 +1,57 @@ export function useTime() { - const getNowString = () => { - const now = new Date(); - const hour = now.getHours(); - const minute = now.getMinutes(); - const ampm = hour < 12 ? '오전' : '오후'; + const getCurrentTimeString = (type: 'standard' | 'continental') => { + const current = new Date(); + current.setSeconds(0, 0); + const formatter = new Intl.DateTimeFormat('ko-KR', { + hour: '2-digit', + minute: '2-digit', + second: type === 'standard' ? undefined : '2-digit', + hour12: type === 'standard', + hourCycle: type ==='standard' ? 'h12' : 'h23' + }); + if (type === 'standard') { + return formatter.format(current).replace(':', '시 ').replace(/(\d+)\s*$/, '$1분'); + } + return formatter.format(current); + }; - return `${ampm} ${hour > 12 ? hour - 12 : hour}시 ${minute.toString().padStart(2, '0')}분`; + const standardTimeToContinentalTime = (standardTime: string) => { + const match = standardTime.match(/(오전|오후)\s*(\d+)\s*시\s*(\d+)\s*분/); + + if (!match) return ''; + + const [_, ampm, hourString, minuteString] = match; + + let hour = parseInt(hourString, 10); + const minute = parseInt(minuteString, 10); + + if (ampm === '오후' && hour !== 12) { + hour += 12; + } else if (ampm === '오전' && hour === 12) { + hour = 0; + } + + return `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}:00` } - const timeStringToISOString = (time: string) => { - const timeArray = time.split(' '); - const hour = timeArray[0] === '오전' ? Number(timeArray[1]) : Number(timeArray[1]) + 12; - return `${hour.toString().padStart(2, '0')}:${timeArray[2]}:00` + const continentalTimeToStandardTime = (continentalTime: string) => { + const [hour, minute, _] = continentalTime.split(':'); + const date = new Date(); + date.setHours(parseInt(hour, 10), parseInt(minute, 10), 0, 0); + + const formatter = new Intl.DateTimeFormat('ko-KR', { + hour: '2-digit', + minute: '2-digit', + hour12: true, + hourCycle: 'h12' + }); + + return formatter.format(date).replace(':', '시 ').replace(/(\d+)\s*$/, '$1분'); } return { - getNowString, - timeStringToISOString + getCurrentTimeString, + standardTimeToContinentalTime, + continentalTimeToStandardTime } } \ No newline at end of file diff --git a/src/network/ScheduleNetwork.ts b/src/network/ScheduleNetwork.ts index a52a230..1711ca0 100644 --- a/src/network/ScheduleNetwork.ts +++ b/src/network/ScheduleNetwork.ts @@ -1,8 +1,11 @@ -import type { CreateScheduleRequest } from "@/data/request/schedule/CreateScheduleRequest"; import { BaseNetwork } from "./BaseNetwork" -import type { UpdateScheduleRequest } from "@/data/request/schedule/UpdateScheduleRequest"; -import type { DeleteScheduleRequest } from "@/data/request/schedule/DeleteScheduleRequest"; -import type { ScheduleListRequest } from "@/data/request/schedule/ScheduleListRequest"; +import { + ScheduleListRequest, + CreateScheduleRequest, + UpdateScheduleRequest, + DeleteScheduleRequest +} from '@/data/request'; +import { CreateScheduleResponse } from "@/data/response"; export class ScheduleNetwork extends BaseNetwork { private baseUrl = "/schedule"; @@ -21,7 +24,7 @@ export class ScheduleNetwork extends BaseNetwork { } async create(data: CreateScheduleRequest) { - return await this.post( + return await this.post( `${this.baseUrl}/create`, data ); diff --git a/src/ui/component/Header.tsx b/src/ui/component/Header.tsx index 02b9e30..129b1ec 100644 --- a/src/ui/component/Header.tsx +++ b/src/ui/component/Header.tsx @@ -1,7 +1,6 @@ import { Label } from '@/components/ui/label'; import { SidebarTrigger } from '@/components/ui/sidebar'; import { Separator } from '@/components/ui/separator'; -import { useState } from 'react'; import { Button } from '@/components/ui/button'; import { useAuthStore } from '@/store/authStore'; import { LogOutIcon } from 'lucide-react'; @@ -24,31 +23,31 @@ export default function Header() { -
- -
+
+ +
); } \ No newline at end of file diff --git a/src/ui/component/popover/schedule/ColorPickPopover.tsx b/src/ui/component/popover/schedule/ColorPickPopover.tsx index 8f79a2d..6c07032 100644 --- a/src/ui/component/popover/schedule/ColorPickPopover.tsx +++ b/src/ui/component/popover/schedule/ColorPickPopover.tsx @@ -1,6 +1,8 @@ import { PopoverContent } from "@/components/ui/popover" import type { ColorPaletteType } from "@/const/ColorPalette" import { usePalette } from "@/hooks/use-palette"; +import { cn } from "@/lib/utils"; +import { Triangle } from "lucide-react"; import { useState } from "react"; interface ColorPickPopoverProps { @@ -28,7 +30,10 @@ export const ColorPickPopover = ({ setColor }: ColorPickPopoverProps) => { return ( {getSlicedList(mainPaletteList, 5).map((list) => (
@@ -41,10 +46,8 @@ export const ColorPickPopover = ({ setColor }: ColorPickPopoverProps) => { ))}
))} - { - !seeMore - ?
setSeeMore(true)}>더 보기
- : <> + { seeMore && ( + <> {getSlicedList(extraPaletteList, 5).map((list) => (
{list.map((palette) => ( @@ -59,12 +62,29 @@ export const ColorPickPopover = ({ setColor }: ColorPickPopoverProps) => {
))} - } - { - seeMore - ?
setSeeMore(false)}>접기
- : null - } + )} +
setSeeMore(prev => !prev)} + > + + { seeMore ? " 접기 " : "더 보기"} + +
+
) } \ No newline at end of file diff --git a/src/ui/component/popover/schedule/DatePickPopover.tsx b/src/ui/component/popover/schedule/DatePickPopover.tsx index 79deb28..f3697d5 100644 --- a/src/ui/component/popover/schedule/DatePickPopover.tsx +++ b/src/ui/component/popover/schedule/DatePickPopover.tsx @@ -1,6 +1,7 @@ import { Button } from "@/components/ui/button"; import { Calendar } from "@/components/ui/calendar"; import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; +import { cn } from "@/lib/utils"; import { format } from "date-fns"; import { useState } from "react"; @@ -39,6 +40,7 @@ export const DatePickPopover = ({ ...props } : DaetPickPopoverProps) => { ) } + const { startDate, setStartDate, endDate, setEndDate } = props; const [startOpen, setStartOpen] = useState(false); const [endOpen, setEndOpen] = useState(false); @@ -64,7 +66,12 @@ export const DatePickPopover = ({ ...props } : DaetPickPopoverProps) => { > + + +
+ {typeLabelList.map((label, idx) => ( +
selectType(label.type)} + > + {label.label} +
+ ))}
- ))} -
-
+ + + ) } \ No newline at end of file diff --git a/src/ui/component/popover/schedule/content/ContentProps.ts b/src/ui/component/popover/schedule/content/ContentProps.ts index 51bf95d..0aa1073 100644 --- a/src/ui/component/popover/schedule/content/ContentProps.ts +++ b/src/ui/component/popover/schedule/content/ContentProps.ts @@ -1,13 +1,15 @@ -import type { ColorPaletteType } from "@/const/ColorPalette"; - interface BaseProps { date: Date | undefined; open: boolean; popoverSide: 'left' | 'right'; popoverAlign: 'start' | 'end'; + setMode: (mode: 'list' | 'create' | 'detail' | 'update') => void; } export interface ScheduleCreateContentProps extends BaseProps { - date: Date | undefined; - setMode: (mode: 'list' | 'create' | 'detail' | 'update') => void; + +} + +export interface ScheduleListContentProps extends BaseProps { + } \ No newline at end of file diff --git a/src/ui/component/popover/schedule/content/ScheduleCreateContent.tsx b/src/ui/component/popover/schedule/content/ScheduleCreateContent.tsx index 4475223..795c4ba 100644 --- a/src/ui/component/popover/schedule/content/ScheduleCreateContent.tsx +++ b/src/ui/component/popover/schedule/content/ScheduleCreateContent.tsx @@ -1,41 +1,44 @@ -import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; -import { ScrollArea } from '@/components/ui/scroll-area'; -import { cn } from '@/lib/utils'; -import { useEffect, useState } from 'react'; -import { usePalette } from '@/hooks/use-palette'; -import { type ColorPaletteType } from '@/const/ColorPalette'; -import { ColorPickPopover } from '../ColorPickPopover'; -import { Input } from '@/components/ui/input'; -import { Controller, useForm } from 'react-hook-form'; -import * as z from 'zod'; -import { CreateScheduleSchema } from '@/data/form/createSchedule.schema'; -import { zodResolver } from '@hookform/resolvers/zod'; -import { Field, FieldError } from '@/components/ui/field'; -import { ArrowLeft, PenSquare, X, XIcon } from 'lucide-react'; -import { ScheduleTypeLabel, type ScheduleType } from '@/const/schedule/ScheduleType'; -import { useRecord } from '@/hooks/use-record'; -import { TypePickPopover } from '../TypePickPopover'; -import { ScheduleDay } from '@/const/schedule/ScheduleDay'; -import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group'; -import { DatePickPopover } from '../DatePickPopover'; -import { format } from 'date-fns'; -import { TimePickPopover } from '../TimePickPopover'; -import { useTime } from '@/hooks/use-time'; -import type { ScheduleCreateContentProps } from './ContentProps'; import { Button } from '@/components/ui/button'; +import { Field, FieldError } from '@/components/ui/field'; +import { Input } from '@/components/ui/input'; +import { Popover, PopoverTrigger } from '@/components/ui/popover'; +import { ScrollArea } from '@/components/ui/scroll-area'; import { Textarea } from '@/components/ui/textarea'; -import { ParticipantPopover } from '../ParticipantPopover'; +import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group'; +import { type ColorPaletteType } from '@/const/ColorPalette'; +import { ScheduleDay } from '@/const/schedule/ScheduleDay'; +import type { ScheduleStatus } from '@/const/schedule/ScheduleStatus'; +import { type ScheduleType } from '@/const/schedule/ScheduleType'; +import { CreateScheduleSchema } from '@/data/form/schedule/createSchedule.schema'; +import { usePalette } from '@/hooks/use-palette'; +import { useRecord } from '@/hooks/use-record'; +import { useTime } from '@/hooks/use-time'; +import { cn } from '@/lib/utils'; +import { ScheduleNetwork } from '@/network/ScheduleNetwork'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { ArrowLeft } from 'lucide-react'; +import { useState } from 'react'; +import { Controller, useForm } from 'react-hook-form'; +import { toast } from 'sonner'; +import * as z from 'zod'; +import { ColorPickPopover } from '../ColorPickPopover'; +import { DatePickPopover } from '../DatePickPopover'; +import { TimePickPopover } from '../TimePickPopover'; +import { TypePickPopover } from '../TypePickPopover'; +import type { ScheduleCreateContentProps } from './ContentProps'; -export const ScheduleCreateContent = ({ date, open, setMode, popoverSide, popoverAlign }: ScheduleCreateContentProps) => { +export const ScheduleCreateContent = ({ date, setMode, popoverSide, popoverAlign }: ScheduleCreateContentProps) => { const [colorPopoverOpen, setColorPopoverOpen] = useState(false); + const [isLoading, setIsLoading] = useState(false); const { getPaletteByKey } = usePalette(); - const { getNowString } = useTime(); + const { getCurrentTimeString, standardTimeToContinentalTime } = useTime(); const dayLabelList = useRecord(ScheduleDay).keys.map((key) => { return { day: Number(key), label: ScheduleDay[Number(key)] } as { day: number, label: string }; - }) + }); + const scheduleNetwork = new ScheduleNetwork(); const createScheduleForm = useForm>({ resolver: zodResolver(CreateScheduleSchema), @@ -44,8 +47,8 @@ export const ScheduleCreateContent = ({ date, open, setMode, popoverSide, popove startDate: date || new Date(), endDate: date || new Date(), content: "", - startTime: getNowString(), - endTime: getNowString(), + startTime: getCurrentTimeString('standard'), + endTime: getCurrentTimeString('standard'), type: "once", status: "yet", style: getPaletteByKey('Black').style, @@ -65,10 +68,48 @@ export const ScheduleCreateContent = ({ date, open, setMode, popoverSide, popove status, style, dayList, - participantList + // participantList } = createScheduleForm.watch(); - const selectColor = (color: ColorPaletteType) => { + const reqCreate = async () => { + if (isLoading) return; + const data = { + name, + startDate, + endDate, + content, + startTime: standardTimeToContinentalTime(startTime), + endTime: standardTimeToContinentalTime(endTime), + type: type as ScheduleType, + status: status as ScheduleStatus, + dayList, + style + }; + + const createPromise = scheduleNetwork.create(data); + setIsLoading(true); + toast.promise( + createPromise, + { + loading: '일정 생성 중입니다', + success: (res) => { + setIsLoading(false); + if (res.data.success) { + setMode('list'); + return '일정이 생성되었습니다' + } else { + throw new Error(res.data.error); + } + }, + error: (err: Error) => { + setIsLoading(false); + return err.message || "에러 발생"; + } + } + ) + } + + const selectColor = (color: ColorPaletteType) => { createScheduleForm.setValue('style', color.style); setColorPopoverOpen(false); } @@ -92,9 +133,9 @@ export const ScheduleCreateContent = ({ date, open, setMode, popoverSide, popove createScheduleForm.setValue(type, time); } - const selectParticipant = (participantList: string[]) => { - createScheduleForm.setValue('participantList', participantList); - } + // const selectParticipant = (participantList: string[]) => { + // createScheduleForm.setValue('participantList', participantList); + // } const OnceContent = () => { return ( @@ -158,7 +199,7 @@ export const ScheduleCreateContent = ({ date, open, setMode, popoverSide, popove
setMode('list')} > - +
- - -
- {ScheduleTypeLabel[type as keyof typeof ScheduleTypeLabel]} -
-
- +
+ - -
- {renderContent()} -
-
- selectTime('startTime', time ?? '')} - endTime={endTime} - setEndTime={(time: string | undefined) => selectTime('endTime', time ?? '')} - /> -
- ( -