aboutsummaryrefslogtreecommitdiff
path: root/Timeline/ClientApp/src/user/User.tsx
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-05-30 23:41:31 +0800
committerGitHub <noreply@github.com>2020-05-30 23:41:31 +0800
commitc8d71a3b5e7aef4fcf75bad44b7be90b45aaaf0b (patch)
treef76ecd77c99c4136d1ab4771b91a92f1e5ad4a35 /Timeline/ClientApp/src/user/User.tsx
parent7e393559d2883a37b1be0c82cccc06bc97c3d102 (diff)
parent83de798e74323e96e81b8196b04e23ed2bd4efbf (diff)
downloadtimeline-c8d71a3b5e7aef4fcf75bad44b7be90b45aaaf0b.tar.gz
timeline-c8d71a3b5e7aef4fcf75bad44b7be90b45aaaf0b.tar.bz2
timeline-c8d71a3b5e7aef4fcf75bad44b7be90b45aaaf0b.zip
Merge pull request #72 from crupest/merge-frontend
Merge frontend repo into this repo.
Diffstat (limited to 'Timeline/ClientApp/src/user/User.tsx')
-rw-r--r--Timeline/ClientApp/src/user/User.tsx70
1 files changed, 70 insertions, 0 deletions
diff --git a/Timeline/ClientApp/src/user/User.tsx b/Timeline/ClientApp/src/user/User.tsx
new file mode 100644
index 00000000..7bdd64b7
--- /dev/null
+++ b/Timeline/ClientApp/src/user/User.tsx
@@ -0,0 +1,70 @@
+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';
+
+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') {
+ dialogElement = (
+ <ChangeNicknameDialog
+ open
+ close={closeDialogHandler}
+ onProcess={(newNickname) => {
+ const p = changeNickname(user!.token, username, newNickname);
+ return p.then((_) => {
+ setDataKey(dataKey + 1);
+ });
+ }}
+ />
+ );
+ } else if (dialog === 'avatar') {
+ 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;