in src/providers/RemoteVideoTileProvider/state.tsx [55:111]
export function reducer(state: State, { type, payload }: Action): State {
const { tiles, tileIdToAttendeeId, attendeeIdToTileId, size } = state;
switch (type) {
case VideoTileActionType.UPDATE: {
const { tileId, attendeeId = '' } = payload;
const tileStr = tileId.toString();
const isPresent = tileIdToAttendeeId[tileStr];
if (isPresent) {
return state;
}
const newTiles = [...tiles, tileId];
const tileIds = {
...tileIdToAttendeeId,
[tileStr]: attendeeId,
};
const attendeeIds = {
...attendeeIdToTileId,
[attendeeId]: tileId,
};
return {
tiles: newTiles,
tileIdToAttendeeId: tileIds,
attendeeIdToTileId: attendeeIds,
size: size + 1,
};
}
case VideoTileActionType.REMOVE: {
const { tileId } = payload;
const attendeeId = tileIdToAttendeeId[tileId];
const tileStr = tileId.toString();
if (!attendeeId) {
return state;
}
const newTiles = tiles.filter((id) => tileId !== id);
const tileIds = removeProperty(tileIdToAttendeeId, tileStr);
const attendeeIds = removeProperty(attendeeIdToTileId, attendeeId);
return {
tiles: newTiles,
tileIdToAttendeeId: tileIds,
attendeeIdToTileId: attendeeIds,
size: size - 1,
};
}
case VideoTileActionType.RESET: {
return initialState;
}
default:
throw new Error('Incorrect type in VideoProvider');
}
}