import { useEffect, useState } from 'react' import { datePivot } from '@/lib/time' import { useMe } from '@/components/me' import { ITEM_EDIT_SECONDS, USER_ID } from '@/lib/constants' export default function useCanEdit (item) { const editThreshold = datePivot(new Date(item.invoice?.confirmedAt ?? item.createdAt), { seconds: ITEM_EDIT_SECONDS }) const { me } = useMe() // deleted items can never be edited and every item has a 10 minute edit window // except bios, they can always be edited but they should never show the countdown const noEdit = !!item.deletedAt || (Date.now() >= editThreshold) || item.bio const authorEdit = me && item.mine const [canEdit, setCanEdit] = useState(!noEdit && authorEdit) useEffect(() => { // allow anon edits if they have the correct hmac for the item invoice // (the server will verify the hmac) const invParams = window.localStorage.getItem(`item:${item.id}:hash:hmac`) const anonEdit = !!invParams && !me && Number(item.user.id) === USER_ID.anon // anonEdit should not override canEdit, but only allow edits if they aren't already allowed setCanEdit(canEdit => canEdit || anonEdit) }, []) return [canEdit, setCanEdit, editThreshold] }