diff --git a/services/web/frontend/js/features/source-editor/components/review-panel/entries/add-comment-entry.tsx b/services/web/frontend/js/features/source-editor/components/review-panel/entries/add-comment-entry.tsx
index acebac06a2..a8458c3963 100644
--- a/services/web/frontend/js/features/source-editor/components/review-panel/entries/add-comment-entry.tsx
+++ b/services/web/frontend/js/features/source-editor/components/review-panel/entries/add-comment-entry.tsx
@@ -24,16 +24,23 @@ function AddCommentEntry({ entryId }: AddCommentEntryProps) {
useReviewPanelUpdaterFnsContext()
const [content, setContent] = useState('')
+ const [isSubmitting, setIsSubmiting] = useState(false)
const handleStartNewComment = () => {
setIsAddingComment(true)
handleLayoutChange({ async: true })
}
- const handleSubmitNewComment = () => {
- submitNewComment(content)
- setIsAddingComment(false)
- setContent('')
+ const handleSubmitNewComment = async () => {
+ setIsSubmiting(true)
+ try {
+ await submitNewComment(content)
+ setIsSubmiting(false)
+ setIsAddingComment(false)
+ setContent('')
+ } catch (err) {
+ setIsSubmiting(false)
+ }
handleLayoutChange({ async: true })
}
@@ -79,15 +86,21 @@ function AddCommentEntry({ entryId }: AddCommentEntryProps) {
{isAddingComment ? (
<>
-
setContent(e.target.value)}
- onKeyPress={handleCommentKeyPress}
- onResize={handleLayoutChange}
- placeholder={t('add_your_comment_here')}
- value={content}
- autoFocus // eslint-disable-line jsx-a11y/no-autofocus
- />
+ {isSubmitting ? (
+
+
+
+ ) : (
+ setContent(e.target.value)}
+ onKeyPress={handleCommentKeyPress}
+ onResize={handleLayoutChange}
+ placeholder={t('add_your_comment_here')}
+ value={content}
+ autoFocus // eslint-disable-line jsx-a11y/no-autofocus
+ />
+ )}
{t('comment')}
diff --git a/services/web/frontend/js/features/source-editor/context/review-panel/types/review-panel-state.ts b/services/web/frontend/js/features/source-editor/context/review-panel/types/review-panel-state.ts
index 37917f3572..a5c0ce598e 100644
--- a/services/web/frontend/js/features/source-editor/context/review-panel/types/review-panel-state.ts
+++ b/services/web/frontend/js/features/source-editor/context/review-panel/types/review-panel-state.ts
@@ -73,7 +73,7 @@ export interface ReviewPanelState {
unresolveComment: (threadId: ThreadId) => void
deleteThread: (_entryId: unknown, docId: DocId, threadId: ThreadId) => void
refreshResolvedCommentsDropdown: () => Promise
- submitNewComment: (content: string) => void
+ submitNewComment: (content: string) => Promise
setEntryHover: React.Dispatch>>
setIsAddingComment: React.Dispatch<
React.SetStateAction>
diff --git a/services/web/frontend/js/ide/review-panel/controllers/ReviewPanelController.js b/services/web/frontend/js/ide/review-panel/controllers/ReviewPanelController.js
index 27173bc734..bcc794344a 100644
--- a/services/web/frontend/js/ide/review-panel/controllers/ReviewPanelController.js
+++ b/services/web/frontend/js/ide/review-panel/controllers/ReviewPanelController.js
@@ -818,27 +818,42 @@ export default App.controller(
const thread_id = RangesTracker.generateId()
const thread = getThread(thread_id)
thread.submitting = true
- $scope.$broadcast('comment:add', thread_id, offset, length)
- dispatchReviewPanelEvent('comment:add', {
- threadId: thread_id,
- offset,
- length,
- })
- $http
+
+ const emitCommentAdd = () => {
+ $scope.$broadcast('comment:add', thread_id, offset, length)
+ dispatchReviewPanelEvent('comment:add', {
+ threadId: thread_id,
+ offset,
+ length,
+ })
+
+ // TODO: unused?
+ $scope.$broadcast('editor:clearSelection')
+ $timeout(() => ide.$scope.$broadcast('review-panel:layout'))
+ eventTracking.sendMB('rp-new-comment', { size: content.length })
+ }
+
+ if (ide.$scope.reviewPanel.isReact === false) {
+ emitCommentAdd()
+ }
+
+ return $http
.post(`/project/${$scope.project_id}/thread/${thread_id}/messages`, {
content,
_csrf: window.csrfToken,
})
- .catch(() =>
+ .then(() => {
+ if (ide.$scope.reviewPanel.isReact) {
+ emitCommentAdd()
+ }
+ })
+ .catch(() => {
ide.showGenericMessageModal(
'Error submitting comment',
'Sorry, there was a problem submitting your comment'
)
- )
- // TODO: unused?
- $scope.$broadcast('editor:clearSelection')
- $timeout(() => ide.$scope.$broadcast('review-panel:layout'))
- eventTracking.sendMB('rp-new-comment', { size: content.length })
+ throw Error('Error submitting comment')
+ })
}
$scope.cancelNewComment = entry =>