fix: billing.

This commit is contained in:
Darshan
2025-11-27 20:02:26 +05:30
parent 0800d0321e
commit cd37e79cfb
9 changed files with 33 additions and 23 deletions
+1 -1
View File
@@ -22,7 +22,7 @@
},
"dependencies": {
"@ai-sdk/svelte": "^1.1.24",
"@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@5ce6dc7",
"@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@406d8be",
"@appwrite.io/pink-icons": "0.25.0",
"@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@5b26bb8",
"@appwrite.io/pink-legacy": "^1.0.3",
+5 -5
View File
@@ -12,8 +12,8 @@ importers:
specifier: ^1.1.24
version: 1.1.24(svelte@5.43.6)(zod@3.24.3)
'@appwrite.io/console':
specifier: https://pkg.vc/-/@appwrite/@appwrite.io/console@5ce6dc7
version: https://pkg.vc/-/@appwrite/@appwrite.io/console@5ce6dc7
specifier: https://pkg.vc/-/@appwrite/@appwrite.io/console@406d8be
version: https://pkg.vc/-/@appwrite/@appwrite.io/console@406d8be
'@appwrite.io/pink-icons':
specifier: 0.25.0
version: 0.25.0
@@ -278,8 +278,8 @@ packages:
'@apm-js-collab/tracing-hooks@0.3.1':
resolution: {integrity: sha512-Vu1CbmPURlN5fTboVuKMoJjbO5qcq9fA5YXpskx3dXe/zTBvjODFoerw+69rVBlRLrJpwPqSDqEuJDEKIrTldw==}
'@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@5ce6dc7':
resolution: {tarball: https://pkg.vc/-/@appwrite/@appwrite.io/console@5ce6dc7}
'@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@406d8be':
resolution: {tarball: https://pkg.vc/-/@appwrite/@appwrite.io/console@406d8be}
version: 1.10.0
'@appwrite.io/pink-icons-svelte@2.0.0-RC.1':
@@ -3667,7 +3667,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@5ce6dc7': {}
'@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@406d8be': {}
'@appwrite.io/pink-icons-svelte@2.0.0-RC.1(svelte@5.43.6)':
dependencies:
@@ -22,7 +22,7 @@
});
function getCleanPlanName(plan: Plan) {
return plan.name.replace(resolvedProfile.platform, '');
return plan?.name?.replace(resolvedProfile.platform, '');
}
</script>
@@ -125,6 +125,6 @@
{#snippet imaginePlanView()}
<Typography.Text variant="m-600">
{currentPlan?.chatMessages} daily messages
{currentPlan?.limits?.credits} daily messages
</Typography.Text>
{/snippet}
@@ -8,6 +8,7 @@
import { page } from '$app/state';
import { ProfileMode, resolvedProfile } from '$lib/profiles/index.svelte';
export let disabled = false;
export let isNewOrg = false;
export let selfService = true;
export let anyOrgFree = false;
@@ -22,7 +23,7 @@
function message(plan: Plan): string {
const price = formatCurrency(plan?.price ?? 0);
if (resolvedProfile.id === ProfileMode.STUDIO) {
return `${plan.chatMessages} daily messages for ${price} per month + usage`;
return `${plan.limits?.credits} daily messages for ${price} per month + usage`;
} else {
return `${price} per month + usage`;
}
@@ -34,7 +35,7 @@
<LabelCard
name="plan"
bind:group={billingPlan}
disabled={!selfService || (plan.$id === BillingPlan.FREE && anyOrgFree)}
disabled={!selfService || (plan.$id === BillingPlan.FREE && anyOrgFree) || disabled}
tooltipShow={plan.$id === BillingPlan.FREE && anyOrgFree}
value={plan.$id}
title={plan.name}>
+2 -8
View File
@@ -2,7 +2,7 @@ import { BillingPlan } from '@appwrite.io/console';
export function isFreePlan(plan: BillingPlan | string): boolean {
switch (plan) {
case BillingPlan.Imaginebasic:
case BillingPlan.Imaginetier0:
case BillingPlan.Tier0:
return true;
default:
@@ -11,11 +11,5 @@ export function isFreePlan(plan: BillingPlan | string): boolean {
}
export function isProPlan(plan: BillingPlan | string): boolean {
switch (plan) {
case BillingPlan.Imaginepro:
case BillingPlan.Tier1:
return true;
default:
return false;
}
return !isFreePlan(plan);
}
+1 -1
View File
@@ -101,7 +101,7 @@ export const studio: Profile = {
id: ProfileMode.STUDIO,
platform: 'Imagine',
organizationPlatform: Platform.Imagine,
freeTier: BillingPlan.Imaginebasic,
freeTier: BillingPlan.Imaginetier0,
logo: {
src: {
dark: asset('/images/imagine-logo-dark.svg'),
+6 -2
View File
@@ -412,6 +412,9 @@ export type Plan = {
databasesWrites: AdditionalResource;
GBHours: AdditionalResource;
imageTransformations: AdditionalResource;
// imagine specific
credits: AdditionalResource;
};
addons: {
seats: PlanAddon;
@@ -432,8 +435,9 @@ export type Plan = {
buildSize: number; // in MB
deploymentSize: number; // in MB
usagePerProject: boolean;
// imagine specifics
chatMessages: number; // daily
limits: {
credits?: number
}
};
export type PlanList = {
@@ -205,7 +205,11 @@
>.
</Typography.Text>
<PlanSelection bind:billingPlan={selectedPlan} isNewOrg />
<PlanSelection
isNewOrg
disabled={$isSubmitting}
bind:billingPlan={selectedPlan}
/>
</Layout.Stack>
</Fieldset>
{#if !isFreePlan(selectedPlan)}
@@ -250,6 +250,7 @@
!data?.members?.memberships?.find((m) => m.userEmail === collaborator)
);
}
const org = await sdk.forConsole.billing.updatePlan(
data.organization.$id,
selectedPlan,
@@ -310,6 +311,8 @@
}
}
$: console.log($plansInfo.get(selectedPlan));
$: isUpgrade = $plansInfo.get(selectedPlan)?.order > $currentPlan?.order;
$: isDowngrade = $plansInfo.get(selectedPlan)?.order < $currentPlan?.order;
$: isButtonDisabled =
@@ -342,7 +345,11 @@
</Alert.Inline>
{/if}
<PlanSelection bind:billingPlan={selectedPlan} selfService={data.selfService} />
<PlanSelection
disabled={$isSubmitting}
selfService={data.selfService}
bind:billingPlan={selectedPlan}
/>
{#if isDowngrade && isFreePlan(selectedPlan) && data.hasFreeOrgs}
<Alert.Inline