import * as React from "react" import gql from "graphql-tag" import styled from "styled-components" import * as moment from "moment" import * as classNames from "classnames" import { UserProfilePicture } from "../ProfilePicture" import { StarIndicator } from "../Book/RatingStarIndicator" import { AnimatedBackground } from "../ContentPlaceholder" import withTranslate from "jamplay-common/i18n/withTranslate" const Container = styled.div` position: relative; .review-item-in-list__meta-data { display: flex; .review-item-in-list__profile-picture { position: relative; width: 40px; height: 40px; margin-right: 8px; } .review-item-in-list__profile-picture--placeholder { background: ${(props) => props.theme.placeholder}; border: 0; } .review-item-in-list__name-and-time { position: relative; display: flex; flex-direction: column; vertical-align: top; .review-item-in-list__name { position: relative; font-size: 1rem; line-height: 1.1rem; } .review-item-in-list__rating { margin: 3px 0; .StarIndicator { display: flex; color: ${(props) => props.theme.pumpkin}; } } .review-item-in-list__rating--placeholder { margin: 3px 0; .StarIndicator { display: flex; color: ${(props) => props.theme.placeholder}; } } .review-item-in-list__time { position: relative; color: ${(props) => props.theme.grey}; font-style: italic; font-size: 0.8rem; line-height: 0.85rem; font-weight: 600; } } } .review-item-in-list__content { position: relative; margin-top: 8px; margin-left: 48px; } .review-item-in-list__delete { position: absolute; top: 0px; right: 10px; cursor: pointer; color: ${(props) => props.theme.darkGrey}; opacity: 0.8; &:hover { opacity: 1; } } ` export type TReview = { _id: string rating: number review: string isOwner: boolean createdAt: string user?: { _id: string name: string profilePicture: string | null } } export type PropsType = { style?: any className?: any review?: TReview | null isPlaceholder?: boolean onDelete?: any } const placeholderReview: TReview = { _id: "-1", createdAt: new Date(0).toISOString(), isOwner: false, rating: 5, review: "loading", user: { _id: "-1", name: "loading", profilePicture: null, }, } const Component: React.SFC = (props) => { const review: TReview = props.isPlaceholder ? placeholderReview : props.review || placeholderReview return (
{review.user ? review.user.name : "unknown"} {props.isPlaceholder && }
{moment(review.createdAt).fromNow()} {props.isPlaceholder && }
{review.review} {props.isPlaceholder && }
{ review.isOwner &&
{props.t("delete")}
}
) } export default Object.assign(withTranslate(Component) as React.SFC, { fragments: { bookReview: gql` fragment ReviewItemInList__BookReview on BookReview { _id rating review isOwner createdAt user { _id name profilePicture } } ` }, })