ClusterResourcesContext.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import React from "react";
  2. import { useClusterResourceLimits } from "lib/hooks/useClusterResourceLimits";
  3. import { createContext, useContext } from "react";
  4. import { Context } from "./Context";
  5. export type ClusterResources = {
  6. maxCPU: number;
  7. maxRAM: number;
  8. defaultCPU: number;
  9. defaultRAM: number;
  10. };
  11. export const ClusterResourcesContext = createContext<{
  12. currentClusterResources: ClusterResources;
  13. } | null>(null);
  14. export const useClusterResources = () => {
  15. const context = useContext(ClusterResourcesContext);
  16. if (context == null) {
  17. throw new Error(
  18. "useClusterResources must be used within a ClusterResourcesContext"
  19. );
  20. }
  21. return context;
  22. };
  23. const ClusterResourcesProvider = ({ children }: { children: JSX.Element }) => {
  24. const { currentCluster, currentProject } = useContext(Context);
  25. const { maxCPU, maxRAM, defaultCPU, defaultRAM } = useClusterResourceLimits({
  26. projectId: currentProject?.id,
  27. clusterId: currentCluster?.id,
  28. });
  29. return (
  30. <ClusterResourcesContext.Provider
  31. value={{
  32. currentClusterResources: {
  33. maxCPU,
  34. maxRAM,
  35. defaultCPU,
  36. defaultRAM,
  37. },
  38. }}
  39. >
  40. {children}
  41. </ClusterResourcesContext.Provider>
  42. );
  43. };
  44. export default ClusterResourcesProvider;