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}>