( ref: unknown, interval = 300, maxRetries = 10, )
| 42 | * @param maxRetries - The number of times to retry firing the event. |
| 43 | */ |
| 44 | export const findPlayer = ( |
| 45 | ref: unknown, |
| 46 | interval = 300, |
| 47 | maxRetries = 10, |
| 48 | ): Promise<HTMLVmPlayerElement | undefined> => { |
| 49 | const el = (isInstanceOf(ref, HTMLElement) |
| 50 | ? ref |
| 51 | : getElement(ref)) as HTMLElement; |
| 52 | |
| 53 | const search = deferredPromise<HTMLVmPlayerElement>(); |
| 54 | |
| 55 | // eslint-disable-next-line prefer-const |
| 56 | let stopFiring: () => void; |
| 57 | |
| 58 | const event = new CustomEvent<FoundPlayerCallback>(FIND_PLAYER_EVENT, { |
| 59 | bubbles: true, |
| 60 | composed: true, |
| 61 | detail: player => { |
| 62 | search.resolve(player); |
| 63 | stopFiring(); |
| 64 | }, |
| 65 | }); |
| 66 | |
| 67 | stopFiring = fireEventAndRetry( |
| 68 | el, |
| 69 | event, |
| 70 | () => { |
| 71 | search.reject(`Could not find player for ${el.nodeName}`); |
| 72 | }, |
| 73 | interval, |
| 74 | maxRetries, |
| 75 | ); |
| 76 | |
| 77 | return search.promise; |
| 78 | }; |
no test coverage detected