From 231869eb119c6e804c5aa93924281abc88804189 Mon Sep 17 00:00:00 2001 From: Diptesh Choudhuri Date: Wed, 10 May 2023 07:54:48 +0530 Subject: [PATCH] feat(frontend): allow importing from media tracker --- apps/frontend/src/pages/settings.tsx | 109 ++++++++++++++++++++++++--- 1 file changed, 98 insertions(+), 11 deletions(-) diff --git a/apps/frontend/src/pages/settings.tsx b/apps/frontend/src/pages/settings.tsx index 188cee3042..0c3b349f2e 100644 --- a/apps/frontend/src/pages/settings.tsx +++ b/apps/frontend/src/pages/settings.tsx @@ -3,41 +3,66 @@ import useUser from "@/lib/hooks/useUser"; import LoggedIn from "@/lib/layouts/LoggedIn"; import { gqlClient } from "@/lib/services/api"; import { + Anchor, Box, Button, + Card, Container, + Group, PasswordInput, Stack, Tabs, TextInput, + Title, } from "@mantine/core"; import { useForm, zodResolver } from "@mantine/form"; import { notifications } from "@mantine/notifications"; import { + DeployMediaTrackerImportDocument, + type DeployMediaTrackerImportMutationVariables, UpdateUserDocument, type UpdateUserMutationVariables, } from "@ryot/generated/graphql/backend/graphql"; -import { IconDatabaseImport, IconUser } from "@tabler/icons-react"; +import { + IconDatabaseImport, + IconExternalLink, + IconUser, +} from "@tabler/icons-react"; import { useMutation } from "@tanstack/react-query"; import type { ReactElement } from "react"; import { z } from "zod"; -const formSchema = z.object({ +const updateProfileFormSchema = z.object({ username: z.string().optional(), password: z.string().optional(), email: z.string().optional(), }); -type FormSchema = z.infer; +type UpdateProfileFormSchema = z.infer; + +const mediaTrackerImportFormSchema = z.object({ + apiUrl: z.string().url(), + apiKey: z.string(), +}); +type MediaTrackerImportFormSchema = z.infer< + typeof mediaTrackerImportFormSchema +>; const Page: NextPageWithLayout = () => { - const form = useForm({ validate: zodResolver(formSchema) }); + const updateProfileForm = useForm({ + validate: zodResolver(updateProfileFormSchema), + }); + const mediaTrackerImportForm = useForm({ + validate: zodResolver(mediaTrackerImportFormSchema), + }); + useUser((data) => { - form.setValues({ + updateProfileForm.setValues({ email: data.email, username: data.name, }); - form.resetDirty(); + updateProfileForm.resetDirty(); }); + const updateUser = useMutation({ mutationFn: async (variables: UpdateUserMutationVariables) => { const { updateUser } = await gqlClient.request( @@ -55,6 +80,25 @@ const Page: NextPageWithLayout = () => { }, }); + const deploymediaTrackerImport = useMutation({ + mutationFn: async ( + variables: DeployMediaTrackerImportMutationVariables, + ) => { + const { deployMediaTrackerImport } = await gqlClient.request( + DeployMediaTrackerImportDocument, + variables, + ); + return deployMediaTrackerImport; + }, + onSuccess: () => { + notifications.show({ + title: "Success", + message: "Your import has started. Check back later.", + color: "green", + }); + }, + }); + return ( @@ -70,24 +114,24 @@ const Page: NextPageWithLayout = () => { { + onSubmit={updateProfileForm.onSubmit((values) => { updateUser.mutate({ input: values }); })} > + + +