forked from CITKParus/P8-Panels
WEBAPP: Возможность установки произвольного заголовка приложения из панели
This commit is contained in:
parent
be351f7920
commit
5a08fdf605
@ -86,6 +86,9 @@ const Workspace = ({ panels = [], selectedPanel, children } = {}) => {
|
|||||||
//Подключение к контексту навигации
|
//Подключение к контексту навигации
|
||||||
const { navigateRoot, navigatePanel } = useContext(NavigationCtx);
|
const { navigateRoot, navigatePanel } = useContext(NavigationCtx);
|
||||||
|
|
||||||
|
//Подключение к контексту приложения
|
||||||
|
const { appState } = useContext(ApplicationСtx);
|
||||||
|
|
||||||
//Отработка действия навигации домой
|
//Отработка действия навигации домой
|
||||||
const handleHomeNavigate = () => navigateRoot();
|
const handleHomeNavigate = () => navigateRoot();
|
||||||
|
|
||||||
@ -98,6 +101,7 @@ const Workspace = ({ panels = [], selectedPanel, children } = {}) => {
|
|||||||
{...P8P_APP_WORKSPACE_CONFIG_PROPS}
|
{...P8P_APP_WORKSPACE_CONFIG_PROPS}
|
||||||
panels={panels}
|
panels={panels}
|
||||||
selectedPanel={selectedPanel}
|
selectedPanel={selectedPanel}
|
||||||
|
caption={appState.appBarTitle}
|
||||||
onHomeNavigate={handleHomeNavigate}
|
onHomeNavigate={handleHomeNavigate}
|
||||||
onItemNavigate={handleItemNavigate}
|
onItemNavigate={handleItemNavigate}
|
||||||
>
|
>
|
||||||
|
@ -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);
|
const [open, setOpen] = useState(false);
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ const P8PAppWorkspace = ({ children, panels = [], selectedPanel, closeCaption, h
|
|||||||
<Icon>{open ? "chevron_left" : "menu"}</Icon>
|
<Icon>{open ? "chevron_left" : "menu"}</Icon>
|
||||||
</IconButton>
|
</IconButton>
|
||||||
<Typography variant="h6" noWrap component="div">
|
<Typography variant="h6" noWrap component="div">
|
||||||
{selectedPanel?.caption}
|
{caption || selectedPanel?.caption}
|
||||||
</Typography>
|
</Typography>
|
||||||
</Toolbar>
|
</Toolbar>
|
||||||
</AppBar>
|
</AppBar>
|
||||||
@ -120,6 +120,7 @@ P8PAppWorkspace.propTypes = {
|
|||||||
children: PropTypes.element,
|
children: PropTypes.element,
|
||||||
panels: PropTypes.arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired,
|
panels: PropTypes.arrayOf(P8P_PANELS_MENU_PANEL_SHAPE).isRequired,
|
||||||
selectedPanel: P8P_PANELS_MENU_PANEL_SHAPE,
|
selectedPanel: P8P_PANELS_MENU_PANEL_SHAPE,
|
||||||
|
caption: PropTypes.string,
|
||||||
closeCaption: PropTypes.string.isRequired,
|
closeCaption: PropTypes.string.isRequired,
|
||||||
homeCaption: PropTypes.string.isRequired,
|
homeCaption: PropTypes.string.isRequired,
|
||||||
onHomeNavigate: PropTypes.func,
|
onHomeNavigate: PropTypes.func,
|
||||||
|
@ -56,6 +56,9 @@ export const ApplicationContext = ({ errors, displaySizeGetter, guidGenerator, c
|
|||||||
//Установка списка панелей
|
//Установка списка панелей
|
||||||
const setPanels = panels => dispatch({ type: APP_AT.LOAD_PANELS, payload: panels });
|
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);
|
const findPanelByName = name => state.panels.find(panel => panel.name == name);
|
||||||
|
|
||||||
@ -169,6 +172,7 @@ export const ApplicationContext = ({ errors, displaySizeGetter, guidGenerator, c
|
|||||||
return (
|
return (
|
||||||
<ApplicationСtx.Provider
|
<ApplicationСtx.Provider
|
||||||
value={{
|
value={{
|
||||||
|
setAppBarTitle,
|
||||||
findPanelByName,
|
findPanelByName,
|
||||||
pOnlineShowTab,
|
pOnlineShowTab,
|
||||||
pOnlineShowUnit,
|
pOnlineShowUnit,
|
||||||
|
@ -12,12 +12,14 @@ const APP_AT = {
|
|||||||
SET_URL_BASE: "SET_URL_BASE", //Установка базового URL приложения
|
SET_URL_BASE: "SET_URL_BASE", //Установка базового URL приложения
|
||||||
LOAD_PANELS: "LOAD_PANELS", //Загрузка списка панелей
|
LOAD_PANELS: "LOAD_PANELS", //Загрузка списка панелей
|
||||||
SET_INITIALIZED: "SET_INITIALIZED", //Установка флага инициализированности приложения
|
SET_INITIALIZED: "SET_INITIALIZED", //Установка флага инициализированности приложения
|
||||||
SET_DISPLAY_SIZE: "SET_DISPLAY_SIZE" //Установка текущего типового размера экрана
|
SET_DISPLAY_SIZE: "SET_DISPLAY_SIZE", //Установка текущего типового размера экрана
|
||||||
|
SET_APP_BAR_TITLE: "SET_APP_BAR_TITLE" //Установка заголовка в шапке приложения
|
||||||
};
|
};
|
||||||
|
|
||||||
//Состояние приложения по умолчанию
|
//Состояние приложения по умолчанию
|
||||||
const INITIAL_STATE = displaySizeGetter => ({
|
const INITIAL_STATE = displaySizeGetter => ({
|
||||||
displaySize: displaySizeGetter(),
|
displaySize: displaySizeGetter(),
|
||||||
|
appBarTitle: "",
|
||||||
urlBase: "",
|
urlBase: "",
|
||||||
panels: [],
|
panels: [],
|
||||||
panelsLoaded: false,
|
panelsLoaded: false,
|
||||||
@ -46,6 +48,8 @@ const handlers = {
|
|||||||
[APP_AT.SET_INITIALIZED]: state => ({ ...state, initialized: true }),
|
[APP_AT.SET_INITIALIZED]: state => ({ ...state, initialized: true }),
|
||||||
//Установка текущего типового размера экрана
|
//Установка текущего типового размера экрана
|
||||||
[APP_AT.SET_DISPLAY_SIZE]: (state, { payload }) => ({ ...state, displaySize: payload }),
|
[APP_AT.SET_DISPLAY_SIZE]: (state, { payload }) => ({ ...state, displaySize: payload }),
|
||||||
|
//Установка заголовка в шапке приложения
|
||||||
|
[APP_AT.SET_APP_BAR_TITLE]: (state, { payload }) => ({ ...state, appBarTitle: payload }),
|
||||||
//Обработчик по умолчанию
|
//Обработчик по умолчанию
|
||||||
DEFAULT: state => state
|
DEFAULT: state => state
|
||||||
};
|
};
|
||||||
|
@ -41,7 +41,7 @@ export const NavigationContext = ({ children }) => {
|
|||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
||||||
//Подключение к контексту приложения
|
//Подключение к контексту приложения
|
||||||
const { findPanelByName } = useContext(ApplicationСtx);
|
const { findPanelByName, setAppBarTitle } = useContext(ApplicationСtx);
|
||||||
|
|
||||||
//Проверка наличия параметров запроса
|
//Проверка наличия параметров запроса
|
||||||
const isNavigationSearch = () => (location.search ? true : false);
|
const isNavigationSearch = () => (location.search ? true : false);
|
||||||
@ -65,6 +65,8 @@ export const NavigationContext = ({ children }) => {
|
|||||||
const navigateTo = ({ path, search, state, replace = false }) => {
|
const navigateTo = ({ path, search, state, replace = false }) => {
|
||||||
//Если указано куда переходить
|
//Если указано куда переходить
|
||||||
if (path) {
|
if (path) {
|
||||||
|
//Сброс кастомного заголовка
|
||||||
|
setAppBarTitle("");
|
||||||
//Переходим к адресу
|
//Переходим к адресу
|
||||||
if (state) navigate(path, { state: JSON.stringify(state), replace });
|
if (state) navigate(path, { state: JSON.stringify(state), replace });
|
||||||
else navigate({ pathname: path, search: queryString.stringify(search), replace });
|
else navigate({ pathname: path, search: queryString.stringify(search), replace });
|
||||||
|
Loading…
x
Reference in New Issue
Block a user