DateField Experimental
DateField is used when the user has to select a date. Compared to DatePicker , DateField has no supporting calendar to select a date, the user must input date values with a numeric keyboard.
DateField is distributed within the "gestalt-datepicker" package and must be installed separately.
Props
Localization
Be sure to localize all text strings. Note that localization can lengthen text by 20 to 30 percent.
Date format locales
DateField supports multiple locales. Adjust the date format to each date-fns locale .
The following locale examples show the different locale format variants.
Note that locale data from date-fns is external to gestalt-datepicker, it's not an internal dependency. Add date-fns to your app's dependencies.
import { DateField } from 'gestalt-datepicker';
import { it } from 'date-fns/locale';
<DateField localeData={it}/>
Use the SelectList to try out different locales by passing in the localeData
prop.
Variants
Controlled component
DateField is a controlled component. Use value
, onChange
, onClearInput
and onError
to implement it correctly.
import { useState } from 'react'; import { Box, Flex } from 'gestalt'; import { DateField } from 'gestalt-datepicker'; export default function Example() { const [dateValue, setDateValue] = useState(null); const [errorText, setErrorText] = useState(null); return ( <Flex alignItems="center" gap={4} height="100%" justifyContent="center" width="100%" > <Box width={400}> <DateField id="mainExample" label="Date of birth" helperText="Enter your date of birth" onError={({ errorMessage }) => setErrorText(errorMessage)} errorMessage={errorText || undefined} onChange={({ value }) => { setDateValue(value); }} value={dateValue} onClearInput={() => setDateValue(null)} name="bday_datefield" /> </Box> </Flex> ); }
Error messaging
DateField can communicate input errors to the user. Use onError
and errorMessage
to implement it correctly.
import { useState } from 'react'; import { Box, Flex } from 'gestalt'; import { DateField } from 'gestalt-datepicker'; export default function Example() { const [dateValue, setDateValue] = useState(null); const [errorText, setErrorText] = useState(null); return ( <Flex alignItems="center" gap={4} height="100%" justifyContent="center" width="100%" > <Box width={400}> <DateField id="errorExample" label="Date of birth" helperText="Enter your date of birth" onError={({ errorMessage, value }) => { const date = value ? new Date(value) : null; if (errorMessage === 'invalidDate') return; if ( errorMessage === 'disableFuture' || (date && date.getFullYear() === 1) ) setErrorText('Please, select a valid birth date'); if (date && date.getFullYear() > 1) setErrorText(null); }} errorMessage={errorText || undefined} onChange={({ value }) => { setDateValue(value); }} value={dateValue} disableRange="disableFuture" onClearInput={() => { setErrorText(null); setDateValue(null); }} name="bday_datefield" /> </Box> </Flex> ); }
States
DateField supports disabled
and readOnly
states.
import { Box, Flex } from 'gestalt'; import { DateField } from 'gestalt-datepicker'; export default function Example() { return ( <Flex alignItems="center" gap={4} height="100%" justifyContent="center" width="100%" direction="column" > <Box width={400}> <DateField id="disabled_example" disabled label="Date of birth" onError={() => {}} onChange={() => {}} value={new Date('1995-12-17T03:24:00')} onClearInput={() => {}} name="bday_datefield" /> </Box> <Box width={400}> <DateField id="readonly_example" readOnly label="Date of birth" onError={() => {}} onChange={() => {}} value={new Date('1995-12-17T03:24:00')} onClearInput={() => {}} name="bday_datefield" /> </Box> </Flex> ); }
Disable past & future dates
DateField supports disabling future & past dates from being selected.
import { useState } from 'react'; import { Box, Flex } from 'gestalt'; import { DateField } from 'gestalt-datepicker'; export default function Example() { const [dateValueDisableFuture, setDateValueDisableFuture] = useState(null); const [dateValueDisablePast, setDatealueDisablePast] = useState(null); const [errorTextDisableFuture, setErrorTextDisableFuture] = useState(null); const [errorTextDisablePast, setErrorTextDisablePast] = useState(null); return ( <Flex alignItems="center" gap={4} height="100%" justifyContent="center" width="100%" direction="column" > <Box width={400}> <DateField id="disableFuture" label="Date of birth" helperText="Enter your date of birth" onError={({ errorMessage }) => setErrorTextDisableFuture(errorMessage) } errorMessage={ (errorTextDisableFuture && errorTextDisableFuture === 'disableFuture' && 'Please, enter a valid past date') || undefined } onChange={({ value }) => { setDateValueDisableFuture(value); }} value={dateValueDisableFuture} onClearInput={() => setDateValueDisableFuture(null)} name="bday_datefield" disableRange="disableFuture" /> </Box> <Box width={400}> <DateField id="disablePast" label="Campaign activation date" helperText="Enter an activation date for your campaign" onError={({ errorMessage }) => setErrorTextDisablePast(errorMessage)} errorMessage={ (errorTextDisablePast && errorTextDisablePast === 'disablePast' && 'Please, enter a valid future date') || undefined } onChange={({ value }) => { setDatealueDisablePast(value); }} value={dateValueDisablePast} onClearInput={() => setDatealueDisablePast(null)} name="bday_datefield" disableRange="disablePast" /> </Box> </Flex> ); }
External handlers
DateField consumes external handlers from GlobalEventsHandlerProvider .
Handlers:
- onRender : executed when DateField mounts for the first time
See GlobalEventsHandlerProvider for more information.
Internal documentation
Related
DatePicker
Use DatePicker if the user is allowed to pick a date from a calendar popup.