UNPKG

@magicbell/react-headless

Version:
132 lines (131 loc) 4.65 kB
import { IRemoteNotification } from '../types/index.js'; import INotificationRepository from './INotificationRepository.js'; import INotificationStore from './INotificationStore.js'; export type QueryParams = { /** * A filter on the notifications based on read state. */ read?: boolean; /** * A filter on the notifications based on seen state. */ seen?: boolean; /** * A filter on the notifications based on archived state. */ archived?: boolean; /** * A filter on the notifications based on category. Use "uncategorized" * to target notifications without a category. */ category?: string; /** * A filter on the notifications based on topic. */ topic?: string; /** * A limit on the number of notifications to be returned. */ per_page?: number; /** * The page number to be returned. */ page?: number; }; export default interface INotificationsStoresCollection { stores: Record<string, INotificationStore>; /** * Add a store to the collection. * * @param storeId ID of the store to add. * @param defaultQueryParams Optional default query parameters used to fetch the store. * @param otherProps Properties used to initialize the store with */ setStore: (storeId: string, defaultQueryParams?: QueryParams, otherProps?: Partial<INotificationStore>) => void; /** * Fetch a store from the MagicBell server. * * @param storeId ID of the store to fetch. * @param queryParams Optional query parameters to fetch. * @param options.reset Whether to prepend notifications to the store or not */ fetchStore: (storeId: string, queryParams?: Record<string, unknown>, options?: Partial<{ reset: boolean; prepend: boolean; }>) => Promise<void>; /** * Fetch all stores from the MagicBell server. * * @param queryParams Optional query parameters to fetch. * @param options.reset Whether to prepend notifications to the store or not */ fetchAllStores: (queryParams?: Record<string, unknown>, options?: Partial<{ reset: boolean; prepend: boolean; }>) => Promise<void>; /** * Mark a notification as seen. * * @param notification Notification to mark as seen. */ markNotificationAsSeen: (notification: IRemoteNotification) => void; /** * Mark a notification as read. Makes a request to the MagicBell server and * marks the notification as read immediately. * * @param notification Notification to mark as read. */ markNotificationAsRead: (notification: IRemoteNotification) => Promise<boolean>; /** * Mark a notification as unread. Makes a request to the MagicBell server and * marks the notification as unread immediately. * * @param notification Notification to mark as read. */ markNotificationAsUnread: (notification: IRemoteNotification) => Promise<boolean>; /** * Archives a notification. Makes a request to the MagicBell server and * archives the notification immediately. * * @param notification */ archiveNotification: (notification: IRemoteNotification, options?: Partial<{ persist: boolean; }>) => Promise<boolean>; /** * Unarchives a notification. Makes a request to the MagicBell server and * unarchives the notification immediately. * @param notification */ unarchiveNotification: (notification: IRemoteNotification, options?: Partial<{ persist: boolean; }>) => Promise<boolean>; /** * Deletes a notification. Makes a request to the MagicBell server and * removes the notification immediately. * * @param notification Notification to mark as read. */ deleteNotification: (notification: IRemoteNotification, options?: Partial<{ persist: boolean; }>) => Promise<boolean>; /** * Marks all notifications as seen. Makes a request to the MagicBell server * and sets the `seenAt` attribute of all notifications immediately. */ markAllAsSeen: (options?: Partial<{ persist: boolean; updateModels: boolean; storeId?: string; }>) => Promise<boolean>; /** * Marks all notifications as read. Makes a request to the MagicBell server * and sets the `readAt` attribute of all notifications immediately. */ markAllAsRead: (options?: Partial<{ persist: boolean; updateModels: boolean; storeId?: string; }>) => Promise<boolean>; _repository: INotificationRepository; }