-
Notifications
You must be signed in to change notification settings - Fork 1
/
useProject.tsx
38 lines (31 loc) · 895 Bytes
/
useProject.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import * as React from "react"
import * as Types from "types"
import db from "utils/firestore"
export default function useProject(pid: string, oid: string) {
const [status, setStatus] = React.useState<"loading" | "error" | "ready">(
null,
)
const [project, setProject] = React.useState<Types.ProjectData>(null)
React.useEffect(() => {
let unsub: () => void
const docRef = db
.collection("users")
.doc(oid)
.collection("projects")
.doc(pid)
docRef.get().then((doc) => {
if (!doc.exists) {
setStatus("error")
}
setStatus("ready")
setProject({ id: doc.id, ...doc.data() } as Types.ProjectData)
unsub = docRef.onSnapshot((doc) =>
setProject({ id: doc.id, ...doc.data() } as Types.ProjectData),
)
})
return () => {
unsub?.()
}
}, [pid, oid])
return { status, project }
}