Guest User

Untitled

a guest
Mar 29th, 2021
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { useAsync } from "@hooks/useAsync";
  2. import { ISettingDto } from "@route/v1/card2card/interfaces";
  3. import { createContext, ReactNode, useContext } from "react";
  4. import { request } from "utils/dbo-request";
  5. import { useSession } from "./Session";
  6.  
  7. export interface ISettingsStateContext {
  8.   // execute: () => Promise<void>;
  9.   status: string;
  10.   // value: unknown;// ISettingDto | null;
  11.   // error: any;
  12. }
  13.  
  14. const SettingsStateContext = createContext<ISettingsStateContext | undefined>(
  15.   undefined
  16. );
  17.  
  18. const getSettings = (): Promise<ISettingDto> =>
  19.   new Promise((resolve, reject) => {
  20.     request<ISettingDto>({ method: "GET", url: "api/v1/card2card/settings" })
  21.       .then((data) => resolve(data))
  22.       .catch((error) => reject(error));
  23.   });
  24.  
  25. const sleep = (time = 1000) =>
  26.   new Promise((resolve) => setTimeout(resolve, time));
  27.  
  28. function SettingsProvider({ children }: { children: ReactNode }) {
  29.   console.log("run SettingsProvider");
  30.   const { state } = useSession();
  31.  
  32.   const { status, value } = useAsync<unknown>(
  33.     sleep,
  34.     state === "success"
  35.   );
  36.  
  37.   console.group("SettingsProvider");
  38.   console.log("status", state);
  39.   console.log({ status, value });
  40.   console.groupEnd();
  41.   return (
  42.     <SettingsStateContext.Provider
  43.       value={{ status }}
  44.       children={children}
  45.     />
  46.   );
  47. }
  48.  
  49. function useSettings() {
  50.   const context = useContext(SettingsStateContext);
  51.  
  52.   if (context === undefined) {
  53.     throw new Error("useSettings must be used within a SettingsProvider");
  54.   }
  55.  
  56.   return context;
  57. }
  58.  
  59. export { SettingsProvider, useSettings };
  60.  
Advertisement
Add Comment
Please, Sign In to add comment