import PropTypes from 'prop-types'; import * as React from 'react'; import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; import { useDispatch, useSelector } from 'react-redux'; import snackbar from 'soapbox/actions/snackbar'; import { verifyAge } from 'soapbox/actions/verification'; import { Button, Datepicker, Form, Text } from 'soapbox/components/ui'; const messages = defineMessages({ fail: { id: 'age_verification.fail', defaultMessage: 'You must be {ageMinimum, plural, one {# year} other {# years}} old or older.', }, }); function meetsAgeMinimum(birthday, ageMinimum) { const month = birthday.getUTCMonth(); const day = birthday.getUTCDate(); const year = birthday.getUTCFullYear(); return new Date(year + ageMinimum, month, day) <= new Date(); } const AgeVerification = () => { const intl = useIntl(); const dispatch = useDispatch(); const isLoading = useSelector((state) => state.verification.get('isLoading')); const ageMinimum = useSelector((state) => state.verification.get('ageMinimum')); const siteTitle = useSelector((state) => state.instance.get('title')); const [date, setDate] = React.useState(''); const isValid = typeof date === 'object'; const onChange = React.useCallback((date) => setDate(date), []); const handleSubmit = React.useCallback((event) => { event.preventDefault(); const birthday = new Date(date); if (meetsAgeMinimum(birthday, ageMinimum)) { dispatch(verifyAge(birthday)); } else { dispatch( snackbar.error(intl.formatMessage(messages.fail, { ageMinimum, })), ); } }, [date, ageMinimum]); return (