@magicbell/react-headless
Version:
Hooks to build a notification inbox
136 lines (121 loc) • 4.36 kB
text/typescript
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;
}