ErrorContext.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import React, { createContext, useState, useContext, useRef } from 'react';
  2. import { useErrorStore } from 'src/stores/errorStore';
  3. const ErrorContext = createContext<{
  4. error: string | null;
  5. showError: (message: string, loginNeeded: boolean) => void;
  6. hideError: () => void;
  7. resetErrorState: () => void;
  8. navigateToLogin: boolean;
  9. navigateToAuth: boolean;
  10. premiumError: boolean;
  11. }>({
  12. error: null,
  13. showError: (message: string, loginNeeded: boolean) => {},
  14. hideError: () => {},
  15. resetErrorState: () => {},
  16. navigateToLogin: false,
  17. navigateToAuth: false,
  18. premiumError: false
  19. });
  20. export const ErrorProvider = ({ children }: { children: React.ReactNode }) => {
  21. const { isErrorShown, setErrorShown } = useErrorStore.getState();
  22. const [error, setError] = useState<string | null>(null);
  23. const [navigateToLogin, setNavigateToLogin] = useState<boolean>(false);
  24. const [navigateToAuth, setNavigateToAuth] = useState<boolean>(false);
  25. const [premiumError, setPremiumError] = useState<boolean>(false);
  26. const showError = (
  27. message: string,
  28. loginNeeded: boolean,
  29. authNeeded: boolean = false,
  30. premiumNeeded: boolean = false
  31. ) => {
  32. if (!isErrorShown) {
  33. setErrorShown(true);
  34. setError(message);
  35. setNavigateToLogin(loginNeeded);
  36. setNavigateToAuth(authNeeded);
  37. setPremiumError(premiumNeeded);
  38. }
  39. };
  40. const hideError = () => {
  41. setError(null);
  42. };
  43. const resetErrorState = () => {
  44. setTimeout(() => {
  45. setErrorShown(false);
  46. }, 10000);
  47. };
  48. return (
  49. <ErrorContext.Provider
  50. value={{
  51. error,
  52. showError,
  53. hideError,
  54. resetErrorState,
  55. navigateToLogin,
  56. navigateToAuth,
  57. premiumError
  58. }}
  59. >
  60. {children}
  61. </ErrorContext.Provider>
  62. );
  63. };
  64. export const useError = () => useContext(ErrorContext);