diff --git a/apps/studio/components/interfaces/Organization/BillingSettings/Subscription/DowngradeModal.tsx b/apps/studio/components/interfaces/Organization/BillingSettings/Subscription/DowngradeModal.tsx index 1b8e7a9f729..32b384ba0bf 100644 --- a/apps/studio/components/interfaces/Organization/BillingSettings/Subscription/DowngradeModal.tsx +++ b/apps/studio/components/interfaces/Organization/BillingSettings/Subscription/DowngradeModal.tsx @@ -1,3 +1,4 @@ +import { ProjectInfo } from 'data/projects/projects-query' import { OrgSubscription, ProjectAddon } from 'data/subscriptions/types' import { PricingInformation } from 'shared-data' import { Alert, IconAlertOctagon, IconMinusCircle, IconPauseCircle, Modal } from 'ui' @@ -8,6 +9,7 @@ export interface DowngradeModalProps { subscription?: OrgSubscription onClose: () => void onConfirm: () => void + projects: ProjectInfo[] } const ProjectDowngradeListItem = ({ projectAddon }: { projectAddon: ProjectAddon }) => { @@ -39,7 +41,26 @@ const DowngradeModal = ({ subscription, onClose, onConfirm, + projects, }: DowngradeModalProps) => { + // Filter out the micro addon as we're dealing with that separately + const previousProjectAddons = + subscription?.project_addons.flatMap((projectAddons) => { + const addons = projectAddons.addons.filter((it) => it.variant.identifier !== 'ci_micro') + if (!addons.length) { + return [] + } else { + return { + ...projectAddons, + // Overwrite addons, filtered out the micro addon + addons, + } + } + }) || [] + + const hasInstancesOnMicro = projects.some((project) => project.infra_compute_size === 'micro') + const downgradingToNano = subscription?.nano_enabled === true + return ( - {(subscription?.project_addons.length ?? 0) > 0 && ( - - - - )} + {(previousProjectAddons.length ?? 0) > 0 || + (hasInstancesOnMicro && downgradingToNano && ( + + + + ))}