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 { useUnit } from 'effector-react' import { fetchUserNotificationSettings, updateUserNotificationSettings, } from '@/entities/notification/api/notifications-api' import type { UserNotificationSettings } from '@/entities/notification/api/notifications-api' import { isSyntheticEmail } from '@/shared/lib/is-synthetic-email' import { $user } from '@/shared/model/auth' 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 user = useUnit($user) 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 ( Уведомления Настройте, какие уведомления вы хотите получать на почту. {user && isSyntheticEmail(user.email) && ( Ваша почта сгенерирована автоматически. Для получения уведомлений укажите реальную почту в настройках профиля. )} {error && ( {error} )} handleToggle('globalEnabled', e.target.checked)} /> } label={Получать уведомления} /> Включите, чтобы получать уведомления о заказах на почту. mutation.mutate(orderStatusChangesPayload(e.target.checked))} /> } label="Изменения статуса заказа" /> handleToggle('orderMessageReceived', e.target.checked)} /> } label="Сообщения в чате заказа" /> ) }