import React, {Component} from "react"; import PropTypes from "prop-types"; import {connect} from "react-redux"; import { Redirect } from "react-router-dom"; import {translate} from "react-i18next"; import CustomMessages from "components/CustomMessages.jsx"; import io from "io"; @connect(state => ({ user: { userId: state.user.get("userId"), role: state.user.get("role"), }, })) @translate(["profile"], {wait: true}) export default class Profile extends Component { static propTypes = { user: PropTypes.object, t: PropTypes.func, }; static defaultProps = { user: { userId: "", role: "default", }, t: () => { }, }; constructor(props) { super(props); const prettyRole = { default: "Default", admin: "Admin", }; this.state = { user: {}, loaded: false, notFound: true, }; io.getSocket(socket => { socket.emit("users.findByUsername", this.props.props.computedMatch.params.username, res => { if (res.status === "success") { const user = this.state.user; user.username = res.data.username; user.image = "/assets/images/notes.png"; user.joinDatePretty = moment(res.data.createdAt).format("LL"); user.likes = res.data.liked.length; user.dislikes = res.data.disliked.length; user.songsRequested = res.data.statistics.songsRequested; user.rolePretty = prettyRole[res.data.role]; user.role = res.data.role; user.userId = res.data._id; document.title = user.username + " - Musare"; // TODO Improve title system this.setState({ user, loaded: true, notFound: false }); } else { this.setState({ loaded: true, notFound: true }); } }); }); } promoteDemoteButton = () => { if (this.state.loaded === false) return null; if (this.props.user.role !== "admin") return null; const demoteButton = ; const promoteButton = ; return (this.state.user.role === "admin") ? demoteButton : promoteButton; }; promoteDemote = (role) => { this.messages.clearErrorSuccess(); io.getSocket(socket => { socket.emit("users.updateRole", this.state.user.userId, role, res => { if (res.status === "success") { this.messages.clearAddSuccess(this.props.t("profile:failedToChangeRank"));// TODO Fix } else { this.messages.addError(res.message); } }); }); }; promoteToAdmin = () => { this.promoteDemote("admin"); }; demoteToDefault = () => { this.promoteDemote("default"); }; render() { const { t } = this.props; const {user, loaded, notFound} = this.state; return (loaded) ? ( (notFound) ? : (

{user.username}

(this.messages = ref)}/>

{ t("profile:aMemberSince") } {user.joinDatePretty}

{ t("profile:likedSongs") }: { user.likes } { t("profile:dislikedSongs") } { user.dislikes } { t("profile:songsRequested") } { user.songsRequested } { t("profile:rank") } { user.rolePretty }
{ this.promoteDemoteButton() }
) ) :

Loading...

; } }