diff --git a/lib/controller/tenant/tenant_selection_controller.dart b/lib/controller/tenant/tenant_selection_controller.dart index 99f180a..aa44fa8 100644 --- a/lib/controller/tenant/tenant_selection_controller.dart +++ b/lib/controller/tenant/tenant_selection_controller.dart @@ -1,8 +1,6 @@ -import 'dart:convert'; import 'package:get/get.dart'; import 'package:marco/helpers/services/app_logger.dart'; import 'package:marco/helpers/services/tenant_service.dart'; -import 'package:marco/helpers/services/storage/local_storage.dart'; import 'package:marco/model/tenant/tenant_list_model.dart'; import 'package:marco/helpers/widgets/my_snackbar.dart'; @@ -15,36 +13,18 @@ class TenantSelectionController extends GetxController { @override void onInit() { super.onInit(); - _checkExistingTenant(); - } - - /// Check if a tenant was previously selected - Future _checkExistingTenant() async { - try { - final savedTenant = await TenantService.loadSavedTenant(); - if (savedTenant != null) { - // Tenant already selected → go to dashboard - Get.offAllNamed('/dashboard'); - } else { - // No tenant saved → load from API - await loadTenants(); - } - } catch (e, st) { - logSafe("❌ Error checking saved tenant", - level: LogLevel.error, error: e, stackTrace: st); - await loadTenants(); - } + loadTenants(); } /// Load tenants from API Future loadTenants() async { - isLoading.value = true; try { + isLoading.value = true; final data = await _tenantService.getTenants(); - if (data != null && data.isNotEmpty) { + if (data != null) { tenants.value = data.map((e) => Tenant.fromJson(e)).toList(); - // Auto-select if only one tenant + // ✅ Automatically select if only one tenant if (tenants.length == 1) { await onTenantSelected(tenants.first.id); } @@ -55,34 +35,37 @@ class TenantSelectionController extends GetxController { } catch (e, st) { logSafe("❌ Exception in loadTenants", level: LogLevel.error, error: e, stackTrace: st); - tenants.clear(); } finally { isLoading.value = false; } } - /// Handle tenant selection + /// Select tenant Future onTenantSelected(String tenantId) async { - isLoading.value = true; try { + isLoading.value = true; final success = await _tenantService.selectTenant(tenantId); if (success) { - final tenant = tenants.firstWhere((t) => t.id == tenantId); + logSafe("✅ Tenant selection successful: $tenantId"); - // Save selected tenant in TenantService and LocalStorage - TenantService.setSelectedTenant(tenant); - await LocalStorage.saveString( - 'selectedTenant', jsonEncode(tenant.toJson())); + // Store selected tenant in memory + TenantService.setSelectedTenant( + tenants.firstWhere((t) => t.id == tenantId)); - // Navigate to dashboard + // Navigate to dashboard/home Get.offAllNamed('/dashboard'); + // Optional: show success snackbar showAppSnackbar( title: "Success", message: "Organization selected successfully.", type: SnackbarType.success, ); } else { + logSafe("❌ Tenant selection failed for: $tenantId", + level: LogLevel.warning); + + // Show error snackbar showAppSnackbar( title: "Error", message: "Unable to select organization. Please try again.", @@ -93,6 +76,7 @@ class TenantSelectionController extends GetxController { logSafe("❌ Exception in onTenantSelected", level: LogLevel.error, error: e, stackTrace: st); + // Show error snackbar for exception showAppSnackbar( title: "Error", message: "An unexpected error occurred while selecting organization.", diff --git a/lib/helpers/services/tenant_service.dart b/lib/helpers/services/tenant_service.dart index 2a49a58..83acfc6 100644 --- a/lib/helpers/services/tenant_service.dart +++ b/lib/helpers/services/tenant_service.dart @@ -97,22 +97,6 @@ class TenantService implements ITenantService { } } - /// Load previously selected tenant from local storage - static Future loadSavedTenant() async { - final jsonString = LocalStorage.getString('selectedTenant'); - if (jsonString == null) return null; - - try { - final tenantMap = jsonDecode(jsonString) as Map; - final tenant = Tenant.fromJson(tenantMap); - currentTenant = tenant; - return tenant; - } catch (e) { - logSafe("❌ Failed to load saved tenant: $e", level: LogLevel.warning); - return null; - } - } - @override Future selectTenant(String tenantId, {bool hasRetried = false}) async { try {