import type { ContentSource } from "@prisma/client"; import type { ActionArgs, LoaderArgs } from "@remix-run/node"; import { json, redirect } from "@remix-run/node"; import { Link, useLoaderData } from "@remix-run/react"; import { Breadcrumbs } from "~/components/breadcrumbs"; import { importSource } from "~/lib/importer.server"; import { getSource, saveSource } from "~/models/source.server"; import { requireUser } from "~/session.server"; import { notFound } from "~/utils"; export async function action({ request }: ActionArgs) { await requireUser(request); const formData = await request.formData(); const id = formData.get("id") as string; const name = formData.get("name") as string; const type = formData.get("type") as string; const description = formData.get("description") as string; const connectionUrl = formData.get("connectionUrl") as string; const source = await saveSource({ id, name, description, type, connectionUrl }); await importSource(source); return redirect("/listen/sources"); } export async function loader({ params, request }: LoaderArgs) { await requireUser(request); const { id } = params; if (!id) { throw notFound(); } const source = id !== "new" ? await getSource(id) : { type: "json" } as ContentSource; if (!source) { throw notFound(); } return json({ source }); } export default function SourcePage() { const { source } = useLoaderData(); return ( <> Sources {source.name ?? "New Source"}