mirror of
https://github.com/bubblecup-12/VogelSocialMedia.git
synced 2025-07-06 15:18:48 +00:00
basic post done
This commit is contained in:
parent
357f370b56
commit
6f0f3580fa
3 changed files with 191 additions and 0 deletions
82
code/frontend/src/Post.tsx
Normal file
82
code/frontend/src/Post.tsx
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
import React, { useState } from 'react';
|
||||||
|
import './post.css';
|
||||||
|
|
||||||
|
export default function Post() {
|
||||||
|
const [expanded, setExpanded] = useState(false);
|
||||||
|
|
||||||
|
const handleExpandClick = () => {
|
||||||
|
setExpanded(!expanded);
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="post-card">
|
||||||
|
<div className="post-header">
|
||||||
|
<div className="avatar">R</div>
|
||||||
|
<div className="post-header-text">
|
||||||
|
<h3>Shrimp and Chorizo Paella</h3>
|
||||||
|
<p className="subheader">September 14, 2016</p>
|
||||||
|
</div>
|
||||||
|
<button className="icon-button more-button" aria-label="settings">
|
||||||
|
⋮
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<img
|
||||||
|
className="post-image"
|
||||||
|
src="/static/images/cards/paella.jpg"
|
||||||
|
alt="Paella dish"
|
||||||
|
/>
|
||||||
|
<div className="post-content">
|
||||||
|
<p>
|
||||||
|
This impressive paella is a perfect party dish and a fun meal to cook
|
||||||
|
together with your guests. Add 1 cup of frozen peas along with the mussels,
|
||||||
|
if you like.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div className="post-actions">
|
||||||
|
<button className="icon-button" aria-label="add to favorites">
|
||||||
|
<i className="fa fa-heart"></i>
|
||||||
|
</button>
|
||||||
|
<button className="icon-button" aria-label="share">
|
||||||
|
<i className="fa fa-share"></i>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
className={`icon-button expand-button ${expanded ? 'expanded' : ''}`}
|
||||||
|
onClick={handleExpandClick}
|
||||||
|
aria-expanded={expanded}
|
||||||
|
aria-label="show more"
|
||||||
|
>
|
||||||
|
<i className="fa fa-chevron-down"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
{expanded && (
|
||||||
|
<div className="post-collapse">
|
||||||
|
<h4>Method:</h4>
|
||||||
|
<p>
|
||||||
|
Heat 1/2 cup of the broth in a pot until simmering, add saffron and set
|
||||||
|
aside for 10 minutes.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Heat oil in a (14- to 16-inch) paella pan or a large, deep skillet over
|
||||||
|
medium-high heat. Add chicken, shrimp and chorizo, and cook, stirring
|
||||||
|
occasionally until lightly browned, 6 to 8 minutes. Transfer shrimp to a
|
||||||
|
large plate and set aside, leaving chicken and chorizo in the pan. Add
|
||||||
|
pimentón, bay leaves, garlic, tomatoes, onion, salt and pepper, and cook,
|
||||||
|
stirring often until thickened and fragrant, about 10 minutes. Add
|
||||||
|
saffron broth and remaining 4 1/2 cups chicken broth; bring to a boil.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Add rice and stir very gently to distribute. Top with artichokes and
|
||||||
|
peppers, and cook without stirring, until most of the liquid is absorbed,
|
||||||
|
15 to 18 minutes. Reduce heat to medium-low, add reserved shrimp and
|
||||||
|
mussels, tucking them down into the rice, and cook again without
|
||||||
|
stirring, until mussels have opened and rice is just tender, 5 to 7
|
||||||
|
minutes more. (Discard any mussels that don't open.)
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Set aside off of the heat to let rest for 10 minutes, and then serve.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
import React, { useState, useEffect, useRef } from "react";
|
import React, { useState, useEffect, useRef } from "react";
|
||||||
import TestPost from "../TestPost";
|
import TestPost from "../TestPost";
|
||||||
import "./feed.css";
|
import "./feed.css";
|
||||||
|
import Post from "../Post";
|
||||||
|
|
||||||
function Feed() {
|
function Feed() {
|
||||||
const [posts, setPosts] = useState<number[]>([]);
|
const [posts, setPosts] = useState<number[]>([]);
|
||||||
|
@ -48,6 +49,7 @@ function Feed() {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="feedContainer">
|
<div className="feedContainer">
|
||||||
|
<Post/>
|
||||||
<main className="feedContent" ref={feedRef}>
|
<main className="feedContent" ref={feedRef}>
|
||||||
{posts.map((postId, idx) => (
|
{posts.map((postId, idx) => (
|
||||||
<TestPost key={idx} postId={postId} />
|
<TestPost key={idx} postId={postId} />
|
||||||
|
|
107
code/frontend/src/post.css
Normal file
107
code/frontend/src/post.css
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
.post-card {
|
||||||
|
max-width: 345px;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-radius: 8px;
|
||||||
|
overflow: hidden;
|
||||||
|
font-family: sans-serif;
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 16px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.avatar {
|
||||||
|
background-color: #f44336;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 50%;
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-right: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-header-text h3 {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subheader {
|
||||||
|
color: #888;
|
||||||
|
font-size: 0.85rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.more-button {
|
||||||
|
position: absolute;
|
||||||
|
right: 16px;
|
||||||
|
top: 16px;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-image {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
max-height: 194px;
|
||||||
|
object-fit: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-content {
|
||||||
|
padding: 16px;
|
||||||
|
color: #444;
|
||||||
|
font-size: 0.95rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-actions {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 8px 16px;
|
||||||
|
border-top: 1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-button {
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
margin-right: 10px;
|
||||||
|
color: #555;
|
||||||
|
transition: transform 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-button:hover {
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.expand-button {
|
||||||
|
margin-left: auto;
|
||||||
|
transition: transform 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.expand-button.expanded {
|
||||||
|
transform: rotate(180deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-collapse {
|
||||||
|
padding: 0 16px 16px;
|
||||||
|
border-top: 1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-collapse h4 {
|
||||||
|
margin: 16px 0 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-collapse p {
|
||||||
|
margin: 0 0 12px;
|
||||||
|
font-size: 0.95rem;
|
||||||
|
color: #444;
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue