Run all selected prototype community logic through one store
This commit is contained in:
parent
93d67a6689
commit
724e3f6905
8 changed files with 31 additions and 30 deletions
|
@ -218,7 +218,7 @@ export default class UserMenu extends React.Component<IProps, IState> {
|
||||||
// way the right panel is structured makes this exceedingly difficult. Instead, we'll
|
// way the right panel is structured makes this exceedingly difficult. Instead, we'll
|
||||||
// switch to the general room and open the member list there as it should be in sync
|
// switch to the general room and open the member list there as it should be in sync
|
||||||
// anyways.
|
// anyways.
|
||||||
const chat = CommunityPrototypeStore.instance.getGeneralChat(TagOrderStore.getSelectedPrototypeTag());
|
const chat = CommunityPrototypeStore.instance.getSelectedCommunityGeneralChat();
|
||||||
if (chat) {
|
if (chat) {
|
||||||
dis.dispatch({
|
dis.dispatch({
|
||||||
action: 'view_room',
|
action: 'view_room',
|
||||||
|
@ -239,7 +239,7 @@ export default class UserMenu extends React.Component<IProps, IState> {
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
ev.stopPropagation();
|
ev.stopPropagation();
|
||||||
|
|
||||||
showCommunityInviteDialog(TagOrderStore.getSelectedPrototypeTag());
|
showCommunityInviteDialog(CommunityPrototypeStore.instance.getSelectedCommunityId());
|
||||||
this.setState({contextMenuPosition: null}); // also close the menu
|
this.setState({contextMenuPosition: null}); // also close the menu
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,6 @@ import { _t } from '../../../languageHandler';
|
||||||
import {MatrixClientPeg} from '../../../MatrixClientPeg';
|
import {MatrixClientPeg} from '../../../MatrixClientPeg';
|
||||||
import {Key} from "../../../Keyboard";
|
import {Key} from "../../../Keyboard";
|
||||||
import {privateShouldBeEncrypted} from "../../../createRoom";
|
import {privateShouldBeEncrypted} from "../../../createRoom";
|
||||||
import TagOrderStore from "../../../stores/TagOrderStore";
|
|
||||||
import {CommunityPrototypeStore} from "../../../stores/CommunityPrototypeStore";
|
import {CommunityPrototypeStore} from "../../../stores/CommunityPrototypeStore";
|
||||||
|
|
||||||
export default createReactClass({
|
export default createReactClass({
|
||||||
|
@ -72,8 +71,8 @@ export default createReactClass({
|
||||||
opts.encryption = this.state.isEncrypted;
|
opts.encryption = this.state.isEncrypted;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TagOrderStore.getSelectedPrototypeTag()) {
|
if (CommunityPrototypeStore.instance.getSelectedCommunityId()) {
|
||||||
opts.associatedWithCommunity = TagOrderStore.getSelectedPrototypeTag();
|
opts.associatedWithCommunity = CommunityPrototypeStore.instance.getSelectedCommunityId();
|
||||||
}
|
}
|
||||||
|
|
||||||
return opts;
|
return opts;
|
||||||
|
@ -198,7 +197,7 @@ export default createReactClass({
|
||||||
"Private rooms can be found and joined by invitation only. Public rooms can be " +
|
"Private rooms can be found and joined by invitation only. Public rooms can be " +
|
||||||
"found and joined by anyone.",
|
"found and joined by anyone.",
|
||||||
)}</p>;
|
)}</p>;
|
||||||
if (TagOrderStore.getSelectedPrototypeTag()) {
|
if (CommunityPrototypeStore.instance.getSelectedCommunityId()) {
|
||||||
publicPrivateLabel = <p>{_t(
|
publicPrivateLabel = <p>{_t(
|
||||||
"Private rooms can be found and joined by invitation only. Public rooms can be " +
|
"Private rooms can be found and joined by invitation only. Public rooms can be " +
|
||||||
"found and joined by anyone in this community.",
|
"found and joined by anyone in this community.",
|
||||||
|
@ -239,7 +238,7 @@ export default createReactClass({
|
||||||
}
|
}
|
||||||
|
|
||||||
let title = this.state.isPublic ? _t('Create a public room') : _t('Create a private room');
|
let title = this.state.isPublic ? _t('Create a public room') : _t('Create a private room');
|
||||||
if (TagOrderStore.getSelectedPrototypeTag()) {
|
if (CommunityPrototypeStore.instance.getSelectedCommunityId()) {
|
||||||
const name = CommunityPrototypeStore.instance.getSelectedCommunityName();
|
const name = CommunityPrototypeStore.instance.getSelectedCommunityName();
|
||||||
title = _t("Create a room in %(communityName)s", {communityName: name});
|
title = _t("Create a room in %(communityName)s", {communityName: name});
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,6 @@ import {Key} from "../../../Keyboard";
|
||||||
import {Action} from "../../../dispatcher/actions";
|
import {Action} from "../../../dispatcher/actions";
|
||||||
import {DefaultTagID} from "../../../stores/room-list/models";
|
import {DefaultTagID} from "../../../stores/room-list/models";
|
||||||
import RoomListStore from "../../../stores/room-list/RoomListStore";
|
import RoomListStore from "../../../stores/room-list/RoomListStore";
|
||||||
import TagOrderStore from "../../../stores/TagOrderStore";
|
|
||||||
import {CommunityPrototypeStore} from "../../../stores/CommunityPrototypeStore";
|
import {CommunityPrototypeStore} from "../../../stores/CommunityPrototypeStore";
|
||||||
|
|
||||||
// we have a number of types defined from the Matrix spec which can't reasonably be altered here.
|
// we have a number of types defined from the Matrix spec which can't reasonably be altered here.
|
||||||
|
@ -913,7 +912,7 @@ export default class InviteDialog extends React.PureComponent {
|
||||||
|
|
||||||
_onCommunityInviteClick = (e) => {
|
_onCommunityInviteClick = (e) => {
|
||||||
this.props.onFinished();
|
this.props.onFinished();
|
||||||
showCommunityInviteDialog(TagOrderStore.getSelectedPrototypeTag());
|
showCommunityInviteDialog(CommunityPrototypeStore.instance.getSelectedCommunityId());
|
||||||
};
|
};
|
||||||
|
|
||||||
_renderSection(kind: "recents"|"suggestions") {
|
_renderSection(kind: "recents"|"suggestions") {
|
||||||
|
@ -924,8 +923,8 @@ export default class InviteDialog extends React.PureComponent {
|
||||||
let sectionName = kind === 'recents' ? _t("Recent Conversations") : _t("Suggestions");
|
let sectionName = kind === 'recents' ? _t("Recent Conversations") : _t("Suggestions");
|
||||||
let sectionSubname = null;
|
let sectionSubname = null;
|
||||||
|
|
||||||
if (kind === 'suggestions' && TagOrderStore.getSelectedPrototypeTag()) {
|
if (kind === 'suggestions' && CommunityPrototypeStore.instance.getSelectedCommunityId()) {
|
||||||
const communityName = CommunityPrototypeStore.instance.getCommunityName(TagOrderStore.getSelectedPrototypeTag());
|
const communityName = CommunityPrototypeStore.instance.getSelectedCommunityName();
|
||||||
sectionSubname = _t("May include members not in %(communityName)s", {communityName});
|
sectionSubname = _t("May include members not in %(communityName)s", {communityName});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1097,7 +1096,7 @@ export default class InviteDialog extends React.PureComponent {
|
||||||
return <a href={makeUserPermalink(userId)} rel="noreferrer noopener" target="_blank">{userId}</a>;
|
return <a href={makeUserPermalink(userId)} rel="noreferrer noopener" target="_blank">{userId}</a>;
|
||||||
}},
|
}},
|
||||||
);
|
);
|
||||||
if (TagOrderStore.getSelectedPrototypeTag()) {
|
if (CommunityPrototypeStore.instance.getSelectedCommunityId()) {
|
||||||
const communityName = CommunityPrototypeStore.instance.getSelectedCommunityName();
|
const communityName = CommunityPrototypeStore.instance.getSelectedCommunityName();
|
||||||
helpText = _t(
|
helpText = _t(
|
||||||
"Start a conversation with someone using their name, username (like <userId/>) or email address. " +
|
"Start a conversation with someone using their name, username (like <userId/>) or email address. " +
|
||||||
|
|
|
@ -27,7 +27,6 @@ import rate_limited_func from "../../../ratelimitedfunc";
|
||||||
import {MatrixClientPeg} from "../../../MatrixClientPeg";
|
import {MatrixClientPeg} from "../../../MatrixClientPeg";
|
||||||
import * as sdk from "../../../index";
|
import * as sdk from "../../../index";
|
||||||
import CallHandler from "../../../CallHandler";
|
import CallHandler from "../../../CallHandler";
|
||||||
import TagOrderStore from "../../../stores/TagOrderStore";
|
|
||||||
import {CommunityPrototypeStore} from "../../../stores/CommunityPrototypeStore";
|
import {CommunityPrototypeStore} from "../../../stores/CommunityPrototypeStore";
|
||||||
|
|
||||||
const INITIAL_LOAD_NUM_MEMBERS = 30;
|
const INITIAL_LOAD_NUM_MEMBERS = 30;
|
||||||
|
@ -467,13 +466,10 @@ export default createReactClass({
|
||||||
}
|
}
|
||||||
|
|
||||||
let inviteButtonText = _t("Invite to this room");
|
let inviteButtonText = _t("Invite to this room");
|
||||||
const communityId = TagOrderStore.getSelectedPrototypeTag();
|
const chat = CommunityPrototypeStore.instance.getSelectedCommunityGeneralChat();
|
||||||
if (communityId) {
|
|
||||||
const chat = CommunityPrototypeStore.instance.getGeneralChat(communityId);
|
|
||||||
if (chat && chat.roomId === this.props.roomId) {
|
if (chat && chat.roomId === this.props.roomId) {
|
||||||
inviteButtonText = _t("Invite to this community");
|
inviteButtonText = _t("Invite to this community");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
const AccessibleButton = sdk.getComponent("elements.AccessibleButton");
|
const AccessibleButton = sdk.getComponent("elements.AccessibleButton");
|
||||||
inviteButton =
|
inviteButton =
|
||||||
|
|
|
@ -45,7 +45,7 @@ import { arrayFastClone, arrayHasDiff } from "../../../utils/arrays";
|
||||||
import { objectShallowClone, objectWithOnly } from "../../../utils/objects";
|
import { objectShallowClone, objectWithOnly } from "../../../utils/objects";
|
||||||
import { IconizedContextMenuOption, IconizedContextMenuOptionList } from "../context_menus/IconizedContextMenu";
|
import { IconizedContextMenuOption, IconizedContextMenuOptionList } from "../context_menus/IconizedContextMenu";
|
||||||
import AccessibleButton from "../elements/AccessibleButton";
|
import AccessibleButton from "../elements/AccessibleButton";
|
||||||
import TagOrderStore from "../../../stores/TagOrderStore";
|
import { CommunityPrototypeStore } from "../../../stores/CommunityPrototypeStore";
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
onKeyDown: (ev: React.KeyboardEvent) => void;
|
onKeyDown: (ev: React.KeyboardEvent) => void;
|
||||||
|
@ -130,7 +130,7 @@ const TAG_AESTHETICS: {
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<IconizedContextMenuOption
|
<IconizedContextMenuOption
|
||||||
label={TagOrderStore.getSelectedPrototypeTag()
|
label={CommunityPrototypeStore.instance.getSelectedCommunityId()
|
||||||
? _t("Explore community rooms")
|
? _t("Explore community rooms")
|
||||||
: _t("Explore public rooms")}
|
: _t("Explore public rooms")}
|
||||||
iconClassName="mx_RoomList_iconExplore"
|
iconClassName="mx_RoomList_iconExplore"
|
||||||
|
|
|
@ -1062,6 +1062,7 @@
|
||||||
"and %(count)s others...|other": "and %(count)s others...",
|
"and %(count)s others...|other": "and %(count)s others...",
|
||||||
"and %(count)s others...|one": "and one other...",
|
"and %(count)s others...|one": "and one other...",
|
||||||
"Invite to this room": "Invite to this room",
|
"Invite to this room": "Invite to this room",
|
||||||
|
"Invite to this community": "Invite to this community",
|
||||||
"Invited": "Invited",
|
"Invited": "Invited",
|
||||||
"Filter room members": "Filter room members",
|
"Filter room members": "Filter room members",
|
||||||
"%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (power %(powerLevelNumber)s)",
|
"%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (power %(powerLevelNumber)s)",
|
||||||
|
@ -1424,7 +1425,6 @@
|
||||||
"Submit logs": "Submit logs",
|
"Submit logs": "Submit logs",
|
||||||
"Failed to load group members": "Failed to load group members",
|
"Failed to load group members": "Failed to load group members",
|
||||||
"Filter community members": "Filter community members",
|
"Filter community members": "Filter community members",
|
||||||
"Invite to this community": "Invite to this community",
|
|
||||||
"Are you sure you want to remove '%(roomName)s' from %(groupId)s?": "Are you sure you want to remove '%(roomName)s' from %(groupId)s?",
|
"Are you sure you want to remove '%(roomName)s' from %(groupId)s?": "Are you sure you want to remove '%(roomName)s' from %(groupId)s?",
|
||||||
"Removing a room from the community will also remove it from the community page.": "Removing a room from the community will also remove it from the community page.",
|
"Removing a room from the community will also remove it from the community page.": "Removing a room from the community will also remove it from the community page.",
|
||||||
"Failed to remove room from community": "Failed to remove room from community",
|
"Failed to remove room from community": "Failed to remove room from community",
|
||||||
|
|
|
@ -47,8 +47,22 @@ export class CommunityPrototypeStore extends AsyncStoreWithClient<IState> {
|
||||||
return CommunityPrototypeStore.internalInstance;
|
return CommunityPrototypeStore.internalInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public getSelectedCommunityId(): string {
|
||||||
|
if (SettingsStore.getValue("feature_communities_v2_prototypes")) {
|
||||||
|
return TagOrderStore.getSelectedTags()[0];
|
||||||
|
}
|
||||||
|
return null; // no selection as far as this function is concerned
|
||||||
|
}
|
||||||
|
|
||||||
public getSelectedCommunityName(): string {
|
public getSelectedCommunityName(): string {
|
||||||
return CommunityPrototypeStore.instance.getCommunityName(TagOrderStore.getSelectedPrototypeTag());
|
return CommunityPrototypeStore.instance.getCommunityName(this.getSelectedCommunityId());
|
||||||
|
}
|
||||||
|
|
||||||
|
public getSelectedCommunityGeneralChat(): Room {
|
||||||
|
const communityId = this.getSelectedCommunityId();
|
||||||
|
if (communityId) {
|
||||||
|
return this.getGeneralChat(communityId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public getCommunityName(communityId: string): string {
|
public getCommunityName(communityId: string): string {
|
||||||
|
|
|
@ -286,13 +286,6 @@ class TagOrderStore extends Store {
|
||||||
getSelectedTags() {
|
getSelectedTags() {
|
||||||
return this._state.selectedTags;
|
return this._state.selectedTags;
|
||||||
}
|
}
|
||||||
|
|
||||||
getSelectedPrototypeTag() {
|
|
||||||
if (SettingsStore.getValue("feature_communities_v2_prototypes")) {
|
|
||||||
return this.getSelectedTags()[0];
|
|
||||||
}
|
|
||||||
return null; // no selection as far as this function is concerned
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (global.singletonTagOrderStore === undefined) {
|
if (global.singletonTagOrderStore === undefined) {
|
||||||
|
|
Loading…
Reference in a new issue