diff --git a/app/components/p8p_dialog.js b/app/components/p8p_dialog.js index f3452bc..1bc2a4a 100644 --- a/app/components/p8p_dialog.js +++ b/app/components/p8p_dialog.js @@ -12,6 +12,7 @@ import PropTypes from "prop-types"; //Контроль свойств компо import { Dialog, DialogTitle, DialogContent, DialogActions, Button } from "@mui/material"; //Интерфейсные компоненты import { BUTTONS } from "../../app.text"; //Общие текстовые ресурсы import { P8P_INPUT, P8PInput } from "./p8p_input"; //Поле ввода +import { APP_STYLES } from "../../app.styles"; //Типовые стили //--------- //Константы @@ -26,6 +27,12 @@ const P8P_DIALOG_WIDTH = { XL: "xl" }; +//Стили +const STYLES = { + SCROLL: display => + display === true ? { overflow: "auto", ...APP_STYLES.SCROLL } : { overflow: "hidden", display: "flex", flexDirection: "column" } +}; + //----------------------- //Вспомогательные функции //----------------------- @@ -39,7 +46,19 @@ const buildFormValues = inputsState => //----------- //Диалог -const P8PDialog = ({ title, width, fullWidth, inputs, children, onOk, onCancel, onClose, onInputChange }) => { +const P8PDialog = ({ + title, + width, + fullWidth, + inputs, + children, + okDisabled = false, + scrollContent = true, + onOk, + onCancel, + onClose, + onInputChange +}) => { //Состояние элементов ввода диалога const [inputsState, setInputsState] = useState([]); @@ -75,7 +94,7 @@ const P8PDialog = ({ title, width, fullWidth, inputs, children, onOk, onCancel, return ( {title} - + {inputsState.map((input, i) => ( ))} @@ -83,7 +102,11 @@ const P8PDialog = ({ title, width, fullWidth, inputs, children, onOk, onCancel, {children} - {onOk && } + {onOk && ( + + )} {onCancel && } {onClose && } @@ -98,6 +121,8 @@ P8PDialog.propTypes = { fullWidth: PropTypes.bool, inputs: PropTypes.arrayOf(PropTypes.shape(P8P_INPUT)), children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]), + okDisabled: PropTypes.bool, + scrollContent: PropTypes.bool, onOk: PropTypes.func, onCancel: PropTypes.func, onClose: PropTypes.func, diff --git a/app/panels/clnt_task_board/components/task_form.js b/app/panels/clnt_task_board/components/task_form.js index 1cfaf21..cd2331d 100644 --- a/app/panels/clnt_task_board/components/task_form.js +++ b/app/panels/clnt_task_board/components/task_form.js @@ -9,10 +9,11 @@ import React, { useState, useCallback } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента -import { Box, Typography, Tabs, Tab, InputAdornment, IconButton, Icon } from "@mui/material"; //Интерфейсные компоненты +import { Box, Tabs, Tab, InputAdornment, IconButton, Icon } from "@mui/material"; //Интерфейсные компоненты import { TaskFormTabInfo } from "./task_form_tab_info"; //Вкладка основной информации import { TaskFormTabExecutor } from "./task_form_tab_executor"; //Вкладка информации об исполнителе import { TaskFormTabProps } from "./task_form_tab_props"; //Вкладка информации со свойствами +import { COMMON_STYLES } from "../styles"; //Общие стили //--------- //Константы @@ -20,7 +21,8 @@ import { TaskFormTabProps } from "./task_form_tab_props"; //Вкладка ин //Стили const STYLES = { - CONTAINER: { margin: "5px 0px", textAlign: "center" } + CONTAINER: { height: "625px", textAlign: "center", overflow: "hidden", display: "flex", flexDirection: "column" }, + BOX_TAB: { height: "575px", overflowY: "auto", ...COMMON_STYLES.SCROLL } }; //------------------------------------ @@ -40,7 +42,14 @@ function CustomTabPanel(props) { const { children, value, index, ...other } = props; //Генерация содержимого return ( -