Defer auto-joining within spaces and switch to using `suggested`

pull/21833/head
Michael Telatynski 2021-03-04 13:04:58 +00:00
parent d9a801910a
commit ab4220b20d
3 changed files with 20 additions and 18 deletions

View File

@ -64,6 +64,7 @@ export interface ISpaceSummaryEvent {
state_key: string; state_key: string;
content: { content: {
order?: string; order?: string;
suggested?: boolean;
auto_join?: boolean; auto_join?: boolean;
via?: string; via?: string;
}; };
@ -91,7 +92,7 @@ const SubSpace: React.FC<ISubspaceProps> = ({
const name = space.name || space.canonical_alias || space.aliases?.[0] || _t("Unnamed Space"); const name = space.name || space.canonical_alias || space.aliases?.[0] || _t("Unnamed Space");
const evContent = event?.getContent(); const evContent = event?.getContent();
const [autoJoin, _setAutoJoin] = useState(evContent?.auto_join); const [suggested, _setSuggested] = useState(evContent?.suggested);
const [removed, _setRemoved] = useState(!evContent?.via); const [removed, _setRemoved] = useState(!evContent?.via);
const cli = MatrixClientPeg.get(); const cli = MatrixClientPeg.get();
@ -102,12 +103,12 @@ const SubSpace: React.FC<ISubspaceProps> = ({
let actions; let actions;
if (editing && queueAction) { if (editing && queueAction) {
if (event && cli.getRoom(event.getRoomId())?.currentState.maySendStateEvent(event.getType(), cli.getUserId())) { if (event && cli.getRoom(event.getRoomId())?.currentState.maySendStateEvent(event.getType(), cli.getUserId())) {
const setAutoJoin = () => { const setSuggested = () => {
_setAutoJoin(v => { _setSuggested(v => {
queueAction({ queueAction({
event, event,
removed, removed,
autoJoin: !v, suggested: !v,
}); });
return !v; return !v;
}); });
@ -118,7 +119,7 @@ const SubSpace: React.FC<ISubspaceProps> = ({
queueAction({ queueAction({
event, event,
removed: !v, removed: !v,
autoJoin, suggested,
}); });
return !v; return !v;
}); });
@ -131,7 +132,7 @@ const SubSpace: React.FC<ISubspaceProps> = ({
} else { } else {
actions = <React.Fragment> actions = <React.Fragment>
<FormButton kind="danger" onClick={setRemoved} label={_t("Remove from Space")} /> <FormButton kind="danger" onClick={setRemoved} label={_t("Remove from Space")} />
<StyledCheckbox checked={autoJoin} onChange={setAutoJoin} /> <StyledCheckbox checked={suggested} onChange={setSuggested} />
</React.Fragment>; </React.Fragment>;
} }
} else { } else {
@ -180,8 +181,8 @@ const SubSpace: React.FC<ISubspaceProps> = ({
interface IAction { interface IAction {
event: MatrixEvent; event: MatrixEvent;
suggested: boolean;
removed: boolean; removed: boolean;
autoJoin: boolean;
} }
interface IRoomTileProps { interface IRoomTileProps {
@ -197,7 +198,7 @@ const RoomTile = ({ room, event, editing, queueAction, onPreviewClick, onJoinCli
const name = room.name || room.canonical_alias || room.aliases?.[0] || _t("Unnamed Room"); const name = room.name || room.canonical_alias || room.aliases?.[0] || _t("Unnamed Room");
const evContent = event?.getContent(); const evContent = event?.getContent();
const [autoJoin, _setAutoJoin] = useState(evContent?.auto_join); const [suggested, _setSuggested] = useState(evContent?.suggested);
const [removed, _setRemoved] = useState(!evContent?.via); const [removed, _setRemoved] = useState(!evContent?.via);
const cli = MatrixClientPeg.get(); const cli = MatrixClientPeg.get();
@ -207,12 +208,12 @@ const RoomTile = ({ room, event, editing, queueAction, onPreviewClick, onJoinCli
let actions; let actions;
if (editing && queueAction) { if (editing && queueAction) {
if (event && cli.getRoom(event.getRoomId())?.currentState.maySendStateEvent(event.getType(), cli.getUserId())) { if (event && cli.getRoom(event.getRoomId())?.currentState.maySendStateEvent(event.getType(), cli.getUserId())) {
const setAutoJoin = () => { const setSuggested = () => {
_setAutoJoin(v => { _setSuggested(v => {
queueAction({ queueAction({
event, event,
removed, removed,
autoJoin: !v, suggested: !v,
}); });
return !v; return !v;
}); });
@ -223,7 +224,7 @@ const RoomTile = ({ room, event, editing, queueAction, onPreviewClick, onJoinCli
queueAction({ queueAction({
event, event,
removed: !v, removed: !v,
autoJoin, suggested,
}); });
return !v; return !v;
}); });
@ -236,7 +237,7 @@ const RoomTile = ({ room, event, editing, queueAction, onPreviewClick, onJoinCli
} else { } else {
actions = <React.Fragment> actions = <React.Fragment>
<FormButton kind="danger" onClick={setRemoved} label={_t("Remove from Space")} /> <FormButton kind="danger" onClick={setRemoved} label={_t("Remove from Space")} />
<StyledCheckbox checked={autoJoin} onChange={setAutoJoin} /> <StyledCheckbox checked={suggested} onChange={setSuggested} />
</React.Fragment>; </React.Fragment>;
} }
} else { } else {
@ -441,10 +442,10 @@ const SpaceRoomDirectory: React.FC<IProps> = ({ space, initialText = "", onFinis
const onSaveButtonClicked = () => { const onSaveButtonClicked = () => {
// TODO setBusy // TODO setBusy
pendingActions.current.forEach(({event, autoJoin, removed}) => { pendingActions.current.forEach(({event, suggested, removed}) => {
const content = { const content = {
...event.getContent(), ...event.getContent(),
auto_join: autoJoin, suggested,
}; };
if (removed) { if (removed) {
@ -459,7 +460,7 @@ const SpaceRoomDirectory: React.FC<IProps> = ({ space, initialText = "", onFinis
if (isEditing) { if (isEditing) {
adminButton = <React.Fragment> adminButton = <React.Fragment>
<FormButton label={_t("Save changes")} onClick={onSaveButtonClicked} /> <FormButton label={_t("Save changes")} onClick={onSaveButtonClicked} />
<span>{ _t("All users join by default") }</span> <span>{ _t("Promoted to users") }</span>
</React.Fragment>; </React.Fragment>;
} else { } else {
adminButton = <FormButton label={_t("Manage rooms")} onClick={onManageButtonClicked} />; adminButton = <FormButton label={_t("Manage rooms")} onClick={onManageButtonClicked} />;

View File

@ -2596,7 +2596,7 @@
"You're in this space": "You're in this space", "You're in this space": "You're in this space",
"You're in this room": "You're in this room", "You're in this room": "You're in this room",
"Save changes": "Save changes", "Save changes": "Save changes",
"All users join by default": "All users join by default", "Promoted to users": "Promoted to users",
"Manage rooms": "Manage rooms", "Manage rooms": "Manage rooms",
"Find a room...": "Find a room...", "Find a room...": "Find a room...",
"Accept Invite": "Accept Invite", "Accept Invite": "Accept Invite",

View File

@ -108,9 +108,10 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
} }
} }
public addRoomToSpace(space: Room, roomId: string, via: string[], autoJoin = false) { public addRoomToSpace(space: Room, roomId: string, via: string[], suggested = false, autoJoin = false) {
return this.matrixClient.sendStateEvent(space.roomId, EventType.SpaceChild, { return this.matrixClient.sendStateEvent(space.roomId, EventType.SpaceChild, {
via, via,
suggested,
auto_join: autoJoin, auto_join: autoJoin,
}, roomId); }, roomId);
} }