mirror of https://github.com/zulip/zulip.git
sub_store: Generate StreamSubscription type from a schema.
This will be useful for later when we'll need the schema for converting settings_org to typescript.
This commit is contained in:
parent
905a234966
commit
c133f7f219
|
@ -3,9 +3,9 @@ import {z} from "zod";
|
||||||
import {server_add_bot_schema} from "./bot_types";
|
import {server_add_bot_schema} from "./bot_types";
|
||||||
import {realm_default_settings_schema} from "./realm_user_settings_defaults";
|
import {realm_default_settings_schema} from "./realm_user_settings_defaults";
|
||||||
import {
|
import {
|
||||||
|
api_stream_subscription_schema,
|
||||||
never_subscribed_stream_schema,
|
never_subscribed_stream_schema,
|
||||||
stream_schema,
|
stream_schema,
|
||||||
stream_subscription_schema,
|
|
||||||
} from "./stream_types";
|
} from "./stream_types";
|
||||||
import {user_settings_schema} from "./user_settings";
|
import {user_settings_schema} from "./user_settings";
|
||||||
import {user_status_schema} from "./user_status_types";
|
import {user_status_schema} from "./user_status_types";
|
||||||
|
@ -473,8 +473,8 @@ export const state_data_schema = z
|
||||||
.and(
|
.and(
|
||||||
z
|
z
|
||||||
.object({
|
.object({
|
||||||
subscriptions: z.array(stream_subscription_schema),
|
subscriptions: z.array(api_stream_subscription_schema),
|
||||||
unsubscribed: z.array(stream_subscription_schema),
|
unsubscribed: z.array(api_stream_subscription_schema),
|
||||||
never_subscribed: z.array(never_subscribed_stream_schema),
|
never_subscribed: z.array(never_subscribed_stream_schema),
|
||||||
realm_default_streams: z.array(stream_schema),
|
realm_default_streams: z.array(stream_schema),
|
||||||
})
|
})
|
||||||
|
|
|
@ -50,7 +50,7 @@ export const stream_properties_schema = stream_specific_notification_settings_sc
|
||||||
});
|
});
|
||||||
|
|
||||||
// This is the raw data we get from the server for a subscription.
|
// This is the raw data we get from the server for a subscription.
|
||||||
export const stream_subscription_schema = stream_schema.merge(stream_properties_schema).extend({
|
export const api_stream_subscription_schema = stream_schema.merge(stream_properties_schema).extend({
|
||||||
email_address: z.string().optional(),
|
email_address: z.string().optional(),
|
||||||
stream_weekly_traffic: z.number().nullable(),
|
stream_weekly_traffic: z.number().nullable(),
|
||||||
subscribers: z.array(z.number()).optional(),
|
subscribers: z.array(z.number()).optional(),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import type {z} from "zod";
|
import {z} from "zod";
|
||||||
|
|
||||||
import * as blueslip from "./blueslip";
|
import * as blueslip from "./blueslip";
|
||||||
import type {
|
import type {
|
||||||
|
@ -6,8 +6,8 @@ import type {
|
||||||
stream_properties_schema,
|
stream_properties_schema,
|
||||||
stream_schema,
|
stream_schema,
|
||||||
stream_specific_notification_settings_schema,
|
stream_specific_notification_settings_schema,
|
||||||
stream_subscription_schema,
|
|
||||||
} from "./stream_types";
|
} from "./stream_types";
|
||||||
|
import {api_stream_subscription_schema} from "./stream_types";
|
||||||
|
|
||||||
export type Stream = z.infer<typeof stream_schema>;
|
export type Stream = z.infer<typeof stream_schema>;
|
||||||
export type StreamSpecificNotificationSettings = z.infer<
|
export type StreamSpecificNotificationSettings = z.infer<
|
||||||
|
@ -15,18 +15,21 @@ export type StreamSpecificNotificationSettings = z.infer<
|
||||||
>;
|
>;
|
||||||
export type NeverSubscribedStream = z.infer<typeof never_subscribed_stream_schema>;
|
export type NeverSubscribedStream = z.infer<typeof never_subscribed_stream_schema>;
|
||||||
export type StreamProperties = z.infer<typeof stream_properties_schema>;
|
export type StreamProperties = z.infer<typeof stream_properties_schema>;
|
||||||
export type ApiStreamSubscription = z.infer<typeof stream_subscription_schema>;
|
export type ApiStreamSubscription = z.infer<typeof api_stream_subscription_schema>;
|
||||||
|
|
||||||
// These properties are added in `stream_data` when hydrating the streams and are not present in the data we get from the server.
|
|
||||||
export type ExtraStreamAttrs = {
|
|
||||||
render_subscribers: boolean;
|
|
||||||
newly_subscribed: boolean;
|
|
||||||
subscribed: boolean;
|
|
||||||
previously_subscribed: boolean;
|
|
||||||
};
|
|
||||||
|
|
||||||
// This is the actual type of subscription objects we use in the app.
|
// This is the actual type of subscription objects we use in the app.
|
||||||
export type StreamSubscription = Omit<ApiStreamSubscription, "subscribers"> & ExtraStreamAttrs;
|
export const stream_subscription_schema = api_stream_subscription_schema
|
||||||
|
.omit({
|
||||||
|
subscribers: true,
|
||||||
|
})
|
||||||
|
.extend({
|
||||||
|
// These properties are added in `stream_data` when hydrating the streams and are not present in the data we get from the server.
|
||||||
|
render_subscribers: z.boolean(),
|
||||||
|
newly_subscribed: z.boolean(),
|
||||||
|
subscribed: z.boolean(),
|
||||||
|
previously_subscribed: z.boolean(),
|
||||||
|
});
|
||||||
|
export type StreamSubscription = z.infer<typeof stream_subscription_schema>;
|
||||||
|
|
||||||
const subs_by_stream_id = new Map<number, StreamSubscription>();
|
const subs_by_stream_id = new Map<number, StreamSubscription>();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue