import { useState } from "react"; import { useShallow } from "zustand/react/shallow"; import TerminalTabs from "../terminal/TerminalTabs"; import { useAppState } from "../../store/appState"; import { useSettings } from "../../hooks/useSettings"; import UpdateDialog from "../settings/UpdateDialog"; import ImageUpdateDialog from "../settings/ImageUpdateDialog"; export default function TopBar() { const { dockerAvailable, imageExists, updateInfo, imageUpdateInfo, appVersion, setUpdateInfo, setImageUpdateInfo } = useAppState( useShallow(s => ({ dockerAvailable: s.dockerAvailable, imageExists: s.imageExists, updateInfo: s.updateInfo, imageUpdateInfo: s.imageUpdateInfo, appVersion: s.appVersion, setUpdateInfo: s.setUpdateInfo, setImageUpdateInfo: s.setImageUpdateInfo, })) ); const { appSettings, saveSettings } = useSettings(); const [showUpdateDialog, setShowUpdateDialog] = useState(false); const [showImageUpdateDialog, setShowImageUpdateDialog] = useState(false); const handleDismiss = async () => { if (appSettings && updateInfo) { await saveSettings({ ...appSettings, dismissed_update_version: updateInfo.version, }); } setUpdateInfo(null); setShowUpdateDialog(false); }; const handleImageUpdateDismiss = async () => { if (appSettings && imageUpdateInfo) { await saveSettings({ ...appSettings, dismissed_image_digest: imageUpdateInfo.remote_digest, }); } setImageUpdateInfo(null); setShowImageUpdateDialog(false); }; return ( <>
{updateInfo && ( )} {imageUpdateInfo && ( )}
{showUpdateDialog && updateInfo && ( setShowUpdateDialog(false)} /> )} {showImageUpdateDialog && imageUpdateInfo && ( setShowImageUpdateDialog(false)} /> )} ); } function StatusDot({ ok, label }: { ok: boolean; label: string }) { return ( {label} ); }