Call Tile - Improve tile alignment in modern and bubble layout (#33478)
* Tile must have same indent as messages * Align the call tiles between the bubbles
This commit is contained in:
@@ -355,7 +355,8 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&:not(.mx_EventTile_noBubble) .mx_EventTile_line:not(.mx_EventTile_mediaLine) {
|
&:not(.mx_EventTile_noBubble):not(.mx_EventTile_alignedBetweenBubbles)
|
||||||
|
.mx_EventTile_line:not(.mx_EventTile_mediaLine) {
|
||||||
/* make the top and bottom padding 1px smaller so that we can pad
|
/* make the top and bottom padding 1px smaller so that we can pad
|
||||||
.mx_EventTile_content by 1px */
|
.mx_EventTile_content by 1px */
|
||||||
/* to avoid anti-zalgo cutting off our larger than text emojis. */
|
/* to avoid anti-zalgo cutting off our larger than text emojis. */
|
||||||
@@ -523,6 +524,21 @@ Please see LICENSE files in the repository root for full details.
|
|||||||
.mx_CallEvent_wrapper {
|
.mx_CallEvent_wrapper {
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.mx_EventTile_alignedBetweenBubbles {
|
||||||
|
margin-inline-start: calc(
|
||||||
|
var(--EventTile_bubble-margin-inline-start) + var(--EventTile_bubble_line-margin-inline-start)
|
||||||
|
);
|
||||||
|
margin-inline-end: calc(
|
||||||
|
var(--EventTile_bubble-margin-inline-end) + var(--EventTile_bubble_line-margin-inline-end)
|
||||||
|
);
|
||||||
|
|
||||||
|
.mx_EventTile_line {
|
||||||
|
max-width: 100%;
|
||||||
|
width: 100%;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_EventTile.mx_EventTile_noBubble[data-layout="bubble"] {
|
.mx_EventTile.mx_EventTile_noBubble[data-layout="bubble"] {
|
||||||
|
|||||||
@@ -1071,6 +1071,7 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
|
|||||||
isLeftAlignedBubbleMessage,
|
isLeftAlignedBubbleMessage,
|
||||||
noBubbleEvent,
|
noBubbleEvent,
|
||||||
isSeeingThroughMessageHiddenForModeration,
|
isSeeingThroughMessageHiddenForModeration,
|
||||||
|
isAlignedBetweenBubbles,
|
||||||
} = getEventDisplayInfo(
|
} = getEventDisplayInfo(
|
||||||
MatrixClientPeg.safeGet(),
|
MatrixClientPeg.safeGet(),
|
||||||
this.props.mxEvent,
|
this.props.mxEvent,
|
||||||
@@ -1118,6 +1119,7 @@ export class UnwrappedEventTile extends React.Component<EventTileProps, IState>
|
|||||||
getEventTileClassState({
|
getEventTileClassState({
|
||||||
isBubbleMessage,
|
isBubbleMessage,
|
||||||
isLeftAlignedBubbleMessage,
|
isLeftAlignedBubbleMessage,
|
||||||
|
isAlignedBetweenBubbles,
|
||||||
isEditing,
|
isEditing,
|
||||||
isInfoMessage,
|
isInfoMessage,
|
||||||
isTwelveHour: this.props.isTwelveHour,
|
isTwelveHour: this.props.isTwelveHour,
|
||||||
|
|||||||
@@ -402,6 +402,8 @@ export interface EventTileClassState {
|
|||||||
isBubbleMessage: boolean;
|
isBubbleMessage: boolean;
|
||||||
/** Whether the bubble tile is left-aligned. */
|
/** Whether the bubble tile is left-aligned. */
|
||||||
isLeftAlignedBubbleMessage: boolean;
|
isLeftAlignedBubbleMessage: boolean;
|
||||||
|
/** Whether the event is aligned between the bubbles */
|
||||||
|
isAlignedBetweenBubbles: boolean;
|
||||||
/** Whether the event is currently being edited. */
|
/** Whether the event is currently being edited. */
|
||||||
isEditing: boolean;
|
isEditing: boolean;
|
||||||
/** Whether the event renders as an informational timeline item. */
|
/** Whether the event renders as an informational timeline item. */
|
||||||
@@ -444,6 +446,7 @@ export interface EventTileClassState {
|
|||||||
export function getEventTileClassState({
|
export function getEventTileClassState({
|
||||||
isBubbleMessage,
|
isBubbleMessage,
|
||||||
isLeftAlignedBubbleMessage,
|
isLeftAlignedBubbleMessage,
|
||||||
|
isAlignedBetweenBubbles,
|
||||||
isEditing,
|
isEditing,
|
||||||
isInfoMessage,
|
isInfoMessage,
|
||||||
isTwelveHour,
|
isTwelveHour,
|
||||||
@@ -466,6 +469,7 @@ export function getEventTileClassState({
|
|||||||
return {
|
return {
|
||||||
mx_EventTile_bubbleContainer: isBubbleMessage,
|
mx_EventTile_bubbleContainer: isBubbleMessage,
|
||||||
mx_EventTile_leftAlignedBubble: isLeftAlignedBubbleMessage,
|
mx_EventTile_leftAlignedBubble: isLeftAlignedBubbleMessage,
|
||||||
|
mx_EventTile_alignedBetweenBubbles: isAlignedBetweenBubbles,
|
||||||
mx_EventTile: true,
|
mx_EventTile: true,
|
||||||
mx_EventTile_isEditing: isEditing,
|
mx_EventTile_isEditing: isEditing,
|
||||||
mx_EventTile_info: isInfoMessage,
|
mx_EventTile_info: isInfoMessage,
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ export function getEventDisplayInfo(
|
|||||||
isLeftAlignedBubbleMessage: boolean;
|
isLeftAlignedBubbleMessage: boolean;
|
||||||
noBubbleEvent: boolean;
|
noBubbleEvent: boolean;
|
||||||
isSeeingThroughMessageHiddenForModeration: boolean;
|
isSeeingThroughMessageHiddenForModeration: boolean;
|
||||||
|
isAlignedBetweenBubbles: boolean;
|
||||||
} {
|
} {
|
||||||
const content = mxEvent.getContent();
|
const content = mxEvent.getContent();
|
||||||
const msgtype = content.msgtype;
|
const msgtype = content.msgtype;
|
||||||
@@ -77,14 +78,16 @@ export function getEventDisplayInfo(
|
|||||||
|
|
||||||
// Info messages are basically information about commands processed on a room
|
// Info messages are basically information about commands processed on a room
|
||||||
let isBubbleMessage =
|
let isBubbleMessage =
|
||||||
eventType === EventType.RTCNotification ||
|
|
||||||
eventType.startsWith("m.key.verification") ||
|
eventType.startsWith("m.key.verification") ||
|
||||||
(eventType === EventType.RoomMessage && msgtype?.startsWith("m.key.verification")) ||
|
(eventType === EventType.RoomMessage && msgtype?.startsWith("m.key.verification")) ||
|
||||||
eventType === EventType.RoomCreate ||
|
eventType === EventType.RoomCreate ||
|
||||||
eventType === EventType.RoomEncryption ||
|
eventType === EventType.RoomEncryption ||
|
||||||
factory === JitsiEventFactory;
|
factory === JitsiEventFactory;
|
||||||
const isLeftAlignedBubbleMessage =
|
const isLeftAlignedBubbleMessage =
|
||||||
!isBubbleMessage && (eventType === EventType.CallInvite || ElementCallEventType.matches(eventType));
|
!isBubbleMessage &&
|
||||||
|
(eventType === EventType.RTCNotification ||
|
||||||
|
eventType === EventType.CallInvite ||
|
||||||
|
ElementCallEventType.matches(eventType));
|
||||||
let isInfoMessage = calcIsInfoMessage(eventType, content, isBubbleMessage, isLeftAlignedBubbleMessage);
|
let isInfoMessage = calcIsInfoMessage(eventType, content, isBubbleMessage, isLeftAlignedBubbleMessage);
|
||||||
// Some non-info messages want to be rendered in the appropriate bubble column but without the bubble background
|
// Some non-info messages want to be rendered in the appropriate bubble column but without the bubble background
|
||||||
const noBubbleEvent =
|
const noBubbleEvent =
|
||||||
@@ -107,6 +110,32 @@ export function getEventDisplayInfo(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
┌──────────────────────────────────────────────────────────┐
|
||||||
|
│ │
|
||||||
|
│ TILE ALIGNED BETWEEN BUBBLES │
|
||||||
|
│ │
|
||||||
|
└──────────────────────────────────────────────────────────┘
|
||||||
|
▲ ▲
|
||||||
|
│ │
|
||||||
|
│ │
|
||||||
|
│ │
|
||||||
|
┌────┤ │
|
||||||
|
│ ┌──┼───────────────────┐ │
|
||||||
|
│ │ │ │ │
|
||||||
|
└─┼──┘ Bubble │ │
|
||||||
|
└──────────────────────┘ │
|
||||||
|
│
|
||||||
|
│
|
||||||
|
│
|
||||||
|
├────┐
|
||||||
|
┌───────────────────┼──┐ │
|
||||||
|
│ │ │ │
|
||||||
|
│ Bubble └──┼─┘
|
||||||
|
└──────────────────────┘
|
||||||
|
*/
|
||||||
|
const isAlignedBetweenBubbles = eventType === EventType.RTCNotification;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
hasRenderer: !!factory,
|
hasRenderer: !!factory,
|
||||||
isInfoMessage,
|
isInfoMessage,
|
||||||
@@ -114,5 +143,6 @@ export function getEventDisplayInfo(
|
|||||||
isLeftAlignedBubbleMessage,
|
isLeftAlignedBubbleMessage,
|
||||||
noBubbleEvent,
|
noBubbleEvent,
|
||||||
isSeeingThroughMessageHiddenForModeration,
|
isSeeingThroughMessageHiddenForModeration,
|
||||||
|
isAlignedBetweenBubbles,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user