import React, { useState, useEffect, useRef } from 'react' import Settings from './Settings' import { AppEntry } from './Settings' interface HeaderProps { activeApp: string setActiveApp: (name: string) => void onAppsChange: (apps: AppEntry[]) => void onMovieSearch: (query: string) => void onBookmark: (title: string, url: string, poster: string, source: string) => void onBookmarkRemove: (index: number) => void bookmarks: import('./Settings').Bookmark[] } const Header: React.FC = ({ activeApp, setActiveApp, onAppsChange, onMovieSearch, onBookmark, onBookmarkRemove, bookmarks }) => { const [isCollapsed, setIsCollapsed] = useState(false) const [isHovered, setIsHovered] = useState(false) const [leftDisabled, setLeftDisabled] = useState(true) const [rightDisabled, setRightDisabled] = useState(true) const [refreshDisabled, setRefreshDisabled] = useState(true) const [showSettings, setShowSettings] = useState(false) const timeoutRef = useRef | null>(null) const activeAppRef = useRef(activeApp) useEffect(() => { activeAppRef.current = activeApp }, [activeApp]) useEffect(() => { if (!window.electron) return const offCloseApp = window.electron.on('closeApp', () => { window.electron!.removeView(activeAppRef.current) setIsCollapsed(false) setActiveApp('home') }) const offWebButtons = window.electron.on('updateWebButtons', (app: { historyPosition: number; history: string[] }) => { setLeftDisabled(app.historyPosition === 0) setRightDisabled(app.historyPosition === app.history.length - 1) setRefreshDisabled(false) }) return () => { offCloseApp(); offWebButtons() } }, [setActiveApp]) const closeCurrentApp = () => { window.electron?.confirm('Закрыть приложение?', 'closeApp') } const openSettings = () => { if (appOpen) window.electron?.hideView() setShowSettings(true) } const closeSettings = () => { setShowSettings(false) if (appOpen) window.electron?.showView(activeApp) } const toggleCollapse = () => { if (isCollapsed) { setIsCollapsed(false) setIsHovered(false) window.electron?.expandWithHeader() } else { setIsCollapsed(true) window.electron?.collapseWithHeader() } } const handleMouseEnter = () => { if (timeoutRef.current) clearTimeout(timeoutRef.current) timeoutRef.current = setTimeout(() => { if (isCollapsed) { setIsHovered(true) window.electron?.expandWithHeader() } }, 150) } const handleMouseLeave = () => { if (timeoutRef.current) clearTimeout(timeoutRef.current) timeoutRef.current = setTimeout(() => { if (isCollapsed) { setIsHovered(false) window.electron?.collapseWithHeader() } }, 150) } const backwardPage = () => { setLeftDisabled(true) setRightDisabled(true) setRefreshDisabled(true) window.electron?.backwardPage() } const forwardPage = () => { setLeftDisabled(true) setRightDisabled(true) setRefreshDisabled(true) window.electron?.forwardPage() } const refreshPage = () => { setRefreshDisabled(true) window.electron?.refreshPage() } const appOpen = activeApp !== 'home' && activeApp !== 'movie-search' const showSearchIcon = activeApp === 'home' || activeApp === 'movie-search' const [isBookmarked, setIsBookmarked] = useState(false) const handleBookmark = () => { window.electron?.getCurrentPage().then((page: any) => { if (!page) return let pageHost = '' try { pageHost = new URL(page.url).hostname } catch (_) {} const existingIdx = bookmarks.findIndex(b => { try { return new URL(b.url).hostname === pageHost } catch (_) { return false } }) if (existingIdx !== -1) { onBookmarkRemove(existingIdx) setIsBookmarked(false) } else { onBookmark(page.name, page.url, page.imageUrl || '', '') setIsBookmarked(true) } }) } useEffect(() => { if (!appOpen) { setIsBookmarked(false); return } window.electron?.getCurrentPage().then((page: any) => { if (!page) return let pageHost = '' try { pageHost = new URL(page.url).hostname } catch (_) {} setIsBookmarked(bookmarks.some(b => { try { return new URL(b.url).hostname === pageHost } catch (_) { return false } })) }) }, [activeApp, bookmarks, appOpen]) return ( <>
{(!isCollapsed || isHovered) && ( <>
{appOpen && ( <> )}
{showSearchIcon && ( )} {appOpen && ( )}
)}
{showSettings && ( )} ) } export default Header