UNPKG

@grafana/faro-core

Version:
43 lines 1.96 kB
import { TransportItemType } from '../transports'; import { USER_ACTION_CANCEL_MESSAGE_TYPE, USER_ACTION_END_MESSAGE_TYPE, USER_ACTION_START_MESSAGE_TYPE } from './const'; import { ItemBuffer } from './ItemBuffer'; export function createUserActionLifecycleHandler({ apiMessageBus, transports, config, }) { const actionBuffer = new ItemBuffer(); const trackUserActionsExcludeItem = config.trackUserActionsExcludeItem; let message; apiMessageBus.subscribe((msg) => { if (msg.type === USER_ACTION_START_MESSAGE_TYPE) { message = msg; return; } if (msg.type === USER_ACTION_END_MESSAGE_TYPE) { const { id, name } = msg; actionBuffer.flushBuffer((item) => { if (isExcludeFromUserAction(item, trackUserActionsExcludeItem)) { transports.execute(item); return; } const userActionItem = Object.assign(Object.assign({}, item), { payload: Object.assign(Object.assign({}, item.payload), { action: { parentId: id, name, } }) }); transports.execute(userActionItem); }); message = undefined; return; } if (msg.type === USER_ACTION_CANCEL_MESSAGE_TYPE) { message = undefined; actionBuffer.flushBuffer((item) => { transports.execute(item); }); } }); const getMessage = () => message; return { actionBuffer, getMessage }; } function isExcludeFromUserAction(item, trackUserActionsExcludeItem) { return ((trackUserActionsExcludeItem === null || trackUserActionsExcludeItem === void 0 ? void 0 : trackUserActionsExcludeItem(item)) || (item.type === TransportItemType.MEASUREMENT && item.payload.type === 'web-vitals')); } //# sourceMappingURL=userActionLifecycleHandler.js.map