Listen for date doc changes
This commit is contained in:
		
							parent
							
								
									454f2d1417
								
							
						
					
					
						commit
						b1d386ca5a
					
				|  | @ -1,6 +1,6 @@ | ||||||
| import { useEffect, useState } from 'react' | import { useEffect, useState } from 'react' | ||||||
| import { Post } from 'common/post' | import { DateDoc, Post } from 'common/post' | ||||||
| import { listenForPost } from 'web/lib/firebase/posts' | import { listenForDateDocs, listenForPost } from 'web/lib/firebase/posts' | ||||||
| 
 | 
 | ||||||
| export const usePost = (postId: string | undefined) => { | export const usePost = (postId: string | undefined) => { | ||||||
|   const [post, setPost] = useState<Post | null | undefined>() |   const [post, setPost] = useState<Post | null | undefined>() | ||||||
|  | @ -37,3 +37,13 @@ export const usePosts = (postIds: string[]) => { | ||||||
|     ) |     ) | ||||||
|     .sort((a, b) => b.createdTime - a.createdTime) |     .sort((a, b) => b.createdTime - a.createdTime) | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | export const useDateDocs = () => { | ||||||
|  |   const [dateDocs, setDateDocs] = useState<DateDoc[]>() | ||||||
|  | 
 | ||||||
|  |   useEffect(() => { | ||||||
|  |     return listenForDateDocs(setDateDocs) | ||||||
|  |   }, []) | ||||||
|  | 
 | ||||||
|  |   return dateDocs | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -7,7 +7,13 @@ import { | ||||||
|   where, |   where, | ||||||
| } from 'firebase/firestore' | } from 'firebase/firestore' | ||||||
| import { DateDoc, Post } from 'common/post' | import { DateDoc, Post } from 'common/post' | ||||||
| import { coll, getValue, getValues, listenForValue } from './utils' | import { | ||||||
|  |   coll, | ||||||
|  |   getValue, | ||||||
|  |   getValues, | ||||||
|  |   listenForValue, | ||||||
|  |   listenForValues, | ||||||
|  | } from './utils' | ||||||
| import { getUserByUsername } from './users' | import { getUserByUsername } from './users' | ||||||
| 
 | 
 | ||||||
| export const posts = coll<Post>('posts') | export const posts = coll<Post>('posts') | ||||||
|  | @ -51,6 +57,11 @@ export async function getDateDocs() { | ||||||
|   return getValues<DateDoc>(q) |   return getValues<DateDoc>(q) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | export function listenForDateDocs(setDateDocs: (dateDocs: DateDoc[]) => void) { | ||||||
|  |   const q = query(posts, where('type', '==', 'date-doc')) | ||||||
|  |   return listenForValues<DateDoc>(q, setDateDocs) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| export async function getDateDoc(username: string) { | export async function getDateDoc(username: string) { | ||||||
|   const user = await getUserByUsername(username) |   const user = await getUserByUsername(username) | ||||||
|   if (!user) return null |   if (!user) return null | ||||||
|  |  | ||||||
|  | @ -13,6 +13,7 @@ import { SiteLink } from 'web/components/site-link' | ||||||
| import { getUser, User } from 'web/lib/firebase/users' | import { getUser, User } from 'web/lib/firebase/users' | ||||||
| import { DateDocPost } from './[username]' | import { DateDocPost } from './[username]' | ||||||
| import { NoSEO } from 'web/components/NoSEO' | import { NoSEO } from 'web/components/NoSEO' | ||||||
|  | import { useDateDocs } from 'web/hooks/use-post' | ||||||
| 
 | 
 | ||||||
| export async function getStaticProps() { | export async function getStaticProps() { | ||||||
|   const dateDocs = await getDateDocs() |   const dateDocs = await getDateDocs() | ||||||
|  | @ -34,9 +35,10 @@ export default function DatePage(props: { | ||||||
|   dateDocs: DateDoc[] |   dateDocs: DateDoc[] | ||||||
|   docCreators: User[] |   docCreators: User[] | ||||||
| }) { | }) { | ||||||
|   const { dateDocs, docCreators } = props |   const { docCreators } = props | ||||||
|   const user = useUser() |   const user = useUser() | ||||||
| 
 | 
 | ||||||
|  |   const dateDocs = useDateDocs() ?? props.dateDocs | ||||||
|   const hasDoc = dateDocs.some((d) => d.creatorId === user?.id) |   const hasDoc = dateDocs.some((d) => d.creatorId === user?.id) | ||||||
| 
 | 
 | ||||||
|   return ( |   return ( | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user