diff options
Diffstat (limited to 'extension/react-app/src/tabs')
| -rw-r--r-- | extension/react-app/src/tabs/gui.tsx | 80 | 
1 files changed, 71 insertions, 9 deletions
| diff --git a/extension/react-app/src/tabs/gui.tsx b/extension/react-app/src/tabs/gui.tsx index 624d22d5..eee2b1a0 100644 --- a/extension/react-app/src/tabs/gui.tsx +++ b/extension/react-app/src/tabs/gui.tsx @@ -1,11 +1,5 @@  import styled from "styled-components"; -import { -  defaultBorderRadius, -  vscBackground, -  Loader, -  MainTextInput, -  HeaderButton, -} from "../components"; +import { defaultBorderRadius, Loader } from "../components";  import ContinueButton from "../components/ContinueButton";  import { useCallback, useEffect, useRef, useState } from "react";  import { History } from "../../../schema/History"; @@ -20,6 +14,10 @@ import {  import ComboBox from "../components/ComboBox";  import TextDialog from "../components/TextDialog";  import HeaderButtonWithText from "../components/HeaderButtonWithText"; +import ReactSwitch from "react-switch"; +import { usePostHog } from "posthog-js/react"; +import { useSelector } from "react-redux"; +import { RootStore } from "../redux/store";  const TopGUIDiv = styled.div`    overflow: hidden; @@ -33,7 +31,7 @@ const UserInputQueueItem = styled.div`    text-align: center;  `; -const Footer = styled.footer` +const Footer = styled.footer<{ dataSwitchChecked: boolean }>`    display: flex;    flex-direction: row;    gap: 8px; @@ -42,6 +40,8 @@ const Footer = styled.footer`    align-items: center;    margin-top: 8px;    border-top: 0.1px solid gray; +  background-color: ${(props) => +    props.dataSwitchChecked ? "#12887a33" : "transparent"};  `;  interface GUIProps { @@ -49,11 +49,18 @@ interface GUIProps {  }  function GUI(props: GUIProps) { +  const posthog = usePostHog(); +  const vscMachineId = useSelector( +    (state: RootStore) => state.config.vscMachineId +  ); +    const [waitingForSteps, setWaitingForSteps] = useState(false);    const [userInputQueue, setUserInputQueue] = useState<string[]>([]);    const [availableSlashCommands, setAvailableSlashCommands] = useState<      { name: string; description: string }[]    >([]); +  const [dataSwitchChecked, setDataSwitchChecked] = useState(false); +  const [showDataSharingInfo, setShowDataSharingInfo] = useState(false);    const [stepsOpen, setStepsOpen] = useState<boolean[]>([]);    const [history, setHistory] = useState<History | undefined>();    // { @@ -390,7 +397,62 @@ function GUI(props: GUIProps) {          />          <ContinueButton onClick={onMainTextInput} />        </TopGUIDiv> -      <Footer> +      <div +        style={{ +          position: "fixed", +          bottom: "50px", +          backgroundColor: "white", +          color: "black", +          borderRadius: defaultBorderRadius, +          padding: "16px", +          margin: "16px", +        }} +        hidden={!showDataSharingInfo} +      > +        By turning on the switch, you will anonymously contribute your Continue +        history to an open-source dataset used to train LLMs to use tools just +        like a developer in their IDE. +        <br /> +        <br /> +        <b> +          {dataSwitchChecked +            ? "You are currently contributing data." +            : "Your data is not being shared."} +        </b> +      </div> +      <Footer dataSwitchChecked={dataSwitchChecked}> +        <div +          style={{ +            display: "flex", +            gap: "4px", +            marginRight: "auto", +            alignItems: "center", +          }} +          onMouseEnter={() => { +            setShowDataSharingInfo(true); +          }} +          onMouseLeave={() => { +            setShowDataSharingInfo(false); +          }} +        > +          <ReactSwitch +            height={20} +            handleDiameter={20} +            width={40} +            onChange={() => { +              posthog?.capture("data_switch_toggled", { +                vscMachineId: vscMachineId, +                dataSwitchChecked: !dataSwitchChecked, +              }); +              setDataSwitchChecked((prev) => !prev); +            }} +            onColor="#12887a" +            checked={dataSwitchChecked} +          /> +          <span style={{ cursor: "help", fontSize: "16px" }}> +            Contribute Data +          </span> +        </div>          <HeaderButtonWithText            onClick={() => {              client?.sendClear(); | 
