mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-05-21 02:35:23 -04:00

* Refactor login components and adjust API routes Signed-off-by: Erik Michelson <github@erik.michelson.eu> * Adjust API /me response and redux state Signed-off-by: Erik Michelson <github@erik.michelson.eu> * Fix moved function Signed-off-by: Erik Michelson <github@erik.michelson.eu> * Update cypress tests Signed-off-by: Erik Michelson <github@erik.michelson.eu> * Adjust mock response Signed-off-by: Erik Michelson <github@erik.michelson.eu> * Integrate new common fields and hook into profile page Signed-off-by: Erik Michelson <github@erik.michelson.eu> * Remove openid Signed-off-by: Erik Michelson <github@erik.michelson.eu> * Fix config mock Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de> Co-authored-by: Tilman Vatteroth <git@tilmanvatteroth.de>
57 lines
2 KiB
TypeScript
57 lines
2 KiB
TypeScript
/*
|
|
* SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file)
|
|
*
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
|
|
import type { FormEvent } from 'react'
|
|
import React, { useCallback, useMemo, useState } from 'react'
|
|
import { Button, Card, Form } from 'react-bootstrap'
|
|
import { Trans, useTranslation } from 'react-i18next'
|
|
import { updateDisplayName } from '../../../api/me'
|
|
import { fetchAndSetUser } from '../../login-page/auth/utils'
|
|
import { useApplicationState } from '../../../hooks/common/use-application-state'
|
|
import { showErrorNotification } from '../../../redux/ui-notifications/methods'
|
|
import { DisplayNameField } from '../../common/fields/display-name-field'
|
|
import { useOnInputChange } from '../../../hooks/common/use-on-input-change'
|
|
|
|
/**
|
|
* Profile page section for changing the current display name.
|
|
*/
|
|
export const ProfileDisplayName: React.FC = () => {
|
|
useTranslation()
|
|
const userName = useApplicationState((state) => state.user?.displayName)
|
|
const [displayName, setDisplayName] = useState(userName ?? '')
|
|
|
|
const onChangeDisplayName = useOnInputChange(setDisplayName)
|
|
const onSubmitNameChange = useCallback(
|
|
(event: FormEvent) => {
|
|
event.preventDefault()
|
|
updateDisplayName(displayName)
|
|
.then(fetchAndSetUser)
|
|
.catch(showErrorNotification('profile.changeDisplayNameFailed'))
|
|
},
|
|
[displayName]
|
|
)
|
|
|
|
const formSubmittable = useMemo(() => {
|
|
return displayName.trim() !== '' && displayName !== userName
|
|
}, [displayName, userName])
|
|
|
|
return (
|
|
<Card className='bg-dark mb-4'>
|
|
<Card.Body>
|
|
<Card.Title>
|
|
<Trans i18nKey='profile.userProfile' />
|
|
</Card.Title>
|
|
<Form onSubmit={onSubmitNameChange} className='text-left'>
|
|
<DisplayNameField onChange={onChangeDisplayName} value={displayName} initialValue={userName} />
|
|
|
|
<Button type='submit' variant='primary' disabled={!formSubmittable}>
|
|
<Trans i18nKey='common.save' />
|
|
</Button>
|
|
</Form>
|
|
</Card.Body>
|
|
</Card>
|
|
)
|
|
}
|