UNPKG

@segment/analytics-react-native

Version:

The hassle-free way to add Segment analytics to your React-Native app.

160 lines 4.97 kB
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