Add PDF modal and selectedPost setter

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
2026-02-14 20:34:26 -05:00
parent 333c31c912
commit 1eb462fc40
2673 changed files with 1107183 additions and 2 deletions

View File

@@ -0,0 +1,27 @@
import React from 'react'
import useAppStore from '../store/useAppStore'
import PDFPreview from './PDFPreview'
const PDFModal: React.FC = () => {
const selectedPostId = useAppStore((s) => s.selectedPostId)
const setSelectedPost = useAppStore((s) => s.setSelectedPost)
const post = useAppStore((s) => s.posts.find((p) => p.id === selectedPostId))
if (!selectedPostId || !post?.attachedPDF) return null
return (
<div className="modal-backdrop" onClick={() => setSelectedPost(null)}>
<div className="modal" onClick={(e) => e.stopPropagation()}>
<div style={{display:'flex',justifyContent:'space-between',alignItems:'center'}}>
<h3>{post.attachedPDF.name}</h3>
<button onClick={() => setSelectedPost(null)}>Close</button>
</div>
<div style={{marginTop:8}}>
<PDFPreview url={post.attachedPDF.url} name={post.attachedPDF.name} />
</div>
</div>
</div>
)
}
export default PDFModal

View File

@@ -8,6 +8,7 @@ import PDFPreview from './PDFPreview'
const PostCard: React.FC<{ post: Post }> = ({ post }) => {
const author = useAppStore((s) => s.users.find((u) => u.id === post.authorId))
const endorsePost = useAppStore((s) => s.endorsePost)
const setSelectedPost = useAppStore((s) => s.setSelectedPost)
if (!author) return null
@@ -27,7 +28,11 @@ const PostCard: React.FC<{ post: Post }> = ({ post }) => {
<p style={{marginTop:8}}>{post.content}</p>
{post.attachedPDF && (
<div style={{marginTop:8}}>
<PDFPreview url={post.attachedPDF.url} name={post.attachedPDF.name} />
<div className="small">{post.attachedPDF.name}</div>
<div style={{marginTop:6,display:'flex',gap:8}}>
<button className="button" onClick={() => setSelectedPost(post.id)}>Open PDF</button>
<PDFPreview url={post.attachedPDF.url} name={post.attachedPDF.name} />
</div>
</div>
)}
<div style={{display:'flex',justifyContent:'space-between',alignItems:'center',marginTop:8}}>