diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 431485a7..42efabbe 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -21,6 +21,7 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import AppLayout from "components/layout/AppLayout"; import { AuthProvider } from "contexts/AuthProvider"; import { ClientProvider } from "contexts/ClientProvider"; +import { EventStreamProvider } from "contexts/EventStreamProvider"; import { NotificationProvider } from "contexts/NotificationProvider"; import { RepositoryProvider } from "contexts/RepositoryProvider"; import { ThemeProvider } from "contexts/ThemeProvider"; @@ -42,7 +43,9 @@ export default function App(): React.JSX.Element { - + + + diff --git a/frontend/src/components/common/AutoRefreshControl.tsx b/frontend/src/components/common/AutoRefreshControl.tsx deleted file mode 100644 index 479281c4..00000000 --- a/frontend/src/components/common/AutoRefreshControl.tsx +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2021-2026 ahriman team. - * - * This file is part of ahriman - * (see https://github.com/arcan1s/ahriman). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -import CheckIcon from "@mui/icons-material/Check"; -import TimerIcon from "@mui/icons-material/Timer"; -import TimerOffIcon from "@mui/icons-material/TimerOff"; -import { IconButton, ListItemIcon, ListItemText, Menu, MenuItem, Tooltip } from "@mui/material"; -import type { AutoRefreshInterval } from "models/AutoRefreshInterval"; -import React, { useState } from "react"; - -interface AutoRefreshControlProps { - currentInterval: number; - intervals: AutoRefreshInterval[]; - onIntervalChange: (interval: number) => void; -} - -export default function AutoRefreshControl({ - currentInterval, - intervals, - onIntervalChange, -}: AutoRefreshControlProps): React.JSX.Element | null { - const [anchorEl, setAnchorEl] = useState(null); - - if (intervals.length === 0) { - return null; - } - - const enabled = currentInterval > 0; - - return <> - - setAnchorEl(event.currentTarget)} - size="small" - > - {enabled ? : } - - - setAnchorEl(null)} - open={Boolean(anchorEl)} - > - { - onIntervalChange(0); - setAnchorEl(null); - }} - selected={!enabled} - > - - {!enabled && } - - Off - - {intervals.map(interval => - { - onIntervalChange(interval.interval); - setAnchorEl(null); - }} - selected={enabled && interval.interval === currentInterval} - > - - {enabled && interval.interval === currentInterval && } - - {interval.text} - , - )} - - ; -} diff --git a/frontend/src/components/dialogs/PackageInfoDialog.tsx b/frontend/src/components/dialogs/PackageInfoDialog.tsx index 8066b260..0a608596 100644 --- a/frontend/src/components/dialogs/PackageInfoDialog.tsx +++ b/frontend/src/components/dialogs/PackageInfoDialog.tsx @@ -32,27 +32,22 @@ import PkgbuildTab from "components/package/PkgbuildTab"; import { type TabKey, tabs } from "components/package/TabKey"; import { QueryKeys } from "hooks/QueryKeys"; import { useAuth } from "hooks/useAuth"; -import { useAutoRefresh } from "hooks/useAutoRefresh"; import { useClient } from "hooks/useClient"; import { useNotification } from "hooks/useNotification"; import { useRepository } from "hooks/useRepository"; -import type { AutoRefreshInterval } from "models/AutoRefreshInterval"; import type { Dependencies } from "models/Dependencies"; import type { PackageStatus } from "models/PackageStatus"; import type { Patch } from "models/Patch"; import React, { useState } from "react"; import { StatusHeaderStyles } from "theme/StatusColors"; -import { defaultInterval } from "utils"; interface PackageInfoDialogProps { - autoRefreshIntervals: AutoRefreshInterval[]; onClose: () => void; open: boolean; packageBase: string | null; } export default function PackageInfoDialog({ - autoRefreshIntervals, onClose, open, packageBase, @@ -77,14 +72,11 @@ export default function PackageInfoDialog({ onClose(); }; - const autoRefresh = useAutoRefresh("package-info-autoreload-button", defaultInterval(autoRefreshIntervals)); - const { data: packageData } = useQuery({ enabled: open, queryFn: localPackageBase && currentRepository ? () => client.fetch.fetchPackage(localPackageBase, currentRepository) : skipToken, queryKey: localPackageBase && currentRepository ? QueryKeys.package(localPackageBase, currentRepository) : ["packages"], - refetchInterval: autoRefresh.interval > 0 ? autoRefresh.interval : false, }); const { data: dependencies } = useQuery({ @@ -182,7 +174,6 @@ export default function PackageInfoDialog({ {activeTab === "logs" && localPackageBase && currentRepository && } @@ -207,11 +198,8 @@ export default function PackageInfoDialog({ void handleHoldToggle()} onRefreshDatabaseChange={setRefreshDatabase} onRemove={() => void handleRemove()} diff --git a/frontend/src/components/layout/AppLayout.tsx b/frontend/src/components/layout/AppLayout.tsx index feb20241..dde95ff3 100644 --- a/frontend/src/components/layout/AppLayout.tsx +++ b/frontend/src/components/layout/AppLayout.tsx @@ -69,7 +69,7 @@ export default function AppLayout(): React.JSX.Element { - +