Loading frontend/public/default_user.jpg 0 → 100644 +44.7 KiB Loading image diff... frontend/src/components/User/review_tile/ReviewTile.tsx 0 → 100644 +36 −0 Original line number Diff line number Diff line import {Flex, Typography} from "antd"; import "../user_heading/user_heading.css"; import "./review_tile.css"; import {Review} from "../../../types.ts"; import {Link} from "react-router-dom"; import {useState} from "react"; const {Text, Paragraph} = Typography; interface ReviewProps { review: Review; } function ReviewTile({review}: ReviewProps) { const [ellipsis, setEllipsis] = useState(true); return ( <Flex vertical className="user_box"> <Flex justify="space-between" align="center"> <Flex> <Link to={"/movie/" + review.movie.id}> <Text className="review_tile__heading clickable" strong>The Godfather Part 2</Text> </Link> <Text className="review_tile__heading">(1974)</Text> </Flex> <Text className="user__club_text review_tile__rating" strong>{review.rating}/10</Text> </Flex> <Flex className="review_tile__review"> <Paragraph ellipsis={ellipsis ? { rows: 3, expandable: true, symbol: 'more' } : false}> {review.text} </Paragraph> </Flex> </Flex> ); } export default ReviewTile; No newline at end of file frontend/src/components/User/review_tile/review_tile.css 0 → 100644 +28 −0 Original line number Diff line number Diff line .review_tile__rating { border: 3px solid red; border-radius: 15px; padding: 0.2rem; background-color: white; } .review_tile__heading { font-size: 1.5rem; padding-right: 0.5rem; } .review_tile__review { max-height: 6.7rem; overflow: hidden; } .review_tile__review.expanded { max-height: none; } .review_tile__see-more { display: block; text-align: right; cursor: pointer; color: blue; /* Style the "See more" link */ } No newline at end of file frontend/src/components/User/user_heading/UserHeading.tsx 0 → 100644 +27 −0 Original line number Diff line number Diff line import {Avatar, Flex, Typography} from "antd"; import "./user_heading.css" const {Text} = Typography; interface HeadingProps { username: string; createdDate: Date; } function UserHeading({username, createdDate}: HeadingProps) { return ( <Flex className="user_box"> <Avatar className="user_heading__avatar" shape="square" size={100} src="/default_user.jpg"/> <Flex vertical className="user_heading__details"> <Text className="details__name">{username}</Text> <Text italic>User joined in {createdDate.toLocaleString('default', { month: 'long', year: 'numeric' })} </Text> </Flex> </Flex> ); } export default UserHeading; No newline at end of file frontend/src/components/User/user_heading/user_heading.css 0 → 100644 +22 −0 Original line number Diff line number Diff line .user_box { border: 2px solid black; border-radius: 15px; box-shadow: 0 0 8px gray; padding: 0.5rem; text-align: start; margin: 0.5rem; } .user_heading__avatar { margin-right: 1rem; } .user_heading__details { align-items: start; justify-content: space-between; } .details__name { font-size: 2rem; } Loading
frontend/src/components/User/review_tile/ReviewTile.tsx 0 → 100644 +36 −0 Original line number Diff line number Diff line import {Flex, Typography} from "antd"; import "../user_heading/user_heading.css"; import "./review_tile.css"; import {Review} from "../../../types.ts"; import {Link} from "react-router-dom"; import {useState} from "react"; const {Text, Paragraph} = Typography; interface ReviewProps { review: Review; } function ReviewTile({review}: ReviewProps) { const [ellipsis, setEllipsis] = useState(true); return ( <Flex vertical className="user_box"> <Flex justify="space-between" align="center"> <Flex> <Link to={"/movie/" + review.movie.id}> <Text className="review_tile__heading clickable" strong>The Godfather Part 2</Text> </Link> <Text className="review_tile__heading">(1974)</Text> </Flex> <Text className="user__club_text review_tile__rating" strong>{review.rating}/10</Text> </Flex> <Flex className="review_tile__review"> <Paragraph ellipsis={ellipsis ? { rows: 3, expandable: true, symbol: 'more' } : false}> {review.text} </Paragraph> </Flex> </Flex> ); } export default ReviewTile; No newline at end of file
frontend/src/components/User/review_tile/review_tile.css 0 → 100644 +28 −0 Original line number Diff line number Diff line .review_tile__rating { border: 3px solid red; border-radius: 15px; padding: 0.2rem; background-color: white; } .review_tile__heading { font-size: 1.5rem; padding-right: 0.5rem; } .review_tile__review { max-height: 6.7rem; overflow: hidden; } .review_tile__review.expanded { max-height: none; } .review_tile__see-more { display: block; text-align: right; cursor: pointer; color: blue; /* Style the "See more" link */ } No newline at end of file
frontend/src/components/User/user_heading/UserHeading.tsx 0 → 100644 +27 −0 Original line number Diff line number Diff line import {Avatar, Flex, Typography} from "antd"; import "./user_heading.css" const {Text} = Typography; interface HeadingProps { username: string; createdDate: Date; } function UserHeading({username, createdDate}: HeadingProps) { return ( <Flex className="user_box"> <Avatar className="user_heading__avatar" shape="square" size={100} src="/default_user.jpg"/> <Flex vertical className="user_heading__details"> <Text className="details__name">{username}</Text> <Text italic>User joined in {createdDate.toLocaleString('default', { month: 'long', year: 'numeric' })} </Text> </Flex> </Flex> ); } export default UserHeading; No newline at end of file
frontend/src/components/User/user_heading/user_heading.css 0 → 100644 +22 −0 Original line number Diff line number Diff line .user_box { border: 2px solid black; border-radius: 15px; box-shadow: 0 0 8px gray; padding: 0.5rem; text-align: start; margin: 0.5rem; } .user_heading__avatar { margin-right: 1rem; } .user_heading__details { align-items: start; justify-content: space-between; } .details__name { font-size: 2rem; }