vkashti / components / ui / Toasts / toaster.tsx
toaster.tsx
Raw
'use client';

import {
  Toast,
  ToastClose,
  ToastDescription,
  ToastProvider,
  ToastTitle,
  ToastViewport
} from '@/components/ui/Toasts/toast';
import { useToast } from '@/components/ui/Toasts/use-toast';
import { usePathname, useRouter, useSearchParams } from 'next/navigation';
import { useEffect } from 'react';

export function Toaster() {
  const { toast, toasts } = useToast();
  const searchParams = useSearchParams();
  const pathname = usePathname();
  const router = useRouter();

  useEffect(() => {
    const status = searchParams?.get('status');
    const status_description = searchParams?.get('status_description');
    const error = searchParams?.get('error');
    const error_description = searchParams?.get('error_description');
    
    if (status === 'success') {
      toast({
        title: status_description || 'Успешно!',
        description: status === 'success' ? 'Операцията е изпълнена успешно.' : '',
        variant: 'default',
      });
    }
    
    if (error) {
      toast({
        title: 'Грешка',
        description: error_description || error,
        variant: 'destructive',
      });
    }
  }, [searchParams, pathname, router, toast]);

  return (
    <ToastProvider>
      {toasts.map(function ({ id, title, description, action, ...props }) {
        return (
          <Toast key={id} {...props}>
            <div className="grid gap-1">
              {title && <ToastTitle>{title}</ToastTitle>}
              {description && (
                <ToastDescription>{description}</ToastDescription>
              )}
            </div>
            {action}
            <ToastClose />
          </Toast>
        );
      })}
      <ToastViewport />
    </ToastProvider>
  );
}