TF-2560 Fix cannot close composer when recipient input focused

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2024-02-16 16:36:56 +07:00
committed by Dat PHAM HOANG
parent f77b5e5389
commit b60d071d9a
@@ -157,47 +157,45 @@ class ComposerView extends GetWidget<ComposerController> {
margin: ComposerStyle.mobileSubjectMargin, margin: ComposerStyle.mobileSubjectMargin,
), ),
Expanded( Expanded(
child: LayoutBuilder(builder: (context, constraints) { child: Stack(
return Stack( children: [
children: [ Padding(
Padding( padding: ComposerStyle.mobileEditorPadding,
padding: ComposerStyle.mobileEditorPadding, child: Obx(() => WebEditorView(
child: Obx(() => WebEditorView( editorController: controller.richTextWebController.editorController,
editorController: controller.richTextWebController.editorController, arguments: controller.composerArguments.value,
arguments: controller.composerArguments.value, contentViewState: controller.emailContentsViewState.value,
contentViewState: controller.emailContentsViewState.value, currentWebContent: controller.textEditorWeb,
currentWebContent: controller.textEditorWeb, onInitial: controller.handleInitHtmlEditorWeb,
onInitial: controller.handleInitHtmlEditorWeb, onChangeContent: controller.onChangeTextEditorWeb,
onChangeContent: controller.onChangeTextEditorWeb, onFocus: controller.handleOnFocusHtmlEditorWeb,
onFocus: controller.handleOnFocusHtmlEditorWeb, onUnFocus: controller.handleOnUnFocusHtmlEditorWeb,
onUnFocus: controller.handleOnUnFocusHtmlEditorWeb, onMouseDown: controller.handleOnMouseDownHtmlEditorWeb,
onMouseDown: controller.handleOnMouseDownHtmlEditorWeb, onEditorSettings: controller.richTextWebController.onEditorSettingsChange,
onEditorSettings: controller.richTextWebController.onEditorSettingsChange, onImageUploadSuccessAction: (fileUpload) => controller.handleImageUploadSuccess(context, fileUpload),
onImageUploadSuccessAction: (fileUpload) => controller.handleImageUploadSuccess(context, fileUpload), onImageUploadFailureAction: (fileUpload, base64Str, uploadError) {
onImageUploadFailureAction: (fileUpload, base64Str, uploadError) { return controller.handleImageUploadFailure(
return controller.handleImageUploadFailure( context: context,
context: context, uploadError: uploadError,
uploadError: uploadError, fileUpload: fileUpload,
fileUpload: fileUpload, base64Str: base64Str,
base64Str: base64Str, );
); },
}, onEditorTextSizeChanged: controller.richTextWebController.onEditorTextSizeChanged,
onEditorTextSizeChanged: controller.richTextWebController.onEditorTextSizeChanged, width: constraints.maxWidth,
width: constraints.maxWidth, height: constraints.maxHeight,
height: constraints.maxHeight, )),
)), ),
), Align(
Align( alignment: AlignmentDirectional.topCenter,
alignment: AlignmentDirectional.topCenter, child: Obx(() => InsertImageLoadingBarWidget(
child: Obx(() => InsertImageLoadingBarWidget( uploadInlineViewState: controller.uploadController.uploadInlineViewState.value,
uploadInlineViewState: controller.uploadController.uploadInlineViewState.value, viewState: controller.viewState.value,
viewState: controller.viewState.value, padding: ComposerStyle.insertImageLoadingBarPadding,
padding: ComposerStyle.insertImageLoadingBarPadding, )),
)), ),
), ],
], ),
);
}),
), ),
Obx(() { Obx(() {
if (controller.uploadController.listUploadAttachments.isNotEmpty) { if (controller.uploadController.listUploadAttachments.isNotEmpty) {
@@ -217,8 +215,8 @@ class ComposerView extends GetWidget<ComposerController> {
richTextWebController: controller.richTextWebController, richTextWebController: controller.richTextWebController,
padding: ComposerStyle.richToolbarPadding, padding: ComposerStyle.richToolbarPadding,
decoration: const BoxDecoration( decoration: const BoxDecoration(
color: ComposerStyle.richToolbarColor, color: ComposerStyle.richToolbarColor,
boxShadow: ComposerStyle.richToolbarShadow boxShadow: ComposerStyle.richToolbarShadow
), ),
); );
} else { } else {
@@ -351,93 +349,91 @@ class ComposerView extends GetWidget<ComposerController> {
), ),
color: ComposerStyle.backgroundEditorColor color: ComposerStyle.backgroundEditorColor
), ),
child: LayoutBuilder(builder: (context, constraints) { child: Stack(
return Stack( children: [
children: [ Column(
Column( children: [
children: [ Expanded(
Expanded( child: Padding(
child: Padding( padding: ComposerStyle.desktopEditorPadding,
padding: ComposerStyle.desktopEditorPadding, child: Obx(() {
child: Obx(() { return Stack(
return Stack( children: [
children: [ WebEditorView(
WebEditorView( editorController: controller.richTextWebController.editorController,
editorController: controller.richTextWebController.editorController, arguments: controller.composerArguments.value,
arguments: controller.composerArguments.value, contentViewState: controller.emailContentsViewState.value,
contentViewState: controller.emailContentsViewState.value, currentWebContent: controller.textEditorWeb,
currentWebContent: controller.textEditorWeb, onInitial: controller.handleInitHtmlEditorWeb,
onInitial: controller.handleInitHtmlEditorWeb, onChangeContent: controller.onChangeTextEditorWeb,
onChangeContent: controller.onChangeTextEditorWeb, onFocus: controller.handleOnFocusHtmlEditorWeb,
onFocus: controller.handleOnFocusHtmlEditorWeb, onUnFocus: controller.handleOnUnFocusHtmlEditorWeb,
onUnFocus: controller.handleOnUnFocusHtmlEditorWeb, onMouseDown: controller.handleOnMouseDownHtmlEditorWeb,
onMouseDown: controller.handleOnMouseDownHtmlEditorWeb, onEditorSettings: controller.richTextWebController.onEditorSettingsChange,
onEditorSettings: controller.richTextWebController.onEditorSettingsChange, onImageUploadSuccessAction: (fileUpload) => controller.handleImageUploadSuccess(context, fileUpload),
onImageUploadSuccessAction: (fileUpload) => controller.handleImageUploadSuccess(context, fileUpload), onImageUploadFailureAction: (fileUpload, base64Str, uploadError) {
onImageUploadFailureAction: (fileUpload, base64Str, uploadError) { return controller.handleImageUploadFailure(
return controller.handleImageUploadFailure( context: context,
context: context, uploadError: uploadError,
uploadError: uploadError, fileUpload: fileUpload,
fileUpload: fileUpload, base64Str: base64Str,
base64Str: base64Str, );
); },
}, onEditorTextSizeChanged: controller.richTextWebController.onEditorTextSizeChanged,
onEditorTextSizeChanged: controller.richTextWebController.onEditorTextSizeChanged, width: constraints.maxWidth,
width: constraints.maxWidth, height: constraints.maxHeight,
height: constraints.maxHeight, ),
), if (controller.mailboxDashBoardController.isDraggableAppActive)
if (controller.mailboxDashBoardController.isDraggableAppActive) PointerInterceptor(
PointerInterceptor( child: DropZoneWidget(
child: DropZoneWidget( width: constraints.maxWidth,
width: constraints.maxWidth, height: constraints.maxHeight,
height: constraints.maxHeight, addAttachmentFromDropZone: controller.addAttachmentFromDropZone,
addAttachmentFromDropZone: controller.addAttachmentFromDropZone,
)
) )
], )
); ],
}), );
), }),
), ),
Obx(() { ),
if (controller.uploadController.listUploadAttachments.isNotEmpty) { Obx(() {
return AttachmentComposerWidget( if (controller.uploadController.listUploadAttachments.isNotEmpty) {
listFileUploaded: controller.uploadController.listUploadAttachments, return AttachmentComposerWidget(
isCollapsed: controller.isAttachmentCollapsed, listFileUploaded: controller.uploadController.listUploadAttachments,
onDeleteAttachmentAction: (fileState) => controller.deleteAttachmentUploaded(fileState.uploadTaskId), isCollapsed: controller.isAttachmentCollapsed,
onToggleExpandAttachmentAction: (isCollapsed) => controller.isAttachmentCollapsed = isCollapsed, onDeleteAttachmentAction: (fileState) => controller.deleteAttachmentUploaded(fileState.uploadTaskId),
); onToggleExpandAttachmentAction: (isCollapsed) => controller.isAttachmentCollapsed = isCollapsed,
} else { );
return const SizedBox.shrink(); } else {
} return const SizedBox.shrink();
}), }
Obx(() { }),
if (controller.richTextWebController.isFormattingOptionsEnabled) { Obx(() {
return ToolbarRichTextWebBuilder( if (controller.richTextWebController.isFormattingOptionsEnabled) {
richTextWebController: controller.richTextWebController, return ToolbarRichTextWebBuilder(
padding: ComposerStyle.richToolbarPadding, richTextWebController: controller.richTextWebController,
decoration: const BoxDecoration( padding: ComposerStyle.richToolbarPadding,
color: ComposerStyle.richToolbarColor, decoration: const BoxDecoration(
boxShadow: ComposerStyle.richToolbarShadow color: ComposerStyle.richToolbarColor,
), boxShadow: ComposerStyle.richToolbarShadow
); ),
} else { );
return const SizedBox.shrink(); } else {
} return const SizedBox.shrink();
}) }
], })
), ],
Align( ),
alignment: AlignmentDirectional.topCenter, Align(
child: Obx(() => InsertImageLoadingBarWidget( alignment: AlignmentDirectional.topCenter,
uploadInlineViewState: controller.uploadController.uploadInlineViewState.value, child: Obx(() => InsertImageLoadingBarWidget(
viewState: controller.viewState.value, uploadInlineViewState: controller.uploadController.uploadInlineViewState.value,
padding: ComposerStyle.insertImageLoadingBarPadding, viewState: controller.viewState.value,
)), padding: ComposerStyle.insertImageLoadingBarPadding,
), )),
], ),
); ],
}), ),
), ),
), ),
Obx(() => BottomBarComposerWidget( Obx(() => BottomBarComposerWidget(
@@ -584,79 +580,77 @@ class ComposerView extends GetWidget<ComposerController> {
), ),
color: ComposerStyle.backgroundEditorColor color: ComposerStyle.backgroundEditorColor
), ),
child: LayoutBuilder(builder: (context, constraints) { child: Stack(
return Stack( children: [
children: [ Column(
Column( children: [
children: [ Expanded(
Expanded( child: Padding(
child: Padding( padding: ComposerStyle.tabletEditorPadding,
padding: ComposerStyle.tabletEditorPadding, child: Obx(() => WebEditorView(
child: Obx(() => WebEditorView( editorController: controller.richTextWebController.editorController,
editorController: controller.richTextWebController.editorController, arguments: controller.composerArguments.value,
arguments: controller.composerArguments.value, contentViewState: controller.emailContentsViewState.value,
contentViewState: controller.emailContentsViewState.value, currentWebContent: controller.textEditorWeb,
currentWebContent: controller.textEditorWeb, onInitial: controller.handleInitHtmlEditorWeb,
onInitial: controller.handleInitHtmlEditorWeb, onChangeContent: controller.onChangeTextEditorWeb,
onChangeContent: controller.onChangeTextEditorWeb, onFocus: controller.handleOnFocusHtmlEditorWeb,
onFocus: controller.handleOnFocusHtmlEditorWeb, onUnFocus: controller.handleOnUnFocusHtmlEditorWeb,
onUnFocus: controller.handleOnUnFocusHtmlEditorWeb, onMouseDown: controller.handleOnMouseDownHtmlEditorWeb,
onMouseDown: controller.handleOnMouseDownHtmlEditorWeb, onEditorSettings: controller.richTextWebController.onEditorSettingsChange,
onEditorSettings: controller.richTextWebController.onEditorSettingsChange, onImageUploadSuccessAction: (fileUpload) => controller.handleImageUploadSuccess(context, fileUpload),
onImageUploadSuccessAction: (fileUpload) => controller.handleImageUploadSuccess(context, fileUpload), onImageUploadFailureAction: (fileUpload, base64Str, uploadError) {
onImageUploadFailureAction: (fileUpload, base64Str, uploadError) { return controller.handleImageUploadFailure(
return controller.handleImageUploadFailure( context: context,
context: context, uploadError: uploadError,
uploadError: uploadError, fileUpload: fileUpload,
fileUpload: fileUpload, base64Str: base64Str,
base64Str: base64Str, );
); },
}, onEditorTextSizeChanged: controller.richTextWebController.onEditorTextSizeChanged,
onEditorTextSizeChanged: controller.richTextWebController.onEditorTextSizeChanged, width: constraints.maxWidth,
width: constraints.maxWidth, height: constraints.maxHeight,
height: constraints.maxHeight, )),
)),
),
), ),
Obx(() { ),
if (controller.uploadController.listUploadAttachments.isNotEmpty) { Obx(() {
return AttachmentComposerWidget( if (controller.uploadController.listUploadAttachments.isNotEmpty) {
listFileUploaded: controller.uploadController.listUploadAttachments, return AttachmentComposerWidget(
isCollapsed: controller.isAttachmentCollapsed, listFileUploaded: controller.uploadController.listUploadAttachments,
onDeleteAttachmentAction: (fileState) => controller.deleteAttachmentUploaded(fileState.uploadTaskId), isCollapsed: controller.isAttachmentCollapsed,
onToggleExpandAttachmentAction: (isCollapsed) => controller.isAttachmentCollapsed = isCollapsed, onDeleteAttachmentAction: (fileState) => controller.deleteAttachmentUploaded(fileState.uploadTaskId),
); onToggleExpandAttachmentAction: (isCollapsed) => controller.isAttachmentCollapsed = isCollapsed,
} else { );
return const SizedBox.shrink(); } else {
} return const SizedBox.shrink();
}), }
Obx(() { }),
if (controller.richTextWebController.isFormattingOptionsEnabled) { Obx(() {
return ToolbarRichTextWebBuilder( if (controller.richTextWebController.isFormattingOptionsEnabled) {
richTextWebController: controller.richTextWebController, return ToolbarRichTextWebBuilder(
padding: ComposerStyle.richToolbarPadding, richTextWebController: controller.richTextWebController,
decoration: const BoxDecoration( padding: ComposerStyle.richToolbarPadding,
decoration: const BoxDecoration(
color: ComposerStyle.richToolbarColor, color: ComposerStyle.richToolbarColor,
boxShadow: ComposerStyle.richToolbarShadow boxShadow: ComposerStyle.richToolbarShadow
), ),
); );
} else { } else {
return const SizedBox.shrink(); return const SizedBox.shrink();
} }
}) })
], ],
), ),
Align( Align(
alignment: AlignmentDirectional.topCenter, alignment: AlignmentDirectional.topCenter,
child: Obx(() => InsertImageLoadingBarWidget( child: Obx(() => InsertImageLoadingBarWidget(
uploadInlineViewState: controller.uploadController.uploadInlineViewState.value, uploadInlineViewState: controller.uploadController.uploadInlineViewState.value,
viewState: controller.viewState.value, viewState: controller.viewState.value,
padding: ComposerStyle.insertImageLoadingBarPadding, padding: ComposerStyle.insertImageLoadingBarPadding,
)), )),
), ),
], ],
); ),
}),
), ),
), ),
Obx(() => BottomBarComposerWidget( Obx(() => BottomBarComposerWidget(