import { useState } from 'react' import Alert from '@mui/material/Alert' import Box from '@mui/material/Box' import FormControlLabel from '@mui/material/FormControlLabel' import Stack from '@mui/material/Stack' import Switch from '@mui/material/Switch' import Typography from '@mui/material/Typography' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { fetchUserNotificationSettings, updateUserNotificationSettings, } from '@/entities/notification/api/notifications-api' import type { UserNotificationSettings } from '@/entities/notification/api/notifications-api' function isOrderStatusChangesOn(s: UserNotificationSettings): boolean { return s.orderCreated && s.orderStatusChanged && s.paymentStatusChanged && s.deliveryFeeAdjusted } const orderStatusChangesPayload = (on: boolean) => ({ orderCreated: on, orderStatusChanged: on, paymentStatusChanged: on, deliveryFeeAdjusted: on, }) export function NotificationsPage() { const queryClient = useQueryClient() const [error, setError] = useState(null) const { data, isLoading } = useQuery({ queryKey: ['me', 'notifications', 'settings'], queryFn: fetchUserNotificationSettings, }) const mutation = useMutation({ mutationFn: updateUserNotificationSettings, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['me', 'notifications', 'settings'] }) }, onError: (err: { response?: { data?: { error?: string } } }) => { setError(err.response?.data?.error || 'Ошибка сохранения') }, }) if (isLoading) return Загрузка... const settings = data?.settings if (!settings) return Не удалось загрузить настройки const handleToggle = (field: string, value: boolean) => { setError(null) mutation.mutate({ [field]: value }) } const statusChangesOn = isOrderStatusChangesOn(settings) return ( Оповещения Настройте, какие уведомления вы хотите получать на почту. {error && ( {error} )} handleToggle('globalEnabled', e.target.checked)} /> } label={Получать оповещения} /> Включите, чтобы получать уведомления о заказах на почту. mutation.mutate(orderStatusChangesPayload(e.target.checked))} /> } label="Изменения статуса заказа" /> handleToggle('orderMessageReceived', e.target.checked)} /> } label="Сообщения в чате заказа" /> ) }