Compare commits

..

No commits in common. "9f99c99643905d8251a3e71de618ba5f697a1aff" and "1e580f806d3495a7626fbd30fa2975bd6a04b09f" have entirely different histories.

7 changed files with 10 additions and 94 deletions

View File

@ -1100,8 +1100,7 @@ const Mui = ({ title }) => {
`type` - обязательный, строка, тип отображаемого сообщения, `information|warning|error` (см. константу `MSG_TYPE` в "app/context/messaging_reducer" и константу `P8P_APP_MESSAGE_VARIANT` в "app/components/p8p_app_message")\ `type` - обязательный, строка, тип отображаемого сообщения, `information|warning|error` (см. константу `MSG_TYPE` в "app/context/messaging_reducer" и константу `P8P_APP_MESSAGE_VARIANT` в "app/components/p8p_app_message")\
`text` - обязательный, строка, текст отображаемого сообщения\ `text` - обязательный, строка, текст отображаемого сообщения\
`msgOnOk` - необязательный, функция, будет вызвана при нажатии на "ОК"/"ЗАКРЫТЬ" в сообщении `msgOnOk` - необязательный, функция, будет вызвана при нажатии на "ОК"/"ЗАКРЫТЬ" в сообщении
`msgOnCancel` - необязательный, функция, будет вызвана при нажатии на "ОТМЕНА" в сообщении (только для сообщений типа `warning`)\ `msgOnCancel` - необязательный, функция, будет вызвана при нажатии на "ОТМЕНА" в сообщении (только для сообщений типа `warning`)
`fullErrorText` - необязательный, строка, полный текст ошибки, используется только при `type="error"`. Если параметр указан, то в окно ошибки выводится кнопка "Подробнее", по нажатию на которую будет отображаться текст, указанный в данном параметре
**Результат:** функция не возвращает значимого результата **Результат:** функция не возвращает значимого результата
@ -1109,11 +1108,7 @@ const Mui = ({ title }) => {
Декоратор для `showMsg`, отображает модальное окно сообщения типа "Ошибка" (`type="error"`). Декоратор для `showMsg`, отображает модальное окно сообщения типа "Ошибка" (`type="error"`).
**Входные параметры:** **Входные параметры:** аналогично `showMsg`
`text` - обязательный, строка, текст отображаемого сообщения\
`msgOnOk` - необязательный, функция, будет вызвана при нажатии на "ЗАКРЫТЬ" в сообщении
`fullErrorText` - необязательный, строка, полный текст ошибки. Если параметр указан, то в окно ошибки выводится кнопка "Подробнее", по нажатию на которую будет отображаться текст, указанный в данном параметре
**Результат:** аналогично `showMsg` **Результат:** аналогично `showMsg`

View File

@ -29,8 +29,6 @@ export const BUTTONS = {
OK: "ОК", //Ок OK: "ОК", //Ок
CANCEL: "Отмена", //Отмена CANCEL: "Отмена", //Отмена
CLOSE: "Закрыть", //Сокрытие CLOSE: "Закрыть", //Сокрытие
DETAIL: "Подробнее", //Отображение подробного текста
HIDE: "Скрыть", //Скрытие информации
CLEAR: "Очистить", //Очистка CLEAR: "Очистить", //Очистка
ORDER_ASC: "По возрастанию", //Сортировка по возрастанию ORDER_ASC: "По возрастанию", //Сортировка по возрастанию
ORDER_DESC: "По убыванию", //Сортировка по убыванию ORDER_DESC: "По убыванию", //Сортировка по убыванию

View File

@ -7,7 +7,7 @@
//Подключение библиотек //Подключение библиотек
//--------------------- //---------------------
import React, { useState } from "react"; //Классы React import React from "react"; //Классы React
import PropTypes from "prop-types"; //Контроль свойств компонента import PropTypes from "prop-types"; //Контроль свойств компонента
import Dialog from "@mui/material/Dialog"; //базовый класс диалога Material UI import Dialog from "@mui/material/Dialog"; //базовый класс диалога Material UI
import DialogTitle from "@mui/material/DialogTitle"; //Заголовок диалога import DialogTitle from "@mui/material/DialogTitle"; //Заголовок диалога
@ -66,25 +66,7 @@ const STYLES = {
//----------- //-----------
//Сообщение //Сообщение
const P8PAppMessage = ({ const P8PAppMessage = ({ variant, title, titleText, cancelBtn, onCancel, cancelBtnCaption, okBtn, onOk, okBtnCaption, open, text }) => {
variant,
title,
titleText,
cancelBtn,
onCancel,
cancelBtnCaption,
okBtn,
onOk,
okBtnCaption,
open,
text,
fullErrorText,
showErrMoreCaption,
hideErrMoreCaption
}) => {
//Состояние подробной информации об ошибке
const [showFullErrorText, setShowFullErrorText] = useState(false);
//Подбор стиля и ресурсов //Подбор стиля и ресурсов
let style = STYLES.INFO; let style = STYLES.INFO;
switch (variant) { switch (variant) {
@ -125,21 +107,11 @@ const P8PAppMessage = ({
</Button> </Button>
); );
//Кнопка Подробнее
let fullErrorTextBtn;
if (fullErrorText && showErrMoreCaption && hideErrMoreCaption && variant === P8P_APP_MESSAGE_VARIANT.ERR)
fullErrorTextBtn = (
<Button onClick={() => setShowFullErrorText(!showFullErrorText)} color="warning" autoFocus>
{!showFullErrorText ? showErrMoreCaption : hideErrMoreCaption}
</Button>
);
//Все действия //Все действия
let actionsPart; let actionsPart;
if (cancelBtnPart || okBtnPart) if (cancelBtnPart || okBtnPart)
actionsPart = ( actionsPart = (
<DialogActions> <DialogActions>
{fullErrorTextBtn}
{okBtnPart} {okBtnPart}
{cancelBtnPart} {cancelBtnPart}
</DialogActions> </DialogActions>
@ -156,7 +128,7 @@ const P8PAppMessage = ({
{titlePart} {titlePart}
<DialogContent> <DialogContent>
<DialogContentText id="message-dialog-description" style={style.bodyText}> <DialogContentText id="message-dialog-description" style={style.bodyText}>
{!showFullErrorText ? text : fullErrorText} {text}
</DialogContentText> </DialogContentText>
</DialogContent> </DialogContent>
{actionsPart} {actionsPart}
@ -176,10 +148,7 @@ P8PAppMessage.propTypes = {
onOk: PropTypes.func, onOk: PropTypes.func,
okBtnCaption: PropTypes.string, okBtnCaption: PropTypes.string,
open: PropTypes.bool, open: PropTypes.bool,
text: PropTypes.string, text: PropTypes.string
fullErrorText: PropTypes.string,
showErrMoreCaption: PropTypes.string,
hideErrMoreCaption: PropTypes.string
}; };
//Встроенное сообщение //Встроенное сообщение

View File

@ -10,7 +10,6 @@
import React, { createContext, useContext, useCallback } from "react"; //ReactJS import React, { createContext, useContext, useCallback } from "react"; //ReactJS
import PropTypes from "prop-types"; //Контроль свойств компонента import PropTypes from "prop-types"; //Контроль свойств компонента
import { MessagingСtx } from "./messaging"; //Контекст сообщений import { MessagingСtx } from "./messaging"; //Контекст сообщений
import { formatErrorMessage } from "../core/utils"; //Вспомогательные функции
//--------- //---------
//Константы //Константы
@ -81,12 +80,7 @@ export const BackEndContext = ({ client, children }) => {
if (fullResponse === true || isRespErr(result)) return result; if (fullResponse === true || isRespErr(result)) return result;
else return result.XPAYLOAD; else return result.XPAYLOAD;
} catch (e) { } catch (e) {
if (showErrorMessage) { if (showErrorMessage) showMsgErr(e.message);
//Разбираем текст ошибки
let errMsg = formatErrorMessage(e.message);
//Отображаем ошибку
showMsgErr(errMsg.text, null, errMsg.fullErrorText);
}
throw e; throw e;
} finally { } finally {
if (loader !== false) hideLoader(); if (loader !== false) hideLoader();

View File

@ -33,9 +33,7 @@ const MESSAGING_CONTEXT_TEXTS_SHAPE = PropTypes.shape({
const MESSAGING_CONTEXT_BUTTONS_SHAPE = PropTypes.shape({ const MESSAGING_CONTEXT_BUTTONS_SHAPE = PropTypes.shape({
CLOSE: PropTypes.string.isRequired, CLOSE: PropTypes.string.isRequired,
OK: PropTypes.string.isRequired, OK: PropTypes.string.isRequired,
CANCEL: PropTypes.string.isRequired, CANCEL: PropTypes.string.isRequired
DETAIL: PropTypes.string.isRequired,
HIDE: PropTypes.string.isRequired
}); });
//---------------- //----------------
@ -58,16 +56,12 @@ export const MessagingContext = ({ titles, texts, buttons, children }) => {
//Отображение сообщения //Отображение сообщения
const showMsg = useCallback( const showMsg = useCallback(
(type, text, msgOnOk = null, msgOnCancel = null, fullErrorText = null) => (type, text, msgOnOk = null, msgOnCancel = null) => dispatch({ type: MSG_AT.SHOW_MSG, payload: { type, text, msgOnOk, msgOnCancel } }),
dispatch({ type: MSG_AT.SHOW_MSG, payload: { type, text, msgOnOk, msgOnCancel, fullErrorText } }),
[] []
); );
//Отображение сообщения - ошибка //Отображение сообщения - ошибка
const showMsgErr = useCallback( const showMsgErr = useCallback((text, msgOnOk = null) => showMsg(MSG_TYPE.ERR, text, msgOnOk), [showMsg]);
(text, msgOnOk = null, fullErrorText = null) => showMsg(MSG_TYPE.ERR, text, msgOnOk, null, fullErrorText),
[showMsg]
);
//Отображение сообщения - информация //Отображение сообщения - информация
const showMsgInfo = useCallback((text, msgOnOk = null) => showMsg(MSG_TYPE.INFO, text, msgOnOk), [showMsg]); const showMsgInfo = useCallback((text, msgOnOk = null) => showMsg(MSG_TYPE.INFO, text, msgOnOk), [showMsg]);
@ -132,7 +126,6 @@ export const MessagingContext = ({ titles, texts, buttons, children }) => {
open={true} open={true}
variant={state.msgType} variant={state.msgType}
text={state.msgText} text={state.msgText}
fullErrorText={state.msgFullErrorText}
title title
titleText={state.msgType == MSG_TYPE.ERR ? titles.ERR : state.msgType == MSG_TYPE.WARN ? titles.WARN : titles.INFO} titleText={state.msgType == MSG_TYPE.ERR ? titles.ERR : state.msgType == MSG_TYPE.WARN ? titles.WARN : titles.INFO}
okBtn={true} okBtn={true}
@ -141,8 +134,6 @@ export const MessagingContext = ({ titles, texts, buttons, children }) => {
cancelBtn={state.msgType == MSG_TYPE.WARN} cancelBtn={state.msgType == MSG_TYPE.WARN}
onCancel={handleMessageCancelClick} onCancel={handleMessageCancelClick}
cancelBtnCaption={buttons.CANCEL} cancelBtnCaption={buttons.CANCEL}
showErrMoreCaption={buttons.DETAIL}
hideErrMoreCaption={buttons.HIDE}
/> />
) : null} ) : null}
{children} {children}

View File

@ -35,7 +35,6 @@ const INITIAL_STATE = {
msg: false, msg: false,
msgType: MSG_TYPE.ERR, msgType: MSG_TYPE.ERR,
msgText: null, msgText: null,
msgFullErrorText: null,
msgOnOk: null, msgOnOk: null,
msgOnCancel: null msgOnCancel: null
}; };
@ -60,7 +59,6 @@ const handlers = {
msg: true, msg: true,
msgType: payload.type || MSG_TYPE.APP_ERR, msgType: payload.type || MSG_TYPE.APP_ERR,
msgText: payload.text, msgText: payload.text,
msgFullErrorText: payload.fullErrorText,
msgOnOk: payload.msgOnOk, msgOnOk: payload.msgOnOk,
msgOnCancel: payload.msgOnCancel msgOnCancel: payload.msgOnCancel
}), }),

View File

@ -158,34 +158,6 @@ const formatDateJSONDateOnly = value => (value ? dayjs(value).format("YYYY-MM-DD
//Форматирование числа в "Денежном" формате РФ //Форматирование числа в "Денежном" формате РФ
const formatNumberRFCurrency = value => (hasValue(value) ? new Intl.NumberFormat("ru-RU", { minimumFractionDigits: 2 }).format(value) : null); const formatNumberRFCurrency = value => (hasValue(value) ? new Intl.NumberFormat("ru-RU", { minimumFractionDigits: 2 }).format(value) : null);
//Форматирование текста ошибки
const formatErrorMessage = errorMsg => {
//Инициализируем текст заголовка ошибки
let text = "";
//Пробуем извлечь заголовок текста ошибки
try {
//Если это ошибка Oracle
if (errorMsg.match(/^ORA-/)) {
//Считываем первую строку с заголовочным текстом ошибки
text = errorMsg.match(/^.*(?=(\nORA-))/)[0];
//Убираем лишнюю информацию и пробелы
text = text.replace(/ORA-\d*:/g, "").trim();
}
//Если это ошибка PG
if (errorMsg.match(/^SQL Error/)) {
//Считываем первую строку с заголовочным текстом ошибки
text = errorMsg.match(/.*(?=(\n.*Where)|(.*Where))/)[0];
//Убираем лишнюю информацию и пробелы
text = text.replace(/SQL Error \[\d*\]: ERROR:/g, "").trim();
}
} catch {
//Если произошла ошибка - оставляем полный текст ошибки
text = errorMsg;
}
//Возвращаем результат
return { text: text || errorMsg, fullErrorText: text ? errorMsg : null };
};
//Формирование уникального идентификатора //Формирование уникального идентификатора
const genGUID = () => const genGUID = () =>
"10000000-1000-4000-8000-100000000000".replace(/[018]/g, c => "10000000-1000-4000-8000-100000000000".replace(/[018]/g, c =>
@ -206,6 +178,5 @@ export {
formatDateTimeRF, formatDateTimeRF,
formatDateJSONDateOnly, formatDateJSONDateOnly,
formatNumberRFCurrency, formatNumberRFCurrency,
formatErrorMessage,
genGUID genGUID
}; };