From 145e48ea163b6c50bc1c01299ded35827eb51dfe Mon Sep 17 00:00:00 2001 From: harsh mahajan Date: Thu, 28 May 2026 19:59:59 +0530 Subject: [PATCH] fix: address code review issues in granular project access - listProjects in members page load now uses .catch(() => null) so a permissions or network error does not break the entire page - projectAccessSelector disables "Add project" when projects list is empty (prevents unusable required dropdown row) - createMember resets orgProjects on modal close so subsequent opens fetch a fresh list instead of showing a stale one - edit modal init effect now checks supportsProjectRoles before setting accessType to 'specific', preventing a silent role re-submission when the org plan is downgraded below the project-roles threshold --- .../(console)/organization-[organization]/createMember.svelte | 1 + .../(console)/organization-[organization]/members/+page.ts | 2 +- .../(console)/organization-[organization]/members/edit.svelte | 2 +- .../organization-[organization]/projectAccessSelector.svelte | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/routes/(console)/organization-[organization]/createMember.svelte b/src/routes/(console)/organization-[organization]/createMember.svelte index b2d06806c..7f2243e03 100644 --- a/src/routes/(console)/organization-[organization]/createMember.svelte +++ b/src/routes/(console)/organization-[organization]/createMember.svelte @@ -58,6 +58,7 @@ role = isSelfHosted ? 'owner' : 'developer'; accessType = 'all'; projectAccess = []; + orgProjects = []; } }); diff --git a/src/routes/(console)/organization-[organization]/members/+page.ts b/src/routes/(console)/organization-[organization]/members/+page.ts index 8946a4d7b..64247d2d8 100644 --- a/src/routes/(console)/organization-[organization]/members/+page.ts +++ b/src/routes/(console)/organization-[organization]/members/+page.ts @@ -21,7 +21,7 @@ export const load: PageLoad = async ({ url, params, route, depends }) => { }), sdk.forConsole.organization(params.organization).listProjects({ queries: [Query.limit(100), Query.equal('teamId', params.organization)] - }) + }).catch(() => null) ]); return { diff --git a/src/routes/(console)/organization-[organization]/members/edit.svelte b/src/routes/(console)/organization-[organization]/members/edit.svelte index b60ddfb7a..1cc83974c 100644 --- a/src/routes/(console)/organization-[organization]/members/edit.svelte +++ b/src/routes/(console)/organization-[organization]/members/edit.svelte @@ -44,7 +44,7 @@ $effect(() => { if (showEdit && selectedMember) { const memberRoles = selectedMember.roles ?? []; - if (memberRoles.some(isProjectSpecificRole)) { + if (supportsProjectRoles && memberRoles.some(isProjectSpecificRole)) { accessType = 'specific'; projectAccess = memberRoles.filter(isProjectSpecificRole).map((r) => { const parsed = parseProjectRole(r); diff --git a/src/routes/(console)/organization-[organization]/projectAccessSelector.svelte b/src/routes/(console)/organization-[organization]/projectAccessSelector.svelte index 14bcc5df2..d98ae0a23 100644 --- a/src/routes/(console)/organization-[organization]/projectAccessSelector.svelte +++ b/src/routes/(console)/organization-[organization]/projectAccessSelector.svelte @@ -25,7 +25,7 @@ .map((p) => ({ label: p.name, value: p.$id })); } - const allSelected = $derived(projects.length > 0 && projectAccess.length >= projects.length); + const allSelected = $derived(projects.length === 0 || projectAccess.length >= projects.length); function addRow() { projectAccess = [...projectAccess, { projectId: '', roleName: 'developer' }];