From 8115abb56904fd5eb3c90dfdcc4351c6be61bb1c Mon Sep 17 00:00:00 2001 From: Arseni Date: Mon, 8 Dec 2025 19:10:33 +0300 Subject: [PATCH] Organizations now load only once --- .../pshared/lib/provider/organizations.dart | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/frontend/pshared/lib/provider/organizations.dart b/frontend/pshared/lib/provider/organizations.dart index 2a06728..5746e40 100644 --- a/frontend/pshared/lib/provider/organizations.dart +++ b/frontend/pshared/lib/provider/organizations.dart @@ -20,6 +20,7 @@ class OrganizationsProvider extends ChangeNotifier { Organization get current => isOrganizationSet ? _current! : throw StateError('Organization is not set'); Organization? _org(String? orgRef) => organizations.firstWhereOrNull((org) => org.id == orgRef); + Organization? _orgInList(String? orgRef, List list) => list.firstWhereOrNull((org) => org.id == orgRef); Organization? get _current => _org(_currentOrg); bool get isOrganizationSet => _current != null; @@ -41,7 +42,7 @@ class OrganizationsProvider extends ChangeNotifier { org = orgs.firstWhereOrNull((o) => o.id == org)?.id; // fallback if org is not set or not available org ??= orgs.first.id; - await setCurrentOrganization(org); + await setCurrentOrganization(org, availableOrganizations: orgs); _setResource(Resource(data: orgs, isLoading: false)); return orgs; } catch (e) { @@ -54,7 +55,7 @@ class OrganizationsProvider extends ChangeNotifier { _setResource(_resource.copyWith(isLoading: true, error: null)); try { final org = await OrganizationService.loadByInvitation(invitationRef); - await setCurrentOrganization(org.id); + await setCurrentOrganization(org.id, availableOrganizations: [org]); _setResource(Resource(data: [org], isLoading: false)); return org; } catch (e) { @@ -63,17 +64,23 @@ class OrganizationsProvider extends ChangeNotifier { } } - bool _setCurrentOrganization(String? orgRef) { - final organizationRef = _org(orgRef)?.id; + bool _setCurrentOrganization( + String? orgRef, { + List? availableOrganizations, + }) { + final organizationRef = _orgInList(orgRef, availableOrganizations ?? organizations)?.id; if (organizationRef == null) return false; _currentOrg = organizationRef; return true; } - Future setCurrentOrganization(String? orgRef) async { - if (!_setCurrentOrganization(orgRef)) return false; - await SecureStorageService.set(Constants.currentOrgKey, orgRef); + Future setCurrentOrganization( + String? orgRef, { + List? availableOrganizations, + }) async { + if (!_setCurrentOrganization(orgRef, availableOrganizations: availableOrganizations)) return false; + await SecureStorageService.set(Constants.currentOrgKey, _currentOrg); notifyListeners(); return true; }