From 9e9ed2df6cfb8aa822b14cc8f83d1581845c0a2e Mon Sep 17 00:00:00 2001 From: Darshan Date: Fri, 13 Feb 2026 15:33:16 +0530 Subject: [PATCH] fix: state. --- .../components/organizationUsageLimits.svelte | 23 ++++++++----------- .../change-plan/+page.svelte | 17 +++++++------- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/src/lib/components/organizationUsageLimits.svelte b/src/lib/components/organizationUsageLimits.svelte index 90df40665..39ae9a1ea 100644 --- a/src/lib/components/organizationUsageLimits.svelte +++ b/src/lib/components/organizationUsageLimits.svelte @@ -15,10 +15,10 @@ import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; - const { - projects = [], + let { members = [], - storageUsage = 0 + storageUsage = 0, + projects = $bindable([]) }: { storageUsage?: number; projects?: Models.Project[]; @@ -32,7 +32,6 @@ let confirmationInput = $state(''); let isDeletingProjects = $state(false); - let deletedProjectIds = $state>(new Set()); let selectedProjectsToDelete = $state>([]); const baseFreePlan = getBasePlanFromGroup(BillingPlanGroup.Starter); @@ -46,12 +45,8 @@ // When preparing to downgrade to Free, enforce Free plan limit locally (2) const allowedProjectsToKeep = $derived(freePlanLimits.projects); - const filteredProjects = $derived( - projects.filter((project) => !deletedProjectIds.has(project.$id)) - ); - const currentUsage = $derived({ - projects: filteredProjects?.length || 0, + projects: projects?.length || 0, members: members?.length || 0, storage: storageUsage || 0 }); @@ -118,7 +113,6 @@ }); if (successfullyDeleted.length > 0) { - deletedProjectIds = new Set([...deletedProjectIds, ...successfullyDeleted]); await invalidate(Dependencies.ORGANIZATION); addNotification({ @@ -130,10 +124,14 @@ if (failed.length > 0) { error = `Failed to delete ${failed.length} project${failed.length !== 1 ? 's' : ''}`; } else { + confirmationInput = ''; showSelectProject = false; selectedProjectsToDelete = []; - confirmationInput = ''; showSelectionReminder = false; + + if (successfullyDeleted.length > 0) { + projects = projects.filter((p) => !successfullyDeleted.includes(p.$id)); + } } } catch (exception) { error = exception.message; @@ -349,8 +347,7 @@ placeholder="I understand" disabled={isDeletingProjects} bind:value={confirmationInput} - label='Type "I understand" to confirm permanent deletion of the selected projects' - /> + label={`Type "I understand" to confirm permanent deletion of the selected projects`} /> {/if} diff --git a/src/routes/(console)/organization-[organization]/change-plan/+page.svelte b/src/routes/(console)/organization-[organization]/change-plan/+page.svelte index df367c9d8..80d585adf 100644 --- a/src/routes/(console)/organization-[organization]/change-plan/+page.svelte +++ b/src/routes/(console)/organization-[organization]/change-plan/+page.svelte @@ -59,7 +59,7 @@ let feedbackDowngradeReason: string; let feedbackMessage: string; let orgUsage: Models.UsageOrganization; - let allProjects: { projects: Models.Project[] } | undefined; + let allProjects: { projects: Models.Project[] } = { projects: [] }; $: paymentMethods = null; @@ -132,7 +132,7 @@ function hasExcessProjectsForFreePlan(): boolean { const freeBasePlan = getBasePlanFromGroup(BillingPlanGroup.Starter); const freePlanProjectLimit = freeBasePlan?.projects ?? 2; - const currentProjectCount = allProjects?.projects?.length ?? 0; + const currentProjectCount = allProjects.projects.length; return currentProjectCount > freePlanProjectLimit; } @@ -312,16 +312,15 @@ // Check if projects exceed Free plan limit when downgrading $: isButtonDisabled = (() => { + const freeBasePlan = getBasePlanFromGroup(BillingPlanGroup.Starter); + const freePlanProjectLimit = freeBasePlan?.projects ?? 2; + const hasExcessProjects = allProjects.projects.length > freePlanProjectLimit; + if ($organization?.billingPlanId === selectedPlan.$id) return true; if (isDowngrade && selectedPlan.group === BillingPlanGroup.Starter && data.hasFreeOrgs) return true; - // Check for excess projects when downgrading to Free plan - return ( - isDowngrade && - selectedPlan.group === BillingPlanGroup.Starter && - hasExcessProjectsForFreePlan() - ); + return isDowngrade && selectedPlan.group === BillingPlanGroup.Starter && hasExcessProjects; })(); @@ -403,7 +402,7 @@ {/if}