import { Button, Col, Grid, Group, NumberInput, Select, Stack, Switch, Text, } from "@mantine/core"; import { useForm, yupResolver } from "@mantine/form"; import { useModals } from "@mantine/modals"; import { ModalsContextProps } from "@mantine/modals/lib/context"; import { getCookie, setCookie } from "cookies-next"; import moment from "moment"; import { FormattedMessage } from "react-intl"; import * as yup from "yup"; import useTranslate, { translateOutsideContext, } from "../../../hooks/useTranslate.hook"; import shareService from "../../../services/share.service"; import { Timespan } from "../../../types/timespan.type"; import { getExpirationPreview } from "../../../utils/date.util"; import toast from "../../../utils/toast.util"; import FileSizeInput from "../../core/FileSizeInput"; import showCompletedReverseShareModal from "./showCompletedReverseShareModal"; const showCreateReverseShareModal = ( modals: ModalsContextProps, showSendEmailNotificationOption: boolean, maxExpiration: Timespan, getReverseShares: () => void, ) => { const t = translateOutsideContext(); return modals.openModal({ title: t("account.reverseShares.modal.title"), children: ( ), }); }; const Body = ({ getReverseShares, showSendEmailNotificationOption, maxExpiration, }: { getReverseShares: () => void; showSendEmailNotificationOption: boolean; maxExpiration: Timespan; }) => { const modals = useModals(); const t = useTranslate(); const form = useForm({ initialValues: { maxShareSize: 104857600, maxUseCount: 1, sendEmailNotification: false, expiration_num: 1, expiration_unit: "-days", simplified: !!(getCookie("reverse-share.simplified") ?? false), publicAccess: !!(getCookie("reverse-share.public-access") ?? true), }, validate: yupResolver( yup.object().shape({ maxUseCount: yup .number() .typeError(t("common.error.invalid-number")) .min(1, t("common.error.number-too-small", { min: 1 })) .max(1000, t("common.error.number-too-large", { max: 1000 })) .required(t("common.error.field-required")), }), ), }); const onSubmit = form.onSubmit(async (values) => { // remember simplified and publicAccess in cookies setCookie("reverse-share.simplified", values.simplified); setCookie("reverse-share.public-access", values.publicAccess); const expirationDate = moment().add( form.values.expiration_num, form.values.expiration_unit.replace( "-", "", ) as moment.unitOfTime.DurationConstructor, ); if ( maxExpiration.value != 0 && expirationDate.isAfter( moment().add(maxExpiration.value, maxExpiration.unit), ) ) { form.setFieldError( "expiration_num", t("upload.modal.expires.error.too-long", { max: moment .duration(maxExpiration.value, maxExpiration.unit) .humanize(), }), ); return; } shareService .createReverseShare( values.expiration_num + values.expiration_unit, values.maxShareSize, values.maxUseCount, values.sendEmailNotification, values.simplified, values.publicAccess, ) .then(({ link }) => { modals.closeAll(); showCompletedReverseShareModal(modals, link, getReverseShares); }) .catch(toast.axiosError); }); return (