import { useParams } from 'common/hooks' import { useStore } from 'hooks' import { PROJECT_STATUS } from 'lib/constants' import { observer } from 'mobx-react-lite' import { createContext, PropsWithChildren, useContext, useMemo } from 'react' import { Project } from 'types' type ProjectContextType = { project: Project | undefined isLoading: boolean } const ProjectContext = createContext({ project: undefined, isLoading: true, }) export default ProjectContext export const useProjectContext = () => useContext(ProjectContext) type ProjectContextProviderProps = { projectRef: string | undefined } export const ProjectContextProvider = observer( ({ projectRef, children }: PropsWithChildren) => { // TODO(alaister): This will eventually be replaced with a react-query query // once we remove mobx const { ui } = useStore() const value = useMemo(() => { if (ui.selectedProject?.ref === projectRef) { return { project: ui.selectedProject, isLoading: false, } } return { project: undefined, isLoading: true, } }, [ui.selectedProject?.ref, projectRef]) return {children} } ) export const ProjectContextFromParamsProvider = ({ children }: PropsWithChildren<{}>) => { const { ref: projectRef } = useParams() return {children} } export const useIsProjectActive = () => { const { project } = useProjectContext() return project?.status === PROJECT_STATUS.ACTIVE_HEALTHY }