import { Button, Col, Grid, Group, NumberInput, Select, Stack, Switch, Text, } from "@mantine/core"; import { useForm } from "@mantine/form"; import { useModals } from "@mantine/modals"; import { ModalsContextProps } from "@mantine/modals/lib/context"; import moment from "moment"; import { FormattedMessage } from "react-intl"; import useTranslate, { translateOutsideContext, } from "../../../hooks/useTranslate.hook"; import shareService from "../../../services/share.service"; import { getExpirationPreview } from "../../../utils/date.util"; import toast from "../../../utils/toast.util"; import FileSizeInput from "../FileSizeInput"; import showCompletedReverseShareModal from "./showCompletedReverseShareModal"; import { getCookie, setCookie } from "cookies-next"; const showCreateReverseShareModal = ( modals: ModalsContextProps, showSendEmailNotificationOption: boolean, maxExpirationInHours: number, getReverseShares: () => void, ) => { const t = translateOutsideContext(); return modals.openModal({ title: t("account.reverseShares.modal.title"), children: ( ), }); }; const Body = ({ getReverseShares, showSendEmailNotificationOption, maxExpirationInHours, }: { getReverseShares: () => void; showSendEmailNotificationOption: boolean; maxExpirationInHours: number; }) => { 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), }, }); 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 ( maxExpirationInHours != 0 && expirationDate.isAfter(moment().add(maxExpirationInHours, "hours")) ) { form.setFieldError( "expiration_num", t("upload.modal.expires.error.too-long", { max: moment.duration(maxExpirationInHours, "hours").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 (