@magicbell/react-headless
Version:
Hooks to build a notification inbox
132 lines (131 loc) • 4.65 kB
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;
}