diff --git a/apps/renderer/src/modules/settings/tabs/data-control.tsx b/apps/renderer/src/modules/settings/tabs/data-control.tsx index 27de9ee66..7a8462c0c 100644 --- a/apps/renderer/src/modules/settings/tabs/data-control.tsx +++ b/apps/renderer/src/modules/settings/tabs/data-control.tsx @@ -11,6 +11,7 @@ import { } from "@follow/components/ui/form/index.js" import { Input } from "@follow/components/ui/input/Input.js" import { Label } from "@follow/components/ui/label/index.jsx" +import { Radio, RadioGroup } from "@follow/components/ui/radio-group/index.js" import { Slider } from "@follow/components/ui/slider/index.js" import { env } from "@follow/shared/env" import { zodResolver } from "@hookform/resolvers/zod" @@ -146,6 +147,7 @@ export const SettingDataControl = () => { const exportFeedFormSchema = z.object({ rsshubUrl: z.string().url().optional(), + folderMode: z.enum(["view", "category"]), }) const ExportFeedsForm = () => { @@ -153,11 +155,19 @@ const ExportFeedsForm = () => { const form = useForm>({ resolver: zodResolver(exportFeedFormSchema), + defaultValues: { + folderMode: "view", + }, }) function onSubmit(values: z.infer) { const link = document.createElement("a") - link.href = `${env.VITE_API_URL}/subscriptions/export${values.rsshubUrl ? `?RSSHubURL=${values.rsshubUrl}` : ""}` + const exportUrl = new URL(`${env.VITE_API_URL}/subscriptions/export`) + exportUrl.searchParams.append("folderMode", values.folderMode) + if (values.rsshubUrl) { + exportUrl.searchParams.append("RSSHubURL", values.rsshubUrl) + } + link.href = exportUrl.toString() link.download = "follow.opml" link.click() } @@ -179,6 +189,33 @@ const ExportFeedsForm = () => { )} /> + ( + + {t("general.export.folder_mode.label")} + + { + field.onChange(value) + }} + > +
+ + +
+
+
+ {t("general.export.folder_mode.description")} + +
+ )} + /> diff --git a/locales/settings/en.json b/locales/settings/en.json index e7e510aef..8c516bb9a 100644 --- a/locales/settings/en.json +++ b/locales/settings/en.json @@ -119,6 +119,10 @@ "general.data_persist.label": "Persist data for offline usage", "general.export.button": "Export", "general.export.description": "Export your feeds to an OPML file.", + "general.export.folder_mode.description": "Decide how you want to organize your export folders.", + "general.export.folder_mode.label": "Folder Mode", + "general.export.folder_mode.option.category": "Category", + "general.export.folder_mode.option.view": "View", "general.export.label": "Export Feeds", "general.export.rsshub_url.description": "Default base URL for RSSHub route, leave it empty to use https://rsshub.app.", "general.export.rsshub_url.label": "RSSHub URL", diff --git a/packages/shared/src/hono.ts b/packages/shared/src/hono.ts index 9d6e4a312..69fc94e24 100644 --- a/packages/shared/src/hono.ts +++ b/packages/shared/src/hono.ts @@ -11511,6 +11511,7 @@ declare const _routes: hono_hono_base.HonoBase