diff --git a/src/apis/contests.ts b/src/apis/contests.ts index 6e73388..64edb7e 100644 --- a/src/apis/contests.ts +++ b/src/apis/contests.ts @@ -1,4 +1,4 @@ -import { ContestRequestDto, ContestResponseDto, CurrentContestResponseDto, VoteTermDto } from 'types/DTO'; +import { ContestRequestDto, ContestResponseDto, CurrentContestResponseDto } from 'types/DTO'; import apiClient from './apiClient'; import { TeamListItemResponseDto } from 'types/DTO/teams/teamListDto'; @@ -51,13 +51,3 @@ export const postBulkAddTeams = async (contestId: number, formData: FormData) => }); return res.data; }; - -export const getVoteTerm = async (contestId: number): Promise => { - const res = await apiClient.get(`/contests/${contestId}/vote`); - return res.data; -}; - -export const updateVoteTerm = async (contestId: number, payload: VoteTermDto) => { - const res = await apiClient.put(`/contests/${contestId}/vote`, payload); - return res.data; -}; diff --git a/src/apis/votes.ts b/src/apis/votes.ts new file mode 100644 index 0000000..0e7c3e0 --- /dev/null +++ b/src/apis/votes.ts @@ -0,0 +1,22 @@ +import { VoteMaxVotesLimitDto, VoteTermDto } from 'types/DTO'; +import apiClient from './apiClient'; + +export const getVoteTerm = async (contestId: number): Promise => { + const res = await apiClient.get(`/contests/${contestId}/vote`); + return res.data; +}; + +export const putVoteTerm = async (contestId: number, payload: VoteTermDto) => { + const res = await apiClient.put(`/contests/${contestId}/vote`, payload); + return res.data; +}; + +export const getMaxVoteLimit = async (contestId: number): Promise => { + const res = await apiClient.get(`/contests/${contestId}/votes`); + return res.data; +}; + +export const patchMaxVoteLimit = async (contestId: number, payload: VoteMaxVotesLimitDto) => { + const res = await apiClient.patch(`/contests/${contestId}/votes`, payload); + return res.data; +}; diff --git a/src/components/DateTimePicker.tsx b/src/components/DateTimePicker.tsx index fb3939b..239b295 100644 --- a/src/components/DateTimePicker.tsx +++ b/src/components/DateTimePicker.tsx @@ -1,5 +1,6 @@ import { useState, useEffect } from 'react'; -import { ChevronDownIcon } from 'lucide-react'; +import { CiCalendar } from 'react-icons/ci'; +import dayjs, { Dayjs } from 'dayjs'; import { Button } from '@components/ui/button'; import { Calendar } from '@components/ui/calendar'; @@ -9,71 +10,68 @@ import { Popover, PopoverContent, PopoverTrigger } from '@components/ui/popover' interface DateTimePickerProps { label: string; - prevDate: Date; - onChange?: (date: Date) => void; + prevDate: string | Dayjs; + onChange: (date: Dayjs) => void; } export const DateTimePicker = ({ label, prevDate, onChange }: DateTimePickerProps) => { const [open, setOpen] = useState(false); - const [dateTime, setDateTime] = useState(new Date(prevDate)); - const [timeInputValue, setTimeInputValue] = useState(new Date(prevDate).toTimeString().slice(0, 8)); + const [dateTime, setDateTime] = useState(dayjs(prevDate)); + const [timeInputValue, setTimeInputValue] = useState(dayjs(prevDate).format('HH:mm')); useEffect(() => { - const newDate = new Date(prevDate); - setDateTime(newDate); - setTimeInputValue(newDate.toTimeString().slice(0, 8)); + const newDateTime = dayjs(prevDate); + setDateTime(newDateTime); + setTimeInputValue(newDateTime.format('HH:mm')); }, [prevDate]); const handleDateChange = (date: Date | undefined) => { if (!date) return; - const newDateTime = new Date(dateTime); - newDateTime.setFullYear(date.getFullYear(), date.getMonth(), date.getDate()); + const newDateTime = dayjs(date).hour(dateTime.hour()).minute(dateTime.minute()); setDateTime(newDateTime); - setTimeInputValue(newDateTime.toTimeString().slice(0, 8)); setOpen(false); - onChange?.(newDateTime); + onChange(newDateTime); }; const handleTimeChange = (e: React.ChangeEvent) => { - setTimeInputValue(e.target.value); + const { value } = e.target; + setTimeInputValue(value); }; const handleTimeBlur = () => { - const timeValue = timeInputValue; - const timeParts = timeValue.split(':').map(Number); - const [hours, minutes, seconds = 0] = timeParts; + const timeParts = timeInputValue.split(':').map(Number); + const [hours, minutes] = timeParts; if (isNaN(hours) || isNaN(minutes)) { - setTimeInputValue(dateTime.toTimeString().slice(0, 8)); + setTimeInputValue(dateTime.format('HH:mm')); return; } - const newDateTime = new Date(dateTime); - newDateTime.setHours(hours, minutes, seconds); + const newDateTime = dateTime.hour(hours).minute(minutes); setDateTime(newDateTime); - onChange?.(newDateTime); + onChange(newDateTime); }; return ( -
-