function GetPrincipal()

in dialogflow-cx/vpc-sc-demo/frontend/src/QueryPrincipal.js [29:128]


function GetPrincipal(props) {
  const {data} = useQuery(props.endpoint, () =>
    axios.get(props.endpoint).then(res => res.data)
  );
  const tooltipTitle = useRef(null);
  const href = useRef(null);
  const loginEnabled = useRef(false);
  const principal = useRef(null);
  useEffect(() => {
    if (data) {
      props.dataModel.projectData.principal.set(data.principal);
      principal.current = data ? data.principal : '';
      const queryStr = new URLSearchParams(
        props.dataModel.queryParams
      ).toString();

      if (
        principal.current === '' ||
        principal.current === null ||
        principal.current === undefined
      ) {
        tooltipTitle.current = 'Login';
        href.current = `http://${window.location.host}/session?${queryStr}`;
        loginEnabled.current = true;
      } else {
        tooltipTitle.current = 'Logout';
        href.current = `http://${window.location.host}/logout?${queryStr}`;
        loginEnabled.current = false;
      }
    }
  });

  const shrink = !(principal.current === null || principal.current === '');

  const loginImage = (
    <Button
      disableElevation
      sx={{px: 0, py: 0}}
      variant="string"
      href={href.current}
      onClick={() => {
        props.dataModel.loginRedirect.set(true);
      }}
    >
      <Paper
        component="img"
        variant="string"
        src={GoogleLoginImage}
        sx={{width: 370, pl: 1.5}}
      />
    </Button>
  );

  const textField = (
    <div>
      <TextField
        sx={{mx: 2, width: 350, color: 'red'}}
        label={'Principal'}
        variant="outlined"
        value={principal.current === null ? '' : principal.current}
        placeholder={'Principal'}
        disabled={true}
        InputLabelProps={{shrink: shrink}}
        InputProps={{
          notched: !loginEnabled.current,
          style: {
            backgroundColor: loginEnabled.current ? '#ffcdd2' : 'transparent',
          },
          endAdornment: (
            <Tooltip
              title={tooltipTitle.current}
              disableInteractive
              arrow
              placement="top"
            >
              <InputAdornment position="end">
                <IconButton
                  edge="end"
                  variant="outlined"
                  href={href.current}
                  onClick={() => {
                    props.dataModel.loginRedirect.set(true);
                  }}
                >
                  {loginEnabled.current ? <Logout /> : <Login />}
                </IconButton>
              </InputAdornment>
            </Tooltip>
          ),
        }}
      />
    </div>
  );

  if (loginEnabled.current) {
    return loginImage;
  } else {
    return textField;
  }
}