From 70c8af789dadf132bcdbede24d48ee58bc30caf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arijus=20=C5=A0ukys?= Date: Thu, 31 Mar 2022 18:48:31 +0300 Subject: [PATCH] feat(ui): add red dot indicator on "Example Queries" button (#1993) --- .../providers/LocalStorageProvider/index.tsx | 11 +++++++ .../providers/LocalStorageProvider/types.ts | 1 + ui/src/scenes/Editor/Menu/index.tsx | 29 +++++++++++++++++-- ui/src/utils/localStorage/types.ts | 1 + 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/ui/src/providers/LocalStorageProvider/index.tsx b/ui/src/providers/LocalStorageProvider/index.tsx index 4f58d7949..912c86487 100644 --- a/ui/src/providers/LocalStorageProvider/index.tsx +++ b/ui/src/providers/LocalStorageProvider/index.tsx @@ -45,6 +45,7 @@ const defaultConfig: LocalConfig = { queryText: "", editorSplitterBasis: 350, resultsSplitterBasis: 350, + exampleQueriesVisited: false, } type ContextProps = { @@ -57,6 +58,7 @@ type ContextProps = { editorSplitterBasis: number resultsSplitterBasis: number updateSettings: (key: StoreKey, value: SettingsType) => void + exampleQueriesVisited: boolean } const defaultValues: ContextProps = { @@ -69,6 +71,7 @@ const defaultValues: ContextProps = { editorSplitterBasis: 350, resultsSplitterBasis: 350, updateSettings: (key: StoreKey, value: SettingsType) => undefined, + exampleQueriesVisited: false, } export const LocalStorageContext = createContext(defaultValues) @@ -113,6 +116,10 @@ export const LocalStorageProvider = ({ ), ) + const [exampleQueriesVisited, setExampleQueriesVisited] = useState( + getValue(StoreKey.EXAMPLE_QUERIES_VISITED) === "true", + ) + const updateSettings = (key: StoreKey, value: SettingsType) => { setValue(key, value.toString()) refreshSettings(key) @@ -130,6 +137,9 @@ export const LocalStorageProvider = ({ case StoreKey.EDITOR_LINE: setEditorLine(parseInteger(value, defaultConfig.editorLine)) break + case StoreKey.EXAMPLE_QUERIES_VISITED: + setExampleQueriesVisited(value === "true") + break case StoreKey.NOTIFICATION_ENABLED: setIsNotificationEnabled( parseBoolean(value, defaultConfig.isNotificationEnabled), @@ -168,6 +178,7 @@ export const LocalStorageProvider = ({ editorSplitterBasis, resultsSplitterBasis, updateSettings, + exampleQueriesVisited, }} > {children} diff --git a/ui/src/providers/LocalStorageProvider/types.ts b/ui/src/providers/LocalStorageProvider/types.ts index 9df57109a..072745a2a 100644 --- a/ui/src/providers/LocalStorageProvider/types.ts +++ b/ui/src/providers/LocalStorageProvider/types.ts @@ -33,4 +33,5 @@ export type LocalConfig = { queryText: string editorSplitterBasis: number resultsSplitterBasis: number + exampleQueriesVisited: boolean } diff --git a/ui/src/scenes/Editor/Menu/index.tsx b/ui/src/scenes/Editor/Menu/index.tsx index f4a4222c4..e8fdf6cc6 100644 --- a/ui/src/scenes/Editor/Menu/index.tsx +++ b/ui/src/scenes/Editor/Menu/index.tsx @@ -78,9 +78,25 @@ const DocsearchInput = styled(Input)` white-space: nowrap; ` -const QueryPickerButton = styled(SecondaryButton)` +const QueryPickerButton = styled(SecondaryButton)<{ + firstTimeVisitor: boolean +}>` + position: relative; margin: 0 1rem; flex: 0 0 auto; + + ${({ firstTimeVisitor }) => + firstTimeVisitor && + `&:after { + border-radius: 50%; + content: ""; + background: #dc4949; + width: 8px; + height: 8px; + position: absolute; + top: -3px; + right: -3px; + }`} ` const MenuIcon = styled(_MenuIcon)` @@ -155,12 +171,19 @@ const Menu = () => { const running = useSelector(selectors.query.getRunning) const opened = useSelector(selectors.console.getSideMenuOpened) const { sm } = useScreenSize() - const { resultsSplitterBasis, updateSettings } = useLocalStorage() + const { + resultsSplitterBasis, + exampleQueriesVisited, + updateSettings, + } = useLocalStorage() const handleClick = useCallback(() => { dispatch(actions.query.toggleRunning()) }, [dispatch]) const handleToggle = useCallback((active) => { + if (!exampleQueriesVisited && active) { + updateSettings(StoreKey.EXAMPLE_QUERIES_VISITED, true) + } setPopperActive(active) }, []) const handleHidePicker = useCallback(() => { @@ -238,7 +261,7 @@ const Menu = () => { active={popperActive} onToggle={handleToggle} trigger={ - + Example queries diff --git a/ui/src/utils/localStorage/types.ts b/ui/src/utils/localStorage/types.ts index a2c55bcfe..da3344e8b 100644 --- a/ui/src/utils/localStorage/types.ts +++ b/ui/src/utils/localStorage/types.ts @@ -27,6 +27,7 @@ export enum StoreKey { QUERY_TEXT = "query.text", EDITOR_LINE = "editor.line", EDITOR_COL = "editor.col", + EXAMPLE_QUERIES_VISITED = "editor.exampleQueriesVisited", NOTIFICATION_ENABLED = "notification.enabled", NOTIFICATION_DELAY = "notification.delay", EDITOR_SPLITTER_BASIS = "splitter.editor.basis", -- GitLab