@aller/blink
Version:
A library for tracking user behaviour.
64 lines (56 loc) • 1.57 kB
text/typescript
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;
}