99 lines
2.6 KiB
JavaScript
99 lines
2.6 KiB
JavaScript
import { ReducerRegistry } from '../base/redux';
|
|
|
|
import {
|
|
CLEAR_RECORDING_SESSIONS,
|
|
RECORDING_SESSION_UPDATED,
|
|
SET_PENDING_RECORDING_NOTIFICATION_UID,
|
|
SET_STREAM_KEY
|
|
} from './actionTypes';
|
|
|
|
const DEFAULT_STATE = {
|
|
pendingNotificationUids: {},
|
|
sessionDatas: []
|
|
};
|
|
|
|
/**
|
|
* The name of the Redux store this feature stores its state in.
|
|
*/
|
|
const STORE_NAME = 'features/recording';
|
|
|
|
/**
|
|
* Reduces the Redux actions of the feature features/recording.
|
|
*/
|
|
ReducerRegistry.register(STORE_NAME,
|
|
(state = DEFAULT_STATE, action) => {
|
|
switch (action.type) {
|
|
|
|
case CLEAR_RECORDING_SESSIONS:
|
|
return {
|
|
...state,
|
|
sessionDatas: []
|
|
};
|
|
|
|
case RECORDING_SESSION_UPDATED:
|
|
return {
|
|
...state,
|
|
sessionDatas:
|
|
_updateSessionDatas(state.sessionDatas, action.sessionData)
|
|
};
|
|
|
|
case SET_PENDING_RECORDING_NOTIFICATION_UID: {
|
|
const pendingNotificationUids = {
|
|
...state.pendingNotificationUids
|
|
};
|
|
|
|
pendingNotificationUids[action.streamType] = action.uid;
|
|
|
|
return {
|
|
...state,
|
|
pendingNotificationUids
|
|
};
|
|
}
|
|
|
|
case SET_STREAM_KEY:
|
|
return {
|
|
...state,
|
|
streamKey: action.streamKey
|
|
};
|
|
|
|
default:
|
|
return state;
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Updates the known information on recording sessions.
|
|
*
|
|
* @param {Array} sessionDatas - The current sessions in the redux store.
|
|
* @param {Object} newSessionData - The updated session data.
|
|
* @private
|
|
* @returns {Array} The session datas with the updated session data added.
|
|
*/
|
|
function _updateSessionDatas(sessionDatas, newSessionData) {
|
|
const hasExistingSessionData = sessionDatas.find(
|
|
sessionData => sessionData.id === newSessionData.id);
|
|
let newSessionDatas;
|
|
|
|
if (hasExistingSessionData) {
|
|
newSessionDatas = sessionDatas.map(sessionData => {
|
|
if (sessionData.id === newSessionData.id) {
|
|
return {
|
|
...newSessionData
|
|
};
|
|
}
|
|
|
|
// Nothing to update for this session data so pass it back in.
|
|
return sessionData;
|
|
});
|
|
} else {
|
|
// If the session data is not present, then there is nothing to update
|
|
// and instead it needs to be added to the known session datas.
|
|
newSessionDatas = [
|
|
...sessionDatas,
|
|
{ ...newSessionData }
|
|
];
|
|
}
|
|
|
|
return newSessionDatas;
|
|
}
|