mirror of
https://github.com/vector-im/element-call.git
synced 2026-08-29 21:15:19 +00:00
Merge pull request #4185 from element-hq/pip-no-modals
Hide reactions interface in PiP mode
This commit is contained in:
@@ -127,6 +127,7 @@ export const Default: Story = {
|
|||||||
showFooter: true,
|
showFooter: true,
|
||||||
hideControls: false,
|
hideControls: false,
|
||||||
asOverlay: false,
|
asOverlay: false,
|
||||||
|
showModals: true,
|
||||||
sharingScreen: false,
|
sharingScreen: false,
|
||||||
audioOutputSwitcher: undefined,
|
audioOutputSwitcher: undefined,
|
||||||
reactionIdentifier: undefined,
|
reactionIdentifier: undefined,
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ export interface FooterState {
|
|||||||
/** The footer should be used as an overlay.
|
/** The footer should be used as an overlay.
|
||||||
* (Over the Call Grid) This saves spaces on small screens. */
|
* (Over the Call Grid) This saves spaces on small screens. */
|
||||||
asOverlay: boolean;
|
asOverlay: boolean;
|
||||||
|
showModals: boolean;
|
||||||
|
|
||||||
buttonSize: "md" | "lg";
|
buttonSize: "md" | "lg";
|
||||||
showLogo: boolean;
|
showLogo: boolean;
|
||||||
@@ -121,6 +122,7 @@ export const CallFooter: FC<FooterProps> = ({
|
|||||||
const asOverlay = useBehavior(vm.asOverlay$);
|
const asOverlay = useBehavior(vm.asOverlay$);
|
||||||
const showFooter = useBehavior(vm.showFooter$);
|
const showFooter = useBehavior(vm.showFooter$);
|
||||||
const hideControls = useBehavior(vm.hideControls$);
|
const hideControls = useBehavior(vm.hideControls$);
|
||||||
|
const showModals = useBehavior(vm.showModals$);
|
||||||
const layoutSwitchVm = useBehavior(vm.layoutSwitchVm$);
|
const layoutSwitchVm = useBehavior(vm.layoutSwitchVm$);
|
||||||
const openSettings = useBehavior(vm.openSettings$);
|
const openSettings = useBehavior(vm.openSettings$);
|
||||||
const audioEnabled = useBehavior(vm.audioEnabled$);
|
const audioEnabled = useBehavior(vm.audioEnabled$);
|
||||||
@@ -235,7 +237,8 @@ export const CallFooter: FC<FooterProps> = ({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reactionIdentifier && reactionData) {
|
// Reaction button contains a pretty large menu, so treat it like a modal
|
||||||
|
if (reactionIdentifier && reactionData && showModals) {
|
||||||
buttons.push(
|
buttons.push(
|
||||||
<ReactionToggleButton
|
<ReactionToggleButton
|
||||||
size={buttonSize}
|
size={buttonSize}
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ function buildMinimalCallViewModel(layout: Layout): CallViewModel {
|
|||||||
reactions$: constant({}),
|
reactions$: constant({}),
|
||||||
tileStoreGeneration$: constant(0),
|
tileStoreGeneration$: constant(0),
|
||||||
showFooter$: constant(true),
|
showFooter$: constant(true),
|
||||||
|
showModals$: constant(true),
|
||||||
settingsOpen$: constant(false),
|
settingsOpen$: constant(false),
|
||||||
setSettingsOpen$: constant(() => {}),
|
setSettingsOpen$: constant(() => {}),
|
||||||
} as unknown as CallViewModel;
|
} as unknown as CallViewModel;
|
||||||
|
|||||||
@@ -161,6 +161,7 @@ export function createCallFooterViewModel(
|
|||||||
// candidat to move into the FooterViewModel
|
// candidat to move into the FooterViewModel
|
||||||
showFooter$: callModel.showFooter$,
|
showFooter$: callModel.showFooter$,
|
||||||
hideControls$: constant(!showControls),
|
hideControls$: constant(!showControls),
|
||||||
|
showModals$: callModel.showModals$,
|
||||||
asOverlay$: callModel.edgeToEdge$,
|
asOverlay$: callModel.edgeToEdge$,
|
||||||
buttonSize$: scope.behavior(
|
buttonSize$: scope.behavior(
|
||||||
isPip$.pipe(map<boolean, "md" | "lg">((pip) => (pip ? "md" : "lg"))),
|
isPip$.pipe(map<boolean, "md" | "lg">((pip) => (pip ? "md" : "lg"))),
|
||||||
@@ -168,12 +169,12 @@ export function createCallFooterViewModel(
|
|||||||
|
|
||||||
openSettings$: scope.behavior(
|
openSettings$: scope.behavior(
|
||||||
combineLatest([
|
combineLatest([
|
||||||
isPip$,
|
callModel.showModals$,
|
||||||
callModel.showHeader$,
|
callModel.showHeader$,
|
||||||
callModel.setSettingsOpen$,
|
callModel.setSettingsOpen$,
|
||||||
]).pipe(
|
]).pipe(
|
||||||
map(([isPip, showHeader, setSettingsOpen]) =>
|
map(([showModals, showHeader, setSettingsOpen]) =>
|
||||||
!isPip && headerStyle !== HeaderStyle.AppBar && showControls
|
showModals && headerStyle !== HeaderStyle.AppBar && showControls
|
||||||
? (): void => setSettingsOpen(true)
|
? (): void => setSettingsOpen(true)
|
||||||
: undefined,
|
: undefined,
|
||||||
),
|
),
|
||||||
@@ -239,6 +240,7 @@ export function createLobbyFooterViewModel(
|
|||||||
showLogo,
|
showLogo,
|
||||||
hideControls: false,
|
hideControls: false,
|
||||||
asOverlay: false,
|
asOverlay: false,
|
||||||
|
showModals: true,
|
||||||
buttonSize: "lg",
|
buttonSize: "lg",
|
||||||
openSettings,
|
openSettings,
|
||||||
hangup,
|
hangup,
|
||||||
|
|||||||
@@ -261,6 +261,7 @@ export const InCallView: FC<InCallViewProps> = ({
|
|||||||
const overflowing = useBehavior(vm.overflowing$);
|
const overflowing = useBehavior(vm.overflowing$);
|
||||||
const showNameTags = useBehavior(vm.showNameTags$);
|
const showNameTags = useBehavior(vm.showNameTags$);
|
||||||
const showHeader = useBehavior(vm.showHeader$);
|
const showHeader = useBehavior(vm.showHeader$);
|
||||||
|
const showModals = useBehavior(vm.showModals$);
|
||||||
const settingsOpen = useBehavior(vm.settingsOpen$);
|
const settingsOpen = useBehavior(vm.settingsOpen$);
|
||||||
const setSettingsOpen = useBehavior(vm.setSettingsOpen$);
|
const setSettingsOpen = useBehavior(vm.setSettingsOpen$);
|
||||||
const earpieceMode = useBehavior(vm.earpieceMode$);
|
const earpieceMode = useBehavior(vm.earpieceMode$);
|
||||||
@@ -622,7 +623,7 @@ export const InCallView: FC<InCallViewProps> = ({
|
|||||||
{earpieceOverlay}
|
{earpieceOverlay}
|
||||||
<ReactionsOverlay vm={vm} />
|
<ReactionsOverlay vm={vm} />
|
||||||
{footer}
|
{footer}
|
||||||
{layout.type !== "pip" && (
|
{showModals && (
|
||||||
<>
|
<>
|
||||||
<RageshakeRequestModal {...rageshakeRequestModalProps} />
|
<RageshakeRequestModal {...rageshakeRequestModalProps} />
|
||||||
<SettingsModal
|
<SettingsModal
|
||||||
|
|||||||
@@ -366,6 +366,11 @@ export interface CallViewModel {
|
|||||||
*/
|
*/
|
||||||
overflowing$: Behavior<boolean>;
|
overflowing$: Behavior<boolean>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether modals such as settings and reactions should be accessible at all.
|
||||||
|
*/
|
||||||
|
showModals$: Behavior<boolean>;
|
||||||
|
|
||||||
settingsOpen$: Behavior<boolean>;
|
settingsOpen$: Behavior<boolean>;
|
||||||
setSettingsOpen$: Behavior<(open: boolean) => void>;
|
setSettingsOpen$: Behavior<(open: boolean) => void>;
|
||||||
|
|
||||||
@@ -1450,6 +1455,11 @@ export function createCallViewModel$(
|
|||||||
map((naturallyShowFooter) => naturallyShowFooter && showFooterUrlParams),
|
map((naturallyShowFooter) => naturallyShowFooter && showFooterUrlParams),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const showModals$ = scope.behavior(
|
||||||
|
windowMode$.pipe(map((mode) => mode !== "pip")),
|
||||||
|
);
|
||||||
|
|
||||||
const settingsOpen$ = new BehaviorSubject(false);
|
const settingsOpen$ = new BehaviorSubject(false);
|
||||||
const setSettingsOpen$ = constant((open: boolean) => {
|
const setSettingsOpen$ = constant((open: boolean) => {
|
||||||
settingsOpen$.next(open);
|
settingsOpen$.next(open);
|
||||||
@@ -1826,6 +1836,7 @@ export function createCallViewModel$(
|
|||||||
showNameTags$,
|
showNameTags$,
|
||||||
showHeader$: showHeader$,
|
showHeader$: showHeader$,
|
||||||
showFooter$: showFooter$,
|
showFooter$: showFooter$,
|
||||||
|
showModals$,
|
||||||
settingsOpen$: settingsOpen$,
|
settingsOpen$: settingsOpen$,
|
||||||
setSettingsOpen$: setSettingsOpen$,
|
setSettingsOpen$: setSettingsOpen$,
|
||||||
edgeToEdge$,
|
edgeToEdge$,
|
||||||
|
|||||||
Reference in New Issue
Block a user