2019-01-17 15:40:11 +01:00
|
|
|
// @flow
|
|
|
|
|
import React from "react";
|
|
|
|
|
import type { Me } from "@scm-manager/ui-types";
|
2019-02-18 08:47:29 +01:00
|
|
|
import {
|
|
|
|
|
MailLink,
|
|
|
|
|
AvatarWrapper,
|
|
|
|
|
AvatarImage
|
|
|
|
|
} from "@scm-manager/ui-components";
|
2019-01-17 15:40:11 +01:00
|
|
|
import { compose } from "redux";
|
|
|
|
|
import { translate } from "react-i18next";
|
2019-02-19 15:05:55 +01:00
|
|
|
import injectSheet from "react-jss";
|
2019-01-17 15:40:11 +01:00
|
|
|
|
|
|
|
|
type Props = {
|
|
|
|
|
me: Me,
|
|
|
|
|
|
|
|
|
|
// Context props
|
2019-02-19 15:05:55 +01:00
|
|
|
classes: any,
|
2019-01-17 15:40:11 +01:00
|
|
|
t: string => string
|
|
|
|
|
};
|
|
|
|
|
|
2019-02-19 15:05:55 +01:00
|
|
|
const styles = {
|
|
|
|
|
spacing: {
|
|
|
|
|
padding: "0 !important"
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class ProfileInfo extends React.Component<Props> {
|
2019-01-17 15:40:11 +01:00
|
|
|
render() {
|
|
|
|
|
const { me, t } = this.props;
|
|
|
|
|
return (
|
|
|
|
|
<div className="media">
|
|
|
|
|
<AvatarWrapper>
|
|
|
|
|
<figure className="media-left">
|
|
|
|
|
<p className="image is-64x64">
|
2019-02-18 08:47:29 +01:00
|
|
|
<AvatarImage person={me} />
|
2019-01-17 15:40:11 +01:00
|
|
|
</p>
|
|
|
|
|
</figure>
|
|
|
|
|
</AvatarWrapper>
|
|
|
|
|
<div className="media-content">
|
2019-02-19 15:05:55 +01:00
|
|
|
<table className="table content">
|
2019-01-17 15:40:11 +01:00
|
|
|
<tbody>
|
2019-02-18 08:47:29 +01:00
|
|
|
<tr>
|
2019-02-20 10:12:54 +01:00
|
|
|
<th>
|
2019-02-18 08:47:29 +01:00
|
|
|
{t("profile.username")}
|
2019-02-20 10:12:54 +01:00
|
|
|
</th>
|
2019-02-18 08:47:29 +01:00
|
|
|
<td>{me.name}</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
2019-02-20 10:12:54 +01:00
|
|
|
<th>
|
2019-02-18 08:47:29 +01:00
|
|
|
{t("profile.displayName")}
|
2019-02-20 10:12:54 +01:00
|
|
|
</th>
|
2019-02-18 08:47:29 +01:00
|
|
|
<td>{me.displayName}</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
2019-02-20 10:12:54 +01:00
|
|
|
<th>
|
2019-02-18 08:47:29 +01:00
|
|
|
{t("profile.mail")}
|
2019-02-20 10:12:54 +01:00
|
|
|
</th>
|
2019-02-18 08:47:29 +01:00
|
|
|
<td>
|
|
|
|
|
<MailLink address={me.mail} />
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
2019-02-19 15:05:55 +01:00
|
|
|
{this.renderGroups()}
|
2019-01-17 15:40:11 +01:00
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|
2019-02-19 15:05:55 +01:00
|
|
|
|
|
|
|
|
renderGroups() {
|
|
|
|
|
const { me, t, classes } = this.props;
|
|
|
|
|
|
|
|
|
|
let groups = null;
|
|
|
|
|
if (me.groups.length > 0) {
|
|
|
|
|
groups = (
|
|
|
|
|
<tr>
|
2019-02-20 10:12:54 +01:00
|
|
|
<th>{t("profile.groups")}</th>
|
2019-02-19 15:05:55 +01:00
|
|
|
<td className={classes.spacing}>
|
|
|
|
|
<ul>
|
2019-02-20 10:12:54 +01:00
|
|
|
{me.groups.map(group => {
|
2019-02-19 15:05:55 +01:00
|
|
|
return <li>{group}</li>;
|
|
|
|
|
})}
|
|
|
|
|
</ul>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
return groups;
|
|
|
|
|
}
|
2019-01-17 15:40:11 +01:00
|
|
|
}
|
|
|
|
|
|
2019-02-19 15:22:20 +01:00
|
|
|
export default compose(
|
|
|
|
|
injectSheet(styles),
|
|
|
|
|
translate("commons")
|
|
|
|
|
)(ProfileInfo);
|