import { Accordion, Button, Col, Grid, NumberInput, PasswordInput, Select, Stack, Text, TextInput, } from "@mantine/core"; import { useForm, yupResolver } from "@mantine/form"; import { useModals } from "@mantine/modals"; import * as yup from "yup"; import shareService from "../../services/share.service"; import { ShareSecurity } from "../../types/share.type"; const CreateUploadModalBody = ({ uploadCallback, }: { uploadCallback: ( id: string, expiration: string, security: ShareSecurity ) => void; }) => { const modals = useModals(); const validationSchema = yup.object().shape({ link: yup .string() .required() .min(3) .max(100) .matches(new RegExp("^[a-zA-Z0-9_-]*$"), { message: "Can only contain letters, numbers, underscores and hyphens", }), password: yup.string().min(3).max(30), maxViews: yup.number().min(1), }); const form = useForm({ initialValues: { link: "", password: undefined, maxViews: undefined, expiration: "1-day", }, validate: yupResolver(validationSchema), }); return (
{ if (!(await shareService.isShareIdAvailable(values.link))) { form.setFieldError("link", "This link is already in use"); } else { uploadCallback(values.link, values.expiration, { password: values.password, maxViews: values.maxViews, }); modals.closeAll(); } })} > ({ color: theme.colors.gray[6], })} > {window.location.origin}/share/ {form.values.link == "" ? "myAwesomeShare" : form.values.link}