UNPKG

@aller/blink

Version:

A library for tracking user behaviour.

86 lines (76 loc) 2.1 kB
import { PLAYER_HIDDEN, PLAYER_SHOWN, PLAYER_STICKY } from '../actions'; export interface PlayerEvent { time: Date; muted: boolean; position: number; volume: number; sticky?: boolean; } export interface PlayerShownEvent extends PlayerEvent { type: 'shown'; reason: 'tabactive' | 'viewable'; } export interface PlayerHiddenEvent extends PlayerEvent { type: 'hidden'; reason: 'tabclose' | 'tabhide' | 'stickyClosed'; } export interface PlayerStickyEvent extends PlayerEvent { type: 'sticky'; closed: boolean; } export type PlayerStateEvent = | PlayerShownEvent | PlayerHiddenEvent | PlayerStickyEvent; 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, }, ], }; case PLAYER_STICKY: return { ...state, [action.payload.playerId]: [ ...(state[action.payload.playerId] || []), { type: 'sticky', time: action.payload.time || new Date(), sticky: action.payload.sticky, closed: action.payload.closed, }, ], }; default: return state; } }