Simplify error catching

This commit is contained in:
Michael Shamoon 2022-11-07 09:24:15 -08:00
parent 00163d2f44
commit 8a783ba9f6
41 changed files with 93 additions and 113 deletions

View File

@ -12,7 +12,7 @@ export default function Widget({ options }) {
options.type = "unifi_console"; options.type = "unifi_console";
const { data: statsData, error: statsError } = useWidgetAPI(options, "stat/sites", { index: options.index }); const { data: statsData, error: statsError } = useWidgetAPI(options, "stat/sites", { index: options.index });
if (statsError || statsData?.error) { if (statsError) {
return ( return (
<div className="flex flex-col justify-center first:ml-0 ml-4"> <div className="flex flex-col justify-center first:ml-0 ml-4">
<div className="flex flex-row items-center justify-end"> <div className="flex flex-row items-center justify-end">

View File

@ -3,5 +3,11 @@ import useSWR from "swr";
import { formatProxyUrl } from "./api-helpers"; import { formatProxyUrl } from "./api-helpers";
export default function useWidgetAPI(widget, ...options) { export default function useWidgetAPI(widget, ...options) {
return useSWR(formatProxyUrl(widget, ...options)); const config = {};
if (options?.refreshInterval) {
config.refreshInterval = options.refreshInterval;
}
const { data, error } = useSWR(formatProxyUrl(widget, ...options), config);
// make the data error the top-level error
return { data, error: data?.error ?? error }
} }

View File

@ -11,10 +11,10 @@ export default function Component({ service }) {
const { data: adguardData, error: adguardError } = useWidgetAPI(widget, "stats"); const { data: adguardData, error: adguardError } = useWidgetAPI(widget, "stats");
if (adguardError || adguardData?.error) { if (adguardError) {
const finalError = adguardError ?? adguardData.error; return <Container error={adguardError} />;
return <Container error={finalError} />;
} }
if (!adguardData) { if (!adguardData) {
return ( return (
<Container service={service}> <Container service={service}>

View File

@ -13,8 +13,8 @@ export default function Component({ service }) {
const { data: loginsData, error: loginsError } = useWidgetAPI(widget, "login"); const { data: loginsData, error: loginsError } = useWidgetAPI(widget, "login");
const { data: failedLoginsData, error: failedLoginsError } = useWidgetAPI(widget, "login_failed"); const { data: failedLoginsData, error: failedLoginsError } = useWidgetAPI(widget, "login_failed");
if (usersError || usersData?.error || loginsError || loginsData?.error || failedLoginsError || failedLoginsData?.error) { if (usersError || loginsError || failedLoginsError) {
const finalError = usersError ?? usersData?.error ?? loginsError ?? loginsData?.error ?? failedLoginsError ?? failedLoginsData?.error; const finalError = usersError ?? loginsError ?? failedLoginsError;
return <Container error={finalError} />; return <Container error={finalError} />;
} }

View File

@ -13,8 +13,8 @@ export default function Component({ service }) {
const { data: filtersData, error: filtersError } = useWidgetAPI(widget, "filters"); const { data: filtersData, error: filtersError } = useWidgetAPI(widget, "filters");
const { data: indexersData, error: indexersError } = useWidgetAPI(widget, "indexers"); const { data: indexersData, error: indexersError } = useWidgetAPI(widget, "indexers");
if (statsError || statsData?.error || filtersError || filtersData?.error || indexersError || indexersData?.error) { if (statsError || filtersError || indexersError) {
const finalError = statsError ?? statsData?.error ?? filtersError ?? filtersData?.error ?? indexersError ?? indexersData?.error; const finalError = statsError ?? filtersError ?? indexersError;
return <Container error={finalError} />; return <Container error={finalError} />;
} }

View File

@ -12,8 +12,8 @@ export default function Component({ service }) {
const { data: episodesData, error: episodesError } = useWidgetAPI(widget, "episodes"); const { data: episodesData, error: episodesError } = useWidgetAPI(widget, "episodes");
const { data: moviesData, error: moviesError } = useWidgetAPI(widget, "movies"); const { data: moviesData, error: moviesError } = useWidgetAPI(widget, "movies");
if (moviesError || moviesData?.error || episodesError || episodesData?.error) { if (moviesError || episodesError) {
const finalError = moviesError ?? moviesData?.error ?? episodesError ?? episodesData?.error; const finalError = moviesError ?? episodesError;
return <Container error={finalError} />; return <Container error={finalError} />;
} }

View File

@ -11,9 +11,8 @@ export default function Component({ service }) {
const { data, error } = useWidgetAPI(widget, "info"); const { data, error } = useWidgetAPI(widget, "info");
if (error || data?.error) { if (error) {
const finalError = error ?? data.error; return <Container error={error} />;
return <Container error={finalError} />;
} }
const totalObserved = Object.keys(data).length; const totalObserved = Object.keys(data).length;
let diffsDetected = 0; let diffsDetected = 0;

View File

@ -36,9 +36,8 @@ export default function Component({ service }) {
); );
} }
if (statsError || statsData?.error) { if (statsError) {
const finalError = statsError ?? statsData.error; return <Container error={statsError} />;
return <Container error={finalError} />;
} }
if (!statsData || !dateRange) { if (!statsData || !dateRange) {

View File

@ -1,10 +1,10 @@
import useSWR from "swr";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import { BsVolumeMuteFill, BsFillPlayFill, BsPauseFill, BsCpu, BsFillCpuFill } from "react-icons/bs"; import { BsVolumeMuteFill, BsFillPlayFill, BsPauseFill, BsCpu, BsFillCpuFill } from "react-icons/bs";
import { MdOutlineSmartDisplay } from "react-icons/md"; import { MdOutlineSmartDisplay } from "react-icons/md";
import { formatProxyUrl, formatProxyUrlWithSegments } from "utils/proxy/api-helpers";
import Container from "components/services/widget/container"; import Container from "components/services/widget/container";
import { formatProxyUrlWithSegments } from "utils/proxy/api-helpers";
import useWidgetAPI from "utils/proxy/use-widget-api";
function ticksToTime(ticks) { function ticksToTime(ticks) {
const milliseconds = ticks / 10000; const milliseconds = ticks / 10000;
@ -157,7 +157,7 @@ export default function Component({ service }) {
data: sessionsData, data: sessionsData,
error: sessionsError, error: sessionsError,
mutate: sessionMutate, mutate: sessionMutate,
} = useSWR(formatProxyUrl(widget, "Sessions"), { } = useWidgetAPI(widget, "Sessions", {
refreshInterval: 5000, refreshInterval: 5000,
}); });
@ -171,9 +171,8 @@ export default function Component({ service }) {
}); });
} }
if (sessionsError || sessionsData?.error) { if (sessionsError) {
const finalError = sessionsError ?? sessionsData.error; return <Container error={sessionsError} />;
return <Container error={finalError} />;
} }
if (!sessionsData) { if (!sessionsData) {

View File

@ -9,8 +9,8 @@ export default function Component({ service }) {
const { data: messagesData, error: messagesError } = useWidgetAPI(widget, "message"); const { data: messagesData, error: messagesError } = useWidgetAPI(widget, "message");
const { data: clientsData, error: clientsError } = useWidgetAPI(widget, "client"); const { data: clientsData, error: clientsError } = useWidgetAPI(widget, "client");
if (appsError || appsData?.error || messagesError || messagesData?.error || clientsError || clientsData?.error) { if (appsError || messagesError || clientsError) {
const finalError = appsError ?? appsData?.error ?? messagesError ?? messagesData?.error ?? clientsError ?? clientsData?.error; const finalError = appsError ?? messagesError ?? clientsError;
return <Container error={finalError} />; return <Container error={finalError} />;
} }

View File

@ -11,9 +11,8 @@ export default function Component({ service }) {
const { data: homebridgeData, error: homebridgeError } = useWidgetAPI(widget, "info"); const { data: homebridgeData, error: homebridgeError } = useWidgetAPI(widget, "info");
if (homebridgeError || homebridgeData?.error) { if (homebridgeError) {
const finalError = homebridgeError ?? homebridgeData.error; return <Container error={homebridgeError} />;
return <Container error={finalError} />;
} }
if (!homebridgeData) { if (!homebridgeData) {

View File

@ -11,9 +11,8 @@ export default function Component({ service }) {
const { data: indexersData, error: indexersError } = useWidgetAPI(widget, "indexers"); const { data: indexersData, error: indexersError } = useWidgetAPI(widget, "indexers");
if (indexersError || indexersData?.error) { if (indexersError) {
const finalError = indexersError ?? indexersData.error; return <Container error={indexersError} />;
return <Container error={finalError} />;
} }
if (!indexersData) { if (!indexersData) {

View File

@ -7,9 +7,8 @@ export default function Component({ service }) {
const { data: statsData, error: statsError } = useWidgetAPI(widget, "request/count"); const { data: statsData, error: statsError } = useWidgetAPI(widget, "request/count");
if (statsError || statsData?.error) { if (statsError) {
const finalError = statsError ?? statsData.error; return <Container error={statsError} />;
return <Container error={finalError} />;
} }
if (!statsData) { if (!statsData) {

View File

@ -13,8 +13,8 @@ export default function Component({ service }) {
const { data: wantedData, error: wantedError } = useWidgetAPI(widget, "wanted/missing"); const { data: wantedData, error: wantedError } = useWidgetAPI(widget, "wanted/missing");
const { data: queueData, error: queueError } = useWidgetAPI(widget, "queue/status"); const { data: queueData, error: queueError } = useWidgetAPI(widget, "queue/status");
if (albumsError || albumsData?.error || wantedError || wantedData?.error || queueError || queueData?.error) { if (albumsError || wantedError || queueError) {
const finalError = albumsError ?? albumsData?.error ?? wantedError ?? wantedData?.error ?? queueError ?? queueData?.error; const finalError = albumsError ?? wantedError ?? queueError;
return <Container error={finalError} />; return <Container error={finalError} />;
} }

View File

@ -11,9 +11,8 @@ export default function Component({ service }) {
const { data: statsData, error: statsError } = useWidgetAPI(widget, "instance"); const { data: statsData, error: statsError } = useWidgetAPI(widget, "instance");
if (statsError || statsData?.error) { if (statsError) {
const finalError = statsError ?? statsData.error; return <Container error={statsError} />;
return <Container error={finalError} />;
} }
if (!statsData) { if (!statsData) {

View File

@ -26,8 +26,8 @@ export default function Component({ service }) {
const { data: navidromeData, error: navidromeError } = useWidgetAPI(widget, "getNowPlaying"); const { data: navidromeData, error: navidromeError } = useWidgetAPI(widget, "getNowPlaying");
if (navidromeError || navidromeData?.error || navidromeData?.["subsonic-response"]?.error) { if (navidromeError || navidromeData?.["subsonic-response"]?.error) {
return <Container error={t("widget.api_error")} />; return <Container error={navidromeError ?? navidromeData?.["subsonic-response"]?.error} />;
} }
if (!navidromeData) { if (!navidromeData) {

View File

@ -11,9 +11,8 @@ export default function Component({ service }) {
const { data: statusData, error: statusError } = useWidgetAPI(widget, "status"); const { data: statusData, error: statusError } = useWidgetAPI(widget, "status");
if (statusError || statusData?.error) { if (statusError) {
const finalError = statusError ?? statusData.error; return <Container error={statusError} />;
return <Container error={finalError} />;
} }
if (!statusData) { if (!statusData) {

View File

@ -7,9 +7,8 @@ export default function Component({ service }) {
const { data: statsData, error: statsError } = useWidgetAPI(widget, "Request/count"); const { data: statsData, error: statsError } = useWidgetAPI(widget, "Request/count");
if (statsError || statsData?.error) { if (statsError) {
const finalError = statsError ?? statsData.error; return <Container error={statsError} />;
return <Container error={finalError} />;
} }
if (!statsData) { if (!statsData) {

View File

@ -7,9 +7,8 @@ export default function Component({ service }) {
const { data: statsData, error: statsError } = useWidgetAPI(widget, "request/count"); const { data: statsData, error: statsError } = useWidgetAPI(widget, "request/count");
if (statsError || statsData?.error) { if (statsError) {
const finalError = statsError ?? statsData.error; return <Container error={statsError} />;
return <Container error={finalError} />;
} }
if (!statsData) { if (!statsData) {

View File

@ -11,9 +11,8 @@ export default function Component({ service }) {
const { data: piholeData, error: piholeError } = useWidgetAPI(widget, "api.php"); const { data: piholeData, error: piholeError } = useWidgetAPI(widget, "api.php");
if (piholeError || piholeData?.error) { if (piholeError) {
const finalError = piholeError ?? piholeData.error; return <Container error={piholeError} />;
return <Container error={finalError} />;
} }
if (!piholeData) { if (!piholeData) {

View File

@ -1,22 +1,20 @@
import useSWR from "swr";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import Block from "components/services/widget/block"; import Block from "components/services/widget/block";
import Container from "components/services/widget/container"; import Container from "components/services/widget/container";
import { formatProxyUrl } from "utils/proxy/api-helpers"; import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) { export default function Component({ service }) {
const { t } = useTranslation(); const { t } = useTranslation();
const { widget } = service; const { widget } = service;
const { data: plexData, error: plexAPIError } = useSWR(formatProxyUrl(widget, "unified"), { const { data: plexData, error: plexAPIError } = useWidgetAPI(widget, "unified", {
refreshInterval: 5000, refreshInterval: 5000,
}); });
if (plexAPIError || plexData?.error) { if (plexAPIError) {
const finalError = plexAPIError ?? plexData.error; return <Container error={plexAPIError} />;
return <Container error={finalError} />;
} }
if (!plexData) { if (!plexData) {

View File

@ -67,7 +67,7 @@ export default async function plexProxyHandler(req, res) {
let [status, apiData] = await fetchFromPlexAPI("/status/sessions", widget); let [status, apiData] = await fetchFromPlexAPI("/status/sessions", widget);
if (status !== 200) { if (status !== 200) {
return res.status(status).json({error: {message: "HTTP error communicating with Plex API", data: apiData}}); return res.status(status).json({error: {message: "HTTP error communicating with Plex API", data: Buffer.from(apiData).toString()}});
} }
if (apiData && apiData.MediaContainer) { if (apiData && apiData.MediaContainer) {

View File

@ -13,9 +13,8 @@ export default function Component({ service }) {
all: 1, all: 1,
}); });
if (containersError || containersData?.error) { if (containersError) {
const finalError = containersError ?? containersData.error; return <Container error={containersError} />;
return <Container error={finalError} />;
} }
if (!containersData) { if (!containersData) {

View File

@ -8,8 +8,8 @@ export default function Component({ service }) {
const { data: indexersData, error: indexersError } = useWidgetAPI(widget, "indexer"); const { data: indexersData, error: indexersError } = useWidgetAPI(widget, "indexer");
const { data: grabsData, error: grabsError } = useWidgetAPI(widget, "indexerstats"); const { data: grabsData, error: grabsError } = useWidgetAPI(widget, "indexerstats");
if (indexersError || indexersData?.error || grabsError || grabsData?.error) { if (indexersError || grabsError) {
const finalError = indexersError ?? indexersData?.error ?? grabsError ?? grabsData?.error; const finalError = indexersError ?? grabsError;
return <Container error={finalError} />; return <Container error={finalError} />;
} }

View File

@ -15,9 +15,8 @@ export default function Component({ service }) {
const { data: clusterData, error: clusterError } = useWidgetAPI(widget, "cluster/resources"); const { data: clusterData, error: clusterError } = useWidgetAPI(widget, "cluster/resources");
if (clusterError || clusterData?.error) { if (clusterError) {
const finalError = clusterError ?? clusterData.error; return <Container error={clusterError} />;
return <Container error={finalError} />;
} }
if (!clusterData || !clusterData.data) { if (!clusterData || !clusterData.data) {

View File

@ -9,8 +9,8 @@ export default function Component({ service }) {
const { widget } = service; const { widget } = service;
const { data: pyloadData, error: pyloadError } = useWidgetAPI(widget, "status"); const { data: pyloadData, error: pyloadError } = useWidgetAPI(widget, "status");
if (pyloadError || pyloadData?.error) { if (pyloadError) {
return <Container error={t("widget.api_error")} />; return <Container error={pyloadError} />;
} }
if (!pyloadData) { if (!pyloadData) {

View File

@ -11,9 +11,8 @@ export default function Component({ service }) {
const { data: torrentData, error: torrentError } = useWidgetAPI(widget, "torrents/info"); const { data: torrentData, error: torrentError } = useWidgetAPI(widget, "torrents/info");
if (torrentError || torrentData?.error) { if (torrentError) {
const finalError = torrentError ?? torrentData.error; return <Container error={torrentError} />;
return <Container error={finalError} />;
} }
if (!torrentData) { if (!torrentData) {

View File

@ -8,8 +8,8 @@ export default function Component({ service }) {
const { data: moviesData, error: moviesError } = useWidgetAPI(widget, "movie"); const { data: moviesData, error: moviesError } = useWidgetAPI(widget, "movie");
const { data: queuedData, error: queuedError } = useWidgetAPI(widget, "queue/status"); const { data: queuedData, error: queuedError } = useWidgetAPI(widget, "queue/status");
if (moviesError || moviesData?.error || queuedError || queuedData?.error) { if (moviesError || queuedError) {
const finalError = moviesError ?? moviesData?.error ?? queuedError ?? queuedData?.error; const finalError = moviesError ?? queuedError;
return <Container error={finalError} />; return <Container error={finalError} />;
} }

View File

@ -13,8 +13,8 @@ export default function Component({ service }) {
const { data: wantedData, error: wantedError } = useWidgetAPI(widget, "wanted/missing"); const { data: wantedData, error: wantedError } = useWidgetAPI(widget, "wanted/missing");
const { data: queueData, error: queueError } = useWidgetAPI(widget, "queue/status"); const { data: queueData, error: queueError } = useWidgetAPI(widget, "queue/status");
if (booksError || booksData?.error || wantedError || wantedData?.error || queueError || queueData?.error) { if (booksError || wantedError || queueError) {
const finalError = booksError ?? booksData?.error ?? wantedError ?? wantedData?.error ?? queueError ?? queueData?.error; const finalError = booksError ?? wantedError ?? queueError;
return <Container error={finalError} />; return <Container error={finalError} />;
} }

View File

@ -11,9 +11,8 @@ export default function Component({ service }) {
const { data: statusData, error: statusError } = useWidgetAPI(widget); const { data: statusData, error: statusError } = useWidgetAPI(widget);
if (statusError || statusData?.error) { if (statusError) {
const finalError = statusError ?? statusData.error; return <Container error={statusError} />;
return <Container error={finalError} />;
} }
if (!statusData) { if (!statusData) {

View File

@ -21,9 +21,8 @@ export default function Component({ service }) {
const { data: queueData, error: queueError } = useWidgetAPI(widget, "queue"); const { data: queueData, error: queueError } = useWidgetAPI(widget, "queue");
if (queueError || queueData?.error) { if (queueError) {
const finalError = queueError ?? queueData.error; return <Container error={queueError} />;
return <Container error={finalError} />;
} }
if (!queueData) { if (!queueData) {

View File

@ -9,8 +9,8 @@ export default function Component({ service }) {
const { data: queuedData, error: queuedError } = useWidgetAPI(widget, "queue"); const { data: queuedData, error: queuedError } = useWidgetAPI(widget, "queue");
const { data: seriesData, error: seriesError } = useWidgetAPI(widget, "series"); const { data: seriesData, error: seriesError } = useWidgetAPI(widget, "series");
if (wantedError || wantedData?.error || queuedError || queuedData?.error || seriesError || seriesData?.error) { if (wantedError || queuedError || seriesError) {
const finalError = wantedError ?? wantedData?.error ?? queuedError ?? queuedData?.error ?? seriesError ?? seriesData?.error; const finalError = wantedError ?? queuedError ?? seriesError;
return <Container error={finalError} />; return <Container error={finalError} />;
} }

View File

@ -11,9 +11,8 @@ export default function Component({ service }) {
const { data: speedtestData, error: speedtestError } = useWidgetAPI(widget, "speedtest/latest"); const { data: speedtestData, error: speedtestError } = useWidgetAPI(widget, "speedtest/latest");
if (speedtestError || speedtestData?.error) { if (speedtestError) {
const finalError = speedtestError ?? speedtestData.error; return <Container error={speedtestError} />;
return <Container error={finalError} />;
} }
if (!speedtestData) { if (!speedtestData) {

View File

@ -11,9 +11,8 @@ export default function Component({ service }) {
const { data: statsData, error: statsError } = useWidgetAPI(widget, "status"); const { data: statsData, error: statsError } = useWidgetAPI(widget, "status");
if (statsError || statsData?.error) { if (statsError) {
const finalError = statsError ?? statsData.error; return <Container error={statsError} />;
return <Container error={finalError} />;
} }
if (!statsData) { if (!statsData) {

View File

@ -1,11 +1,10 @@
/* eslint-disable camelcase */ /* eslint-disable camelcase */
import useSWR from "swr";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import { BsFillPlayFill, BsPauseFill, BsCpu, BsFillCpuFill } from "react-icons/bs"; import { BsFillPlayFill, BsPauseFill, BsCpu, BsFillCpuFill } from "react-icons/bs";
import { MdOutlineSmartDisplay, MdSmartDisplay } from "react-icons/md"; import { MdOutlineSmartDisplay, MdSmartDisplay } from "react-icons/md";
import { formatProxyUrl } from "utils/proxy/api-helpers";
import Container from "components/services/widget/container"; import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
function millisecondsToTime(milliseconds) { function millisecondsToTime(milliseconds) {
const seconds = Math.floor((milliseconds / 1000) % 60); const seconds = Math.floor((milliseconds / 1000) % 60);
@ -119,13 +118,12 @@ export default function Component({ service }) {
const { widget } = service; const { widget } = service;
const { data: activityData, error: activityError } = useSWR(formatProxyUrl(widget, "get_activity"), { const { data: activityData, error: activityError } = useWidgetAPI(widget, "get_activity", {
refreshInterval: 5000, refreshInterval: 5000,
}); });
if (activityError || activityData?.error) { if (activityError) {
const finalError = activityError ?? activityData.error; return <Container error={activityError} />;
return <Container error={finalError} />;
} }
if (!activityData) { if (!activityData) {

View File

@ -7,9 +7,8 @@ export default function Component({ service }) {
const { data: traefikData, error: traefikError } = useWidgetAPI(widget, "overview"); const { data: traefikData, error: traefikError } = useWidgetAPI(widget, "overview");
if (traefikError || traefikData?.error) { if (traefikError) {
const finalError = traefikError ?? traefikData.error; return <Container error={traefikError} />;
return <Container error={finalError} />;
} }
if (!traefikData) { if (!traefikData) {

View File

@ -11,9 +11,8 @@ export default function Component({ service }) {
const { data: torrentData, error: torrentError } = useWidgetAPI(widget); const { data: torrentData, error: torrentError } = useWidgetAPI(widget);
if (torrentError || torrentData?.error) { if (torrentError) {
const finalError = torrentError ?? torrentData.error; return <Container error={torrentError} />;
return <Container error={finalError} />;
} }
if (!torrentData) { if (!torrentData) {

View File

@ -41,8 +41,8 @@ export default function Component({ service }) {
const { data: alertData, error: alertError } = useWidgetAPI(widget, "alerts"); const { data: alertData, error: alertError } = useWidgetAPI(widget, "alerts");
const { data: statusData, error: statusError } = useWidgetAPI(widget, "status"); const { data: statusData, error: statusError } = useWidgetAPI(widget, "status");
if (alertError || alertData?.error || statusError || statusData?.error) { if (alertError || statusError) {
const finalError = alertError ?? alertData?.error ?? statusError ?? statusData?.error; const finalError = alertError ?? statusError;
return <Container error={finalError} />; return <Container error={finalError} />;
} }

View File

@ -14,8 +14,8 @@ export default function Component({ service }) {
const { data: channelsData, error: channelsError } = useWidgetAPI(widget, "channels"); const { data: channelsData, error: channelsError } = useWidgetAPI(widget, "channels");
const { data: playlistsData, error: playlistsError } = useWidgetAPI(widget, "playlists"); const { data: playlistsData, error: playlistsError } = useWidgetAPI(widget, "playlists");
if (downloadsError || downloadsData?.error || videosError || videosData?.error || channelsError || channelsData?.error || playlistsError || playlistsData?.error) { if (downloadsError || videosError || channelsError || playlistsError) {
const finalError = downloadsError ?? downloadsData?.error ?? videosError ?? videosData?.error ?? channelsError ?? channelsData?.error ?? playlistsError ?? playlistsData?.error; const finalError = downloadsError ?? videosError ?? channelsError ?? playlistsError;
return <Container error={finalError} />; return <Container error={finalError} />;
} }

View File

@ -11,9 +11,8 @@ export default function Component({ service }) {
const { data: statsData, error: statsError } = useWidgetAPI(widget, "stat/sites"); const { data: statsData, error: statsError } = useWidgetAPI(widget, "stat/sites");
if (statsError || statsData?.error) { if (statsError) {
const finalError = statsError ?? statsData.error; return <Container error={statsError} />;
return <Container error={finalError} />;
} }
const defaultSite = statsData?.data?.find(s => s.name === "default"); const defaultSite = statsData?.data?.find(s => s.name === "default");

View File

@ -12,9 +12,8 @@ export default function Component({ service }) {
const { data: watchData, error: watchError } = useWidgetAPI(widget, "watchtower"); const { data: watchData, error: watchError } = useWidgetAPI(widget, "watchtower");
if (watchError || watchData?.error) { if (watchError) {
const finalError = watchError ?? watchData?.error; return <Container error={watchError} />;
return <Container error={finalError} />;
} }
if (!watchData) { if (!watchData) {