Compare commits
	
		
			2 Commits
		
	
	
		
			9dcebb9d88
			...
			2798c9d759
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 2798c9d759 | |||
| d27071dbd3 | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/pic_cole.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 122 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/pic_dustin.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 236 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/pic_elias.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 178 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/pic_fannie.jpeg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 131 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/pic_lucas.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 82 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/pic_natorion.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 72 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/pic_scarlett.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 183 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/qr_cole.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 6.3 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/qr_dustin.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 6.3 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/qr_elias.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 6.3 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/qr_fannie.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 6.3 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/qr_lucas.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 6.3 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/qr_natorion.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 6.3 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/qr_scarlett.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 6.3 KiB | 
| @@ -220,8 +220,8 @@ $white: #fff; | ||||
| } | ||||
|  | ||||
| .modal-return { | ||||
|   width: 30px; | ||||
|   height: 20px; | ||||
|   width: auto; | ||||
|   height: auto; | ||||
|   align-items: center; | ||||
|   justify-content: center; | ||||
|   margin-left: 10px; | ||||
|   | ||||
| @@ -66,19 +66,19 @@ $white: #fff; | ||||
|   text-align: left; | ||||
| } | ||||
|  | ||||
| .settings-powerContainer, | ||||
| .settings-grid, | ||||
| .settings-creditsContainer { | ||||
|   width: 80%; | ||||
|   height: 100px; | ||||
|   height: auto; | ||||
|   background: linear-gradient( | ||||
|     -30deg, | ||||
|     rgb(187 208 236) 0%, | ||||
|     rgb(255 255 255 / 100%) 100% | ||||
|   ); | ||||
|   display: flex; | ||||
|   align-items: center; | ||||
|   justify-content: flex-start; | ||||
|   flex-direction: row; | ||||
|   align-items: flex-start; | ||||
|   justify-content: center; | ||||
|   flex-direction: column; | ||||
|   border-radius: 20px; | ||||
|   border: 1px solid $gray; | ||||
|   margin-bottom: 5px; | ||||
| @@ -89,6 +89,29 @@ $white: #fff; | ||||
|   filter: drop-shadow(0 4px 4px rgb(0 0 0 / 25%)); | ||||
| } | ||||
|  | ||||
| .settings-gridInner { | ||||
|   width: 100%; | ||||
|   height: auto; | ||||
|   display: flex; | ||||
|   flex-direction: row; | ||||
|   justify-content: flex-start; | ||||
|   align-items: center; | ||||
|   padding: 15px 0px 15px 0px; | ||||
|   background-color: transparent; | ||||
| } | ||||
|  | ||||
| .settings-grid h2 { | ||||
|   width: 100%; | ||||
|   height: auto; | ||||
|   font-size: 24px; | ||||
|   font-weight: bold; | ||||
|   color: $dark-blue; | ||||
|   font-family: "Gotham Medium"; | ||||
|   text-align: left; | ||||
|   padding: 20px 10px 0px 10px; | ||||
|   background-color: transparent; | ||||
| } | ||||
|  | ||||
| .settings-creditsContainer { | ||||
|   height: 500px; | ||||
|   display: flex; | ||||
| @@ -96,10 +119,10 @@ $white: #fff; | ||||
|   align-items: center; | ||||
| } | ||||
|  | ||||
| .settings-powerButton { | ||||
|   width: 200px; | ||||
|   height: 50px; | ||||
|   border-radius: 20px; | ||||
| .settings-button { | ||||
|   width: auto; | ||||
|   height: 40px; | ||||
|   border-radius: 15px; | ||||
|   background: linear-gradient( | ||||
|     15deg, | ||||
|     rgb(223 223 223) 0%, | ||||
| @@ -112,78 +135,182 @@ $white: #fff; | ||||
|   filter: drop-shadow(5px 5px 2px rgb(0 0 0 / 15%)); | ||||
|   cursor: pointer; | ||||
|   text-decoration: none; | ||||
|   margin-right: 20px; | ||||
|   margin-left: 20px; | ||||
|   margin-right: 10px; | ||||
|   margin-left: 10px; | ||||
| } | ||||
|  | ||||
| .settings-powerButton span { | ||||
| .settings-button span { | ||||
|   width: auto; | ||||
|   height: auto; | ||||
|   font-size: 20px; | ||||
|   margin-top: 2px; | ||||
|   font-size: 16px; | ||||
|   color: $medium-blue; | ||||
|   font-family: "Gotham Bold"; | ||||
|   background-color: transparent; | ||||
|   padding: 10px; | ||||
| } | ||||
|  | ||||
| .settings-credits { | ||||
|   width: 95%; | ||||
|   height: 430px; | ||||
| .settings-form { | ||||
|   width: 100%; | ||||
|   height: auto; | ||||
|   display: flex; | ||||
|   align-items: center; | ||||
|   justify-content: center; | ||||
|   flex-direction: row; | ||||
|   background-color: transparent; | ||||
| } | ||||
|  | ||||
| // text box | ||||
| #sendobject { | ||||
|   width: 90%; | ||||
|   height: 20px; | ||||
|   border-radius: 15px; | ||||
|   background-color: $white; | ||||
|   display: flex; | ||||
|   justify-content: flex-start; | ||||
|   align-items: flex-start; | ||||
|   flex-direction: column; | ||||
|   transition: all 0.3s ease-in-out; | ||||
|   filter: drop-shadow(5px 5px 2px rgb(0 0 0 / 15%)); | ||||
|   text-decoration: none; | ||||
|   margin-right: 10px; | ||||
|   margin-left: 10px; | ||||
|   padding: 10px; | ||||
|   margin-top: 10px; | ||||
|   margin-bottom: 10px; | ||||
|   border: 1px solid rgb(199, 199, 199); | ||||
|   text-align: left; | ||||
| } | ||||
|  | ||||
| .entry-links, | ||||
| .entry-name, | ||||
| .entry-position, | ||||
| .settings-credits-title { | ||||
| #sendobject:focus { | ||||
|   outline: none; | ||||
| } | ||||
|  | ||||
| #sendobjectButton { | ||||
|   width: 10%; | ||||
|   height: 40px; | ||||
|   border-radius: 15px; | ||||
|   background: linear-gradient( | ||||
|     15deg, | ||||
|     rgb(223 223 223) 0%, | ||||
|     rgb(255 255 255) 100% | ||||
|   ); | ||||
|   display: flex; | ||||
|   justify-content: center; | ||||
|   align-items: center; | ||||
|   transition: all 0.3s ease-in-out; | ||||
|   filter: drop-shadow(5px 5px 2px rgb(0 0 0 / 15%)); | ||||
|   cursor: pointer; | ||||
|   text-decoration: none; | ||||
|   margin-right: 10px; | ||||
|   margin-left: 10px; | ||||
|   margin-top: 10px; | ||||
|   margin-bottom: 10px; | ||||
| } | ||||
|  | ||||
| #creditsgrid { | ||||
|   width: 100%; | ||||
|   height: auto; | ||||
|   display: flex; | ||||
|   flex-direction: row; | ||||
|   flex-wrap: wrap; | ||||
|   justify-content: center; | ||||
|   align-items: center; | ||||
|   //background-color: red; | ||||
| } | ||||
|  | ||||
| .entry { | ||||
|   width: 48%; | ||||
|   height: 150px; | ||||
|   border-radius: 15px; | ||||
|   background: linear-gradient( | ||||
|     15deg, | ||||
|     rgb(223 223 223) 0%, | ||||
|     rgb(255 255 255) 100% | ||||
|   ); | ||||
|   display: flex; | ||||
|   justify-content: center; | ||||
|   align-items: center; | ||||
|   transition: all 0.3s ease-in-out; | ||||
|   filter: drop-shadow(5px 5px 2px rgb(0 0 0 / 15%)); | ||||
|   text-decoration: none; | ||||
|   margin: 10px 10px 10px 10px; | ||||
| } | ||||
|  | ||||
| .entry-image { | ||||
|   width: auto; | ||||
|   height: auto; | ||||
|   text-align: left; | ||||
|   font-family: "Gotham Medium"; | ||||
|   color: $light-blue; | ||||
|   font-size: 20px; | ||||
|   display: flex; | ||||
|   background-color: transparent; | ||||
|   background: transparent; | ||||
|   text-decoration: none; | ||||
|   margin-bottom: 7px; | ||||
|   margin-right: 30px; | ||||
| } | ||||
|  | ||||
| .settings-credits-title { | ||||
| .entry-img, | ||||
| .entry-qr { | ||||
|   width: 110px; | ||||
|   height: 110px; | ||||
|   background: linear-gradient( | ||||
|     15deg, | ||||
|     rgb(223 223 223) 0%, | ||||
|     rgb(255 255 255) 100% | ||||
|   ); | ||||
|   display: flex; | ||||
|   justify-content: center; | ||||
|   align-items: center; | ||||
|   border-radius: 15px; | ||||
|   margin: 10px; | ||||
|   filter: drop-shadow(5px 5px 2px rgb(0 0 0 / 15%)); | ||||
|   border: 1px solid $gray; | ||||
| } | ||||
|  | ||||
| .entry-qr { | ||||
|   margin: 0px; | ||||
|   padding: 8px; | ||||
|   width: 40px; | ||||
|   height: 40px; | ||||
|   border-radius: 50px; | ||||
|   background: white; | ||||
|   position: fixed; | ||||
|   bottom: 5px; | ||||
|   margin-left: 90px; | ||||
| } | ||||
|  | ||||
| .entry-qr img { | ||||
|   border-radius: 0px; | ||||
|   width: auto; | ||||
|   height: auto; | ||||
|   background: red; | ||||
| } | ||||
|  | ||||
| .entry-title { | ||||
|   width: 70%; | ||||
|   height: 50%; | ||||
|   margin-left: 30px; | ||||
|   display: flex; | ||||
|   align-items: flex-start; | ||||
|   justify-content: center; | ||||
|   flex-direction: column; | ||||
|   background-color: transparent; | ||||
| } | ||||
|  | ||||
| .entry-title h2, | ||||
| .entry-title h3 { | ||||
|   width: auto; | ||||
|   height: auto; | ||||
|   font-size: 24px; | ||||
|   font-weight: bold; | ||||
|   color: $dark-blue; | ||||
|   font-family: "Gotham Medium"; | ||||
|   margin-bottom: 10px; | ||||
| } | ||||
|  | ||||
| .entry { | ||||
|   width: 100%; | ||||
|   height: auto; | ||||
|   display: flex; | ||||
|   justify-content: flex-start; | ||||
|   align-items: center; | ||||
|   text-align: left; | ||||
|   background-color: transparent; | ||||
|   text-align: start; | ||||
|   margin: 0px; | ||||
|   padding: 0px; | ||||
| } | ||||
|  | ||||
| .entry-name { | ||||
|   width: auto; | ||||
|   height: auto; | ||||
|   color: $medium-blue; | ||||
| .entry-title h2 { | ||||
|   margin-bottom: 5px; | ||||
| } | ||||
|  | ||||
| .entry-position { | ||||
|   width: auto; | ||||
|   height: auto; | ||||
| .entry-title h3 { | ||||
|   font-size: 16px; | ||||
|   font-weight: normal; | ||||
|   color: $light-blue; | ||||
| } | ||||
|  | ||||
| .entry-links { | ||||
|   width: auto; | ||||
|   height: auto; | ||||
|   color: $hover-blue; | ||||
| } | ||||
|   | ||||
| @@ -1,24 +1,114 @@ | ||||
| import React, { Component } from "react"; | ||||
| import BeldenLogo from "../assets/images/belden-white.png"; | ||||
| import Modal from "react-modal"; | ||||
| import "../assets/stylesheets/settings.scss"; | ||||
|  | ||||
| Modal.setAppElement("#root"); | ||||
|  | ||||
| export default class SettingsComponent extends Component { | ||||
|   shutdownPower = () => { | ||||
|     console.log("Shutting down..."); | ||||
|     this.props.socket.send('{"type":"shutdown","call":"request","data":{}}'); | ||||
|   constructor(props) { | ||||
|     super(props); | ||||
|     this.state = { | ||||
|       modalOpen_quickAction: false, | ||||
|       modalOpacity: 0, | ||||
|       action: "", | ||||
|     }; | ||||
|     this.openModal = this.openModal.bind(this); | ||||
|     this.closeModal = this.closeModal.bind(this); | ||||
|   } | ||||
|  | ||||
|   quickAction = (action, requirePrompt) => { | ||||
|     if (requirePrompt) { | ||||
|       this.openModal("modalOpen_quickAction", action); | ||||
|     } else { | ||||
|       this.quickActionPerform(action); | ||||
|     } | ||||
|   }; | ||||
|  | ||||
|   restartPower = () => { | ||||
|     console.log("Restarting..."); | ||||
|     this.props.socket.send('{"type":"restart","call":"request","data":{}}'); | ||||
|   quickActionPerform = (action) => { | ||||
|     switch (action) { | ||||
|       case "shutdown": | ||||
|         console.log("Shutting down..."); | ||||
|         this.props.socket.send( | ||||
|           '{"type":"shutdown","call":"request","data":{}}' | ||||
|         ); | ||||
|         break; | ||||
|       case "restart": | ||||
|         console.log("Restarting..."); | ||||
|         this.props.socket.send('{"type":"restart","call":"request","data":{}}'); | ||||
|         break; | ||||
|       case "home": | ||||
|         console.log("Homing..."); | ||||
|         this.props.socket.send('{"type":"home","call":"request","data":{}}'); | ||||
|         break; | ||||
|       default: | ||||
|         console.log("Invalid action"); | ||||
|         break; | ||||
|     } | ||||
|   }; | ||||
|  | ||||
|   modeMessage = () => { | ||||
|     console.log("Sending 'mode' message..."); | ||||
|     this.props.socket.send('{"type":"mode","call":"request","data":{}}'); | ||||
|   openModal = (modal, action) => { | ||||
|     this.setState({ [modal]: true }, () => { | ||||
|       setTimeout(() => this.setState({ modalOpacity: 1 }), 100); | ||||
|     }); | ||||
|     this.setState({ action }); | ||||
|   }; | ||||
|  | ||||
|   closeModal = (modal) => { | ||||
|     this.setState({ modalOpacity: 0 }, () => { | ||||
|       setTimeout(() => this.setState({ [modal]: false }), 300); | ||||
|     }); | ||||
|   }; | ||||
|  | ||||
|   performActionCloseModal = () => { | ||||
|     console.log("Performing action: " + this.state.action); | ||||
|     this.quickActionPerform(this.state.action); | ||||
|     this.closeModal("modalOpen_quickAction"); | ||||
|   }; | ||||
|  | ||||
|   sendObject = () => { | ||||
|     const object = document.getElementById("sendobject").value; | ||||
|     console.log("Sending object: " + object); | ||||
|     this.props.socket.send | ||||
|       ? this.props.socket.send(object) | ||||
|       : console.log("No socket connection"); | ||||
|   }; | ||||
|  | ||||
|   render() { | ||||
|     const { modalOpen_quickAction, modalOpacity } = this.state; | ||||
|  | ||||
|     const modalStyle = { | ||||
|       content: { | ||||
|         opacity: modalOpacity, | ||||
|         transition: "opacity 300ms ease-in-out", | ||||
|         top: "50%", | ||||
|         left: "50%", | ||||
|         right: "auto", | ||||
|         bottom: "auto", | ||||
|         marginRight: "-50%", | ||||
|         width: "auto", | ||||
|         height: "auto", | ||||
|         transform: "translate(-50%, -50%)", | ||||
|         overflow: "hidden", | ||||
|         display: "flex", | ||||
|         flexDirection: "column", | ||||
|         justifyContent: "center", | ||||
|         alignItems: "center", | ||||
|         borderRadius: "20px", | ||||
|         background: | ||||
|           "linear-gradient(-30deg, rgb(187, 194, 236) 0%, rgba(255, 255, 255, 1) 100%)", | ||||
|         boxShadow: "0 0 20px rgba(0, 0, 0, 0.5)", | ||||
|         minWidth: "30%", | ||||
|         minHeight: "30%", | ||||
|       }, | ||||
|       overlay: { | ||||
|         opacity: modalOpacity, | ||||
|         transition: "opacity 300ms ease-in-out", | ||||
|         backgroundColor: "rgba(255, 255, 255, 0.15)", | ||||
|         backdropFilter: "blur(5px)", | ||||
|       }, | ||||
|     }; | ||||
|  | ||||
|     return ( | ||||
|       <div className="settings"> | ||||
|         <div className="settings-image"> | ||||
| @@ -26,94 +116,227 @@ export default class SettingsComponent extends Component { | ||||
|         </div> | ||||
|         <div className="settings-fieldContainer"> | ||||
|           <h1 className="settings-title">⚙️ Settings</h1> | ||||
|           <div className="settings-powerContainer"> | ||||
|             <div | ||||
|               className="settings-powerButton" | ||||
|               onClick={() => this.shutdownPower()} | ||||
|             > | ||||
|               <span>🔴 Power Off</span> | ||||
|           <div className="settings-grid"> | ||||
|             <h2>⚡Quick Actions:</h2> | ||||
|             <div className="settings-gridInner"> | ||||
|               <div | ||||
|                 className="settings-button" | ||||
|                 onClick={() => this.quickAction("shutdown", true)} | ||||
|               > | ||||
|                 <span>🔴 Power Off</span> | ||||
|               </div> | ||||
|               <div | ||||
|                 className="settings-button" | ||||
|                 onClick={() => this.quickAction("restart", false)} | ||||
|               > | ||||
|                 <span>🟠 Restart</span> | ||||
|               </div> | ||||
|               <div | ||||
|                 className="settings-button" | ||||
|                 onClick={() => this.quickAction("home", false)} | ||||
|               > | ||||
|                 <span>🏠 Home Arm</span> | ||||
|               </div> | ||||
|             </div> | ||||
|             <div | ||||
|               className="settings-powerButton" | ||||
|               onClick={() => this.modeMessage()} | ||||
|             > | ||||
|               <span>Send "mode"</span> | ||||
|             </div> | ||||
|             {/* <div | ||||
|               className="settings-powerButton" | ||||
|               onClick={() => this.restartPower()} | ||||
|             > | ||||
|               <span>🟨 Restart</span> | ||||
|             </div> */} | ||||
|           </div> | ||||
|           <div className="settings-creditsContainer"> | ||||
|             <div className="settings-credits"> | ||||
|               <h2 className="settings-credits-title">Credits:</h2> | ||||
|               <div className="entry"> | ||||
|                 <span className="entry-name">Cole Deck,</span> | ||||
|                 <span className="entry-position">Project Lead,</span> | ||||
|                 <a className="entry-links" href="https://deck.sh"> | ||||
|                   https://deck.sh | ||||
|                 </a> | ||||
|               </div> | ||||
|               <div className="entry"> | ||||
|                 <span className="entry-name">Natorion Johnson,</span> | ||||
|                 <span className="entry-position">Lead PCB assembler,</span> | ||||
|                 <a | ||||
|                   className="entry-links" | ||||
|                   href="https://linkedin.com/in/NatorionJ" | ||||
|           <div className="settings-grid"> | ||||
|             <h2>💻Send Object:</h2> | ||||
|             <div className="settings-gridInner"> | ||||
|               <form className="settings-form"> | ||||
|                 <input | ||||
|                   id="sendobject" | ||||
|                   type="text" | ||||
|                   name="sendobject" | ||||
|                   placeholder={`{"type":"cable_map","call":"request","data":{}}`} | ||||
|                 /> | ||||
|                 <div | ||||
|                   className="settings-button" | ||||
|                   id="sendobjectButton" | ||||
|                   onClick={() => this.sendObject()} | ||||
|                 > | ||||
|                   https://linkedin.com/in/NatorionJ | ||||
|                 </a> | ||||
|               </div> | ||||
|                   <span>Send</span> | ||||
|                 </div> | ||||
|               </form> | ||||
|             </div> | ||||
|           </div> | ||||
|           <div className="settings-grid"> | ||||
|             <h2>⚒️Credits:</h2> | ||||
|             <div id="creditsgrid" className="settings-gridInner"> | ||||
|               <div className="entry"> | ||||
|                 <span className="entry-name">Fannie Yu,</span> | ||||
|                 <span className="entry-position"> | ||||
|                   CAD Design, Fabrication Planner | ||||
|                 </span> | ||||
|                 <a | ||||
|                   className="entry-links" | ||||
|                   href="https://linkedin.com/in/fannieyu" | ||||
|                 > | ||||
|                   https://linkedin.com/in/fannieyu | ||||
|                 </a> | ||||
|                 <div className="entry-image"> | ||||
|                   <img | ||||
|                     className="entry-img" | ||||
|                     src={require("../assets/images/pic_cole.jpg")} | ||||
|                     alt="Cole Deck" | ||||
|                   /> | ||||
|                   <div className="entry-qr"> | ||||
|                     <img | ||||
|                       src={require("../assets/images/qr_cole.png")} | ||||
|                       alt="QR" | ||||
|                     /> | ||||
|                   </div> | ||||
|                 </div> | ||||
|                 <div className="entry-title"> | ||||
|                   <h2>Cole Deck</h2> | ||||
|                   <h3>Project Lead</h3> | ||||
|                 </div> | ||||
|               </div> | ||||
|  | ||||
|               <div className="entry"> | ||||
|                 <span className="entry-name">Elias Frey Reschly,</span> | ||||
|                 <span className="entry-position"> | ||||
|                   Mechanical Design, Fabrication | ||||
|                 </span> | ||||
|                 <div className="entry-links"></div> | ||||
|                 <div className="entry-image"> | ||||
|                   <img | ||||
|                     className="entry-img" | ||||
|                     src={require("../assets/images/pic_scarlett.jpg")} | ||||
|                     alt="Scarlett Kadan" | ||||
|                   /> | ||||
|                   <div className="entry-qr"> | ||||
|                     <img | ||||
|                       src={require("../assets/images/qr_scarlett.png")} | ||||
|                       alt="QR" | ||||
|                     /> | ||||
|                   </div> | ||||
|                 </div> | ||||
|                 <div className="entry-title"> | ||||
|                   <h2>Scarlett Kadan</h2> | ||||
|                   <h3>Lead Front-End Dev, UI/UX Designer</h3> | ||||
|                 </div> | ||||
|               </div> | ||||
|  | ||||
|               <div className="entry"> | ||||
|                 <span className="entry-name">Scarlett Kadan,</span> | ||||
|                 <span className="entry-position"> | ||||
|                   Front-End Dev, UI/UX Designer, | ||||
|                 </span> | ||||
|                 <a className="entry-links" href="https://kadan.live"> | ||||
|                   https://kadan.live | ||||
|                 </a> | ||||
|                 <div className="entry-image"> | ||||
|                   <img | ||||
|                     className="entry-img" | ||||
|                     src={require("../assets/images/pic_natorion.jpg")} | ||||
|                     alt="Natorion Johnson" | ||||
|                   /> | ||||
|                   <div className="entry-qr"> | ||||
|                     <img | ||||
|                       src={require("../assets/images/qr_natorion.png")} | ||||
|                       alt="QR" | ||||
|                     /> | ||||
|                   </div> | ||||
|                 </div> | ||||
|                 <div className="entry-title"> | ||||
|                   <h2>Natorion Johnson</h2> | ||||
|                   <h3>Lead PCB assembler</h3> | ||||
|                 </div> | ||||
|               </div> | ||||
|  | ||||
|               <div className="entry"> | ||||
|                 <span className="entry-name">Lucas Ferguson,</span> | ||||
|                 <span className="entry-position">Front-End Dev,</span> | ||||
|                 <a | ||||
|                   className="entry-links" | ||||
|                   href="https://lucasferguson.webflow.io" | ||||
|                 > | ||||
|                   https://lucasferguson.webflow.io | ||||
|                 </a> | ||||
|                 <div className="entry-image"> | ||||
|                   <img | ||||
|                     className="entry-img" | ||||
|                     src={require("../assets/images/pic_fannie.jpeg")} | ||||
|                     alt="Fannie Yu" | ||||
|                   /> | ||||
|                   <div className="entry-qr"> | ||||
|                     <img | ||||
|                       src={require("../assets/images/qr_fannie.png")} | ||||
|                       alt="QR" | ||||
|                     /> | ||||
|                   </div> | ||||
|                 </div> | ||||
|                 <div className="entry-title"> | ||||
|                   <h2>Fannie Yu</h2> | ||||
|                   <h3>CAD Design, Fabrication Planner</h3> | ||||
|                 </div> | ||||
|               </div> | ||||
|  | ||||
|               <div className="entry"> | ||||
|                 <span className="entry-name">Dustin Thomas,</span> | ||||
|                 <span className="entry-position">Back-End Dev,</span> | ||||
|                 <a className="entry-links" href="https://cptlobster.dev"> | ||||
|                   https://cptlobster.dev | ||||
|                 </a> | ||||
|                 <div className="entry-image"> | ||||
|                   <img | ||||
|                     className="entry-img" | ||||
|                     src={require("../assets/images/pic_elias.jpg")} | ||||
|                     alt="Elias Reschly" | ||||
|                   /> | ||||
|                   <div className="entry-qr"> | ||||
|                     <img | ||||
|                       src={require("../assets/images/qr_elias.png")} | ||||
|                       alt="QR" | ||||
|                     /> | ||||
|                   </div> | ||||
|                 </div> | ||||
|                 <div className="entry-title"> | ||||
|                   <h2>Elias Reschly</h2> | ||||
|                   <h3>Mechanical Design, Fabrication</h3> | ||||
|                 </div> | ||||
|               </div> | ||||
|  | ||||
|               <div className="entry"> | ||||
|                 <div className="entry-image"> | ||||
|                   <img | ||||
|                     className="entry-img" | ||||
|                     src={require("../assets/images/pic_lucas.jpg")} | ||||
|                     alt="Lucas Ferguson" | ||||
|                   /> | ||||
|                   <div className="entry-qr"> | ||||
|                     <img | ||||
|                       src={require("../assets/images/qr_lucas.png")} | ||||
|                       alt="QR" | ||||
|                     /> | ||||
|                   </div> | ||||
|                 </div> | ||||
|                 <div className="entry-title"> | ||||
|                   <h2>Lucas Ferguson</h2> | ||||
|                   <h3>Front-End Dev</h3> | ||||
|                 </div> | ||||
|               </div> | ||||
|  | ||||
|               <div className="entry"> | ||||
|                 <div className="entry-image"> | ||||
|                   <img | ||||
|                     className="entry-img" | ||||
|                     src={require("../assets/images/pic_dustin.jpg")} | ||||
|                     alt="" | ||||
|                   /> | ||||
|                   <div className="entry-qr"> | ||||
|                     <img | ||||
|                       src={require("../assets/images/qr_dustin.png")} | ||||
|                       alt="QR" | ||||
|                     /> | ||||
|                   </div> | ||||
|                 </div> | ||||
|                 <div className="entry-title"> | ||||
|                   <h2>Dustin Thomas</h2> | ||||
|                   <h3>Back-End Dev</h3> | ||||
|                 </div> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
|  | ||||
|         <Modal | ||||
|           isOpen={modalOpen_quickAction} | ||||
|           contentLabel="show" | ||||
|           onRequestClose={() => this.closeModal("modalOpen_quickAction")} | ||||
|           style={modalStyle} | ||||
|         > | ||||
|           <div className="modal-container"> | ||||
|             <div className="modal-title"> | ||||
|               <span>⚠️</span> | ||||
|               <span>Warning</span> | ||||
|             </div> | ||||
|             <div className="modal-body"> | ||||
|               <span>Are you sure you want to perform this quick action?</span> | ||||
|             </div> | ||||
|             <div className="modal-tray"> | ||||
|               <div | ||||
|                 className="modal-return" | ||||
|                 onClick={() => | ||||
|                   this.performActionCloseModal("modalOpen_quickAction") | ||||
|                 } | ||||
|               > | ||||
|                 <span>Continue</span> | ||||
|               </div> | ||||
|               <div | ||||
|                 className="modal-return" | ||||
|                 onClick={() => this.closeModal("modalOpen_quickAction")} | ||||
|               > | ||||
|                 <span>Cancel</span> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|         </Modal> | ||||
|       </div> | ||||
|     ); | ||||
|   } | ||||
|   | ||||