Checkbox#
Чекбокс используется для включения или выключения нескольких опций.
import { Checkbox } from '@v-uik/checkbox'
import { CheckboxGroup } from '@v-uik/checkbox-group'
Checkbox API#
№ |
Свойство |
Описание |
Значение по умолчанию |
|---|---|---|---|
1 |
classes |
JSS-классы для стилизации. |
- |
2 |
checked |
Элемент выбран (boolean) |
- |
3 |
disabled |
Элемент отключен (boolean) |
- |
4 |
indeterminate |
Неопределенное состояние чекбокса (boolean) |
- |
5 |
name |
Атрибут name элемента input (string) |
- |
6 |
onChange |
Обработчик, вызываемый при изменении состояния |
- |
7 |
inputProps |
Свойства элемента input |
- |
CheckboxGroup API#
№ |
Свойство |
Описание |
Значение по умолчанию |
|---|---|---|---|
1 |
classes |
JSS-классы для стилизации. |
- |
2 |
label |
Подпись над полем ввода (ReactNode) |
- |
3 |
labelProps |
Свойства компонента InputLabel (InputLabelProps) |
- |
4 |
direction |
Направление расположения элементов: horizontal, vertical |
horizontal |
5 |
value |
Значение поля (string[]) |
[] |
6 |
onChange |
Обработчик изменения состояния |
- |
7 |
helperText |
Подпись под полем ввода (ReactNode) |
- |
8 |
helperTextProps |
Свойства компонента InputHelperText (InputHelperTextProps) |
- |
9 |
disabled |
boolean |
- |
10 |
error |
boolean |
- |
Чекбокс с ярлыком#
import * as React from 'react'
import { Checkbox } from '@v-uik/checkbox'
import { LabelControl } from '@v-uik/label-control'
export interface WithLabelProps {
initChecked?: boolean
}
export const WithLabel = ({
initChecked = false,
}: WithLabelProps): JSX.Element => {
const [checked, setChecked] = React.useState(initChecked)
const handleChangeChecked = () => {
setChecked(!checked)
}
return (
<LabelControl
control={<Checkbox />}
checked={checked}
label="Quis fugiat proident exercitation magna anim cupidatat eu irure proidentamet."
onChange={handleChangeChecked}
/>
)
}
Вертикальный список чекбоксов#
import * as React from 'react'
import { CheckboxGroup } from '@v-uik/checkbox-group'
import { Checkbox } from '@v-uik/checkbox'
import { LabelControl } from '@v-uik/label-control'
export const CheckboxGroupVertical = (): JSX.Element => {
const [value, setValue] = React.useState<string[]>([])
const onChange = (
event: React.ChangeEvent<HTMLInputElement>,
value: string[] | undefined
) => {
setValue(value ?? [])
}
return (
<CheckboxGroup
label="Расположение"
value={value}
direction="vertical"
onChange={onChange}
>
<LabelControl
name="debt"
control={<Checkbox />}
label="Дебетовая карта"
/>
<LabelControl
name="credit"
control={<Checkbox />}
label="Кредитная карта"
/>
<LabelControl name="cash" control={<Checkbox />} label="Наличные" />
</CheckboxGroup>
)
}
Неопределенное состояние#
Эта опция включает режим отображения, при котором не все элементы внутри группы выбраны.
import * as React from 'react'
import { Checkbox } from '@v-uik/checkbox'
import { CheckboxGroup } from '@v-uik/checkbox-group'
import { LabelControl } from '@v-uik/label-control'
interface Props {
initPayments?: string[]
}
export const Indeterminate = ({ initPayments = [] }: Props): JSX.Element => {
const payments = React.useMemo(() => ['debt', 'credit', 'cash'], [])
const [activePayments, setActivePayments] =
React.useState<typeof payments>(initPayments)
const handleChangeGroup = React.useCallback(
(
event: React.ChangeEvent<HTMLInputElement>,
value: string[] | undefined
) => {
setActivePayments(value ?? [])
},
[]
)
const rootChecked = activePayments.length === payments.length
const indeterminate =
!!activePayments.length && activePayments.length < payments.length
const handleChangeRoot = React.useCallback(() => {
if (rootChecked) {
setActivePayments([])
} else {
setActivePayments(payments)
}
}, [payments, rootChecked])
return (
<>
<LabelControl
style={{ marginBottom: 8 }}
checked={rootChecked}
control={<Checkbox indeterminate={indeterminate} />}
label="Способ оплаты"
onChange={handleChangeRoot}
/>
<div style={{ marginLeft: '25px' }}>
<CheckboxGroup
value={activePayments}
direction="vertical"
onChange={handleChangeGroup}
>
<LabelControl
name="debt"
control={<Checkbox />}
label="Дебетовая карта"
/>
<LabelControl
name="credit"
control={<Checkbox />}
label="Кредитная карта"
/>
<LabelControl name="cash" control={<Checkbox />} label="Наличные" />
</CheckboxGroup>
</div>
</>
)
}
Местоположение метки относительно чекбокса#
Метка может располагаться относительно чекбокса в начале, сверху, снизу или в конце.
import * as React from 'react'
import { CheckboxGroup } from '@v-uik/checkbox-group'
import { Checkbox } from '@v-uik/checkbox'
import { LabelControl } from '@v-uik/label-control'
export const LabelPosition = (): JSX.Element => {
const [value, setValue] = React.useState<string[]>([])
const onChange = (
event: React.ChangeEvent<HTMLInputElement>,
value: string[] | undefined
) => {
setValue(value ?? [])
}
return (
<CheckboxGroup
label="Расположение"
value={value}
direction="horizontal"
onChange={onChange}
>
<LabelControl
name="start"
control={<Checkbox />}
label="В начале"
labelPlacement="start"
/>
<LabelControl
name="top"
control={<Checkbox />}
label="Сверху"
labelPlacement="top"
/>
<LabelControl
name="bottom"
control={<Checkbox />}
label="Снизу"
labelPlacement="bottom"
/>
<LabelControl
name="end"
control={<Checkbox />}
label="В конце"
labelPlacement="end"
/>
</CheckboxGroup>
)
}
Состояние disabled#
С компонентом в состоянии disabled взаимодействовать невозможно.
import * as React from 'react'
import { Checkbox } from '@v-uik/checkbox'
import { LabelControl } from '@v-uik/label-control'
export const Disabled = (): JSX.Element => {
return (
<>
<LabelControl
checked
disabled
label="Активен и Недоступен"
control={<Checkbox />}
/>
<LabelControl
disabled
label="Выключен и Недоступен"
control={<Checkbox />}
/>
<LabelControl
disabled
label="Неопределенное состояние и Недоступен"
control={<Checkbox indeterminate />}
/>
</>
)
}