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

198 lines
4.9 KiB
TypeScript
Raw Normal View History

import PersistenceRegistry from '../base/redux/PersistenceRegistry';
import ReducerRegistry from '../base/redux/ReducerRegistry';
2020-04-16 10:47:10 +00:00
import {
PREJOIN_JOINING_IN_PROGRESS,
2020-04-16 10:47:10 +00:00
SET_DEVICE_STATUS,
SET_DIALOUT_COUNTRY,
SET_DIALOUT_NUMBER,
SET_DIALOUT_STATUS,
2020-04-16 10:47:10 +00:00
SET_JOIN_BY_PHONE_DIALOG_VISIBLITY,
SET_PRECALL_TEST_RESULTS,
2020-04-16 10:47:10 +00:00
SET_PREJOIN_DEVICE_ERRORS,
SET_PREJOIN_DISPLAY_NAME_REQUIRED,
SET_PREJOIN_PAGE_VISIBILITY,
SET_SKIP_PREJOIN_RELOAD
2020-04-16 10:47:10 +00:00
} from './actionTypes';
const DEFAULT_STATE = {
country: '',
2020-04-16 10:47:10 +00:00
deviceStatusText: 'prejoin.configuringDevices',
deviceStatusType: 'ok',
dialOutCountry: {
name: 'United States',
dialCode: '1',
code: 'us'
},
dialOutNumber: '',
dialOutStatus: 'prejoin.dialing',
isDisplayNameRequired: false,
name: '',
rawError: '',
2020-04-16 10:47:10 +00:00
showPrejoin: true,
skipPrejoinOnReload: false,
showJoinByPhoneDialog: false
2020-04-16 10:47:10 +00:00
};
export interface IPrejoinState {
country: string;
deviceStatusText: string;
deviceStatusType: string;
dialOutCountry: {
code: string;
dialCode: string;
name: string;
};
dialOutNumber: string;
dialOutStatus: string;
isDisplayNameRequired: boolean;
joiningInProgress?: boolean;
name: string;
precallTestResults?: Object;
rawError: string;
showJoinByPhoneDialog: boolean;
showPrejoin: boolean;
skipPrejoinOnReload: boolean;
}
/**
* Sets up the persistence of the feature {@code prejoin}.
*/
PersistenceRegistry.register('features/prejoin', {
skipPrejoinOnReload: true
}, DEFAULT_STATE);
2020-04-16 10:47:10 +00:00
/**
2021-11-04 21:10:43 +00:00
* Listen for actions that mutate the prejoin state.
2020-04-16 10:47:10 +00:00
*/
2022-09-05 09:05:07 +00:00
ReducerRegistry.register<IPrejoinState>(
'features/prejoin', (state = DEFAULT_STATE, action): IPrejoinState => {
2020-04-16 10:47:10 +00:00
switch (action.type) {
case PREJOIN_JOINING_IN_PROGRESS:
return {
...state,
joiningInProgress: action.value
};
case SET_SKIP_PREJOIN_RELOAD: {
return {
...state,
skipPrejoinOnReload: action.value
};
}
case SET_PRECALL_TEST_RESULTS:
return {
...state,
precallTestResults: action.value
};
2020-04-16 10:47:10 +00:00
case SET_PREJOIN_PAGE_VISIBILITY:
return {
...state,
showPrejoin: action.value
};
case SET_PREJOIN_DEVICE_ERRORS: {
const status = getStatusFromErrors(action.value);
return {
...state,
...status
};
}
case SET_DEVICE_STATUS: {
const { deviceStatusType, deviceStatusText } = action.value;
2020-04-16 10:47:10 +00:00
return {
...state,
deviceStatusText,
deviceStatusType
2020-04-16 10:47:10 +00:00
};
}
case SET_DIALOUT_NUMBER: {
return {
...state,
dialOutNumber: action.value
};
}
case SET_DIALOUT_COUNTRY: {
return {
...state,
dialOutCountry: action.value
};
}
case SET_DIALOUT_STATUS: {
return {
...state,
dialOutStatus: action.value
};
}
2020-04-16 10:47:10 +00:00
case SET_JOIN_BY_PHONE_DIALOG_VISIBLITY: {
return {
...state,
showJoinByPhoneDialog: action.value
};
}
case SET_PREJOIN_DISPLAY_NAME_REQUIRED: {
return {
...state,
isDisplayNameRequired: true
};
}
2020-04-16 10:47:10 +00:00
default:
return state;
}
2021-11-04 21:10:43 +00:00
}
2020-04-16 10:47:10 +00:00
);
/**
* 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: {
audioAndVideoError?: { message: string; };
audioOnlyError?: { message: string; };
videoOnlyError?: Object; }
) {
2020-04-16 10:47:10 +00:00
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: ''
};
}