import { useState } from 'react' import { Alert, Button, ControlLabel, FormControl, FormGroup, } from 'react-bootstrap' import { useTranslation } from 'react-i18next' import { getUserFacingMessage, postJSON, } from '../../../infrastructure/fetch-json' import getMeta from '../../../utils/meta' import { ExposedSettings } from '../../../../../types/exposed-settings' import useAsync from '../../../shared/hooks/use-async' import { useUserContext } from '../../../shared/context/user-context' function AccountInfoSection() { const { t } = useTranslation() const { hasAffiliationsFeature } = getMeta( 'ol-ExposedSettings' ) as ExposedSettings const isExternalAuthenticationSystemUsed = getMeta( 'ol-isExternalAuthenticationSystemUsed' ) as boolean const shouldAllowEditingDetails = getMeta( 'ol-shouldAllowEditingDetails' ) as boolean const { first_name: initialFirstName, last_name: initialLastName, email: initialEmail, } = useUserContext() const [email, setEmail] = useState(initialEmail) const [firstName, setFirstName] = useState(initialFirstName) const [lastName, setLastName] = useState(initialLastName) const { isLoading, isSuccess, isError, error, runAsync } = useAsync() const [isFormValid, setIsFormValid] = useState(true) const handleEmailChange = event => { setEmail(event.target.value) setIsFormValid(event.target.validity.valid) } const handleFirstNameChange = event => { setFirstName(event.target.value) } const handleLastNameChange = event => { setLastName(event.target.value) } const canUpdateEmail = !hasAffiliationsFeature && !isExternalAuthenticationSystemUsed const canUpdateNames = shouldAllowEditingDetails const handleSubmit = event => { event.preventDefault() if (!isFormValid) { return } runAsync( postJSON('/user/settings', { body: { email: canUpdateEmail ? email : undefined, first_name: canUpdateNames ? firstName : undefined, last_name: canUpdateNames ? lastName : undefined, }, }) ).catch(() => {}) } return ( <>