diff options
| author | crupest <crupest@outlook.com> | 2020-06-11 17:27:15 +0800 | 
|---|---|---|
| committer | crupest <crupest@outlook.com> | 2020-06-11 17:27:15 +0800 | 
| commit | 93ce8560fa19c3a91de99643fdbbe4f895a47b84 (patch) | |
| tree | 66a9e6f1bbbbd5a0a25c13a0e51e7a7c1225871c /Timeline/ClientApp/src/app/user/User.tsx | |
| parent | 6893a1c1e43b8fc17eaaba72db90494d946b5091 (diff) | |
| download | timeline-93ce8560fa19c3a91de99643fdbbe4f895a47b84.tar.gz timeline-93ce8560fa19c3a91de99643fdbbe4f895a47b84.tar.bz2 timeline-93ce8560fa19c3a91de99643fdbbe4f895a47b84.zip  | |
feat(front): Service worker is coming!
Diffstat (limited to 'Timeline/ClientApp/src/app/user/User.tsx')
| -rw-r--r-- | Timeline/ClientApp/src/app/user/User.tsx | 79 | 
1 files changed, 79 insertions, 0 deletions
diff --git a/Timeline/ClientApp/src/app/user/User.tsx b/Timeline/ClientApp/src/app/user/User.tsx new file mode 100644 index 00000000..0e1977b1 --- /dev/null +++ b/Timeline/ClientApp/src/app/user/User.tsx @@ -0,0 +1,79 @@ +import React, { useState } from 'react'; +import { useParams } from 'react-router'; + +import { useUser } from '../data/user'; +import { changeNickname, changeAvatar } from './api'; +import { personalTimelineService } from '../data/timeline'; + +import UserPage from './UserPage'; +import ChangeNicknameDialog from './ChangeNicknameDialog'; +import ChangeAvatarDialog from './ChangeAvatarDialog'; +import TimelinePageTemplate from '../timeline/TimelinePageTemplate'; +import { PersonalTimelineManageItem } from './UserInfoCard'; +import { UiLogicError } from '../common'; + +const User: React.FC = (_) => { +  const { username } = useParams<{ username: string }>(); + +  const user = useUser(); + +  const [dialog, setDialog] = useState<null | PersonalTimelineManageItem>(null); +  const [dataKey, setDataKey] = useState<number>(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 = ( +      <ChangeNicknameDialog +        open +        close={closeDialogHandler} +        onProcess={(newNickname) => { +          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 = ( +      <ChangeAvatarDialog +        open +        close={closeDialogHandler} +        process={(file) => changeAvatar(user.token, username, file, file.type)} +      /> +    ); +  } + +  const onManage = React.useCallback((item: PersonalTimelineManageItem) => { +    setDialog(item); +  }, []); + +  return ( +    <> +      <TimelinePageTemplate +        dataVersion={dataKey} +        name={username} +        UiComponent={UserPage} +        onManage={onManage} +        service={personalTimelineService} +        notFoundI18nKey="timeline.userNotExist" +      /> +      {dialogElement} +    </> +  ); +}; + +export default User;  | 
