From 1c4cacd72ddb2dfe20fa9440c423458a69ccc0e3 Mon Sep 17 00:00:00 2001 From: Darshan Date: Sat, 6 Dec 2025 17:23:46 +0530 Subject: [PATCH 1/3] add: show invite if members addition is supported. --- .../create-organization/+page.svelte | 30 ++++++++++++++----- .../change-plan/+page.svelte | 26 +++++++++++----- 2 files changed, 41 insertions(+), 15 deletions(-) diff --git a/src/routes/(console)/create-organization/+page.svelte b/src/routes/(console)/create-organization/+page.svelte index aa72717733..0e1f15969c 100644 --- a/src/routes/(console)/create-organization/+page.svelte +++ b/src/routes/(console)/create-organization/+page.svelte @@ -9,7 +9,7 @@ import { Button, Form, InputTags, InputText } from '$lib/elements/forms'; import { Wizard } from '$lib/layout'; import type { Coupon } from '$lib/sdk/billing'; - import { isOrganization, tierToPlan } from '$lib/stores/billing'; + import { isOrganization, plansInfo, tierToPlan } from '$lib/stores/billing'; import { addNotification } from '$lib/stores/notifications'; import type { OrganizationError, Organization } from '$lib/stores/organization'; import { sdk } from '$lib/stores/sdk'; @@ -42,6 +42,15 @@ let billingBudget: number; let showCreditModal = false; + // check if the plan allows multiple members + $: planDetails = $plansInfo?.get(selectedPlan); + $: seatsAddon = planDetails?.addons?.seats; + $: canAddMembers = !seatsAddon || (seatsAddon.supported ?? false) || (seatsAddon.limit ?? 0) > 1; + + $: if (!canAddMembers && collaborators.length > 0) { + collaborators = []; + } + afterNavigate(({ from }) => { previousPage = from?.url?.pathname || previousPage; }); @@ -193,6 +202,7 @@ id="name" required /> +
@@ -210,6 +220,7 @@ bind:billingPlan={selectedPlan} />
+ {#if !isFreePlan(selectedPlan)}
@@ -236,13 +247,16 @@ {/if}
-
- -
+ + {#if canAddMembers} +
+ +
+ {/if} {/if} diff --git a/src/routes/(console)/organization-[organization]/change-plan/+page.svelte b/src/routes/(console)/organization-[organization]/change-plan/+page.svelte index 3b33f275fc..e841513ec4 100644 --- a/src/routes/(console)/organization-[organization]/change-plan/+page.svelte +++ b/src/routes/(console)/organization-[organization]/change-plan/+page.svelte @@ -305,6 +305,15 @@ $: currentPlanGroup = $plansInfo?.get($organization?.billingPlan)?.group; $: isSameGroupDowngrade = currentPlanGroup && selectedPlanGroup && currentPlanGroup === selectedPlanGroup; + + // check if the plan allows multiple members + $: planDetails = $plansInfo?.get(selectedPlan); + $: seatsAddon = planDetails?.addons?.seats; + $: canAddMembers = !seatsAddon || (seatsAddon.supported ?? false) || (seatsAddon.limit ?? 0) > 1; + + $: if (!canAddMembers && collaborators.length > 0) { + collaborators = []; + } @@ -439,14 +448,17 @@ {/await} -
- -
+ {#if canAddMembers} +
+ +
+ {/if} {/if} + {#if isDowngrade && isFreePlan(selectedPlan) && !data.hasFreeOrgs}
From 1c4a03e8da786a6142936bee935ab74ca431ccbf Mon Sep 17 00:00:00 2001 From: Darshan Date: Sat, 6 Dec 2025 19:15:03 +0530 Subject: [PATCH 2/3] add: imagine specific credits usage. --- package.json | 2 +- pnpm-lock.yaml | 10 ++-- .../settings/usage/[[invoice]]/+page.svelte | 48 ++++++++++++++++++- 3 files changed, 52 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 210d3010fe..4572c02cb6 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ }, "dependencies": { "@ai-sdk/svelte": "^1.1.24", - "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@4838219", + "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@f3cd1df", "@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", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 70948dc584..fd88b4c68e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: ^1.1.24 version: 1.1.24(svelte@5.45.5)(zod@3.24.3) '@appwrite.io/console': - specifier: https://pkg.vc/-/@appwrite/@appwrite.io/console@4838219 - version: https://pkg.vc/-/@appwrite/@appwrite.io/console@4838219 + specifier: https://pkg.vc/-/@appwrite/@appwrite.io/console@f3cd1df + version: https://pkg.vc/-/@appwrite/@appwrite.io/console@f3cd1df '@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@4838219': - resolution: {tarball: https://pkg.vc/-/@appwrite/@appwrite.io/console@4838219} + '@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@f3cd1df': + resolution: {tarball: https://pkg.vc/-/@appwrite/@appwrite.io/console@f3cd1df} version: 1.10.0 '@appwrite.io/pink-icons-svelte@2.0.0-RC.1': @@ -3673,7 +3673,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@4838219': {} + '@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@f3cd1df': {} '@appwrite.io/pink-icons-svelte@2.0.0-RC.1(svelte@5.45.5)': dependencies: diff --git a/src/routes/(console)/project-[region]-[project]/settings/usage/[[invoice]]/+page.svelte b/src/routes/(console)/project-[region]-[project]/settings/usage/[[invoice]]/+page.svelte index f239a448d8..ab15f0470e 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/usage/[[invoice]]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/settings/usage/[[invoice]]/+page.svelte @@ -15,7 +15,9 @@ import { Accordion, Icon, Layout, Link, Table, Typography } from '@appwrite.io/pink-svelte'; import { IconChartSquareBar } from '@appwrite.io/pink-icons-svelte'; import { page } from '$app/state'; - import { isFreePlan } from '$lib/helpers/billing.js'; + import { isFreePlan, isPaidPlan } from '$lib/helpers/billing.js'; + import { resolvedProfile } from '$lib/profiles/index.svelte'; + import { Platform } from '@appwrite.io/console'; export let data; @@ -67,7 +69,7 @@ on:click={() => ($showUsageRatesModal = true)} >Learn more about plan usage limits.

- {:else if $organization.billingPlan === BillingPlan.PRO} + {:else if isPaidPlan($organization.billingPlan)}

On the Pro plan, you'll be charged only for any usage that exceeds the thresholds per resource listed below. {/if} + + {#if resolvedProfile.platform === Platform.Imagine} + + Imagine Credits + Total Imagine credits consumed across your project. Resets at the start of each billing cycle. + + {#if data.usage.imagineCredits} + {@const creditsTotal = data.usage.imagineCredits.reduce((sum, item) => sum + item.value, 0)} + + + {formatNumberWithCommas(creditsTotal)} + + Credits + + {#if data.usage.imagineCredits.length > 0} + [e.date, e.value])] + } + ]} /> + {/if} + {:else} + + + + No data to show + + + {/if} + + + {/if} + Bandwidth Calculated for all bandwidth used across your project. Resets at the start of each billing cycle. From f358bb46b481bfb362a1f6e57496b1240e3d274a Mon Sep 17 00:00:00 2001 From: Darshan Date: Sun, 7 Dec 2025 10:52:58 +0530 Subject: [PATCH 3/3] lint. --- .../create-organization/+page.svelte | 3 +- .../change-plan/+page.svelte | 3 +- .../settings/usage/[[invoice]]/+page.svelte | 75 ++++++++++--------- 3 files changed, 44 insertions(+), 37 deletions(-) diff --git a/src/routes/(console)/create-organization/+page.svelte b/src/routes/(console)/create-organization/+page.svelte index 0e1f15969c..3006d9721f 100644 --- a/src/routes/(console)/create-organization/+page.svelte +++ b/src/routes/(console)/create-organization/+page.svelte @@ -45,7 +45,8 @@ // check if the plan allows multiple members $: planDetails = $plansInfo?.get(selectedPlan); $: seatsAddon = planDetails?.addons?.seats; - $: canAddMembers = !seatsAddon || (seatsAddon.supported ?? false) || (seatsAddon.limit ?? 0) > 1; + $: canAddMembers = + !seatsAddon || (seatsAddon.supported ?? false) || (seatsAddon.limit ?? 0) > 1; $: if (!canAddMembers && collaborators.length > 0) { collaborators = []; diff --git a/src/routes/(console)/organization-[organization]/change-plan/+page.svelte b/src/routes/(console)/organization-[organization]/change-plan/+page.svelte index e841513ec4..bd9dd6d056 100644 --- a/src/routes/(console)/organization-[organization]/change-plan/+page.svelte +++ b/src/routes/(console)/organization-[organization]/change-plan/+page.svelte @@ -309,7 +309,8 @@ // check if the plan allows multiple members $: planDetails = $plansInfo?.get(selectedPlan); $: seatsAddon = planDetails?.addons?.seats; - $: canAddMembers = !seatsAddon || (seatsAddon.supported ?? false) || (seatsAddon.limit ?? 0) > 1; + $: canAddMembers = + !seatsAddon || (seatsAddon.supported ?? false) || (seatsAddon.limit ?? 0) > 1; $: if (!canAddMembers && collaborators.length > 0) { collaborators = []; diff --git a/src/routes/(console)/project-[region]-[project]/settings/usage/[[invoice]]/+page.svelte b/src/routes/(console)/project-[region]-[project]/settings/usage/[[invoice]]/+page.svelte index ab15f0470e..0fc8fa394a 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/usage/[[invoice]]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/settings/usage/[[invoice]]/+page.svelte @@ -88,43 +88,48 @@ {#if resolvedProfile.platform === Platform.Imagine} - Imagine Credits - Total Imagine credits consumed across your project. Resets at the start of each billing cycle. - - {#if data.usage.imagineCredits} - {@const creditsTotal = data.usage.imagineCredits.reduce((sum, item) => sum + item.value, 0)} - - - {formatNumberWithCommas(creditsTotal)} - - Credits - - {#if data.usage.imagineCredits.length > 0} - Imagine Credits + Total Imagine credits consumed across your project. Resets at the start of each billing cycle. + + {#if data.usage.imagineCredits} + {@const creditsTotal = data.usage.imagineCredits.reduce( + (sum, item) => sum + item.value, + 0 + )} + + + {formatNumberWithCommas(creditsTotal)} + + Credits + + {#if data.usage.imagineCredits.length > 0} + [e.date, e.value])] - } - ]} /> + }} + series={[ + { + name: 'Credits', + data: [ + ...data.usage.imagineCredits.map((e) => [e.date, e.value]) + ] + } + ]} /> + {/if} + {:else} + + + + No data to show + + {/if} - {:else} - - - - No data to show - - - {/if} - - + + {/if}