diff --git a/web/src/channel_folders.ts b/web/src/channel_folders.ts index c3b25368a4..b50926dc64 100644 --- a/web/src/channel_folders.ts +++ b/web/src/channel_folders.ts @@ -10,6 +10,7 @@ export type ChannelFolder = z.infer; let channel_folder_name_dict: FoldDict; let channel_folder_by_id_dict: Map; +let active_channel_folder_ids: Set; export function clean_up_description(channel_folder: ChannelFolder): void { if (channel_folder.rendered_description !== undefined) { @@ -23,11 +24,15 @@ export function add(channel_folder: ChannelFolder): void { clean_up_description(channel_folder); channel_folder_name_dict.set(channel_folder.name, channel_folder); channel_folder_by_id_dict.set(channel_folder.id, channel_folder); + if (!channel_folder.is_archived) { + active_channel_folder_ids.add(channel_folder.id); + } } export function initialize(params: StateData["channel_folders"]): void { channel_folder_name_dict = new FoldDict(); channel_folder_by_id_dict = new Map(); + active_channel_folder_ids = new Set(); for (const channel_folder of params.channel_folders) { add(channel_folder); @@ -47,6 +52,10 @@ export function get_channel_folders(include_archived = false): ChannelFolder[] { .sort((folder_a, folder_b) => folder_a.order - folder_b.order); } +export function get_active_folder_ids(): Set { + return active_channel_folder_ids; +} + /* TODO/channel-folders: Remove when tests are restored */ /* istanbul ignore next */ export function get_all_folder_ids(): Set { @@ -83,6 +92,9 @@ export function update(event: ChannelFolderUpdateEvent): void { 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); + if (channel_folder.is_archived) { + active_channel_folder_ids.delete(channel_folder.id); + } } } diff --git a/web/tests/channel_folders.test.cjs b/web/tests/channel_folders.test.cjs index 291329c10a..7c00aeeadc 100644 --- a/web/tests/channel_folders.test.cjs +++ b/web/tests/channel_folders.test.cjs @@ -33,6 +33,10 @@ run_test("basics", () => { channel_folders.initialize(params); assert.deepEqual(channel_folders.get_channel_folders(), [frontend_folder, backend_folder]); + assert.deepEqual( + channel_folders.get_active_folder_ids(), + new Set([frontend_folder.id, backend_folder.id]), + ); const devops_folder = { name: "Devops",