[invites] Add jsInitialised method to improve getInitialInvitation
This commit is contained in:
parent
e7be3cc7f8
commit
06c06b764f
|
@ -13,8 +13,16 @@
|
||||||
@implementation RNFirebaseInvites
|
@implementation RNFirebaseInvites
|
||||||
|
|
||||||
static RNFirebaseInvites *theRNFirebaseInvites = nil;
|
static RNFirebaseInvites *theRNFirebaseInvites = nil;
|
||||||
|
static NSString *initialInvite = nil;
|
||||||
|
static bool jsReady = FALSE;
|
||||||
|
|
||||||
+ (nonnull instancetype)instance {
|
+ (nonnull instancetype)instance {
|
||||||
|
// If an event comes in before the bridge has initialised the native module
|
||||||
|
// then we create a temporary instance which handles events until the bridge
|
||||||
|
// and JS side are ready
|
||||||
|
if (theRNFirebaseInvites == nil) {
|
||||||
|
theRNFirebaseInvites = [[RNFirebaseInvites alloc] init];
|
||||||
|
}
|
||||||
return theRNFirebaseInvites;
|
return theRNFirebaseInvites;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,11 +109,11 @@ RCT_EXPORT_METHOD(getInitialInvitation:(RCTPromiseResolveBlock)resolve rejecter:
|
||||||
@"invitationId": receivedInvite.inviteId,
|
@"invitationId": receivedInvite.inviteId,
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
resolve(nil);
|
resolve(initialInvite);
|
||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
} else {
|
} else {
|
||||||
resolve(nil);
|
resolve(initialInvite);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,22 +159,38 @@ RCT_EXPORT_METHOD(sendInvitation:(NSDictionary *) invitation
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RCT_EXPORT_METHOD(jsInitialised:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
|
||||||
|
jsReady = TRUE;
|
||||||
|
resolve(nil);
|
||||||
|
}
|
||||||
|
|
||||||
// ** Start internals **
|
// ** Start internals **
|
||||||
- (BOOL)handleUrl:(NSURL *)url {
|
- (BOOL)handleUrl:(NSURL *)url {
|
||||||
return [FIRInvites handleUniversalLink:url completion:^(FIRReceivedInvite * _Nullable receivedInvite, NSError * _Nullable error) {
|
return [FIRInvites handleUniversalLink:url completion:^(FIRReceivedInvite * _Nullable receivedInvite, NSError * _Nullable error) {
|
||||||
if (error) {
|
if (error) {
|
||||||
NSLog(@"Failed to handle invitation: %@", [error localizedDescription]);
|
NSLog(@"Failed to handle invitation: %@", [error localizedDescription]);
|
||||||
} else if (receivedInvite && receivedInvite.inviteId) {
|
} else if (receivedInvite && receivedInvite.inviteId) {
|
||||||
[RNFirebaseUtil sendJSEvent:self name:INVITES_INVITATION_RECEIVED body:@{
|
[self sendJSEvent:self name:INVITES_INVITATION_RECEIVED body:@{
|
||||||
@"deepLink": receivedInvite.deepLink,
|
@"deepLink": receivedInvite.deepLink,
|
||||||
@"invitationId": receivedInvite.inviteId,
|
@"invitationId": receivedInvite.inviteId,
|
||||||
}];
|
}];
|
||||||
} else {
|
} else {
|
||||||
[[RNFirebaseLinks instance] sendLink:receivedInvite.deepLink];
|
[[RNFirebaseLinks instance] sendLink:receivedInvite.deepLink];
|
||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Because of the time delay between the app starting and the bridge being initialised
|
||||||
|
// we catch any events that are received before the JS is ready to receive them
|
||||||
|
- (void)sendJSEvent:(RCTEventEmitter *)emitter name:(NSString *)name body:(id)body {
|
||||||
|
if (emitter.bridge && jsReady) {
|
||||||
|
[RNFirebaseUtil sendJSEvent:emitter name:name body:body];
|
||||||
|
} else if (!initialInvite) {
|
||||||
|
initialInvite = body;
|
||||||
|
} else {
|
||||||
|
NSLog(@"Multiple invite events received before the JS invites module has been initialised");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
- (NSArray<NSString *> *)supportedEvents {
|
- (NSArray<NSString *> *)supportedEvents {
|
||||||
return @[INVITES_INVITATION_RECEIVED];
|
return @[INVITES_INVITATION_RECEIVED];
|
||||||
|
|
|
@ -171,7 +171,7 @@ RCT_EXPORT_METHOD(jsInitialised:(RCTPromiseResolveBlock)resolve rejecter:(RCTPro
|
||||||
} else if (!initialLink) {
|
} else if (!initialLink) {
|
||||||
initialLink = body;
|
initialLink = body;
|
||||||
} else {
|
} else {
|
||||||
NSLog(@"Multiple link events received before the JS links modules has been initialised");
|
NSLog(@"Multiple link events received before the JS links module has been initialised");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
* @flow
|
* @flow
|
||||||
* Invites representation wrapper
|
* Invites representation wrapper
|
||||||
*/
|
*/
|
||||||
|
import { Platform } from 'react-native';
|
||||||
import { SharedEventEmitter } from '../../utils/events';
|
import { SharedEventEmitter } from '../../utils/events';
|
||||||
import { getLogger } from '../../utils/log';
|
import { getLogger } from '../../utils/log';
|
||||||
import ModuleBase from '../../utils/ModuleBase';
|
import ModuleBase from '../../utils/ModuleBase';
|
||||||
|
@ -37,6 +38,11 @@ export default class Invites extends ModuleBase {
|
||||||
SharedEventEmitter.emit('onInvitation', invitation);
|
SharedEventEmitter.emit('onInvitation', invitation);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Tell the native module that we're ready to receive events
|
||||||
|
if (Platform.OS === 'ios') {
|
||||||
|
getNativeModule(this).jsInitialised();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue