From 5dcdcd81da2050825212e216bf5e7e69678d8c6e Mon Sep 17 00:00:00 2001 From: Nate Sesti Date: Mon, 31 Jul 2023 16:38:32 -0700 Subject: feat: :egg: getting to know users form --- extension/react-app/src/components/TextDialog.tsx | 11 ++-- extension/react-app/src/pages/gui.tsx | 75 ++++++++++++++++++++++- 2 files changed, 81 insertions(+), 5 deletions(-) (limited to 'extension/react-app/src') diff --git a/extension/react-app/src/components/TextDialog.tsx b/extension/react-app/src/components/TextDialog.tsx index 43051a04..41f811e8 100644 --- a/extension/react-app/src/components/TextDialog.tsx +++ b/extension/react-app/src/components/TextDialog.tsx @@ -29,8 +29,8 @@ const Dialog = styled.div` display: flex; flex-direction: column; box-shadow: 0 0 10px 0 ${vscForeground}; - width: fit-content; margin: auto; + word-wrap: break-word; `; const TextArea = styled.textarea` @@ -56,7 +56,7 @@ const TextDialog = (props: { showDialog: boolean; onEnter: (text: string) => void; onClose: () => void; - message?: string; + message?: string | JSX.Element; entryOn?: boolean; }) => { const [text, setText] = useState(""); @@ -81,7 +81,8 @@ const TextDialog = (props: { }} > - {props.message?.includes("Continue uses GPT-4") ? ( + {typeof props.message === "string" && + props.message.includes("Continue uses GPT-4") ? (

Continue uses GPT-4 by default, but works with any model. If @@ -114,8 +115,10 @@ const TextDialog = (props: { or would like to do so, please contact us at hi@continue.dev.

- ) : ( + ) : typeof props.message === "string" ? ( {props.message || ""} + ) : ( + props.message )} {props.entryOn && ( <> diff --git a/extension/react-app/src/pages/gui.tsx b/extension/react-app/src/pages/gui.tsx index 72b2e139..bf8d8281 100644 --- a/extension/react-app/src/pages/gui.tsx +++ b/extension/react-app/src/pages/gui.tsx @@ -65,6 +65,7 @@ interface GUIProps { function GUI(props: GUIProps) { const client = useContext(GUIClientContext); const posthog = usePostHog(); + const vscMachineId = useSelector( (state: RootStore) => state.config.vscMachineId ); @@ -120,7 +121,9 @@ function GUI(props: GUIProps) { (state: RootStore) => state.config.vscMediaUrl ); const [showFeedbackDialog, setShowFeedbackDialog] = useState(false); - const [feedbackDialogMessage, setFeedbackDialogMessage] = useState(""); + const [feedbackDialogMessage, setFeedbackDialogMessage] = useState< + string | JSX.Element + >(""); const [feedbackEntryOn, setFeedbackEntryOn] = useState(true); const dispatch = useDispatch(); @@ -276,6 +279,76 @@ function GUI(props: GUIProps) { setUserInputQueue((queue) => { return [...queue, input]; }); + + // Increment localstorage counter + const counter = localStorage.getItem("mainTextEntryCounter"); + if (counter) { + let currentCount = parseInt(counter); + localStorage.setItem( + "mainTextEntryCounter", + (currentCount + 1).toString() + ); + if (currentCount === 25) { + setFeedbackDialogMessage( +
+ 👋 Thanks for using Continue. We are a beta product and love + working closely with our first users. If you're interested in + speaking, enter your name and email. We won't use this information + for anything other than reaching out. +
+
+
{ + e.preventDefault(); + posthog?.capture("user_interest_form", { + name: e.target.elements[0].value, + email: e.target.elements[1].value, + }); + setFeedbackDialogMessage( +
+ Thanks! We'll be in touch soon. +
+ ); + }} + style={{ + display: "flex", + flexDirection: "column", + gap: "10px", + }} + > + + + +
+
+ ); + setFeedbackEntryOn(false); + setShowFeedbackDialog(true); + } + } else { + localStorage.setItem("mainTextEntryCounter", "1"); + } } }; -- cgit v1.2.3-70-g09d2