diff --git a/lib/controller/auth/login_controller.dart b/lib/controller/auth/login_controller.dart index f52b28b..4aaf886 100644 --- a/lib/controller/auth/login_controller.dart +++ b/lib/controller/auth/login_controller.dart @@ -1,3 +1,4 @@ + import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:marco/controller/my_controller.dart'; @@ -79,6 +80,7 @@ class LoginController extends MyController { enableRemoteLogging(); logSafe("✅ Remote logging enabled after login."); + final fcmToken = await LocalStorage.getFcmToken(); if (fcmToken?.isNotEmpty ?? false) { final success = await AuthService.registerDeviceToken(fcmToken!); @@ -89,9 +91,9 @@ class LoginController extends MyController { level: LogLevel.warning); } - logSafe("Login successful for user: ${loginData['username']}"); - Get.toNamed('/select_tenant'); + logSafe("Login successful for user: ${loginData['username']}"); + Get.toNamed('/home'); } } catch (e, stacktrace) { logSafe("Exception during login", diff --git a/lib/routes.dart b/lib/routes.dart index a2f9362..d272b3d 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -1,7 +1,7 @@ + import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:marco/helpers/services/auth_service.dart'; -import 'package:marco/helpers/services/tenant_service.dart'; import 'package:marco/view/auth/forgot_password_screen.dart'; import 'package:marco/view/auth/login_screen.dart'; import 'package:marco/view/auth/register_account_screen.dart'; @@ -20,21 +20,13 @@ import 'package:marco/view/auth/mpin_auth_screen.dart'; import 'package:marco/view/directory/directory_main_screen.dart'; import 'package:marco/view/expense/expense_screen.dart'; import 'package:marco/view/document/user_document_screen.dart'; -import 'package:marco/view/tenant/tenant_selection_screen.dart'; class AuthMiddleware extends GetMiddleware { @override RouteSettings? redirect(String? route) { - if (!AuthService.isLoggedIn) { - if (route != '/auth/login-option') { - return const RouteSettings(name: '/auth/login-option'); - } - } else if (!TenantService.isTenantSelected) { - if (route != '/select-tenant') { - return const RouteSettings(name: '/select-tenant'); - } - } - return null; + return AuthService.isLoggedIn + ? null + : RouteSettings(name: '/auth/login-option'); } } @@ -49,10 +41,6 @@ getPageRoute() { page: () => DashboardScreen(), // or your actual home screen middlewares: [AuthMiddleware()], ), - GetPage( - name: '/select-tenant', - page: () => const TenantSelectionScreen(), - middlewares: [AuthMiddleware()]), // Dashboard GetPage( @@ -80,12 +68,12 @@ getPageRoute() { name: '/dashboard/directory-main-page', page: () => DirectoryMainScreen(), middlewares: [AuthMiddleware()]), - // Expense + // Expense GetPage( name: '/dashboard/expense-main-page', page: () => ExpenseMainScreen(), middlewares: [AuthMiddleware()]), - // Documents + // Documents GetPage( name: '/dashboard/document-main-page', page: () => UserDocumentsPage(), diff --git a/lib/view/layouts/user_profile_right_bar.dart b/lib/view/layouts/user_profile_right_bar.dart index a15d2d6..736366d 100644 --- a/lib/view/layouts/user_profile_right_bar.dart +++ b/lib/view/layouts/user_profile_right_bar.dart @@ -9,10 +9,8 @@ import 'package:marco/helpers/widgets/my_text.dart'; import 'package:marco/helpers/widgets/avatar.dart'; import 'package:marco/model/employees/employee_info.dart'; import 'package:marco/controller/auth/mpin_controller.dart'; -import 'package:marco/controller/tenant/tenant_selection_controller.dart'; import 'package:marco/view/employees/employee_profile_screen.dart'; -import 'package:marco/helpers/services/tenant_service.dart'; -import 'package:marco/view/tenant/tenant_selection_screen.dart'; + class UserProfileBar extends StatefulWidget { final bool isCondensed; @@ -27,20 +25,13 @@ class _UserProfileBarState extends State late EmployeeInfo employeeInfo; bool _isLoading = true; bool hasMpin = true; - late final TenantSelectionController _tenantController; @override void initState() { super.initState(); - _tenantController = Get.put(TenantSelectionController()); _initData(); } - @override - void dispose() { - Get.delete(); - super.dispose(); - } Future _initData() async { employeeInfo = LocalStorage.getEmployeeInfo()!; @@ -91,10 +82,6 @@ class _UserProfileBarState extends State _isLoading ? const _LoadingSection() : _userProfileSection(isCondensed), - - // --- SWITCH TENANT ROW BELOW AVATAR --- - if (!_isLoading && !isCondensed) _switchTenantRow(), - MySpacing.height(12), Divider( indent: 18, @@ -121,118 +108,6 @@ class _UserProfileBarState extends State ); } - /// Row widget to switch tenant with popup menu (button only) - Widget _switchTenantRow() { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6), - child: Obx(() { - if (_tenantController.isLoading.value) return _loadingTenantContainer(); - - final tenants = _tenantController.tenants; - if (tenants.isEmpty) return _noTenantContainer(); - - final selectedTenant = TenantService.currentTenant; - - // Sort tenants: selected tenant first - final sortedTenants = List.of(tenants); - if (selectedTenant != null) { - sortedTenants.sort((a, b) { - if (a.id == selectedTenant.id) return -1; - if (b.id == selectedTenant.id) return 1; - return 0; - }); - } - - return PopupMenuButton( - onSelected: (tenantId) => - _tenantController.onTenantSelected(tenantId), - itemBuilder: (_) => sortedTenants.map((tenant) { - return PopupMenuItem( - value: tenant.id, - child: Row( - children: [ - ClipRRect( - borderRadius: BorderRadius.circular(8), - child: Container( - width: 20, - height: 20, - color: Colors.grey.shade200, - child: TenantLogo(logoImage: tenant.logoImage), - ), - ), - const SizedBox(width: 10), - Expanded( - child: Text( - tenant.name, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle( - fontWeight: tenant.id == selectedTenant?.id - ? FontWeight.bold - : FontWeight.w600, - color: tenant.id == selectedTenant?.id - ? Colors.blueAccent - : Colors.black87, - ), - ), - ), - if (tenant.id == selectedTenant?.id) - const Icon(Icons.check_circle, - color: Colors.blueAccent, size: 18), - ], - ), - ); - }).toList(), - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 10), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Icon(Icons.swap_horiz, color: Colors.blue.shade600), - Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 6), - child: Text( - "Switch Organization", - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle( - color: Colors.blue, fontWeight: FontWeight.bold), - ), - ), - ), - Icon(Icons.arrow_drop_down, color: Colors.blue.shade600), - ], - ), - ), - ); - }), - ); - } - - Widget _loadingTenantContainer() => Container( - padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), - decoration: BoxDecoration( - color: Colors.blue.shade50, - borderRadius: BorderRadius.circular(12), - border: Border.all(color: Colors.blue.shade200, width: 1), - ), - child: const Center(child: CircularProgressIndicator(strokeWidth: 2)), - ); - - Widget _noTenantContainer() => Container( - padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), - decoration: BoxDecoration( - color: Colors.blue.shade50, - borderRadius: BorderRadius.circular(12), - border: Border.all(color: Colors.blue.shade200, width: 1), - ), - child: MyText.bodyMedium( - "No tenants available", - color: Colors.blueAccent, - fontWeight: 600, - ), - ); Widget _userProfileSection(bool condensed) { final padding = MySpacing.fromLTRB(