123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- import { batch } from 'react-redux';
- import { AnyAction } from 'redux';
-
- import { IStore } from '../app/types';
- import {
- PARTICIPANT_JOINED,
- PARTICIPANT_KICKED,
- PARTICIPANT_LEFT,
- PARTICIPANT_UPDATED
- } from '../base/participants/actionTypes';
- import MiddlewareRegistry from '../base/redux/MiddlewareRegistry';
-
- import {
- ADD_TO_OFFSET,
- INIT_SEARCH,
- INIT_UPDATE_STATS,
- RESET_SEARCH_CRITERIA
- } from './actionTypes';
- import {
- clearTimelineBoundary,
- initReorderStats,
- setTimelineBoundary,
- updateSortedSpeakerStatsIds,
- updateStats
- } from './actions.any';
- import { CLEAR_TIME_BOUNDARY_THRESHOLD } from './constants';
- import {
- filterBySearchCriteria,
- getCurrentDuration,
- getPendingReorder,
- getSortedSpeakerStatsIds,
- getTimelineBoundaries,
- resetHiddenStats
- } from './functions';
-
- MiddlewareRegistry.register(({ dispatch, getState }: IStore) => (next: Function) => (action: AnyAction) => {
- switch (action.type) {
- case INIT_SEARCH: {
- const state = getState();
- const stats = filterBySearchCriteria(state);
-
- dispatch(updateStats(stats));
- break;
- }
-
- case INIT_UPDATE_STATS:
- if (action.getSpeakerStats) {
- const state = getState();
- const speakerStats = { ...action.getSpeakerStats() };
- const stats = filterBySearchCriteria(state, speakerStats);
- const pendingReorder = getPendingReorder(state);
-
- batch(() => {
- if (pendingReorder) {
- dispatch(updateSortedSpeakerStatsIds(getSortedSpeakerStatsIds(state, stats) ?? []));
- }
-
- dispatch(updateStats(stats));
- });
-
- }
-
- break;
-
- case RESET_SEARCH_CRITERIA: {
- const state = getState();
- const stats = resetHiddenStats(state);
-
- dispatch(updateStats(stats));
- break;
- }
- case PARTICIPANT_JOINED:
- case PARTICIPANT_LEFT:
- case PARTICIPANT_KICKED:
- case PARTICIPANT_UPDATED: {
- const { pendingReorder } = getState()['features/speaker-stats'];
-
- if (!pendingReorder) {
- dispatch(initReorderStats());
- }
- break;
- }
-
- case ADD_TO_OFFSET: {
- const state = getState();
- const { timelineBoundary } = state['features/speaker-stats'];
- const { right } = getTimelineBoundaries(state);
- const currentDuration = getCurrentDuration(state) ?? 0;
-
- if (Math.abs((right + action.value) - currentDuration) < CLEAR_TIME_BOUNDARY_THRESHOLD) {
- dispatch(clearTimelineBoundary());
- } else if (!timelineBoundary) {
- dispatch(setTimelineBoundary(currentDuration ?? 0));
- }
-
- break;
- }
- }
-
- return next(action);
- });
|