You've already forked matrix-react-sdk
							
							
				mirror of
				https://github.com/matrix-org/matrix-react-sdk.git
				synced 2025-11-04 11:51:45 +03:00 
			
		
		
		
	Defer auto-joining within spaces and switch to using suggested
				
					
				
			This commit is contained in:
		@@ -64,6 +64,7 @@ export interface ISpaceSummaryEvent {
 | 
			
		||||
    state_key: string;
 | 
			
		||||
    content: {
 | 
			
		||||
        order?: string;
 | 
			
		||||
        suggested?: boolean;
 | 
			
		||||
        auto_join?: boolean;
 | 
			
		||||
        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 evContent = event?.getContent();
 | 
			
		||||
    const [autoJoin, _setAutoJoin] = useState(evContent?.auto_join);
 | 
			
		||||
    const [suggested, _setSuggested] = useState(evContent?.suggested);
 | 
			
		||||
    const [removed, _setRemoved] = useState(!evContent?.via);
 | 
			
		||||
 | 
			
		||||
    const cli = MatrixClientPeg.get();
 | 
			
		||||
@@ -102,12 +103,12 @@ const SubSpace: React.FC<ISubspaceProps> = ({
 | 
			
		||||
    let actions;
 | 
			
		||||
    if (editing && queueAction) {
 | 
			
		||||
        if (event && cli.getRoom(event.getRoomId())?.currentState.maySendStateEvent(event.getType(), cli.getUserId())) {
 | 
			
		||||
            const setAutoJoin = () => {
 | 
			
		||||
                _setAutoJoin(v => {
 | 
			
		||||
            const setSuggested = () => {
 | 
			
		||||
                _setSuggested(v => {
 | 
			
		||||
                    queueAction({
 | 
			
		||||
                        event,
 | 
			
		||||
                        removed,
 | 
			
		||||
                        autoJoin: !v,
 | 
			
		||||
                        suggested: !v,
 | 
			
		||||
                    });
 | 
			
		||||
                    return !v;
 | 
			
		||||
                });
 | 
			
		||||
@@ -118,7 +119,7 @@ const SubSpace: React.FC<ISubspaceProps> = ({
 | 
			
		||||
                    queueAction({
 | 
			
		||||
                        event,
 | 
			
		||||
                        removed: !v,
 | 
			
		||||
                        autoJoin,
 | 
			
		||||
                        suggested,
 | 
			
		||||
                    });
 | 
			
		||||
                    return !v;
 | 
			
		||||
                });
 | 
			
		||||
@@ -131,7 +132,7 @@ const SubSpace: React.FC<ISubspaceProps> = ({
 | 
			
		||||
            } else {
 | 
			
		||||
                actions = <React.Fragment>
 | 
			
		||||
                    <FormButton kind="danger" onClick={setRemoved} label={_t("Remove from Space")} />
 | 
			
		||||
                    <StyledCheckbox checked={autoJoin} onChange={setAutoJoin} />
 | 
			
		||||
                    <StyledCheckbox checked={suggested} onChange={setSuggested} />
 | 
			
		||||
                </React.Fragment>;
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
@@ -180,8 +181,8 @@ const SubSpace: React.FC<ISubspaceProps> = ({
 | 
			
		||||
 | 
			
		||||
interface IAction {
 | 
			
		||||
    event: MatrixEvent;
 | 
			
		||||
    suggested: boolean;
 | 
			
		||||
    removed: boolean;
 | 
			
		||||
    autoJoin: boolean;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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 evContent = event?.getContent();
 | 
			
		||||
    const [autoJoin, _setAutoJoin] = useState(evContent?.auto_join);
 | 
			
		||||
    const [suggested, _setSuggested] = useState(evContent?.suggested);
 | 
			
		||||
    const [removed, _setRemoved] = useState(!evContent?.via);
 | 
			
		||||
 | 
			
		||||
    const cli = MatrixClientPeg.get();
 | 
			
		||||
@@ -207,12 +208,12 @@ const RoomTile = ({ room, event, editing, queueAction, onPreviewClick, onJoinCli
 | 
			
		||||
    let actions;
 | 
			
		||||
    if (editing && queueAction) {
 | 
			
		||||
        if (event && cli.getRoom(event.getRoomId())?.currentState.maySendStateEvent(event.getType(), cli.getUserId())) {
 | 
			
		||||
            const setAutoJoin = () => {
 | 
			
		||||
                _setAutoJoin(v => {
 | 
			
		||||
            const setSuggested = () => {
 | 
			
		||||
                _setSuggested(v => {
 | 
			
		||||
                    queueAction({
 | 
			
		||||
                        event,
 | 
			
		||||
                        removed,
 | 
			
		||||
                        autoJoin: !v,
 | 
			
		||||
                        suggested: !v,
 | 
			
		||||
                    });
 | 
			
		||||
                    return !v;
 | 
			
		||||
                });
 | 
			
		||||
@@ -223,7 +224,7 @@ const RoomTile = ({ room, event, editing, queueAction, onPreviewClick, onJoinCli
 | 
			
		||||
                    queueAction({
 | 
			
		||||
                        event,
 | 
			
		||||
                        removed: !v,
 | 
			
		||||
                        autoJoin,
 | 
			
		||||
                        suggested,
 | 
			
		||||
                    });
 | 
			
		||||
                    return !v;
 | 
			
		||||
                });
 | 
			
		||||
@@ -236,7 +237,7 @@ const RoomTile = ({ room, event, editing, queueAction, onPreviewClick, onJoinCli
 | 
			
		||||
            } else {
 | 
			
		||||
                actions = <React.Fragment>
 | 
			
		||||
                    <FormButton kind="danger" onClick={setRemoved} label={_t("Remove from Space")} />
 | 
			
		||||
                    <StyledCheckbox checked={autoJoin} onChange={setAutoJoin} />
 | 
			
		||||
                    <StyledCheckbox checked={suggested} onChange={setSuggested} />
 | 
			
		||||
                </React.Fragment>;
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
@@ -441,10 +442,10 @@ const SpaceRoomDirectory: React.FC<IProps> = ({ space, initialText = "", onFinis
 | 
			
		||||
 | 
			
		||||
        const onSaveButtonClicked = () => {
 | 
			
		||||
            // TODO setBusy
 | 
			
		||||
            pendingActions.current.forEach(({event, autoJoin, removed}) => {
 | 
			
		||||
            pendingActions.current.forEach(({event, suggested, removed}) => {
 | 
			
		||||
                const content = {
 | 
			
		||||
                    ...event.getContent(),
 | 
			
		||||
                    auto_join: autoJoin,
 | 
			
		||||
                    suggested,
 | 
			
		||||
                };
 | 
			
		||||
 | 
			
		||||
                if (removed) {
 | 
			
		||||
@@ -459,7 +460,7 @@ const SpaceRoomDirectory: React.FC<IProps> = ({ space, initialText = "", onFinis
 | 
			
		||||
        if (isEditing) {
 | 
			
		||||
            adminButton = <React.Fragment>
 | 
			
		||||
                <FormButton label={_t("Save changes")} onClick={onSaveButtonClicked} />
 | 
			
		||||
                <span>{ _t("All users join by default") }</span>
 | 
			
		||||
                <span>{ _t("Promoted to users") }</span>
 | 
			
		||||
            </React.Fragment>;
 | 
			
		||||
        } else {
 | 
			
		||||
            adminButton = <FormButton label={_t("Manage rooms")} onClick={onManageButtonClicked} />;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user