From ce44a1bf2436ac6d3c70359bf03c0e9a3faa1e91 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Fri, 8 Dec 2023 02:15:04 +0300 Subject: [PATCH] =?UTF-8?q?WEB=20APP:=20=D0=9F=D0=B0=D0=BD=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=20=D1=81=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0=D0=B7=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D1=87=D0=B8=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/panels/samples/loader.js | 61 +++++++++++++++++++ app/panels/samples/messages.js | 97 +++++++++++++++++++++++++++++ app/panels/samples/mui.js | 50 +++++++++++++++ app/panels/samples/p8online.js | 108 +++++++++++++++++++++++++++++++++ app/panels/samples/samples.js | 48 ++++++++++++++- 5 files changed, 361 insertions(+), 3 deletions(-) create mode 100644 app/panels/samples/loader.js create mode 100644 app/panels/samples/messages.js create mode 100644 app/panels/samples/mui.js create mode 100644 app/panels/samples/p8online.js diff --git a/app/panels/samples/loader.js b/app/panels/samples/loader.js new file mode 100644 index 0000000..99dcf6e --- /dev/null +++ b/app/panels/samples/loader.js @@ -0,0 +1,61 @@ +/* + Парус 8 - Панели мониторинга - Примеры для разработчиков + Пример: Индикатор процесса +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useContext } from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Typography, Button } from "@mui/material"; //Интерфейсные элементы +import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + CONTAINER: { textAlign: "center", paddingTop: "20px" }, + TITLE: { paddingBottom: "15px" } +}; + +//----------- +//Тело модуля +//----------- + +//Пример: Индикатор процесса +const Loader = ({ title }) => { + //Подключение к контексту сообщений + const { showLoader, hideLoader } = useContext(MessagingСtx); + + //Генерация содержимого + return ( +
+ + {title} + + +
+ ); +}; + +//Контроль свойств - Пример: Индикатор процесса +Loader.propTypes = { + title: PropTypes.string.isRequired +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { Loader }; diff --git a/app/panels/samples/messages.js b/app/panels/samples/messages.js new file mode 100644 index 0000000..95fac7d --- /dev/null +++ b/app/panels/samples/messages.js @@ -0,0 +1,97 @@ +/* + Парус 8 - Панели мониторинга - Примеры для разработчиков + Пример: Сообщения +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useContext, useState } from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Typography, Divider, Button } from "@mui/material"; //Интерфейсные элементы +import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + CONTAINER: { textAlign: "center", paddingTop: "20px" }, + TITLE: { paddingBottom: "15px" }, + DIVIDER: { margin: "15px" } +}; + +//----------- +//Тело модуля +//----------- + +//Пример: Сообщения +const Messages = ({ title }) => { + //Собственное состояние + const [state, setState] = useState({ inlineErr: true, inlineWarn: true, inlineInfo: true }); + + //Подключение к контексту сообщений + const { showMsgErr, showMsgWarn, showMsgInfo, InlineMsgErr, InlineMsgInfo, InlineMsgWarn } = useContext(MessagingСtx); + + //Генерация содержимого + return ( +
+ + {title} + + {/* Сообщение об ошибке (диалог) */} + + + {/* Предупреждение (диалог) */} + + + {/* Информация (диалог) */} + + + {/* Ошибка (встраиваемое) */} + {state.inlineErr ? ( + <> + setState(pv => ({ ...pv, inlineErr: false }))} /> + + + ) : null} + {/* Предупреждение (встраиваемое) */} + {state.inlineWarn ? ( + <> + setState(pv => ({ ...pv, inlineWarn: false }))} /> + + + ) : null} + {/* Информация (встраиваемое) */} + {state.inlineInfo ? setState(pv => ({ ...pv, inlineInfo: false }))} /> : null} +
+ ); +}; + +//Контроль свойств - Пример: Сообщения +Messages.propTypes = { + title: PropTypes.string.isRequired +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { Messages }; diff --git a/app/panels/samples/mui.js b/app/panels/samples/mui.js new file mode 100644 index 0000000..6d246ac --- /dev/null +++ b/app/panels/samples/mui.js @@ -0,0 +1,50 @@ +/* + Парус 8 - Панели мониторинга - Примеры для разработчиков + Пример: Компоненты MUI +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import { Typography } from "@mui/material"; //Интерфейсные элементы +import PropTypes from "prop-types"; //Контроль свойств компонента + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + CONTAINER: { textAlign: "center", paddingTop: "20px" }, + TITLE: { paddingBottom: "15px" } +}; + +//----------- +//Тело модуля +//----------- + +//Пример: Компоненты MUI +const Mui = ({ title }) => { + //Генерация содержимого + return ( +
+ + {title} + + Mui +
+ ); +}; + +//Контроль свойств - Пример: Компоненты MUI +Mui.propTypes = { + title: PropTypes.string.isRequired +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { Mui }; diff --git a/app/panels/samples/p8online.js b/app/panels/samples/p8online.js new file mode 100644 index 0000000..7f2adf4 --- /dev/null +++ b/app/panels/samples/p8online.js @@ -0,0 +1,108 @@ +/* + Парус 8 - Панели мониторинга - Примеры для разработчиков + Пример: API для взаимодействия с "ПАРУС 8 Онлайн" +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React, { useState, useContext } from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Typography, Button, Divider } from "@mui/material"; //Интерфейсные элементы +import { ApplicationСtx } from "../../context/application"; //Контекст приложения + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + CONTAINER: { textAlign: "center", paddingTop: "20px" }, + TITLE: { paddingBottom: "15px" }, + DIVIDER: { margin: "15px" } +}; + +//----------- +//Тело модуля +//----------- + +//Пример: API для взаимодействия с "ПАРУС 8 Онлайн" +const P8Online = ({ title }) => { + //Собственное состояние + const [agent, setAgent] = useState(""); + + //Подключение к контексту приложения + const { pOnlineShowUnit, pOnlineShowTab, pOnlineShowDocument, pOnlineShowDictionary } = useContext(ApplicationСtx); + + //Генерация содержимого + return ( +
+ + {title} + + {/* Открыть новую закладку */} + + + {/* Открыть раздел */} + + + {/* Открыть раздел в режиме словаря */} + + {/* Позиционирование/отбор документа */} + {agent ? ( + <> + + + + ) : null} +
+ ); +}; + +//Контроль свойств - Пример: API для взаимодействия с "ПАРУС 8 Онлайн" +P8Online.propTypes = { + title: PropTypes.string.isRequired +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { P8Online }; diff --git a/app/panels/samples/samples.js b/app/panels/samples/samples.js index 7ccbd69..aeaa80a 100644 --- a/app/panels/samples/samples.js +++ b/app/panels/samples/samples.js @@ -7,8 +7,31 @@ //Подключение библиотек //--------------------- -import React from "react"; //Классы React -import { Typography } from "@mui/material"; //Интерфейсные элементы +import React, { useState } from "react"; //Классы React +import { Button, Fab, Icon } from "@mui/material"; //Интерфейсные элементы +import { BUTTONS } from "../../../app.text"; //Текстовые ресурсы и константы +import { P8Online } from "./p8online"; //Пример: API для взаимодействия с "ПАРУС 8 Онлайн" +import { Mui } from "./mui"; //Пример: Компоненты MUI +import { Messages } from "./messages"; //Пример: Сообщения +import { Loader } from "./loader"; //Пример: Индикатор процесса + +//--------- +//Константы +//--------- + +//Режимы +const MODES = { + P8ONLINE: { name: "P8ONLINE", caption: 'API для взаимодействия с "ПАРУС 8 Онлайн"', component: P8Online }, + MUI: { name: "MUI", caption: "Компоненты MUI", component: Mui }, + MESSAGES: { name: "MESSAGES", caption: "Сообщения", component: Messages }, + LOADER: { name: "LOADER", caption: "Индикатор процесса", component: Loader } +}; + +//Стили +const STYLES = { + CONTAINER: { textAlign: "center", paddingTop: "20px" }, + BACK_BUTTON: { position: "absolute", left: "20px", marginTop: "20px" } +}; //----------- //Тело модуля @@ -16,10 +39,29 @@ import { Typography } from "@mui/material"; //Интерфейсные элем //Примеры const Samples = () => { + //Собственное состояние + const [mode, setMode] = useState(""); + //Генерация содержимого return (
- Примеры для разработчиков + {mode ? ( +
+ setMode("")}> + arrow_back_ios + {BUTTONS.NAVIGATE_BACK} + + {React.createElement(MODES[mode]?.component || (() => {}), { title: MODES[mode]?.caption })} +
+ ) : ( +
+ {Object.entries(MODES).map(m => ( +
+ +
+ ))} +
+ )}
); };