import type { SubscriptionSignalPayload, SubscriptionOptions } from './types'; import type { Models, SchemaQuery } from '@triplit/db'; export type EnabledSubscriptionOptions = SubscriptionOptions & { /** * If false, the subscription will return a disabled state. */ enabled?: boolean; }; /** * Returns the disabled state for a subscription when enabled = false */ export function getDisabledSubscriptionState< M extends Models, Q extends SchemaQuery, >(): SubscriptionSignalPayload { return { results: undefined, fetching: false, fetchingLocal: false, fetchingRemote: false, error: undefined, }; } /** * Returns the initial loading state for a subscription when enabled = true */ export function getInitialSubscriptionState< M extends Models, Q extends SchemaQuery, >(): SubscriptionSignalPayload { return { results: undefined, fetching: true, fetchingLocal: true, fetchingRemote: false, error: undefined, }; } /** * Checks if a subscription should be enabled based on options */ export function isSubscriptionEnabled( options?: Partial ): boolean { return options?.enabled !== false; } /** * Returns the appropriate initial state based on whether the subscription is enabled */ export function getInitialState, Q extends SchemaQuery>( options?: Partial ): SubscriptionSignalPayload { return isSubscriptionEnabled(options) ? getInitialSubscriptionState() : getDisabledSubscriptionState(); }