import React, { useRef, useEffect, useState } from 'react'; import ChromeTabBar from './ChromeTabBar'; import ChromeAddressBar from './ChromeAddressBar'; import ChromeBookmarkBar from './ChromeBookmarkBar'; import SummaryPanel from './SummaryPanel'; import ScriptPanel from './ScriptPanel'; import IframeManager, { IframeManagerRef } from './IframeManager'; import MessageHandler from './MessageHandler'; import { useBrowserState } from '@/hooks/useBrowserState'; import { useChromeTabs } from '@/hooks/useChromeTabs'; const Browser = () => { const iframeRef = useRef(null); const [showBookmarkBar] = useState(true); const [showScriptPanel, setShowScriptPanel] = useState(false); const { bookmarks, summary, isSummaryVisible, canGoBack, canGoForward, loadUrl, goBack, goForward, addBookmark, setSummaryAndShow, hideSummary } = useBrowserState(); const { tabs, activeTab, addNewTab, selectTab, closeTab, updateTabTitle, updateTabUrl } = useChromeTabs(); const loadUrlIntoIframe = async (url: string, pushToHistory = true) => { if (iframeRef.current && activeTab) { await iframeRef.current.loadUrl(url); updateTabUrl(activeTab.id, url); if (pushToHistory) { await loadUrl(url, true); } } }; const handleBack = async () => { const prevUrl = goBack(); if (prevUrl) { await loadUrlIntoIframe(prevUrl, false); } }; const handleForward = async () => { const nextUrl = goForward(); if (nextUrl) { await loadUrlIntoIframe(nextUrl, false); } }; const handleRefresh = () => { if (iframeRef.current) { iframeRef.current.refresh(); } }; const handleHome = () => { const homeUrl = 'https://www.example.com/'; loadUrlIntoIframe(homeUrl); }; const handleSummarize = () => { if (iframeRef.current) { iframeRef.current.requestSummary(); } }; const handleShowScriptPanel = () => { setShowScriptPanel(true); }; const handleCloseScriptPanel = () => { setShowScriptPanel(false); }; const handleInjectScript = (script: string) => { if (iframeRef.current) { iframeRef.current.injectScript(script); } }; const handleNavigateToBookmark = (url: string) => { loadUrlIntoIframe(url); }; const handleTitleChange = (title: string) => { if (activeTab) { updateTabTitle(activeTab.id, title); } }; useEffect(() => { if (activeTab) { loadUrlIntoIframe(activeTab.url); } }, [activeTab?.id]); useEffect(() => { // Load default page for initial tab const defaultUrl = 'https://www.example.com/'; loadUrlIntoIframe(defaultUrl); }, []); return (
{showScriptPanel && ( )}
); }; export default Browser;