UNPKG

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