From 15186e4f1a5a60de4b4d5c076fc0fb1d59ce2d15 Mon Sep 17 00:00:00 2001 From: srgooglo Date: Tue, 15 Mar 2022 01:03:36 +0100 Subject: [PATCH] reimplement follow methods & styling --- packages/app/src/pages/account/index.jsx | 96 ++++++++++++++++++----- packages/app/src/pages/account/index.less | 17 ++-- 2 files changed, 87 insertions(+), 26 deletions(-) diff --git a/packages/app/src/pages/account/index.jsx b/packages/app/src/pages/account/index.jsx index 51619be7..d5a3c6f8 100644 --- a/packages/app/src/pages/account/index.jsx +++ b/packages/app/src/pages/account/index.jsx @@ -3,7 +3,7 @@ import * as antd from "antd" import { Translation } from "react-i18next" import { Icons } from "components/Icons" -import { Skeleton, PostsFeed } from "components" +import { Skeleton, PostsFeed, FollowButton } from "components" import { Session, User } from "models" import "./index.less" @@ -13,8 +13,9 @@ export default class Account extends React.Component { state = { isSelf: false, + isFollowed: false, user: null, - sessions: null + requestedUser: null, } api = window.app.request @@ -25,20 +26,63 @@ export default class Account extends React.Component { const query = new URLSearchParams(location.search) const requestedUser = location.state?.username ?? query.get("username") ?? token?.username - let state = this.state + const hasAdmin = await User.hasRole("admin") + + let isSelf = false + let user = null + let isFollowed = false if (requestedUser != null) { if (token.username === requestedUser) { - state.isSelf = true - state.sessions = await this.props.contexts.app.sessionController.getAllSessions() + isSelf = true } - state.user = await this.props.contexts.app.userController.getData({ username: requestedUser }) + user = await this.fetchData(requestedUser) + + if (!isSelf) { + const result = await this.api.get.isFollowed(undefined, { user_id: user._id }).catch(() => false) + console.log(result) + + if (result) { + isFollowed = result.isFollowed + } + } } - state.hasAdmin = await User.hasRole("admin") + await this.setState({ + isSelf, + user, + hasAdmin, + requestedUser, + isFollowed, + }) + } - this.setState(state) + fetchData = async (username) => { + return await this.api.get.user(undefined, { + username: username + }).catch((error) => { + console.error(error) + antd.message.error(error.message) + return false + }) + } + + onClickFollow = async () => { + const result = await this.api.put.followUser({ + username: this.state.requestedUser, + }) + .catch((error) => { + console.error(error) + antd.message.error(error.message) + return false + }) + + console.log(result) + + await this.setState({ + isFollowed: result.following, + }) } render() { @@ -49,23 +93,33 @@ export default class Account extends React.Component { } return ( -
+
- -
- {Boolean(user.fullName) ? - <> -

{user.fullName}

- @{user.username}#{user._id} - : - <> -

@{user.username}

- #{user._id} - - } +
+ +
+ {Boolean(user.fullName) ? + <> +

{user.fullName}

+ @{user.username}#{user._id} + : + <> +

@{user.username}

+ #{user._id} + + } +
+ + {!this.state.isSelf &&
+ +
}
+
{user.badges.map((role, index) => { diff --git a/packages/app/src/pages/account/index.less b/packages/app/src/pages/account/index.less index 5a6d7d90..65cc84df 100644 --- a/packages/app/src/pages/account/index.less +++ b/packages/app/src/pages/account/index.less @@ -1,7 +1,7 @@ @borderColor : #dddddd; @borderRadius: 12px; -.account_wrapper { +.accountProfile { .card { display : flex; flex-direction: column; @@ -18,13 +18,15 @@ } .header { - position : relative; - display : inline-flex; - align-items: center; + position: relative; + display : inline-flex; + + align-items : center; + justify-content: space-between; z-index: 15; width : 100%; - padding: 12px; + padding: 12px 24px; font-family: "Roboto Mono", monospace; @@ -47,6 +49,11 @@ font-size: 12px; } } + + >div { + display : inline-flex; + align-items: center; + } } .extension {