All files / src/hooks useModalState.ts

100% Statements 6/6
100% Branches 2/2
100% Functions 3/3
100% Lines 6/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35                18x         18x 7x           18x 2x           18x              
import { useState, useCallback } from "react";
 
export interface ModalState<T = unknown> {
	isOpen: boolean;
	data: T | null;
}
 
export function useModalState<T = unknown>() {
	const [state, setState] = useState<ModalState<T>>({
		isOpen: false,
		data: null,
	});
 
	const open = useCallback((data?: T) => {
		setState({
			isOpen: true,
			data: data ?? null,
		});
	}, []);
 
	const close = useCallback(() => {
		setState({
			isOpen: false,
			data: null,
		});
	}, []);
 
	return {
		isOpen: state.isOpen,
		data: state.data,
		open,
		close,
	};
}