Back

100% Statements 9/9
60% Branches 3/5
100% Functions 3/3
100% Lines 9/9

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 36 37 38 39 40 41 42 43 44 45 46 47 48                                274x   274x   274x               274x               137x 81x 56x 56x     137x          
import { useSelect } from '@wordpress/data';
import { useCallback } from '@wordpress/element';
import { store } from '../../social-store';
import { validateConnectInputs } from './connect-input-validation';
import type {
	ConnectInputValidation,
	ConnectInputValues,
	ValidateConnectInputsOptions,
} from './connect-input-validation';
 
/**
 * Wires {@link validateConnectInputs} to the store's already-connected checks.
 *
 * @return A function validating a service's inputs.
 */
export function useConnectInputValidation() {
	const { isMastodonAccountAlreadyConnected, isBlueskyAccountAlreadyConnected } = useSelect(
		select => {
			const selectors = select( store );
 
			return {
				isMastodonAccountAlreadyConnected: selectors.isMastodonAccountAlreadyConnected,
				isBlueskyAccountAlreadyConnected: selectors.isBlueskyAccountAlreadyConnected,
			};
		},
		[]
	);
 
	return useCallback(
		(
			serviceId: string,
			values: ConnectInputValues,
			options: Pick< ValidateConnectInputsOptions, 'allowDuplicate' > = {}
		): ConnectInputValidation => {
			let isAlreadyConnected: ValidateConnectInputsOptions[ 'isAlreadyConnected' ];
 
			if ( 'mastodon' === serviceId ) {
				isAlreadyConnected = isMastodonAccountAlreadyConnected;
			} else Eif ( 'bluesky' === serviceId ) {
				isAlreadyConnected = isBlueskyAccountAlreadyConnected;
			}
 
			return validateConnectInputs( serviceId, values, { ...options, isAlreadyConnected } );
		},
		[ isBlueskyAccountAlreadyConnected, isMastodonAccountAlreadyConnected ]
	);
}