Fix navigate to home not working

This commit is contained in:
James Grugett 2022-06-05 15:45:31 -05:00
parent 96db414ca1
commit a39b1e502c

View File

@ -11,30 +11,7 @@ import { getContractFromSlug } from 'web/lib/firebase/contracts'
const Home = () => { const Home = () => {
const user = useUser() const user = useUser()
const [contract, setContract] = useContractPage()
const [contract, setContract] = useState<Contract | undefined>()
useEffect(() => {
const onBack = () => {
const path = location.pathname.split('/').slice(1)
if (path[0] === 'home') setContract(undefined)
else {
const [username, contractSlug] = path
if (!username || !contractSlug) setContract(undefined)
else {
// Show contract if route is to a contract: '/[username]/[contractSlug]'.
getContractFromSlug(contractSlug).then(setContract)
}
}
}
window.addEventListener('popstate', onBack)
return () => window.removeEventListener('popstate', onBack)
}, [])
useEffect(() => {
if (contract) window.scrollTo(0, 0)
}, [contract])
if (user === null) { if (user === null) {
Router.replace('/') Router.replace('/')
@ -77,4 +54,47 @@ const Home = () => {
) )
} }
const useContractPage = () => {
const [contract, setContract] = useState<Contract | undefined>()
useEffect(() => {
const onBack = () => {
const path = location.pathname.split('/').slice(1)
if (path[0] === 'home') setContract(undefined)
else {
const [username, contractSlug] = path
if (!username || !contractSlug) setContract(undefined)
else {
// Show contract if route is to a contract: '/[username]/[contractSlug]'.
getContractFromSlug(contractSlug).then(setContract)
}
}
}
window.addEventListener('popstate', onBack)
// Hack. Listen to changes in href to clear contract on navigate home.
let href = document.location.href
const observer = new MutationObserver(function (_mutations) {
if (href != document.location.href) {
href = document.location.href
const path = location.pathname.split('/').slice(1)
if (path[0] === 'home') setContract(undefined)
}
})
observer.observe(document, { subtree: true, childList: true })
return () => {
window.removeEventListener('popstate', onBack)
observer.disconnect()
}
}, [])
useEffect(() => {
if (contract) window.scrollTo(0, 0)
}, [contract])
return [contract, setContract] as const
}
export default Home export default Home