From 88d14a40b165a61529dfbf4e1b3c372572ba362a Mon Sep 17 00:00:00 2001 From: Max Leiter Date: Wed, 30 Mar 2022 20:52:30 -0700 Subject: [PATCH] client: redirect on page expiration if not author --- .../badges/expiration-badge/index.tsx | 5 ++- client/components/post-page/index.tsx | 41 ++++++++++++------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/client/components/badges/expiration-badge/index.tsx b/client/components/badges/expiration-badge/index.tsx index d089378..09f620a 100644 --- a/client/components/badges/expiration-badge/index.tsx +++ b/client/components/badges/expiration-badge/index.tsx @@ -30,10 +30,11 @@ const ExpirationBadge = ({ }, [expirationDate]) const isExpired = useMemo(() => { - return expirationDate && new Date(expirationDate) < new Date() - }, [expirationDate]) + return timeUntilString && timeUntilString === "in 0 seconds" + }, [timeUntilString]) useEffect(() => { + // check if expired every if (isExpired) { if (onExpires) { onExpires(); diff --git a/client/components/post-page/index.tsx b/client/components/post-page/index.tsx index 5504281..23190fa 100644 --- a/client/components/post-page/index.tsx +++ b/client/components/post-page/index.tsx @@ -23,6 +23,32 @@ type Props = { const PostPage = ({ post }: Props) => { const router = useRouter() + + const isMobile = useMediaQuery("mobile") + const [isExpired, setIsExpired] = useState(post.expiresAt ? new Date(post.expiresAt) < new Date() : null) + + useEffect(() => { + let interval: NodeJS.Timer | null = null; + if (post.expiresAt) { + interval = setInterval(() => { + const expirationDate = new Date(post.expiresAt ? post.expiresAt : "") + setIsExpired(expirationDate < new Date()) + }, 4000) + } + return () => { + if (interval) clearInterval(interval) + } + }, [post.expiresAt]) + + const onExpires = useCallback(() => { + const isOwner = post.users ? post.users[0].id === Cookies.get("drift-userid") : false + + if (isExpired && !isOwner) { + router.push("/expired") + return <> + } + }, [isExpired, post.users, router]) + const download = async () => { const downloadZip = (await import("client-zip")).downloadZip const blob = await downloadZip(post.files.map((file: any) => { @@ -40,21 +66,6 @@ const PostPage = ({ post }: Props) => { } - const isMobile = useMediaQuery("mobile") - - const isExpired = useMemo(() => { - return post.expiresAt && new Date(post.expiresAt) < new Date() - }, [post.expiresAt]) - - const onExpires = useCallback(() => { - const isOwner = post.users ? post.users[0].id === Cookies.get("drift-userid") : false - - if (isExpired && !isOwner) { - router.push("/expired") - return <> - } - }, [isExpired, post.users, router]) - return (