import dayjs from 'dayjs' import { useEffect, useState } from 'react' import { Control, ControllerRenderProps } from 'react-hook-form' import { FormControl, FormField, Input, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, WarningIcon, } from 'ui' import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' import { CUSTOM_EXPIRY_VALUE, EXPIRES_AT_OPTIONS, NON_EXPIRING_TOKEN_VALUE, } from '../../AccessToken.constants' import { type TokenFormValues } from '../../AccessToken.schemas' import { DatePicker } from '@/components/ui/DatePicker' interface BasicInfoProps { control: Control expirationDate: string onCustomDateChange?: (date: { date: string } | undefined) => void onCustomExpiryChange?: (isCustom: boolean) => void } export const BasicInfo = ({ control, expirationDate, onCustomDateChange, onCustomExpiryChange, }: BasicInfoProps) => { const [customDate, setCustomDate] = useState() const [isCustomSelected, setIsCustomSelected] = useState(false) useEffect(() => { const isCustom = expirationDate === CUSTOM_EXPIRY_VALUE setIsCustomSelected(isCustom) onCustomExpiryChange?.(isCustom) }, [expirationDate, onCustomExpiryChange]) const handleCustomDateChange = (date: Date | undefined) => { setCustomDate(date) if (date) { onCustomDateChange?.({ date: date.toISOString() }) } else { onCustomDateChange?.(undefined) } } const handleExpiryChange = ( value: string, field: ControllerRenderProps ) => { const isCustom = value === CUSTOM_EXPIRY_VALUE setIsCustomSelected(isCustom) onCustomExpiryChange?.(isCustom) field.onChange(value) } return (
( )} /> (
{isCustomSelected && ( { const selectedDate = date.to || date.from if (selectedDate) { handleCustomDateChange(new Date(selectedDate)) } else { handleCustomDateChange(undefined) } }} > {customDate ? `${dayjs(customDate).format('DD MMM, HH:mm')}` : 'Select date'} )}
{field.value === NON_EXPIRING_TOKEN_VALUE && (
Make sure to keep your non-expiring token safe and secure.
)}
)} />
) }