diff --git a/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PaymentMethodSelection.tsx b/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PaymentMethodSelection.tsx
index c1e5151a91d..2f654f39ffa 100644
--- a/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PaymentMethodSelection.tsx
+++ b/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PaymentMethodSelection.tsx
@@ -14,11 +14,13 @@ import { AddNewPaymentMethodModal } from 'components/interfaces/BillingV2'
export interface PaymentMethodSelectionProps {
selectedPaymentMethod?: string
onSelectPaymentMethod: (id: string) => void
+ layout?: 'vertical' | 'horizontal'
}
const PaymentMethodSelection = ({
selectedPaymentMethod,
onSelectPaymentMethod,
+ layout = 'vertical',
}: PaymentMethodSelectionProps) => {
const { ui } = useStore()
const { ref: projectRef } = useParams()
@@ -70,8 +72,7 @@ const PaymentMethodSelection = ({
return (
<>
-
-
Select payment method
+
{isLoading ? (
@@ -91,6 +92,7 @@ const PaymentMethodSelection = ({
disabled={!canUpdatePaymentMethods}
icon={}
onClick={() => setShowAddNewPaymentMethodModal(true)}
+ htmlType='button'
>
Add new
@@ -116,7 +118,13 @@ const PaymentMethodSelection = ({
) : (
-
+
{paymentMethods.map((method: any) => {
const label = `•••• •••• •••• ${method.card.last4}`
return (
diff --git a/studio/components/interfaces/Organization/GeneralSettings/MigrateOrganizationBillingButton.tsx b/studio/components/interfaces/Organization/GeneralSettings/MigrateOrganizationBillingButton.tsx
index a258fbff558..43d4b25d44e 100644
--- a/studio/components/interfaces/Organization/GeneralSettings/MigrateOrganizationBillingButton.tsx
+++ b/studio/components/interfaces/Organization/GeneralSettings/MigrateOrganizationBillingButton.tsx
@@ -10,6 +10,7 @@ import { useCheckPermissions, useSelectedOrganization, useStore } from 'hooks'
import { PRICING_TIER_LABELS_ORG } from 'lib/constants'
import Link from 'next/link'
import { useRouter } from 'next/router'
+import PaymentMethodSelection from '../BillingSettingsV2/Subscription/PaymentMethodSelection'
const MigrateOrganizationBillingButton = observer(() => {
const { ui } = useStore()
@@ -21,6 +22,8 @@ const MigrateOrganizationBillingButton = observer(() => {
const [tier, setTier] = useState('')
const [showSpendCapHelperModal, setShowSpendCapHelperModal] = useState(false)
const [isSpendCapEnabled, setIsSpendCapEnabled] = useState(true)
+ const [paymentMethodId, setPaymentMethodId] = useState('')
+ const [isSubmitting, setSubmitting] = useState(false)
const dbTier = useMemo(() => {
if (tier === '') return ''
@@ -67,15 +70,9 @@ const MigrateOrganizationBillingButton = observer(() => {
setIsOpen(!isOpen)
}
- const onValidate = (values: any) => {
- const errors: any = {}
- if (!values.tier) {
- errors.tier = 'Please select a plan.'
- }
- return errors
- }
+ const onConfirmMigrate = async () => {
+ if (!tier) return
- const onConfirmMigrate = async (values: any, { setSubmitting }: any) => {
if (!canMigrateOrganization) {
return ui.setNotification({
category: 'error',
@@ -86,7 +83,7 @@ const MigrateOrganizationBillingButton = observer(() => {
setSubmitting(true)
try {
- await migrateBilling({ organizationSlug: organization?.slug, tier: dbTier })
+ await migrateBilling({ organizationSlug: organization?.slug, tier: dbTier, paymentMethodId })
ui.setNotification({
message: 'Successfully migrated to organization-level billing',
category: 'success',
@@ -119,167 +116,174 @@ const MigrateOrganizationBillingButton = observer(() => {
}
>
-