From 5a08fdf605f94a3519d77ae19a9f5bdde789e6fe Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Tue, 20 May 2025 13:56:28 +0300 Subject: [PATCH] =?UTF-8?q?WEBAPP:=20=D0=92=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D1=83=D1=81=D1=82=D0=B0=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=B8=20=D0=BF=D1=80=D0=BE=D0=B8=D0=B7=D0=B2?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B7=D0=B0=D0=B3?= =?UTF-8?q?=D0=BE=D0=BB=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BF=D1=80=D0=B8=D0=BB?= =?UTF-8?q?=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B8=D0=B7=20=D0=BF?= =?UTF-8?q?=D0=B0=D0=BD=D0=B5=D0=BB=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/app.js | 4 ++++ app/components/p8p_app_workspace.js | 5 +++-- app/context/application.js | 4 ++++ app/context/application_reducer.js | 6 +++++- app/context/navigation.js | 4 +++- 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/app/app.js b/app/app.js index 13a6acd..96c1064 100644 --- a/app/app.js +++ b/app/app.js @@ -86,6 +86,9 @@ const Workspace = ({ panels = [], selectedPanel, children } = {}) => { //Подключение к контексту навигации const { navigateRoot, navigatePanel } = useContext(NavigationCtx); + //Подключение к контексту приложения + const { appState } = useContext(ApplicationСtx); + //Отработка действия навигации домой const handleHomeNavigate = () => navigateRoot(); @@ -98,6 +101,7 @@ const Workspace = ({ panels = [], selectedPanel, children } = {}) => { {...P8P_APP_WORKSPACE_CONFIG_PROPS} panels={panels} selectedPanel={selectedPanel} + caption={appState.appBarTitle} onHomeNavigate={handleHomeNavigate} onItemNavigate={handleItemNavigate} > diff --git a/app/components/p8p_app_workspace.js b/app/components/p8p_app_workspace.js index 334ad76..dd35fb8 100644 --- a/app/components/p8p_app_workspace.js +++ b/app/components/p8p_app_workspace.js @@ -47,7 +47,7 @@ const STYLES = { //----------- //Рабочее пространство -const P8PAppWorkspace = ({ children, panels = [], selectedPanel, closeCaption, homeCaption, onHomeNavigate, onItemNavigate } = {}) => { +const P8PAppWorkspace = ({ children, panels = [], selectedPanel, caption, closeCaption, homeCaption, onHomeNavigate, onItemNavigate } = {}) => { //Собственное состояния const [open, setOpen] = useState(false); @@ -86,7 +86,7 @@ const P8PAppWorkspace = ({ children, panels = [], selectedPanel, closeCaption, h {open ? "chevron_left" : "menu"} - {selectedPanel?.caption} + {caption || selectedPanel?.caption} @@ -120,6 +120,7 @@ P8PAppWorkspace.propTypes = { children: PropTypes.element, panels: PropTypes.arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired, selectedPanel: P8P_PANELS_MENU_PANEL_SHAPE, + caption: PropTypes.string, closeCaption: PropTypes.string.isRequired, homeCaption: PropTypes.string.isRequired, onHomeNavigate: PropTypes.func, diff --git a/app/context/application.js b/app/context/application.js index 6ff8919..8b97318 100644 --- a/app/context/application.js +++ b/app/context/application.js @@ -56,6 +56,9 @@ export const ApplicationContext = ({ errors, displaySizeGetter, guidGenerator, c //Установка списка панелей const setPanels = panels => dispatch({ type: APP_AT.LOAD_PANELS, payload: panels }); + //Установка заголовка в шапке приложения + const setAppBarTitle = appBarTitle => dispatch({ type: APP_AT.SET_APP_BAR_TITLE, payload: appBarTitle }); + //Поиск раздела по имени const findPanelByName = name => state.panels.find(panel => panel.name == name); @@ -169,6 +172,7 @@ export const ApplicationContext = ({ errors, displaySizeGetter, guidGenerator, c return ( ({ displaySize: displaySizeGetter(), + appBarTitle: "", urlBase: "", panels: [], panelsLoaded: false, @@ -46,6 +48,8 @@ const handlers = { [APP_AT.SET_INITIALIZED]: state => ({ ...state, initialized: true }), //Установка текущего типового размера экрана [APP_AT.SET_DISPLAY_SIZE]: (state, { payload }) => ({ ...state, displaySize: payload }), + //Установка заголовка в шапке приложения + [APP_AT.SET_APP_BAR_TITLE]: (state, { payload }) => ({ ...state, appBarTitle: payload }), //Обработчик по умолчанию DEFAULT: state => state }; diff --git a/app/context/navigation.js b/app/context/navigation.js index f0d79f4..7d4edf2 100644 --- a/app/context/navigation.js +++ b/app/context/navigation.js @@ -41,7 +41,7 @@ export const NavigationContext = ({ children }) => { const navigate = useNavigate(); //Подключение к контексту приложения - const { findPanelByName } = useContext(ApplicationСtx); + const { findPanelByName, setAppBarTitle } = useContext(ApplicationСtx); //Проверка наличия параметров запроса const isNavigationSearch = () => (location.search ? true : false); @@ -65,6 +65,8 @@ export const NavigationContext = ({ children }) => { const navigateTo = ({ path, search, state, replace = false }) => { //Если указано куда переходить if (path) { + //Сброс кастомного заголовка + setAppBarTitle(""); //Переходим к адресу if (state) navigate(path, { state: JSON.stringify(state), replace }); else navigate({ pathname: path, search: queryString.stringify(search), replace });