diff --git a/package-lock.json b/package-lock.json index d604e5a..af48fb6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,8 @@ "@mui/icons-material": "^5.15.15", "@mui/material": "^5.15.15", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "zustand": "^4.5.2" }, "devDependencies": { "@types/react": "^18.2.66", @@ -3843,6 +3844,14 @@ "punycode": "^2.1.0" } }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/vite": { "version": "5.2.10", "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.10.tgz", @@ -3944,6 +3953,33 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zustand": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.2.tgz", + "integrity": "sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g==", + "dependencies": { + "use-sync-external-store": "1.2.0" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } } } } diff --git a/package.json b/package.json index 0bfa4ee..7371bf0 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,8 @@ "@mui/icons-material": "^5.15.15", "@mui/material": "^5.15.15", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "zustand": "^4.5.2" }, "devDependencies": { "@types/react": "^18.2.66", diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index 04d528c..1186efe 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -1,6 +1,7 @@ import * as React from 'react'; import { AppBar, Box, Toolbar, IconButton, Typography, Menu, MenuItem, Container, Avatar, Tooltip, TextField, InputAdornment, Link } from '@mui/material'; import SearchIcon from '@mui/icons-material/Search'; +import { UserStore } from '../store/store' import logo from '../assets/Logo.png'; import user from '../assets/user.png'; diff --git a/src/store/store.ts b/src/store/store.ts new file mode 100644 index 0000000..644646d --- /dev/null +++ b/src/store/store.ts @@ -0,0 +1,31 @@ +import { create } from "zustand"; + +interface User { + isLogged: boolean; + email: string; + username: string; + avatar: string; + setIsLogged: () => void; + setEmail: () => void; + setUsername: () => void; + setAvatar: () => void; +} + +export const UserStore = create((set) => ({ + isLogged: false, + email: "", + username: "", + avatar: "", + setIsLogged: () => { + set((state) => ({ isLogged: !state.isLogged })); + }, + setEmail: () => { + set((state) => ({ email: state.email })); + }, + setUsername: () => { + set((state) => ({ username: state.username })); + }, + setAvatar: () => { + set((state) => ({ avatar: state.avatar })); + }, +}));