UNPKG

@magicbell/react-headless

Version:
49 lines 1.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const zustand_1 = require("zustand"); const NotificationPreferencesRepository_js_1 = tslib_1.__importDefault(require("./NotificationPreferencesRepository.js")); function sortCategories(categories = []) { // sort categories and category channels, // so the preferences pane is stable after update categories.sort((a, b) => a.slug.localeCompare(b.slug)); for (const cat of categories) { cat.channels.sort((a, b) => a.slug.localeCompare(b.slug)); } return categories; } /** * Remote notification preferences store. It contains all preferences stored in MagicBell servers for this user. * * @example * const { fetch } = useNotificationPreferences(); * useEffect(() => fetch(), []); */ const useNotificationPreferences = (0, zustand_1.create)((set, get) => ({ categories: [], _repository: new NotificationPreferencesRepository_js_1.default(), fetch: async () => { const { _repository } = get(); try { const { notificationPreferences: json } = await _repository.get(); const categories = sortCategories(json.categories); set({ categories, lastFetchedAt: Date.now() }); } catch (error) { set({ categories: [], lastFetchedAt: Date.now() }); } }, save: async (preferences) => { const { _repository } = get(); try { const { notificationPreferences: json } = await _repository.update(preferences); const categories = sortCategories(json.categories); set({ categories, lastFetchedAt: Date.now() }); } catch (error) { set({ categories: [], lastFetchedAt: Date.now() }); } }, })); exports.default = useNotificationPreferences; //# sourceMappingURL=useNotificationPreferences.js.map