From ed95fb6b239b9cbbae54f6eb3ff8e6a4d8053538 Mon Sep 17 00:00:00 2001 From: Stephen Zhou <38493346+hyoban@users.noreply.github.com> Date: Tue, 13 May 2025 15:34:29 +0800 Subject: [PATCH] feat: show rsshub error message --- .../src/components/common/ErrorTooltip.tsx | 45 ++++++++++++ .../src/modules/timeline-column/FeedItem.tsx | 29 ++------ .../(main)/(layer)/(subview)/rsshub/index.tsx | 70 ++++++++++++------- locales/errors/en.json | 1 + locales/settings/en.json | 2 + packages/internal/shared/src/hono.ts | 44 ++++++++++++ 6 files changed, 142 insertions(+), 49 deletions(-) create mode 100644 apps/desktop/layer/renderer/src/components/common/ErrorTooltip.tsx diff --git a/apps/desktop/layer/renderer/src/components/common/ErrorTooltip.tsx b/apps/desktop/layer/renderer/src/components/common/ErrorTooltip.tsx new file mode 100644 index 000000000..2e5031649 --- /dev/null +++ b/apps/desktop/layer/renderer/src/components/common/ErrorTooltip.tsx @@ -0,0 +1,45 @@ +import { + Tooltip, + TooltipContent, + TooltipPortal, + TooltipTrigger, +} from "@follow/components/ui/tooltip/index.js" +import dayjs from "dayjs" +import { useTranslation } from "react-i18next" + +export function ErrorTooltip({ + errorAt, + errorMessage, + children, + showWhenError = false, +}: { + errorMessage?: string | null + errorAt?: string | null + children: React.ReactNode + showWhenError?: boolean +}) { + const { t } = useTranslation() + if (!errorAt || !errorMessage) { + return showWhenError ? children : null + } + return ( + + {children} + + + + + {t("feed_item.error_since")}{" "} + {dayjs.duration(dayjs(errorAt).diff(dayjs(), "minute"), "minute").humanize(true)} + + {!!errorMessage && ( + + + {errorMessage} + + )} + + + + ) +} diff --git a/apps/desktop/layer/renderer/src/modules/timeline-column/FeedItem.tsx b/apps/desktop/layer/renderer/src/modules/timeline-column/FeedItem.tsx index 4a54bb652..f269283fd 100644 --- a/apps/desktop/layer/renderer/src/modules/timeline-column/FeedItem.tsx +++ b/apps/desktop/layer/renderer/src/modules/timeline-column/FeedItem.tsx @@ -11,13 +11,13 @@ import { EllipsisHorizontalTextWithTooltip } from "@follow/components/ui/typogra import type { FeedViewType } from "@follow/constants" import { nextFrame } from "@follow/utils/dom" import { cn, isKeyForMultiSelectPressed } from "@follow/utils/utils" -import dayjs from "dayjs" import { createElement, memo, use, useCallback, useState } from "react" import { useTranslation } from "react-i18next" import { MenuItemSeparator, MenuItemText, useShowContextMenu } from "~/atoms/context-menu" import { getMainContainerElement } from "~/atoms/dom" import { useGeneralSettingKey } from "~/atoms/settings/general" +import { ErrorTooltip } from "~/components/common/ErrorTooltip" import { useFeedActions, useInboxActions, useListActions } from "~/hooks/biz/useFeedActions" import { useFollow } from "~/hooks/biz/useFollow" import { useNavigateEntry } from "~/hooks/biz/useNavigateEntry" @@ -187,29 +187,10 @@ const FeedItemImpl = ({ view, feedId, className, isPreview }: FeedItemProps) =>