TimeInput() — supabase Function Reference
Architecture documentation for the TimeInput() function in TimeInput.tsx from the supabase codebase.
Entity Profile
Dependency Diagram
graph TD 63622b1d_ddd5_67e6_5551_ce8f51949841["TimeInput()"] eb6a76b3_9e64_a00e_d47a_fc4d6b1d2710["formatTimeToTimeString()"] 63622b1d_ddd5_67e6_5551_ce8f51949841 -->|calls| eb6a76b3_9e64_a00e_d47a_fc4d6b1d2710 04fc0bcf_fc0a_fe8c_8588_dbe74dea5348["formatNumberToTwoDigits()"] 63622b1d_ddd5_67e6_5551_ce8f51949841 -->|calls| 04fc0bcf_fc0a_fe8c_8588_dbe74dea5348 style 63622b1d_ddd5_67e6_5551_ce8f51949841 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
apps/studio/components/interfaces/Database/Backups/PITR/TimeInput.tsx lines 25–153
const TimeInput = ({ defaultTime, minimumTime, maximumTime, onChange = noop }: TimeInputProps) => {
const [isFocused, setIsFocused] = useState(false)
const [error, setError] = useState<string>()
const [time, setTime] = useState<Time>(defaultTime || { h: 0, m: 0, s: 0 })
const formattedMinimumTime = minimumTime
? dayjs(formatTimeToTimeString(minimumTime), 'HH:mm:ss', true)
: undefined
const formattedMaximumTime = maximumTime
? dayjs(formatTimeToTimeString(maximumTime), 'HH:mm:ss', true)
: undefined
useEffect(() => {
if (minimumTime || maximumTime) validate(time)
}, [JSON.stringify(minimumTime), JSON.stringify(maximumTime)])
useEffect(() => {
if (defaultTime) {
setTime(defaultTime)
validate(defaultTime)
}
}, [defaultTime])
const validate = (time: Time) => {
let error = undefined
const formattedTime = dayjs(formatTimeToTimeString(time), 'HH:mm:ss', true)
if (!formattedTime.isValid()) {
error = 'Please enter a valid time'
} else if (formattedMinimumTime && formattedTime.isBefore(formattedMinimumTime)) {
error = 'Selected time is before the minimum time allowed'
} else if (formattedMaximumTime && formattedTime.isAfter(formattedMaximumTime)) {
error = 'Selected time is after the maximum time allowed'
}
setError(error)
return error === undefined
}
const onFocus = () => setIsFocused(true)
const onInputChange = (event: ChangeEvent<HTMLInputElement>, unit: 'h' | 'm' | 's') => {
if (isNaN(Number(event.target.value))) return
setTime({ ...time, [unit]: event.target.value })
}
const onInputBlur = (event: ChangeEvent<HTMLInputElement>, unit: 'h' | 'm' | 's') => {
const formattedInput = Number(event.target.value)
const updatedTime = { ...time, [unit]: formattedInput }
setTime(updatedTime)
validate(updatedTime)
onChange(updatedTime)
setIsFocused(false)
}
return (
<>
<div
className={[
'flex items-center justify-between transition',
'rounded-md bg-studio border px-3.5 py-2 w-[200px]',
`${
isFocused ? 'border-stronger' : error === undefined ? 'border-strong' : 'border-red-800'
}`,
].join(' ')}
>
<Clock className="text-foreground-light" size={18} strokeWidth={1.5} />
<Tooltip>
<TooltipTrigger className="w-1/4" tabIndex={-1}>
<input
type="text"
maxLength={2}
pattern="[0-9]*"
placeholder="HH"
value={formatNumberToTwoDigits(time.h)}
onFocus={onFocus}
aria-label="Hours"
onBlur={(event) => onInputBlur(event, 'h')}
onChange={(event) => onInputChange(event, 'h')}
className="w-full text-sm bg-transparent p-0 text-center outline-none border-none focus:ring-0"
/>
</TooltipTrigger>
<TooltipContent side="bottom">Hours (HH)</TooltipContent>
</Tooltip>
<span>:</span>
<Tooltip>
<TooltipTrigger className="w-1/4" tabIndex={-1}>
<input
type="text"
maxLength={2}
pattern="[0-9]*"
placeholder="MM"
value={formatNumberToTwoDigits(time.m)}
onFocus={onFocus}
aria-label="Minutes"
onBlur={(event) => onInputBlur(event, 'm')}
onChange={(event) => onInputChange(event, 'm')}
className="w-full text-sm bg-transparent p-0 text-center outline-none border-none focus:ring-0"
/>
</TooltipTrigger>
<TooltipContent side="bottom">Minutes (MM)</TooltipContent>
</Tooltip>
<span>:</span>
<Tooltip>
<TooltipTrigger className="w-1/4" tabIndex={-1}>
<input
type="text"
maxLength={2}
pattern="[0-9]*"
placeholder="SS"
value={formatNumberToTwoDigits(time.s)}
onFocus={onFocus}
aria-label="Seconds"
onBlur={(event) => onInputBlur(event, 's')}
onChange={(event) => onInputChange(event, 's')}
className="w-full text-sm bg-transparent p-0 text-center outline-none border-none focus:ring-0"
/>
</TooltipTrigger>
<TooltipContent side="bottom">Seconds (SS)</TooltipContent>
</Tooltip>
</div>
{error && <p className="text-sm text-red-900">{error}</p>}
</>
)
}
Domain
Subdomains
Source
Frequently Asked Questions
What does TimeInput() do?
TimeInput() is a function in the supabase codebase.
What does TimeInput() call?
TimeInput() calls 2 function(s): formatNumberToTwoDigits, formatTimeToTimeString.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free