mirror of https://github.com/vector-im/riot-web
Defer auto-joining within spaces and switch to using `suggested`
parent
d9a801910a
commit
ab4220b20d
|
@ -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} />;
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue