@segment/analytics-react-native
Version:
The hassle-free way to add Segment analytics to your React-Native app.
160 lines • 4.97 kB
JavaScript
import { SEGMENT_DESTINATION_KEY } from '../plugins/SegmentDestination';
import { createCallbackManager } from './utils';
import { createGetter } from '../storage/helpers';
const INITIAL_VALUES = {
isReady: true,
context: undefined,
settings: {
[SEGMENT_DESTINATION_KEY]: {}
},
consentSettings: undefined,
filters: {},
userInfo: {
anonymousId: 'anonymousId',
userId: undefined,
traits: undefined
},
deepLinkData: {
referring_application: '',
url: ''
},
pendingEvents: []
};
export function createMockStoreGetter(fn) {
return createGetter(fn, () => {
return new Promise(resolve => {
resolve(fn());
});
});
}
export class MockSegmentStore {
reset = () => {
this.data = JSON.parse(JSON.stringify(this.initialData));
};
constructor(initialData) {
this.data = {
...INITIAL_VALUES,
...initialData
};
this.initialData = JSON.parse(JSON.stringify({
...INITIAL_VALUES,
...initialData
}));
}
callbacks = {
context: createCallbackManager(),
settings: createCallbackManager(),
consentSettings: createCallbackManager(),
filters: createCallbackManager(),
userInfo: createCallbackManager(),
deepLinkData: createCallbackManager(),
pendingEvents: createCallbackManager()
};
isReady = {
get: createMockStoreGetter(() => {
return this.data.isReady;
}),
onChange: _callback => {
return () => {
return;
};
}
};
context = {
get: createMockStoreGetter(() => ({
...this.data.context
})),
onChange: callback => this.callbacks.context.register(callback),
set: value => {
this.data.context = value instanceof Function ? value(this.data.context ?? {}) : {
...value
};
this.callbacks.context.run(this.data.context);
return this.data.context;
}
};
settings = {
get: createMockStoreGetter(() => this.data.settings),
onChange: callback => this.callbacks.settings.register(callback),
set: value => {
this.data.settings = value instanceof Function ? value(this.data.settings ?? {}) : {
...value
};
this.callbacks.settings.run(this.data.settings);
return this.data.settings;
},
add: (key, value) => {
this.data.settings[key] = value;
this.callbacks.settings.run(this.data.settings);
return Promise.resolve(this.data.settings);
}
};
consentSettings = {
get: createMockStoreGetter(() => this.data.consentSettings),
onChange: callback => this.callbacks.consentSettings.register(callback),
set: value => {
this.data.consentSettings = value instanceof Function ? value(this.data.consentSettings) : value;
this.callbacks.consentSettings.run(this.data.consentSettings);
return this.data.consentSettings;
}
};
filters = {
get: createMockStoreGetter(() => this.data.filters),
onChange: callback => this.callbacks.filters.register(callback),
set: value => {
this.data.filters = value instanceof Function ? value(this.data.filters ?? {}) : {
...value
};
this.callbacks.filters.run(this.data.filters);
return this.data.filters;
},
add: (key, value) => {
this.data.filters[key] = value;
this.callbacks.filters.run(this.data.filters);
return Promise.resolve(this.data.filters);
}
};
userInfo = {
get: createMockStoreGetter(() => this.data.userInfo),
onChange: callback => this.callbacks.userInfo.register(callback),
set: value => {
this.data.userInfo = value instanceof Function ? value(this.data.userInfo ?? {}) : {
...value
};
this.callbacks.userInfo.run(this.data.userInfo);
return this.data.userInfo;
}
};
deepLinkData = {
get: createMockStoreGetter(() => {
return this.data.deepLinkData;
}),
set: value => {
this.data.deepLinkData = value;
this.callbacks.deepLinkData.run(value);
},
onChange: callback => this.callbacks.deepLinkData.register(callback)
};
pendingEvents = {
get: createMockStoreGetter(() => {
return this.data.pendingEvents;
}),
set: value => {
this.data.pendingEvents = value instanceof Function ? value(this.data.pendingEvents ?? []) : [...value];
this.callbacks.pendingEvents.run(this.data.pendingEvents);
return this.data.pendingEvents;
},
add: value => {
this.data.pendingEvents.push(value);
this.callbacks.pendingEvents.run(this.data.pendingEvents);
return Promise.resolve(this.data.pendingEvents);
},
remove: value => {
this.data.pendingEvents = this.data.pendingEvents.filter(e => e.messageId != value.messageId);
this.callbacks.pendingEvents.run(this.data.pendingEvents);
return Promise.resolve(this.data.pendingEvents);
},
onChange: callback => this.callbacks.pendingEvents.register(callback)
};
}
//# sourceMappingURL=mockSegmentStore.js.map