/
githubmirror
/
client
Обзор
Документация
Войти
/
githubmirror
/
client
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
shared/desktop/remote/remote-component.desktop.tsx
68 строк
2 KB
chrisnojima
build(mobile): harden gobuild.sh and go bind pipeline 2 (#29364)
08 июл 2026, 15:25
Не верифицирован
08 июл 2026, 15:25
19b55b3
Код
Авторство
О чём код?
import * as React from 'react' import logger from '@/logger' import {useDarkModeState} from '@/stores/darkmode' import KB2 from '@/util/electron' const {getRemoteProps, ipcRendererOn, showInactive} = KB2.functions export const remoteComponentNames = ['unlock-folders', 'menubar', 'pinentry', 'tracker'] as const export type RemoteComponentName = (typeof remoteComponentNames)[number] type UseRemotePropsReceiverOptions = { component: RemoteComponentName param: string showOnProps?: boolean } export const getRemoteComponentParam = () => new URLSearchParams(window!.location.search).get('param') ?? '' // darkMode rides along in the serialized props envelope; undefined until props arrive export const useRemoteDarkModeSync = (darkMode?: boolean) => { const setSystemDarkMode = useDarkModeState(s => s.dispatch.setSystemDarkMode) React.useEffect(() => { if (darkMode !== undefined) { setSystemDarkMode(darkMode) // hidden/transparent remote windows don't reliably get prefers-color-scheme // media query updates, so drive the CSS light-dark() resolution explicitly document.documentElement.style.colorScheme = darkMode ? 'dark' : 'light' } }, [darkMode, setSystemDarkMode]) } export const useRemotePropsReceiver = <P,>(options: UseRemotePropsReceiverOptions) => { const {component, param, showOnProps = true} = options const [value, setValue] = React.useState<(P & {darkMode: boolean}) | null>(null) const hasShownWindow = React.useRef(false) React.useEffect(() => { const onProps = (raw: string) => { if (!raw) return try { setValue(JSON.parse(raw) as P & {darkMode: boolean}) } catch (error) { logger.error('remote props parse failed', component, param, error) } } // subscribe before pulling so an update can't slip between the two const unsubscribe = ipcRendererOn?.('KBprops', (_event: unknown, raw: unknown) => { onProps(raw as string) }) getRemoteProps?.(component, param) .then(onProps) .catch(() => {}) return () => unsubscribe?.() }, [component, param]) React.useEffect(() => { if (!value || !showOnProps || hasShownWindow.current) { return } hasShownWindow.current = true showInactive?.() }, [showOnProps, value]) return value }