function ErrorDialog()

in dialogflow-cx/vpc-sc-demo/frontend/src/AssetPollToggle.js [364:526]


function ErrorDialog(props) {
  let resourceName;
  let responseType = null;

  if (
    props.error !== null &&
    Object.hasOwn(props.error.response.data, 'status') &&
    props.error.response.data.status === 'BLOCKED' &&
    props.error.response.data.reason === 'POLICY_NOT_FOUND'
  ) {
    responseType = 'ACCESS_POLICY_ERROR';
  } else if (
    props.error !== null &&
    Object.hasOwn(props.error.response.data, 'status') &&
    props.error.response.data.status === 'BLOCKED' &&
    props.error.response.data.reason === 'UNKNOWN_PROJECT_ID'
  ) {
    responseType = 'UNKNOWN_PROJECT_ID_ERROR';
  } else if (
    props.error !== null &&
    props.error.response.data.errors[0]['diagnostic']['summary'] ===
      'googleapi: Error 409: Your previous request to create the named bucket succeeded and you already own it., conflict'
  ) {
    resourceName = `'${getBucket(props.dataModel)}'`;
    responseType = 'RESOURCE_IMPORT';
  } else if (
    props.error !== null &&
    props.error.response.data.errors[0] ===
      'Error: Error acquiring the state lock'
  ) {
    responseType = 'STATE_LOCK';
  } else if (
    props.error !== null &&
    props.error.response.data.errors[0]['diagnostic']['summary'].includes(
      'Location settings have to be initialized before creating the agent'
    )
  ) {
    responseType = 'AGENT_LOCATION_SETTINGS';
  } else if (
    props.error !== null &&
    props.error.response.data.errors[0]['diagnostic']['summary'].includes(
      'generic::already_exists'
    )
  ) {
    if (
      props.target === 'module.vpc_network.google_compute_router_nat.nat_manual'
    ) {
      resourceName = `'projects/${props.dataModel.projectData.project_id.current}/regions/${props.dataModel.projectData.region.current}/routers/nat-router/nat-config'`;
    } else if (
      props.target ===
      'module.service_directory.google_service_directory_service.reverse_proxy'
    ) {
      resourceName = `'projects/${props.dataModel.projectData.project_id.current}/locations/${props.dataModel.projectData.region.current}/namespaces/df-namespace/services/df-service'`;
    } else if (
      props.target ===
      'module.service_directory.google_service_directory_endpoint.reverse_proxy'
    ) {
      resourceName = `'projects/${props.dataModel.projectData.project_id.current}/locations/${props.dataModel.projectData.region.current}/namespaces/df-namespace/services/df-service/endpoints/df-endpoint'`;
    } else if (
      props.target ===
      'module.webhook_agent.google_cloudfunctions_function.webhook'
    ) {
      resourceName = `'projects/${props.dataModel.projectData.project_id.current}/locations/${props.dataModel.projectData.region.current}/functions/${props.dataModel.projectData.webhook_name.current}'`;
    } else {
      resourceName =
        props.error.response.data.errors[0]['diagnostic']['summary'];
    }
    responseType = 'RESOURCE_IMPORT';
  } else if (
    props.error !== null &&
    props.error.response.data.errors[0]['diagnostic']['summary'].includes(
      'Must specify a title for access policy object'
    )
  ) {
    responseType = 'GENERIC';
  } else if (props.error !== null) {
    responseType = 'GENERIC';
  }

  useEffect(() => {
    if (resourceName) {
      props.setResourceName(resourceName);
    }
  }, [props, resourceName]);

  useEffect(
    () => {
      if (responseType === 'ACCESS_POLICY_ERROR') {
        props.dataModel.validAccessPolicy.set(false);
        props.dataModel.accessPolicyTitleColor.set('error');
      }
      if (responseType === 'UNKNOWN_PROJECT_ID_ERROR') {
        props.dataModel.validProjectId.set(null);
        props.dataModel.projectIdColor.set('error');
      }
    },
    /* eslint-disable react-hooks/exhaustive-deps */
    [responseType]
    /* eslint-enable react-hooks/exhaustive-deps */
  );

  if (responseType === 'STATE_LOCK') {
    return (
      <StateLockErrorDialog
        open={props.open}
        target={props.target}
        error={props.error}
        onClickCancel={props.onClickCancel}
      />
    );
  } else if (responseType === 'RESOURCE_IMPORT') {
    return (
      <ResourceImportDialog
        open={props.open}
        target={props.target}
        error={props.error}
        onClickCancel={props.onClickCancel}
        onClickImport={props.onClickImport}
      />
    );
  } else if (responseType === 'AGENT_LOCATION_SETTINGS') {
    return (
      <AgentLocationSettingsDialog
        open={props.open}
        target={props.target}
        error={props.error}
        onClickCancel={props.onClickCancel}
        region={props.dataModel.projectData.region.current}
        project_id={props.dataModel.projectData.project_id.current}
      />
    );
  } else if (responseType === 'GENERIC') {
    return (
      <GenericErrorDialog
        open={props.open}
        target={props.target}
        error={props.error}
        onClickCancel={props.onClickCancel}
      />
    );
  } else if (responseType === 'ACCESS_POLICY_ERROR') {
    return (
      <AccessPolicyErrorDialog
        open={props.open}
        onClickCancel={props.onClickCancel}
        error={props.error}
        badAccessPolicyTitle={
          props.dataModel.projectData.accessPolicyTitle.current
        }
      />
    );
  } else if (responseType === 'UNKNOWN_PROJECT_ID_ERROR') {
    return (
      <ProjectIdErrorDialog
        open={props.open}
        onClickCancel={props.onClickCancel}
        unknownProjectId={props.dataModel.projectData.project_id.current}
      />
    );
  } else if (responseType === null) {
    return <></>;
  }
}