未验证 提交 70c8af78 编写于 作者: A Arijus Šukys 提交者: GitHub

feat(ui): add red dot indicator on "Example Queries" button (#1993)

上级 639a3eb1
...@@ -45,6 +45,7 @@ const defaultConfig: LocalConfig = { ...@@ -45,6 +45,7 @@ const defaultConfig: LocalConfig = {
queryText: "", queryText: "",
editorSplitterBasis: 350, editorSplitterBasis: 350,
resultsSplitterBasis: 350, resultsSplitterBasis: 350,
exampleQueriesVisited: false,
} }
type ContextProps = { type ContextProps = {
...@@ -57,6 +58,7 @@ type ContextProps = { ...@@ -57,6 +58,7 @@ type ContextProps = {
editorSplitterBasis: number editorSplitterBasis: number
resultsSplitterBasis: number resultsSplitterBasis: number
updateSettings: (key: StoreKey, value: SettingsType) => void updateSettings: (key: StoreKey, value: SettingsType) => void
exampleQueriesVisited: boolean
} }
const defaultValues: ContextProps = { const defaultValues: ContextProps = {
...@@ -69,6 +71,7 @@ const defaultValues: ContextProps = { ...@@ -69,6 +71,7 @@ const defaultValues: ContextProps = {
editorSplitterBasis: 350, editorSplitterBasis: 350,
resultsSplitterBasis: 350, resultsSplitterBasis: 350,
updateSettings: (key: StoreKey, value: SettingsType) => undefined, updateSettings: (key: StoreKey, value: SettingsType) => undefined,
exampleQueriesVisited: false,
} }
export const LocalStorageContext = createContext<ContextProps>(defaultValues) export const LocalStorageContext = createContext<ContextProps>(defaultValues)
...@@ -113,6 +116,10 @@ export const LocalStorageProvider = ({ ...@@ -113,6 +116,10 @@ export const LocalStorageProvider = ({
), ),
) )
const [exampleQueriesVisited, setExampleQueriesVisited] = useState<boolean>(
getValue(StoreKey.EXAMPLE_QUERIES_VISITED) === "true",
)
const updateSettings = (key: StoreKey, value: SettingsType) => { const updateSettings = (key: StoreKey, value: SettingsType) => {
setValue(key, value.toString()) setValue(key, value.toString())
refreshSettings(key) refreshSettings(key)
...@@ -130,6 +137,9 @@ export const LocalStorageProvider = ({ ...@@ -130,6 +137,9 @@ export const LocalStorageProvider = ({
case StoreKey.EDITOR_LINE: case StoreKey.EDITOR_LINE:
setEditorLine(parseInteger(value, defaultConfig.editorLine)) setEditorLine(parseInteger(value, defaultConfig.editorLine))
break break
case StoreKey.EXAMPLE_QUERIES_VISITED:
setExampleQueriesVisited(value === "true")
break
case StoreKey.NOTIFICATION_ENABLED: case StoreKey.NOTIFICATION_ENABLED:
setIsNotificationEnabled( setIsNotificationEnabled(
parseBoolean(value, defaultConfig.isNotificationEnabled), parseBoolean(value, defaultConfig.isNotificationEnabled),
...@@ -168,6 +178,7 @@ export const LocalStorageProvider = ({ ...@@ -168,6 +178,7 @@ export const LocalStorageProvider = ({
editorSplitterBasis, editorSplitterBasis,
resultsSplitterBasis, resultsSplitterBasis,
updateSettings, updateSettings,
exampleQueriesVisited,
}} }}
> >
{children} {children}
......
...@@ -33,4 +33,5 @@ export type LocalConfig = { ...@@ -33,4 +33,5 @@ export type LocalConfig = {
queryText: string queryText: string
editorSplitterBasis: number editorSplitterBasis: number
resultsSplitterBasis: number resultsSplitterBasis: number
exampleQueriesVisited: boolean
} }
...@@ -78,9 +78,25 @@ const DocsearchInput = styled(Input)` ...@@ -78,9 +78,25 @@ const DocsearchInput = styled(Input)`
white-space: nowrap; white-space: nowrap;
` `
const QueryPickerButton = styled(SecondaryButton)` const QueryPickerButton = styled(SecondaryButton)<{
firstTimeVisitor: boolean
}>`
position: relative;
margin: 0 1rem; margin: 0 1rem;
flex: 0 0 auto; 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)` const MenuIcon = styled(_MenuIcon)`
...@@ -155,12 +171,19 @@ const Menu = () => { ...@@ -155,12 +171,19 @@ const Menu = () => {
const running = useSelector(selectors.query.getRunning) const running = useSelector(selectors.query.getRunning)
const opened = useSelector(selectors.console.getSideMenuOpened) const opened = useSelector(selectors.console.getSideMenuOpened)
const { sm } = useScreenSize() const { sm } = useScreenSize()
const { resultsSplitterBasis, updateSettings } = useLocalStorage() const {
resultsSplitterBasis,
exampleQueriesVisited,
updateSettings,
} = useLocalStorage()
const handleClick = useCallback(() => { const handleClick = useCallback(() => {
dispatch(actions.query.toggleRunning()) dispatch(actions.query.toggleRunning())
}, [dispatch]) }, [dispatch])
const handleToggle = useCallback((active) => { const handleToggle = useCallback((active) => {
if (!exampleQueriesVisited && active) {
updateSettings(StoreKey.EXAMPLE_QUERIES_VISITED, true)
}
setPopperActive(active) setPopperActive(active)
}, []) }, [])
const handleHidePicker = useCallback(() => { const handleHidePicker = useCallback(() => {
...@@ -238,7 +261,7 @@ const Menu = () => { ...@@ -238,7 +261,7 @@ const Menu = () => {
active={popperActive} active={popperActive}
onToggle={handleToggle} onToggle={handleToggle}
trigger={ trigger={
<QueryPickerButton onClick={handleClick}> <QueryPickerButton firstTimeVisitor={!exampleQueriesVisited}>
<Add size="18px" /> <Add size="18px" />
<span>Example queries</span> <span>Example queries</span>
</QueryPickerButton> </QueryPickerButton>
......
...@@ -27,6 +27,7 @@ export enum StoreKey { ...@@ -27,6 +27,7 @@ export enum StoreKey {
QUERY_TEXT = "query.text", QUERY_TEXT = "query.text",
EDITOR_LINE = "editor.line", EDITOR_LINE = "editor.line",
EDITOR_COL = "editor.col", EDITOR_COL = "editor.col",
EXAMPLE_QUERIES_VISITED = "editor.exampleQueriesVisited",
NOTIFICATION_ENABLED = "notification.enabled", NOTIFICATION_ENABLED = "notification.enabled",
NOTIFICATION_DELAY = "notification.delay", NOTIFICATION_DELAY = "notification.delay",
EDITOR_SPLITTER_BASIS = "splitter.editor.basis", EDITOR_SPLITTER_BASIS = "splitter.editor.basis",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册