diff --git a/icons/mgc/photo_album_cute_fi.svg b/icons/mgc/photo_album_cute_fi.svg new file mode 100644 index 0000000000..a96ad87def --- /dev/null +++ b/icons/mgc/photo_album_cute_fi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/locales/app/en.json b/locales/app/en.json index 5fce7280cb..6498ff6d60 100644 --- a/locales/app/en.json +++ b/locales/app/en.json @@ -35,12 +35,14 @@ "entry_actions.tip": "Tip", "entry_actions.unstar": "Unstar", "entry_actions.unstarred": "Unstarred.", + "entry_column.filtered_content_tip": "You have filtered content hidden.", + "entry_column.filtered_content_tip_2": "In addition to the entries shown above, there is also filtered content.", "entry_column.refreshing": "Refreshing new entries...", "entry_content.ai_summary": "AI summary", "entry_content.fetching_content": "Fetching original content and processing...", "entry_content.header.play_tts": "Play TTS", "entry_content.header.readability": "Readability", - "entry_content.no_content": "No content", + "entry_content.no_content": "No media available", "entry_content.readability_notice": "This content is provided by Readability. If you find typographical anomalies, please go to the source site to view the original content.", "entry_content.render_error": "Render error:", "entry_content.report_issue": "Report issue", diff --git a/src/renderer/src/modules/entry-column/Items/picture-item.tsx b/src/renderer/src/modules/entry-column/Items/picture-item.tsx index b66c845a76..7fe38da146 100644 --- a/src/renderer/src/modules/entry-column/Items/picture-item.tsx +++ b/src/renderer/src/modules/entry-column/Items/picture-item.tsx @@ -8,6 +8,7 @@ import { useEntry } from "@renderer/store/entry/hooks" import { useImageDimensions } from "@renderer/store/image" import type { PropsWithChildren } from "react" import { memo, useEffect, useState } from "react" +import { useTranslation } from "react-i18next" import { usePreviewMedia } from "../../../components/ui/media/hooks" import { EntryItemWrapper } from "../layouts/EntryItemWrapper" @@ -24,6 +25,7 @@ export function PictureItem({ entryId, entryPreview, translation }: UniversalIte const isActive = useRouteParamsSelector(({ entryId }) => entryId === entry?.entries.id) + const { t } = useTranslation() const previewMedia = usePreviewMedia() if (!entry) return return ( @@ -46,7 +48,7 @@ export function PictureItem({ entryId, entryPreview, translation }: UniversalIte ) : (
- No media available + {t("entry_content.no_content")}
)} @@ -97,7 +99,7 @@ export const PictureWaterFallItem = memo(function PictureWaterFallItem({ /> ) : ( -
+
No media available
diff --git a/src/renderer/src/modules/entry-column/index.tsx b/src/renderer/src/modules/entry-column/index.tsx index b76e195e15..96e0e4bcc6 100644 --- a/src/renderer/src/modules/entry-column/index.tsx +++ b/src/renderer/src/modules/entry-column/index.tsx @@ -1,5 +1,5 @@ import { useGeneralSettingKey } from "@renderer/atoms/settings/general" -import { useUISettingKey } from "@renderer/atoms/settings/ui" +import { setUISetting, useUISettingKey } from "@renderer/atoms/settings/ui" import { m } from "@renderer/components/common/Motion" import { FeedFoundCanBeFollowError } from "@renderer/components/errors/FeedFoundCanBeFollowErrorFallback" import { FeedNotFound } from "@renderer/components/errors/FeedNotFound" @@ -248,23 +248,67 @@ const ListGird = ({ } return virtuosoOptions.data }, [virtuosoOptions.data, filterNoImage]) + const { t } = useTranslation() + if (nextData.length === 0 && virtuosoOptions.data.length > 0) { + return ( +
+ +
+ {t("entry_column.filtered_content_tip")} +
+ + +
+ ) + } + + const hasFilteredContent = nextData.length < virtuosoOptions.data.length + + const FilteredContentTip = hasFilteredContent && ( +
+ +
{t("entry_column.filtered_content_tip_2")}
+ + +
+ ) + if (masonry && view === FeedViewType.Pictures) { return ( - virtuosoOptions.data.length} - endReached={virtuosoOptions.endReached} - data={nextData} - /> + <> + virtuosoOptions.data.length} + endReached={virtuosoOptions.endReached} + data={nextData} + /> + + {FilteredContentTip} + ) } return ( - + <> + + {FilteredContentTip} + ) } diff --git a/src/renderer/src/modules/entry-column/layouts/EntryListHeader.tsx b/src/renderer/src/modules/entry-column/layouts/EntryListHeader.tsx index 5e558c0796..2f26bac502 100644 --- a/src/renderer/src/modules/entry-column/layouts/EntryListHeader.tsx +++ b/src/renderer/src/modules/entry-column/layouts/EntryListHeader.tsx @@ -188,7 +188,7 @@ const FilterNoImageButton = () => { enabled ? "entry_list_header.show_all_items" : "entry_list_header.hide_no_image_items", )} > - + ) } diff --git a/src/renderer/src/modules/settings/tabs/invitations.tsx b/src/renderer/src/modules/settings/tabs/invitations.tsx index 2443bf2888..b528b11088 100644 --- a/src/renderer/src/modules/settings/tabs/invitations.tsx +++ b/src/renderer/src/modules/settings/tabs/invitations.tsx @@ -80,7 +80,7 @@ export const SettingInvitations = () => {
- + {invitations.data?.length ? ( @@ -91,7 +91,7 @@ export const SettingInvitations = () => { {t("invitation.tableHeaders.creationTime")} - + {t("invitation.tableHeaders.usedBy")}