├── src
├── routes
│ ├── Home.jsx
│ └── Login.jsx
├── components
│ ├── RequireAuth.jsx
│ └── Navbar.jsx
├── index.css
├── context
│ └── UserProvider.jsx
├── main.jsx
├── App.jsx
└── favicon.svg
├── vite.config.js
├── .gitignore
└── index.html
/src/routes/Home.jsx:
--------------------------------------------------------------------------------
1 | const Home = () => {
2 | return (
3 | <>
4 |
Home
5 | >
6 | );
7 | };
8 |
9 | export default Home;
10 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [react()]
7 | })
8 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite App
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/components/RequireAuth.jsx:
--------------------------------------------------------------------------------
1 | import { useContext } from "react";
2 | import { UserContext } from "../context/UserProvider";
3 | import { Navigate } from "react-router-dom";
4 |
5 | const RequireAuth = ({ children }) => {
6 | const { user } = useContext(UserContext);
7 |
8 | if (!user) {
9 | return ;
10 | }
11 |
12 | return children;
13 | };
14 |
15 | export default RequireAuth;
16 |
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/src/context/UserProvider.jsx:
--------------------------------------------------------------------------------
1 | import { createContext, useState } from "react";
2 |
3 | export const UserContext = createContext();
4 |
5 | const UserProvider = ({ children }) => {
6 | const [user, setUser] = useState(false);
7 |
8 | return (
9 |
10 | {children}
11 |
12 | );
13 | };
14 |
15 | export default UserProvider;
16 |
--------------------------------------------------------------------------------
/src/main.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom";
3 | import "./index.css";
4 | import App from "./App";
5 |
6 | import { BrowserRouter } from "react-router-dom";
7 | import UserProvider from "./context/UserProvider";
8 |
9 | ReactDOM.render(
10 |
11 |
12 |
13 |
14 | ,
15 | document.getElementById("root")
16 | );
17 |
--------------------------------------------------------------------------------
/src/components/Navbar.jsx:
--------------------------------------------------------------------------------
1 | import { useContext } from "react";
2 | import { NavLink } from "react-router-dom";
3 | import { UserContext } from "../context/UserProvider";
4 | const Navbar = () => {
5 | const { user, setUser } = useContext(UserContext);
6 |
7 | return (
8 |
9 | {user ? (
10 | <>
11 | Inicio
12 |
13 | >
14 | ) : (
15 | Login
16 | )}
17 |
18 | );
19 | };
20 |
21 | export default Navbar;
22 |
--------------------------------------------------------------------------------
/src/routes/Login.jsx:
--------------------------------------------------------------------------------
1 | import { useContext } from "react";
2 | import { UserContext } from "../context/UserProvider";
3 | import { useNavigate } from "react-router-dom";
4 |
5 | const Login = () => {
6 | const { user, setUser } = useContext(UserContext);
7 | const navegate = useNavigate();
8 |
9 | const handleClickLogin = () => {
10 | setUser(true);
11 | navegate("/");
12 | };
13 |
14 | return (
15 | <>
16 | Login
17 | {user ? "En línea" : "Offline"}
18 |
19 | >
20 | );
21 | };
22 |
23 | export default Login;
24 |
--------------------------------------------------------------------------------
/src/App.jsx:
--------------------------------------------------------------------------------
1 | import { Routes, Route } from "react-router-dom";
2 |
3 | import Login from "./routes/Login";
4 | import Home from "./routes/Home";
5 | import Navbar from "./components/Navbar";
6 | import RequireAuth from "./components/RequireAuth";
7 |
8 | const App = () => {
9 | return (
10 | <>
11 |
12 | APP
13 |
14 |
18 |
19 |
20 | }
21 | />
22 | } />
23 |
24 | >
25 | );
26 | };
27 |
28 | export default App;
29 |
--------------------------------------------------------------------------------
/src/favicon.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------