From 1a2190c1aa834a33932788e65269a1128fd3a7e2 Mon Sep 17 00:00:00 2001 From: Innei Date: Tue, 10 Sep 2024 20:21:55 +0800 Subject: [PATCH] fix: add feed when site url not match Signed-off-by: Innei --- .../src/components/ui/divider/Divider.tsx | 2 +- .../src/modules/discover/feed-form.tsx | 10 ++++-- src/renderer/src/modules/discover/form.tsx | 31 ++++++++++++------- src/renderer/src/store/feed/store.ts | 15 +++++++-- 4 files changed, 39 insertions(+), 19 deletions(-) diff --git a/src/renderer/src/components/ui/divider/Divider.tsx b/src/renderer/src/components/ui/divider/Divider.tsx index c789e1d632..cbb48bc1a1 100644 --- a/src/renderer/src/components/ui/divider/Divider.tsx +++ b/src/renderer/src/components/ui/divider/Divider.tsx @@ -20,7 +20,7 @@ export const DividerVertical: FC< return ( void -}> = ({ id, defaultValues = defaultValue, url, asWidget, onSuccess }) => { - const queryParams = { id, url } +}> = ({ id: _id, defaultValues = defaultValue, url, asWidget, onSuccess }) => { + const queryParams = { id: _id, url } const feedQuery = useFeed(queryParams) - const feed = useFeedByIdOrUrl(queryParams) + const id = feedQuery.data?.feed.id || _id + const feed = useFeedByIdOrUrl({ + id, + url, + }) const hasSub = useSubscriptionByFeedId(feed?.id || "") const isSubscribed = !!feedQuery.data?.subscription || hasSub diff --git a/src/renderer/src/modules/discover/form.tsx b/src/renderer/src/modules/discover/form.tsx index a892b9085f..0715d7ed19 100644 --- a/src/renderer/src/modules/discover/form.tsx +++ b/src/renderer/src/modules/discover/form.tsx @@ -31,8 +31,9 @@ const info: Record< string, { label: string - prefix?: string + prefix?: string[] showModal?: boolean + default?: string } > = { search: { @@ -40,22 +41,24 @@ const info: Record< }, rss: { label: "RSS URL", - prefix: "https://", + default: "https://", + prefix: ["https://", "http://"], showModal: true, }, rsshub: { label: "RSSHub Route", - prefix: "rsshub://", + prefix: ["rsshub://"], + default: "rsshub://", showModal: true, }, } export function DiscoverForm({ type }: { type: string }) { - const { prefix } = info[type] + const { prefix, default: defaultValue } = info[type] const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { - keyword: prefix || "", + keyword: defaultValue || "", }, }) const mutation = useMutation({ @@ -95,14 +98,18 @@ export function DiscoverForm({ type }: { type: string }) { const keyword = form.watch("keyword") useEffect(() => { - if (prefix) { - if (!keyword.startsWith(prefix)) { - form.setValue("keyword", prefix) - } else if (keyword.startsWith(`${prefix}${prefix}`)) { - form.setValue("keyword", keyword.slice(prefix.length)) - } + if (!prefix) return + const isValidPrefix = prefix.find((p) => keyword.startsWith(p)) + if (!isValidPrefix) { + form.setValue("keyword", prefix[0]) + + return + } + + if (keyword.startsWith(`${isValidPrefix}${isValidPrefix}`)) { + form.setValue("keyword", keyword.slice(isValidPrefix.length)) } - }, [keyword]) + }, [form, keyword, prefix]) return ( <> diff --git a/src/renderer/src/store/feed/store.ts b/src/renderer/src/store/feed/store.ts index ad95a06374..0c618187cd 100644 --- a/src/renderer/src/store/feed/store.ts +++ b/src/renderer/src/store/feed/store.ts @@ -92,9 +92,18 @@ class FeedActions { }, }) - this.upsertMany([res.data.feed]) - - return res.data + const nonce = nanoid(8) + + const finalData = { + ...res.data.feed, + id: id || res.data.feed.id || nonce, + } + this.upsertMany([finalData]) + + return { + ...res.data, + feed: finalData, + } } } export const feedActions = new FeedActions()