169 lines
4.0 KiB
JavaScript
169 lines
4.0 KiB
JavaScript
|
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: ''
|
||
|
};
|
||
|
}
|