import type { AnyStore, InferStoreRequests } from '../../core/store';
import { isUndefined } from '@videojs/utils/predicate';
/**
* Access the store's request methods.
*
* Returns either the full request map or a specific request function by name.
*
* The request map is stable across renders (same reference).
*
* @example
* ```tsx
* // Get all requests
* function Controls() {
* const request = useRequest(store);
* return ;
* }
*
* // Get a specific request by name
* function PlayButton() {
* const play = useRequest(store, 'play');
* return ;
* }
* ```
*/
export function useRequest(store: S): InferStoreRequests;
export function useRequest>(
store: S,
name: Name,
): InferStoreRequests[Name];
// eslint-disable-next-line react/no-unnecessary-use-prefix
export function useRequest>(
store: S,
name?: Name,
): InferStoreRequests | InferStoreRequests[Name] {
const request = store.request as InferStoreRequests;
if (isUndefined(name)) {
return request;
}
return request[name];
}