import { useParams } from 'common' import Link from 'next/link' import { useMemo } from 'react' import BranchDropdown from 'components/layouts/AppLayout/BranchDropdown' import EnableBranchingButton from 'components/layouts/AppLayout/EnableBranchingButton/EnableBranchingButton' import OrganizationDropdown from 'components/layouts/AppLayout/OrganizationDropdown' import ProjectDropdown from 'components/layouts/AppLayout/ProjectDropdown' import { getResourcesExceededLimitsOrg } from 'components/ui/OveragesBanner/OveragesBanner.utils' import { useOrgUsageQuery } from 'data/usage/org-usage-query' import { useFlag, useSelectedOrganization, useSelectedProject } from 'hooks' import { IS_PLATFORM } from 'lib/constants' import { Badge } from 'ui' import BreadcrumbsView from './BreadcrumbsView' import FeedbackDropdown from './FeedbackDropdown' import HelpPopover from './HelpPopover' import NotificationsPopover from './NotificationsPopover' import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query' const LayoutHeader = ({ customHeaderComponents, breadcrumbs = [], headerBorder = true }: any) => { const { ref: projectRef } = useParams() const selectedProject = useSelectedProject() const selectedOrganization = useSelectedOrganization() const enableBranchManagement = useFlag('branchManagement') const isBranchingEnabled = selectedProject?.is_branch_enabled === true || selectedProject?.parent_project_ref !== undefined const { data: orgUsage } = useOrgUsageQuery({ orgSlug: selectedOrganization?.slug }) const exceedingLimits = useMemo(() => { if (orgUsage) { return getResourcesExceededLimitsOrg(orgUsage?.usages || []).length > 0 } else { return false } }, [orgUsage]) const { data: subscription } = useOrgSubscriptionQuery({ orgSlug: selectedOrganization?.slug }) const projectHasNoLimits = subscription?.usage_billing_enabled === true const showOverUsageBadge = useFlag('overusageBadge') && subscription !== undefined && (subscription.plan.id === 'free' || subscription.plan.id === 'pro') && !projectHasNoLimits && exceedingLimits return (
{/* Organization is selected */} {projectRef && ( <> {projectRef && ( <> {showOverUsageBadge && (
Exceeding usage limits
)} )} {selectedProject && enableBranchManagement && ( <> {isBranchingEnabled ? : } )} )} {/* Additional breadcrumbs are supplied */}
{customHeaderComponents && customHeaderComponents} {IS_PLATFORM && } {IS_PLATFORM && } {IS_PLATFORM && }
) } export default LayoutHeader