Add navigator button

This commit is contained in:
dominik-zeglen 2020-08-08 14:59:09 +02:00
parent 1eb3ec7b2d
commit 3816ebb0a5
3 changed files with 175 additions and 160 deletions

View file

@ -28,6 +28,7 @@ import useRouter from "use-react-router";
import Container from "../Container"; import Container from "../Container";
import ErrorPage from "../ErrorPage"; import ErrorPage from "../ErrorPage";
import Navigator from "../Navigator";
import AppActionContext from "./AppActionContext"; import AppActionContext from "./AppActionContext";
import AppHeaderContext from "./AppHeaderContext"; import AppHeaderContext from "./AppHeaderContext";
import { appLoaderHeight, drawerWidth, drawerWidthExpanded } from "./consts"; import { appLoaderHeight, drawerWidth, drawerWidthExpanded } from "./consts";
@ -310,6 +311,7 @@ const AppLayout: React.FC<AppLayoutProps> = ({ children }) => {
const intl = useIntl(); const intl = useIntl();
const [appState, dispatchAppState] = useAppState(); const [appState, dispatchAppState] = useAppState();
const { location } = useRouter(); const { location } = useRouter();
const [isNavigatorVisible, setNavigatorVisibility] = React.useState(false);
const menuStructure = createMenuStructure(intl); const menuStructure = createMenuStructure(intl);
const configurationMenu = createConfigurationMenu(intl); const configurationMenu = createConfigurationMenu(intl);
@ -356,6 +358,11 @@ const AppLayout: React.FC<AppLayoutProps> = ({ children }) => {
}; };
return ( return (
<>
<Navigator
visible={isNavigatorVisible}
setVisibility={setNavigatorVisibility}
/>
<AppHeaderContext.Provider value={appHeaderAnchor}> <AppHeaderContext.Provider value={appHeaderAnchor}>
<AppActionContext.Provider value={appActionAnchor}> <AppActionContext.Provider value={appActionAnchor}>
<div className={classes.root}> <div className={classes.root}>
@ -371,7 +378,9 @@ const AppLayout: React.FC<AppLayoutProps> = ({ children }) => {
[classes.logoDark]: isDark [classes.logoDark]: isDark
})} })}
> >
<SVG src={isMenuSmall ? saleorDarkLogoSmall : saleorDarkLogo} /> <SVG
src={isMenuSmall ? saleorDarkLogoSmall : saleorDarkLogo}
/>
</div> </div>
<Hidden smDown> <Hidden smDown>
<div <div
@ -429,6 +438,9 @@ const AppLayout: React.FC<AppLayoutProps> = ({ children }) => {
checked={isDark} checked={isDark}
onClick={toggleTheme} onClick={toggleTheme}
/> />
<button onClick={() => setNavigatorVisibility(true)}>
naviigator
</button>
<div className={classes.userMenuContainer} ref={anchor}> <div className={classes.userMenuContainer} ref={anchor}>
<Chip <Chip
avatar={ avatar={
@ -520,6 +532,7 @@ const AppLayout: React.FC<AppLayoutProps> = ({ children }) => {
</div> </div>
</AppActionContext.Provider> </AppActionContext.Provider>
</AppHeaderContext.Provider> </AppHeaderContext.Provider>
</>
); );
}; };

View file

@ -60,8 +60,12 @@ const useStyles = makeStyles(
} }
); );
const Navigator: React.FC = () => { export interface NavigatorProps {
const [visible, setVisible] = React.useState(false); visible: boolean;
setVisibility: (state: boolean) => void;
}
const Navigator: React.FC<NavigatorProps> = ({ visible, setVisibility }) => {
const input = React.useRef(null); const input = React.useRef(null);
const [query, mode, change, actions] = useQuickSearch(visible, input); const [query, mode, change, actions] = useQuickSearch(visible, input);
const intl = useIntl(); const intl = useIntl();
@ -76,7 +80,7 @@ const Navigator: React.FC = () => {
React.useEffect(() => { React.useEffect(() => {
hotkeys(navigatorHotkey, event => { hotkeys(navigatorHotkey, event => {
event.preventDefault(); event.preventDefault();
setVisible(!visible); setVisibility(!visible);
}); });
if (cmp(APP_VERSION, "2.1.0") !== 1 && !notifiedAboutNavigator) { if (cmp(APP_VERSION, "2.1.0") !== 1 && !notifiedAboutNavigator) {
@ -110,7 +114,7 @@ const Navigator: React.FC = () => {
<Modal <Modal
className={classes.modal} className={classes.modal}
open={visible} open={visible}
onClose={() => setVisible(false)} onClose={() => setVisibility(false)}
> >
<Fade appear in={visible} timeout={theme.transitions.duration.short}> <Fade appear in={visible} timeout={theme.transitions.duration.short}>
<div className={classes.root}> <div className={classes.root}>
@ -122,7 +126,7 @@ const Navigator: React.FC = () => {
onSelect={(item: QuickSearchAction) => { onSelect={(item: QuickSearchAction) => {
const shouldRemainVisible = item.onClick(); const shouldRemainVisible = item.onClick();
if (!shouldRemainVisible) { if (!shouldRemainVisible) {
setVisible(false); setVisibility(false);
} }
}} }}
onInputValueChange={value => onInputValueChange={value =>

View file

@ -1,4 +1,3 @@
import Navigator from "@saleor/components/Navigator";
import useAppState from "@saleor/hooks/useAppState"; import useAppState from "@saleor/hooks/useAppState";
import { defaultDataIdFromObject, InMemoryCache } from "apollo-cache-inmemory"; import { defaultDataIdFromObject, InMemoryCache } from "apollo-cache-inmemory";
import { ApolloClient } from "apollo-client"; import { ApolloClient } from "apollo-client";
@ -139,7 +138,6 @@ const Routes: React.FC = () => {
<WindowTitle title={intl.formatMessage(commonMessages.dashboard)} /> <WindowTitle title={intl.formatMessage(commonMessages.dashboard)} />
{isAuthenticated && !tokenAuthLoading && !tokenVerifyLoading ? ( {isAuthenticated && !tokenAuthLoading && !tokenVerifyLoading ? (
<AppLayout> <AppLayout>
<Navigator />
<ErrorBoundary <ErrorBoundary
onError={() => onError={() =>
dispatchAppState({ dispatchAppState({