mirror of
https://github.com/supabase/supabase.git
synced 2026-07-05 05:14:21 +08:00
* refactor: refactor support form Refactor support form to make it easier to maintain: - Split up large components into smaller components and hooks - Lift state up so we don't have to do complex child/parent state-syncing via useEffect - Use nuqs parsing for consistent serialization/deserialization of support form prefilled fields * test: support form Add comprehensive tests for support form * fix(support form): project and org empty state * Nit clean up * More clean up * cleannnn * fix(support form): allow case-insensitive category in url * clean(support form tests): remove unused param * fix(support form): incorrect logic for sending affected services in payload * clean(support form): use NO_ORG_MARKER and NO_PROJECT_MARKER instead of strings * fix(support form): don't show upgrade cta if already on enterprise --------- Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
28 lines
709 B
TypeScript
28 lines
709 B
TypeScript
import { useRef } from 'react'
|
|
|
|
export function useStateTransition<
|
|
State extends { type: string },
|
|
PrevType extends State['type'],
|
|
NewType extends State['type'],
|
|
>(
|
|
state: State,
|
|
prevTest: PrevType,
|
|
newTest: NewType,
|
|
cb: (
|
|
prevState: Extract<State, { type: PrevType }>,
|
|
currState: Extract<State, { type: NewType }>
|
|
) => void
|
|
): void {
|
|
const prevState = useRef(state)
|
|
const savedPrevState = prevState.current
|
|
const shouldRunCallback = savedPrevState.type === prevTest && state.type === newTest
|
|
prevState.current = state
|
|
|
|
if (shouldRunCallback) {
|
|
cb(
|
|
savedPrevState as Extract<State, { type: PrevType }>,
|
|
state as Extract<State, { type: NewType }>
|
|
)
|
|
}
|
|
}
|