mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 14:03:30 +00:00 
			
		
		
		
	server_events_dispatch: Handle channel_folder/update event.
This commit is contained in:
		@@ -2,6 +2,7 @@ import assert from "minimalistic-assert";
 | 
			
		||||
import type * as z from "zod/mini";
 | 
			
		||||
 | 
			
		||||
import {FoldDict} from "./fold_dict.ts";
 | 
			
		||||
import type {ChannelFolderUpdateEvent} from "./server_event_types.ts";
 | 
			
		||||
import type {StateData, channel_folder_schema} from "./state_data.ts";
 | 
			
		||||
 | 
			
		||||
export type ChannelFolder = z.infer<typeof channel_folder_schema>;
 | 
			
		||||
@@ -52,3 +53,25 @@ export function get_channel_folder_by_id(folder_id: number): ChannelFolder {
 | 
			
		||||
    assert(channel_folder !== undefined);
 | 
			
		||||
    return channel_folder;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function update(event: ChannelFolderUpdateEvent): void {
 | 
			
		||||
    const folder_id = event.channel_folder_id;
 | 
			
		||||
    const channel_folder = get_channel_folder_by_id(folder_id);
 | 
			
		||||
    if (event.data.name !== undefined) {
 | 
			
		||||
        channel_folder_name_dict.delete(channel_folder.name);
 | 
			
		||||
        channel_folder.name = event.data.name;
 | 
			
		||||
        channel_folder_name_dict.set(channel_folder.name, channel_folder);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (event.data.description !== undefined) {
 | 
			
		||||
        channel_folder.description = event.data.description;
 | 
			
		||||
        assert(event.data.rendered_description !== undefined);
 | 
			
		||||
        channel_folder.rendered_description = event.data.rendered_description;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (event.data.is_archived !== undefined) {
 | 
			
		||||
        channel_folder.is_archived = event.data.is_archived;
 | 
			
		||||
        channel_folder_name_dict.delete(channel_folder.name);
 | 
			
		||||
        channel_folder_name_dict.set(channel_folder.name, channel_folder);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -64,3 +64,17 @@ export const message_details_schema = z.record(
 | 
			
		||||
    ),
 | 
			
		||||
);
 | 
			
		||||
export type MessageDetails = z.output<typeof message_details_schema>;
 | 
			
		||||
 | 
			
		||||
export const channel_folder_update_event_schema = z.object({
 | 
			
		||||
    id: z.number(),
 | 
			
		||||
    type: z.literal("channel_folder"),
 | 
			
		||||
    op: z.literal("update"),
 | 
			
		||||
    channel_folder_id: z.number(),
 | 
			
		||||
    data: z.object({
 | 
			
		||||
        name: z.optional(z.string()),
 | 
			
		||||
        description: z.optional(z.string()),
 | 
			
		||||
        rendered_description: z.optional(z.string()),
 | 
			
		||||
        is_archived: z.optional(z.boolean()),
 | 
			
		||||
    }),
 | 
			
		||||
});
 | 
			
		||||
export type ChannelFolderUpdateEvent = z.output<typeof channel_folder_update_event_schema>;
 | 
			
		||||
 
 | 
			
		||||
@@ -123,6 +123,14 @@ export function dispatch_normal_event(event) {
 | 
			
		||||
                    inbox_ui.complete_rerender();
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
                case "update":
 | 
			
		||||
                    channel_folders.update(event);
 | 
			
		||||
                    if (event.data.name !== undefined) {
 | 
			
		||||
                        inbox_ui.complete_rerender();
 | 
			
		||||
                        stream_list.update_streams_sidebar();
 | 
			
		||||
                        stream_ui_updates.update_channel_folder_name(event.channel_folder_id);
 | 
			
		||||
                    }
 | 
			
		||||
                    break;
 | 
			
		||||
                default:
 | 
			
		||||
                    blueslip.error("Unexpected event type channel_folder/" + event.op);
 | 
			
		||||
                    break;
 | 
			
		||||
 
 | 
			
		||||
@@ -628,3 +628,21 @@ export function update_channel_folder_dropdown(sub: StreamSubscription): void {
 | 
			
		||||
 | 
			
		||||
    settings_components.set_channel_folder_dropdown_value(sub);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function update_channel_folder_name(folder_id: number): void {
 | 
			
		||||
    if (!overlays.streams_open()) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const active_stream_id = stream_settings_components.get_active_data().id;
 | 
			
		||||
    if (!active_stream_id) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const sub = sub_store.get(active_stream_id)!;
 | 
			
		||||
    if (sub.folder_id !== folder_id) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    settings_components.set_channel_folder_dropdown_value(sub);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -515,10 +515,10 @@ run_test("scheduled_messages", ({override}) => {
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
run_test("channel_folders", () => {
 | 
			
		||||
run_test("channel_folders", ({override}) => {
 | 
			
		||||
    channel_folders.initialize({channel_folders: []});
 | 
			
		||||
 | 
			
		||||
    const event = event_fixtures.channel_folder__add;
 | 
			
		||||
    let event = event_fixtures.channel_folder__add;
 | 
			
		||||
    {
 | 
			
		||||
        dispatch(event);
 | 
			
		||||
 | 
			
		||||
@@ -528,6 +528,27 @@ run_test("channel_folders", () => {
 | 
			
		||||
        assert.equal(folders[0].name, event.channel_folder.name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    event = event_fixtures.channel_folder__update;
 | 
			
		||||
    {
 | 
			
		||||
        const stub = make_stub();
 | 
			
		||||
        override(stream_ui_updates, "update_channel_folder_name", stub.f);
 | 
			
		||||
        override(stream_list, "update_streams_sidebar", stub.f);
 | 
			
		||||
 | 
			
		||||
        dispatch(event);
 | 
			
		||||
 | 
			
		||||
        assert.equal(stub.num_calls, 2);
 | 
			
		||||
        const folders = channel_folders.get_channel_folders(true);
 | 
			
		||||
        const args = stub.get_args("folder_id");
 | 
			
		||||
        assert_same(args.folder_id, event.channel_folder_id);
 | 
			
		||||
 | 
			
		||||
        assert.equal(folders.length, 1);
 | 
			
		||||
        assert.equal(folders[0].id, event.channel_folder_id);
 | 
			
		||||
        assert.equal(folders[0].name, event.data.name);
 | 
			
		||||
        assert.equal(folders[0].description, event.data.description);
 | 
			
		||||
        assert.equal(folders[0].rendered_description, event.data.rendered_description);
 | 
			
		||||
        assert.equal(folders[0].is_archived, event.data.is_archived);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    blueslip.expect("error", "Unexpected event type channel_folder/other");
 | 
			
		||||
    server_events_dispatch.dispatch_normal_event({type: "channel_folder", op: "other"});
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -161,6 +161,18 @@ exports.fixtures = {
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    channel_folder__update: {
 | 
			
		||||
        type: "channel_folder",
 | 
			
		||||
        op: "update",
 | 
			
		||||
        channel_folder_id: 1,
 | 
			
		||||
        data: {
 | 
			
		||||
            name: "New frontend",
 | 
			
		||||
            description: "Channels for new frontend discussions",
 | 
			
		||||
            rendered_description: "<p>Channels for new frontend discussions</p>",
 | 
			
		||||
            is_archived: true,
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    channel_typing_edit_message__start: {
 | 
			
		||||
        type: "typing_edit_message",
 | 
			
		||||
        op: "start",
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user