diff --git a/src/lib/components/labelCard.svelte b/src/lib/components/labelCard.svelte index a42eb9b15..9d30f9b0c 100644 --- a/src/lib/components/labelCard.svelte +++ b/src/lib/components/labelCard.svelte @@ -12,7 +12,7 @@ export let backgroundColor: string = null; export let backgroundColorHover: string = null; export let tooltipText: string = null; - export let showTooltip = false; + export let tooltipShow = false; enum Radius { xsmall = '--border-radius-xsmall', @@ -31,7 +31,7 @@ style:--card-border-radius={`var(${Radius[borderRadius]})`} style:--p-card-bg-color-default={backgroundColor} style:--p-card-bg-color-hover={backgroundColorHover} - use:tooltip={{ content: tooltipText, disabled: !tooltipText || !showTooltip }}> + use:tooltip={{ content: tooltipText, disabled: !tooltipText || !tooltipShow }}>
diff --git a/src/lib/stores/billing.ts b/src/lib/stores/billing.ts index 8d3c28abf..67a1c3783 100644 --- a/src/lib/stores/billing.ts +++ b/src/lib/stores/billing.ts @@ -24,14 +24,6 @@ export const plansInfo = derived(page, ($page) => $page.data.plansInfo as PlansI export const daysLeftInTrial = writable(0); export const readOnly = writable(false); -// export type ReadOnlyData = { -// bandwidth: boolean; -// documents: boolean; -// executions: boolean; -// storage: boolean; -// users: boolean; -// }; - export function tierToPlan(tier: Tier) { switch (tier) { case 'tier-0': diff --git a/src/lib/stores/stripe.ts b/src/lib/stores/stripe.ts index 0729e1d41..c7f6b4f0d 100644 --- a/src/lib/stores/stripe.ts +++ b/src/lib/stores/stripe.ts @@ -4,6 +4,7 @@ import { app } from './app'; import { get, writable } from 'svelte/store'; import type { PaymentMethodData } from '$lib/sdk/billing'; import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; +import { addNotification } from './notifications'; export const stripe = writable(); let paymentMethod: PaymentMethodData; @@ -14,7 +15,6 @@ let paymentElement: StripeElement; export const isStripeInitialized = writable(false); export async function initializeStripe() { - console.log('Initializing Stripe'); if (!get(stripe)) return; isStripeInitialized.set(true); @@ -26,7 +26,6 @@ export async function initializeStripe() { paymentMethod = await sdk.forConsole.billing.createPaymentMethod(); clientSecret = paymentMethod.clientSecret; } - console.log('client secret', clientSecret); // Set up the options for the stripe elements const options = { @@ -38,7 +37,6 @@ export async function initializeStripe() { paymentElement = elements.create('payment'); paymentElement.mount('#payment-element'); } catch (e) { - console.log(e); throw e; } } @@ -62,7 +60,9 @@ export async function submitStripeCard(name: string, urlRoute?: string) { elements, clientSecret, confirmParams: { - return_url: `${baseUrl}${urlRoute ?? 'organization/billing?invoiceId'}`, + return_url: `${baseUrl}${ + urlRoute ?? `organization/billing?clientSecret=${clientSecret}` + }`, payment_method_data: { billing_details: { name @@ -91,16 +91,40 @@ export async function submitStripeCard(name: string, urlRoute?: string) { } else { const e = new Error('Something went wrong'); trackError(e, Submit.PaymentMethodCreate); - console.log('setupIntent failed'); throw e; } } catch (e) { trackError(e, Submit.PaymentMethodCreate); - console.log(e); throw e; } } +export async function confirmPayment(orgId: string, clientSecret: string, paymentMethodId: string) { + try { + const url = `${window.location.origin}/console/organization-${orgId}/billing`; + + const paymentMethod = await sdk.forConsole.billing.getPaymentMethod(paymentMethodId); + + const { error } = await get(stripe).confirmPayment({ + clientSecret: clientSecret, + confirmParams: { + return_url: url, + payment_method: paymentMethod.providerMethodId + } + }); + if (error) { + throw new Error(); + } + } catch (e) { + addNotification({ + title: 'Error', + message: + 'There was an error processing your payment, try again later. If the problem persists, please contact support.', + type: 'error' + }); + } +} + const apperanceLight = { variables: { colorPrimary: '#606a7b', diff --git a/src/routes/console/organization-[organization]/billing/+page.svelte b/src/routes/console/organization-[organization]/billing/+page.svelte index 2e7481120..ba296d780 100644 --- a/src/routes/console/organization-[organization]/billing/+page.svelte +++ b/src/routes/console/organization-[organization]/billing/+page.svelte @@ -14,7 +14,12 @@ import type { PaymentMethodData } from '$lib/sdk/billing'; import { onMount } from 'svelte'; import { page } from '$app/stores'; - import { initializeStripe, isStripeInitialized, stripe } from '$lib/stores/stripe'; + import { + confirmPayment, + initializeStripe, + isStripeInitialized, + stripe + } from '$lib/stores/stripe'; import { sdk } from '$lib/stores/sdk'; import { addNotification } from '$lib/stores/notifications'; import { toLocaleDate } from '$lib/helpers/date'; @@ -36,45 +41,32 @@ ) { wizard.start(ChangeOrganizationTierCloud); } + if ($page.url.searchParams.has('clientSecret')) { + if (!$isStripeInitialized) { + await initializeStripe(); + } + const clientSecret = $page.url.searchParams.get('clientSecret'); + await confirmPayment($organization.$id, clientSecret, $organization.paymentMethodId); + } if ( - ($page.url.searchParams.has('invoice') && - $page.url.searchParams.has('type') && - $page.url.searchParams.get('type') === 'confirmation') || - $page.url.searchParams.has('clientSecret') + $page.url.searchParams.has('invoice') && + $page.url.searchParams.has('type') && + $page.url.searchParams.get('type') === 'confirmation' ) { if (!$isStripeInitialized) { await initializeStripe(); } - try { - const invoiceId = $page.url.searchParams.get('invoice'); - const invoice = await sdk.forConsole.billing.getInvoice( - $page.params.organization, - invoiceId - ); - const paymentMethod = await sdk.forConsole.billing.getPaymentMethod( - $organization.paymentMethodId - ); - const url = `${window.location.origin}/console/organization-${$organization.$id}/billing`; + const invoiceId = $page.url.searchParams.get('invoice'); + const invoice = await sdk.forConsole.billing.getInvoice( + $page.params.organization, + invoiceId + ); - const { error } = await $stripe.confirmPayment({ - clientSecret: invoice.clientSecret, - confirmParams: { - return_url: url, - payment_method: paymentMethod.providerMethodId - } - }); - if (error) { - console.log('error', error); - throw new Error(); - } - } catch (e) { - addNotification({ - title: 'Error', - message: - 'There was an error processing your payment, try again later. If the problem persists, please contact support.', - type: 'error' - }); - } + await confirmPayment( + $organization.$id, + invoice.clientSecret, + $organization.paymentMethodId + ); } }); diff --git a/src/routes/console/wizard/cloudOrganization/organizationDetails.svelte b/src/routes/console/wizard/cloudOrganization/organizationDetails.svelte index 7077df525..64943bbf9 100644 --- a/src/routes/console/wizard/cloudOrganization/organizationDetails.svelte +++ b/src/routes/console/wizard/cloudOrganization/organizationDetails.svelte @@ -79,7 +79,7 @@ bind:group={$createOrganization.billingPlan} value="tier-0" disabled={!!anyOrgFree} - tooltipText="You are limited to 1 Free organization per account." + tooltipShow="You are limited to 1 Free organization per account." showTooltip={!!anyOrgFree}>