import dayjs, { Dayjs } from 'dayjs' import { useEffect, useRef } from 'react' import { HasIsEqual } from 'react-firebase-hooks/firestore/dist/util' type RefHook = { current: T } // export const useComparatorRef = ( // value: T | null | undefined, // isEqual: (v1: T | null | undefined, v2: T | null | undefined) => boolean, // onChange?: () => void, // ): RefHook => { // const ref = useRef(value) // useEffect(() => { // if (!isEqual(value, ref.current)) { // ref.current = value // if (onChange) { // onChange() // } // } // }) // return ref // } const isEqual = >( v1: T | null | undefined, v2: T | null | undefined, ): boolean => { const bothNull: boolean = !v1 && !v2 const equal: boolean = !!v1 && !!v2 && v1.isEqual(v2) return bothNull || equal } // export const useIsEqualRef = >( // value: T | null | undefined, // onChange?: () => void, // ): RefHook => { // return useComparatorRef(value, isEqual, onChange) // } export const useRefChangeLimitExceeded = ( fref: HasIsEqual | null | undefined, ) => { const timestampsRef = useRef([]) const frefRef = useRef | null | undefined>(null) useEffect(() => { if (!isEqual(fref, frefRef.current)) { frefRef.current = fref timestampsRef.current = [dayjs(), ...timestampsRef.current] } }) const exceeded = () => { const a = !!timestampsRef.current[3]?.isAfter(dayjs().subtract(3, 'second')) const b = !!timestampsRef.current[5]?.isAfter(dayjs().subtract(5, 'second')) return a || b } if (exceeded()) { console.error( '%cRef change limit exceeded!!!', 'font-weight: bold; font-size: large; color: red;', ) } return { exceeded, timestamps: timestampsRef } }