/* Парус 8 - Панели мониторинга Компонент: Поле ввода */ //--------------------- //Подключение библиотек //--------------------- import React, { useState, useEffect } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Box, Icon, Input, InputAdornment, FormControl, Select, InputLabel, MenuItem, IconButton, Autocomplete, TextField } from "@mui/material"; //Интерфейсные компоненты //--------- //Константы //--------- //Формат свойств поля ввода const P8P_INPUT = { name: PropTypes.string.isRequired, value: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.instanceOf(Date)]), label: PropTypes.string.isRequired, onChange: PropTypes.func, dictionary: PropTypes.func, list: PropTypes.array, type: PropTypes.string, freeSolo: PropTypes.bool, disabled: PropTypes.bool, formValues: PropTypes.object }; //----------- //Тело модуля //----------- //Поле ввода const P8PInput = ({ name, value, label, onChange, dictionary, list, type, freeSolo = false, disabled = false, formValues, ...other }) => { //Значение элемента const [currentValue, setCurrentValue] = useState(value); //При получении нового значения из вне useEffect(() => { setCurrentValue(value); }, [value]); //Выбор значения из словаря const handleDictionaryClick = () => dictionary && dictionary(formValues, res => (res ? res.map(i => handleChangeByName(i.name, i.value)) : null)); //Изменение значения элемента (по событию) const handleChange = e => { setCurrentValue(e.target.value); if (onChange) onChange(e.target.name, e.target.value); }; //Изменение значения элемента (по имени и значению) const handleChangeByName = (targetName, value) => { if (targetName === name) setCurrentValue(value); if (onChange) onChange(targetName, value); }; //Генерация содержимого return ( {list ? ( freeSolo ? ( handleChangeByName(name, newValue)} onInputChange={(event, newInputValue) => handleChangeByName(name, newInputValue)} options={list} renderInput={params => } /> ) : ( <> {label} ) ) : ( <> {label} list ) : null } {...(type ? { type } : {})} onChange={handleChange} disabled={disabled} /> )} ); }; //Контроль свойств - Поле ввода P8PInput.propTypes = P8P_INPUT; //---------------- //Интерфейс модуля //---------------- export { P8P_INPUT, P8PInput };