added extension handling for refetching aliases

This commit is contained in:
Myzel394 2022-12-18 13:30:31 +01:00
parent e88bf31257
commit 44c29bae12
4 changed files with 37 additions and 0 deletions

View File

@ -5,6 +5,7 @@ import {useEvent} from "react-use"
import {ExtensionKleckEvent} from "~/extension-types" import {ExtensionKleckEvent} from "~/extension-types"
import {User} from "~/server-types" import {User} from "~/server-types"
import {AUTHENTICATION_PATHS} from "~/constants/values" import {AUTHENTICATION_PATHS} from "~/constants/values"
import {queryClient} from "~/constants/react-query"
export interface UseExtensionHandlerResult { export interface UseExtensionHandlerResult {
sharePassword: () => void sharePassword: () => void
@ -80,6 +81,21 @@ export default function useExtensionHandler(
} }
break break
case "refetch-aliases":
if (document.visibilityState !== "visible") {
return
}
;(async () => {
await Promise.allSettled([
queryClient.invalidateQueries({
queryKey: ["get_alias"],
}),
queryClient.invalidateQueries({
queryKey: ["get_aliases"],
}),
])
})()
} }
}, },
[dispatchPasswordStatus], [dispatchPasswordStatus],

View File

@ -14,11 +14,16 @@ interface ExtensionKleckMessageEnterPassword {
type: "enter-password" type: "enter-password"
} }
interface ExtensionKleckMessageRefetchAliases {
type: "refetch-aliases"
}
export type ExtensionKleckMessage = export type ExtensionKleckMessage =
| ExtensionKleckMessagePasswordStatus | ExtensionKleckMessagePasswordStatus
| ExtensionKleckMessageAskForPassword | ExtensionKleckMessageAskForPassword
| ExtensionKleckMessageUser | ExtensionKleckMessageUser
| ExtensionKleckMessageEnterPassword | ExtensionKleckMessageEnterPassword
| ExtensionKleckMessageRefetchAliases
export type ExtensionKleckEvent = MessageEvent & { export type ExtensionKleckEvent = MessageEvent & {
detail: ExtensionKleckMessage detail: ExtensionKleckMessage

View File

@ -16,3 +16,5 @@ export * from "./use-is-any-input-focused"
export {default as useIsAnyInputFocused} from "./use-is-any-input-focused" export {default as useIsAnyInputFocused} from "./use-is-any-input-focused"
export * from "./use-extension-handler" export * from "./use-extension-handler"
export {default as useExtensionHandler} from "./use-extension-handler" export {default as useExtensionHandler} from "./use-extension-handler"
export * from "./use-window-visible"
export {default as useWindowVisible} from "./use-window-visible"

View File

@ -0,0 +1,14 @@
import {useCallback, useState} from "react"
import {useEvent} from "react-use"
export default function useWindowVisible(isVisibleByDefault = true): boolean {
const [isVisible, setIsVisible] = useState<boolean>(isVisibleByDefault)
const handleVisibilityChange = useCallback(() => {
setIsVisible(document.visibilityState === "visible")
}, [])
useEvent("visibilitychange", handleVisibilityChange, document)
return isVisible
}