jiti-meet/react/features/prejoin/reducer.js

169 lines
4.0 KiB
JavaScript
Raw Normal View History

2020-04-16 10:47:10 +00:00
import { ReducerRegistry } from '../base/redux';
import {
ADD_PREJOIN_AUDIO_TRACK,
ADD_PREJOIN_CONTENT_SHARING_TRACK,
ADD_PREJOIN_VIDEO_TRACK,
SET_DEVICE_STATUS,
SET_JOIN_BY_PHONE_DIALOG_VISIBLITY,
SET_PREJOIN_AUDIO_DISABLED,
SET_PREJOIN_AUDIO_MUTED,
SET_PREJOIN_DEVICE_ERRORS,
SET_PREJOIN_NAME,
SET_PREJOIN_PAGE_VISIBILITY,
SET_PREJOIN_VIDEO_DISABLED,
SET_PREJOIN_VIDEO_MUTED
} from './actionTypes';
const DEFAULT_STATE = {
audioDisabled: false,
audioMuted: false,
videoMuted: false,
videoDisabled: false,
deviceStatusText: 'prejoin.configuringDevices',
deviceStatusType: 'ok',
showPrejoin: true,
showJoinByPhoneDialog: false,
videoTrack: null,
audioTrack: null,
contentSharingTrack: null,
rawError: '',
name: ''
};
/**
* Listen for actions that mutate the prejoin state
*/
ReducerRegistry.register(
'features/prejoin', (state = DEFAULT_STATE, action) => {
switch (action.type) {
case ADD_PREJOIN_AUDIO_TRACK: {
return {
...state,
audioTrack: action.value
};
}
case ADD_PREJOIN_CONTENT_SHARING_TRACK: {
return {
...state,
contentSharingTrack: action.value
};
}
case ADD_PREJOIN_VIDEO_TRACK: {
return {
...state,
videoTrack: action.value
};
}
case SET_PREJOIN_NAME: {
return {
...state,
name: action.value
};
}
case SET_PREJOIN_PAGE_VISIBILITY:
return {
...state,
showPrejoin: action.value
};
case SET_PREJOIN_VIDEO_DISABLED: {
return {
...state,
videoDisabled: action.value
};
}
case SET_PREJOIN_VIDEO_MUTED:
return {
...state,
videoMuted: action.value
};
case SET_PREJOIN_AUDIO_MUTED:
return {
...state,
audioMuted: action.value
};
case SET_PREJOIN_DEVICE_ERRORS: {
const status = getStatusFromErrors(action.value);
return {
...state,
...status
};
}
case SET_DEVICE_STATUS: {
return {
...state,
deviceStatusText: action.text,
deviceStatusType: action.type
};
}
case SET_PREJOIN_AUDIO_DISABLED: {
return {
...state,
audioDisabled: true
};
}
case SET_JOIN_BY_PHONE_DIALOG_VISIBLITY: {
return {
...state,
showJoinByPhoneDialog: action.value
};
}
default:
return state;
}
},
);
/**
* Returns a suitable error object based on the track errors.
*
* @param {Object} errors - The errors got while creating local tracks.
* @returns {Object}
*/
function getStatusFromErrors(errors) {
const { audioOnlyError, videoOnlyError, audioAndVideoError } = errors;
if (audioAndVideoError) {
if (audioOnlyError) {
if (videoOnlyError) {
return {
deviceStatusType: 'warning',
deviceStatusText: 'prejoin.audioAndVideoError',
rawError: audioAndVideoError.message
};
}
return {
deviceStatusType: 'warning',
deviceStatusText: 'prejoin.audioOnlyError',
rawError: audioOnlyError.message
};
}
return {
deviceStatusType: 'warning',
deviceStatusText: 'prejoin.videoOnlyError',
rawError: audioAndVideoError.message
};
}
return {
deviceStatusType: 'ok',
deviceStatusText: 'prejoin.lookGood',
rawError: ''
};
}