useHasBuiltImage.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { useQuery } from "@tanstack/react-query";
  2. import { ImageInfo } from "main/home/app-dashboard/new-app-flow/serviceTypes";
  3. import { useContext, useEffect, useState } from "react";
  4. import { Context } from "shared/Context";
  5. import api from "shared/api";
  6. export const useHasBuiltImage = (appName: string | undefined) => {
  7. const { currentProject, currentCluster } = useContext(Context);
  8. const [hasBuiltImage, setHasBuiltImage] = useState<boolean>(false);
  9. const { data } = useQuery(
  10. ["checkForBuiltImage", currentProject?.id, currentCluster?.id],
  11. async () => {
  12. console.log("checking for built image")
  13. if (hasBuiltImage) {
  14. return true;
  15. }
  16. if (currentProject == null || currentCluster == null || appName == null) {
  17. return false;
  18. }
  19. const resChartData = await api.getChart(
  20. "<token>",
  21. {},
  22. {
  23. id: currentProject.id,
  24. namespace: `porter-stack-${appName}`,
  25. cluster_id: currentCluster.id,
  26. name: appName,
  27. revision: 0,
  28. }
  29. );
  30. const globalImage = resChartData.data.config?.global?.image
  31. return globalImage != null &&
  32. globalImage.repository != null &&
  33. globalImage.tag != null &&
  34. globalImage.repository !== ImageInfo.BASE_IMAGE.repository &&
  35. globalImage.tag !== ImageInfo.BASE_IMAGE.tag
  36. },
  37. {
  38. enabled: !!currentProject && !!currentCluster && !hasBuiltImage,
  39. refetchOnWindowFocus: false,
  40. refetchInterval: 5000,
  41. }
  42. );
  43. useEffect(() => {
  44. if (data != null) {
  45. setHasBuiltImage(data);
  46. }
  47. }, [data]);
  48. return hasBuiltImage;
  49. }