Skip to content

Commit e379c4c

Browse files
danactivedavide-scalzo
authored andcommitted
Add methods add, set for Group Analytics. Only single values supported (davide-scalzo#217)
1 parent 332984f commit e379c4c

File tree

5 files changed

+76
-0
lines changed

5 files changed

+76
-0
lines changed

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,16 @@ Mixpanel.set({"$email": "elvis@email.com"});
161161
// Set People Properties Once (warning: if no mixpanel profile has been assigned to the current user when this method is called, it will automatically create a new mixpanel profile and the user will no longer be anonymous in Mixpanel)
162162
Mixpanel.setOnce({"$email": "elvis@email.com", "Created": new Date().toISOString()});
163163

164+
// Add a new Group for this user.
165+
// @param Group key
166+
// @param A valid Mixpanel property type
167+
Mixpanel.setGroup('company', 'mixpanel');
168+
169+
// Register the current user into one Group. The Group must be added before setting
170+
// @param Group key
171+
// @param a singular group ID
172+
Mixpanel.setGroup('company', 'mixpanel');
173+
164174
// Timing Events
165175
// Sets the start time for an action, for example uploading an image
166176
Mixpanel.timeEvent("Image Upload");

RNMixpanel/RNMixpanel.m

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,26 @@ -(Mixpanel*) getInstance: (NSString *)name {
143143
resolve(nil);
144144
}
145145

146+
// add Group
147+
RCT_EXPORT_METHOD(addGroup:(NSString *)groupKey
148+
groupId:(NSString *)groupId
149+
apiToken:(NSString *)apiToken
150+
resolve:(RCTPromiseResolveBlock)resolve
151+
reject:(RCTPromiseRejectBlock)reject) {
152+
[[self getInstance:apiToken] addGroup:groupKey groupID:groupId];
153+
resolve(nil);
154+
}
155+
156+
// set Group
157+
RCT_EXPORT_METHOD(setGroup:(NSString *)groupKey
158+
groupId:(NSString *)groupId
159+
apiToken:(NSString *)apiToken
160+
resolve:(RCTPromiseResolveBlock)resolve
161+
reject:(RCTPromiseRejectBlock)reject) {
162+
[[self getInstance:apiToken] setGroup:groupKey groupID:groupId];
163+
resolve(nil);
164+
}
165+
146166
// Timing Events
147167
RCT_EXPORT_METHOD(timeEvent:(NSString *)event
148168
apiToken:(NSString *)apiToken

android/src/main/java/com/kevinejohn/RNMixpanel/RNMixpanelModule.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,24 @@ public void identify(final String user_id, final String apiToken, Promise promis
210210
promise.resolve(null);
211211
}
212212

213+
@ReactMethod
214+
public void addGroup(final String groupKey, final String groupId, final String apiToken, Promise promise) {
215+
final MixpanelAPI instance = getInstance(apiToken);
216+
synchronized(instance) {
217+
instance.addGroup(groupKey, groupId);
218+
}
219+
promise.resolve(null);
220+
}
221+
222+
@ReactMethod
223+
public void setGroup(final String groupKey, final String groupId, final String apiToken, Promise promise) {
224+
final MixpanelAPI instance = getInstance(apiToken);
225+
synchronized(instance) {
226+
instance.setGroup(groupKey, groupId);
227+
}
228+
promise.resolve(null);
229+
}
230+
213231
@ReactMethod
214232
public void timeEvent(final String event, final String apiToken, Promise promise) {
215233
final MixpanelAPI instance = getInstance(apiToken);

index.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ declare module 'react-native-mixpanel' {
1010
disableIpAddressGeolocalization(): Promise<void>
1111
alias(alias: string, oldDistinctID?: string): Promise<void>
1212
identify(userId: string): Promise<void>
13+
addGroup(groupKey: string, groupId: string): Promise<void>
14+
setGroup(groupKey: string, groupId: string): Promise<void>
1315
timeEvent(event: string): Promise<void>
1416
registerSuperProperties(properties: Object): Promise<void>
1517
registerSuperPropertiesOnce(properties: Object): Promise<void>
@@ -48,6 +50,8 @@ declare module 'react-native-mixpanel' {
4850
disableIpAddressGeolocalization(): void;
4951
createAlias(alias: string, oldDistinctID?: string): void;
5052
identify(userId: string): void;
53+
addGroup(groupKey: string, groupId: string): void;
54+
setGroup(groupKey: string, groupId: string): void;
5155
timeEvent(event: string): void;
5256
registerSuperProperties(properties: Object): void;
5357
registerSuperPropertiesOnce(properties: Object): void;

index.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,18 @@ export class MixpanelInstance {
114114
return RNMixpanel.identify(userId, this.apiToken)
115115
}
116116

117+
addGroup(groupKey: string, groupId: string): Promise<void> {
118+
if (!this.initialized) throw new Error(uninitializedError('addGroup'))
119+
120+
return RNMixpanel.addGroup(groupKey, groupId, this.apiToken)
121+
}
122+
123+
setGroup(groupKey: string, groupId: string): Promise<void> {
124+
if (!this.initialized) throw new Error(uninitializedError('setGroup'))
125+
126+
return RNMixpanel.setGroup(groupKey, groupId, this.apiToken)
127+
}
128+
117129
timeEvent(event: string): Promise<void> {
118130
if (!this.initialized) throw new Error(uninitializedError('timeEvent'))
119131

@@ -343,6 +355,18 @@ export default {
343355
defaultInstance.identify(userId)
344356
},
345357

358+
addGroup(groupKey: string, groupId: string) {
359+
if (!defaultInstance) throw new Error(NO_INSTANCE_ERROR)
360+
361+
defaultInstance.addGroup(groupKey, groupId)
362+
},
363+
364+
setGroup(groupKey: string, groupId: string) {
365+
if (!defaultInstance) throw new Error(NO_INSTANCE_ERROR)
366+
367+
defaultInstance.setGroup(groupKey, groupId)
368+
},
369+
346370
timeEvent(event: string) {
347371
if (!defaultInstance) throw new Error(NO_INSTANCE_ERROR)
348372

0 commit comments

Comments
 (0)