DatePicker#
Компонент выбора даты.
import { DatePicker, DateLibAdapterProvider } from '@v-uik/date-picker'
DatePicker API#
№ |
Свойство |
Описание |
Значение по умолчанию |
|---|---|---|---|
1 |
classes |
JSS-классы для стилизации. |
- |
2 |
label |
Подпись над полем ввода (ReactNode) |
- |
3 |
labelProps |
Свойства компонента InputLabel (InputLabelProp) |
- |
4 |
helperText |
Подпись под полем ввода (ReactNode) |
- |
5 |
helperTextProps |
Свойства компонента InputHelperText (InputHelperTextProps) |
- |
6 |
error |
Индикатор ошибки (boolean) |
- |
7 |
inputProps |
Свойства компонента InputBase или MaskedInputBase (InputBaseProps MaskedInputBaseProps) |
- |
4 |
disabled |
Заблокировать поле (boolean) |
- |
30 |
size |
Размер поля: "sm", "md", "lg" |
"md" |
9 |
open |
Раскрыть date picker (boolean) |
- |
10 |
dropdownProps |
Свойства компонента Dropdown (DropdownProps) |
- |
11 |
renderInput |
Функция для отображения поля ввода `((params: InputBaseProps |
MaskedInputBaseProps) => ReactNode)` |
12 |
shouldDisableDate |
Функция отключения даты. Функция будет вызвана для каждой даты (дня, месяца, года), которая в данный момент отображает в календаре. Дата будет отключена, если функция вернет true |
- |
13 |
renderDay |
Функция для отображения дня |
- |
14 |
calendarViewExternalProps |
|
- |
15 |
value |
Значение TDate |
- |
16 |
onChange |
Обработчик изменения значения |
- |
17 |
views |
Доступные панели выбора даты: day, month, year |
- |
18 |
format |
Формат отображения даты в input (string) |
- |
19 |
mask |
Маска ввода (string) |
- |
20 |
validationErrorMessages |
Сообщения ошибок при вводе некорректных дат |
- |
21 |
disableFuture |
Заблокировать выбор даты в будущем (boolean) |
- |
22 |
disablePast |
Заблокировать выбора даты в прошлом (boolean) |
- |
23 |
minDate |
Минимальная допустимая дата (TDate) |
- |
24 |
maxDate |
Максимальная допустимая дата (TDate) |
- |
25 |
disableDate |
Заблокировать определенную дату |
- |
DateLibAdapterProvider API#
№ |
Свойство |
Описание |
Значение по умолчанию |
|---|---|---|---|
1 |
dateAdapter |
Адаптер для форматирования даты из библиотеки @date-io |
- |
2 |
options |
Параметры для конструктора адаптера. В зависимости от конструктора будет отличаться набор параметров. Общая сигнатура: any |
Примечание:
перед началом работы убедитесь, что установлен адаптер date-io. Он позволяет использовать ту же библиотеку дат, которая уже установлена в приложении.
Чтобы подключить библиотеку дат, используйте один из существующих адаптеров или напишите свой.
//es modules
import { DateFnsAdapter } from '@v-uik/date-picker/dist/adapters/esm/date-fns'
import { DateFnsJalaliAdapter } from '@v-uik/date-picker/dist/adapters/esm/date-fns-jalali'
import { DayjsAdapter } from '@v-uik/date-picker/dist/adapters/esm/dayjs'
import { HijriAdapter } from '@v-uik/date-picker/dist/adapters/esm/hijri'
import { JalaaliAdapter } from '@v-uik/date-picker/dist/adapters/esm/jalaali'
import { LuxonAdapter } from '@v-uik/date-picker/dist/adapters/esm/luxon'
import { MomentAdapter } from '@v-uik/date-picker/dist/adapters/esm/moment'
//common js
import { DateFnsAdapter } from '@v-uik/date-picker/dist/adapters/date-fns'
import { DateFnsJalaliAdapter } from '@v-uik/date-picker/dist/adapters/date-fns-jalali'
import { DayjsAdapter } from '@v-uik/date-picker/dist/adapters/dayjs'
import { HijriAdapter } from '@v-uik/date-picker/dist/adapters/hijri'
import { JalaaliAdapter } from '@v-uik/date-picker/dist/adapters/jalaali'
import { LuxonAdapter } from '@v-uik/date-picker/dist/adapters/luxon'
import { MomentAdapter } from '@v-uik/date-picker/dist/adapters/moment'
С помощью компонента DateLibAdapterProvider пробрасывается необходимый API для работы с датами для всех компонентов DatePicker.
Подключить этот компонент нужно один раз в файле инициализации приложения.
import * as React from 'react'
import { DatePicker, DateLibAdapterProvider } from '@v-uik/date-picker'
import { DateFnsAdapter } from '@v-uik/date-picker/adapters/date-fns'
import { ru } from 'date-fns/locale'
export function App() {
return (
<DateLibAdapterProvider
dateAdapter={DateFnsAdapter}
options={{ locale: ru }}
>
<App />
</DateLibAdapterProvider>
)
}
Выбор времени#
Ниже приведен базовый пример выбора времени. С помощью объекта inputProps можно настраивать ширину, placeholder и прочие параметры текстового поля. Использование параметра fullWidth недоступно при использовании рендер-функции renderInput.
import * as React from 'react'
import { DatePicker } from '@v-uik/date-picker'
import { externalAriaProps } from './common'
const inputProps = {
placeholder: 'дд.мм.гггг',
}
export const BasicStory = (): React.ReactElement => {
const [date, setDate] = React.useState<Date | null>(null)
const handleChange = React.useCallback(
(value) => {
setDate(value)
},
[setDate]
)
return (
<DatePicker
value={date}
mask="11.11.1111"
inputProps={inputProps}
calendarViewExternalProps={externalAriaProps}
onChange={handleChange}
/>
)
}
Отключение дат#
import * as React from 'react'
import { DatePicker } from '@v-uik/date-picker'
import { externalAriaProps } from './common'
const inputProps = {
placeholder: 'дд.мм.гггг',
}
const isDisabledDate = (date: Date | null) => {
return !!date && date.getTime() < Date.now()
}
export const DisableDatesStory = (): React.ReactElement => {
const [date, setDate] = React.useState<Date | null>(null)
const handleChange = React.useCallback(
(value) => {
setDate(value)
},
[setDate]
)
return (
<DatePicker
classes={{
root: 'hello',
}}
value={date}
mask="11.11.1111"
inputProps={inputProps}
shouldDisableDate={isDisabledDate}
calendarViewExternalProps={externalAriaProps}
onChange={handleChange}
/>
)
}
Валидация минимальной/максимальной даты#
import * as React from 'react'
import { DatePicker } from '@v-uik/date-picker'
import { addDays } from 'date-fns'
import { externalAriaProps } from './common'
const inputProps = {
placeholder: 'дд.мм.гггг',
}
export const MinMaxDateStory = (): React.ReactElement => {
const [date, setDate] = React.useState<Date | null>(null)
return (
<DatePicker
label="Выберите дату"
value={date}
mask="11.11.1111"
inputProps={inputProps}
minDate={new Date()}
maxDate={addDays(new Date(), 7)}
calendarViewExternalProps={externalAriaProps}
onChange={setDate}
/>
)
}
Замена поля ввода времени#
Благодаря рендер-свойству renderInput можно отобразить любой компонент.
В примере ниже вместо поля ввода отображена кнопка, которая вызывает календарь.
import * as React from 'react'
import { DatePicker } from '@v-uik/date-picker'
import { Button } from '@v-uik/button'
import { externalAriaProps } from './common'
const inputProps = {
placeholder: 'дд.мм.гггг',
}
export const RenderInputStory = (): JSX.Element => {
const [date, setDate] = React.useState<Date | null>(null)
const handleChange = React.useCallback(
(value) => {
setDate(value)
},
[setDate]
)
return (
<DatePicker
value={date}
mask="11.11.1111"
inputProps={inputProps}
calendarViewExternalProps={externalAriaProps}
renderInput={({ value }) => (
<Button>{value ? value : 'Выбрать дату'}</Button>
)}
onChange={handleChange}
/>
)
}
Замена плашки выбора дня#
В данном примере представлен вариант кастомизации элемента дня через рендер-функцию.
import * as React from 'react'
import { DatePicker } from '@v-uik/date-picker'
import { Button, ButtonKinds } from '@v-uik/button'
import { clsx, createUseStyles } from '@v-uik/theme'
import { externalAriaProps } from './common'
const useStyles = createUseStyles((theme) => ({
root: {
minWidth: 40,
width: 40,
height: 40,
padding: 0,
},
selected: {
backgroundColor: theme.ref.palette.green95,
},
today: {
backgroundColor: theme.ref.palette.electricBlue95,
},
}))
export const RenderDay = (): JSX.Element => {
const classesMap = useStyles()
const [date, setDate] = React.useState<Date | null>(null)
return (
<DatePicker
format="dd.MM.yyyy"
mask="11.11.1111"
calendarViewExternalProps={externalAriaProps}
renderDay={({ value, selected, isToday, onClick, onFocus }) => (
<Button
key={value}
className={clsx(classesMap.root, {
[classesMap.today]: isToday,
[classesMap.selected]: selected,
})}
kind={ButtonKinds.ghost}
color="secondary"
onClick={onClick}
onFocus={onFocus}
>
{value}
</Button>
)}
value={date}
onChange={setDate}
/>
)
}
Sub-компоненты#
Некоторые низкоуровневые компоненты, которые используются в пакете @v-uik/date-picker, можно применять для создания собственных компонентов работы с датами.
Sub-компонент DayView#
Используется для отображения календаря.
import * as React from 'react'
import { DayView, useDateLibAdapter } from '@v-uik/date-picker'
import { Text } from '@v-uik/typography'
import { externalAriaProps } from './common'
export const DayViewStory = (): JSX.Element => {
const [date, setDate] = React.useState<Date | null>(null)
const dateAdapter = useDateLibAdapter<Date>()
const formattedDate = date
? dateAdapter.formatByString(date, 'dd.MM.yyyy')
: ''
return (
<>
<DayView
style={{ display: 'inline-block' }}
value={date}
onChange={setDate}
{...externalAriaProps.dayViewProps}
/>
<Text style={{ marginTop: 16 }}>
{`выбранная дата: ${formattedDate}`}
</Text>
</>
)
}
DayView API#
№ |
Свойство |
Описание |
Значение по умолчанию |
|---|---|---|---|
1 |
classes |
JSS-классы для стилизации: |
- |
2 |
value |
Выбранная дата (TDate, null) |
- |
3 |
onChange |
Событие изменения даты |
- |
4 |
shouldDisableDate |
Функция отключения дат. Функция будет вызвана для каждой даты, которая отображается в календаре. Дата будет отключена, если функция вернет true |
- |
5 |
displayedDate |
Управляет отображением текущего месяца. Если значение не передано, предположение о текущем месяце будет получено из value. Если value также не определено, предположение о текущем месяце высчитывается относительно сегодняшнего дня по системному времени (TDate, null) |
- |
6 |
onChangeMonth |
Событие изменения отображения текущего месяца |
- |
7 |
renderDay |
Функция для отображения дня |
- |
8 |
onChangeDisplayedDate |
Функция для события изменения displayedDate |
- |
9 |
ref |
|
- |
Sub-компонент MonthView#
Используется для отображения месяцев.
import * as React from 'react'
import { MonthView, useDateLibAdapter } from '@v-uik/date-picker'
import { Text } from '@v-uik/typography'
import { externalAriaProps } from './common'
export const MonthViewStory = (): JSX.Element => {
const [date, setDate] = React.useState<Date | null>(null)
const dateAdapter = useDateLibAdapter<Date>()
const formattedDate = date
? dateAdapter.formatByString(date, 'LLLL yyyy')
: ''
return (
<>
<MonthView
value={date}
onChange={setDate}
{...externalAriaProps.monthViewProps}
/>
<Text style={{ marginTop: 16 }}>
{`выбранный месяц: ${formattedDate}`}
</Text>
</>
)
}
MonthView API#
№ |
Свойство |
Описание |
Значение по умолчанию |
|---|---|---|---|
1 |
classes |
JSS-классы для стилизации: |
- |
2 |
value |
Выбранная дата (TDate, null) |
- |
3 |
onChange |
Событие изменения даты |
- |
4 |
shouldDisableDate |
Функция отключения дат. Функция будет вызвана для каждой даты, которая отображается в календаре. Дата будет отключена, если функция вернет true |
- |
5 |
displayedDate |
Управляет отображением текущего месяца. Если значение не передано, предположение о текущем месяце будет получено из value. Если value также не определено, предположение о текущем месяце высчитывается относительно сегодняшнего дня по системному времени (TDate, null) |
- |
6 |
ref |
|
- |
Sub-компонент YearView#
Используется для отображения лет.
import * as React from 'react'
import { YearView, useDateLibAdapter } from '@v-uik/date-picker'
import { Text } from '@v-uik/typography'
import { externalAriaProps } from './common'
export const YearViewStory = (): JSX.Element => {
const [date, setDate] = React.useState<Date | null>(null)
const dateAdapter = useDateLibAdapter<Date>()
const formattedDate = date ? dateAdapter.formatByString(date, 'yyyy') : ''
return (
<>
<YearView
value={date}
onChange={setDate}
{...externalAriaProps.yearViewProps}
/>
<Text style={{ marginTop: 16 }}>{`выбранный год: ${formattedDate}`}</Text>
</>
)
}
YearView API#
№ |
Свойство |
Описание |
Значение по умолчанию |
|---|---|---|---|
1 |
classes |
JSS-классы для стилизации: |
- |
2 |
value |
Выбранная дата (TDate, null) |
- |
3 |
onChange |
Событие изменения даты |
- |
4 |
shouldDisableDate |
Функция отключения дат. Функция будет вызвана для каждой даты, которая отображается в календаре. Дата будет отключена, если функция вернет true |
- |
5 |
displayedDate |
Управляет отображением текущего месяца. Если значение не передано, предположение о текущем месяце будет получено из value. Если value также не определено, предположение о текущем месяце высчитывается относительно сегодняшнего дня по системному времени (TDate, null) |
- |
6 |
ref |
|
- |
7 |
autoFocus |
Включить автоматическую установку фокуса на выбранном или текущем годе (boolean) |
Sub-компонент CalendarPicker#
Одновременный выбор даты, месяца и года.
import * as React from 'react'
import { CalendarPicker, useDateLibAdapter } from '@v-uik/date-picker'
import { Text } from '@v-uik/typography'
import { externalAriaProps } from './common'
export const CalendarPickerStory = (): JSX.Element => {
const [date, setDate] = React.useState<Date | null>(null)
const dateAdapter = useDateLibAdapter<Date>()
const formattedDate = date
? dateAdapter.formatByString(date, 'dd.MM.yyyy')
: ''
return (
<>
<CalendarPicker
value={date}
externalComponentsProps={externalAriaProps}
onChange={() => null}
onChangeDay={setDate}
/>
<Text style={{ marginTop: 16 }}>
{`выбранная дата: ${formattedDate}`}
</Text>
</>
)
}
CalendarPicker API#
№ |
Свойство |
Описание |
Значение по умолчанию |
|---|---|---|---|
1 |
value |
Выбранная дата (TDate, null) |
- |
2 |
onChange |
Событие изменения даты |
- |
3 |
shouldDisableDate |
Функция отключения дат. Функция будет вызвана для каждой даты, которая отображается в календаре. Дата будет отключена, если функция вернет true |
- |
4 |
displayedDate |
Управляет отображением текущего месяца. Если значение не передано, предположение о текущем месяце будет получено из value. Если value также не определено, предположение о текущем месяце высчитывается относительно сегодняшнего дня по системному времени (TDate, null) |
- |
5 |
ref |
|
- |
6 |
defaultDisplayedDate |
Указывает, с какой даты начать отображение календаря. Будет использоваться при первой отрисовки компонента, если не указано свойство value (TDate) |
- |
7 |
defaultView |
Определяет, что показать при первом отображении компонента — выбор дня, месяца или года |
- |
8 |
onChangeDay |
Событие изменения даты. Срабатывает, когда пользователь выбирает день |
- |
9 |
onChangeMonth |
Событие изменения даты. Срабатывает, когда пользователь выбирает месяц |
- |
10 |
onChangeYear |
Событие изменения даты. Срабатывает, когда пользователь выбирает год |
- |
11 |
renderDay |
Функция для отображения дня |
- |
12 |
externalComponentsProps |
Дополнительные свойства для компонентов DayView, MonthView, YearView, левой/правой кнопки навигации, кнопки в панеле месяц/год |
- |