diff options
author | Nate Sesti <sestinj@gmail.com> | 2023-07-10 17:31:38 -0700 |
---|---|---|
committer | Nate Sesti <sestinj@gmail.com> | 2023-07-10 17:31:38 -0700 |
commit | 0455baea6c88cd7ffa301d67805a29dce2c5ba3c (patch) | |
tree | 1a3fa7acc5501d1675422743e0fa7a9a48879e3c /extension | |
parent | 9aa76f429b4f2a75bdd4696bb1f9737de00da410 (diff) | |
download | sncontinue-0455baea6c88cd7ffa301d67805a29dce2c5ba3c.tar.gz sncontinue-0455baea6c88cd7ffa301d67805a29dce2c5ba3c.tar.bz2 sncontinue-0455baea6c88cd7ffa301d67805a29dce2c5ba3c.zip |
sprucing up onboarding
Diffstat (limited to 'extension')
-rw-r--r-- | extension/react-app/src/components/Onboarding.tsx | 146 |
1 files changed, 105 insertions, 41 deletions
diff --git a/extension/react-app/src/components/Onboarding.tsx b/extension/react-app/src/components/Onboarding.tsx index 373f7bea..0e188e7a 100644 --- a/extension/react-app/src/components/Onboarding.tsx +++ b/extension/react-app/src/components/Onboarding.tsx @@ -1,51 +1,115 @@ import { useSelector } from "react-redux"; import { RootStore } from "../redux/store"; -import React, { useState } from 'react'; +import React, { useState, useEffect } from "react"; +import styled from "styled-components"; +import { ArrowLeft, ArrowRight } from "@styled-icons/heroicons-outline"; +import { defaultBorderRadius } from "."; +const StyledDiv = styled.div` + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: #1e1e1e; + z-index: 200; +`; + +const StyledSpan = styled.span` + padding: 8px; + border-radius: ${defaultBorderRadius}; + &:hover { + background-color: #ffffff33; + } +`; const Onboarding = () => { - const [counter, setCounter] = useState(0); + const [counter, setCounter] = useState(4); + const gifs = ["intro", "explain", "edit", "generate"]; + const topMessages = [ + "Welcome to Continue!", + "Answer coding questions", + "Edit in natural language", + "Generate files from scratch", + ]; + const bottomMessages = [ + "", + "Ask Continue about a part of your code to get another perspective", + "Highlight a section of code and instruct Continue to refactor it", + "Let Continue build the scaffolding of Python scripts, React components, and more", + ]; - const handleClick = () => { - setCounter(counter + 1); - } + const vscMediaUrl = useSelector( + (state: RootStore) => state.config.vscMediaUrl + ); - const vscMediaUrl = useSelector( - (state: RootStore) => state.config.vscMediaUrl - ); + useEffect(() => { + const hasVisited = localStorage.getItem("hasVisited"); + if (hasVisited) { + setCounter(4); + } else { + setCounter(0); + localStorage.setItem("hasVisited", "true"); + } + }, []); - return ( - <div style={{position: 'absolute', top: '0', left: '0', width: '100%', height: '100%', backgroundColor: '#1E1E1E', zIndex: 200 }} onClick={handleClick}> - {counter === 0 && ( - <div style={{display: 'flex', flexDirection: 'column', justifyContent: 'center', alignItems: 'center', height: '100%'}}> - <h1>Welcome to Continue!</h1> - <img src={`${vscMediaUrl}/intro.gif`} alt="Intro" /> - </div> - )} - {counter === 1 && ( - <div style={{display: 'flex', flexDirection: 'column', justifyContent: 'center', alignItems: 'center', height: '100%'}}> - <h1>Answer coding questions</h1> - <img src={`${vscMediaUrl}/explain.gif`} alt="Explain" /> - <p style={{ fontSize: '16px', paddingLeft: '50px', paddingRight: '50px', textAlign: 'center' }}>Ask Continue about a part of your code to get another perspective</p> - </div> - )} - {counter === 2 && ( - <div style={{display: 'flex', flexDirection: 'column', justifyContent: 'center', alignItems: 'center', height: '100%'}}> - <h1>Edit in natural language</h1> - <img src={`${vscMediaUrl}/edit.gif`} alt="Edit" /> - <p style={{ fontSize: '16px', paddingLeft: '50px', paddingRight: '50px', textAlign: 'center' }}>Highlight a section of code and instruct Continue to refactor it</p> - </div> - )} - {counter === 3 && ( - <div style={{display: 'flex', flexDirection: 'column', justifyContent: 'center', alignItems: 'center', height: '100%'}}> - <h1>Generate files from scratch</h1> - <img src={`${vscMediaUrl}/generate.gif`} alt="Generate" /> - <p style={{ fontSize: '16px', paddingLeft: '50px', paddingRight: '50px', textAlign: 'center' }}>Let Continue build the scaffolding of Python scripts, React components, and more</p> - </div> - )} - <p style={{ paddingLeft: '50px', paddingRight: '50px', paddingBottom: '50px', textAlign: 'center' }}>Click to learn how to use Continue...</p> - </div> - ); -} + return ( + <StyledDiv hidden={counter >= 4}> + <div + style={{ + display: "grid", + justifyContent: "center", + alignItems: "center", + height: "100%", + textAlign: "center", + background: `linear-gradient( + 101.79deg, + #12887a66 0%, + #87245c66 32%, + #e1263766 63%, + #ffb21566 100% + )`, + paddingLeft: "16px", + paddingRight: "16px", + }} + > + <h1>{topMessages[counter]}</h1> + <div style={{ display: "flex", justifyContent: "center" }}> + <img + src={`${vscMediaUrl}/${gifs[counter]}.gif`} + alt={topMessages[counter]} + /> + </div> + <p>{bottomMessages[counter]}</p> + <p + style={{ + paddingLeft: "50px", + paddingRight: "50px", + paddingBottom: "50px", + textAlign: "center", + }} + > + <div + style={{ + cursor: "pointer", + }} + > + <StyledSpan + hidden={counter === 0} + onClick={() => setCounter((prev) => Math.max(prev - 1, 0))} + > + <ArrowLeft width="18px" strokeWidth="2px" /> Previous + </StyledSpan> + <span hidden={counter === 0}>{" | "}</span> + <StyledSpan onClick={() => setCounter((prev) => prev + 1)}> + Click to {counter === 3 || "learn how to"} use Continue{" "} + <ArrowRight width="18px" strokeWidth="2px" /> + </StyledSpan> + </div> + </p> + </div> + </StyledDiv> + ); +}; export default Onboarding; |