From d3fd21177bcd08c0177a116fbfa8eac43f6b3603 Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Mon, 20 Jul 2026 10:55:33 +0330 Subject: [PATCH] change toast --- .cursor/skills/danak-admin/SKILL.md | 2 +- package-lock.json | 14 --- package.json | 1 - src/App.tsx | 95 ++++++++----------- src/components/Toast.tsx | 54 +++++++++++ src/pages/ads/CreateAds.tsx | 10 +- src/pages/ads/Update.tsx | 8 +- src/pages/annoncement/Create.tsx | 6 +- src/pages/annoncement/List.tsx | 6 +- src/pages/annoncement/Update.tsx | 6 +- src/pages/auth/components/LoginStep1.tsx | 8 +- src/pages/auth/components/LoginStep2.tsx | 4 +- src/pages/auth/components/LoginStep3.tsx | 4 +- src/pages/auth/components/RegisterStep1.tsx | 4 +- src/pages/auth/components/RegisterStep2.tsx | 4 +- src/pages/blog/BlogCategory.tsx | 8 +- src/pages/blog/Comments.tsx | 4 +- src/pages/blog/CreateBlog.tsx | 8 +- src/pages/blog/Update.tsx | 6 +- src/pages/blog/components/UpdateCategory.tsx | 6 +- src/pages/cardBank/Create.tsx | 4 +- src/pages/cardBank/Edit.tsx | 4 +- src/pages/customer/Create.tsx | 8 +- src/pages/customer/Update.tsx | 8 +- src/pages/discounts/CreateDiscount.tsx | 6 +- src/pages/discounts/DiscountsList.tsx | 6 +- src/pages/discounts/UpdateDiscount.tsx | 6 +- src/pages/dkala/icon/GroupList.tsx | 6 +- src/pages/dkala/icon/List.tsx | 6 +- .../dkala/icon/components/CreateGroupIcon.tsx | 6 +- .../dkala/icon/components/CreateIcon.tsx | 8 +- src/pages/dkala/shop/List.tsx | 6 +- src/pages/dkala/shop/Update.tsx | 6 +- .../shop/components/AddShopAdminForm.tsx | 6 +- .../dkala/shop/components/ShopAdminsModal.tsx | 6 +- src/pages/dmenu/icon/GroupList.tsx | 6 +- src/pages/dmenu/icon/List.tsx | 6 +- .../dmenu/icon/components/CreateGroupIcon.tsx | 6 +- .../dmenu/icon/components/CreateIcon.tsx | 8 +- src/pages/dmenu/restaurant/List.tsx | 6 +- src/pages/dmenu/restaurant/Update.tsx | 6 +- .../components/AddRestaurantAdminForm.tsx | 6 +- .../components/RestaurantAdminsModal.tsx | 6 +- src/pages/dpage/sticker/List.tsx | 6 +- .../sticker/components/CreateSticker.tsx | 10 +- src/pages/guide/Create.tsx | 6 +- src/pages/guide/Update.tsx | 6 +- src/pages/learning/Create.tsx | 12 +-- .../learning/components/CreateCategory.tsx | 6 +- src/pages/notification/Notification.tsx | 4 +- src/pages/payment/components/Accept.tsx | 6 +- src/pages/payment/components/Reject.tsx | 8 +- src/pages/profile/Profile.tsx | 14 +-- src/pages/profile/components/Email.tsx | 6 +- src/pages/profile/components/Phone.tsx | 8 +- src/pages/profile/components/Username.tsx | 6 +- src/pages/receipts/Create.tsx | 8 +- src/pages/receipts/Detail.tsx | 8 +- src/pages/receipts/List.tsx | 6 +- src/pages/reseller/Create.tsx | 4 +- src/pages/reseller/components/Payment.tsx | 6 +- src/pages/service/AddService.tsx | 16 ++-- src/pages/service/UpdateService.tsx | 14 +-- .../service/components/CreateCategory.tsx | 10 +- src/pages/service/components/CreatePlan.tsx | 8 +- src/pages/service/components/EditPlan.tsx | 6 +- .../service/components/UpdateCategory.tsx | 8 +- src/pages/slider/Create.tsx | 8 +- src/pages/slider/List.tsx | 6 +- src/pages/slider/Update.tsx | 6 +- src/pages/subscriptions/List.tsx | 4 +- src/pages/support/Create.tsx | 6 +- src/pages/support/Update.tsx | 6 +- .../taskmanager/components/AddNewColumn.tsx | 6 +- src/pages/taskmanager/components/Column.tsx | 14 +-- .../task-detail/TaskDetailModal.tsx | 18 ++-- .../task-detail/TaskDetailToolbar.tsx | 24 ++--- .../components/task-detail/checklist/List.tsx | 4 +- .../time/TaskDetailTimePopover.tsx | 10 +- src/pages/taskmanager/project/Create.tsx | 10 +- src/pages/taskmanager/project/Update.tsx | 10 +- .../components/ProjectSettingsPanel.tsx | 10 +- src/pages/taskmanager/workspace.tsx | 10 +- src/pages/taskmanager/workspace/Create.tsx | 6 +- src/pages/taskmanager/workspace/List.tsx | 6 +- src/pages/taskmanager/workspace/Update.tsx | 6 +- src/pages/ticket/Category.tsx | 4 +- src/pages/ticket/CreateTicket.tsx | 8 +- src/pages/ticket/Detail.tsx | 12 +-- .../components/CreateTaskFromTicket.tsx | 14 +-- src/pages/ticket/components/ReferTicket.tsx | 6 +- src/pages/users/Create.tsx | 8 +- src/pages/users/GroupCreate.tsx | 6 +- src/pages/users/List.tsx | 6 +- src/pages/users/RoleCreate.tsx | 6 +- src/pages/users/RoleUpdate.tsx | 8 +- src/pages/users/Update.tsx | 8 +- 97 files changed, 437 insertions(+), 411 deletions(-) create mode 100644 src/components/Toast.tsx diff --git a/.cursor/skills/danak-admin/SKILL.md b/.cursor/skills/danak-admin/SKILL.md index 555a9b5..8b707f0 100644 --- a/.cursor/skills/danak-admin/SKILL.md +++ b/.cursor/skills/danak-admin/SKILL.md @@ -69,7 +69,7 @@ export const createCustomer = async (params: CreateCustomerType) => { **List** — header + optional filters + `PageLoading` while pending + `` with `Td` + `Pagination`. Link actions via `Pages.{feature}.*`. -**Create / Update** — Formik + Yup validation, `toast.success(t('success'))` on success, `toast.error(error.response?.data?.error.message[0])` on error (`ErrorType` from `src/helpers/types.ts`). Navigate back to list with `useNavigate()` + `Pages.*`. +**Create / Update** — Formik + Yup validation, `toast(t('success'), 'success')` on success, `toast(error.response?.data?.error.message[0], 'error')` on error (`ErrorType` from `src/helpers/types.ts`). Import `toast` from `src/components/Toast`. Navigate back to list with `useNavigate()` + `Pages.*`. **Delete** — small component using `ModalConfrim` + mutation hook; call `refetch()` or rely on query invalidation. diff --git a/package-lock.json b/package-lock.json index 7334407..6ff6cce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,6 @@ "react-otp-input": "^3.1.1", "react-router-dom": "^7.1.0", "react-spinners": "^0.15.0", - "react-toastify": "^11.0.2", "swiper": "^11.2.1", "tailwind-merge": "^2.5.5", "vite-plugin-pwa": "^0.21.1", @@ -7298,19 +7297,6 @@ "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/react-toastify": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-11.0.2.tgz", - "integrity": "sha512-GjHuGaiXMvbls3ywqv8XdWONwrcO4DXCJIY1zVLkHU73gEElKvTTXNI5Vom3s/k/M8hnkrfsqgBSX3OwmlonbA==", - "license": "MIT", - "dependencies": { - "clsx": "^2.1.1" - }, - "peerDependencies": { - "react": "^18 || ^19", - "react-dom": "^18 || ^19" - } - }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", diff --git a/package.json b/package.json index 6cc08df..c6c4af9 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,6 @@ "react-otp-input": "^3.1.1", "react-router-dom": "^7.1.0", "react-spinners": "^0.15.0", - "react-toastify": "^11.0.2", "swiper": "^11.2.1", "tailwind-merge": "^2.5.5", "vite-plugin-pwa": "^0.21.1", diff --git a/src/App.tsx b/src/App.tsx index 934a883..eaa16f8 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,30 +1,30 @@ -import { FC, useEffect, useState } from 'react' -import { BrowserRouter } from 'react-router-dom' -import 'swiper/swiper-bundle.css'; -import 'rc-rate/assets/index.css'; +import { QueryCache, QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import i18next from "i18next"; import "quill/dist/quill.snow.css"; -import "react-multi-date-picker/styles/layouts/mobile.css" -import i18next from 'i18next' -import { I18nextProvider } from 'react-i18next' -import { QueryCache, QueryClient, QueryClientProvider } from '@tanstack/react-query' -import { ToastContainer } from 'react-toastify' -import FaJson from './langs/fa.json' -import { IApiErrorRepsonse } from './types/error.types' -import MainRouter from './router/Main' -import AuthRouter from './router/Auth' -import { Pages } from './config/Pages' -import { getRefreshToken, setToken, setRefreshToken, removeToken, removeRefreshToken, getToken } from './config/func'; -import { refreshToken } from './pages/auth/service/AuthService'; +import "rc-rate/assets/index.css"; +import { FC, useEffect, useState } from "react"; +import { I18nextProvider } from "react-i18next"; +import "react-multi-date-picker/styles/layouts/mobile.css"; +import { BrowserRouter } from "react-router-dom"; +import "swiper/swiper-bundle.css"; +import ToastContainer from "./components/Toast"; +import { Pages } from "./config/Pages"; +import { getRefreshToken, getToken, removeRefreshToken, removeToken, setRefreshToken, setToken } from "./config/func"; +import FaJson from "./langs/fa.json"; +import { refreshToken } from "./pages/auth/service/AuthService"; +import AuthRouter from "./router/Auth"; +import MainRouter from "./router/Main"; +import { IApiErrorRepsonse } from "./types/error.types"; i18next.init({ interpolation: { escapeValue: false }, - lng: 'fa', + lng: "fa", resources: { fa: { - global: FaJson - } - } -}) + global: FaJson, + }, + }, +}); declare global { interface Window { @@ -40,7 +40,7 @@ const queryClient = new QueryClient({ // Use a flag to track if refresh is in progress if (window.isRefreshingToken) { // Wait for the refresh to complete - await new Promise(resolve => { + await new Promise((resolve) => { const checkComplete = setInterval(() => { if (!window.isRefreshingToken) { clearInterval(checkComplete); @@ -56,7 +56,7 @@ const queryClient = new QueryClient({ try { const refreshTokenValue = await getRefreshToken(); - const { data } = await refreshToken({ refreshToken: refreshTokenValue || '' }); + const { data } = await refreshToken({ refreshToken: refreshTokenValue || "" }); if (data?.accessToken?.token) { // Save the new token @@ -71,67 +71,54 @@ const queryClient = new QueryClient({ queryClient.invalidateQueries(); return; } else { - throw new Error('Invalid token response'); + throw new Error("Invalid token response"); } } finally { window.isRefreshingToken = false; } } catch (refreshError: unknown) { - console.error('Token refresh failed:', refreshError); + console.error("Token refresh failed:", refreshError); // Clear tokens and redirect to login await removeToken(); await removeRefreshToken(); - window.location.href = '/auth/login'; + window.location.href = "/auth/login"; } } - } + }, }), defaultOptions: { queries: { refetchOnWindowFocus: false, - retry: false + retry: false, // staleTime: 86400000 // 1 day in milliseconds - } - } + }, + }, }); const App: FC = () => { - - const [isLogin, setIsLogin] = useState<'checking' | 'isLogin' | 'isNotLogin'>('checking') + const [isLogin, setIsLogin] = useState<"checking" | "isLogin" | "isNotLogin">("checking"); useEffect(() => { - const token = getToken() + const token = getToken(); if (token) { - setIsLogin('isLogin') + setIsLogin("isLogin"); } else { - setIsLogin('isNotLogin') - if (window.location.href.split('auth').length === 1) { - window.location.href = Pages.auth.login + setIsLogin("isNotLogin"); + if (window.location.href.split("auth").length === 1) { + window.location.href = Pages.auth.login; } } - - }, []) - - - + }, []); return ( - { - isLogin === 'checking' ? - null - : - isLogin === 'isLogin' ? - - : - - } + {isLogin === "checking" ? null : isLogin === "isLogin" ? : } - ) -} + ); +}; -export default App \ No newline at end of file +export default App; diff --git a/src/components/Toast.tsx b/src/components/Toast.tsx new file mode 100644 index 0000000..5cfa33f --- /dev/null +++ b/src/components/Toast.tsx @@ -0,0 +1,54 @@ +'use client' +import { CloseCircle, InfoCircle, TickCircle } from 'iconsax-react'; +import React, { useState, useEffect } from 'react'; + +interface Toast { + id: string; + message: string; + type?: 'success' | 'error' | 'info'; +} + +let addToast: (toast: Toast) => void = () => {}; + +const ToastContainer: React.FC = () => { + const [toasts, setToasts] = useState([]); + + const showToast = (toastItem: Toast) => { + setToasts((prev) => [...prev, toastItem]); + + setTimeout(() => { + setToasts((prev) => prev.filter((t) => t.id !== toastItem.id)); + }, 3000); + }; + + useEffect(() => { + addToast = showToast; + }, []); + + return ( +
+ {toasts.map((toastItem) => ( +
+ {toastItem.type === 'success' ? ( + + ) : toastItem.type === 'error' ? ( + + ) : ( + + )} + {toastItem.message} +
+ ))} +
+ ); +}; + +export const toast = (message: string | undefined, type: 'success' | 'error' | 'info' = 'info') => { + if (!message) return; + addToast({ id: `${Date.now()}-${Math.random()}`, message, type }); +}; + +export default ToastContainer; diff --git a/src/pages/ads/CreateAds.tsx b/src/pages/ads/CreateAds.tsx index f148c3e..660f981 100644 --- a/src/pages/ads/CreateAds.tsx +++ b/src/pages/ads/CreateAds.tsx @@ -13,7 +13,7 @@ import CheckBoxComponent from '../../components/CheckBoxComponent' import { useSingleUpload } from '../service/hooks/useServiceData' import { useCreateAds } from './hooks/useAdsData' import { ErrorType } from '../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { clx } from '../../helpers/utils' import { useNavigate } from 'react-router-dom' import { Pages } from '../../config/Pages' @@ -54,21 +54,21 @@ const CreateAd: FC = () => { values.imageUrl = data?.data?.url }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) createAds.mutate(values, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.ads.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } else { - toast.error(t('ads.file_error')) + toast(t('ads.file_error'), 'error') } } }) diff --git a/src/pages/ads/Update.tsx b/src/pages/ads/Update.tsx index 8317f0a..7c1f5e5 100644 --- a/src/pages/ads/Update.tsx +++ b/src/pages/ads/Update.tsx @@ -13,7 +13,7 @@ import CheckBoxComponent from '../../components/CheckBoxComponent' import { useSingleUpload } from '../service/hooks/useServiceData' import { useGetDetailAds, useUpdateAds } from './hooks/useAdsData' import { ErrorType } from '../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { clx } from '../../helpers/utils' import { useNavigate, useParams } from 'react-router-dom' import { Pages } from '../../config/Pages' @@ -56,18 +56,18 @@ const UpdateAds: FC = () => { values.imageUrl = data?.data?.url }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } updateAds.mutate(values, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.ads.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) diff --git a/src/pages/annoncement/Create.tsx b/src/pages/annoncement/Create.tsx index d591523..8c90aa3 100644 --- a/src/pages/annoncement/Create.tsx +++ b/src/pages/annoncement/Create.tsx @@ -14,7 +14,7 @@ import * as Yup from 'yup' import { ServiceItemType } from '../service/types/ServiceTypes' import { useCreateAnnoncement, useGetCustomersService } from './hooks/useAnnoncementData' import { ErrorType } from '../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import moment from 'moment-jalaali' import { useNavigate } from 'react-router-dom' import { Pages } from '../../config/Pages' @@ -57,11 +57,11 @@ const Create: FC = () => { createAnnoncement.mutate(values, { onSuccess: () => { formik.resetForm() - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.announcement.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/annoncement/List.tsx b/src/pages/annoncement/List.tsx index 4fd7a3b..bfbc6f4 100644 --- a/src/pages/annoncement/List.tsx +++ b/src/pages/annoncement/List.tsx @@ -9,7 +9,7 @@ import { Add, Edit, Trash } from 'iconsax-react' import Td from '../../components/Td' import moment from 'moment-jalaali' import Pagination from '../../components/Pagination' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { ErrorType } from '../../helpers/types' const AnnouncementtList: FC = () => { @@ -22,11 +22,11 @@ const AnnouncementtList: FC = () => { const handleDelete = (id: string) => { deleteAnnoncement.mutate(id, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') getAnnoncements.refetch() }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) } diff --git a/src/pages/annoncement/Update.tsx b/src/pages/annoncement/Update.tsx index 55326a8..b2019bd 100644 --- a/src/pages/annoncement/Update.tsx +++ b/src/pages/annoncement/Update.tsx @@ -14,7 +14,7 @@ import * as Yup from 'yup' import { ServiceItemType } from '../service/types/ServiceTypes' import { useGetAnnoncementDetail, useGetCustomersService, useUpdateAnnoncement } from './hooks/useAnnoncementData' import { ErrorType } from '../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import moment from 'moment-jalaali' import { useNavigate, useParams } from 'react-router-dom' import { Pages } from '../../config/Pages' @@ -59,11 +59,11 @@ const Update: FC = () => { updateAnnoncement.mutate(values, { onSuccess: () => { formik.resetForm() - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.announcement.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/auth/components/LoginStep1.tsx b/src/pages/auth/components/LoginStep1.tsx index c3089cc..2360d0c 100644 --- a/src/pages/auth/components/LoginStep1.tsx +++ b/src/pages/auth/components/LoginStep1.tsx @@ -9,7 +9,7 @@ import Error from '../../../components/Error' import Button from '../../../components/Button' import { isEmail } from '../../../config/func' import { useCheckHasAccount, useLoginWithOtp } from '../hooks/useAuthData' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { ErrorType } from '../../../helpers/types' const LoginStep1: FC = () => { @@ -35,7 +35,7 @@ const LoginStep1: FC = () => { setStepLogin(2) }, onError(error: ErrorType) { - toast.error(error?.response?.data?.error?.message[0]) + toast(error?.response?.data?.error?.message[0], 'error') }, }) } else { @@ -43,10 +43,10 @@ const LoginStep1: FC = () => { loginWithOtp.mutate({ phone: values.phone_email }, { onSuccess() { setStepLogin(2) - toast.success(t('auth.otp_sent')) + toast(t('auth.otp_sent'), 'success') }, onError(error: ErrorType) { - toast.error(error?.response?.data?.error?.message[0]) + toast(error?.response?.data?.error?.message[0], 'error') }, }) } diff --git a/src/pages/auth/components/LoginStep2.tsx b/src/pages/auth/components/LoginStep2.tsx index 4fa02a8..46c8199 100644 --- a/src/pages/auth/components/LoginStep2.tsx +++ b/src/pages/auth/components/LoginStep2.tsx @@ -11,7 +11,7 @@ import { useCountDown } from '../../../hooks/useCountDown' import { Pages } from '../../../config/Pages' import { useOtpVerify } from '../hooks/useAuthData' import { ErrorType } from '../../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { setToken, setRefreshToken } from '../../../config/func' const LoginStep2: FC = () => { @@ -42,7 +42,7 @@ const LoginStep2: FC = () => { window.location.href = Pages.dashboard }, onError(error: ErrorType) { - toast.error(error?.response?.data?.error?.message[0]) + toast(error?.response?.data?.error?.message[0], 'error') }, }) }, diff --git a/src/pages/auth/components/LoginStep3.tsx b/src/pages/auth/components/LoginStep3.tsx index 2c74191..d59fdc1 100644 --- a/src/pages/auth/components/LoginStep3.tsx +++ b/src/pages/auth/components/LoginStep3.tsx @@ -11,7 +11,7 @@ import { Link } from 'react-router-dom' import { Pages } from '../../../config/Pages' import ArrowLeftIcon from '../../../assets/images/arrow-left.svg' import { useLoginWithPassword } from '../hooks/useAuthData' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { ErrorType } from '../../../helpers/types' import { setRefreshToken } from '../../../config/func' import { setToken } from '../../../config/func' @@ -39,7 +39,7 @@ const LoginStep3: FC = () => { window.location.href = Pages.dashboard }, onError(error: ErrorType) { - toast.error(error?.response?.data?.error?.message[0]) + toast(error?.response?.data?.error?.message[0], 'error') }, }) diff --git a/src/pages/auth/components/RegisterStep1.tsx b/src/pages/auth/components/RegisterStep1.tsx index 9122f13..64c2cf7 100644 --- a/src/pages/auth/components/RegisterStep1.tsx +++ b/src/pages/auth/components/RegisterStep1.tsx @@ -8,7 +8,7 @@ import { useAuthStore } from '../store/AuthStore' import Error from '../../../components/Error' import Button from '../../../components/Button' import { useCheckHasAccountRegister, useLoginWithOtp } from '../hooks/useAuthData' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { ErrorType } from '../../../helpers/types' const RegisterStep1: FC = () => { @@ -33,7 +33,7 @@ const RegisterStep1: FC = () => { setStepLogin(2) }, onError(error: ErrorType) { - toast.error(error?.response?.data?.error?.message[0]) + toast(error?.response?.data?.error?.message[0], 'error') }, }) }, diff --git a/src/pages/auth/components/RegisterStep2.tsx b/src/pages/auth/components/RegisterStep2.tsx index 4cf4c09..58ee43a 100644 --- a/src/pages/auth/components/RegisterStep2.tsx +++ b/src/pages/auth/components/RegisterStep2.tsx @@ -9,7 +9,7 @@ import DatePickerComponent from '../../../components/DatePicker' import Button from '../../../components/Button' import { useRegister } from '../hooks/useAuthData' import { ErrorType } from '../../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { Pages } from '../../../config/Pages' const RegisterStep2: FC = () => { @@ -52,7 +52,7 @@ const RegisterStep2: FC = () => { window.location.href = Pages.dashboard }, onError(error: ErrorType) { - toast.error(error?.response?.data?.error?.message[0]) + toast(error?.response?.data?.error?.message[0], 'error') }, }) }, diff --git a/src/pages/blog/BlogCategory.tsx b/src/pages/blog/BlogCategory.tsx index 189e26f..f851511 100644 --- a/src/pages/blog/BlogCategory.tsx +++ b/src/pages/blog/BlogCategory.tsx @@ -15,7 +15,7 @@ import * as Yup from 'yup' import Textarea from '../../components/Textarea' import UploadBoxDraggble from '../../components/UploadBoxDraggble' import { useSingleUpload } from '../service/hooks/useServiceData' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import UpdateCategory from './components/UpdateCategory' const BlogCategory: FC = () => { @@ -38,7 +38,7 @@ const BlogCategory: FC = () => { }), onSubmit: async (values) => { if (!file) { - toast.error('فایل را انتخاب کنید') + toast('فایل را انتخاب کنید', 'error') return } const formData = new FormData() @@ -51,7 +51,7 @@ const BlogCategory: FC = () => { createBlogCategory.mutateAsync(values, { onSuccess: () => { - toast.success('دسته بندی با موفقیت ثبت شد') + toast('دسته بندی با موفقیت ثبت شد', 'success') setFile(undefined) formik.resetForm() getBlogCategories.refetch() @@ -106,7 +106,7 @@ const BlogCategory: FC = () => { { deleteBlogCategory.mutateAsync(item.id, { onSuccess: () => { - toast.success('دسته بندی با موفقیت حذف شد') + toast('دسته بندی با موفقیت حذف شد', 'success') getBlogCategories.refetch() } }) diff --git a/src/pages/blog/Comments.tsx b/src/pages/blog/Comments.tsx index aa46a0d..e54be75 100644 --- a/src/pages/blog/Comments.tsx +++ b/src/pages/blog/Comments.tsx @@ -6,7 +6,7 @@ import { BlogCommentType } from './types/BlogTypes' import moment from 'moment-jalaali' import { CloseCircle, TickCircle } from 'iconsax-react' import { ErrorType } from '../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; const Comments: FC = () => { const { t } = useTranslation('global') const getBlogComments = useGetBlogComments() @@ -17,7 +17,7 @@ const Comments: FC = () => { getBlogComments.refetch() }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) } diff --git a/src/pages/blog/CreateBlog.tsx b/src/pages/blog/CreateBlog.tsx index c5934d3..cb45557 100644 --- a/src/pages/blog/CreateBlog.tsx +++ b/src/pages/blog/CreateBlog.tsx @@ -12,7 +12,7 @@ import CheckBoxComponent from '../../components/CheckBoxComponent' import UploadBoxDraggble from '../../components/UploadBoxDraggble' import QuillEditor from '../../components/QuillEditor' import { useSingleUpload } from '../service/hooks/useServiceData' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { ErrorType } from '../../helpers/types' import { Pages } from '../../config/Pages' import { useNavigate } from 'react-router-dom' @@ -57,7 +57,7 @@ const CreateBlog: FC = () => { }), onSubmit: async (values) => { if (!file) { - toast.error(t('errors.required')) + toast(t('errors.required'), 'error') return } @@ -88,11 +88,11 @@ const CreateBlog: FC = () => { createBlog.mutate(values, { onSuccess() { setIsSaved(true) - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.blog.list) }, onError(error: ErrorType) { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) }, diff --git a/src/pages/blog/Update.tsx b/src/pages/blog/Update.tsx index e94f3ad..6b55312 100644 --- a/src/pages/blog/Update.tsx +++ b/src/pages/blog/Update.tsx @@ -12,7 +12,7 @@ import CheckBoxComponent from '../../components/CheckBoxComponent' import UploadBoxDraggble from '../../components/UploadBoxDraggble' import QuillEditor from '../../components/QuillEditor' import { useSingleUpload } from '../service/hooks/useServiceData' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { ErrorType } from '../../helpers/types' import { Pages } from '../../config/Pages' import { useNavigate, useParams } from 'react-router-dom' @@ -87,11 +87,11 @@ const UpdateBlog: FC = () => { updateBlog.mutate({ id: id || '', params: values }, { onSuccess() { setIsSaved(true) - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.blog.list) }, onError(error: ErrorType) { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) }, diff --git a/src/pages/blog/components/UpdateCategory.tsx b/src/pages/blog/components/UpdateCategory.tsx index a4558af..d7138de 100644 --- a/src/pages/blog/components/UpdateCategory.tsx +++ b/src/pages/blog/components/UpdateCategory.tsx @@ -10,7 +10,7 @@ import UploadBox from '../../../components/UploadBox' import { useSingleUpload } from '../../service/hooks/useServiceData' import SwitchComponent from '../../../components/Switch' import Button from '../../../components/Button' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { ErrorType } from '../../../helpers/types' interface Props { id: string @@ -42,12 +42,12 @@ const UpdateCategory: FC = ({ id }) => { } updateBlogCategory.mutateAsync({ id: id, params: values }, { onSuccess: () => { - toast.success('دسته بندی با موفقیت ویرایش شد') + toast('دسته بندی با موفقیت ویرایش شد', 'success') setIsOpen(false) window.location.reload() }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) } diff --git a/src/pages/cardBank/Create.tsx b/src/pages/cardBank/Create.tsx index d53b62f..1c8d690 100644 --- a/src/pages/cardBank/Create.tsx +++ b/src/pages/cardBank/Create.tsx @@ -11,7 +11,7 @@ import { useCreateBank } from './hooks/useCardBankData' import { useNavigate } from 'react-router-dom' import { Pages } from '../../config/Pages' import { ErrorType } from '../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; const CreateBankCard: FC = () => { @@ -40,7 +40,7 @@ const CreateBankCard: FC = () => { navigate(Pages.cardBank.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/cardBank/Edit.tsx b/src/pages/cardBank/Edit.tsx index c374ab8..ef03d45 100644 --- a/src/pages/cardBank/Edit.tsx +++ b/src/pages/cardBank/Edit.tsx @@ -11,7 +11,7 @@ import { useGetCardBankDetail, useUpdateBank } from './hooks/useCardBankData' import { useNavigate, useParams } from 'react-router-dom' import { Pages } from '../../config/Pages' import { ErrorType } from '../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; const EditBankCard: FC = () => { @@ -42,7 +42,7 @@ const EditBankCard: FC = () => { navigate(Pages.cardBank.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/customer/Create.tsx b/src/pages/customer/Create.tsx index 269941d..cab81e4 100644 --- a/src/pages/customer/Create.tsx +++ b/src/pages/customer/Create.tsx @@ -11,7 +11,7 @@ import { useFormik } from 'formik'; import { CreateCustomerType, ProvinesItemType } from './types/CustomerTypes'; import { useCreateCustomer, useGetCities, useGetProvines } from './hooks/useCustomerData'; import PageLoading from '../../components/PageLoading'; -import { toast } from 'react-toastify'; +import { toast } from '../../components/Toast'; import { ErrorType } from '../../helpers/types'; import { useSingleUpload } from '../service/hooks/useServiceData'; import { useNavigate } from 'react-router-dom'; @@ -32,11 +32,11 @@ const AddCustomer: FC = () => { const handleCreateCustomer = (values: CreateCustomerType) => { createCustomer.mutate(values, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.customer.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) } @@ -88,7 +88,7 @@ const AddCustomer: FC = () => { values.profilePic = data?.data?.url }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) diff --git a/src/pages/customer/Update.tsx b/src/pages/customer/Update.tsx index 470a1d7..371de50 100644 --- a/src/pages/customer/Update.tsx +++ b/src/pages/customer/Update.tsx @@ -11,7 +11,7 @@ import { useFormik } from 'formik'; import { CreateCustomerType, ProvinesItemType } from './types/CustomerTypes'; import { useGetCities, useGetCustomerDetail, useGetProvines, useUpdateCustomer } from './hooks/useCustomerData'; import PageLoading from '../../components/PageLoading'; -import { toast } from 'react-toastify'; +import { toast } from '../../components/Toast'; import { ErrorType } from '../../helpers/types'; import { useSingleUpload } from '../service/hooks/useServiceData'; import { useNavigate, useParams } from 'react-router-dom'; @@ -34,11 +34,11 @@ const UpdateCustomer: FC = () => { const handleUpdateCustomer = (values: CreateCustomerType) => { updateCustomer.mutate(values, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.customer.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) } @@ -87,7 +87,7 @@ const UpdateCustomer: FC = () => { values.profilePic = data?.data?.url }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) diff --git a/src/pages/discounts/CreateDiscount.tsx b/src/pages/discounts/CreateDiscount.tsx index b4886b0..c305533 100644 --- a/src/pages/discounts/CreateDiscount.tsx +++ b/src/pages/discounts/CreateDiscount.tsx @@ -12,7 +12,7 @@ import * as Yup from 'yup' import { useGetAllServices } from '../service/hooks/useServiceData' import { ServiceItemType } from '../service/types/ServiceTypes' import CheckBoxComponent from '../../components/CheckBoxComponent' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { useCreateDiscount } from './hooks/useDiscountData' import { useNavigate } from 'react-router-dom' import { Pages } from '../../config/Pages' @@ -64,11 +64,11 @@ const CreateDiscount: FC = () => { } createDiscount.mutate(params, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.discount.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) }, diff --git a/src/pages/discounts/DiscountsList.tsx b/src/pages/discounts/DiscountsList.tsx index 5fa6442..612a6dc 100644 --- a/src/pages/discounts/DiscountsList.tsx +++ b/src/pages/discounts/DiscountsList.tsx @@ -12,7 +12,7 @@ import moment from 'moment-jalaali' import ToggleStatusDiscount from './components/ToggleStatusDiscount' import PageLoading from '../../components/PageLoading' import { NumberFormat } from '../../config/func' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { ErrorType } from '../../helpers/types' const DiscountList: FC = () => { @@ -26,10 +26,10 @@ const DiscountList: FC = () => { deleteDiscount.mutate(id, { onSuccess: () => { getDiscounts.refetch() - toast.success(t('success')) + toast(t('success'), 'success') }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) } diff --git a/src/pages/discounts/UpdateDiscount.tsx b/src/pages/discounts/UpdateDiscount.tsx index 22e068c..ccdc36b 100644 --- a/src/pages/discounts/UpdateDiscount.tsx +++ b/src/pages/discounts/UpdateDiscount.tsx @@ -12,7 +12,7 @@ import * as Yup from 'yup' import { useGetAllServices } from '../service/hooks/useServiceData' import { ServiceItemType } from '../service/types/ServiceTypes' import CheckBoxComponent from '../../components/CheckBoxComponent' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { useGetDiscountDetail, useUpdateDiscount } from './hooks/useDiscountData' import { useNavigate, useParams } from 'react-router-dom' import { Pages } from '../../config/Pages' @@ -66,11 +66,11 @@ const UpdateDiscount: FC = () => { } updateDiscount.mutate({ id: id || '', params }, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.discount.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) }, diff --git a/src/pages/dkala/icon/GroupList.tsx b/src/pages/dkala/icon/GroupList.tsx index 066d565..42f10d8 100644 --- a/src/pages/dkala/icon/GroupList.tsx +++ b/src/pages/dkala/icon/GroupList.tsx @@ -8,7 +8,7 @@ import Td from '../../../components/Td' import Input from '../../../components/Input' import PageLoading from '../../../components/PageLoading' import TrashWithConfrim from '../../../components/TrashWithConfrim' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { ErrorType } from '../../../helpers/types' import { GroupIconType } from '../types/Types' @@ -29,10 +29,10 @@ const GroupIconList: FC = () => { deleteGroupIcon.mutate(id, { onSuccess: () => { refetch() - toast.success(t('success')) + toast(t('success'), 'success') }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/dkala/icon/List.tsx b/src/pages/dkala/icon/List.tsx index 8c39757..a396284 100644 --- a/src/pages/dkala/icon/List.tsx +++ b/src/pages/dkala/icon/List.tsx @@ -8,7 +8,7 @@ import Td from '../../../components/Td' import Input from '../../../components/Input' import PageLoading from '../../../components/PageLoading' import TrashWithConfrim from '../../../components/TrashWithConfrim' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { ErrorType } from '../../../helpers/types' import { IconType } from '../types/Types' import moment from 'moment-jalaali' @@ -30,10 +30,10 @@ const IconsList: FC = () => { deleteIcon.mutate(id, { onSuccess: () => { refetch() - toast.success(t('success')) + toast(t('success'), 'success') }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/dkala/icon/components/CreateGroupIcon.tsx b/src/pages/dkala/icon/components/CreateGroupIcon.tsx index 32ca1e4..cb72f7f 100644 --- a/src/pages/dkala/icon/components/CreateGroupIcon.tsx +++ b/src/pages/dkala/icon/components/CreateGroupIcon.tsx @@ -5,7 +5,7 @@ import DefaulModal from '../../../../components/DefaulModal' import Input from '../../../../components/Input' import { useFormik } from 'formik' import * as Yup from 'yup' -import { toast } from 'react-toastify' +import { toast } from '../../../../components/Toast'; import { TickCircle } from 'iconsax-react' import { useCreateGroupIcon } from '../../hooks/useIconData' import { CreateGroupIconType } from '../../types/Types' @@ -34,11 +34,11 @@ const CreateGroupIcon: FC = ({ open, close, onSuccess }) = onSuccess: () => { formik.resetForm() close() - toast.success(t('success')) + toast(t('success'), 'success') onSuccess?.() }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/dkala/icon/components/CreateIcon.tsx b/src/pages/dkala/icon/components/CreateIcon.tsx index 24c452c..20cc76a 100644 --- a/src/pages/dkala/icon/components/CreateIcon.tsx +++ b/src/pages/dkala/icon/components/CreateIcon.tsx @@ -6,7 +6,7 @@ import UploadBox from '../../../../components/UploadBox' import Select from '../../../../components/Select' import { useFormik } from 'formik' import * as Yup from 'yup' -import { toast } from 'react-toastify' +import { toast } from '../../../../components/Toast'; import { TickCircle } from 'iconsax-react' import { useCreateIcon, useGetGroupIcons } from '../../hooks/useIconData' import { useMultiUpload } from '../../../service/hooks/useServiceData' @@ -44,7 +44,7 @@ const CreateIcon: FC = ({ open, close, onSuccess }) => { }), onSubmit: async (values) => { if (files.length === 0) { - toast.error(t('errors.required')) + toast(t('errors.required'), 'error') return } @@ -67,11 +67,11 @@ const CreateIcon: FC = ({ open, close, onSuccess }) => { formik.resetForm() setFiles([]) close() - toast.success(t('success')) + toast(t('success'), 'success') onSuccess?.() } catch (error) { const err = error as ErrorType - toast.error(err.response?.data?.error?.message?.[0]) + toast(err.response?.data?.error?.message?.[0], 'error') } finally { setIsSubmitting(false) } diff --git a/src/pages/dkala/shop/List.tsx b/src/pages/dkala/shop/List.tsx index 0d0ec25..b7315c3 100644 --- a/src/pages/dkala/shop/List.tsx +++ b/src/pages/dkala/shop/List.tsx @@ -6,7 +6,7 @@ import Td from '../../../components/Td' import { ShopType, ShopsResponse } from '../types/Types' import moment from 'moment-jalaali' import { Edit } from 'iconsax-react' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import Button from '../../../components/Button' import ShopAdminsModal from './components/ShopAdminsModal' import Pagination from '../../../components/Pagination' @@ -56,11 +56,11 @@ const ShopsList: FC = () => { const handleDeleteShop = (shopId: string) => { deleteShop.mutate(shopId, { onSuccess: () => { - toast.success('فروشگاه با موفقیت حذف شد') + toast('فروشگاه با موفقیت حذف شد', 'success') queryClient.invalidateQueries({ queryKey: ['shops'] }) }, onError: () => { - toast.error('خطا در حذف فروشگاه') + toast('خطا در حذف فروشگاه', 'error') } }) } diff --git a/src/pages/dkala/shop/Update.tsx b/src/pages/dkala/shop/Update.tsx index aed2cef..a0549a9 100644 --- a/src/pages/dkala/shop/Update.tsx +++ b/src/pages/dkala/shop/Update.tsx @@ -10,7 +10,7 @@ import SwitchComponent from '../../../components/Switch' import Button from '../../../components/Button' import DatePickerComponent from '../../../components/DatePicker' import PageLoading from '../../../components/PageLoading' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { ErrorType } from '../../../helpers/types' import { TickCircle } from 'iconsax-react' import { Pages } from '../../../config/Pages' @@ -57,13 +57,13 @@ const UpdateShop: FC = () => { { id, params }, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') queryClient.invalidateQueries({ queryKey: ['shops'] }) queryClient.invalidateQueries({ queryKey: ['shop', id] }) navigate(Pages.dkala.shops.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message?.[0] || 'خطا در بروزرسانی فروشگاه') + toast(error.response?.data?.error?.message?.[0] || 'خطا در بروزرسانی فروشگاه', 'error') } } ) diff --git a/src/pages/dkala/shop/components/AddShopAdminForm.tsx b/src/pages/dkala/shop/components/AddShopAdminForm.tsx index 7c525c1..27d8fae 100644 --- a/src/pages/dkala/shop/components/AddShopAdminForm.tsx +++ b/src/pages/dkala/shop/components/AddShopAdminForm.tsx @@ -9,7 +9,7 @@ import Button from '../../../../components/Button' import { useAddAdminShop, useGetSystemRoles } from '../../hooks/useIconData' import { SystemRoleType } from '../../types/Types' import { ErrorType } from '../../../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../../../components/Toast'; import { TickCircle } from 'iconsax-react' interface AddShopAdminFormProps { @@ -46,13 +46,13 @@ const AddShopAdminForm: FC = ({ onSubmit: (values) => { addAdmin(values, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') formik.resetForm() onSuccess() onClose() }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/dkala/shop/components/ShopAdminsModal.tsx b/src/pages/dkala/shop/components/ShopAdminsModal.tsx index d0e7553..874b882 100644 --- a/src/pages/dkala/shop/components/ShopAdminsModal.tsx +++ b/src/pages/dkala/shop/components/ShopAdminsModal.tsx @@ -7,7 +7,7 @@ import Td from '../../../../components/Td' import { ShopAdminType } from '../../types/Types' import moment from 'moment-jalaali' import TrashWithConfrim from '../../../../components/TrashWithConfrim' -import { toast } from 'react-toastify' +import { toast } from '../../../../components/Toast'; import { ErrorType } from '../../../../helpers/types' import Button from '../../../../components/Button' import AddShopAdminForm from './AddShopAdminForm' @@ -31,10 +31,10 @@ const ShopAdminsModal: FC = ({ open, close, shopId }) => { deleteAdmin({ shopId, adminId }, { onSuccess: () => { refetch() - toast.success(t('success')) + toast(t('success'), 'success') }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/dmenu/icon/GroupList.tsx b/src/pages/dmenu/icon/GroupList.tsx index 9d0c569..a11eb61 100644 --- a/src/pages/dmenu/icon/GroupList.tsx +++ b/src/pages/dmenu/icon/GroupList.tsx @@ -8,7 +8,7 @@ import Td from '../../../components/Td' import Input from '../../../components/Input' import PageLoading from '../../../components/PageLoading' import TrashWithConfrim from '../../../components/TrashWithConfrim' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { ErrorType } from '../../../helpers/types' import { GroupIconType } from '../types/Types' @@ -29,10 +29,10 @@ const GroupIconList: FC = () => { deleteGroupIcon.mutate(id, { onSuccess: () => { refetch() - toast.success(t('success')) + toast(t('success'), 'success') }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/dmenu/icon/List.tsx b/src/pages/dmenu/icon/List.tsx index d36e029..73e01a1 100644 --- a/src/pages/dmenu/icon/List.tsx +++ b/src/pages/dmenu/icon/List.tsx @@ -8,7 +8,7 @@ import Td from '../../../components/Td' import Input from '../../../components/Input' import PageLoading from '../../../components/PageLoading' import TrashWithConfrim from '../../../components/TrashWithConfrim' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { ErrorType } from '../../../helpers/types' import { IconType } from '../types/Types' import moment from 'moment-jalaali' @@ -30,10 +30,10 @@ const IconsList: FC = () => { deleteIcon.mutate(id, { onSuccess: () => { refetch() - toast.success(t('success')) + toast(t('success'), 'success') }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/dmenu/icon/components/CreateGroupIcon.tsx b/src/pages/dmenu/icon/components/CreateGroupIcon.tsx index 843c739..c74321a 100644 --- a/src/pages/dmenu/icon/components/CreateGroupIcon.tsx +++ b/src/pages/dmenu/icon/components/CreateGroupIcon.tsx @@ -5,7 +5,7 @@ import DefaulModal from '../../../../components/DefaulModal' import Input from '../../../../components/Input' import { useFormik } from 'formik' import * as Yup from 'yup' -import { toast } from 'react-toastify' +import { toast } from '../../../../components/Toast'; import { TickCircle } from 'iconsax-react' import { useCreateGroupIcon } from '../../hooks/useIconData' import { CreateGroupIconType } from '../../types/Types' @@ -34,11 +34,11 @@ const CreateGroupIcon: FC = ({ open, close, onSuccess }) = onSuccess: () => { formik.resetForm() close() - toast.success(t('success')) + toast(t('success'), 'success') onSuccess?.() }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/dmenu/icon/components/CreateIcon.tsx b/src/pages/dmenu/icon/components/CreateIcon.tsx index 24c452c..20cc76a 100644 --- a/src/pages/dmenu/icon/components/CreateIcon.tsx +++ b/src/pages/dmenu/icon/components/CreateIcon.tsx @@ -6,7 +6,7 @@ import UploadBox from '../../../../components/UploadBox' import Select from '../../../../components/Select' import { useFormik } from 'formik' import * as Yup from 'yup' -import { toast } from 'react-toastify' +import { toast } from '../../../../components/Toast'; import { TickCircle } from 'iconsax-react' import { useCreateIcon, useGetGroupIcons } from '../../hooks/useIconData' import { useMultiUpload } from '../../../service/hooks/useServiceData' @@ -44,7 +44,7 @@ const CreateIcon: FC = ({ open, close, onSuccess }) => { }), onSubmit: async (values) => { if (files.length === 0) { - toast.error(t('errors.required')) + toast(t('errors.required'), 'error') return } @@ -67,11 +67,11 @@ const CreateIcon: FC = ({ open, close, onSuccess }) => { formik.resetForm() setFiles([]) close() - toast.success(t('success')) + toast(t('success'), 'success') onSuccess?.() } catch (error) { const err = error as ErrorType - toast.error(err.response?.data?.error?.message?.[0]) + toast(err.response?.data?.error?.message?.[0], 'error') } finally { setIsSubmitting(false) } diff --git a/src/pages/dmenu/restaurant/List.tsx b/src/pages/dmenu/restaurant/List.tsx index cb36ec6..1e9bc85 100644 --- a/src/pages/dmenu/restaurant/List.tsx +++ b/src/pages/dmenu/restaurant/List.tsx @@ -6,7 +6,7 @@ import Td from '../../../components/Td' import { RestaurantType, RestaurantsResponse } from '../types/Types' import moment from 'moment-jalaali' import { Edit } from 'iconsax-react' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import Button from '../../../components/Button' import RestaurantAdminsModal from './components/RestaurantAdminsModal' import Pagination from '../../../components/Pagination' @@ -56,11 +56,11 @@ const RestaurantsList: FC = () => { const handleDeleteRestaurant = (restaurantId: string) => { deleteRestaurant.mutate(restaurantId, { onSuccess: () => { - toast.success('رستوران با موفقیت حذف شد') + toast('رستوران با موفقیت حذف شد', 'success') queryClient.invalidateQueries({ queryKey: ['restaurants'] }) }, onError: () => { - toast.error('خطا در حذف رستوران') + toast('خطا در حذف رستوران', 'error') } }) } diff --git a/src/pages/dmenu/restaurant/Update.tsx b/src/pages/dmenu/restaurant/Update.tsx index 2d5e231..16fa56a 100644 --- a/src/pages/dmenu/restaurant/Update.tsx +++ b/src/pages/dmenu/restaurant/Update.tsx @@ -10,7 +10,7 @@ import SwitchComponent from '../../../components/Switch' import Button from '../../../components/Button' import DatePickerComponent from '../../../components/DatePicker' import PageLoading from '../../../components/PageLoading' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { ErrorType } from '../../../helpers/types' import { TickCircle } from 'iconsax-react' import { Pages } from '../../../config/Pages' @@ -57,13 +57,13 @@ const UpdateRestaurant: FC = () => { { id, params }, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') queryClient.invalidateQueries({ queryKey: ['restaurants'] }) queryClient.invalidateQueries({ queryKey: ['restaurant', id] }) navigate(Pages.dmenu.restaurants.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message?.[0] || 'خطا در بروزرسانی رستوران') + toast(error.response?.data?.error?.message?.[0] || 'خطا در بروزرسانی رستوران', 'error') } } ) diff --git a/src/pages/dmenu/restaurant/components/AddRestaurantAdminForm.tsx b/src/pages/dmenu/restaurant/components/AddRestaurantAdminForm.tsx index ad3b520..af4bab5 100644 --- a/src/pages/dmenu/restaurant/components/AddRestaurantAdminForm.tsx +++ b/src/pages/dmenu/restaurant/components/AddRestaurantAdminForm.tsx @@ -9,7 +9,7 @@ import Button from '../../../../components/Button' import { useAddAdminRestaurant, useGetSystemRoles } from '../../hooks/useIconData' import { SystemRoleType } from '../../types/Types' import { ErrorType } from '../../../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../../../components/Toast'; import { TickCircle } from 'iconsax-react' interface AddRestaurantAdminFormProps { @@ -46,13 +46,13 @@ const AddRestaurantAdminForm: FC = ({ onSubmit: (values) => { addAdmin(values, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') formik.resetForm() onSuccess() onClose() }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/dmenu/restaurant/components/RestaurantAdminsModal.tsx b/src/pages/dmenu/restaurant/components/RestaurantAdminsModal.tsx index 3d86004..202b9df 100644 --- a/src/pages/dmenu/restaurant/components/RestaurantAdminsModal.tsx +++ b/src/pages/dmenu/restaurant/components/RestaurantAdminsModal.tsx @@ -7,7 +7,7 @@ import Td from '../../../../components/Td' import { RestaurantAdminType } from '../../types/Types' import moment from 'moment-jalaali' import TrashWithConfrim from '../../../../components/TrashWithConfrim' -import { toast } from 'react-toastify' +import { toast } from '../../../../components/Toast'; import { ErrorType } from '../../../../helpers/types' import Button from '../../../../components/Button' import AddRestaurantAdminForm from './AddRestaurantAdminForm' @@ -31,10 +31,10 @@ const RestaurantAdminsModal: FC = ({ open, close, re deleteAdmin({ restaurantId, adminId }, { onSuccess: () => { refetch() - toast.success(t('success')) + toast(t('success'), 'success') }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/dpage/sticker/List.tsx b/src/pages/dpage/sticker/List.tsx index 965c248..74e6aa9 100644 --- a/src/pages/dpage/sticker/List.tsx +++ b/src/pages/dpage/sticker/List.tsx @@ -8,7 +8,7 @@ import Td from '../../../components/Td' import Input from '../../../components/Input' import PageLoading from '../../../components/PageLoading' import TrashWithConfrim from '../../../components/TrashWithConfrim' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { ErrorType } from '../../../helpers/types' import { StickerType } from '../types/Types' import moment from 'moment-jalaali' @@ -30,10 +30,10 @@ const StickersList: FC = () => { deleteSticker.mutate(id, { onSuccess: () => { refetch() - toast.success(t('success')) + toast(t('success'), 'success') }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/dpage/sticker/components/CreateSticker.tsx b/src/pages/dpage/sticker/components/CreateSticker.tsx index 63d0bc6..f572955 100644 --- a/src/pages/dpage/sticker/components/CreateSticker.tsx +++ b/src/pages/dpage/sticker/components/CreateSticker.tsx @@ -6,7 +6,7 @@ import UploadBox from '../../../../components/UploadBox' import Select from '../../../../components/Select' import { useFormik } from 'formik' import * as Yup from 'yup' -import { toast } from 'react-toastify' +import { toast } from '../../../../components/Toast'; import { TickCircle } from 'iconsax-react' import { useCreateSticker, useGetGroupStickers } from '../../hooks/useStickerData' import { useSingleUpload } from '../../../service/hooks/useServiceData' @@ -38,11 +38,11 @@ const CreateSticker: FC = ({ open, close, onSuccess }) => { formik.resetForm() setFile(undefined) close() - toast.success(t('success')) + toast(t('success'), 'success') onSuccess?.() }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } @@ -58,7 +58,7 @@ const CreateSticker: FC = ({ open, close, onSuccess }) => { }), onSubmit: async (values) => { if (!file) { - toast.error(t('errors.required')) + toast(t('errors.required'), 'error') return } const formData = new FormData() @@ -69,7 +69,7 @@ const CreateSticker: FC = ({ open, close, onSuccess }) => { handleCreateSticker(values) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/guide/Create.tsx b/src/pages/guide/Create.tsx index 32ec2b7..86f49ba 100644 --- a/src/pages/guide/Create.tsx +++ b/src/pages/guide/Create.tsx @@ -9,7 +9,7 @@ import Textarea from '../../components/Textarea' import Switch from '../../components/Switch' import { TickCircle } from 'iconsax-react' import { useCreateGuide } from './hooks/useGuideData' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { ErrorType } from '../../helpers/types' import { Pages } from '../../config/Pages' @@ -50,11 +50,11 @@ const Create: FC = () => { serviceId: id || '', }, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.services.guide + id) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message?.[0] || t('error')) + toast(error.response?.data?.error?.message?.[0] || t('error')) } }) } diff --git a/src/pages/guide/Update.tsx b/src/pages/guide/Update.tsx index f465633..9bba9e0 100644 --- a/src/pages/guide/Update.tsx +++ b/src/pages/guide/Update.tsx @@ -9,7 +9,7 @@ import Textarea from '../../components/Textarea' import Switch from '../../components/Switch' import { TickCircle } from 'iconsax-react' import { useGetGuideDetail, useUpdateGuide } from './hooks/useGuideData' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { ErrorType } from '../../helpers/types' import { Pages } from '../../config/Pages' @@ -53,11 +53,11 @@ const Update: FC = () => { } }, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.services.guide + id) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message?.[0] || t('error')) + toast(error.response?.data?.error?.message?.[0] || t('error')) } }) } diff --git a/src/pages/learning/Create.tsx b/src/pages/learning/Create.tsx index 2a0b193..f279541 100644 --- a/src/pages/learning/Create.tsx +++ b/src/pages/learning/Create.tsx @@ -13,7 +13,7 @@ import Textarea from '../../components/Textarea' import PageLoading from '../../components/PageLoading' import CreateLearningSidebar from './components/CreateLearningSidebar' import { ErrorType } from '../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { useNavigate } from 'react-router-dom' import { Pages } from '../../config/Pages' @@ -52,7 +52,7 @@ const CreateLearning: FC = () => { values.videoUrl = data?.data?.url }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) @@ -63,21 +63,21 @@ const CreateLearning: FC = () => { values.coverUrl = data?.data?.url }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) createLearning.mutate(values, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.learning.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } else { - toast.error(t('learning.error_video_cover_required')) + toast(t('learning.error_video_cover_required'), 'error') } } }) diff --git a/src/pages/learning/components/CreateCategory.tsx b/src/pages/learning/components/CreateCategory.tsx index b7a8e67..eb54451 100644 --- a/src/pages/learning/components/CreateCategory.tsx +++ b/src/pages/learning/components/CreateCategory.tsx @@ -5,7 +5,7 @@ import Button from '../../../components/Button' import { TickCircle } from 'iconsax-react' import * as Yup from 'yup' import { useFormik } from 'formik' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { ErrorType } from '../../../helpers/types' import { CreateCategoryLearningType } from '../types/LearningTypes' import { useCreateCategory, useGetCategory } from '../hooks/useLearningData' @@ -29,10 +29,10 @@ const CreateCategory: FC = () => { onSuccess: () => { formik.resetForm() getCategory.refetch() - toast.success(t('success')) + toast(t('success'), 'success') }, onError: (error: ErrorType) => { - toast.error(error?.response?.data?.error?.message[0]) + toast(error?.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/notification/Notification.tsx b/src/pages/notification/Notification.tsx index 6f40d8d..d348e91 100644 --- a/src/pages/notification/Notification.tsx +++ b/src/pages/notification/Notification.tsx @@ -11,7 +11,7 @@ import { timeAgo } from '../../config/func'; import InfiniteScroll from 'react-infinite-scroll-component'; import MoonLoader from "react-spinners/MoonLoader" import Button from '../../components/Button'; -import { toast } from 'react-toastify'; +import { toast } from '../../components/Toast'; // import { useGetDashboardSummary } from '../home/hooks/useHomeData'; import { useNavigate } from 'react-router-dom'; import { Pages } from '../../config/Pages'; @@ -33,7 +33,7 @@ const Notifications: FC = () => { onSuccess: () => { getDashboard.refetch() refetch() - toast.success(t('success')) + toast(t('success'), 'success') } }) } diff --git a/src/pages/payment/components/Accept.tsx b/src/pages/payment/components/Accept.tsx index 5d1388e..bc0f7bd 100644 --- a/src/pages/payment/components/Accept.tsx +++ b/src/pages/payment/components/Accept.tsx @@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next' import Button from '../../../components/Button' import { useApproveTransfer } from '../hooks/usePaymentData' import ModalConfrim from '../../../components/ModalConfrim' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { ErrorType } from '../../../helpers/types' type Props = { @@ -19,12 +19,12 @@ const Accept: FC = (props: Props) => { const handleApproveTransfer = () => { approveTransfer.mutate(props.id, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') setOpenConfrimModal(false) window.location.reload() }, onError(error: ErrorType) { - toast.error(error?.response?.data?.error?.message[0]) + toast(error?.response?.data?.error?.message[0], 'error') }, }) } diff --git a/src/pages/payment/components/Reject.tsx b/src/pages/payment/components/Reject.tsx index 997818d..ce3173f 100644 --- a/src/pages/payment/components/Reject.tsx +++ b/src/pages/payment/components/Reject.tsx @@ -3,7 +3,7 @@ import Button from '../../../components/Button' import { useTranslation } from 'react-i18next' import { useRejectTransfer } from '../hooks/usePaymentData' import ModalConfrim from '../../../components/ModalConfrim' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { ErrorType } from '../../../helpers/types' type Props = { @@ -20,16 +20,16 @@ const Reject: FC = (props: Props) => { if (text && text.length > 0) { rejectTransfer.mutate({ id: props.id, comment: text }, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') setOpenConfrimModal(false) window.location.reload() }, onError(error: ErrorType) { - toast.error(error?.response?.data?.error?.message[0]) + toast(error?.response?.data?.error?.message[0], 'error') }, }) } else { - toast.error(t('payment.reject_comment_error')) + toast(t('payment.reject_comment_error'), 'error') } } diff --git a/src/pages/profile/Profile.tsx b/src/pages/profile/Profile.tsx index 8c52adf..58ac5a9 100644 --- a/src/pages/profile/Profile.tsx +++ b/src/pages/profile/Profile.tsx @@ -8,7 +8,7 @@ import DatePickerComponent from '../../components/DatePicker' import { useGetProfile, useUpdateProfile } from './hooks/useProfileData' import Username from './components/Username' import { useDropzone } from 'react-dropzone' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { ErrorType } from '../../helpers/types' import { UpdateProfileType } from './types/ProfileTypes' import PageLoading from '../../components/PageLoading' @@ -42,10 +42,10 @@ const Profile: FC = () => { onSubmit: (values) => { updateProfile.mutate(values, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } @@ -80,19 +80,19 @@ const Profile: FC = () => { } updateProfile.mutate(params, { onSuccess: () => { - toast.success(t('profile.image_uploaded_successfully')) + toast(t('profile.image_uploaded_successfully'), 'success') }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } else { - toast.error(t('errors.is_not_image')) + toast(t('errors.is_not_image'), 'error') } } diff --git a/src/pages/profile/components/Email.tsx b/src/pages/profile/components/Email.tsx index 9ccbdf7..16d2f0e 100644 --- a/src/pages/profile/components/Email.tsx +++ b/src/pages/profile/components/Email.tsx @@ -8,7 +8,7 @@ import DefaulModal from '../../../components/DefaulModal' import OTPInput from 'react-otp-input' import { useUpdateEmail } from '../hooks/useProfileData' import { ErrorType } from '../../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; type Props = { email: string | null, @@ -27,10 +27,10 @@ const Email: FC = (props: Props) => { const handleShowModal = () => { updateEmail.mutate({ email: email }, { onSuccess: () => { - toast.success(t('profile.link_email')) + toast(t('profile.link_email'), 'success') }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) } diff --git a/src/pages/profile/components/Phone.tsx b/src/pages/profile/components/Phone.tsx index babc8b5..54c7e10 100644 --- a/src/pages/profile/components/Phone.tsx +++ b/src/pages/profile/components/Phone.tsx @@ -7,7 +7,7 @@ import DefaulModal from '../../../components/DefaulModal' import OTPInput from 'react-otp-input' import { useUpdatePhone, useVerifyPhone } from '../hooks/useProfileData' import { ErrorType } from '../../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { VerifyPhoneType } from '../types/ProfileTypes' type Props = { @@ -30,7 +30,7 @@ const Phone: FC = (props: Props) => { setShowModal(true) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) } @@ -45,10 +45,10 @@ const Phone: FC = (props: Props) => { onSuccess: () => { setShowModal(false) setIsReadOnly(true) - toast.success(t('success')) + toast(t('success'), 'success') }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) diff --git a/src/pages/profile/components/Username.tsx b/src/pages/profile/components/Username.tsx index 23d8f5f..6d552bb 100644 --- a/src/pages/profile/components/Username.tsx +++ b/src/pages/profile/components/Username.tsx @@ -5,7 +5,7 @@ import { useTranslation } from 'react-i18next' import Button from '../../../components/Button' import { useCheckUserName, useUpdateProfile } from '../hooks/useProfileData' import { CheckUserNameType, UpdateProfileType } from '../types/ProfileTypes' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { ErrorType } from '../../../helpers/types' type Props = { @@ -54,13 +54,13 @@ const Username: FC = (props: Props) => { updateProfile.mutate(params, { onSuccess: () => { - toast.success(t('profile.username_save_success')) + toast(t('profile.username_save_success'), 'success') setCanEdit(false) setCanSave(false) setStatus('') }, onError(error: ErrorType) { - toast.error(error.response?.data?.error?.message?.[0]) + toast(error.response?.data?.error?.message?.[0], 'error') }, }) } diff --git a/src/pages/receipts/Create.tsx b/src/pages/receipts/Create.tsx index aa3b629..ee83a97 100644 --- a/src/pages/receipts/Create.tsx +++ b/src/pages/receipts/Create.tsx @@ -7,7 +7,7 @@ import Input from '../../components/Input' import { CreateReceiptType, ReceiptCreateItemsType } from './types/ReceiptTypes' import { useFormik } from 'formik' import * as Yup from 'yup' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { useGetCustomers } from '../customer/hooks/useCustomerData' import { CustomerItemType } from '../customer/types/CustomerTypes' import PageLoading from '../../components/PageLoading' @@ -70,11 +70,11 @@ const CreateReceipt: FC = () => { createInvoice.mutate(params, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.receipts.index) }, onError(error: ErrorType) { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') }, }) } @@ -301,7 +301,7 @@ const CreateReceipt: FC = () => {
{ if (formik.errors.name || formik.errors.count || formik.errors.unitPrice || formik.errors.discount) { - toast.error(t('receip.error_empty')) + toast(t('receip.error_empty'), 'error') } else { formik.handleSubmit() } diff --git a/src/pages/receipts/Detail.tsx b/src/pages/receipts/Detail.tsx index 2422231..e28cb03 100644 --- a/src/pages/receipts/Detail.tsx +++ b/src/pages/receipts/Detail.tsx @@ -7,7 +7,7 @@ import Input from '../../components/Input' import { CreateReceiptType, ReceiptCreateItemsType } from './types/ReceiptTypes' import { useFormik } from 'formik' import * as Yup from 'yup' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { useGetCustomers } from '../customer/hooks/useCustomerData' import { CustomerItemType } from '../customer/types/CustomerTypes' import PageLoading from '../../components/PageLoading' @@ -86,11 +86,11 @@ const CreateReceipt: FC = () => { updateInvoice.mutate({ id: id as string, params }, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.receipts.index) }, onError(error: ErrorType) { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') }, }) } @@ -383,7 +383,7 @@ const CreateReceipt: FC = () => {
{ if (formik.errors.name || formik.errors.count || formik.errors.unitPrice || formik.errors.discount) { - toast.error(t('receip.error_empty')) + toast(t('receip.error_empty'), 'error') } else { formik.handleSubmit() } diff --git a/src/pages/receipts/List.tsx b/src/pages/receipts/List.tsx index 7acca8e..630f1e4 100644 --- a/src/pages/receipts/List.tsx +++ b/src/pages/receipts/List.tsx @@ -16,7 +16,7 @@ import Pagination from '../../components/Pagination' import { Pages } from '../../config/Pages' import TrashWithConfrim from '../../components/TrashWithConfrim' import { ErrorType } from '../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; const ReceiptsList: FC = () => { @@ -34,11 +34,11 @@ const ReceiptsList: FC = () => { const handleDeleteInvoice = (id: string) => { deleteInvoice.mutate(id, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') getInvoices.refetch() }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/reseller/Create.tsx b/src/pages/reseller/Create.tsx index ff60315..b860bf0 100644 --- a/src/pages/reseller/Create.tsx +++ b/src/pages/reseller/Create.tsx @@ -8,7 +8,7 @@ import { useTranslation } from 'react-i18next' import { useCreateResellers } from './hooks/useResellerData' import { useNavigate } from 'react-router-dom' import { ErrorType } from '../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import Input from '../../components/Input' const CreateReseller: FC = () => { @@ -32,7 +32,7 @@ const CreateReseller: FC = () => { navigate(-1) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/reseller/components/Payment.tsx b/src/pages/reseller/components/Payment.tsx index 99dec7e..fc77b78 100644 --- a/src/pages/reseller/components/Payment.tsx +++ b/src/pages/reseller/components/Payment.tsx @@ -3,7 +3,7 @@ import Button from '../../../components/Button' import DefaulModal from '../../../components/DefaulModal' import { usePayment } from '../hooks/useResellerData' import Input from '../../../components/Input' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { ErrorType } from '../../../helpers/types' type Props = { @@ -26,11 +26,11 @@ const Payment: FC = ({ id, refetch }) => { refetch() }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) } else { - toast.error('شماره تراکنش رو پر کنید') + toast('شماره تراکنش رو پر کنید', 'error') } } diff --git a/src/pages/service/AddService.tsx b/src/pages/service/AddService.tsx index 5a6320c..e5ecaf8 100644 --- a/src/pages/service/AddService.tsx +++ b/src/pages/service/AddService.tsx @@ -13,7 +13,7 @@ import * as Yup from 'yup' import { useCreateService, useMultiUpload, useSingleUpload } from './hooks/useServiceData'; import moment from 'moment-jalaali'; import { ErrorType } from '../../helpers/types'; -import { toast } from 'react-toastify'; +import { toast } from '../../components/Toast'; import { useNavigate } from 'react-router-dom'; import { Pages } from '../../config/Pages'; @@ -98,7 +98,7 @@ const AddService: FC = () => { values.icon = data?.data?.url }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) @@ -111,7 +111,7 @@ const AddService: FC = () => { values.images = await data.data.map((item: { url: string }) => item?.url) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) @@ -126,7 +126,7 @@ const AddService: FC = () => { values.audios = await data.data.map((item: { url: string }) => item?.url) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } else { @@ -144,7 +144,7 @@ const AddService: FC = () => { values.videos = await data.data.map((item: { url: string }) => item?.url) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } else { @@ -159,15 +159,15 @@ const AddService: FC = () => { createService.mutate(params, { onSuccess: () => { formik.resetForm() - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.services.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } else { - toast.error(t('errors.upload_image')) + toast(t('errors.upload_image'), 'error') } }, }) diff --git a/src/pages/service/UpdateService.tsx b/src/pages/service/UpdateService.tsx index 6d04f87..810f00c 100644 --- a/src/pages/service/UpdateService.tsx +++ b/src/pages/service/UpdateService.tsx @@ -12,7 +12,7 @@ import * as Yup from 'yup' import { useGetDetailService, useMultiUpload, useSingleUpload, useUpdateService } from './hooks/useServiceData'; import moment from 'moment-jalaali'; import { ErrorType } from '../../helpers/types'; -import { toast } from 'react-toastify'; +import { toast } from '../../components/Toast'; import { useNavigate, useParams } from 'react-router-dom'; import { Pages } from '../../config/Pages'; import UpdateServiceSidebar from './components/UpdateServiceSidebar'; @@ -103,7 +103,7 @@ const UpdateService: FC = () => { values.icon = data?.data?.url }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } @@ -118,7 +118,7 @@ const UpdateService: FC = () => { values.images = [...(values.images || []), ...data.data.map((item: { url: string }) => item?.url)] }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } @@ -134,7 +134,7 @@ const UpdateService: FC = () => { values.audios = [...(values.audios || []), ...data.data.map((item: { url: string }) => item?.url)] }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } else { @@ -152,7 +152,7 @@ const UpdateService: FC = () => { values.videos = [...(values.videos || []), ...data.data.map((item: { url: string }) => item?.url)] }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } else { @@ -167,11 +167,11 @@ const UpdateService: FC = () => { createService.mutate(params, { onSuccess: () => { formik.resetForm() - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.services.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) diff --git a/src/pages/service/components/CreateCategory.tsx b/src/pages/service/components/CreateCategory.tsx index 022bbc1..cfbf919 100644 --- a/src/pages/service/components/CreateCategory.tsx +++ b/src/pages/service/components/CreateCategory.tsx @@ -10,7 +10,7 @@ import { useCreateServiceCategory, useGetCategoryParents, useSingleUpload } from import { CreateServiceCategoryType, ServiceCategoryType } from '../types/ServiceTypes' import * as Yup from 'yup' import { useFormik } from 'formik' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { ErrorType } from '../../../helpers/types' const CreateCategory: FC = () => { @@ -33,7 +33,7 @@ const CreateCategory: FC = () => { }), onSubmit: async (values) => { if (!file) { - toast.error(t('errors.upload_image')) + toast(t('errors.upload_image'), 'error') return } @@ -44,7 +44,7 @@ const CreateCategory: FC = () => { values.icon = data?.data?.url }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) @@ -57,10 +57,10 @@ const CreateCategory: FC = () => { onSuccess: () => { formik.resetForm() getCategory.refetch() - toast.success(t('success')) + toast(t('success'), 'success') }, onError: (error: ErrorType) => { - toast.error(error?.response?.data?.error?.message[0]) + toast(error?.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/service/components/CreatePlan.tsx b/src/pages/service/components/CreatePlan.tsx index e8fe6f4..bb81fa4 100644 --- a/src/pages/service/components/CreatePlan.tsx +++ b/src/pages/service/components/CreatePlan.tsx @@ -8,7 +8,7 @@ import { useFormik } from 'formik' import { CreateItemPlanType, CreatePlanType } from '../types/ServiceTypes' import * as Yup from 'yup' import { clx } from '../../../helpers/utils' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { useCreatePlan, useGetPlans } from '../hooks/useServiceData' import { useParams } from 'react-router-dom' import { ErrorType } from '../../../helpers/types' @@ -55,7 +55,7 @@ const CreatePlan: FC = () => { const handleSubmit = () => { if (items.length === 0) { - toast.error(t('plan.error_submit')) + toast(t('plan.error_submit'), 'error') } else { const params: CreatePlanType = { serviceId: id ? id : '', @@ -66,10 +66,10 @@ const CreatePlan: FC = () => { onSuccess: () => { formik.resetForm() setShowModal(false) - toast.success(t('plan.success_submit')) + toast(t('plan.success_submit'), 'success') }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/service/components/EditPlan.tsx b/src/pages/service/components/EditPlan.tsx index 65d2fab..5702b84 100644 --- a/src/pages/service/components/EditPlan.tsx +++ b/src/pages/service/components/EditPlan.tsx @@ -8,7 +8,7 @@ import { useFormik } from 'formik' import { CreateItemPlanType, UpdatePlanType } from '../types/ServiceTypes' import * as Yup from 'yup' import { clx } from '../../../helpers/utils' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { useGetPlanDetail, useUpdatePlan } from '../hooks/useServiceData' import { useParams } from 'react-router-dom' import { ErrorType } from '../../../helpers/types' @@ -49,11 +49,11 @@ const EditPlan: FC = (props: Props) => { } updatePlan.mutate(params, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') setShowModal(false) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/service/components/UpdateCategory.tsx b/src/pages/service/components/UpdateCategory.tsx index 9648a9b..faa17d5 100644 --- a/src/pages/service/components/UpdateCategory.tsx +++ b/src/pages/service/components/UpdateCategory.tsx @@ -6,7 +6,7 @@ import Input from '../../../components/Input' import { CreateServiceCategoryType, ServiceCategoryType } from '../types/ServiceTypes' import * as Yup from 'yup' import { useFormik } from 'formik' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { useTranslation } from 'react-i18next' import { ErrorType } from '../../../helpers/types' import Select from '../../../components/Select' @@ -47,7 +47,7 @@ const UpdateCategory: FC = (props) => { values.icon = data?.data?.url }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } @@ -63,12 +63,12 @@ const UpdateCategory: FC = (props) => { onSuccess: () => { formik.resetForm() getCategory.refetch() - toast.success(t('success')) + toast(t('success'), 'success') setShowModal(false) props.refetch() }, onError: (error: ErrorType) => { - toast.error(error?.response?.data?.error?.message[0]) + toast(error?.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/slider/Create.tsx b/src/pages/slider/Create.tsx index f15fd89..929eab7 100644 --- a/src/pages/slider/Create.tsx +++ b/src/pages/slider/Create.tsx @@ -10,7 +10,7 @@ import Input from '../../components/Input' import Textarea from '../../components/Textarea' import UploadBox from '../../components/UploadBox' import SwitchComponent from '../../components/Switch' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { useSingleUpload } from '../service/hooks/useServiceData' import { Pages } from '../../config/Pages' import { useNavigate } from 'react-router-dom' @@ -39,7 +39,7 @@ const CreateSlider: FC = () => { }), onSubmit: async (values) => { if (!file) { - toast.error(t('slider.image_required')) + toast(t('slider.image_required'), 'error') return } @@ -55,11 +55,11 @@ const CreateSlider: FC = () => { createSlider.mutate(values, { onSuccess: () => { - toast.success(t('slider.slider_created')) + toast(t('slider.slider_created'), 'success') navigate(Pages.sliders.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) } diff --git a/src/pages/slider/List.tsx b/src/pages/slider/List.tsx index 7de4faa..506a05f 100644 --- a/src/pages/slider/List.tsx +++ b/src/pages/slider/List.tsx @@ -8,7 +8,7 @@ import Td from '../../components/Td' import { useDeleteSlider, useGetSliders } from './hooks/useSliderData' import { SliderItemType } from './types/SliderTypes' import PageLoading from '../../components/PageLoading' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { ErrorType } from '../../helpers/types' import TrashWithConfrim from '../../components/TrashWithConfrim' const SliderList: FC = () => { @@ -20,11 +20,11 @@ const SliderList: FC = () => { const handleDelete = (id: string) => { deleteSlider.mutate(id, { onSuccess: () => { - toast.success(t('slider.slider_deleted')) + toast(t('slider.slider_deleted'), 'success') refetch() }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) } diff --git a/src/pages/slider/Update.tsx b/src/pages/slider/Update.tsx index 9c87430..06ec54d 100644 --- a/src/pages/slider/Update.tsx +++ b/src/pages/slider/Update.tsx @@ -10,7 +10,7 @@ import Input from '../../components/Input' import Textarea from '../../components/Textarea' import UploadBox from '../../components/UploadBox' import SwitchComponent from '../../components/Switch' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { useSingleUpload } from '../service/hooks/useServiceData' import { Pages } from '../../config/Pages' import { useNavigate, useParams } from 'react-router-dom' @@ -56,11 +56,11 @@ const UpdateSlider: FC = () => { updateSlider.mutate({ id: id || '', data: values }, { onSuccess: () => { - toast.success(t('slider.slider_created')) + toast(t('slider.slider_created'), 'success') navigate(Pages.sliders.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) } diff --git a/src/pages/subscriptions/List.tsx b/src/pages/subscriptions/List.tsx index 096ee45..df0b78d 100644 --- a/src/pages/subscriptions/List.tsx +++ b/src/pages/subscriptions/List.tsx @@ -12,7 +12,7 @@ import { useGetAllServices } from '../service/hooks/useServiceData' import { ServiceItemType } from '../service/types/ServiceTypes' import TrashWithConfrim from '../../components/TrashWithConfrim' import { ErrorType } from '../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; const SubscriptionsList: FC = () => { @@ -82,7 +82,7 @@ const SubscriptionsList: FC = () => { refetch() }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) } diff --git a/src/pages/support/Create.tsx b/src/pages/support/Create.tsx index 361dfd1..3a20b22 100644 --- a/src/pages/support/Create.tsx +++ b/src/pages/support/Create.tsx @@ -11,7 +11,7 @@ import { CreatePlanType } from './types/SupportTypes' import * as Yup from 'yup' import Select from '../../components/Select' import { useCreateSupport } from './hooks/useSupportData' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { ErrorType } from '../../helpers/types' import { useNavigate } from 'react-router-dom' import { Pages } from '../../config/Pages' @@ -104,11 +104,11 @@ const CreatePlan: FC = () => { } createSupport.mutate(planData, { onSuccess: () => { - toast.success('پلن با موفقیت ساخته شد') + toast('پلن با موفقیت ساخته شد', 'success') navigate(Pages.support.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) }, diff --git a/src/pages/support/Update.tsx b/src/pages/support/Update.tsx index 08f8c7e..339e671 100644 --- a/src/pages/support/Update.tsx +++ b/src/pages/support/Update.tsx @@ -11,7 +11,7 @@ import { CreatePlanType } from './types/SupportTypes' import * as Yup from 'yup' import Select from '../../components/Select' import { useGetPlanById, useUpdateSupport } from './hooks/useSupportData' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { ErrorType } from '../../helpers/types' import { useNavigate, useParams } from 'react-router-dom' import { Pages } from '../../config/Pages' @@ -118,11 +118,11 @@ const UpdatePlan: FC = () => { } updateSupport.mutate({ id: id ?? '', data: planData }, { onSuccess: () => { - toast.success('پلن با موفقیت ویرایش شد') + toast('پلن با موفقیت ویرایش شد', 'success') navigate(Pages.support.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) }, diff --git a/src/pages/taskmanager/components/AddNewColumn.tsx b/src/pages/taskmanager/components/AddNewColumn.tsx index 54d49e8..e57a6e8 100644 --- a/src/pages/taskmanager/components/AddNewColumn.tsx +++ b/src/pages/taskmanager/components/AddNewColumn.tsx @@ -1,7 +1,7 @@ import { Add, AddCircle, CloseCircle } from "iconsax-react"; import { useRef, useState, type FC } from "react"; import { useTranslation } from "react-i18next"; -import { toast } from "react-toastify"; +import { toast } from '../../../components/Toast'; import ColorsImage from "../../../assets/images/colors.png"; import { ErrorType } from "../../../helpers/types"; import { clx } from "../../../helpers/utils"; @@ -47,11 +47,11 @@ const AddNewColumn: FC = ({ projectId, nextOrder, onColumnCreated }) => { onSuccess: (data) => { const phase = (data?.data ?? data) as TaskPhaseItemType; onColumnCreated(phase); - toast.success(t("success")); + toast(t("success"), 'success'); resetForm(); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }, ); diff --git a/src/pages/taskmanager/components/Column.tsx b/src/pages/taskmanager/components/Column.tsx index 2501729..853a0d2 100644 --- a/src/pages/taskmanager/components/Column.tsx +++ b/src/pages/taskmanager/components/Column.tsx @@ -2,7 +2,7 @@ import { Draggable, Droppable } from "@hello-pangea/dnd"; import { Add, AddCircle, CloseCircle } from "iconsax-react"; import { useMemo, useRef, useState, type FC } from "react"; import { useTranslation } from "react-i18next"; -import { toast } from "react-toastify"; +import { toast } from '../../../components/Toast'; import ModalConfrim from "../../../components/ModalConfrim"; import { ErrorType } from "../../../helpers/types"; import { useCreateTask, useGetTasksByTaskPhase } from "../task/hooks/useTaskData"; @@ -147,11 +147,11 @@ const Column: FC = ({ }, { onSuccess: () => { - toast.success(t("success")); + toast(t("success"), 'success'); resetTaskForm(); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }, ); @@ -164,10 +164,10 @@ const Column: FC = ({ onSuccess: () => { onColumnDeleted?.(column.id); setIsDeleteConfirmOpen(false); - toast.success(t("taskmanager.column_deleted")); + toast(t("taskmanager.column_deleted"), 'success'); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }, ); @@ -206,12 +206,12 @@ const Column: FC = ({ { id: column.id, params: { name: trimmedTitle }, projectId }, { onSuccess: () => { - toast.success(t("taskmanager.column_updated")); + toast(t("taskmanager.column_updated"), 'success'); }, onError: (error: ErrorType) => { onColumnTitleUpdated?.(column.id, previousTitle); setEditTitle(previousTitle); - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }, ); diff --git a/src/pages/taskmanager/components/task-detail/TaskDetailModal.tsx b/src/pages/taskmanager/components/task-detail/TaskDetailModal.tsx index b00c8ff..dbee528 100644 --- a/src/pages/taskmanager/components/task-detail/TaskDetailModal.tsx +++ b/src/pages/taskmanager/components/task-detail/TaskDetailModal.tsx @@ -1,6 +1,6 @@ import { type FC, useEffect, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; -import { toast } from "react-toastify"; +import { toast } from '../../../../components/Toast'; import DefaulModal from "../../../../components/DefaulModal"; import PageLoading from "../../../../components/PageLoading"; import { ErrorType } from "../../../../helpers/types"; @@ -86,11 +86,11 @@ const TaskDetailModal: FC = ({ open, task, columns, projectId, onClose, o { id: task.id, projectId: taskDetail?.projectId ?? "" }, { onSuccess: () => { - toast.success(t("taskmanager.task_deleted")); + toast(t("taskmanager.task_deleted"), 'success'); onClose(); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }, ); @@ -109,10 +109,10 @@ const TaskDetailModal: FC = ({ open, task, columns, projectId, onClose, o } else { initialDescriptionRef.current = value; } - toast.success(t("success")); + toast(t("success"), 'success'); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); if (field === "title") { setTitle(initialTitleRef.current); } else { @@ -131,11 +131,11 @@ const TaskDetailModal: FC = ({ open, task, columns, projectId, onClose, o { id: task.id, params: { color: newColor ?? "" } }, { onSuccess: () => { - toast.success(t("success")); + toast(t("success"), 'success'); }, onError: (error: ErrorType) => { setColor(previousColor); - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }, ); @@ -149,10 +149,10 @@ const TaskDetailModal: FC = ({ open, task, columns, projectId, onClose, o { onSuccess: () => { onTaskPhaseChanged?.(task.id, taskPhaseId); - toast.success(t("success")); + toast(t("success"), 'success'); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }, ); diff --git a/src/pages/taskmanager/components/task-detail/TaskDetailToolbar.tsx b/src/pages/taskmanager/components/task-detail/TaskDetailToolbar.tsx index 779b505..4730c46 100644 --- a/src/pages/taskmanager/components/task-detail/TaskDetailToolbar.tsx +++ b/src/pages/taskmanager/components/task-detail/TaskDetailToolbar.tsx @@ -1,6 +1,6 @@ import { type FC, useEffect, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; -import { toast } from "react-toastify"; +import { toast } from '../../../../components/Toast'; import { useGetUsersInfinite } from "../../../users/hooks/useUserData"; import TaskDetailAttachmentPopover from "./attachment/TaskDetailAttachmentPopover"; import TaskDetailDatePopover from "./date/TaskDetailDatePopover"; @@ -186,10 +186,10 @@ const TaskDetailToolbar: FC = ({ activeTab, onTabChange, taskDetail, task { id: effectiveTaskId, params: { userIds: Array.from(next) } }, { onSuccess: () => { - toast.success(t("success")); + toast(t("success"), 'success'); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); setSelectedUserIds(previous); }, }, @@ -215,10 +215,10 @@ const TaskDetailToolbar: FC = ({ activeTab, onTabChange, taskDetail, task setSelectedLabelIds((prev) => new Set([...prev, newLabel.id])); } setLabelsView("list"); - toast.success(t("success")); + toast(t("success"), 'success'); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }, ); @@ -237,10 +237,10 @@ const TaskDetailToolbar: FC = ({ activeTab, onTabChange, taskDetail, task { onSuccess: () => { handleChecklistClose(); - toast.success(t("success")); + toast(t("success"), 'success'); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }, ); @@ -264,7 +264,7 @@ const TaskDetailToolbar: FC = ({ activeTab, onTabChange, taskDetail, task const uploadResult = await singleUpload.mutateAsync(formData); fileUrl = uploadResult?.data?.url ?? ""; } catch (error) { - toast.error((error as ErrorType).response?.data?.error.message[0]); + toast((error as ErrorType).response?.data?.error.message[0], 'error'); return; } } @@ -279,10 +279,10 @@ const TaskDetailToolbar: FC = ({ activeTab, onTabChange, taskDetail, task { onSuccess: () => { handleAttachmentClose(); - toast.success(t("success")); + toast(t("success"), 'success'); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }, ); @@ -313,10 +313,10 @@ const TaskDetailToolbar: FC = ({ activeTab, onTabChange, taskDetail, task { onSuccess: () => { handleDateClose(); - toast.success(t("success")); + toast(t("success"), 'success'); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); setStartDate(previousStartDate); setEndDate(previousEndDate); }, diff --git a/src/pages/taskmanager/components/task-detail/checklist/List.tsx b/src/pages/taskmanager/components/task-detail/checklist/List.tsx index 5a192c6..3f77143 100644 --- a/src/pages/taskmanager/components/task-detail/checklist/List.tsx +++ b/src/pages/taskmanager/components/task-detail/checklist/List.tsx @@ -1,6 +1,6 @@ import { Edit } from "iconsax-react"; import { useTranslation } from "react-i18next"; -import { toast } from "react-toastify"; +import { toast } from '../../../../../components/Toast'; import ProgressBar from "../../../../../components/ProgressBar"; import TrashWithConfrim from "../../../../../components/TrashWithConfrim"; import { ErrorType } from "../../../../../helpers/types"; @@ -39,7 +39,7 @@ const CheckLists = ({ { id, params: { isDone: !checked }, taskId }, { onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }, ); diff --git a/src/pages/taskmanager/components/task-detail/time/TaskDetailTimePopover.tsx b/src/pages/taskmanager/components/task-detail/time/TaskDetailTimePopover.tsx index fc80a5f..7611186 100644 --- a/src/pages/taskmanager/components/task-detail/time/TaskDetailTimePopover.tsx +++ b/src/pages/taskmanager/components/task-detail/time/TaskDetailTimePopover.tsx @@ -1,6 +1,6 @@ import { type FC, useEffect, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; -import { toast } from "react-toastify"; +import { toast } from '../../../../../components/Toast'; import { ErrorType } from "../../../../../helpers/types"; import { useEndTimeTracking, useGetTaskTimes, useStartTimeTracking } from "../../../task/hooks/useTaskTimeData"; import { formatElapsedTime, getActiveTimeEntry, getElapsedSeconds } from "./utils"; @@ -45,10 +45,10 @@ const TaskDetailTimePopover: FC = ({ taskId }) => { const handleStart = () => { startTimeTracking.mutate(taskId, { onSuccess: () => { - toast.success(t("success")); + toast(t("success"), 'success'); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }); }; @@ -56,10 +56,10 @@ const TaskDetailTimePopover: FC = ({ taskId }) => { const handleStop = () => { endTimeTracking.mutate(taskId, { onSuccess: () => { - toast.success(t("success")); + toast(t("success"), 'success'); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }); }; diff --git a/src/pages/taskmanager/project/Create.tsx b/src/pages/taskmanager/project/Create.tsx index faa6dd3..667f622 100644 --- a/src/pages/taskmanager/project/Create.tsx +++ b/src/pages/taskmanager/project/Create.tsx @@ -3,7 +3,7 @@ import { TickCircle } from "iconsax-react"; import { useFormik } from "formik"; import { useTranslation } from "react-i18next"; import { useNavigate, useSearchParams } from "react-router-dom"; -import { toast } from "react-toastify"; +import { toast } from '../../../components/Toast'; import * as Yup from "yup"; import moment from "moment-jalaali"; import Button from "../../../components/Button"; @@ -36,11 +36,11 @@ const CreateProject: FC = () => { const handleCreateProject = async (values: CreateProjectType) => { createProject.mutate(values, { onSuccess: () => { - toast.success(t("success")); + toast(t("success"), 'success'); navigate(`${Pages.taskmanager.projectList}${workspaceId}`); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }); }; @@ -62,7 +62,7 @@ const CreateProject: FC = () => { }), onSubmit: async (values) => { if (!workspaceId) { - toast.error(t("taskmanager.select_workspace")); + toast(t("taskmanager.select_workspace"), 'error'); return; } @@ -77,7 +77,7 @@ const CreateProject: FC = () => { backgroundPicture = uploadResult?.data?.url ?? ""; } catch (error) { const uploadError = error as ErrorType; - toast.error(uploadError.response?.data?.error.message[0]); + toast(uploadError.response?.data?.error.message[0], 'error'); return; } } diff --git a/src/pages/taskmanager/project/Update.tsx b/src/pages/taskmanager/project/Update.tsx index 8977d52..5ffa3d6 100644 --- a/src/pages/taskmanager/project/Update.tsx +++ b/src/pages/taskmanager/project/Update.tsx @@ -3,7 +3,7 @@ import { TickCircle } from "iconsax-react"; import { useFormik } from "formik"; import { useTranslation } from "react-i18next"; import { useNavigate, useParams } from "react-router-dom"; -import { toast } from "react-toastify"; +import { toast } from '../../../components/Toast'; import * as Yup from "yup"; import moment from "moment-jalaali"; import Button from "../../../components/Button"; @@ -48,11 +48,11 @@ const UpdateProject: FC = () => { { id, params: values }, { onSuccess: () => { - toast.success(t("success")); + toast(t("success"), 'success'); navigate(`${Pages.taskmanager.projectList}${values.workspaceId}`); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }, ); @@ -75,7 +75,7 @@ const UpdateProject: FC = () => { }), onSubmit: async (values) => { if (!workspaceId) { - toast.error(t("taskmanager.select_workspace")); + toast(t("taskmanager.select_workspace"), 'error'); return; } @@ -90,7 +90,7 @@ const UpdateProject: FC = () => { backgroundPicture = uploadResult?.data?.url ?? ""; } catch (error) { const uploadError = error as ErrorType; - toast.error(uploadError.response?.data?.error.message[0]); + toast(uploadError.response?.data?.error.message[0], 'error'); return; } } diff --git a/src/pages/taskmanager/project/components/ProjectSettingsPanel.tsx b/src/pages/taskmanager/project/components/ProjectSettingsPanel.tsx index 51ca45a..be4f13e 100644 --- a/src/pages/taskmanager/project/components/ProjectSettingsPanel.tsx +++ b/src/pages/taskmanager/project/components/ProjectSettingsPanel.tsx @@ -2,7 +2,7 @@ import { CloseCircle, TickCircle } from "iconsax-react"; import { type FC, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { useQueryClient } from "@tanstack/react-query"; -import { toast } from "react-toastify"; +import { toast } from '../../../../components/Toast'; import Button from "../../../../components/Button"; import { ErrorType } from "../../../../helpers/types"; import { clx } from "../../../../helpers/utils"; @@ -82,7 +82,7 @@ const ProjectSettingsPanel: FC = ({ open, onClose, projectId, project }) if (!project) return; if (!workspaceId) { - toast.error(t("taskmanager.select_workspace")); + toast(t("taskmanager.select_workspace"), 'error'); return; } @@ -97,7 +97,7 @@ const ProjectSettingsPanel: FC = ({ open, onClose, projectId, project }) backgroundPicture = uploadResult?.data?.url ?? ""; } catch (error) { const uploadError = error as ErrorType; - toast.error(uploadError.response?.data?.error.message[0]); + toast(uploadError.response?.data?.error.message[0], 'error'); return; } } @@ -119,13 +119,13 @@ const ProjectSettingsPanel: FC = ({ open, onClose, projectId, project }) }, { onSuccess: () => { - toast.success(t("success")); + toast(t("success"), 'success'); queryClient.invalidateQueries({ queryKey: ["project", projectId] }); queryClient.invalidateQueries({ queryKey: ["project-detail", projectId] }); onClose(); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }, ); diff --git a/src/pages/taskmanager/workspace.tsx b/src/pages/taskmanager/workspace.tsx index ebac24b..3b476f3 100644 --- a/src/pages/taskmanager/workspace.tsx +++ b/src/pages/taskmanager/workspace.tsx @@ -2,7 +2,7 @@ import { DragDropContext, type DragStart, type DropResult } from "@hello-pangea/ import { useQueryClient } from "@tanstack/react-query"; import { useEffect, useState, type FC } from "react"; import { useParams } from "react-router-dom"; -import { toast } from "react-toastify"; +import { toast } from '../../components/Toast'; import PageLoading from "../../components/PageLoading"; import { ErrorType } from "../../helpers/types"; import AddNewColumn from "./components/AddNewColumn"; @@ -89,7 +89,7 @@ const Workspace: FC = () => { if (previousData) { queryClient.setQueryData(["tasks-by-task-phase", columnId], previousData); } - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }, ); @@ -140,7 +140,7 @@ const Workspace: FC = () => { onError: (error: ErrorType) => { queryClient.invalidateQueries({ queryKey: ["tasks-by-task-phase", sourceColumnId] }); queryClient.invalidateQueries({ queryKey: ["tasks-by-task-phase", columnId] }); - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }, ); @@ -160,7 +160,7 @@ const Workspace: FC = () => { if (selectedTask?.id === activeTask.id) { setSelectedTask(activeTask); } - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }, ); @@ -214,7 +214,7 @@ const Workspace: FC = () => { { onError: (error: ErrorType) => { setColumns(previousColumns); - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }, ); diff --git a/src/pages/taskmanager/workspace/Create.tsx b/src/pages/taskmanager/workspace/Create.tsx index b4a5c9d..d8e367b 100644 --- a/src/pages/taskmanager/workspace/Create.tsx +++ b/src/pages/taskmanager/workspace/Create.tsx @@ -3,7 +3,7 @@ import { TickCircle } from "iconsax-react"; import { useFormik } from "formik"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; -import { toast } from "react-toastify"; +import { toast } from '../../../components/Toast'; import * as Yup from "yup"; import Button from "../../../components/Button"; import Input from "../../../components/Input"; @@ -28,11 +28,11 @@ const CreateWorkspace: FC = () => { const handleCreateWorkspace = (values: CreateWorkspaceType) => { createWorkspace.mutate(values, { onSuccess: () => { - toast.success(t("success")); + toast(t("success"), 'success'); navigate(Pages.taskmanager.workspaceList); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }); }; diff --git a/src/pages/taskmanager/workspace/List.tsx b/src/pages/taskmanager/workspace/List.tsx index 4f1ee08..e90ad81 100644 --- a/src/pages/taskmanager/workspace/List.tsx +++ b/src/pages/taskmanager/workspace/List.tsx @@ -2,7 +2,7 @@ import { Add, Edit } from "iconsax-react"; import { FC } from "react"; import { useTranslation } from "react-i18next"; import { Link } from "react-router-dom"; -import { toast } from "react-toastify"; +import { toast } from '../../../components/Toast'; import Button from "../../../components/Button"; import PageLoading from "../../../components/PageLoading"; import Td from "../../../components/Td"; @@ -22,10 +22,10 @@ const WorkspaceList: FC = () => { const handleDelete = (id: string) => { deleteWorkspace.mutate(id, { onSuccess: () => { - toast.success(t("taskmanager.workspace_deleted")); + toast(t("taskmanager.workspace_deleted"), 'success'); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }); }; diff --git a/src/pages/taskmanager/workspace/Update.tsx b/src/pages/taskmanager/workspace/Update.tsx index e91b215..4b7085e 100644 --- a/src/pages/taskmanager/workspace/Update.tsx +++ b/src/pages/taskmanager/workspace/Update.tsx @@ -3,7 +3,7 @@ import { TickCircle } from "iconsax-react"; import { useFormik } from "formik"; import { useTranslation } from "react-i18next"; import { useNavigate, useParams } from "react-router-dom"; -import { toast } from "react-toastify"; +import { toast } from '../../../components/Toast'; import * as Yup from "yup"; import Button from "../../../components/Button"; import Input from "../../../components/Input"; @@ -45,11 +45,11 @@ const UpdateWorkspace: FC = () => { }, { onSuccess: () => { - toast.success(t("success")); + toast(t("success"), 'success'); navigate(Pages.taskmanager.workspaceList); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]); + toast(error.response?.data?.error.message[0], 'error'); }, }, ); diff --git a/src/pages/ticket/Category.tsx b/src/pages/ticket/Category.tsx index 0f5ca49..576ffec 100644 --- a/src/pages/ticket/Category.tsx +++ b/src/pages/ticket/Category.tsx @@ -13,7 +13,7 @@ import Button from '../../components/Button' import { useCreateCategory, useGetCategories } from './hooks/useTicketData' import Textarea from '../../components/Textarea' import { ErrorType } from '../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; const TicketCategory: FC = () => { @@ -40,7 +40,7 @@ const TicketCategory: FC = () => { formik.resetForm() }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) } diff --git a/src/pages/ticket/CreateTicket.tsx b/src/pages/ticket/CreateTicket.tsx index df642a3..de1ea14 100644 --- a/src/pages/ticket/CreateTicket.tsx +++ b/src/pages/ticket/CreateTicket.tsx @@ -15,7 +15,7 @@ import { ErrorType } from '../../helpers/types' import { useNavigate } from 'react-router-dom' import { Pages } from '../../config/Pages' import { CreateTicketAdminType } from './types/TicketTypes' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { useMultiUpload } from '../service/hooks/useServiceData' import { useGetCustomers } from '../customer/hooks/useCustomerData' import { CustomerItemType } from '../customer/types/CustomerTypes' @@ -57,7 +57,7 @@ const CreateTicket: FC = () => { values.attachmentUrls = await data.data.map((item: { url: string }) => item?.url) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } else { @@ -71,12 +71,12 @@ const CreateTicket: FC = () => { createTicket.mutate(values, { onSuccess: (data) => { - toast.success(t('success')) + toast(t('success'), 'success') formik.resetForm() navigate(Pages.ticket.detail + data.data?.ticketId) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/ticket/Detail.tsx b/src/pages/ticket/Detail.tsx index 6933b3e..6d9b344 100644 --- a/src/pages/ticket/Detail.tsx +++ b/src/pages/ticket/Detail.tsx @@ -12,7 +12,7 @@ import moment from 'moment-jalaali' import { useFormik } from 'formik' import { AddMessageTicketType, TicketMessageType } from './types/TicketTypes' import * as Yup from 'yup' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { ErrorType } from '../../helpers/types' import { clx } from '../../helpers/utils' import { Pages } from '../../config/Pages' @@ -51,7 +51,7 @@ const TicketDetail: FC = () => { values.attachmentUrls = await data.data.map((item: { url: string }) => item?.url) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0] ?? t('error'), 'error') } }) } else { @@ -60,7 +60,7 @@ const TicketDetail: FC = () => { addMessage.mutate(values, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') formik.resetForm() setFiles([]) setIsResetFiles(true) @@ -69,7 +69,7 @@ const TicketDetail: FC = () => { }, 1000); }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0] ?? t('error'), 'error') } }) }, @@ -78,11 +78,11 @@ const TicketDetail: FC = () => { const hadleCloseTicket = () => { closeTicket.mutate(id ? id : '', { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.ticket.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0] ?? t('error'), 'error') } }) } diff --git a/src/pages/ticket/components/CreateTaskFromTicket.tsx b/src/pages/ticket/components/CreateTaskFromTicket.tsx index 0f87986..b17c3ca 100644 --- a/src/pages/ticket/components/CreateTaskFromTicket.tsx +++ b/src/pages/ticket/components/CreateTaskFromTicket.tsx @@ -6,7 +6,7 @@ import Select from '../../../components/Select' import Input from '../../../components/Input' import Button from '../../../components/Button' import PageLoading from '../../../components/PageLoading' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { ErrorType } from '../../../helpers/types' import { useGetWorkspaces } from '../../taskmanager/workspace/hooks/useWorkspaceData' import { WorkspaceItemType } from '../../taskmanager/workspace/types/WorkspaceTypes' @@ -127,22 +127,22 @@ const CreateTaskFromTicket: FC = ({ ticketSubject }) => { const trimmedTitle = title.trim() if (!workspaceId) { - toast.error(t('ticket.select_workspace_required')) + toast(t('ticket.select_workspace_required'), 'error') return } if (!projectId) { - toast.error(t('ticket.select_project_required')) + toast(t('ticket.select_project_required'), 'error') return } if (!taskPhaseId) { - toast.error(t('ticket.select_column_required')) + toast(t('ticket.select_column_required'), 'error') return } if (!trimmedTitle) { - toast.error(t('errors.required')) + toast(t('errors.required'), 'error') return } @@ -163,10 +163,10 @@ const CreateTaskFromTicket: FC = ({ ticketSubject }) => { await updateTask.mutateAsync({ id: taskId, params: { userIds } }) } - toast.success(t('ticket.create_task_success')) + toast(t('ticket.create_task_success'), 'success') handleClose() } catch (error) { - toast.error((error as ErrorType).response?.data?.error?.message[0]) + toast((error as ErrorType).response?.data?.error?.message[0], 'error') } } diff --git a/src/pages/ticket/components/ReferTicket.tsx b/src/pages/ticket/components/ReferTicket.tsx index 73db9af..de17453 100644 --- a/src/pages/ticket/components/ReferTicket.tsx +++ b/src/pages/ticket/components/ReferTicket.tsx @@ -6,7 +6,7 @@ import CheckBoxComponent from '../../../components/CheckBoxComponent' import { useParams } from 'react-router-dom' import { useReferTicket } from '../hooks/useTicketData' import Button from '../../../components/Button' -import { toast } from 'react-toastify' +import { toast } from '../../../components/Toast'; import { ErrorType } from '../../../helpers/types' type Props = { @@ -25,10 +25,10 @@ const ReferTicket: FC = ({ refetch }) => { referTicket.mutate({ id: id as string, userId }, { onSuccess: () => { refetch() - toast.success(t('ticket.refer_ticket_success')) + toast(t('ticket.refer_ticket_success'), 'success') }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error.message[0]) + toast(error.response?.data?.error.message[0], 'error') } }) } diff --git a/src/pages/users/Create.tsx b/src/pages/users/Create.tsx index 9ed7774..ab967e7 100644 --- a/src/pages/users/Create.tsx +++ b/src/pages/users/Create.tsx @@ -10,7 +10,7 @@ import { CreateUserType, RoleItemType } from './types/UserTypes' import * as Yup from 'yup' import { useSingleUpload } from '../service/hooks/useServiceData' import { useCreateUser, useGetRoles } from './hooks/useUserData' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { ErrorType } from '../../helpers/types' import { useNavigate } from 'react-router-dom' import { Pages } from '../../config/Pages' @@ -27,11 +27,11 @@ const CreateUser: FC = () => { const handleCreateUser = (values: CreateUserType) => { createUser.mutate(values, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.users.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } @@ -66,7 +66,7 @@ const CreateUser: FC = () => { handleCreateUser(values) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } else { diff --git a/src/pages/users/GroupCreate.tsx b/src/pages/users/GroupCreate.tsx index 1437f76..7d3aed9 100644 --- a/src/pages/users/GroupCreate.tsx +++ b/src/pages/users/GroupCreate.tsx @@ -12,7 +12,7 @@ import CheckBoxComponent from '../../components/CheckBoxComponent' import Textarea from '../../components/Textarea' import { useNavigate } from 'react-router-dom' import { Pages } from '../../config/Pages' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { ErrorType } from '../../helpers/types' const GroupCreate: FC = () => { @@ -42,11 +42,11 @@ const GroupCreate: FC = () => { navigate(Pages.users.groupList) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } else { - toast.error(t('user.error_count_users')) + toast(t('user.error_count_users'), 'error') } } }) diff --git a/src/pages/users/List.tsx b/src/pages/users/List.tsx index e8c3038..0e063f7 100644 --- a/src/pages/users/List.tsx +++ b/src/pages/users/List.tsx @@ -9,7 +9,7 @@ import { Pages } from '../../config/Pages' import { useDeleteUser, useGetUsers } from './hooks/useUserData' import { UserItemType } from './types/UserTypes' import PageLoading from '../../components/PageLoading' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { ErrorType } from '../../helpers/types' import Pagination from '../../components/Pagination' const UsersList: FC = () => { @@ -24,11 +24,11 @@ const UsersList: FC = () => { const handleDeleteUser = (id: string) => { deleteUser.mutate(id, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') getUsers.refetch() }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } diff --git a/src/pages/users/RoleCreate.tsx b/src/pages/users/RoleCreate.tsx index 27c9fdf..2fd7491 100644 --- a/src/pages/users/RoleCreate.tsx +++ b/src/pages/users/RoleCreate.tsx @@ -12,7 +12,7 @@ import * as Yup from 'yup' import { useNavigate } from 'react-router-dom' import { Pages } from '../../config/Pages' import { ErrorType } from '../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; const RoleCreate: FC = () => { @@ -48,11 +48,11 @@ const RoleCreate: FC = () => { navigate(Pages.users.roleList) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } else { - toast.error(t('user.error_count_permission')) + toast(t('user.error_count_permission'), 'error') } } }) diff --git a/src/pages/users/RoleUpdate.tsx b/src/pages/users/RoleUpdate.tsx index 0c31375..c8414ec 100644 --- a/src/pages/users/RoleUpdate.tsx +++ b/src/pages/users/RoleUpdate.tsx @@ -12,7 +12,7 @@ import * as Yup from 'yup' import { useNavigate, useParams } from 'react-router-dom' import { Pages } from '../../config/Pages' import { ErrorType } from '../../helpers/types' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; const RoleUpdate: FC = () => { @@ -46,15 +46,15 @@ const RoleUpdate: FC = () => { values.permissions = permissions updateRole.mutate({ id: id || '', params: values }, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.users.roleList) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } else { - toast.error(t('user.error_count_permission')) + toast(t('user.error_count_permission'), 'error') } } }) diff --git a/src/pages/users/Update.tsx b/src/pages/users/Update.tsx index 5b6c6ac..0dfb715 100644 --- a/src/pages/users/Update.tsx +++ b/src/pages/users/Update.tsx @@ -10,7 +10,7 @@ import { CreateUserType, RoleItemType } from './types/UserTypes' import * as Yup from 'yup' import { useSingleUpload } from '../service/hooks/useServiceData' import { useGetRoles, useGetUserDetail, useUpdateUser } from './hooks/useUserData' -import { toast } from 'react-toastify' +import { toast } from '../../components/Toast'; import { ErrorType } from '../../helpers/types' import { useNavigate, useParams } from 'react-router-dom' import { Pages } from '../../config/Pages' @@ -28,11 +28,11 @@ const UpdateUser: FC = () => { const handleUpdateUser = (values: CreateUserType) => { updateUser.mutate({ id: id || '', params: values }, { onSuccess: () => { - toast.success(t('success')) + toast(t('success'), 'success') navigate(Pages.users.list) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } @@ -69,7 +69,7 @@ const UpdateUser: FC = () => { handleUpdateUser(values) }, onError: (error: ErrorType) => { - toast.error(error.response?.data?.error?.message[0]) + toast(error.response?.data?.error?.message[0], 'error') } }) } else {