Fix a gray screen appear in browser tablet responsive
This commit is contained in:
@@ -24,10 +24,6 @@ class RefreshChangeEmailAction extends EmailUIAction {
|
||||
List<Object?> get props => [newState];
|
||||
}
|
||||
|
||||
class CloseEmailDetailedViewToRedirectToTheInboxAction extends EmailUIAction {}
|
||||
|
||||
class CloseEmailDetailedViewAction extends EmailUIAction {}
|
||||
|
||||
class HideEmailContentViewAction extends EmailUIAction {}
|
||||
|
||||
class ShowEmailContentViewAction extends EmailUIAction {}
|
||||
|
||||
@@ -1,156 +0,0 @@
|
||||
import 'dart:collection';
|
||||
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:model/extensions/list_presentation_email_extension.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/email_loaded.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/page_view_navigator_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||
|
||||
class EmailSupervisorController extends GetxController {
|
||||
|
||||
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
|
||||
|
||||
final Queue<EmailLoaded> presentationEmailsLoaded = Queue();
|
||||
PageController? pageController;
|
||||
|
||||
int _currentEmailIndex = -1;
|
||||
final List<PresentationEmail> _currentListEmail = <PresentationEmail>[];
|
||||
|
||||
final pageViewNavigatorState = PageViewNavigatorState.none.obs;
|
||||
final supportedPageView = RxBool(false);
|
||||
final scrollPhysicsPageView = Rxn<ScrollPhysics>();
|
||||
|
||||
List<PresentationEmail> get currentListEmail => _currentListEmail;
|
||||
|
||||
int get currentEmailIndex => _currentEmailIndex;
|
||||
|
||||
void setCurrentEmailIndex(int index) => _currentEmailIndex = index;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
updateScrollPhysicPageView(false);
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
pageController?.dispose();
|
||||
pageController = null;
|
||||
super.onClose();
|
||||
}
|
||||
|
||||
void updateNewCurrentListEmail() {
|
||||
_currentListEmail.clear();
|
||||
if (isSearchActivatedOnMobile) {
|
||||
_currentListEmail.addAll(mailboxDashBoardController.listResultSearch);
|
||||
} else {
|
||||
_currentListEmail.addAll(mailboxDashBoardController.emailsInCurrentMailbox);
|
||||
}
|
||||
}
|
||||
|
||||
bool get isSearchActivatedOnMobile {
|
||||
return mailboxDashBoardController.searchController.isSearchEmailRunning
|
||||
&& PlatformInfo.isMobile;
|
||||
}
|
||||
|
||||
void createPageControllerAndJumpToEmailById(EmailId currentEmailId) {
|
||||
_currentEmailIndex = _currentListEmail.matchedIndex(currentEmailId);
|
||||
if (pageController != null && pageController?.hasClients == true) {
|
||||
pageController?.jumpToPage(_currentEmailIndex);
|
||||
} else {
|
||||
pageController = PageController(initialPage: _currentEmailIndex);
|
||||
}
|
||||
_updateStatePageViewNavigator();
|
||||
}
|
||||
|
||||
void onPageChanged(int index) {
|
||||
updateScrollPhysicPageView(false);
|
||||
mailboxDashBoardController.openEmailDetailedView(currentListEmail[index]);
|
||||
}
|
||||
|
||||
void _updateStatePageViewNavigator() {
|
||||
if (_currentListEmail.length <= 1) {
|
||||
pageViewNavigatorState.value = PageViewNavigatorState.none;
|
||||
} else {
|
||||
if (_currentEmailIndex > 0 && _currentEmailIndex < _currentListEmail.length - 1) {
|
||||
pageViewNavigatorState.value = PageViewNavigatorState.all;
|
||||
} else if (_currentEmailIndex <= 0) {
|
||||
pageViewNavigatorState.value = PageViewNavigatorState.previous;
|
||||
} else if (_currentEmailIndex >= _currentListEmail.length - 1) {
|
||||
pageViewNavigatorState.value = PageViewNavigatorState.next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool get nextEmailActivated {
|
||||
return pageViewNavigatorState.value == PageViewNavigatorState.next ||
|
||||
pageViewNavigatorState.value == PageViewNavigatorState.all;
|
||||
}
|
||||
|
||||
bool get previousEmailActivated {
|
||||
return pageViewNavigatorState.value == PageViewNavigatorState.previous ||
|
||||
pageViewNavigatorState.value == PageViewNavigatorState.all;
|
||||
}
|
||||
|
||||
void moveToNextEmail() {
|
||||
if (nextEmailActivated) {
|
||||
_currentEmailIndex--;
|
||||
_jumpToPage(_currentEmailIndex);
|
||||
}
|
||||
}
|
||||
|
||||
void backToPreviousEmail() {
|
||||
if (previousEmailActivated) {
|
||||
_currentEmailIndex++;
|
||||
_jumpToPage(_currentEmailIndex);
|
||||
}
|
||||
}
|
||||
|
||||
void _jumpToPage(int page) {
|
||||
if (PlatformInfo.isWeb) {
|
||||
onPageChanged(page);
|
||||
} else {
|
||||
pageController?.animateToPage(
|
||||
page,
|
||||
duration: const Duration(milliseconds: 500),
|
||||
curve: Curves.linear);
|
||||
}
|
||||
}
|
||||
|
||||
void updateScrollPhysicPageView(bool isScrollPageViewActivated) {
|
||||
if (PlatformInfo.isMobile) {
|
||||
if (!isScrollPageViewActivated) {
|
||||
scrollPhysicsPageView.value = const NeverScrollableScrollPhysics();
|
||||
} else {
|
||||
scrollPhysicsPageView.value = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EmailLoaded? getEmailInQueueByEmailId(EmailId emailId) {
|
||||
return presentationEmailsLoaded.firstWhereOrNull((e) => e.emailCurrent!.id == emailId);
|
||||
}
|
||||
|
||||
void popFirstEmailQueue() {
|
||||
presentationEmailsLoaded.removeFirst();
|
||||
}
|
||||
|
||||
void popEmailQueue(EmailId? emailId) {
|
||||
presentationEmailsLoaded.removeWhere((e) => e.emailCurrent!.id == emailId);
|
||||
}
|
||||
|
||||
void pushEmailQueue(EmailLoaded emailLoaded) {
|
||||
presentationEmailsLoaded.add(emailLoaded);
|
||||
}
|
||||
|
||||
void disposePageViewController() {
|
||||
pageController?.dispose();
|
||||
pageController = null;
|
||||
}
|
||||
}
|
||||
@@ -387,15 +387,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
||||
});
|
||||
|
||||
obxListeners.add(ever(mailboxDashBoardController.emailUIAction, (action) {
|
||||
if (action is CloseEmailDetailedViewToRedirectToTheInboxAction) {
|
||||
_resetToOriginalValue(isEmailClosing: true);
|
||||
mailboxDashBoardController.clearSelectedEmail();
|
||||
mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread);
|
||||
mailboxDashBoardController.clearEmailUIAction();
|
||||
} else if (action is CloseEmailDetailedViewAction) {
|
||||
closeEmailView(context: currentContext);
|
||||
mailboxDashBoardController.clearEmailUIAction();
|
||||
} else if (action is HideEmailContentViewAction) {
|
||||
if (action is HideEmailContentViewAction) {
|
||||
isEmailContentHidden.value = true;
|
||||
mailboxDashBoardController.clearEmailUIAction();
|
||||
} else if (action is ShowEmailContentViewAction) {
|
||||
|
||||
+6
-41
@@ -908,13 +908,9 @@ class MailboxDashBoardController extends ReloadableController
|
||||
selectedEmail.value = null;
|
||||
}
|
||||
|
||||
void openEmailDetailedView(PresentationEmail presentationEmail, {bool singleEmail = false}) {
|
||||
void openEmailDetailedView(PresentationEmail presentationEmail) {
|
||||
setSelectedEmail(presentationEmail);
|
||||
if (singleEmail) {
|
||||
dispatchRoute(DashboardRoutes.emailDetailed);
|
||||
} else {
|
||||
dispatchRoute(DashboardRoutes.threadDetailed);
|
||||
}
|
||||
dispatchRoute(DashboardRoutes.threadDetailed);
|
||||
if (PlatformInfo.isWeb && presentationEmail.routeWeb != null) {
|
||||
RouteUtils.replaceBrowserHistory(
|
||||
title: 'Email-${presentationEmail.id?.id.value ?? ''}',
|
||||
@@ -947,9 +943,7 @@ class MailboxDashBoardController extends ReloadableController
|
||||
|
||||
void handleAdvancedSearchEmail() {
|
||||
log('MailboxDashBoardController::handleAdvancedSearchEmail:');
|
||||
if (_searchInsideEmailDetailedViewIsActive()) {
|
||||
_closeEmailDetailedView();
|
||||
} else if (_searchInsideThreadDetailViewIsActive()) {
|
||||
if (_searchInsideThreadDetailViewIsActive()) {
|
||||
_closeEmailDetailedView();
|
||||
}
|
||||
_unSelectedMailbox();
|
||||
@@ -962,9 +956,7 @@ class MailboxDashBoardController extends ReloadableController
|
||||
void handleClearAdvancedSearchFilterEmail() {
|
||||
log('MailboxDashBoardController::handleClearAdvancedSearchFilterEmail:');
|
||||
clearFilterMessageOption();
|
||||
if (_searchInsideEmailDetailedViewIsActive()) {
|
||||
_closeEmailDetailedView();
|
||||
} else if (_searchInsideThreadDetailViewIsActive()) {
|
||||
if (_searchInsideThreadDetailViewIsActive()) {
|
||||
_closeEmailDetailedView();
|
||||
}
|
||||
_unSelectedMailbox();
|
||||
@@ -977,9 +969,7 @@ class MailboxDashBoardController extends ReloadableController
|
||||
final isMailAddress = EmailUtils.isEmailAddressValid(queryString);
|
||||
log('MailboxDashBoardController::searchEmailByQueryString():QueryString = $queryString | isMailAddress = $isMailAddress');
|
||||
clearFilterMessageOption();
|
||||
if (_searchInsideEmailDetailedViewIsActive()) {
|
||||
_closeEmailDetailedView();
|
||||
} else if (_searchInsideThreadDetailViewIsActive()) {
|
||||
if (_searchInsideThreadDetailViewIsActive()) {
|
||||
_closeEmailDetailedView();
|
||||
}
|
||||
_unSelectedMailbox();
|
||||
@@ -1002,13 +992,6 @@ class MailboxDashBoardController extends ReloadableController
|
||||
dispatchAction(StartSearchEmailAction());
|
||||
}
|
||||
|
||||
bool _searchInsideEmailDetailedViewIsActive() {
|
||||
return PlatformInfo.isWeb
|
||||
&& currentContext != null
|
||||
&& responsiveUtils.isDesktop(currentContext!)
|
||||
&& dashboardRoute.value == DashboardRoutes.emailDetailed;
|
||||
}
|
||||
|
||||
bool _searchInsideThreadDetailViewIsActive() {
|
||||
return PlatformInfo.isWeb
|
||||
&& currentContext != null
|
||||
@@ -2824,10 +2807,6 @@ class MailboxDashBoardController extends ReloadableController
|
||||
|
||||
void redirectToInboxAction() {
|
||||
log('MailboxDashBoardController::redirectToInboxAction:');
|
||||
if (dashboardRoute.value == DashboardRoutes.emailDetailed) {
|
||||
dispatchEmailUIAction(CloseEmailDetailedViewToRedirectToTheInboxAction());
|
||||
}
|
||||
|
||||
final inboxId = getMailboxIdByRole(PresentationMailbox.roleInbox);
|
||||
if (inboxId == null) return;
|
||||
|
||||
@@ -2908,9 +2887,7 @@ class MailboxDashBoardController extends ReloadableController
|
||||
FocusManager.instance.primaryFocus?.unfocus();
|
||||
clearFilterMessageOption();
|
||||
searchController.clearFilterSuggestion();
|
||||
if (_searchInsideEmailDetailedViewIsActive()) {
|
||||
_closeEmailDetailedView();
|
||||
} else if (_searchInsideThreadDetailViewIsActive()) {
|
||||
if (_searchInsideThreadDetailViewIsActive()) {
|
||||
_closeEmailDetailedView();
|
||||
}
|
||||
_unSelectedMailbox();
|
||||
@@ -2992,18 +2969,6 @@ class MailboxDashBoardController extends ReloadableController
|
||||
bool _navigateToScreen() {
|
||||
log('MailboxDashBoardController::_navigateToScreen: dashboardRoute: $dashboardRoute');
|
||||
switch(dashboardRoute.value) {
|
||||
case DashboardRoutes.emailDetailed:
|
||||
if (PlatformInfo.isMobile) {
|
||||
if (currentContext != null && canBack(currentContext!)) {
|
||||
return false;
|
||||
} else {
|
||||
dispatchEmailUIAction(CloseEmailDetailedViewAction());
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
dispatchEmailUIAction(CloseEmailDetailedViewAction());
|
||||
return true;
|
||||
}
|
||||
case DashboardRoutes.thread:
|
||||
if (PlatformInfo.isMobile) {
|
||||
if (currentContext != null && canBack(currentContext!)) {
|
||||
|
||||
@@ -3,7 +3,6 @@ import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:focus_detector_v2/focus_detector_v2.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/email_view.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/widgets/email_view_empty_widget.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/base_mailbox_dashboard_view.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
||||
@@ -43,15 +42,6 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
mobile: buildScaffoldHaveDrawer(body: ThreadView()),
|
||||
);
|
||||
|
||||
case DashboardRoutes.emailDetailed:
|
||||
return controller.searchController.isSearchEmailRunning
|
||||
? const EmailView()
|
||||
: buildResponsiveWithDrawer(
|
||||
left: ThreadView(),
|
||||
right: const EmailView(),
|
||||
mobile: const EmailView(),
|
||||
);
|
||||
|
||||
case DashboardRoutes.threadDetailed:
|
||||
return controller.searchController.isSearchEmailRunning
|
||||
? const ThreadDetailView()
|
||||
|
||||
@@ -12,8 +12,8 @@ import 'package:tmail_ui_user/features/base/widget/popup_menu/popup_menu_item_ac
|
||||
import 'package:tmail_ui_user/features/base/widget/report_message_banner.dart';
|
||||
import 'package:tmail_ui_user/features/base/widget/scrollbar_list_view.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/view/web/composer_overlay_view.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/email_view.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/widgets/email_view_empty_widget.dart';
|
||||
import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_view_web.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart';
|
||||
@@ -279,8 +279,6 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
switch(controller.dashboardRoute.value) {
|
||||
case DashboardRoutes.thread:
|
||||
return _buildThreadViewForWebDesktop(context);
|
||||
case DashboardRoutes.emailDetailed:
|
||||
return const EmailView();
|
||||
case DashboardRoutes.threadDetailed:
|
||||
return const ThreadDetailView();
|
||||
default:
|
||||
@@ -307,11 +305,11 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
);
|
||||
default:
|
||||
return controller.searchController.isSearchEmailRunning
|
||||
? const EmailView()
|
||||
? const ThreadDetailView()
|
||||
: buildResponsiveWithDrawer(
|
||||
left: ThreadView(),
|
||||
right: const EmailView(),
|
||||
mobile: const EmailView(),
|
||||
right: const EmailViewEmptyWidget(),
|
||||
mobile: ThreadView(),
|
||||
);
|
||||
}
|
||||
}),
|
||||
@@ -321,8 +319,6 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
return buildScaffoldHaveDrawer(body: ThreadView());
|
||||
case DashboardRoutes.threadDetailed:
|
||||
return const ThreadDetailView();
|
||||
case DashboardRoutes.emailDetailed:
|
||||
return const EmailView();
|
||||
case DashboardRoutes.searchEmail:
|
||||
return SearchEmailView();
|
||||
default:
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
|
||||
enum DashboardRoutes {
|
||||
thread,
|
||||
emailDetailed,
|
||||
threadDetailed,
|
||||
searchEmail,
|
||||
waiting,
|
||||
|
||||
@@ -28,24 +28,23 @@ import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/get_email_content_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/state/parse_calendar_event_state.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/calendar_event_accept_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/download_all_attachments_for_web_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/export_all_attachments_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/get_html_content_from_attachment_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/maybe_calendar_event_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/calendar_event_reject_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/download_all_attachments_for_web_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/download_attachment_for_web_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/download_attachments_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/export_all_attachments_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/export_attachment_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/get_email_content_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/get_html_content_from_attachment_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_email_read_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_star_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/maybe_calendar_event_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/parse_calendar_event_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/parse_email_by_blob_id_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/preview_email_from_eml_file_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/print_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/usecases/store_opened_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/controller/email_supervisor_controller.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/controller/single_email_controller.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/blob_calendar_event.dart';
|
||||
import 'package:tmail_ui_user/features/login/data/network/interceptors/authorization_interceptors.dart';
|
||||
@@ -85,7 +84,6 @@ const fallbackGenerators = {
|
||||
MockSpec<GetAllIdentitiesInteractor>(),
|
||||
MockSpec<StoreOpenedEmailInteractor>(),
|
||||
MockSpec<MailboxDashBoardController>(fallbackGenerators: fallbackGenerators),
|
||||
MockSpec<EmailSupervisorController>(fallbackGenerators: fallbackGenerators),
|
||||
MockSpec<DownloadManager>(fallbackGenerators: fallbackGenerators),
|
||||
MockSpec<CachingManager>(fallbackGenerators: fallbackGenerators),
|
||||
MockSpec<LanguageCacheManager>(fallbackGenerators: fallbackGenerators),
|
||||
@@ -129,7 +127,6 @@ void main() {
|
||||
final getAllIdentitiesInteractor = MockGetAllIdentitiesInteractor();
|
||||
final storeOpenedEmailInteractor = MockStoreOpenedEmailInteractor();
|
||||
final mailboxDashboardController = MockMailboxDashBoardController();
|
||||
final emailSupervisorController = MockEmailSupervisorController();
|
||||
final downloadManager = MockDownloadManager();
|
||||
final cachingManager = MockCachingManager();
|
||||
final languageCacheManager = MockLanguageCacheManager();
|
||||
@@ -168,7 +165,6 @@ void main() {
|
||||
|
||||
setUpAll(() {
|
||||
Get.put<MailboxDashBoardController>(mailboxDashboardController);
|
||||
Get.put<EmailSupervisorController>(emailSupervisorController);
|
||||
Get.put<DownloadManager>(downloadManager);
|
||||
Get.put<CachingManager>(cachingManager);
|
||||
Get.put<LanguageCacheManager>(languageCacheManager);
|
||||
@@ -368,7 +364,6 @@ void main() {
|
||||
when(mailboxDashboardController.emailUIAction).thenReturn(Rxn(EmailUIAction()));
|
||||
when(mailboxDashboardController.viewState).thenReturn(Rx(Right(UIState.idle)));
|
||||
when(mailboxDashboardController.accountId).thenReturn(Rxn(AccountFixtures.aliceAccountId));
|
||||
when(emailSupervisorController.scrollPhysicsPageView).thenReturn(Rxn());
|
||||
|
||||
singleEmailController.onInit();
|
||||
mailboxDashboardController.accountId.refresh();
|
||||
@@ -427,7 +422,6 @@ void main() {
|
||||
when(mailboxDashboardController.emailUIAction).thenReturn(Rxn(EmailUIAction()));
|
||||
when(mailboxDashboardController.viewState).thenReturn(Rx(Right(UIState.idle)));
|
||||
when(mailboxDashboardController.accountId).thenReturn(Rxn(AccountFixtures.aliceAccountId));
|
||||
when(emailSupervisorController.scrollPhysicsPageView).thenReturn(Rxn());
|
||||
|
||||
singleEmailController.onInit();
|
||||
mailboxDashboardController.accountId.refresh();
|
||||
|
||||
Reference in New Issue
Block a user