UNPKG

2.94 kBPlain TextView Raw
1import { EventEmitter, Subscription } from '@unimodules/core';
2import { UnavailabilityError } from '@unimodules/core';
3
4import AdMobNativeModule from './ExpoAdsAdMobRewardedVideoAdManager';
5
6const moduleName = 'AdMobRewarded';
7
8const eventNames = [
9 'rewardedVideoDidRewardUser',
10 'rewardedVideoDidLoad',
11 'rewardedVideoDidFailToLoad',
12 'rewardedVideoDidOpen',
13 'rewardedVideoDidStart',
14 'rewardedVideoDidClose',
15 'rewardedVideoWillLeaveApplication',
16];
17
18type EventNameType =
19 | 'rewardedVideoDidRewardUser'
20 | 'rewardedVideoDidLoad'
21 | 'rewardedVideoDidFailToLoad'
22 | 'rewardedVideoDidOpen'
23 | 'rewardedVideoDidStart'
24 | 'rewardedVideoDidClose'
25 | 'rewardedVideoWillLeaveApplication';
26
27const eventEmitter = new EventEmitter(AdMobNativeModule);
28
29type EventListener = (...args: any[]) => void;
30
31const eventHandlers: { [eventName: string]: Map<EventListener, Subscription> } = {};
32
33for (const eventName of eventNames) {
34 eventHandlers[eventName] = new Map();
35}
36
37export default {
38 async setAdUnitID(id: string): Promise<void> {
39 if (!AdMobNativeModule.setAdUnitID) {
40 throw new UnavailabilityError(moduleName, 'setAdUnitID');
41 }
42
43 await AdMobNativeModule.setAdUnitID(id);
44 },
45 async setTestDeviceID(id: string): Promise<void> {
46 if (!AdMobNativeModule.setTestDeviceID) {
47 throw new UnavailabilityError(moduleName, 'setTestDeviceID');
48 }
49
50 await AdMobNativeModule.setTestDeviceID(id);
51 },
52 async requestAdAsync(): Promise<void> {
53 if (!AdMobNativeModule.requestAd) {
54 throw new UnavailabilityError(moduleName, 'requestAdAsync');
55 }
56
57 await AdMobNativeModule.requestAd();
58 },
59 async showAdAsync(): Promise<void> {
60 if (!AdMobNativeModule.showAd) {
61 throw new UnavailabilityError(moduleName, 'showAdAsync');
62 }
63
64 await AdMobNativeModule.showAd();
65 },
66 async dismissAdAsync(): Promise<void> {
67 if (!AdMobNativeModule.dismissAd) {
68 throw new UnavailabilityError(moduleName, 'dismissAdAsync');
69 }
70
71 await AdMobNativeModule.dismissAd();
72 },
73 async getIsReadyAsync(): Promise<boolean> {
74 if (!AdMobNativeModule.getIsReady) {
75 throw new UnavailabilityError(moduleName, 'getIsReadyAsync');
76 }
77
78 return await AdMobNativeModule.getIsReady();
79 },
80 addEventListener(type: EventNameType, handler: EventListener) {
81 if (eventNames.includes(type)) {
82 eventHandlers[type].set(handler, eventEmitter.addListener(type, handler));
83 } else {
84 console.log(`Event with type ${type} does not exist.`);
85 }
86 },
87 removeEventListener(type: EventNameType, handler: EventListener) {
88 const eventSubscription = eventHandlers[type].get(handler);
89 if (!eventHandlers[type].has(handler) || !eventSubscription) {
90 return;
91 }
92 eventSubscription.remove();
93 eventHandlers[type].delete(handler);
94 },
95 removeAllListeners() {
96 for (const eventName of eventNames) {
97 eventEmitter.removeAllListeners(eventName);
98 }
99 },
100};