Add skeleton UI for Room List when no rooms
This commit is contained in:
parent
294876f062
commit
fa9490b02b
8 changed files with 34 additions and 0 deletions
|
@ -383,3 +383,22 @@ limitations under the License.
|
||||||
.mx_RoomSublist_addRoomTooltip {
|
.mx_RoomSublist_addRoomTooltip {
|
||||||
margin-top: -3px;
|
margin-top: -3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_RoomSublist_skeletonUI {
|
||||||
|
position: relative;
|
||||||
|
margin-left: 4px;
|
||||||
|
height: 288px;
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
background: $roomsublist-skeleton-ui-bg;
|
||||||
|
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
mask-repeat: repeat-y;
|
||||||
|
mask-size: auto 48px;
|
||||||
|
mask-image: url('$(res)/img/element-icons/roomlist/skeleton-ui.svg');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
5
res/img/element-icons/roomlist/skeleton-ui.svg
Normal file
5
res/img/element-icons/roomlist/skeleton-ui.svg
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<svg width="228" height="48" viewBox="0 0 228 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<circle cx="16" cy="16" r="16" fill="#D4D4D4"/>
|
||||||
|
<rect x="39" width="189" height="12" rx="6" fill="#D4D4D4"/>
|
||||||
|
<rect x="39" y="20" width="143" height="12" rx="6" fill="#D4D4D4"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 282 B |
|
@ -117,6 +117,7 @@ $roomlist-filter-active-bg-color: $bg-color;
|
||||||
$roomlist-bg-color: rgba(33, 38, 44, 0.90);
|
$roomlist-bg-color: rgba(33, 38, 44, 0.90);
|
||||||
$roomlist-header-color: $tertiary-fg-color;
|
$roomlist-header-color: $tertiary-fg-color;
|
||||||
$roomsublist-divider-color: $primary-fg-color;
|
$roomsublist-divider-color: $primary-fg-color;
|
||||||
|
$roomsublist-skeleton-ui-bg: linear-gradient(180deg, #3e444c 0%, #3e444c00 100%);
|
||||||
|
|
||||||
$groupFilterPanel-divider-color: $roomlist-header-color;
|
$groupFilterPanel-divider-color: $roomlist-header-color;
|
||||||
|
|
||||||
|
|
|
@ -114,6 +114,7 @@ $roomlist-filter-active-bg-color: $roomlist-button-bg-color;
|
||||||
$roomlist-bg-color: $header-panel-bg-color;
|
$roomlist-bg-color: $header-panel-bg-color;
|
||||||
|
|
||||||
$roomsublist-divider-color: $primary-fg-color;
|
$roomsublist-divider-color: $primary-fg-color;
|
||||||
|
$roomsublist-skeleton-ui-bg: linear-gradient(180deg, #3e444c 0%, #3e444c00 100%);
|
||||||
|
|
||||||
$groupFilterPanel-divider-color: $roomlist-header-color;
|
$groupFilterPanel-divider-color: $roomlist-header-color;
|
||||||
|
|
||||||
|
|
|
@ -181,6 +181,7 @@ $roomlist-filter-active-bg-color: $roomlist-button-bg-color;
|
||||||
$roomlist-bg-color: $header-panel-bg-color;
|
$roomlist-bg-color: $header-panel-bg-color;
|
||||||
$roomlist-header-color: $primary-fg-color;
|
$roomlist-header-color: $primary-fg-color;
|
||||||
$roomsublist-divider-color: $primary-fg-color;
|
$roomsublist-divider-color: $primary-fg-color;
|
||||||
|
$roomsublist-skeleton-ui-bg: linear-gradient(180deg, #ffffff 0%, #ffffff00 100%);
|
||||||
|
|
||||||
$groupFilterPanel-divider-color: $roomlist-header-color;
|
$groupFilterPanel-divider-color: $roomlist-header-color;
|
||||||
|
|
||||||
|
|
|
@ -175,6 +175,7 @@ $roomlist-filter-active-bg-color: #ffffff;
|
||||||
$roomlist-bg-color: rgba(245, 245, 245, 0.90);
|
$roomlist-bg-color: rgba(245, 245, 245, 0.90);
|
||||||
$roomlist-header-color: $tertiary-fg-color;
|
$roomlist-header-color: $tertiary-fg-color;
|
||||||
$roomsublist-divider-color: $primary-fg-color;
|
$roomsublist-divider-color: $primary-fg-color;
|
||||||
|
$roomsublist-skeleton-ui-bg: linear-gradient(180deg, #ffffff 0%, #ffffff00 100%);
|
||||||
|
|
||||||
$groupFilterPanel-divider-color: $roomlist-header-color;
|
$groupFilterPanel-divider-color: $roomlist-header-color;
|
||||||
|
|
||||||
|
|
|
@ -332,6 +332,8 @@ export default class RoomList extends React.PureComponent<IProps, IState> {
|
||||||
return p;
|
return p;
|
||||||
}, [] as TagID[]);
|
}, [] as TagID[]);
|
||||||
|
|
||||||
|
const showSkeleton = tagOrder.every(tag => !this.state.sublists[tag]?.length);
|
||||||
|
|
||||||
for (const orderedTagId of tagOrder) {
|
for (const orderedTagId of tagOrder) {
|
||||||
const orderedRooms = this.state.sublists[orderedTagId] || [];
|
const orderedRooms = this.state.sublists[orderedTagId] || [];
|
||||||
const extraTiles = orderedTagId === DefaultTagID.Invite ? this.renderCommunityInvites() : null;
|
const extraTiles = orderedTagId === DefaultTagID.Invite ? this.renderCommunityInvites() : null;
|
||||||
|
@ -356,6 +358,7 @@ export default class RoomList extends React.PureComponent<IProps, IState> {
|
||||||
addRoomContextMenu={aesthetics.addRoomContextMenu}
|
addRoomContextMenu={aesthetics.addRoomContextMenu}
|
||||||
isMinimized={this.props.isMinimized}
|
isMinimized={this.props.isMinimized}
|
||||||
onResize={this.props.onResize}
|
onResize={this.props.onResize}
|
||||||
|
showSkeleton={showSkeleton}
|
||||||
extraBadTilesThatShouldntExist={extraTiles}
|
extraBadTilesThatShouldntExist={extraTiles}
|
||||||
/>);
|
/>);
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,6 +71,7 @@ interface IProps {
|
||||||
isMinimized: boolean;
|
isMinimized: boolean;
|
||||||
tagId: TagID;
|
tagId: TagID;
|
||||||
onResize: () => void;
|
onResize: () => void;
|
||||||
|
showSkeleton?: boolean;
|
||||||
|
|
||||||
// TODO: Don't use this. It's for community invites, and community invites shouldn't be here.
|
// TODO: Don't use this. It's for community invites, and community invites shouldn't be here.
|
||||||
// You should feel bad if you use this.
|
// You should feel bad if you use this.
|
||||||
|
@ -877,6 +878,8 @@ export default class RoomSublist extends React.Component<IProps, IState> {
|
||||||
</Resizable>
|
</Resizable>
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
);
|
);
|
||||||
|
} else if (this.props.showSkeleton && this.state.isExpanded) {
|
||||||
|
content = <div className="mx_RoomSublist_skeletonUI" />;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
Loading…
Reference in a new issue