diff --git a/app/panels/rrp_conf_editor/iud_form_dialog.js b/app/panels/rrp_conf_editor/iud_form_dialog.js index 6c8d3bd..3bae06d 100644 --- a/app/panels/rrp_conf_editor/iud_form_dialog.js +++ b/app/panels/rrp_conf_editor/iud_form_dialog.js @@ -7,11 +7,12 @@ //Подключение библиотек //--------------------- -import React, { useState, useContext } from "react"; //Классы React +import React, { useState, useContext, useCallback, useEffect } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Dialog, DialogTitle, IconButton, Icon, DialogContent, Typography, DialogActions, Button } from "@mui/material"; //Интерфейсные компоненты -//import { MessagingСtx } from "../../context/messaging"; +//import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений import { ApplicationСtx } from "../../context/application"; //Контекст приложения +import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { IUDFormTextField } from "./iud_form_text_field"; //Кастомные строки ввода import { STATUSES } from "./layouts"; //Статусы и стили диалогового окна @@ -21,91 +22,20 @@ import { STATUSES } from "./layouts"; //Статусы и стили диало //Стили const STYLES = { - DIALOG_ACTIONS: { justifyContent: "center" }, CLOSE_BUTTON: { position: "absolute", right: 8, top: 8, color: theme => theme.palette.grey[500] - } -}; - -//Выбор подразделения -// const selectInsDepartment = (showDictionary, callBack) => { -// showDictionary({ -// unitCode: "INS_DEPARTMENT", -// callBack: res => (res.success === true ? callBack(res.outParameters.out_CODE) : callBack(null)) -// }); -// }; - -//Выбор строки -const selectRow = (showDictionary, callBack) => { - showDictionary({ - unitCode: "RRPRow", - callBack: res => - res.success === true - ? callBack(res.outParameters.out_CODE, res.outParameters.out_RRPVERSION_CODE, res.outParameters.out_RRPVERSION) - : callBack(null) - }); - // pOnlineShowDictionary({ - // unitCode: "RRPRow", - // callBack: res => - // res.success === true - // ? setFormData(pv => ({ - // ...pv, - // rowCode: res.outParameters.out_CODE, - // rowVCode: res.outParameters.out_RRPVERSION_CODE, - // rowVRn: res.outParameters.out_RRPVERSION - // })) - // : null - // }); -}; - -//Выбор графы -const selectColumn = (showDictionary, callBack) => { - showDictionary({ - unitCode: "RRPColumn", - callBack: res => - res.success === true - ? callBack(res.outParameters.out_CODE, res.outParameters.out_RRPVERSION_CODE, res.outParameters.out_RRPVERSION) - : callBack(null) - }); - // pOnlineShowDictionary({ - // unitCode: "RRPColumn", - // callBack: res => - // res.success === true - // ? setFormData(pv => ({ - // ...pv, - // colCode: res.outParameters.out_CODE, - // colVCode: res.outParameters.out_RRPVERSION_CODE, - // colVRn: res.outParameters.out_RRPVERSION - // })) - // : null - // }); + }, + PADDING_DIALOG_BUTTONS_RIGHT: { paddingRight: "32px" } }; //--------------- //Тело компонента //--------------- -const IUDFormDialog = ({ initial, onOk, onCancel }) => { - //Свойства компонента - // const { - // formOpen, - // closeForm, - // curStatus, - // curCode, - // curName, - // curColCode, - // curRowCode, - // btnOkClick, - // codeOnChange, - // nameOnChange, - // dictColumnClick, - // dictRowClick - - // } = props; - +const IUDFormDialog = ({ initial, onClose, onReload }) => { //Собственное состояние const [formData, setFormData] = useState({ ...initial }); @@ -115,11 +45,122 @@ const IUDFormDialog = ({ initial, onOk, onCancel }) => { //Подключение к контексту приложения const { pOnlineShowDictionary } = useContext(ApplicationСtx); + //Подключение к контексту взаимодействия с сервером + const { executeStored } = useContext(BackEndСtx); + //При закрытии диалога без изменений - const handleCancel = () => (onCancel ? onCancel() : null); + const handleCancel = () => (onClose ? onClose() : null); //При закрытии диалога с изменениями - const handleOK = () => (onOk ? onOk(formData) : null); + const handleOK = () => { + if (onClose) { + changeSections(); + onClose(); + } else null; + }; + + //Отработка добавления/изсправления/удаления элемента + const handleReload = () => { + if (onReload) { + onReload(formData); + } else null; + }; + + //При изменении значения элемента + const handleDialogItemChange = (item, value) => setFormData(pv => ({ ...pv, [item]: value })); + + //Отработка изменений в разделе или показателе раздела + const changeSections = useCallback(async () => { + switch (formData.status) { + case STATUSES.CREATE: + await insertSections(); + break; + case STATUSES.EDIT: + await updateSections(); + break; + case STATUSES.DELETE: + await deleteSections(); + break; + case STATUSES.RRPCONFSCTNMRK_CREATE: + await addRRPCONFSCTNMRK(); + break; + case STATUSES.RRPCONFSCTNMRK_EDIT: + await editRRPCONFSCTNMRK(); + break; + case STATUSES.RRPCONFSCTNMRK_DELETE: + await deleteRRPCONFSCTNMRK(); + break; + } + handleReload(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [formData]); + + //Добавление раздела + const insertSections = useCallback(async () => { + const data = await executeStored({ + stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_INSERT", + args: { + NPRN: formData.prn, + SCODE: formData.code, + SNAME: formData.name + } + }); + setFormData(pv => ({ + ...pv, + rn: Number(data.NRN) + })); + }, [formData.prn, formData.code, formData.name, executeStored]); + + //Исправление раздела + const updateSections = useCallback(async () => { + await executeStored({ + stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_UPDATE", + args: { + NRN: formData.rn, + SCODE: formData.code, + SNAME: formData.name + } + }); + }, [formData.name, formData.code, formData.rn, executeStored]); + + //Удаление раздела + const deleteSections = useCallback(async () => { + await executeStored({ + stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_DELETE", + args: { + NRN: formData.rn + } + }); + }, [formData.rn, executeStored]); + + //Добавление показателя раздела + const addRRPCONFSCTNMRK = useCallback(async () => { + await executeStored({ + stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_INSERT", + args: { + NPRN: formData.prn, + SCODE: formData.code, + SNAME: formData.name, + SCOLCODE: formData.colCode, + SCOLVER: formData.colVCode, + SROWCODE: formData.rowCode, + SROWVER: formData.rowVCode + } + }); + }, [executeStored, formData.code, formData.colVCode, formData.colCode, formData.name, formData.prn, formData.rowCode, formData.rowVCode]); + + //Исправление показателя раздела + const editRRPCONFSCTNMRK = useCallback(async () => { + await executeStored({ + stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_UPDATE", + args: { NRN: formData.rn, SNAME: formData.name } + }); + }, [executeStored, formData.name, formData.rn]); + + //Удаление показателя раздела + const deleteRRPCONFSCTNMRK = useCallback(async () => { + await executeStored({ stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_DELETE", args: { NRN: formData.rn } }); + }, [executeStored, formData.rn]); //Формирование заголовка диалогового окна const formTitle = () => { @@ -130,11 +171,11 @@ const IUDFormDialog = ({ initial, onOk, onCancel }) => { return "Исправление раздела"; case STATUSES.DELETE: return "Удаление раздела"; - case STATUSES.COLUMNROW_CREATE: + case STATUSES.RRPCONFSCTNMRK_CREATE: return "Добавление показателя раздела"; - case STATUSES.COLUMNROW_EDIT: + case STATUSES.RRPCONFSCTNMRK_EDIT: return "Исправление показателя раздела"; - case STATUSES.COLUMNROW_DELETE: + case STATUSES.RRPCONFSCTNMRK_DELETE: return "Удаление показателя раздела"; } }; @@ -144,21 +185,85 @@ const IUDFormDialog = ({ initial, onOk, onCancel }) => { var btnText = ""; switch (formData.status) { case STATUSES.CREATE: - case STATUSES.COLUMNROW_CREATE: + case STATUSES.RRPCONFSCTNMRK_CREATE: btnText = "Добавить"; break; case STATUSES.EDIT: - case STATUSES.COLUMNROW_EDIT: + case STATUSES.RRPCONFSCTNMRK_EDIT: btnText = "Исправить"; break; case STATUSES.DELETE: - case STATUSES.COLUMNROW_DELETE: + case STATUSES.RRPCONFSCTNMRK_DELETE: btnText = "Удалить"; break; } - return ; + return ( + + ); }; + //Выбор строки + const selectRow = (showDictionary, callBack) => { + showDictionary({ + unitCode: "RRPRow", + callBack: res => { + if (res.success === true) { + callBack(res.outParameters.out_CODE, res.outParameters.out_RRPVERSION_CODE, res.outParameters.out_RRPVERSION); + setFormData(pv => ({ + ...pv, + rowCode: res.outParameters.out_CODE, + rowVCode: res.outParameters.out_RRPVERSION_CODE, + rowVRn: res.outParameters.out_RRPVERSION + })); + } else callBack(null); + } + }); + }; + + //Выбор графы + const selectColumn = (showDictionary, callBack) => { + showDictionary({ + unitCode: "RRPColumn", + callBack: res => { + if (res.success === true) { + callBack(res.outParameters.out_CODE, res.outParameters.out_RRPVERSION_CODE, res.outParameters.out_RRPVERSION); + setFormData(pv => ({ + ...pv, + colCode: res.outParameters.out_CODE, + colVCode: res.outParameters.out_RRPVERSION_CODE, + colVRn: res.outParameters.out_RRPVERSION + })); + } else callBack(null); + } + }); + }; + + //Получение мнемокода и наименования показателя раздела + const getSctnMrkCodeName = useCallback(async () => { + const data = await executeStored({ + stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_GET_CODE_NAME", + args: { SSCTNCODE: formData.sctnCode, SROWCODE: formData.rowCode, SCOLUMNCODE: formData.colCode } + }); + setFormData(pv => ({ + ...pv, + code: data.SCODE, + name: data.SNAME + })); + }, [executeStored, formData.colCode, formData.rowCode, formData.sctnCode]); + + //Получение наименования и мнемокода показателя раздела при заполнении необходимых полей + useEffect(() => { + formData.status == STATUSES.RRPCONFSCTNMRK_CREATE && formData.sctnName && formData.sctnCode && formData.colCode && formData.rowCode + ? getSctnMrkCodeName() + : null; + }, [formData.colCode, formData.rowCode, formData.sctnCode, formData.sctnName, formData.status, getSctnMrkCodeName]); + return ( {formTitle()} @@ -166,7 +271,7 @@ const IUDFormDialog = ({ initial, onOk, onCancel }) => { close - {formData.status == STATUSES.DELETE || formData.status == STATUSES.COLUMNROW_DELETE ? ( + {formData.status == STATUSES.DELETE || formData.status == STATUSES.RRPCONFSCTNMRK_DELETE ? ( formData.status == STATUSES.DELETE ? ( Вы хотите удалить раздел {formData.name}? ) : ( @@ -174,24 +279,34 @@ const IUDFormDialog = ({ initial, onOk, onCancel }) => { ) ) : (
- {formData.status != STATUSES.COLUMNROW_EDIT ? ( - + {formData.status != STATUSES.RRPCONFSCTNMRK_EDIT ? ( + ) : null} - - {formData.status == STATUSES.COLUMNROW_CREATE ? ( + + {formData.status == STATUSES.RRPCONFSCTNMRK_CREATE ? (
selectRow(pOnlineShowDictionary, callBack)} /> selectColumn(pOnlineShowDictionary, callBack)} />
@@ -210,8 +325,8 @@ const IUDFormDialog = ({ initial, onOk, onCancel }) => { //Контроль свойств - Диалог IUDFormDialog.propTypes = { initial: PropTypes.object.isRequired, - onOk: PropTypes.func, - onCancel: PropTypes.func + onClose: PropTypes.func, + onReload: PropTypes.func }; //-------------------- diff --git a/app/panels/rrp_conf_editor/iud_form_text_field.js b/app/panels/rrp_conf_editor/iud_form_text_field.js index 2dda6f8..ae04ec9 100644 --- a/app/panels/rrp_conf_editor/iud_form_text_field.js +++ b/app/panels/rrp_conf_editor/iud_form_text_field.js @@ -7,10 +7,18 @@ //Подключение библиотек //--------------------- -import React, { useState, useCallback, useEffect } from "react"; //Классы React +import React, { useState, useEffect } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Box, FormControl, InputLabel, Input, InputAdornment, IconButton, Icon } from "@mui/material"; //Интерфейсные компоненты -import { STYLES } from "./layouts"; //Стили диалогового окна + +//--------- +//Константы +//--------- + +//Стили +export const STYLES = { + DIALOG_WINDOW_WIDTH: { width: 400 } +}; //--------------- //Тело компонента @@ -20,16 +28,6 @@ const IUDFormTextField = ({ elementCode, elementValue, labelText, onChange, dict //Значение элемента const [value, setValue] = useState(elementValue); - //Формирование идентификатора элемента - // const generateId = useCallback(async () => { - // setElementId(`${elementCode}-input`); - // }, [elementCode]); - - //При рендере поля ввода - // useEffect(() => { - // generateId(); - // }, [generateId]); - //При получении нового значения из вне useEffect(() => { setValue(elementValue); @@ -47,12 +45,12 @@ const IUDFormTextField = ({ elementCode, elementValue, labelText, onChange, dict return ( - + {labelText} @@ -62,9 +60,9 @@ const IUDFormTextField = ({ elementCode, elementValue, labelText, onChange, dict ) : null } - aria-describedby={`${elementCode}-helper-text`} - label={labelText} onChange={handleChange} + multiline + maxRows={4} /> diff --git a/app/panels/rrp_conf_editor/layouts.js b/app/panels/rrp_conf_editor/layouts.js index 928aae4..4b25d30 100644 --- a/app/panels/rrp_conf_editor/layouts.js +++ b/app/panels/rrp_conf_editor/layouts.js @@ -8,19 +8,20 @@ //--------------------- import React from "react"; //Классы React -import { Stack, IconButton, Icon, Link } from "@mui/material"; //Интерфейсные компоненты +import { Box, IconButton, Icon, Link } from "@mui/material"; //Интерфейсные компоненты //--------- //Константы //--------- +//Стили export const STYLES = { - DIALOG_WINDOW_WIDTH: { width: 400 }, - PADDING_DIALOG_BUTTONS_RIGHT: { paddingRight: "32px" } + BOX_ROW: { display: "flex", justifyContent: "center", alignItems: "center" }, + LINK_STYLE: { component: "button", width: "-webkit-fill-available" } }; //Статусы диалогового окна -export const STATUSES = { CREATE: 0, EDIT: 1, DELETE: 2, COLUMNROW_CREATE: 3, COLUMNROW_EDIT: 4, COLUMNROW_DELETE: 5 }; +export const STATUSES = { CREATE: 0, EDIT: 1, DELETE: 2, RRPCONFSCTNMRK_CREATE: 3, RRPCONFSCTNMRK_EDIT: 4, RRPCONFSCTNMRK_DELETE: 5 }; //----------- //Тело модуля @@ -29,13 +30,11 @@ export const STATUSES = { CREATE: 0, EDIT: 1, DELETE: 2, COLUMNROW_CREATE: 3, CO //Генерация представления ячейки c данными export const dataCellRender = ({ row, columnDef }, showRrpConfSctnMrk, editCR, deleteCR) => { let data = row[columnDef.name]; - let cellStyle = { display: "flex" }; columnDef.name != "SROW_NAME" && data != undefined && columnDef.visible == true ? (data = ( - + { showRrpConfSctnMrk(row["NRN_" + columnDef.name.substring(5)]); }} @@ -48,7 +47,7 @@ export const dataCellRender = ({ row, columnDef }, showRrpConfSctnMrk, editCR, d deleteCR(row["NRN_" + columnDef.name.substring(5)], row[columnDef.name])}> delete - + )) : null; return { data }; diff --git a/app/panels/rrp_conf_editor/rrp_conf_editor.js b/app/panels/rrp_conf_editor/rrp_conf_editor.js index dc796ac..b14dc38 100644 --- a/app/panels/rrp_conf_editor/rrp_conf_editor.js +++ b/app/panels/rrp_conf_editor/rrp_conf_editor.js @@ -13,10 +13,23 @@ import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid" import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { NavigationCtx } from "../../context/navigation"; //Контекст навигации +import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений +import { TEXTS } from "../../../app.text"; //Текстовые константы import { SectionTabPanel } from "./section_tab_panel"; //Кастомный Tab import { ApplicationСtx } from "../../context/application"; //Контекст приложения import { STATUSES, dataCellRender } from "./layouts"; //Дополнительная разметка и вёрстка клиентских элементов import { IUDFormDialog } from "./iud_form_dialog"; //Кастомное диалоговое окно +import { STYLES as COMMON_STYLES } from "./layouts"; + +//--------- +//Константы +//--------- + +//Стили +export const STYLES = { + TABS_BOTTOM_LINE: { borderBottom: 1, borderColor: "divider" }, + TABS_PADDING: { paddingTop: 1, paddingBottom: 1 } +}; //----------- //Тело модуля @@ -55,7 +68,6 @@ const RrpConfEditor = () => { //Состояние диалогового окна const [formData, setFormData] = useState({ - filled: false, rn: "", prn: "", sctnName: "", @@ -78,17 +90,24 @@ const RrpConfEditor = () => { setForm(true); }; - //Закрытие диалогового окна - const closeForm = () => { - setForm(false); - }; - //Очистка диалогового окна const clearFormData = () => { setFormData({ rn: "", + prn: "", + sctnName: "", + sctnCode: "", + status: "", code: "", - name: "" + name: "", + colName: "", + colCode: "", + colVCode: "", + colVRn: 0, + rowName: "", + rowCode: "", + rowVCode: "", + rowVRn: 0 }); }; @@ -96,11 +115,14 @@ const RrpConfEditor = () => { const { executeStored } = useContext(BackEndСtx); //Подключение к контексту приложения - const { pOnlineShowDictionary, pOnlineShowUnit } = useContext(ApplicationСtx); + const { pOnlineShowUnit } = useContext(ApplicationСtx); //Подключение к контексту навигации const { getNavigationSearch } = useContext(NavigationCtx); + //Подключение к контексту сообщений + const { showMsgErr } = useContext(MessagingСtx); + //Переключение раздела const handleChange = (event, newValue) => { setTabValue(newValue); @@ -125,38 +147,23 @@ const RrpConfEditor = () => { }; //Отработка нажатия на кнопку добавления показателя раздела - const addColumnRowClick = (prn, sctnCode, sctnName) => { - setFormData({ status: STATUSES.COLUMNROW_CREATE, prn: prn, sctnCode: sctnCode, sctnName: sctnName }); + const addRRPCONFSCTNMRKClick = (prn, sctnCode, sctnName) => { + setFormData({ status: STATUSES.RRPCONFSCTNMRK_CREATE, prn: prn, sctnCode: sctnCode, sctnName: sctnName }); openForm(); }; //Отработка нажатия на кнопку исправления показателя раздела - const editColumnRowClick = (rn, name) => { - setFormData({ status: STATUSES.COLUMNROW_EDIT, rn: rn, name: name }); + const editRRPCONFSCTNMRKClick = (rn, name) => { + setFormData({ status: STATUSES.RRPCONFSCTNMRK_EDIT, rn: rn, name: name }); openForm(); }; //Отработка нажатия на кнопку удаления показателя раздела - const deleteColumnRowClick = (rn, name) => { - setFormData({ status: STATUSES.COLUMNROW_DELETE, rn: rn, name: name }); + const deleteRRPCONFSCTNMRKClick = (rn, name) => { + setFormData({ status: STATUSES.RRPCONFSCTNMRK_DELETE, rn: rn, name: name }); openForm(); }; - //Нажатие на кнопку подтверждения создания/исправления/удаления на форме - const formBtnOkClick = () => { - let formStateProps = {}; - if (formData.status === (STATUSES.CREATE || STATUSES.EDIT || STATUSES.COLUMNROW_CREATE)) - formStateProps = { ...formStateProps, code: document.querySelector("#code-outlined").value }; - if (formData.status === (STATUSES.CREATE || STATUSES.EDIT || STATUSES.COLUMNROW_CREATE || STATUSES.COLUMNROW_EDIT)) - formStateProps = { ...formStateProps, name: document.querySelector("#name-outlined").value }; - setFormData(pv => ({ - ...pv, - ...formStateProps, - filled: true - })); - closeForm(); - }; - //Формирование разделов const a11yProps = index => { return { @@ -165,120 +172,6 @@ const RrpConfEditor = () => { }; }; - //Отработка изменений в разделе или показателе раздела - const changeSections = useCallback(async () => { - if (formData.filled) { - switch (formData.status) { - case STATUSES.CREATE: - insertSections(); - clearFormData(); - break; - case STATUSES.EDIT: - updateSections(); - clearFormData(); - break; - case STATUSES.DELETE: - deleteSections(); - clearFormData(); - break; - case STATUSES.COLUMNROW_CREATE: - addColumnRow(); - clearFormData(); - break; - case STATUSES.COLUMNROW_EDIT: - editColumnRow(); - clearFormData(); - break; - case STATUSES.COLUMNROW_DELETE: - deleteColumnRow(); - clearFormData(); - break; - } - setRrpDoc(pv => ({ ...pv, reload: true })); - } - //eslint-disable-next-line react-hooks/exhaustive-deps - }, [formData]); - - //Добавление раздела - const insertSections = useCallback(async () => { - const data = await executeStored({ - stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_INSERT", - args: { - NPRN: formData.prn, - SCODE: formData.code, - SNAME: formData.name - } - }); - setFormData(pv => ({ - ...pv, - rn: Number(data.NRN) - })); - }, [formData.prn, formData.code, formData.name, executeStored]); - - //Исправление раздела - const updateSections = useCallback(async () => { - await executeStored({ - stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_UPDATE", - args: { - NRN: formData.rn, - SCODE: formData.code, - SNAME: formData.name - } - }); - }, [formData.name, formData.code, formData.rn, executeStored]); - - //Удаление раздела - const deleteSections = useCallback(async () => { - await executeStored({ - stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_DELETE", - args: { - NRN: formData.rn - } - }); - }, [formData.rn, executeStored]); - - //Добавление показателя раздела - const addColumnRow = useCallback(async () => { - await executeStored({ - stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_INSERT", - args: { - NPRN: formData.prn, - SCODE: formData.code, - SNAME: formData.name, - SCOLCODE: formData.colCode, - SCOLVER: formData.colVCode, - SROWCODE: formData.rowCode, - SROWVER: formData.rowVCode - } - }); - }, [executeStored, formData.code, formData.colVCode, formData.colCode, formData.name, formData.prn, formData.rowCode, formData.rowVCode]); - - //Исправление показателя раздела - const editColumnRow = useCallback(async () => { - await executeStored({ - stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_UPDATE", - args: { NRN: formData.rn, SNAME: formData.name } - }); - }, [executeStored, formData.name, formData.rn]); - - //Удаление показателя раздела - const deleteColumnRow = useCallback(async () => { - await executeStored({ stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_DELETE", args: { NRN: formData.rn } }); - }, [executeStored, formData.rn]); - - //Получение мнемокода и наименования показателя раздела - const getSctnMrkCodeName = useCallback(async () => { - const data = await executeStored({ - stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_GET_CODE_NAME", - args: { SSCTNCODE: formData.sctnCode, SROWCODE: formData.rowCode, SCOLUMNCODE: formData.colCode } - }); - setFormData(pv => ({ - ...pv, - code: data.SCODE, - name: data.SNAME - })); - }, [executeStored, formData.colCode, formData.rowCode, formData.sctnCode]); - //Загрузка данных разделов регламентированного отчёта const loadData = useCallback(async () => { if (rrpDoc.reload) { @@ -296,7 +189,7 @@ const RrpConfEditor = () => { //Копирование массива уже загруженных разделов let cloneDGs = dataGrids.slice(); //Массив из нескольких разделов и из одного - const sections = data.SECTIONS.length ? data.SECTIONS : [data.SECTIONS]; + const sections = data.SECTIONS ? (data.SECTIONS.length ? data.SECTIONS : [data.SECTIONS]) : []; //Заполнение очередного раздела по шаблону sections.map(s => { let dg = {}; @@ -343,7 +236,9 @@ const RrpConfEditor = () => { //Устаревший раздел удаляем из массива данных dataGrids.splice(curIndex, 1); //Фокус на предшествующий раздел - tabFocus = curIndex - 1; + if (curIndex > 0) tabFocus = curIndex - 1; + //Иначе фокус на следующий, если был удалён первый раздел + else tabFocus = curIndex; }); setRrpDoc(pv => ({ ...pv, @@ -374,74 +269,74 @@ const RrpConfEditor = () => { loadData(); }, [rrpDoc.reload, dataGrid.reload, loadData]); - //Обновление при изменении разделов - useEffect(() => { - changeSections(); - }, [changeSections]); - - //Получение наименования и мнемокода показателя раздела при заполнении необходимых полей - useEffect(() => { - formData.status == STATUSES.COLUMNROW_CREATE && formData.sctnName && formData.sctnCode && formData.colCode && formData.rowCode - ? getSctnMrkCodeName() - : null; - }, [formData.colCode, formData.rowCode, formData.sctnCode, formData.sctnName, formData.status, getSctnMrkCodeName]); - - //При изменении фильтра в диалоге - const handleFilterOk = filter => { - setFormData(filter); - setForm(false); + const handleDialogReload = data => { + console.log(JSON.stringify(data)); + setRrpDoc(pv => ({ ...pv, reload: true })); }; - //При закрытии диалога фильтра - const handleFilterCancel = () => setForm(false); + //При закрытии диалога + const handleDialogClose = () => { + setForm(false); + clearFormData(); + }; //Генерация содержимого return ( - {formOpen ? : null} + {formOpen ? : null} {rrpDoc.docLoaded ? ( - - + + {rrpDoc.sections.map((s, i) => { return ( + {s.name} - editSectionClick(s.rn, s.code, s.name)}>edit - deleteSectionClick(s.rn, s.code, s.name)}>delete - + editSectionClick(s.rn, s.code, s.name)}> + edit + + deleteSectionClick(s.rn, s.code, s.name)}> + delete + + } wrapped /> ); })} - - add - + + + add + + {rrpDoc.sections.map((s, i) => { return ( - + {s.dataLoaded ? ( - - dataCellRender({ ...prms }, showRrpConfSctnMrk, editColumnRowClick, deleteColumnRowClick) - } - /> + + + dataCellRender({ ...prms }, showRrpConfSctnMrk, editRRPCONFSCTNMRKClick, deleteRRPCONFSCTNMRKClick) + } + /> + ) : null} ); diff --git a/app/panels/rrp_conf_editor/section_tab_panel.js b/app/panels/rrp_conf_editor/section_tab_panel.js index afb2332..4afb35d 100644 --- a/app/panels/rrp_conf_editor/section_tab_panel.js +++ b/app/panels/rrp_conf_editor/section_tab_panel.js @@ -19,10 +19,10 @@ const SectionTabPanel = props => { const { children, value, index, ...other } = props; return ( -