import React, { useState } from 'react'; import { useParams } from 'react-router'; import { UiLogicError } from '../common'; import { useUser, userInfoService } from '../data/user'; import { changeNickname } from './api'; import UserPage from './UserPage'; import ChangeNicknameDialog from './ChangeNicknameDialog'; import ChangeAvatarDialog from './ChangeAvatarDialog'; import TimelinePageTemplate from '../timeline/TimelinePageTemplate'; import { PersonalTimelineManageItem } from './UserInfoCard'; const User: React.FC = (_) => { const { username } = useParams<{ username: string }>(); const user = useUser(); const [dialog, setDialog] = useState(null); const [dataKey, setDataKey] = useState(0); let dialogElement: React.ReactElement | undefined; const closeDialogHandler = (): void => { setDialog(null); }; if (dialog === 'nickname') { if (user == null) { throw new UiLogicError('Change nickname without login.'); } dialogElement = ( { const p = changeNickname(user.token, username, newNickname); return p.then((_) => { setDataKey(dataKey + 1); }); }} /> ); } else if (dialog === 'avatar') { if (user == null) { throw new UiLogicError('Change avatar without login.'); } dialogElement = ( userInfoService.setAvatar(username, file)} /> ); } const onManage = React.useCallback((item: PersonalTimelineManageItem) => { setDialog(item); }, []); return ( <> {dialogElement} ); }; export default User;