From 4225b9bac18def7b79184ebcb5ff698a56616f03 Mon Sep 17 00:00:00 2001 From: ayush-chauhan233 Date: Tue, 21 Jan 2025 21:25:26 +0530 Subject: [PATCH] [MM-61619]: Added aria-live property for message sent status (#29720) * [MA-22]: Added aria-live property for message sent status * Review Fixes: Updated the logic to programmatically change status element's content. * [MA-22]: Rebased with master --- .../advanced_text_editor.tsx | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/webapp/channels/src/components/advanced_text_editor/advanced_text_editor.tsx b/webapp/channels/src/components/advanced_text_editor/advanced_text_editor.tsx index 4e153c2d90..c3a6dc9706 100644 --- a/webapp/channels/src/components/advanced_text_editor/advanced_text_editor.tsx +++ b/webapp/channels/src/components/advanced_text_editor/advanced_text_editor.tsx @@ -20,6 +20,7 @@ import {haveIChannelPermission} from 'mattermost-redux/selectors/entities/roles' import {getCurrentUserId, isCurrentUserGuestUser, getStatusForUserId, makeGetDisplayName} from 'mattermost-redux/selectors/entities/users'; import * as GlobalActions from 'actions/global_actions'; +import type {CreatePostOptions} from 'actions/post_actions'; import {actionOnGlobalItemsWithPrefix} from 'actions/storage'; import type {SubmitPostReturnType} from 'actions/views/create_comment'; import {removeDraft, updateDraft} from 'actions/views/drafts'; @@ -197,6 +198,7 @@ const AdvancedTextEditor = ({ const draftRef = useRef(draftFromStore); const storedDrafts = useRef>({}); const lastBlurAt = useRef(0); + const messageStatusRef = useRef(null); const [draft, setDraft] = useState(draftFromStore); const [caretPosition, setCaretPosition] = useState(draft.message.length); @@ -338,6 +340,19 @@ const AdvancedTextEditor = ({ isInEditMode, ); + const handleSubmitWithErrorHandling = useCallback((submittingDraft?: PostDraft, schedulingInfo?: SchedulingInfo, options?: CreatePostOptions) => { + handleSubmit(submittingDraft, schedulingInfo, options); + if (!errorClass) { + const messageStatusElement = messageStatusRef.current; + const messageStatusInnerText = messageStatusElement?.textContent; + if (messageStatusInnerText === 'Message Sent') { + messageStatusElement!.textContent = 'Message Sent  '; + } else { + messageStatusElement!.textContent = 'Message Sent'; + } + } + }, [errorClass, handleSubmit]); + const handleCancel = useCallback(() => { handleDraftChange({ message: '', @@ -392,8 +407,8 @@ const AdvancedTextEditor = ({ handleFileChangesOnSave(draft); } - handleSubmit(); - }, [dispatch, draft, handleFileChangesOnSave, handleSubmit, isInEditMode, isRHS]); + handleSubmitWithErrorHandling(); + }, [dispatch, draft, handleFileChangesOnSave, handleSubmitWithErrorHandling, isInEditMode, isRHS]); const [handleKeyDown, postMsgKeyPress] = useKeyHandler( draft, @@ -418,8 +433,8 @@ const AdvancedTextEditor = ({ const handleSubmitWithEvent = useCallback((e: React.FormEvent) => { e.preventDefault(); - handleSubmit(); - }, [handleSubmit]); + handleSubmitWithErrorHandling(); + }, [handleSubmitWithErrorHandling]); const handlePostError = useCallback((err: React.ReactNode) => { setPostError(err); @@ -573,7 +588,9 @@ const AdvancedTextEditor = ({ draftRef.current = draft; }, [draft]); - const handleSubmitPostAndScheduledMessage = useCallback((schedulingInfo?: SchedulingInfo) => handleSubmit(undefined, schedulingInfo), [handleSubmit]); + const handleSubmitPostAndScheduledMessage = useCallback((schedulingInfo?: SchedulingInfo) => { + handleSubmitWithErrorHandling(undefined, schedulingInfo); + }, [handleSubmitWithErrorHandling]); // Set the draft from store when changing post or channels, and store the previous one useEffect(() => { @@ -865,6 +882,11 @@ const AdvancedTextEditor = ({ onCancel={handleCancel} /> )} +
); };