Skip to content

Commit

Permalink
Refactor iOS with observer
Browse files Browse the repository at this point in the history
  • Loading branch information
louiszawadzki committed Jan 12, 2024
1 parent 8f474c2 commit 895f23e
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 16 deletions.
10 changes: 10 additions & 0 deletions packages/core/ios/Sources/DdCoreTests.mm
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,13 @@ @implementation DdCoreTests
[self getAllEventsData:feature resolve:resolve reject:reject];
}

RCT_REMAP_METHOD(startRecording, withResolver2:(RCTPromiseResolveBlock)resolve
withRejecter:(RCTPromiseRejectBlock)reject)
{
[self startRecording:resolve reject:reject];
}


// Thanks to this guard, we won't compile this code when we build for the old architecture.
#ifdef RCT_NEW_ARCH_ENABLED
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
Expand Down Expand Up @@ -74,5 +81,8 @@ - (void)getAllEventsData:(NSString *)feature resolve:(RCTPromiseResolveBlock)res
[self.ddCoreTestsImplementation getAllEventsDataWithFeature:feature resolve:resolve reject:reject];
}

- (void)startRecording:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
[self.ddCoreTestsImplementation startRecordingWithResolve:resolve reject:reject];
}

@end
39 changes: 23 additions & 16 deletions packages/core/ios/Sources/DdCoreTestsImplementation.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,47 +5,54 @@
*/

import Foundation
import React
import DatadogCore
import DatadogInternal

@objc
public class DdCoreTestsImplementation: NSObject {
private let getCoreProxy: () throws -> DatadogCoreProxy
private let getCoreProxy: () throws -> DatadogCoreProtocol

internal init(_ getCoreProxy: @escaping () throws -> DatadogCoreProxy) {
internal init(_ getCoreProxy: @escaping () throws -> DatadogCoreProtocol) {
self.getCoreProxy = getCoreProxy
}

private var proxy: DatadogCoreObserver? = nil

@objc
public override convenience init() {
self.init({
guard let coreProxy = Datadog.sdkInstance(named: CoreRegistry.defaultInstanceName) as? DatadogCoreProxy else {
throw InternalError(description: "Core is not proxy")
}
return coreProxy
return Datadog.sdkInstance(named: CoreRegistry.defaultInstanceName)
})
}

@objc
public func clearData(resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
public func startRecording(resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
do {
let coreProxy = try getCoreProxy()
coreProxy.waitAndDeleteEvents(ofFeature: "rum")
coreProxy.waitAndDeleteEvents(ofFeature: "logging")
coreProxy.waitAndDeleteEvents(ofFeature: "tracing")
coreProxy.waitAndDeleteEvents(ofFeature: "session-replay")
resolve(nil)
let core = try getCoreProxy()
self.proxy = DatadogCoreObserver(core: core)
} catch {
reject(nil, Errors.logSentBeforeSDKInit, nil)
}
return
}

@objc
public func clearData(resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
self.proxy?.waitAndDeleteEvents(ofFeature: "rum")
self.proxy?.waitAndDeleteEvents(ofFeature: "logging")
self.proxy?.waitAndDeleteEvents(ofFeature: "tracing")
self.proxy?.waitAndDeleteEvents(ofFeature: "session-replay")

resolve(nil)
return
}

@objc
public func getAllEvents(feature: String, resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
do {
let coreProxy = try getCoreProxy()
let events = coreProxy.waitAndReturnEvents(ofFeature: feature, ofType: AnyEncodable.self)
let events = proxy?.waitAndReturnEvents(ofFeature: feature, ofType: AnyEncodable.self)
let data = try JSONSerialization.data(withJSONObject: events, options: .prettyPrinted)
resolve(String(data: data, encoding: String.Encoding.utf8) ?? "")
} catch {
Expand All @@ -58,7 +65,7 @@ public class DdCoreTestsImplementation: NSObject {
public func getAllEventsData(feature: String, resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
do {
let coreProxy = try getCoreProxy()
let events = coreProxy.waitAndReturnEventsData(ofFeature: feature)
let events = proxy?.waitAndReturnEventsData(ofFeature: feature)
let data = try JSONSerialization.data(withJSONObject: events, options: .prettyPrinted)
resolve(String(data: data, encoding: String.Encoding.utf8) ?? "")
} catch {
Expand Down

0 comments on commit 895f23e

Please sign in to comment.