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]; }