WEB APP: В контекст сообщений (MessagingContext) добавлена возможность вызова встраиваемых (Inline) уведомлений

This commit is contained in:
Mikhail Chechnev 2023-09-27 21:08:41 +03:00
parent 0d9f4de589
commit 1c02fc9684
4 changed files with 41 additions and 17 deletions

View File

@ -156,14 +156,14 @@ const P8PAppInlineMessage = ({ variant, text, okBtn, onOk, okBtnCaption }) => {
//Генерация содержимого //Генерация содержимого
return ( return (
<Container style={STYLES.INLINE_MESSAGE}> <Container style={STYLES.INLINE_MESSAGE}>
<Box p={5}> <Box p={1}>
<Typography <Typography
color={variant === P8P_APP_MESSAGE_VARIANT.ERR ? "error" : variant === P8P_APP_MESSAGE_VARIANT.WARN ? "primary" : "textSecondary"} color={variant === P8P_APP_MESSAGE_VARIANT.ERR ? "error" : variant === P8P_APP_MESSAGE_VARIANT.WARN ? "primary" : "textSecondary"}
> >
{text} {text}
</Typography> </Typography>
{okBtn && okBtnCaption ? ( {okBtn && okBtnCaption ? (
<Box pt={2}> <Box pt={1}>
<Button onClick={() => (onOk ? onOk() : null)} color="primary" autoFocus> <Button onClick={() => (onOk ? onOk() : null)} color="primary" autoFocus>
{okBtnCaption} {okBtnCaption}
</Button> </Button>

View File

@ -10,8 +10,8 @@
import React, { useReducer, createContext, useCallback } from "react"; //ReactJS import React, { useReducer, createContext, useCallback } from "react"; //ReactJS
import PropTypes from "prop-types"; //Контроль свойств компонента import PropTypes from "prop-types"; //Контроль свойств компонента
import { P8PAppProgress } from "../components/p8p_app_progress"; //Индикатор процесса import { P8PAppProgress } from "../components/p8p_app_progress"; //Индикатор процесса
import { P8PAppMessage } from "../components/p8p_app_message"; //Диалог сообщения import { P8PAppMessage, P8PAppInlineMessage, P8PAppInlineError, P8PAppInlineWarn, P8PAppInlineInfo } from "../components/p8p_app_message"; //Диалог сообщения
import { MSG_AT, MSG_DLGT, INITIAL_STATE, messagingReducer } from "./messaging_reducer"; //Редьюсер состояния import { MSG_AT, MSG_TYPE, INITIAL_STATE, messagingReducer } from "./messaging_reducer"; //Редьюсер состояния
//--------- //---------
//Константы //Константы
@ -61,13 +61,13 @@ export const MessagingContext = ({ titles, texts, buttons, children }) => {
); );
//Отображение сообщения - ошибка //Отображение сообщения - ошибка
const showMsgErr = useCallback((text, msgOnOk = null) => showMsg(MSG_DLGT.ERR, text, msgOnOk), [showMsg]); const showMsgErr = useCallback((text, msgOnOk = null) => showMsg(MSG_TYPE.ERR, text, msgOnOk), [showMsg]);
//Отображение сообщения - информация //Отображение сообщения - информация
const showMsgInfo = useCallback((text, msgOnOk = null) => showMsg(MSG_DLGT.INFO, text, msgOnOk), [showMsg]); const showMsgInfo = useCallback((text, msgOnOk = null) => showMsg(MSG_TYPE.INFO, text, msgOnOk), [showMsg]);
//Отображение сообщения - предупреждение //Отображение сообщения - предупреждение
const showMsgWarn = useCallback((text, msgOnOk = null, msgOnCancel = null) => showMsg(MSG_DLGT.WARN, text, msgOnOk, msgOnCancel), [showMsg]); const showMsgWarn = useCallback((text, msgOnOk = null, msgOnCancel = null) => showMsg(MSG_TYPE.WARN, text, msgOnOk, msgOnCancel), [showMsg]);
//Сокрытие сообщения //Сокрытие сообщения
const hideMsg = useCallback( const hideMsg = useCallback(
@ -89,11 +89,23 @@ export const MessagingContext = ({ titles, texts, buttons, children }) => {
hideMsg(true); hideMsg(true);
}; };
//Встраиваемое сообщение
const InlineMsg = useCallback(props => P8PAppInlineMessage({ okBtn: true, okBtnCaption: buttons.OK, ...props }), [buttons.OK]);
//Встраиваемое сообщение об ошибке
const InlineMsgErr = useCallback(props => P8PAppInlineError({ okBtn: true, okBtnCaption: buttons.OK, ...props }), [buttons.OK]);
//Встраиваемое сообщение с информацией
const InlineMsgInfo = useCallback(props => P8PAppInlineInfo({ okBtn: true, okBtnCaption: buttons.OK, ...props }), [buttons.OK]);
//Встраиваемое сообщение с предупреждением
const InlineMsgWarn = useCallback(props => P8PAppInlineWarn({ okBtn: true, okBtnCaption: buttons.OK, ...props }), [buttons.OK]);
//Вернём компонент провайдера //Вернём компонент провайдера
return ( return (
<MessagingСtx.Provider <MessagingСtx.Provider
value={{ value={{
MSG_DLGT, MSG_TYPE,
showLoader, showLoader,
hideLoader, hideLoader,
showMsg, showMsg,
@ -101,6 +113,10 @@ export const MessagingContext = ({ titles, texts, buttons, children }) => {
showMsgInfo, showMsgInfo,
showMsgWarn, showMsgWarn,
hideMsg, hideMsg,
InlineMsg,
InlineMsgErr,
InlineMsgInfo,
InlineMsgWarn,
msgState: state msgState: state
}} }}
> >
@ -111,11 +127,11 @@ export const MessagingContext = ({ titles, texts, buttons, children }) => {
variant={state.msgType} variant={state.msgType}
text={state.msgText} text={state.msgText}
title title
titleText={state.msgType == MSG_DLGT.ERR ? titles.ERR : state.msgType == MSG_DLGT.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}
onOk={handleMessageOkClick} onOk={handleMessageOkClick}
okBtnCaption={[MSG_DLGT.ERR, MSG_DLGT.INFO].includes(state.msgType) ? buttons.CLOSE : buttons.OK} okBtnCaption={[MSG_TYPE.ERR, MSG_TYPE.INFO].includes(state.msgType) ? buttons.CLOSE : buttons.OK}
cancelBtn={state.msgType == MSG_DLGT.WARN} cancelBtn={state.msgType == MSG_TYPE.WARN}
onCancel={handleMessageCancelClick} onCancel={handleMessageCancelClick}
cancelBtnCaption={buttons.CANCEL} cancelBtnCaption={buttons.CANCEL}
/> />

View File

@ -21,8 +21,8 @@ const MSG_AT = {
HIDE_MSG: "HIDE_MSG" //Сокрытие сообщения HIDE_MSG: "HIDE_MSG" //Сокрытие сообщения
}; };
//Типы диалогов сообщений //Типы сообщений
const MSG_DLGT = { const MSG_TYPE = {
INFO: P8P_APP_MESSAGE_VARIANT.INFO, //Тип диалога - информация INFO: P8P_APP_MESSAGE_VARIANT.INFO, //Тип диалога - информация
WARN: P8P_APP_MESSAGE_VARIANT.WARN, //Тип диалога - предупреждение WARN: P8P_APP_MESSAGE_VARIANT.WARN, //Тип диалога - предупреждение
ERR: P8P_APP_MESSAGE_VARIANT.ERR //Тип диалога - ошибка ERR: P8P_APP_MESSAGE_VARIANT.ERR //Тип диалога - ошибка
@ -33,7 +33,7 @@ const INITIAL_STATE = {
loading: false, loading: false,
loadingMessage: "", loadingMessage: "",
msg: false, msg: false,
msgType: MSG_DLGT.ERR, msgType: MSG_TYPE.ERR,
msgText: null, msgText: null,
msgOnOk: null, msgOnOk: null,
msgOnCancel: null msgOnCancel: null
@ -57,7 +57,7 @@ const handlers = {
[MSG_AT.SHOW_MSG]: (state, { payload }) => ({ [MSG_AT.SHOW_MSG]: (state, { payload }) => ({
...state, ...state,
msg: true, msg: true,
msgType: payload.type || MSG_DLGT.APP_ERR, msgType: payload.type || MSG_TYPE.APP_ERR,
msgText: payload.text, msgText: payload.text,
msgOnOk: payload.msgOnOk, msgOnOk: payload.msgOnOk,
msgOnCancel: payload.msgOnCancel msgOnCancel: payload.msgOnCancel
@ -73,7 +73,7 @@ const handlers = {
//---------------- //----------------
//Константы //Константы
export { MSG_AT, MSG_DLGT, INITIAL_STATE }; export { MSG_AT, MSG_TYPE, INITIAL_STATE };
//Редьюсер состояния //Редьюсер состояния
export const messagingReducer = (state, action) => { export const messagingReducer = (state, action) => {

View File

@ -31,7 +31,7 @@ const PrjJobs = () => {
const { executeStored } = useContext(BackEndСtx); const { executeStored } = useContext(BackEndСtx);
//Подключение к контексту сообщений //Подключение к контексту сообщений
const { showMsgErr, showMsgWarn, showMsgInfo } = useContext(MessagingСtx); const { MSG_TYPE, showMsgErr, showMsgWarn, showMsgInfo, InlineMsg, InlineMsgErr, InlineMsgInfo, InlineMsgWarn } = useContext(MessagingСtx);
//Подключение к контексту приложения //Подключение к контексту приложения
const { pOnlineShowTab, pOnlineShowDocument, pOnlineShowDictionary, pOnlineUserProcedure, pOnlineUserReport } = useContext(ApplicationСtx); const { pOnlineShowTab, pOnlineShowDocument, pOnlineShowDictionary, pOnlineUserProcedure, pOnlineUserReport } = useContext(ApplicationСtx);
@ -67,6 +67,14 @@ const PrjJobs = () => {
//Генерация содержимого //Генерация содержимого
return ( return (
<div> <div>
<InlineMsg
variant={MSG_TYPE.WARN}
text="Просто сообщение, очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень очень длинное"
onOk={() => console.log("INLINE MESSAGE ON OK")}
/>
<InlineMsgInfo text="Информация" onOk={() => console.log("INLINE INFO ON OK")} />
<InlineMsgWarn text="Предупреждение" onOk={() => console.log("INLINE WARN ON OK")} />
<InlineMsgErr text="Ошибка" onOk={() => console.log("INLINE ERR ON OK")} />
<h1>Это панель работ!</h1> <h1>Это панель работ!</h1>
<br /> <br />
<h2>Параметры: {isNavigationState() ? JSON.stringify(getNavigationState()) : "НЕ ПЕРЕДАНЫ"}</h2> <h2>Параметры: {isNavigationState() ? JSON.stringify(getNavigationState()) : "НЕ ПЕРЕДАНЫ"}</h2>