TF-1083: add drag multiple mail
This commit is contained in:
@@ -95,6 +95,7 @@ class ThreadController extends BaseController {
|
|||||||
final MoveToMailboxInteractor _moveToMailboxInteractor;
|
final MoveToMailboxInteractor _moveToMailboxInteractor;
|
||||||
|
|
||||||
final emailList = <PresentationEmail>[].obs;
|
final emailList = <PresentationEmail>[].obs;
|
||||||
|
final listEmailDrag = <PresentationEmail>[].obs;
|
||||||
|
|
||||||
bool canLoadMore = true;
|
bool canLoadMore = true;
|
||||||
bool canSearchMore = true;
|
bool canSearchMore = true;
|
||||||
@@ -1390,4 +1391,16 @@ class ThreadController extends BaseController {
|
|||||||
SearchEmailBindings().dependencies();
|
SearchEmailBindings().dependencies();
|
||||||
mailboxDashBoardController.dispatchRoute(AppRoutes.SEARCH_EMAIL);
|
mailboxDashBoardController.dispatchRoute(AppRoutes.SEARCH_EMAIL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void calculateDragValue(PresentationEmail? currentPresentationEmail) {
|
||||||
|
if(currentPresentationEmail != null) {
|
||||||
|
if(mailboxDashBoardController.listEmailSelected.contains(currentPresentationEmail)){
|
||||||
|
listEmailDrag.clear();
|
||||||
|
listEmailDrag.addAll(mailboxDashBoardController.listEmailSelected);
|
||||||
|
} else {
|
||||||
|
listEmailDrag.clear();
|
||||||
|
listEmailDrag.add(currentPresentationEmail);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -332,52 +332,55 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
key: const PageStorageKey('list_presentation_email_in_threads'),
|
key: const PageStorageKey('list_presentation_email_in_threads'),
|
||||||
itemExtent: _getItemExtent(context),
|
itemExtent: _getItemExtent(context),
|
||||||
itemCount: listPresentationEmail.length,
|
itemCount: listPresentationEmail.length,
|
||||||
itemBuilder: (context, index) =>
|
itemBuilder: (context, index) {
|
||||||
Draggable<List<PresentationEmail>>(
|
return Draggable<List<PresentationEmail>>(
|
||||||
data: [listPresentationEmail[index]],
|
data: controller.listEmailDrag,
|
||||||
child: Obx(() => (EmailTileBuilder(
|
child: (EmailTileBuilder(
|
||||||
|
context,
|
||||||
|
listPresentationEmail[index],
|
||||||
|
controller.mailboxDashBoardController.currentSelectMode.value,
|
||||||
|
controller.searchController.searchState.value.searchStatus,
|
||||||
|
controller.searchQuery,
|
||||||
|
mailboxCurrent: controller.searchController.isSearchEmailRunning
|
||||||
|
? listPresentationEmail[index].findMailboxContain(
|
||||||
|
controller.mailboxDashBoardController.mapMailboxById)
|
||||||
|
: controller.currentMailbox,
|
||||||
|
advancedSearchActivated: controller.searchController.isAdvancedSearchHasApply.isTrue)
|
||||||
|
..addOnPressEmailActionClick((action, email) =>
|
||||||
|
controller.pressEmailAction(
|
||||||
|
context,
|
||||||
|
action,
|
||||||
|
email,
|
||||||
|
mailboxContain: controller.searchController.isSearchEmailRunning
|
||||||
|
? email.findMailboxContain(controller.mailboxDashBoardController.mapMailboxById)
|
||||||
|
: controller.currentMailbox))
|
||||||
|
..addOnMoreActionClick((email, position) => _responsiveUtils.isMobile(context)
|
||||||
|
? controller.openContextMenuAction(context, _contextMenuActionTile(context, email))
|
||||||
|
: controller.openPopupMenuAction(context, position, _popupMenuActionTile(context, email))))
|
||||||
|
.build(),
|
||||||
|
feedback: _buildFeedBackWidget(context),
|
||||||
|
childWhenDragging: (EmailTileBuilder(
|
||||||
context,
|
context,
|
||||||
listPresentationEmail[index],
|
listPresentationEmail[index],
|
||||||
controller.mailboxDashBoardController.currentSelectMode.value,
|
controller.mailboxDashBoardController.currentSelectMode.value,
|
||||||
controller.searchController.searchState.value.searchStatus,
|
controller.searchController.searchState.value.searchStatus,
|
||||||
controller.searchQuery,
|
controller.searchQuery,
|
||||||
mailboxCurrent: controller.searchController.isSearchEmailRunning
|
mailboxCurrent: controller.searchController.isSearchEmailRunning
|
||||||
? listPresentationEmail[index].findMailboxContain(
|
? listPresentationEmail[index].findMailboxContain(
|
||||||
controller.mailboxDashBoardController.mapMailboxById)
|
controller.mailboxDashBoardController.mapMailboxById)
|
||||||
: controller.currentMailbox,
|
: controller.currentMailbox,
|
||||||
advancedSearchActivated: controller.searchController.isAdvancedSearchHasApply.isTrue)
|
advancedSearchActivated: controller.searchController.isAdvancedSearchHasApply.isTrue, isDrag: true))
|
||||||
..addOnPressEmailActionClick((action, email) =>
|
.build(),
|
||||||
controller.pressEmailAction(
|
dragAnchorStrategy: pointerDragAnchorStrategy,
|
||||||
context,
|
onDragStarted: () {
|
||||||
action,
|
controller.calculateDragValue(listPresentationEmail[index]);
|
||||||
email,
|
},
|
||||||
mailboxContain: controller.searchController.isSearchEmailRunning
|
);
|
||||||
? email.findMailboxContain(controller.mailboxDashBoardController.mapMailboxById)
|
})
|
||||||
: controller.currentMailbox))
|
|
||||||
..addOnMoreActionClick((email, position) => _responsiveUtils.isMobile(context)
|
|
||||||
? controller.openContextMenuAction(context, _contextMenuActionTile(context, email))
|
|
||||||
: controller.openPopupMenuAction(context, position, _popupMenuActionTile(context, email))))
|
|
||||||
.build()),
|
|
||||||
feedback: _buildFeedBackWidget(),
|
|
||||||
childWhenDragging: (EmailTileBuilder(
|
|
||||||
context,
|
|
||||||
listPresentationEmail[index],
|
|
||||||
controller.mailboxDashBoardController.currentSelectMode.value,
|
|
||||||
controller.searchController.searchState.value.searchStatus,
|
|
||||||
controller.searchQuery,
|
|
||||||
mailboxCurrent: controller.searchController.isSearchEmailRunning
|
|
||||||
? listPresentationEmail[index].findMailboxContain(
|
|
||||||
controller.mailboxDashBoardController.mapMailboxById)
|
|
||||||
: controller.currentMailbox,
|
|
||||||
advancedSearchActivated: controller.searchController.isAdvancedSearchHasApply.isTrue,
|
|
||||||
isDrag: true))
|
|
||||||
.build(),
|
|
||||||
dragAnchorStrategy: pointerDragAnchorStrategy,
|
|
||||||
))
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildFeedBackWidget() {
|
Widget _buildFeedBackWidget(BuildContext context) {
|
||||||
return SizedBox(
|
return SizedBox(
|
||||||
height: 60,
|
height: 60,
|
||||||
child: Material(
|
child: Material(
|
||||||
@@ -395,14 +398,16 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
),
|
),
|
||||||
const SizedBox(width: 10),
|
const SizedBox(width: 10),
|
||||||
const Text(
|
Obx(
|
||||||
'Move 1 conversation',
|
() => Text(
|
||||||
overflow: TextOverflow.clip,
|
AppLocalizations.of(context).moveConversation(controller.listEmailDrag.length),
|
||||||
style: TextStyle(
|
overflow: TextOverflow.clip,
|
||||||
color: Colors.white,
|
style: const TextStyle(
|
||||||
fontWeight: FontWeight.bold,
|
color: Colors.white,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
maxLines: 1,
|
||||||
),
|
),
|
||||||
maxLines: 1,
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -2373,5 +2373,15 @@
|
|||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders_order": [],
|
"placeholders_order": [],
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"moveConversation": "Move {numberOfConversation} conversation",
|
||||||
|
"@moveConversation": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders_order": [
|
||||||
|
"numberOfConversation"
|
||||||
|
],
|
||||||
|
"placeholders": {
|
||||||
|
"numberOfConversation": {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2447,4 +2447,12 @@ class AppLocalizations {
|
|||||||
'A read receipt has been sent.',
|
'A read receipt has been sent.',
|
||||||
name: 'toastMessageSendReceiptSuccess');
|
name: 'toastMessageSendReceiptSuccess');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String moveConversation(int numberOfConversation) {
|
||||||
|
return Intl.message(
|
||||||
|
'Move $numberOfConversation conversation',
|
||||||
|
name: 'moveConversation',
|
||||||
|
args: [numberOfConversation]
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user