All files / services notificationPreferencesApi.ts

100% Statements 7/7
100% Branches 0/0
100% Functions 5/5
100% Lines 7/7

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52                                                      1x 1x   8x 7x         1x         1x                 1x  
import {api} from './api.ts';
 
// ============================================================================
// Types
// ============================================================================
 
/**
 * One row from /api/me/notification-preferences. The notificationType string
 * is opaque on the wire — labels and groupings live in the page component.
 */
export interface NotificationPreference {
	notificationType: string;
	channel: string;
	enabled: boolean;
}
 
interface PreferencesResponse {
	success: boolean;
	data: {
		preferences: NotificationPreference[];
	};
}
 
// ============================================================================
// API Slice
// ============================================================================
 
export const notificationPreferencesApi = api.injectEndpoints({
	endpoints: (builder) => ({
		getMyNotificationPreferences: builder.query<NotificationPreference[], void>({
			query: () => '/me/notification-preferences',
			transformResponse: (response: PreferencesResponse) => response.data.preferences,
			providesTags: ['NotificationPreferences']
		}),
 
		updateMyNotificationPreferences: builder.mutation<NotificationPreference[], NotificationPreference[]>({
			query: (preferences) => ({
				url: '/me/notification-preferences',
				method: 'PUT',
				body: {preferences}
			}),
			transformResponse: (response: PreferencesResponse) => response.data.preferences,
			invalidatesTags: ['NotificationPreferences']
		})
	})
});
 
export const {
	useGetMyNotificationPreferencesQuery,
	useUpdateMyNotificationPreferencesMutation
} = notificationPreferencesApi;