multiparty-meeting/app/src/reducers/me.js

179 lines
3.2 KiB
JavaScript

const initialState =
{
id : null,
picture : null,
browser : null,
roles : [ 'normal' ], // Default role
canSendMic : false,
canSendWebcam : false,
canShareScreen : false,
canShareFiles : false,
audioDevices : null,
webcamDevices : null,
webcamInProgress : false,
audioInProgress : false,
screenShareInProgress : false,
displayNameInProgress : false,
loginEnabled : false,
raisedHand : false,
raisedHandInProgress : false,
loggedIn : false,
isSpeaking : false,
isAutoMuted : true
};
const me = (state = initialState, action) =>
{
switch (action.type)
{
case 'SET_ME':
{
const {
peerId,
loginEnabled
} = action.payload;
return {
...state,
id : peerId,
loginEnabled
};
}
case 'SET_BROWSER':
{
const { browser } = action.payload;
return { ...state, browser };
}
case 'LOGGED_IN':
{
const { flag } = action.payload;
return { ...state, loggedIn: flag };
}
case 'ADD_ROLE':
{
if (state.roles.includes(action.payload.role))
return state;
const roles = [ ...state.roles, action.payload.role ];
return { ...state, roles };
}
case 'REMOVE_ROLE':
{
const roles = state.roles.filter((role) =>
role !== action.payload.role);
return { ...state, roles };
}
case 'SET_PICTURE':
return { ...state, picture: action.payload.picture };
case 'SET_MEDIA_CAPABILITIES':
{
const {
canSendMic,
canSendWebcam,
canShareScreen,
canShareFiles
} = action.payload;
return {
...state,
canSendMic,
canSendWebcam,
canShareScreen,
canShareFiles
};
}
case 'SET_AUDIO_DEVICES':
{
const { devices } = action.payload;
return { ...state, audioDevices: devices };
}
case 'SET_AUDIO_OUTPUT_DEVICES':
{
const { devices } = action.payload;
return { ...state, audioOutputDevices: devices };
}
case 'SET_WEBCAM_DEVICES':
{
const { devices } = action.payload;
return { ...state, webcamDevices: devices };
}
case 'SET_AUDIO_IN_PROGRESS':
{
const { flag } = action.payload;
return { ...state, audioInProgress: flag };
}
case 'SET_WEBCAM_IN_PROGRESS':
{
const { flag } = action.payload;
return { ...state, webcamInProgress: flag };
}
case 'SET_SCREEN_SHARE_IN_PROGRESS':
{
const { flag } = action.payload;
return { ...state, screenShareInProgress: flag };
}
case 'SET_RAISED_HAND':
{
const { flag } = action.payload;
return { ...state, raisedHand: flag };
}
case 'SET_RAISED_HAND_IN_PROGRESS':
{
const { flag } = action.payload;
return { ...state, raisedHandInProgress: flag };
}
case 'SET_DISPLAY_NAME_IN_PROGRESS':
{
const { flag } = action.payload;
return { ...state, displayNameInProgress: flag };
}
case 'SET_IS_SPEAKING':
{
const { flag } = action.payload;
return { ...state, isSpeaking: flag };
}
case 'SET_AUTO_MUTED':
{
const { flag } = action.payload;
return { ...state, isAutoMuted: flag };
}
default:
return state;
}
};
export default me;