Ссылка на компонент `ref` пробрасывается в HTML Input.
npm install @eisgs/inputСсылка на компонент ref пробрасывается в HTML Input.
onChange и value позволяют управлять содержимым инпута.
label и placeholder позволяют указать дополнительную информацию для пользователя.
``jsx
import { Button } from '@eisgs/button';
const [value, setValue] = React.useState('');
const inputRef = React.useRef();
const handleInputFocus = () => inputRef.current.focus();
$3
Для применения плавающего заголовка необходимо передать флаг
floatingLabel.`jsx
const [value, setValue] = React.useState('');
floatingLabel
label="Описание"
value={value}
onChange={setValue}
/>
`$3
maxLength позволяет ограничить количество символов при вводе.validate позволяет проверить значение в поле ввода.error - строка с текстом ошибки.`jsx
const [valueInputOne, setValueInputOne] = React.useState('');
const [errorInputOne, setErrorInputOne] = React.useState('');const validateFunction = (val) => {
if (val.length && val !== 'яблоко') {
setErrorInputOne('значение должно быть яблоко');
return false;
} else {
setErrorInputOne('');
return true;
}
};
label="Инпут с функцией валидации"
maxLength={6}
validate={validateFunction}
value={valueInputOne}
onChange={setValueInputOne}
error={errorInputOne}
/> label="Значение инпута невалидно"
error="Произошла ошибка"
/>
label="Значение инпута невалидно"
warning="Произошла ошибка"
/>
`$3
mask позволяет задать маску ввода.maskChar позволяет закрывать незаполненные значения маски определенным символом.formatChars позволяет определять символы форматирования маски.unmask позволяет вернуть значение инпута без маски.`jsxconst [firstInputValue, setFirstInputValue] = React.useState('');
const [secondInputValue, setSecondInputValue] = React.useState('1');
const [thirdInputValue, setThirdInputValue] = React.useState('');
const [fourthInputValue, setFourthInputValue] = React.useState('');
const firstMask = 'a/999/aa';
const secondMask = '+7(999)999-99-99';
const thirdMask = '||:||';
const forthMask = 'ХХ-ХХ-99'
const formatChars = { '|': '[0-9]' };
mask={firstMask}
value={firstInputValue}
onChange={setFirstInputValue}
placeholder='A/777/AA'
label='Обычная маска'
/>
mask={secondMask}
maskChar='*'
value={secondInputValue}
onChange={setSecondInputValue}
placeholder='+7(999)999-99-99'
label='Маска с использованием maskChar'
/>
mask={thirdMask}
value={thirdInputValue}
onChange={setThirdInputValue}
placeholder='12:12'
label='Маска с использованием formatChars'
formatChars={formatChars}
/>
mask={forthMask}
value={fourthInputValue}
onChange={setFourthInputValue}
placeholder='XX-XX-00'
label='Маска с использованием unmask'
unmask
/>
`$3
disabled блокирует ввод значений.Для того чтобы скрыть
placeholder при disabled и отсутствии value,
необходимо передать флаг hidePlaceholderWhenDisabled.`jsx
const rowProps = {
className:"w600",
style: { display: 'flex', alignItems: 'flex-end', gap: 40 }
};<>
disabled
label="Disabled Empty"
placeholder="Подсказка"
value=""
/>
disabled
floatingLabel
label="Disabled Empty"
placeholder="Подсказка"
value=""
/>
disabled
hidePlaceholderWhenDisabled
label="Disabled Empty (hidden placeholder)"
placeholder="Подсказка"
value=""
/>
disabled
floatingLabel
hidePlaceholderWhenDisabled
label="Disabled Empty (hidden placeholder)"
placeholder="Подсказка"
value=""
/>
disabled
label="Disabled Filled"
placeholder="Подсказка"
value="Текст"
/>
disabled
floatingLabel
label="Disabled Filled"
placeholder="Подсказка"
value="Текст"
/>
>
`$3
Компонент принимает все пропсы от
react-number-format (см. https://github.com/s-yadav/react-number-format/tree/v4.5.0#props).Для ввода доступны только цифры.
`jsx
import { NumericInput } from '@eisgs/input';const [firstInputValue, setFirstInputValue] = React.useState('');
const [secondInputValue, setSecondInputValue] = React.useState('');
label="Цифровой инпут"
placeholder="Цифровой инпут"
onChange={setFirstInputValue}
value={firstInputValue}
/> floatingLabel
label="Цифровой инпут"
onChange={setSecondInputValue}
value={secondInputValue}
/>
`$3
Можно передать в validate функцию, объект RegExp или регулярное выражение в виде строки.
`jsx
import { NumericInput } from '@eisgs/input';const [value, setValue] = React.useState();
const [valueInputOne, setValueInputOne] = React.useState('');
const [errorInputOne, setErrorInputOne] = React.useState('');
const validateFunction = (val) => {
if (val && val < 100) {
setErrorInputOne('значение должно быть меньше 100');
return false;
} else {
setErrorInputOne('');
return true;
}
};
<>
placeholder="Цифровой инпут"
label="Инпут с функцией валидации"
validate={validateFunction}
onChange={setValue}
value={value}
error={errorInputOne}
/>
placeholder="Цифровой инпут"
label="Значение инпута невалидно"
error="Произошла ошибка"
/>
placeholder="Цифровой инпут"
label="Значение инпута невалидно"
warning="Произошла ошибка"
/>
>
`$3
В параметре
decimalScale можно ограничить количество знаков после запятой.`jsx
import { NumericInput } from '@eisgs/input';const [value, setValue] = React.useState();
placeholder="Количество знаков после запятой - 2"
onChange={setValue}
value={value}
decimalScale="2"
/>
`$3
Разделитель групп разрядов задается в параметре
thousandSeparator.`jsx
import { NumericInput } from '@eisgs/input';const [value, setValue] = React.useState();
onChange={setValue}
value={value}
thousandSeparator=" "
/>
`Кастомный разделитель для дробной части числа задается в параметре
decimalSeparator (по умолчанию точка).`jsx
import { NumericInput } from '@eisgs/input';const [value, setValue] = React.useState();
onChange={setValue}
value={value}
decimalSeparator=","
/>
`$3
`jsx
import { SearchInput } from '@eisgs/input';const [reqData, setReqData] = React.useState({
value: '',
loading: false,
});
const search = () => {
setReqData((data) => ({ ...data, loading: true }));
setTimeout(() => setReqData((data) => ({ ...data, loading: false })), 3000);
};
const handleSearch = (value) => setReqData({ value });
const handleKeyDown = (event) => {
//Отправка запроса по нажатию на Enter
if (event.keyCode === 13) {
search();
}
};
withClear
loading={reqData.loading}
value={reqData.value}
onChange={handleSearch}
placeholder="Найти"
onKeyDown={handleKeyDown}
/> withClear
floatingLabel
loading={reqData.loading}
value={reqData.value}
onChange={handleSearch}
label="Найти"
onKeyDown={handleKeyDown}
/>
`$3
При передаче
hint отобразится подсказка`jsx
`$3
`jsximport { Typography } from "@eisgs/typography";
const viewList = ['desktop', 'mobile'];
const stateList = [
{placeholder: 'Подсказка'},
{label: 'Подсказка', placeholder: 'Подсказка'},
{label: 'Подсказка', placeholder: 'Подсказка', floatingLabel: true}
];
const extraList = [
{},
{value: 'Текст'},
{value: 'Текст', error: 'Текст ошибки'},
{disabled: true},
{disabled: true, value: 'Текст'}
];
<>
{viewList.map(item =>
margin-bottom: 40px}>{item}
{stateList.map((props, index) => (
{extraList.map((extraProps, extraIndex) => (
{...props}
{...extraProps}
view={item}
key={${index}-${extraIndex}}
styles={max-width: 168px}
/>
))}
))}
)}
>
`$3
Параметр
suffix позволяет добавить дополнительный контент справа`jsx
import { NumericInput } from '@eisgs/input';
import { createSvgIcon } from "@eisgs/icon";const RoubleIcon = createSvgIcon(
,
'RoubleIcon'
);
const metriсSuffix = (value) => м{value && {value}};
}/>
``