export default function useTransferAccelerationAvailable()

in s3-artifact-storage-ui/src/hooks/useTransferAccelerationAvailable.tsx [13:67]


export default function useTransferAccelerationAvailable() {
  const config = useAppContext();
  const { getValues } = useFormContext();
  const canLoadBucketInfo = useCanLoadBucketInfoData();
  const isDisabled = !canLoadBucketInfo;
  const [responseErrors, setResponseErrors] = React.useState<
    ResponseErrors | string | undefined
  >();
  const [isLoading, setIsLoading] = React.useState(false);
  const [isAvailable, setIsAvailable] = React.useState<boolean>(false);
  const [isTriggered, setIsTriggered] = React.useState<boolean>(false);

  const validateS3TransferAccelerationAvailability =
    React.useCallback(async () => {
      if (isLoading) {
        return;
      }
      if (!isTriggered) {
        setIsTriggered(true);
      }

      setResponseErrors(undefined);
      setIsAvailable(false);
      if (isDisabled) {
        return;
      }
      setIsLoading(true);
      try {
        const data = getValues();
        const { isAvailable: result, errors } =
          await fetchS3TransferAccelerationAvailability(config, data);
        if (errors) {
          data[FormFields.CONNECTION_TRANSFER_ACCELERATION_TOGGLE] = false;
          setResponseErrors(errors);
        } else {
          setIsAvailable(result ?? false);
          if (!result) {
            data[FormFields.CONNECTION_TRANSFER_ACCELERATION_TOGGLE] = false;
          }
        }
      } catch (e) {
        setResponseErrors(errorMessage(e));
      } finally {
        setIsLoading(false);
      }
    }, [config, getValues, isDisabled, isLoading, isTriggered]);

  return {
    available: isAvailable,
    isLoading,
    triggered: isTriggered,
    errors: responseErrors,
    reload: validateS3TransferAccelerationAvailability,
  };
}