import { t, Trans } from "@lingui/macro" import { Box, Button, FileInput, Group, Stack } from "@mantine/core" import { useForm } from "@mantine/form" import { client, errorToStrings } from "app/client" import { redirectToSelectedSource } from "app/slices/redirect" import { reloadTree } from "app/slices/tree" import { useAppDispatch } from "app/store" import { Alert } from "components/Alert" import { useAsyncCallback } from "react-async-hook" import { TbFileImport } from "react-icons/tb" export function ImportOpml() { const dispatch = useAppDispatch() const form = useForm<{ file: File }>({ validate: { file: v => (v ? null : t`file is required`), }, }) const importOpml = useAsyncCallback(client.feed.importOpml, { onSuccess: () => { dispatch(reloadTree()) dispatch(redirectToSelectedSource()) }, }) return ( <> {importOpml.error && ( )}
importOpml.execute(v.file))}> OPML file} placeholder={t`OPML file`} description={ An opml file is an XML file containing feed URLs and categories. You can get an OPML file by exporting your data from other feed reading services. } {...form.getInputProps("file")} required accept="application/xml" />
) }