diff options
author | Galen Guyer <galen@galenguyer.com> | 2022-06-02 23:11:08 -0400 |
---|---|---|
committer | Galen Guyer <galen@galenguyer.com> | 2022-06-02 23:11:08 -0400 |
commit | 84a119a974959e5da0d7024fc9f49cca94e926e8 (patch) | |
tree | eab5cb771d26cb8f4b99ebc55b46a4d2af6dfc38 | |
parent | 5ea24c896eb3ac94c260c62178e7a35320970efb (diff) |
create useFeatures and FeaturesProvider
-rw-r--r-- | src/hooks/useFeatures.js | 28 | ||||
-rw-r--r-- | src/index.js | 21 | ||||
-rw-r--r-- | src/routes/Login.js | 4 |
3 files changed, 43 insertions, 10 deletions
diff --git a/src/hooks/useFeatures.js b/src/hooks/useFeatures.js new file mode 100644 index 0000000..b91399e --- /dev/null +++ b/src/hooks/useFeatures.js @@ -0,0 +1,28 @@ +import React from "react"; +import { useEffect } from "react"; + +const FeaturesContext = React.createContext(); + +export function FeaturesProvider({ children }) { + const [features, setFeatures] = React.useState([]); + + useEffect(() => { + fetch('/api/v1/features') + .then(response => response.json()) + .then(data => { + console.debug("features:", data); + setFeatures(data); + }) + .catch(error => { + console.error(error); + }); + }, []); + + return <FeaturesContext.Provider value={features}> + {children} + </FeaturesContext.Provider> +} + +export function useFeatures() { + return React.useContext(FeaturesContext); +} diff --git a/src/index.js b/src/index.js index ea84600..a679253 100644 --- a/src/index.js +++ b/src/index.js @@ -1,24 +1,27 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import ReactDOM from 'react-dom/client'; import { BrowserRouter, Routes, Route, Link } from "react-router-dom"; import './index.css'; -// import App from './App'; import SignUp from './routes/SignUp.js'; import Login from './routes/Login'; import reportWebVitals from './reportWebVitals'; import { AuthProvider } from './hooks/useAuth'; +import { FeaturesProvider } from './hooks/useFeatures'; const root = ReactDOM.createRoot(document.getElementById('root')); + root.render( <React.StrictMode> <AuthProvider> - <BrowserRouter> - <Routes> - { /* <Route path="/" element={<Home />} /> */} - <Route path="login" element={<Login />} /> - <Route path="signup" element={<SignUp />} /> - </Routes> - </BrowserRouter> + <FeaturesProvider> + <BrowserRouter> + <Routes> + { /* <Route path="/" element={<Home />} /> */} + <Route path="login" element={<Login />} /> + <Route path="signup" element={<SignUp />} /> + </Routes> + </BrowserRouter> + </FeaturesProvider> </AuthProvider> </React.StrictMode> ); diff --git a/src/routes/Login.js b/src/routes/Login.js index 49ec5ed..85e0f88 100644 --- a/src/routes/Login.js +++ b/src/routes/Login.js @@ -1,4 +1,4 @@ -import { useEffect, useState } from "react"; +import { useContext, useEffect, useState } from "react"; import React from "react"; import { Routes, @@ -12,6 +12,7 @@ import { import Button from "../uikit/Button.js"; import Input from "../uikit/Input.js"; import { useAuth } from "../hooks/useAuth"; +import { useFeatures } from "../hooks/useFeatures"; import { isExpired } from "react-jwt"; import { styled } from "@stitches/react"; import { debounce } from "lodash"; @@ -62,6 +63,7 @@ function Login(props) { let auth = useAuth(); let navigate = useNavigate(); let location = useLocation(); + let features = useFeatures(); const [totpRequired, setTotpRequired] = useState(false); let from = location.state?.from?.pathname || "/"; |