saleor-dashboard/src/components/Timeline/TimelineNote.tsx

107 lines
2.4 KiB
TypeScript
Raw Normal View History

2019-06-19 14:40:52 +00:00
import Avatar from "@material-ui/core/Avatar";
import Card from "@material-ui/core/Card";
import CardContent from "@material-ui/core/CardContent";
2019-08-09 13:13:50 +00:00
import * as colors from "@material-ui/core/colors";
2019-06-19 14:40:52 +00:00
import {
createStyles,
Theme,
withStyles,
WithStyles
} from "@material-ui/core/styles";
import Typography from "@material-ui/core/Typography";
import PersonIcon from "@material-ui/icons/Person";
2019-08-09 11:14:35 +00:00
import CRC from "crc-32";
2019-08-09 10:26:22 +00:00
import React from "react";
2019-06-19 14:40:52 +00:00
import { DateTime } from "../Date";
const palette = [
colors.amber,
colors.blue,
colors.cyan,
colors.deepOrange,
colors.deepPurple,
colors.green,
colors.indigo,
colors.lightBlue,
colors.lightGreen,
colors.lime,
colors.orange,
colors.pink,
colors.purple,
colors.red,
colors.teal,
colors.yellow
].map(color => color[500]);
2019-10-28 16:16:49 +00:00
const styles = theme =>
2019-06-19 14:40:52 +00:00
createStyles({
avatar: {
left: -45,
position: "absolute",
top: 0
},
card: {
2019-10-28 16:16:49 +00:00
marginBottom: theme.spacing(3),
marginLeft: theme.spacing(3),
2019-06-19 14:40:52 +00:00
position: "relative"
},
cardContent: {
"&:last-child": {
2019-10-22 11:49:35 +00:00
padding: 16
},
boxShadow: "0px 5px 10px rgba(0, 0, 0, 0.05)"
2019-06-19 14:40:52 +00:00
},
root: {
position: "relative"
},
title: {
2019-10-22 11:49:35 +00:00
"& p": {
fontSize: "14px"
},
2019-06-19 14:40:52 +00:00
alignItems: "center",
display: "flex",
justifyContent: "space-between",
2019-10-28 16:16:49 +00:00
marginBottom: theme.spacing(),
paddingLeft: theme.spacing(3)
2019-06-19 14:40:52 +00:00
}
});
interface TimelineNoteProps extends WithStyles<typeof styles> {
date: string;
message: string | null;
user: {
email: string;
};
}
export const TimelineNote = withStyles(styles, { name: "TimelineNote" })(
({ classes, date, user, message }: TimelineNoteProps) => (
<div className={classes.root}>
<Avatar
className={classes.avatar}
style={{ background: palette[CRC.str(user.email) % palette.length] }}
>
<PersonIcon />
</Avatar>
2019-10-22 11:49:35 +00:00
<div className={classes.title}>
<Typography>{user.email}</Typography>
<Typography>
<DateTime date={date} />
</Typography>
</div>
2019-06-19 14:40:52 +00:00
<Card className={classes.card}>
<CardContent className={classes.cardContent}>
<Typography
dangerouslySetInnerHTML={{
__html: message.replace("\n", "<br />")
}}
/>
</CardContent>
</Card>
</div>
)
);
TimelineNote.displayName = "TimelineNote";
export default TimelineNote;