Restructure
This commit is contained in:
		
							parent
							
								
									da48f005a3
								
							
						
					
					
						commit
						22a3ca1769
					
				
					 16 changed files with 44 additions and 34 deletions
				
			
		
							
								
								
									
										85
									
								
								client-solid/src/Context/GlobalState.tsx
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								client-solid/src/Context/GlobalState.tsx
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,85 @@ | |||
| import { | ||||
|   Accessor, | ||||
|   JSXElement, | ||||
|   createContext, | ||||
|   createSignal, | ||||
|   onMount, | ||||
| } from "solid-js"; | ||||
| 
 | ||||
| // Representing the state of varoious modals.
 | ||||
| // So far we only have one modal, but we can add more later
 | ||||
| // by adding more fields to this interface, or maybe an enum
 | ||||
| interface ModalContextType { | ||||
|   isOpen: Accessor<boolean>; | ||||
|   setOpen: (value: boolean) => void; | ||||
| } | ||||
| 
 | ||||
| interface LoginContextType { | ||||
|   token: Accessor<string>; | ||||
|   setToken: (value: string) => void; | ||||
|   username: Accessor<string>; | ||||
|   setUsername: (value: string) => void; | ||||
|   loggedIn: () => boolean; | ||||
|   logOut: () => void; | ||||
|   logIn: (username: string, token: string) => void; | ||||
| } | ||||
| 
 | ||||
| // It is unclear to me if this is the idiomatic way to do this in Solid
 | ||||
| export const ModalContext = createContext<ModalContextType>(); | ||||
| export const LoginContext = createContext<LoginContextType>(); | ||||
| 
 | ||||
| export function GlobalStateProvider(props: { | ||||
|   children: JSXElement; | ||||
| }): JSXElement { | ||||
|   // All of these are passed into context providers
 | ||||
|   const [loginModalOpen, setLoginModalOpen] = createSignal(false); | ||||
|   const [token, setToken] = createSignal(""); | ||||
|   const [username, setUsername] = createSignal(""); | ||||
| 
 | ||||
|   onMount(() => { | ||||
|     // This may not be the best place to do this.
 | ||||
|     localStorage.getItem("token") && setToken(localStorage.getItem("token")!); | ||||
|     localStorage.getItem("username") && | ||||
|       setUsername(localStorage.getItem("username")!); | ||||
|   }); | ||||
| 
 | ||||
|   function loggedIn(): boolean { | ||||
|     return token() != "" && username() != ""; | ||||
|   } | ||||
| 
 | ||||
|   function logIn(username: string, token: string): void { | ||||
|     setUsername(username); | ||||
|     setToken(token); | ||||
|     localStorage.setItem("token", token); | ||||
|     localStorage.setItem("username", username); | ||||
|   } | ||||
| 
 | ||||
|   function logOut(): void { | ||||
|     localStorage.removeItem("token"); | ||||
|     localStorage.removeItem("username"); | ||||
|     setToken(""); | ||||
|     setUsername(""); | ||||
|   } | ||||
| 
 | ||||
|   return ( | ||||
|     <> | ||||
|       <ModalContext.Provider | ||||
|         value={{ isOpen: loginModalOpen, setOpen: setLoginModalOpen }} | ||||
|       > | ||||
|         <LoginContext.Provider | ||||
|           value={{ | ||||
|             token, | ||||
|             setToken, | ||||
|             username, | ||||
|             setUsername, | ||||
|             loggedIn, | ||||
|             logOut, | ||||
|             logIn, | ||||
|           }} | ||||
|         > | ||||
|           {props.children} | ||||
|         </LoginContext.Provider> | ||||
|       </ModalContext.Provider> | ||||
|     </> | ||||
|   ); | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Imbus
						Imbus