import { useAuth } from '@/app/auth/hooks'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from '@/components/ui/card'; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form'; import { Input } from '@/components/ui/input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { Switch } from '@/components/ui/switch'; import type { RouteStateDataOption } from '@/infra/routes/traits'; import { createFileRoute } from '@tanstack/react-router'; import { useNavigate } from '@tanstack/react-router'; import { useState } from 'react'; import { useForm } from 'react-hook-form'; import { toast } from 'sonner'; export const Route = createFileRoute('/_app/subscriptions/create')({ component: SubscriptionCreateRouteComponent, staticData: { breadcrumb: { label: 'Create' }, } satisfies RouteStateDataOption, }); type SubscriptionFormValues = { displayName: string; sourceUrl: string; category: string; enabled: boolean; }; function SubscriptionCreateRouteComponent() { const { userData } = useAuth(); console.log(JSON.stringify(userData, null, 2)); const [isSubmitting, setIsSubmitting] = useState(false); const navigate = useNavigate(); const form = useForm({ defaultValues: { displayName: '', sourceUrl: '', category: 'Mikan', enabled: true, }, }); const onSubmit = async (data: SubscriptionFormValues) => { try { setIsSubmitting(true); const requestData = { query: ` mutation CreateSubscription($input: SubscriptionsInsertInput!) { subscriptionsCreateOne(data: $input) { id displayName sourceUrl enabled category } } `, variables: { input: { category: data.category, displayName: data.displayName, sourceUrl: data.sourceUrl, enabled: data.enabled, }, }, }; const response = await fetch('/api/graphql', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(requestData), }); const responseData = await response.json(); if (responseData.errors) { throw new Error( responseData.errors[0]?.message || 'Failed to create subscription' ); } toast.success('Subscription created successfully'); navigate({ to: '/subscriptions/manage' }); } catch (error) { console.error('Failed to create subscription:', error); toast.error( `Subscription creation failed: ${ error instanceof Error ? error.message : 'Unknown error' }` ); } finally { setIsSubmitting(false); } }; return ( Create Bangumi Subscription Add a new bangumi subscription source
( Source Type Currently only Mikan source is supported )} /> ( Display Name Set an easily recognizable name for this subscription )} /> ( Source URL Copy the RSS subscription link from the source website, e.g. https://mikanani.me/RSS/Bangumi?bangumiId=3141&subgroupid=370 )} /> (
Enable Subscription Enable this subscription immediately after creation
)} />
); }