Files
supabase/packages/common/hooks/useOnChange.ts
T
Francesco Sansalvadore d24df14aab Feat/toc component (#33964)
* test fuma toc

* make toc work

* ok toc

* ui-patterns toc

* fix types

* cleanup

* fix overflow issues

* cleanup

* fix loading w

* Update apps/docs/components/GuidesTableOfContents.tsx

* fix prettier

* format

* install deps

* target ES2018

* tweak regex

* update docs test snapshots

* fix useSubscribeTocRerender
2025-03-05 23:10:02 +01:00

28 lines
684 B
TypeScript

import { useState } from 'react'
function isDifferent(a: unknown, b: unknown): boolean {
if (Array.isArray(a) && Array.isArray(b)) {
return b.length !== a.length || a.some((v, i) => isDifferent(v, b[i]))
}
return a !== b
}
/**
* @param value - state to watch
* @param onChange - when the state changed
* @param isUpdated - a function that determines if the state is updated
*/
export function useOnChange<T>(
value: T,
onChange: (current: T, previous: T) => void,
isUpdated: (prev: T, current: T) => boolean = isDifferent
): void {
const [prev, setPrev] = useState<T>(value)
if (isUpdated(prev, value)) {
onChange(value, prev)
setPrev(value)
}
}