Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
e83ad2c
Place room tiles with grid
luixxiul Mar 26, 2022
e7e077e
Set padding inside of name stack
luixxiul Mar 26, 2022
c5c189a
Remove overflow:hidden (to be cancelled)
luixxiul Mar 26, 2022
f8d53e1
Replace text-align with margin
luixxiul Mar 28, 2022
270602f
Style invite failure dialog with display:grid
luixxiul Mar 12, 2022
b060c29
Merge style rules of room tiles and tiles on invitation failure dialog
luixxiul May 5, 2022
dddf57c
Normalize avatar size for multiInviterError
luixxiul May 5, 2022
c7998f9
Set text overflow with ellipsis
luixxiul May 5, 2022
9eb9ed3
Use spacing variables
luixxiul May 5, 2022
74d5210
Set narrow gap to nameStack
luixxiul May 5, 2022
a9c905e
Rename mx_InviteDialog_inviterErrorTile_error
luixxiul May 5, 2022
883c0d4
Create mx_InviteDialog_tile
luixxiul May 5, 2022
e9e7557
Set padding to room tiles only
luixxiul May 5, 2022
08252a7
Remove space between name / userID and time (there is gap by default)
luixxiul May 5, 2022
2fa0b7d
Remove the margin from the last child
luixxiul May 5, 2022
7c48c78
Merge branch 'develop' into InviteDialog
luixxiul May 8, 2022
ddafb8a
Merge branch 'develop' into InviteDialog
luixxiul May 16, 2022
20284a9
Merge branch 'develop' into InviteDialog
luixxiul May 18, 2022
4461eb7
Merge branch 'develop' into InviteDialog
luixxiul May 20, 2022
3cd4ea1
Merge branch 'develop' into InviteDialog
luixxiul May 22, 2022
54309a7
Merge branch 'develop' into InviteDialog
luixxiul May 26, 2022
a1fc67a
Merge branch 'develop' of https://github.com/matrix-org/matrix-react-…
luixxiul Jun 1, 2022
7993d05
Merge branch 'develop' into InviteDialog
luixxiul Jun 2, 2022
6f71924
Merge branch 'develop' into InviteDialog
luixxiul Jun 2, 2022
067c46b
Merge branch 'develop' into InviteDialog
luixxiul Jun 5, 2022
39cd89b
Merge branch 'develop' into InviteDialog
luixxiul Jun 7, 2022
11eee30
Merge branch 'develop' into InviteDialog
luixxiul Jun 9, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
237 changes: 119 additions & 118 deletions res/css/views/dialogs/_InviteDialog.scss
Original file line number Diff line number Diff line change
Expand Up @@ -146,94 +146,6 @@ limitations under the License.
}
}

.mx_InviteDialog_roomTile {
cursor: pointer;
padding: 5px 10px;

&:hover {
background-color: $header-panel-bg-color;
border-radius: 4px;
}

* {
vertical-align: middle;
}

.mx_InviteDialog_roomTile_avatarStack {
display: inline-block;
position: relative;
width: 36px;
height: 36px;

& > * {
position: absolute;
top: 0;
left: 0;
}
}

.mx_InviteDialog_roomTile_selected {
width: 36px;
height: 36px;
border-radius: 36px;
background-color: $username-variant1-color;
display: inline-block;
position: relative;

&::before {
content: "";
width: 24px;
height: 24px;
grid-column: 1;
grid-row: 1;
mask-image: url("$(res)/img/feather-customised/check.svg");
mask-size: 100%;
mask-repeat: no-repeat;
position: absolute;
top: 6px; // 50%
left: 6px; // 50%
background-color: #ffffff; // this is fine without a var because it's for both themes
}
}

.mx_InviteDialog_roomTile_nameStack {
display: inline-block;
overflow: hidden;
}

.mx_InviteDialog_roomTile_name {
font-weight: 600;
font-size: $font-14px;
color: $primary-content;
margin-left: 7px;
}

.mx_InviteDialog_roomTile_userId {
font-size: $font-12px;
color: $muted-fg-color;
margin-left: 7px;
}

.mx_InviteDialog_roomTile_name,
.mx_InviteDialog_roomTile_userId {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}

.mx_InviteDialog_roomTile_time {
text-align: right;
font-size: $font-12px;
color: $muted-fg-color;
float: right;
line-height: $font-36px; // Height of the avatar to keep the time vertically aligned
}

.mx_InviteDialog_roomTile_highlight {
font-weight: 900;
}
}

// Many of these styles are stolen from mx_UserPill, but adjusted for the invite dialog.
.mx_InviteDialog_userTile {
margin-right: 8px;
Expand Down Expand Up @@ -414,43 +326,132 @@ limitations under the License.
mask-image: url('$(res)/img/voip/tab-dialpad.svg');
}

.mx_InviteDialog_tile {
cursor: pointer;
display: grid;
gap: $spacing-8 $spacing-12;
align-items: center;

&.mx_InviteDialog_tile--room {
grid-template-columns: min-content auto auto; // mx_InviteDialog_tile_avatarStack, mx_InviteDialog_tile_nameStack, time
padding: $spacing-4 $spacing-8;

&:hover {
background-color: $header-panel-bg-color;
border-radius: 4px;
}

.mx_InviteDialog_tile--room_selected {
border-radius: 36px;
background-color: $username-variant1-color;

&::before {
content: "";
width: 24px;
height: 24px;
grid-column: 1;
grid-row: 1;
mask-image: url("$(res)/img/feather-customised/check.svg");
mask-size: 100%;
mask-repeat: no-repeat;
position: absolute;
top: 6px; // 50%
left: 6px; // 50%
background-color: #ffffff; // this is fine without a var because it's for both themes
}
}

.mx_InviteDialog_tile--room_time {
margin-inline-start: auto;
width: max-content;
font-size: $font-12px;
color: $muted-fg-color;
}

.mx_InviteDialog_tile--room_highlight {
font-weight: 900;
}
}

&.mx_InviteDialog_tile--inviterError {
grid-template-columns: max-content auto; // max-content = avatar width
margin-bottom: $spacing-24;

&:last-child {
margin-bottom: 0;
}

.mx_InviteDialog_tile--inviterError_errorText {
grid-row-start: 2;
grid-column-start: 2;

font-size: $font-15px;
color: $alert;
}
}

* {
vertical-align: middle;
}

.mx_InviteDialog_tile_avatarStack,
.mx_InviteDialog_tile--room_selected {
width: 36px;
height: 36px;
display: inline-block;
position: relative;
}

.mx_InviteDialog_tile_avatarStack {
grid-row-start: 1;
grid-column-start: 1;

& > * {
position: absolute;
top: 0;
left: 0;
}
}

.mx_InviteDialog_tile_nameStack {
grid-row-start: 1;
grid-column-start: 2;

display: flex;
flex-flow: column;
align-self: center;
align-items: baseline;
gap: 2px 0;
overflow: hidden;

.mx_InviteDialog_tile_nameStack_name,
.mx_InviteDialog_tile_nameStack_userId {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 100%;
}

.mx_InviteDialog_tile_nameStack_name {
font-size: $font-15px;
font-weight: $font-semi-bold;
color: $primary-content;
}

.mx_InviteDialog_tile_nameStack_userId {
font-size: $font-12px;
color: $muted-fg-color;
}
}
}

.mx_InviteDialog_multiInviterError {
> h4 {
font-size: $font-15px;
line-height: $font-24px;
color: $secondary-content;
font-weight: normal;
}

> div {
.mx_InviteDialog_multiInviterError_entry {
margin-bottom: 24px;

.mx_InviteDialog_multiInviterError_entry_userProfile {
.mx_InviteDialog_multiInviterError_entry_name {
margin-left: 6px;
font-size: $font-15px;
line-height: $font-24px;
font-weight: $font-semi-bold;
color: $primary-content;
}

.mx_InviteDialog_multiInviterError_entry_userId {
margin-left: 6px;
font-size: $font-12px;
line-height: $font-15px;
color: $tertiary-content;
}
}

.mx_InviteDialog_multiInviterError_entry_error {
margin-left: 32px;
font-size: $font-15px;
line-height: $font-24px;
color: $alert;
}
}
}
}

.mx_InviteDialog_identityServer {
Expand Down
16 changes: 9 additions & 7 deletions src/RoomInvite.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -153,19 +153,21 @@ export function showAnyInviteErrors(
const user = userMap?.get(addr) || cli.getUser(addr);
const name = (user as Member).name || (user as User).rawDisplayName;
const avatarUrl = (user as Member).getMxcAvatarUrl?.() || (user as User).avatarUrl;
return <div key={addr} className="mx_InviteDialog_multiInviterError_entry">
<div className="mx_InviteDialog_multiInviterError_entry_userProfile">
return <div key={addr} className="mx_InviteDialog_tile mx_InviteDialog_tile--inviterError">
<div className="mx_InviteDialog_tile_avatarStack">
<BaseAvatar
url={avatarUrl ? mediaFromMxc(avatarUrl).getSquareThumbnailHttp(24) : null}
name={name}
idName={user.userId}
width={24}
height={24}
width={36}
height={36}
/>
<span className="mx_InviteDialog_multiInviterError_entry_name">{ name }</span>
<span className="mx_InviteDialog_multiInviterError_entry_userId">{ user.userId }</span>
</div>
<div className="mx_InviteDialog_multiInviterError_entry_error">
<div className="mx_InviteDialog_tile_nameStack">
<span className="mx_InviteDialog_tile_nameStack_name">{ name }</span>
<span className="mx_InviteDialog_tile_nameStack_userId">{ user.userId }</span>
</div>
<div className="mx_InviteDialog_tile--inviterError_errorText">
{ inviter.getErrorText(addr) }
</div>
</div>;
Expand Down
16 changes: 8 additions & 8 deletions src/components/views/dialogs/InviteDialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ class DMRoomTile extends React.PureComponent<IDMRoomTileProps> {

// Highlight the word the user entered
const substr = str.substring(i, filterStr.length + i);
result.push(<span className='mx_InviteDialog_roomTile_highlight' key={i + 'bold'}>{ substr }</span>);
result.push(<span className='mx_InviteDialog_tile--room_highlight' key={i + 'bold'}>{ substr }</span>);
i += substr.length;
}

Expand All @@ -194,7 +194,7 @@ class DMRoomTile extends React.PureComponent<IDMRoomTileProps> {
let timestamp = null;
if (this.props.lastActiveTs) {
const humanTs = humanizeTime(this.props.lastActiveTs);
timestamp = <span className='mx_InviteDialog_roomTile_time'>{ humanTs }</span>;
timestamp = <span className='mx_InviteDialog_tile--room_time'>{ humanTs }</span>;
}

const avatarSize = 36;
Expand All @@ -216,13 +216,13 @@ class DMRoomTile extends React.PureComponent<IDMRoomTileProps> {
let checkmark = null;
if (this.props.isSelected) {
// To reduce flickering we put the 'selected' room tile above the real avatar
checkmark = <div className='mx_InviteDialog_roomTile_selected' />;
checkmark = <div className='mx_InviteDialog_tile--room_selected' />;
}

// To reduce flickering we put the checkmark on top of the actual avatar (prevents
// the browser from reloading the image source when the avatar remounts).
const stackedAvatar = (
<span className='mx_InviteDialog_roomTile_avatarStack'>
<span className='mx_InviteDialog_tile_avatarStack'>
{ avatar }
{ checkmark }
</span>
Expand All @@ -237,11 +237,11 @@ class DMRoomTile extends React.PureComponent<IDMRoomTileProps> {
: this.highlightName(userIdentifier);

return (
<div className='mx_InviteDialog_roomTile' onClick={this.onClick}>
<div className='mx_InviteDialog_tile mx_InviteDialog_tile--room' onClick={this.onClick}>
{ stackedAvatar }
<span className="mx_InviteDialog_roomTile_nameStack">
<div className='mx_InviteDialog_roomTile_name'>{ this.highlightName(this.props.member.name) }</div>
<div className='mx_InviteDialog_roomTile_userId'>{ caption }</div>
<span className="mx_InviteDialog_tile_nameStack">
<div className='mx_InviteDialog_tile_nameStack_name'>{ this.highlightName(this.props.member.name) }</div>
<div className='mx_InviteDialog_tile_nameStack_userId'>{ caption }</div>
</span>
{ timestamp }
</div>
Expand Down
2 changes: 1 addition & 1 deletion test/end-to-end-tests/src/usecases/create-room.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ export async function createDm(session: ElementSession, invitees: string[]): Pro
await session.replaceInputText(inviteesEditor, target);
await session.delay(1000); // give it a moment to figure out a suggestion
// find the suggestion and accept it
const suggestions = await session.queryAll('.mx_InviteDialog_roomTile_userId');
const suggestions = await session.queryAll('.mx_InviteDialog_tile_nameStack_userId');
const suggestionTexts = await Promise.all(suggestions.map(s => session.innerText(s)));
const suggestionIndex = suggestionTexts.indexOf(target);
if (suggestionIndex === -1) {
Expand Down
2 changes: 1 addition & 1 deletion test/end-to-end-tests/src/usecases/invite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ export async function invite(session: ElementSession, userId: string): Promise<v
await inviteButton.click();
const inviteTextArea = await session.query(".mx_InviteDialog_editor input");
await inviteTextArea.type(userId);
const selectUserItem = await session.query(".mx_InviteDialog_roomTile");
const selectUserItem = await session.query(".mx_InviteDialog_tile--room");
await selectUserItem.click();
const confirmButton = await session.query(".mx_InviteDialog_goButton");
await confirmButton.click();
Expand Down