[mixpanel-browser] Feature/group profiles (#46097)

* first pass

* more tweaks

* Update index.d.ts

* more tweaks

* Update index.d.ts

* tweak

* Update mixpanel-browser-tests.ts

* update

* Update index.d.ts

* fixed test

* Update index.d.ts
This commit is contained in:
Dan Wilt 2020-09-08 04:51:19 -07:00 committed by GitHub
parent bcd3d52d37
commit e37a92a2ad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 345 additions and 209 deletions

View File

@ -3,6 +3,7 @@
// Definitions by: Carlos López <https://github.com/karlos1337>
// Ricardo Rodrigues <https://github.com/RicardoRodrigues>
// Kristian Randall <https://github.com/randak>
// Dan Wilt <https://github.com/dwilt>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.2
@ -12,86 +13,92 @@ export type PushItem = Array<string | Dict>;
export type Query = string | Element | Element[];
export interface Dict {[key: string]: any; }
export interface RequestOptions {
transport?: "xhr" | "sendBeacon";
export interface Dict {
[key: string]: any;
}
export interface XhrHeadersDef {[header: string]: any; }
export interface RequestOptions {
transport?: 'xhr' | 'sendBeacon';
}
export interface XhrHeadersDef {
[header: string]: any;
}
export interface HasOptedInOutOptions {
persistence_type: Persistence;
cookie_prefix: string;
persistence_type: Persistence;
cookie_prefix: string;
}
export interface ClearOptOutInOutOptions extends HasOptedInOutOptions {
cookie_expiration: number;
cross_subdomain_cookie: boolean;
secure_cookie: boolean;
cookie_expiration: number;
cross_subdomain_cookie: boolean;
secure_cookie: boolean;
}
export interface InTrackingOptions extends ClearOptOutInOutOptions {
track: () => void;
track_event_name: string;
track_event_properties: Dict;
track: () => void;
track_event_name: string;
track_event_properties: Dict;
}
export interface OutTrackingOptions extends ClearOptOutInOutOptions {
delete_user: boolean;
delete_user: boolean;
}
export interface Config {
api_host: string;
api_method: string;
api_transport: string;
app_host: string;
autotrack: boolean;
cdn: string;
cookie_domain: string;
cross_site_cookie: boolean;
cross_subdomain_cookie: boolean;
persistence: Persistence;
persistence_name: string;
cookie_name: string;
loaded: (mixpanel: Mixpanel) => void;
store_google: boolean;
save_referrer: boolean;
test: boolean;
verbose: boolean;
img: boolean;
track_pageview: boolean;
debug: boolean;
track_links_timeout: number;
cookie_expiration: number;
upgrade: boolean;
disable_persistence: boolean;
disable_cookie: boolean;
disable_notifications: boolean;
secure_cookie: boolean;
ip: boolean;
property_blacklist: string[];
xhr_headers: XhrHeadersDef;
opt_out_tracking_by_default: boolean;
opt_out_persistence_by_default: boolean;
opt_out_tracking_persistence_type: Persistence;
opt_out_tracking_cookie_prefix: string;
inapp_protocol: string;
inapp_link_new_window: boolean;
ignore_dnt: boolean;
batch_requests: boolean;
batch_size: number;
batch_flush_interval_ms: number;
batch_request_timeout_ms: number;
api_host: string;
api_method: string;
api_transport: string;
app_host: string;
autotrack: boolean;
cdn: string;
cookie_domain: string;
cross_site_cookie: boolean;
cross_subdomain_cookie: boolean;
persistence: Persistence;
persistence_name: string;
cookie_name: string;
loaded: (mixpanel: Mixpanel) => void;
store_google: boolean;
save_referrer: boolean;
test: boolean;
verbose: boolean;
img: boolean;
track_pageview: boolean;
debug: boolean;
track_links_timeout: number;
cookie_expiration: number;
upgrade: boolean;
disable_persistence: boolean;
disable_cookie: boolean;
disable_notifications: boolean;
secure_cookie: boolean;
ip: boolean;
property_blacklist: string[];
xhr_headers: XhrHeadersDef;
opt_out_tracking_by_default: boolean;
opt_out_persistence_by_default: boolean;
opt_out_tracking_persistence_type: Persistence;
opt_out_tracking_cookie_prefix: string;
inapp_protocol: string;
inapp_link_new_window: boolean;
ignore_dnt: boolean;
batch_requests: boolean;
batch_size: number;
batch_flush_interval_ms: number;
batch_request_timeout_ms: number;
}
export type VerboseResponse = {
status: 1;
error: null;
} | {
status: 0;
error: string;
};
export type VerboseResponse =
| {
status: 1;
error: null;
}
| {
status: 0;
error: string;
};
export type NormalResponse = 1 | 0;
@ -100,55 +107,83 @@ export type Response = VerboseResponse | NormalResponse;
export type Callback = (response: Response) => void;
export interface People {
set(prop: string, to: any, callback?: Callback): void;
set(prop: Dict, callback?: Callback): void;
set_once(prop: string, to: any, callback?: Callback): void;
set_once(prop: Dict, callback?: Callback): void;
unset(prop: string[] | string, callback?: Callback): void;
increment(prop: string | Dict, callback?: Callback): void;
increment(prop: string, by: number, callback?: Callback): void;
remove(prop: string, value: any, callback?: Callback): void;
remove(prop: Dict, callback?: Callback): void;
append(prop: string, value: any, callback?: Callback): void;
append(prop: Dict, callback?: Callback): void;
union(prop: string, value: any, callback?: Callback): void;
union(prop: Dict, callback?: Callback): void;
track_charge(amount: number, propertiesOrCallback?: Dict | Callback, callback?: Callback): void;
clear_charges(callback?: Callback): void;
delete_user(): void;
set(prop: string, to: any, callback?: Callback): void;
set(prop: Dict, callback?: Callback): void;
set_once(prop: string, to: any, callback?: Callback): void;
set_once(prop: Dict, callback?: Callback): void;
unset(prop: string[] | string, callback?: Callback): void;
increment(prop: string | Dict, callback?: Callback): void;
increment(prop: string, by: number, callback?: Callback): void;
remove(prop: string, value: any, callback?: Callback): void;
remove(prop: Dict, callback?: Callback): void;
append(prop: string, value: any, callback?: Callback): void;
append(prop: Dict, callback?: Callback): void;
union(prop: string, value: any, callback?: Callback): void;
union(prop: Dict, callback?: Callback): void;
track_charge(amount: number, propertiesOrCallback?: Dict | Callback, callback?: Callback): void;
clear_charges(callback?: Callback): void;
delete_user(): void;
}
export interface Group {
remove(list_name: string, value: string, callback?: Callback): Group;
set<Prop extends string | Dict>(
prop: Prop,
to?: Prop extends string ? string : undefined,
callback?: Callback,
): Group;
setOnce<Prop extends string | Dict>(
prop: Prop,
to?: Prop extends string ? string : undefined,
callback?: Callback,
): Group;
union(list_name: string, values: Array<string | number>, callback?: Callback): Group;
unset(prop: string, callback?: Callback): void;
}
export interface Mixpanel {
alias(alias: string, original?: string): void;
clear_opt_in_out_tracking(options?: Partial<ClearOptOutInOutOptions>): void;
disable(events?: string[]): void;
get_config(prop_name?: string): any;
get_distinct_id(): any;
get_property(property_name: string): any;
has_opted_in_tracking(options?: Partial<HasOptedInOutOptions>): boolean;
has_opted_out_tracking(options?: Partial<HasOptedInOutOptions>): boolean;
identify(unique_id?: string): any;
init(token: string, config?: Partial<Config>, name?: string): Mixpanel;
opt_in_tracking(options?: Partial<InTrackingOptions>): void;
opt_out_tracking(options?: Partial<OutTrackingOptions>): void;
push(item: PushItem): void;
register(props: Dict, days?: number): void;
register_once(props: Dict, default_value?: any, days?: number): void;
reset(): void;
set_config(config: Partial<Config>): void;
time_event(event_name: string): void;
track(event_name: string, properties?: Dict, optionsOrCallback?: RequestOptions | Callback, callback?: Callback): void;
track_forms(query: Query, event_name: string, properties?: Dict | (() => void)): void;
track_links(query: Query, event_name: string, properties?: Dict | (() => void)): void;
unregister(property: string): void;
people: People;
add_group(group_key: string, group_id: string, callback?: Callback): void;
alias(alias: string, original?: string): void;
clear_opt_in_out_tracking(options?: Partial<ClearOptOutInOutOptions>): void;
disable(events?: string[]): void;
get_config(prop_name?: string): any;
get_distinct_id(): any;
get_group(group_key: string, group_id: string): Group;
get_property(property_name: string): any;
has_opted_in_tracking(options?: Partial<HasOptedInOutOptions>): boolean;
has_opted_out_tracking(options?: Partial<HasOptedInOutOptions>): boolean;
identify(unique_id?: string): any;
init(token: string, config?: Partial<Config>, name?: string): Mixpanel;
opt_in_tracking(options?: Partial<InTrackingOptions>): void;
opt_out_tracking(options?: Partial<OutTrackingOptions>): void;
push(item: PushItem): void;
register(props: Dict, days?: number): void;
register_once(props: Dict, default_value?: any, days?: number): void;
remove_group(group_key: string, group_ids: string | string[] | number | number[], callback?: Callback): void;
reset(): void;
set_config(config: Partial<Config>): void;
set_group(group_key: string, group_ids: string | string[] | number | number[], callback?: Callback): void;
time_event(event_name: string): void;
track(
event_name: string,
properties?: Dict,
optionsOrCallback?: RequestOptions | Callback,
callback?: Callback,
): void;
track_forms(query: Query, event_name: string, properties?: Dict | (() => void)): void;
track_links(query: Query, event_name: string, properties?: Dict | (() => void)): void;
track_with_groups(event_name: string, properties: Dict, groups: Dict, callback?: Callback): void;
unregister(property: string): void;
people: People;
}
export function add_group(group_key: string, group_id: string, callback?: Callback): void;
export function alias(alias: string, original?: string): void;
export function clear_opt_in_out_tracking(options?: Partial<ClearOptOutInOutOptions>): void;
export function disable(events?: string[]): void;
export function get_config(prop_name?: string): any;
export function get_distinct_id(): any;
export function get_group(group_key: string, group_id: string): Group;
export function get_property(property_name: string): any;
export function has_opted_in_tracking(options?: Partial<HasOptedInOutOptions>): boolean;
export function has_opted_out_tracking(options?: Partial<HasOptedInOutOptions>): boolean;
@ -159,12 +194,28 @@ export function opt_out_tracking(options?: Partial<OutTrackingOptions>): void;
export function push(item: PushItem): void;
export function register(props: Dict, days?: number): void;
export function register_once(props: Dict, default_value?: any, days?: number): void;
export function remove_group(
group_key: string,
group_ids: string | string[] | number | number[],
callback?: Callback,
): void;
export function reset(): void;
export function set_config(config: Partial<Config>): void;
export function set_group(
group_key: string,
group_ids: string | string[] | number | number[],
callback?: Callback,
): void;
export function time_event(event_name: string): void;
export function track(event_name: string, properties?: Dict, optionsOrCallback?: RequestOptions | Callback, callback?: Callback): void;
export function track(
event_name: string,
properties?: Dict,
optionsOrCallback?: RequestOptions | Callback,
callback?: Callback,
): void;
export function track_forms(query: Query, event_name: string, properties?: Dict | (() => void)): void;
export function track_links(query: Query, event_name: string, properties?: Dict | (() => void)): void;
export function track_with_groups(event_name: string, properties: Dict, groups: Dict, callback?: Callback): void;
export function unregister(property: string): void;
export const people: People;

View File

@ -4,64 +4,68 @@ const lib = mixpanel.init('new token', { secure_cookie: true }, 'library_name');
lib.track('event name');
mixpanel.push(['register', { a: 'b' }]);
mixpanel.disable();
mixpanel.track('Registered', {Gender: 'Male', Age: 21});
mixpanel.track('Registered', { Gender: 'Male', Age: 21 });
mixpanel.track_links('#nav', 'Clicked Nav Link');
mixpanel.track_forms('#register', 'Created Account');
mixpanel.time_event('Registered');
mixpanel.track('Registered', {Gender: 'Male', Age: 21});
mixpanel.track('Left page', {duration_seconds: 35}, {transport: 'sendBeacon'});
mixpanel.track('Left page', { duration_seconds: 35 }, () => { /* callback function */ });
mixpanel.track('Left page', { duration_seconds: 35 }, { transport: 'sendBeacon' }, () => { /* callback function */ });
mixpanel.track('Left page', { duration_seconds: 35 }, (response) => {
mixpanel.track('Registered', { Gender: 'Male', Age: 21 });
mixpanel.track('Left page', { duration_seconds: 35 }, { transport: 'sendBeacon' });
mixpanel.track('Left page', { duration_seconds: 35 }, () => {
/* callback function */
});
mixpanel.track('Left page', { duration_seconds: 35 }, { transport: 'sendBeacon' }, () => {
/* callback function */
});
mixpanel.track('Left page', { duration_seconds: 35 }, response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
});
mixpanel.register({Gender: 'Female'});
mixpanel.register({ Gender: 'Female' });
mixpanel.register({
Email: 'jdoe@example.com',
'Account Type': 'Free'
Email: 'jdoe@example.com',
'Account Type': 'Free',
});
mixpanel.register_once({
'First Login Date': new Date().toISOString()
'First Login Date': new Date().toISOString(),
});
mixpanel.init('YOUR PROJECT TOKEN', {
loaded: (mixpanel) => {
const distinct_id = mixpanel.get_distinct_id();
}
loaded: mixpanel => {
const distinct_id = mixpanel.get_distinct_id();
},
});
mixpanel.alias('new_id', 'existing_id');
mixpanel.alias('newer_id', 'new_id');
mixpanel.init('YOUR PROJECT TOKEN', {
loaded: (mixpanel) => {
const user_id = mixpanel.get_property('user_id');
}
loaded: mixpanel => {
const user_id = mixpanel.get_property('user_id');
},
});
mixpanel.opt_in_tracking();
mixpanel.opt_in_tracking({
track_event_name: 'User opted in',
track_event_properties: {
Email: 'jdoe@example.com'
Email: 'jdoe@example.com',
},
cookie_expiration: 30,
secure_cookie: true
secure_cookie: true,
});
mixpanel.opt_out_tracking();
mixpanel.opt_out_tracking({
cookie_expiration: 30,
secure_cookie: true
secure_cookie: true,
});
const has_opted_in = mixpanel.has_opted_in_tracking();
const has_opted_out = mixpanel.has_opted_out_tracking();
mixpanel.clear_opt_in_out_tracking();
mixpanel.clear_opt_in_out_tracking({
cookie_expiration: 30,
secure_cookie: true
secure_cookie: true,
});
mixpanel.people.set('gender', 'm');
mixpanel.people.set('gender', 'm', (response) => {
mixpanel.people.set('gender', 'm', response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
@ -71,22 +75,25 @@ mixpanel.people.set('gender', 'm', (response) => {
mixpanel.people.set({
Company: 'Acme',
Plan: 'Premium',
'Upgrade date': new Date()
});
mixpanel.people.set({
Company: 'Acme',
Plan: 'Premium',
'Upgrade date': new Date()
}, (response) => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
'Upgrade date': new Date(),
});
mixpanel.people.set(
{
Company: 'Acme',
Plan: 'Premium',
'Upgrade date': new Date(),
},
response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
},
);
mixpanel.people.set_once('First Login Date', new Date());
mixpanel.people.set_once('First Login Date', new Date(), (response) => {
mixpanel.people.set_once('First Login Date', new Date(), response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
@ -95,22 +102,25 @@ mixpanel.people.set_once('First Login Date', new Date(), (response) => {
});
mixpanel.people.set_once({
'First Login Date': new Date(),
'Starting Plan': 'Premium'
});
mixpanel.people.set_once({
'First Login Date': new Date(),
'Starting Plan': 'Premium'
}, (response) => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
'Starting Plan': 'Premium',
});
mixpanel.people.set_once(
{
'First Login Date': new Date(),
'Starting Plan': 'Premium',
},
response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
},
);
mixpanel.people.unset('gender');
mixpanel.people.unset(['gender', 'Company']);
mixpanel.people.unset(['gender', 'Company'], (response) => {
mixpanel.people.unset(['gender', 'Company'], response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
@ -119,7 +129,7 @@ mixpanel.people.unset(['gender', 'Company'], (response) => {
});
mixpanel.people.increment('page_views', 1);
mixpanel.people.increment('page_views', 1, (response) => {
mixpanel.people.increment('page_views', 1, response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
@ -127,7 +137,7 @@ mixpanel.people.increment('page_views', 1, (response) => {
}
});
mixpanel.people.increment('page_views');
mixpanel.people.increment('page_views', (response) => {
mixpanel.people.increment('page_views', response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
@ -137,21 +147,24 @@ mixpanel.people.increment('page_views', (response) => {
mixpanel.people.increment('credits_left', -1);
mixpanel.people.increment({
counter1: 1,
counter2: 6
});
mixpanel.people.increment({
counter1: 1,
counter2: 6
}, (response) => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
counter2: 6,
});
mixpanel.people.increment(
{
counter1: 1,
counter2: 6,
},
response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
},
);
mixpanel.people.remove('School', 'UCB');
mixpanel.people.remove('School', 'UCB', (response) => {
mixpanel.people.remove('School', 'UCB', response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
@ -161,18 +174,21 @@ mixpanel.people.remove('School', 'UCB', (response) => {
mixpanel.people.remove({
School: 'UCB',
});
mixpanel.people.remove({
School: 'UCB',
}, (response) => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
});
mixpanel.people.remove(
{
School: 'UCB',
},
response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
},
);
mixpanel.people.append('pages_visited', 'homepage');
mixpanel.people.append('pages_visited', 'homepage', (response) => {
mixpanel.people.append('pages_visited', 'homepage', response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
@ -181,21 +197,24 @@ mixpanel.people.append('pages_visited', 'homepage', (response) => {
});
mixpanel.people.append({
list1: 'bob',
list2: 123
});
mixpanel.people.append({
list1: 'bob',
list2: 123
}, (response) => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
list2: 123,
});
mixpanel.people.append(
{
list1: 'bob',
list2: 123,
},
response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
},
);
mixpanel.people.union('pages_visited', 'homepage');
mixpanel.people.union('pages_visited', 'homepage', (response) => {
mixpanel.people.union('pages_visited', 'homepage', response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
@ -204,45 +223,52 @@ mixpanel.people.union('pages_visited', 'homepage', (response) => {
});
mixpanel.people.union({
list1: 'bob',
list2: 123
list2: 123,
});
mixpanel.people.union(
{
list1: 'bob',
list2: 123,
},
response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
},
);
mixpanel.people.union({
list1: 'bob',
list2: 123
}, (response) => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
});
mixpanel.people.union({
list1: ['bob', 'billy']
list1: ['bob', 'billy'],
});
mixpanel.people.track_charge(50);
mixpanel.people.track_charge(50, (response) => {
mixpanel.people.track_charge(50, response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
});
mixpanel.people.track_charge(30.50, {
$time: new Date('jan 1 2012')
});
mixpanel.people.track_charge(30.50, {
$time: new Date('jan 1 2012')
}, (response) => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
mixpanel.people.track_charge(30.5, {
$time: new Date('jan 1 2012'),
});
mixpanel.people.track_charge(
30.5,
{
$time: new Date('jan 1 2012'),
},
response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
},
);
mixpanel.people.clear_charges();
mixpanel.people.clear_charges((response) => {
mixpanel.people.clear_charges(response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
@ -253,3 +279,62 @@ mixpanel.people.delete_user();
mixpanel.init('YOUR PROJECT TOKEN', {
ignore_dnt: true,
});
mixpanel.add_group('test', 'id');
mixpanel.get_group('test', 'id');
mixpanel.remove_group('test', 'id');
mixpanel.set_group('test', ['some-value'], response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
});
mixpanel.get_group('test', 'id').set('prop', 'value', response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
});
mixpanel.get_group('test', 'id').set(
{
name: 'Name',
},
undefined,
response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
},
);
mixpanel.get_group('test', 'id').setOnce('prop', 'value', response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
});
mixpanel.get_group('test', 'id').remove('prop', 'value', response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
});
mixpanel.get_group('test', 'id').union('prop', ['value'], response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
});
mixpanel.get_group('test', 'id').unset('prop');
mixpanel.track_with_groups('event', { name: 'Name' }, { group: ['value'] }, response => {
if (response === 1) {
} else if (response === 0) {
} else if (response.status === 1 && response.error === null) {
} else if (response.status === 0 && response.error.includes('bad')) {
}
});