theluyuan 38ba663466
Some checks failed
Close stale issues and PRs / stale (push) Has been cancelled
init
2025-09-02 14:49:16 +08:00

79 lines
2.8 KiB
TypeScript

import { IReduxState, IStore } from '../app/types';
import { isDisplayNameVisible } from '../base/config/functions.any';
import {
getLocalParticipant,
getParticipantDisplayName,
isScreenShareParticipant,
isWhiteboardParticipant
} from '../base/participants/functions';
import { updateSettings } from '../base/settings/actions';
import { getLargeVideoParticipant } from '../large-video/functions';
import { isToolboxVisible } from '../toolbox/functions.web';
import { isLayoutTileView } from '../video-layout/functions.any';
/**
* Appends a suffix to the display name.
*
* @param {string} displayName - The display name.
* @param {string} suffix - Suffix that will be appended.
* @returns {string} The formatted display name.
*/
export function appendSuffix(displayName: string, suffix = ''): string {
return `${displayName || suffix}${
displayName && suffix && displayName !== suffix ? ` (${suffix})` : ''}`;
}
/**
* Dispatches an action to update the local participant's display name. A
* name must be entered for the action to dispatch.
*
* It returns a boolean to comply the Dialog behaviour:
* {@code true} - the dialog should be closed.
* {@code false} - the dialog should be left open.
*
* @param {Function} dispatch - Redux dispatch function.
* @param {Function} onPostSubmit - Function to be invoked after a successful display name change.
* @param {string} displayName - The display name to save.
* @returns {boolean}
*/
export function onSetDisplayName(dispatch: IStore['dispatch'], onPostSubmit?: Function) {
return function(displayName: string) {
if (!displayName?.trim()) {
return false;
}
// Store display name in settings
dispatch(updateSettings({
displayName
}));
onPostSubmit?.();
return true;
};
}
/**
* Returns true if the stage participant badge should be displayed and false otherwise.
*
* @param {IReduxState} state - The redux state.
* @returns {boolean} - True if the stage participant badge should be displayed and false otherwise.
*/
export function shouldDisplayStageParticipantBadge(state: IReduxState) {
const largeVideoParticipant = getLargeVideoParticipant(state);
const selectedId = largeVideoParticipant?.id;
const nameToDisplay = getParticipantDisplayName(state, selectedId ?? '');
const localId = getLocalParticipant(state)?.id;
const isTileView = isLayoutTileView(state);
const toolboxVisible: boolean = isToolboxVisible(state);
const showDisplayName = isDisplayNameVisible(state);
return Boolean(showDisplayName
&& nameToDisplay
&& selectedId !== localId
&& !isTileView
&& !isWhiteboardParticipant(largeVideoParticipant)
&& (!isScreenShareParticipant(largeVideoParticipant) || toolboxVisible)
);
}