Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions android/src/main/java/io/didomi/reactnative/DidomiModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -606,6 +606,24 @@ class DidomiModule(reactContext: ReactApplicationContext) : DidomiModuleSpec(rea
}
}

@ReactMethod
override fun getUserCountryCode(promise: Promise) {
try {
promise.resolve(Didomi.getInstance().userCountryCode)
} catch (e: DidomiNotReadyException) {
promise.reject(e)
}
}

@ReactMethod
override fun getUserRegionCode(promise: Promise) {
try {
promise.resolve(Didomi.getInstance().userRegionCode)
} catch (e: DidomiNotReadyException) {
promise.reject(e)
}
}

@ReactMethod
override fun hideNotice(promise: Promise) {
try {
Expand Down
6 changes: 6 additions & 0 deletions ios/Didomi.m
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,12 @@ @interface RCT_EXTERN_MODULE(Didomi, RCTEventEmitter)
RCT_EXTERN_METHOD(getApplicableRegulation:(RCTPromiseResolveBlock)resolve
reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(getUserCountryCode:(RCTPromiseResolveBlock)resolve
reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(getUserRegionCode:(RCTPromiseResolveBlock)resolve
reject:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(setCurrentUserStatus:(NSString *)currentUserStatusAsString
resolve:(RCTPromiseResolveBlock)resolve
reject:(RCTPromiseRejectBlock)reject)
Expand Down
12 changes: 11 additions & 1 deletion ios/RNDidomi.swift
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,17 @@ class RNDidomi: RCTEventEmitter {
func getApplicableRegulation(resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) {
resolve(Didomi.shared.applicableRegulation.description)
}


@objc(getUserCountryCode:reject:)
func getUserCountryCode(resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) {
resolve(Didomi.shared.userCountryCode)
}

@objc(getUserRegionCode:reject:)
func getUserRegionCode(resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) {
resolve(Didomi.shared.userRegionCode)
}

@objc(setCurrentUserStatus:resolve:reject:)
func setCurrentUserStatus(currentUserStatusAsString: String, resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) {
guard let jsonData = currentUserStatusAsString.data(using: .utf8) else {
Expand Down
12 changes: 12 additions & 0 deletions src/Didomi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,18 @@ export const Didomi = {
*/
getCurrentUserStatus: (): Promise<CurrentUserStatus> => RNDidomi.getCurrentUserStatus(),

/**
* Get the country code determined for the user (for example "FR" or "US").
* @returns the user country code, or null when unknown.
*/
getUserCountryCode: (): Promise<string | null> => RNDidomi.getUserCountryCode(),

/**
* Get the region code determined for the user (for example "CA").
* @returns the user region code, or null when unknown.
*/
getUserRegionCode: (): Promise<string | null> => RNDidomi.getUserRegionCode(),

/**
* Get the user consent status.
* @returns: status that represents user consent.
Expand Down
36 changes: 36 additions & 0 deletions src/__tests__/Didomi.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
jest.mock('../specs/NativeDidomi', () => ({
__esModule: true,
default: {
getUserCountryCode: jest.fn(),
getUserRegionCode: jest.fn(),
},
}));

import { Didomi } from '../Didomi';
import NativeDidomi from '../specs/NativeDidomi';

const RNDidomi = NativeDidomi as any;

describe('getUserCountryCode', () => {
it('resolves the value returned by the native module', async () => {
RNDidomi.getUserCountryCode.mockResolvedValue('FR');
await expect(Didomi.getUserCountryCode()).resolves.toBe('FR');
});

it('resolves null when unknown', async () => {
RNDidomi.getUserCountryCode.mockResolvedValue(null);
await expect(Didomi.getUserCountryCode()).resolves.toBeNull();
});
});

describe('getUserRegionCode', () => {
it('resolves the value returned by the native module', async () => {
RNDidomi.getUserRegionCode.mockResolvedValue('CA');
await expect(Didomi.getUserRegionCode()).resolves.toBe('CA');
});

it('resolves null when unknown', async () => {
RNDidomi.getUserRegionCode.mockResolvedValue(null);
await expect(Didomi.getUserRegionCode()).resolves.toBeNull();
});
});
2 changes: 2 additions & 0 deletions src/specs/NativeDidomi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ export interface Spec extends TurboModule {
setUserDisagreeToAll(): Promise<boolean>;

getApplicableRegulation(): Promise<string>;
getUserCountryCode(): Promise<string | null>;
getUserRegionCode(): Promise<string | null>;
getPurpose(purposeId: string): Promise<Object>;
getRequiredPurposes(): Promise<Object>;
getRequiredPurposeIds(): Promise<Array<string>>;
Expand Down