@@ -122,7 +126,7 @@ const Navigator: React.FC = () => {
onSelect={(item: QuickSearchAction) => {
const shouldRemainVisible = item.onClick();
if (!shouldRemainVisible) {
- setVisible(false);
+ setVisibility(false);
}
}}
onInputValueChange={value =>
diff --git a/src/components/NavigatorButton/NavigatorButton.stories.tsx b/src/components/NavigatorButton/NavigatorButton.stories.tsx
new file mode 100644
index 000000000..95e7f0881
--- /dev/null
+++ b/src/components/NavigatorButton/NavigatorButton.stories.tsx
@@ -0,0 +1,12 @@
+import CardDecorator from "@saleor/storybook/CardDecorator";
+import Decorator from "@saleor/storybook/Decorator";
+import { storiesOf } from "@storybook/react";
+import React from "react";
+
+import NavigatorButton from "./NavigatorButton";
+
+storiesOf("Generics / NavigatorButton", module)
+ .addDecorator(Decorator)
+ .addDecorator(CardDecorator)
+ .add("mac", () =>
)
+ .add("other", () =>
);
diff --git a/src/components/NavigatorButton/NavigatorButton.tsx b/src/components/NavigatorButton/NavigatorButton.tsx
new file mode 100644
index 000000000..d35b87668
--- /dev/null
+++ b/src/components/NavigatorButton/NavigatorButton.tsx
@@ -0,0 +1,153 @@
+import navigatorIcon from "@assets/images/navigator.svg";
+import Grow from "@material-ui/core/Grow";
+import IconButton, { IconButtonProps } from "@material-ui/core/IconButton";
+import Paper from "@material-ui/core/Paper";
+import Popper from "@material-ui/core/Popper";
+import makeStyles from "@material-ui/core/styles/makeStyles";
+import classNames from "classnames";
+import React from "react";
+import ReactSVG from "react-inlinesvg";
+import { FormattedMessage } from "react-intl";
+
+const useStyles = makeStyles(
+ theme => {
+ const triangle = (color: string, width: number) => ({
+ borderBottom: `${width}px solid ${color}`,
+ borderLeft: `${width}px solid transparent`,
+ borderRight: `${width}px solid transparent`,
+ height: 0,
+ width: 0
+ });
+
+ return {
+ keyTile: {
+ "&:first-child": {
+ marginLeft: theme.spacing()
+ },
+ alignItems: "center",
+ background: theme.palette.background.default,
+ borderRadius: 8,
+ display: "inline-flex",
+ height: 32,
+ justifyContent: "center",
+ marginLeft: theme.spacing(0.5),
+ padding: theme.spacing(),
+ width: 32
+ },
+ keyTileLabel: {
+ verticalAlign: "middle"
+ },
+ paper: {
+ "&:after": {
+ ...triangle(theme.palette.background.paper, 7),
+ content: "''",
+ left: theme.spacing(2) + 2,
+ position: "absolute",
+ top: -theme.spacing() + 1
+ },
+ "&:before": {
+ ...triangle(theme.palette.divider, 8),
+ content: "''",
+ left: theme.spacing(2) + 1,
+ position: "absolute",
+ top: -theme.spacing()
+ },
+ border: `1px solid ${theme.palette.divider}`,
+ borderRadius: 6,
+ marginTop: theme.spacing(2),
+ padding: theme.spacing(2),
+ position: "relative"
+ },
+
+ root: {
+ "& path": {
+ color: theme.palette.primary.main
+ },
+ "&:not(:hover)": {
+ backgroundColor: theme.palette.background.paper
+ },
+ border: `1px solid ${theme.palette.divider}`,
+ height: 40,
+ marginRight: theme.spacing(2),
+ width: 40
+ }
+ };
+ },
+ {
+ name: "NavigatorButton"
+ }
+);
+
+export interface NavigatorButtonProps extends IconButtonProps {
+ isMac: boolean;
+}
+
+const NavigatorButton: React.FC
= ({
+ className,
+ isMac,
+ ...props
+}) => {
+ const classes = useStyles({});
+ const helperTimer = React.useRef(null);
+ const [helperVisibility, setHelperVisibility] = React.useState(false);
+ const anchor = React.useRef();
+
+ const setHelper = () => {
+ helperTimer.current = setTimeout(() => setHelperVisibility(true), 2 * 1000);
+ };
+
+ const clearHelper = () => {
+ if (helperTimer.current) {
+ clearTimeout(helperTimer.current);
+ helperTimer.current = null;
+ }
+ setHelperVisibility(false);
+ };
+
+ return (
+ <>
+
+
+
+
+ {({ TransitionProps, placement }) => (
+
+
+
+
+
+ {isMac ? "⌘" : "Ctrl"}
+
+
+
+ K
+
+
+
+ )}
+
+ >
+ );
+};
+
+NavigatorButton.displayName = "NavigatorButton";
+export default NavigatorButton;
diff --git a/src/index.tsx b/src/index.tsx
index f684c326c..9317abeea 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -1,4 +1,3 @@
-import Navigator from "@saleor/components/Navigator";
import useAppState from "@saleor/hooks/useAppState";
import { defaultDataIdFromObject, InMemoryCache } from "apollo-cache-inmemory";
import { ApolloClient } from "apollo-client";
@@ -139,7 +138,6 @@ const Routes: React.FC = () => {
{isAuthenticated && !tokenAuthLoading && !tokenVerifyLoading ? (
-
dispatchAppState({
diff --git a/src/storybook/__snapshots__/Stories.test.ts.snap b/src/storybook/__snapshots__/Stories.test.ts.snap
index 93ef683e4..165558e69 100644
--- a/src/storybook/__snapshots__/Stories.test.ts.snap
+++ b/src/storybook/__snapshots__/Stories.test.ts.snap
@@ -4670,6 +4670,66 @@ exports[`Storyshots Generics / Multiple select with autocomplete no data 1`] = `
`;
+exports[`Storyshots Generics / NavigatorButton mac 1`] = `
+