Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit 5ad3261

Browse files
authored
Implement more meta-spaces (#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

Diff for: res/css/_components.scss

+1
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";

Diff for: res/css/structures/_SpacePanel.scss

+26-6
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

Diff for: res/css/views/dialogs/_UserSettingsDialog.scss

+4
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
}
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+
}

Diff for: res/img/element-icons/settings/sidebar.svg

+7
Loading

Diff for: src/@types/global.d.ts

+1-1
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";

Diff for: src/Avatar.ts

+1-1
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(

Diff for: src/autocomplete/Autocompleter.ts

+1-1
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

Diff for: src/autocomplete/RoomProvider.tsx

+1-1
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

Diff for: src/components/structures/LeftPanel.tsx

+10-7
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
);

Diff for: src/components/structures/LoggedInView.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ import MyGroups from "./MyGroups";
6464
import UserView from "./UserView";
6565
import GroupView from "./GroupView";
6666
import BackdropPanel from "./BackdropPanel";
67-
import SpaceStore from "../../stores/SpaceStore";
67+
import SpaceStore from "../../stores/spaces/SpaceStore";
6868
import classNames from 'classnames';
6969
import GroupFilterPanel from './GroupFilterPanel';
7070
import CustomRoomTagPanel from './CustomRoomTagPanel';

Diff for: src/components/structures/MatrixChat.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ import { CommunityPrototypeStore } from "../../stores/CommunityPrototypeStore";
7878
import DialPadModal from "../views/voip/DialPadModal";
7979
import { showToast as showMobileGuideToast } from '../../toasts/MobileGuideToast';
8080
import { shouldUseLoginForWelcome } from "../../utils/pages";
81-
import SpaceStore from "../../stores/SpaceStore";
81+
import SpaceStore from "../../stores/spaces/SpaceStore";
8282
import { replaceableComponent } from "../../utils/replaceableComponent";
8383
import RoomListStore from "../../stores/room-list/RoomListStore";
8484
import { RoomUpdateCause } from "../../stores/room-list/models";
@@ -712,10 +712,10 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
712712
break;
713713
}
714714
case Action.ViewRoomDirectory: {
715-
if (SpaceStore.instance.activeSpace) {
715+
if (SpaceStore.instance.activeSpace[0] === "!") {
716716
defaultDispatcher.dispatch({
717717
action: "view_room",
718-
room_id: SpaceStore.instance.activeSpace.roomId,
718+
room_id: SpaceStore.instance.activeSpace,
719719
});
720720
} else {
721721
Modal.createTrackedDialog('Room directory', '', RoomDirectory, {

Diff for: src/components/structures/RightPanel.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ import NotificationPanel from "./NotificationPanel";
5050
import ResizeNotifier from "../../utils/ResizeNotifier";
5151
import PinnedMessagesCard from "../views/right_panel/PinnedMessagesCard";
5252
import { throttle } from 'lodash';
53-
import SpaceStore from "../../stores/SpaceStore";
53+
import SpaceStore from "../../stores/spaces/SpaceStore";
5454
import { RoomPermalinkCreator } from '../../utils/permalinks/Permalinks';
5555
import { E2EStatus } from '../../utils/ShieldUtils';
5656
import { dispatchShowThreadsPanelEvent } from '../../dispatcher/dispatch-actions/threads';

Diff for: src/components/structures/RoomSearch.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ import RoomListStore from "../../stores/room-list/RoomListStore";
2828
import { NameFilterCondition } from "../../stores/room-list/filters/NameFilterCondition";
2929
import { getKeyBindingsManager, RoomListAction } from "../../KeyBindingsManager";
3030
import { replaceableComponent } from "../../utils/replaceableComponent";
31-
import SpaceStore, { UPDATE_SELECTED_SPACE, UPDATE_TOP_LEVEL_SPACES } from "../../stores/SpaceStore";
31+
import SpaceStore from "../../stores/spaces/SpaceStore";
32+
import { UPDATE_SELECTED_SPACE, UPDATE_TOP_LEVEL_SPACES } from "../../stores/spaces";
3233

3334
interface IProps {
3435
isMinimized: boolean;

Diff for: src/components/structures/RoomView.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ import RoomStatusBar from "./RoomStatusBar";
8888
import MessageComposer from '../views/rooms/MessageComposer';
8989
import JumpToBottomButton from "../views/rooms/JumpToBottomButton";
9090
import TopUnreadMessagesBar from "../views/rooms/TopUnreadMessagesBar";
91-
import SpaceStore from "../../stores/SpaceStore";
91+
import SpaceStore from "../../stores/spaces/SpaceStore";
9292

9393
import { logger } from "matrix-js-sdk/src/logger";
9494
import { EventTimeline } from 'matrix-js-sdk/src/models/event-timeline';

Diff for: src/components/structures/SpaceHierarchy.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ import { mediaFromMxc } from "../../customisations/Media";
4949
import InfoTooltip from "../views/elements/InfoTooltip";
5050
import TextWithTooltip from "../views/elements/TextWithTooltip";
5151
import { useStateToggle } from "../../hooks/useStateToggle";
52-
import { getChildOrder } from "../../stores/SpaceStore";
52+
import { getChildOrder } from "../../stores/spaces/SpaceStore";
5353
import AccessibleTooltipButton from "../views/elements/AccessibleTooltipButton";
5454
import { linkifyElement } from "../../HtmlUtils";
5555
import { useDispatcher } from "../../hooks/useDispatcher";

Diff for: src/components/structures/SpaceRoomView.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ import {
5757
} from "../../utils/space";
5858
import SpaceHierarchy, { joinRoom, showRoom } from "./SpaceHierarchy";
5959
import MemberAvatar from "../views/avatars/MemberAvatar";
60-
import SpaceStore from "../../stores/SpaceStore";
60+
import SpaceStore from "../../stores/spaces/SpaceStore";
6161
import FacePile from "../views/elements/FacePile";
6262
import {
6363
AddExistingToSpace,

Diff for: src/components/structures/UserMenu.tsx

+7-3
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ import EditCommunityPrototypeDialog from "../views/dialogs/EditCommunityPrototyp
5454
import { UIFeature } from "../../settings/UIFeature";
5555
import HostSignupAction from "./HostSignupAction";
5656
import { IHostSignupConfig } from "../views/dialogs/HostSignupDialogTypes";
57-
import SpaceStore, { UPDATE_SELECTED_SPACE } from "../../stores/SpaceStore";
57+
import SpaceStore from "../../stores/spaces/SpaceStore";
58+
import { UPDATE_SELECTED_SPACE } from "../../stores/spaces";
5859
import RoomName from "../views/elements/RoomName";
5960
import { replaceableComponent } from "../../utils/replaceableComponent";
6061
import InlineSpinner from "../views/elements/InlineSpinner";
@@ -90,6 +91,7 @@ export default class UserMenu extends React.Component<IProps, IState> {
9091
isDarkTheme: this.isUserOnDarkTheme(),
9192
isHighContrast: this.isUserOnHighContrastTheme(),
9293
pendingRoomJoin: new Set<string>(),
94+
selectedSpace: SpaceStore.instance.activeSpaceRoom,
9395
};
9496

9597
OwnProfileStore.instance.on(UPDATE_EVENT, this.onProfileUpdate);
@@ -162,8 +164,10 @@ export default class UserMenu extends React.Component<IProps, IState> {
162164
this.forceUpdate();
163165
};
164166

165-
private onSelectedSpaceUpdate = async (selectedSpace?: Room) => {
166-
this.setState({ selectedSpace });
167+
private onSelectedSpaceUpdate = async () => {
168+
this.setState({
169+
selectedSpace: SpaceStore.instance.activeSpaceRoom,
170+
});
167171
};
168172

169173
private onThemeChanged = () => {

Diff for: src/components/views/dialogs/AddExistingToSpaceDialog.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import { _t } from '../../../languageHandler';
2424
import BaseDialog from "./BaseDialog";
2525
import Dropdown from "../elements/Dropdown";
2626
import SearchBox from "../../structures/SearchBox";
27-
import SpaceStore from "../../../stores/SpaceStore";
27+
import SpaceStore from "../../../stores/spaces/SpaceStore";
2828
import RoomAvatar from "../avatars/RoomAvatar";
2929
import { getDisplayAliasForRoom } from "../../../Rooms";
3030
import AccessibleButton from "../elements/AccessibleButton";

Diff for: src/components/views/dialogs/ConfirmSpaceUserActionDialog.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ limitations under the License.
1717
import React, { ComponentProps, useMemo, useState } from 'react';
1818

1919
import ConfirmUserActionDialog from "./ConfirmUserActionDialog";
20-
import SpaceStore from "../../../stores/SpaceStore";
20+
import SpaceStore from "../../../stores/spaces/SpaceStore";
2121
import { Room } from "matrix-js-sdk/src/models/room";
2222
import SpaceChildrenPicker from "../spaces/SpaceChildrenPicker";
2323

Diff for: src/components/views/dialogs/CreateRoomDialog.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import RoomAliasField from "../elements/RoomAliasField";
3232
import LabelledToggleSwitch from "../elements/LabelledToggleSwitch";
3333
import DialogButtons from "../elements/DialogButtons";
3434
import BaseDialog from "../dialogs/BaseDialog";
35-
import SpaceStore from "../../../stores/SpaceStore";
35+
import SpaceStore from "../../../stores/spaces/SpaceStore";
3636
import JoinRuleDropdown from "../elements/JoinRuleDropdown";
3737

3838
interface IProps {

0 commit comments

Comments
 (0)