mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2025-12-30 11:22:31 +00:00
feat(conference): apply reduce ui for web (#16763)
* Change stage view and use newly reducedUImainToolbarButtons config to show different custom buttons as main toolbar buttons for when web is in reduced UI.
This commit is contained in:
@@ -19,6 +19,7 @@ import {
|
||||
import {
|
||||
getJwtDisabledButtons,
|
||||
getVisibleButtons,
|
||||
getVisibleButtonsForReducedUI,
|
||||
isButtonEnabled,
|
||||
isToolboxVisible
|
||||
} from '../../functions.web';
|
||||
@@ -82,8 +83,7 @@ export default function Toolbox({
|
||||
const isNarrowLayout = useSelector((state: IReduxState) => state['features/base/responsive-ui'].isNarrowLayout);
|
||||
const videoSpaceWidth = useSelector((state: IReduxState) => state['features/base/responsive-ui'].videoSpaceWidth);
|
||||
const isModerator = useSelector(isLocalParticipantModerator);
|
||||
const customToolbarButtons = useSelector(
|
||||
(state: IReduxState) => state['features/base/config'].customToolbarButtons);
|
||||
const customToolbarButtons = useSelector((state: IReduxState) => state['features/base/config'].customToolbarButtons);
|
||||
const iAmRecorder = useSelector((state: IReduxState) => state['features/base/config'].iAmRecorder);
|
||||
const iAmSipGateway = useSelector((state: IReduxState) => state['features/base/config'].iAmSipGateway);
|
||||
const overflowDrawer = useSelector((state: IReduxState) => state['features/toolbox'].overflowDrawer);
|
||||
@@ -110,6 +110,8 @@ export default function Toolbox({
|
||||
const toolbarVisible = useSelector(isToolboxVisible);
|
||||
const mainToolbarButtonsThresholds
|
||||
= useSelector((state: IReduxState) => state['features/toolbox'].mainToolbarButtonsThresholds);
|
||||
const { reducedUImainToolbarButtons } = useSelector((state: IReduxState) => state['features/base/config']);
|
||||
const reducedUI = useSelector((state: IReduxState) => state['features/base/responsive-ui'].reducedUI);
|
||||
const allButtons = useToolboxButtons(customToolbarButtons);
|
||||
const isMobile = isMobileBrowser();
|
||||
const endConferenceSupported = Boolean(conference?.isEndConferenceSupported() && isModerator);
|
||||
@@ -233,7 +235,7 @@ export default function Toolbox({
|
||||
const toolbarAccLabel = 'toolbar.accessibilityLabel.moreActionsMenu';
|
||||
const containerClassName = `toolbox-content${isMobile || isNarrowLayout ? ' toolbox-content-mobile' : ''}`;
|
||||
|
||||
const { mainMenuButtons, overflowMenuButtons } = getVisibleButtons({
|
||||
const normalUIButtons = getVisibleButtons({
|
||||
allButtons,
|
||||
buttonsWithNotifyClick,
|
||||
toolbarButtons: toolbarButtonsToUse,
|
||||
@@ -241,6 +243,20 @@ export default function Toolbox({
|
||||
jwtDisabledButtons,
|
||||
mainToolbarButtonsThresholds
|
||||
});
|
||||
|
||||
const reducedUIButtons = getVisibleButtonsForReducedUI({
|
||||
allButtons,
|
||||
buttonsWithNotifyClick,
|
||||
jwtDisabledButtons,
|
||||
reducedUImainToolbarButtons,
|
||||
});
|
||||
|
||||
const mainMenuButtons = reducedUI
|
||||
? reducedUIButtons.mainMenuButtons
|
||||
: normalUIButtons.mainMenuButtons;
|
||||
const overflowMenuButtons = reducedUI
|
||||
? []
|
||||
: normalUIButtons.overflowMenuButtons;
|
||||
const raiseHandInOverflowMenu = overflowMenuButtons.some(({ key }) => key === 'raisehand');
|
||||
const showReactionsInOverflowMenu = _shouldDisplayReactionsButtons
|
||||
&& (
|
||||
|
||||
@@ -12,6 +12,8 @@ export const DUMMY_9_BUTTONS_THRESHOLD_VALUE = Symbol('9_BUTTONS_THRESHOLD_VALUE
|
||||
*/
|
||||
export const DUMMY_10_BUTTONS_THRESHOLD_VALUE = Symbol('10_BUTTONS_THRESHOLD_VALUE');
|
||||
|
||||
export const DEFAULT_REDUCED_UI_MAIN_TOOLBAR_BUTTONS = [ 'microphone', 'camera' ];
|
||||
|
||||
/**
|
||||
* Thresholds for displaying toolbox buttons.
|
||||
*/
|
||||
|
||||
@@ -6,9 +6,9 @@ import { IGUMPendingState } from '../base/media/types';
|
||||
import { isScreenMediaShared } from '../screen-share/functions';
|
||||
import { isWhiteboardVisible } from '../whiteboard/functions';
|
||||
|
||||
import { MAIN_TOOLBAR_BUTTONS_PRIORITY, TOOLBAR_TIMEOUT } from './constants';
|
||||
import { DEFAULT_REDUCED_UI_MAIN_TOOLBAR_BUTTONS, MAIN_TOOLBAR_BUTTONS_PRIORITY, TOOLBAR_TIMEOUT } from './constants';
|
||||
import { isButtonEnabled } from './functions.any';
|
||||
import { IGetVisibleButtonsParams, IToolboxButton, NOTIFY_CLICK_MODE } from './types';
|
||||
import { IGetVisibleButtonsForReducedUIParams, IGetVisibleButtonsParams, IToolboxButton, NOTIFY_CLICK_MODE } from './types';
|
||||
|
||||
export * from './functions.any';
|
||||
|
||||
@@ -201,6 +201,41 @@ export function getVisibleButtons({
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns buttons that need to be rendered for reduced UI mode.
|
||||
*
|
||||
* @param {IGetVisibleButtonsForReducedUIParams} params - The parameters needed to extract the visible buttons.
|
||||
* @returns {Object} - The visible buttons for reduced ui.
|
||||
*/
|
||||
export function getVisibleButtonsForReducedUI({
|
||||
allButtons,
|
||||
buttonsWithNotifyClick,
|
||||
jwtDisabledButtons,
|
||||
reducedUImainToolbarButtons
|
||||
}: IGetVisibleButtonsForReducedUIParams) {
|
||||
setButtonsNotifyClickMode(allButtons, buttonsWithNotifyClick);
|
||||
|
||||
if (!Array.isArray(reducedUImainToolbarButtons) || reducedUImainToolbarButtons.length === 0) {
|
||||
const defaultButtons = DEFAULT_REDUCED_UI_MAIN_TOOLBAR_BUTTONS.map(key => allButtons[key]);
|
||||
|
||||
return {
|
||||
mainMenuButtons: defaultButtons
|
||||
};
|
||||
}
|
||||
|
||||
const filteredButtons = reducedUImainToolbarButtons.filter(key =>
|
||||
typeof key !== 'undefined'
|
||||
&& !jwtDisabledButtons.includes(key)
|
||||
&& isButtonEnabled(key, reducedUImainToolbarButtons)
|
||||
&& allButtons[key]);
|
||||
|
||||
const mainMenuButtons = filteredButtons.map(key => allButtons[key]);
|
||||
|
||||
return {
|
||||
mainMenuButtons
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the list of participant menu buttons that have that notify the api when clicked.
|
||||
*
|
||||
|
||||
@@ -107,3 +107,10 @@ export interface IGetVisibleButtonsParams {
|
||||
mainToolbarButtonsThresholds: IMainToolbarButtonThresholds;
|
||||
toolbarButtons: string[];
|
||||
}
|
||||
|
||||
export interface IGetVisibleButtonsForReducedUIParams {
|
||||
allButtons: { [key: string]: IToolboxButton; };
|
||||
buttonsWithNotifyClick: Map<string, NOTIFY_CLICK_MODE>;
|
||||
jwtDisabledButtons: string[];
|
||||
reducedUImainToolbarButtons?: string[];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user