mirror of
https://github.com/zulip/zulip.git
synced 2025-11-21 23:19:10 +00:00
user_groups: Validate parameters with Zod.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
committed by
Anders Kaseorg
parent
41ec6c9b7c
commit
1ee5c46a20
@@ -124,6 +124,16 @@ export const server_emoji_schema = z.object({
|
|||||||
|
|
||||||
export const realm_emoji_map_schema = z.record(server_emoji_schema);
|
export const realm_emoji_map_schema = z.record(server_emoji_schema);
|
||||||
|
|
||||||
|
export const user_group_schema = z.object({
|
||||||
|
description: z.string(),
|
||||||
|
id: z.number(),
|
||||||
|
name: z.string(),
|
||||||
|
members: z.array(z.number()),
|
||||||
|
is_system_group: z.boolean(),
|
||||||
|
direct_subgroup_ids: z.array(z.number()),
|
||||||
|
can_mention_group: z.number(),
|
||||||
|
});
|
||||||
|
|
||||||
// Sync this with zerver.lib.events.do_events_register.
|
// Sync this with zerver.lib.events.do_events_register.
|
||||||
const current_user_schema = z.object({
|
const current_user_schema = z.object({
|
||||||
avatar_source: z.string(),
|
avatar_source: z.string(),
|
||||||
@@ -365,7 +375,11 @@ export const state_data_schema = z
|
|||||||
})
|
})
|
||||||
.transform((stream_data) => ({stream_data})),
|
.transform((stream_data) => ({stream_data})),
|
||||||
)
|
)
|
||||||
.and(z.object({realm_user_groups: NOT_TYPED_YET}).transform((user_groups) => ({user_groups})))
|
.and(
|
||||||
|
z
|
||||||
|
.object({realm_user_groups: z.array(user_group_schema)})
|
||||||
|
.transform((user_groups) => ({user_groups})),
|
||||||
|
)
|
||||||
.and(z.object({unread_msgs: NOT_TYPED_YET}).transform((unread) => ({unread})))
|
.and(z.object({unread_msgs: NOT_TYPED_YET}).transform((unread) => ({unread})))
|
||||||
.and(z.object({muted_users: NOT_TYPED_YET}).transform((muted_users) => ({muted_users})))
|
.and(z.object({muted_users: NOT_TYPED_YET}).transform((muted_users) => ({muted_users})))
|
||||||
.and(z.object({user_topics: NOT_TYPED_YET}).transform((user_topics) => ({user_topics})))
|
.and(z.object({user_topics: NOT_TYPED_YET}).transform((user_topics) => ({user_topics})))
|
||||||
|
|||||||
@@ -1,26 +1,21 @@
|
|||||||
|
import type {z} from "zod";
|
||||||
|
|
||||||
import * as blueslip from "./blueslip";
|
import * as blueslip from "./blueslip";
|
||||||
import {FoldDict} from "./fold_dict";
|
import {FoldDict} from "./fold_dict";
|
||||||
import * as group_permission_settings from "./group_permission_settings";
|
import * as group_permission_settings from "./group_permission_settings";
|
||||||
import * as settings_config from "./settings_config";
|
import * as settings_config from "./settings_config";
|
||||||
|
import type {StateData, user_group_schema} from "./state_data";
|
||||||
import {current_user} from "./state_data";
|
import {current_user} from "./state_data";
|
||||||
import type {UserOrMention} from "./typeahead_helper";
|
import type {UserOrMention} from "./typeahead_helper";
|
||||||
import type {UserGroupUpdateEvent} from "./types";
|
import type {UserGroupUpdateEvent} from "./types";
|
||||||
|
|
||||||
export type UserGroup = {
|
type UserGroupRaw = z.infer<typeof user_group_schema>;
|
||||||
description: string;
|
|
||||||
id: number;
|
|
||||||
name: string;
|
|
||||||
members: Set<number>;
|
|
||||||
is_system_group: boolean;
|
|
||||||
direct_subgroup_ids: Set<number>;
|
|
||||||
can_mention_group: number;
|
|
||||||
};
|
|
||||||
|
|
||||||
// The members field is a number array which we convert
|
// The members field is a number array which we convert
|
||||||
// to a Set in the initialize function.
|
// to a Set in the initialize function.
|
||||||
type UserGroupRaw = Omit<UserGroup, "members" | "direct_subgroup_ids"> & {
|
export type UserGroup = Omit<UserGroupRaw, "members" | "direct_subgroup_ids"> & {
|
||||||
members: number[];
|
members: Set<number>;
|
||||||
direct_subgroup_ids: number[];
|
direct_subgroup_ids: Set<number>;
|
||||||
};
|
};
|
||||||
|
|
||||||
type UserGroupForDropdownListWidget = {
|
type UserGroupForDropdownListWidget = {
|
||||||
@@ -168,7 +163,7 @@ export function remove_subgroups(user_group_id: number, subgroup_ids: number[]):
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function initialize(params: {realm_user_groups: UserGroupRaw[]}): void {
|
export function initialize(params: StateData["user_groups"]): void {
|
||||||
for (const user_group of params.realm_user_groups) {
|
for (const user_group of params.realm_user_groups) {
|
||||||
add(user_group);
|
add(user_group);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user