mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 05:53:43 +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