Skip to content

Commit 5ad3261

Browse files
authored
Implement more meta-spaces (matrix-org#7077)
1 parent dadac38 commit 5ad3261

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+971
-354
lines changed

res/css/_components.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,7 @@
276276
@import "./views/settings/tabs/user/_NotificationUserSettingsTab.scss";
277277
@import "./views/settings/tabs/user/_PreferencesUserSettingsTab.scss";
278278
@import "./views/settings/tabs/user/_SecurityUserSettingsTab.scss";
279+
@import "./views/settings/tabs/user/_SidebarUserSettingsTab.scss";
279280
@import "./views/settings/tabs/user/_VoiceUserSettingsTab.scss";
280281
@import "./views/spaces/_SpaceBasicSettings.scss";
281282
@import "./views/spaces/_SpaceChildrenPicker.scss";

res/css/structures/_SpacePanel.scss

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -189,15 +189,35 @@ $activeBorderColor: $secondary-content;
189189
}
190190
}
191191

192-
&.mx_SpaceButton_home .mx_SpaceButton_icon {
193-
background-color: #ffffff;
194-
195-
&::before {
196-
background-color: #3f3d3d;
197-
mask-image: url('$(res)/img/element-icons/home.svg');
192+
&.mx_SpaceButton_home,
193+
&.mx_SpaceButton_favourites,
194+
&.mx_SpaceButton_people,
195+
&.mx_SpaceButton_orphans {
196+
.mx_SpaceButton_icon {
197+
background-color: #ffffff;
198+
199+
&::before {
200+
background-color: #3f3d3d;
201+
}
198202
}
199203
}
200204

205+
&.mx_SpaceButton_home .mx_SpaceButton_icon::before {
206+
mask-image: url('$(res)/img/element-icons/home.svg');
207+
}
208+
209+
&.mx_SpaceButton_favourites .mx_SpaceButton_icon::before {
210+
mask-image: url('$(res)/img/element-icons/roomlist/favorite.svg');
211+
}
212+
213+
&.mx_SpaceButton_people .mx_SpaceButton_icon::before {
214+
mask-image: url('$(res)/img/element-icons/room/members.svg');
215+
}
216+
217+
&.mx_SpaceButton_orphans .mx_SpaceButton_icon::before {
218+
mask-image: url('$(res)/img/element-icons/roomlist/hash-circle.svg');
219+
}
220+
201221
&.mx_SpaceButton_new .mx_SpaceButton_icon {
202222
background-color: $roomlist-button-bg-color;
203223

res/css/views/dialogs/_UserSettingsDialog.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ limitations under the License.
3737
mask-image: url('$(res)/img/element-icons/settings/preference.svg');
3838
}
3939

40+
.mx_UserSettingsDialog_sidebarIcon::before {
41+
mask-image: url('$(res)/img/element-icons/settings/sidebar.svg');
42+
}
43+
4044
.mx_UserSettingsDialog_securityIcon::before {
4145
mask-image: url('$(res)/img/element-icons/security.svg');
4246
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
/*
2+
Copyright 2021 The Matrix.org Foundation C.I.C.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
.mx_SidebarUserSettingsTab {
18+
.mx_SidebarUserSettingsTab_subheading {
19+
font-size: $font-15px;
20+
line-height: $font-24px;
21+
color: $primary-content;
22+
margin-bottom: 4px;
23+
}
24+
25+
.mx_Checkbox {
26+
margin-top: 12px;
27+
font-size: $font-15px;
28+
line-height: $font-24px;
29+
color: $secondary-content;
30+
}
31+
32+
.mx_SidebarUserSettingsTab_checkboxMicrocopy {
33+
margin-bottom: 12px;
34+
margin-left: 24px;
35+
font-size: $font-15px;
36+
line-height: $font-24px;
37+
color: $secondary-content;
38+
}
39+
40+
.mx_SidebarUserSettingsTab_homeAllRoomsCheckbox {
41+
margin-left: 24px;
42+
43+
& + div {
44+
margin-left: 48px;
45+
}
46+
}
47+
48+
.mx_SidebarUserSettingsTab_homeCheckbox,
49+
.mx_SidebarUserSettingsTab_favouritesCheckbox,
50+
.mx_SidebarUserSettingsTab_peopleCheckbox,
51+
.mx_SidebarUserSettingsTab_orphansCheckbox {
52+
.mx_Checkbox_background + div {
53+
padding-left: 20px;
54+
position: relative;
55+
56+
&::before {
57+
background-color: $secondary-content;
58+
content: "";
59+
mask-repeat: no-repeat;
60+
mask-position: center;
61+
mask-size: contain;
62+
width: 16px;
63+
height: 16px;
64+
position: absolute;
65+
left: 0;
66+
top: 50%;
67+
transform: translateY(-50%);
68+
}
69+
}
70+
}
71+
72+
.mx_SidebarUserSettingsTab_homeCheckbox .mx_Checkbox_background + div::before {
73+
mask-image: url('$(res)/img/element-icons/home.svg');
74+
}
75+
76+
.mx_SidebarUserSettingsTab_favouritesCheckbox .mx_Checkbox_background + div::before {
77+
mask-image: url('$(res)/img/element-icons/roomlist/favorite.svg');
78+
}
79+
80+
.mx_SidebarUserSettingsTab_peopleCheckbox .mx_Checkbox_background + div::before {
81+
mask-image: url('$(res)/img/element-icons/room/members.svg');
82+
}
83+
84+
.mx_SidebarUserSettingsTab_orphansCheckbox .mx_Checkbox_background + div::before {
85+
mask-image: url('$(res)/img/element-icons/roomlist/hash-circle.svg');
86+
}
87+
}
Lines changed: 7 additions & 0 deletions
Loading

src/@types/global.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import UserActivity from "../UserActivity";
4141
import { ModalWidgetStore } from "../stores/ModalWidgetStore";
4242
import { WidgetLayoutStore } from "../stores/widgets/WidgetLayoutStore";
4343
import VoipUserMapper from "../VoipUserMapper";
44-
import { SpaceStoreClass } from "../stores/SpaceStore";
44+
import { SpaceStoreClass } from "../stores/spaces/SpaceStore";
4545
import TypingStore from "../stores/TypingStore";
4646
import { EventIndexPeg } from "../indexing/EventIndexPeg";
4747
import { VoiceRecordingStore } from "../stores/VoiceRecordingStore";

src/Avatar.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { split } from "lodash";
2222

2323
import DMRoomMap from './utils/DMRoomMap';
2424
import { mediaFromMxc } from "./customisations/Media";
25-
import SpaceStore from "./stores/SpaceStore";
25+
import SpaceStore from "./stores/spaces/SpaceStore";
2626

2727
// Not to be used for BaseAvatar urls as that has similar default avatar fallback already
2828
export function avatarUrlForMember(

src/autocomplete/Autocompleter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import NotifProvider from './NotifProvider';
2727
import { timeout } from "../utils/promise";
2828
import AutocompleteProvider, { ICommand } from "./AutocompleteProvider";
2929
import SpaceProvider from "./SpaceProvider";
30-
import SpaceStore from "../stores/SpaceStore";
30+
import SpaceStore from "../stores/spaces/SpaceStore";
3131

3232
export interface ISelectionRange {
3333
beginning?: boolean; // whether the selection is in the first block of the editor or not

src/autocomplete/RoomProvider.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import { PillCompletion } from './Components';
2828
import { makeRoomPermalink } from "../utils/permalinks/Permalinks";
2929
import { ICompletion, ISelectionRange } from "./Autocompleter";
3030
import RoomAvatar from '../components/views/avatars/RoomAvatar';
31-
import SpaceStore from "../stores/SpaceStore";
31+
import SpaceStore from "../stores/spaces/SpaceStore";
3232

3333
const ROOM_REGEX = /\B#\S*/g;
3434

src/components/structures/LeftPanel.tsx

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ limitations under the License.
1717
import * as React from "react";
1818
import { createRef } from "react";
1919
import classNames from "classnames";
20-
import { Room } from "matrix-js-sdk/src/models/room";
2120

2221
import dis from "../../dispatcher/dispatcher";
2322
import { _t } from "../../languageHandler";
@@ -37,10 +36,12 @@ import AccessibleTooltipButton from "../views/elements/AccessibleTooltipButton";
3736
import RoomListNumResults from "../views/rooms/RoomListNumResults";
3837
import LeftPanelWidget from "./LeftPanelWidget";
3938
import { replaceableComponent } from "../../utils/replaceableComponent";
40-
import SpaceStore, { UPDATE_SELECTED_SPACE } from "../../stores/SpaceStore";
39+
import SpaceStore from "../../stores/spaces/SpaceStore";
40+
import { SpaceKey, UPDATE_SELECTED_SPACE } from "../../stores/spaces";
4141
import { getKeyBindingsManager, RoomListAction } from "../../KeyBindingsManager";
4242
import UIStore from "../../stores/UIStore";
4343
import { findSiblingElement, IState as IRovingTabIndexState } from "../../accessibility/RovingTabIndex";
44+
import MatrixClientContext from "../../contexts/MatrixClientContext";
4445

4546
interface IProps {
4647
isMinimized: boolean;
@@ -49,7 +50,7 @@ interface IProps {
4950

5051
interface IState {
5152
showBreadcrumbs: boolean;
52-
activeSpace?: Room;
53+
activeSpace: SpaceKey;
5354
}
5455

5556
@replaceableComponent("structures.LeftPanel")
@@ -61,6 +62,9 @@ export default class LeftPanel extends React.Component<IProps, IState> {
6162
private focusedElement = null;
6263
private isDoingStickyHeaders = false;
6364

65+
static contextType = MatrixClientContext;
66+
public context!: React.ContextType<typeof MatrixClientContext>;
67+
6468
constructor(props: IProps) {
6569
super(props);
6670

@@ -98,7 +102,7 @@ export default class LeftPanel extends React.Component<IProps, IState> {
98102
}
99103
}
100104

101-
private updateActiveSpace = (activeSpace: Room) => {
105+
private updateActiveSpace = (activeSpace: SpaceKey) => {
102106
this.setState({ activeSpace });
103107
};
104108

@@ -343,6 +347,7 @@ export default class LeftPanel extends React.Component<IProps, IState> {
343347
/>;
344348
}
345349

350+
const space = this.state.activeSpace[0] === "!" ? this.context.getRoom(this.state.activeSpace) : null;
346351
return (
347352
<div
348353
className="mx_LeftPanel_filterContainer"
@@ -363,9 +368,7 @@ export default class LeftPanel extends React.Component<IProps, IState> {
363368
mx_LeftPanel_exploreButton_space: !!this.state.activeSpace,
364369
})}
365370
onClick={this.onExplore}
366-
title={this.state.activeSpace
367-
? _t("Explore %(spaceName)s", { spaceName: this.state.activeSpace.name })
368-
: _t("Explore rooms")}
371+
title={space ? _t("Explore %(spaceName)s", { spaceName: space.name }) : _t("Explore rooms")}
369372
/>
370373
</div>
371374
);

0 commit comments

Comments
 (0)