60 lines
1.5 KiB
JavaScript
60 lines
1.5 KiB
JavaScript
import { ReducerRegistry } from '../base/redux';
|
|
import {
|
|
RESET_DESKTOP_SOURCES,
|
|
UPDATE_DESKTOP_SOURCES
|
|
} from './actionTypes';
|
|
|
|
const defaultState = {
|
|
screen: [],
|
|
window: []
|
|
};
|
|
|
|
/**
|
|
* Listen for actions that mutate the known available DesktopCapturerSources.
|
|
*
|
|
* @param {Object[]} state - Current state.
|
|
* @param {Object} action - Action object.
|
|
* @param {string} action.type - Type of action.
|
|
* @param {Array} action.sources - DesktopCapturerSources.
|
|
* @returns {Object}
|
|
*/
|
|
ReducerRegistry.register(
|
|
'features/desktop-picker/sources',
|
|
(state = defaultState, action) => {
|
|
switch (action.type) {
|
|
case RESET_DESKTOP_SOURCES:
|
|
return { ...defaultState };
|
|
case UPDATE_DESKTOP_SOURCES:
|
|
return seperateSourcesByType(action.sources);
|
|
default:
|
|
return state;
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Converts an array of DesktopCapturerSources to an object with types
|
|
* for keys and values being an array with sources of the key's type.
|
|
*
|
|
* @param {Array} sources - DesktopCapturerSources.
|
|
* @returns {Object} An object with the sources split into seperate arrays
|
|
* based on source type.
|
|
* @private
|
|
*/
|
|
function seperateSourcesByType(sources = []) {
|
|
const sourcesByType = {
|
|
screen: [],
|
|
window: []
|
|
};
|
|
|
|
sources.forEach(source => {
|
|
const sourceIdParts = source.id.split(':');
|
|
const sourceType = sourceIdParts[0];
|
|
|
|
if (sourcesByType[sourceType]) {
|
|
sourcesByType[sourceType].push(source);
|
|
}
|
|
});
|
|
|
|
return sourcesByType;
|
|
}
|