70 lines
1.8 KiB
TypeScript

'use client';
import { ScheduleTimeContext } from '../context';
import { formatTime } from '@/utils/date';
import { Input } from '@repo/ui/components/ui/input';
import { cn } from '@repo/ui/lib/utils';
import { type FormEvent, type PropsWithChildren, use } from 'react';
type EditableTimeRangeProps = {
readonly disabled?: boolean;
readonly onSubmit: (event: FormEvent) => void;
};
type TimeRangeProps = {
readonly className?: string;
readonly delimiter?: boolean;
readonly time_end: string;
readonly time_start: string;
};
export function EditableTimeRangeForm({
children,
disabled = false,
onSubmit,
}: PropsWithChildren<EditableTimeRangeProps>) {
const { endTime, setEndTime, setStartTime, startTime } = use(ScheduleTimeContext);
return (
<form className="flex flex-row items-center gap-2" onSubmit={onSubmit}>
<div className="flex-1">
<Input
className="rounded-xl"
disabled={disabled}
id="start-time"
onChange={(event) => setStartTime?.(event.target.value)}
required
type="time"
value={startTime}
/>
</div>
<div className="flex-1">
<Input
className="rounded-xl"
disabled={disabled}
id="end-time"
onChange={(event) => setEndTime?.(event.target.value)}
required
type="time"
value={endTime}
/>
</div>
{children}
</form>
);
}
export function ReadonlyTimeRange({
className,
delimiter = true,
time_end,
time_start,
}: Readonly<TimeRangeProps>) {
return (
<div className={cn('flex flex-row items-center gap-2 text-lg font-bold', className)}>
<span className="tracking-wider">{formatTime(time_start).user()}</span>
{delimiter && ' - '}
<span className="tracking-wider">{formatTime(time_end).user()}</span>
</div>
);
}