UNPKG

@aller/blink

Version:

A library for tracking user behaviour.

64 lines (56 loc) 1.57 kB
import { PLAYER_HIDDEN, PLAYER_SHOWN } from '../actions'; export interface PlayerEvent { time: Date; muted: boolean; position: number; volume: number; } export interface PlayerShownEvent extends PlayerEvent { type: 'shown'; reason: 'tabactive' | 'viewable'; } export interface PlayerHiddenEvent extends PlayerEvent { type: 'hidden'; reason: 'tabclose' | 'tabhide'; } export type PlayerStateEvent = PlayerShownEvent | PlayerHiddenEvent; export interface PlayerState { [playerId: string]: PlayerStateEvent[]; } export default function player(state: PlayerState = {}, action: any) { switch (action.type) { case PLAYER_SHOWN: return { ...state, [action.payload.playerId]: [ ...(state[action.payload.playerId] || []), { type: 'shown', reason: action.payload.reason, time: action.payload.time || new Date(), muted: action.payload.muted, position: action.payload.position, volume: action.payload.volume, }, ], }; case PLAYER_HIDDEN: return { ...state, [action.payload.playerId]: [ ...(state[action.payload.playerId] || []), { type: 'hidden', reason: action.payload.reason, time: action.payload.time || new Date(), muted: action.payload.muted, position: action.payload.position, volume: action.payload.volume, }, ], }; default: break; } return state; }