import React, { useCallback, useEffect, useRef, useState } from "react"; import {Button, Card, Checkbox, Col, Form, Input, Modal, notification, Row, Space} from "antd"; import Markdown from "react-markdown"; import { createStructuredSelector } from "reselect"; import { selectCurrentEula, selectCurrentUser } from "../../redux/user/user.selectors"; import { connect } from "react-redux"; import { FormDatePicker } from "../form-date-picker/form-date-picker.component"; import { INSERT_EULA_ACCEPTANCE } from "../../graphql/user.queries"; import { useMutation } from "@apollo/client"; import { acceptEula } from "../../redux/user/user.actions"; import { useTranslation } from "react-i18next"; import day from '../../utils/day'; import './eula.styles.scss'; const Eula = ({ currentEula, currentUser, acceptEula }) => { const [formReady, setFormReady] = useState(false); const [hasEverScrolledToBottom, setHasEverScrolledToBottom] = useState(false); const [insertEulaAcceptance] = useMutation(INSERT_EULA_ACCEPTANCE); const [form] = Form.useForm(); const markdownCardRef = useRef(null); const { t } = useTranslation(); const [api, contextHolder] = notification.useNotification(); const handleScroll = (e) => { const bottom = e.target.scrollHeight - 100 <= e.target.scrollTop + e.target.clientHeight; if (bottom && !hasEverScrolledToBottom) { setHasEverScrolledToBottom(true); } else if (e.target.scrollHeight <= e.target.clientHeight && !hasEverScrolledToBottom) { setHasEverScrolledToBottom(true); } }; useEffect(() => { handleScroll({ target: markdownCardRef.current }); }, []); const handleChange = useCallback(() => { form.validateFields({ validateOnly: true }) .then(() => setFormReady(hasEverScrolledToBottom)) .catch(() => setFormReady(false)); }, [form, hasEverScrolledToBottom]); useEffect(() => { handleChange(); }, [handleChange, hasEverScrolledToBottom, form]); const onFinish = async ({ acceptTerms, ...formValues }) => { const eulaId = currentEula.id; const useremail = currentUser.email; try { const { accepted_terms, ...otherFormValues } = formValues; await insertEulaAcceptance({ variables: { eulaAcceptance: { eulaid: eulaId, useremail, ...otherFormValues, date_accepted: new Date(), } } }); acceptEula(); } catch (err) { api.error({ message: t('eula.errors.acceptance.message'), description: t('eula.errors.acceptance.description'), placement: 'bottomRight', duration: 5000, }); console.log(`${t('eula.errors.acceptance.message')}`); console.dir({ message: err.message, stack: err.stack, }); } }; return ( <> {contextHolder} (