diff --git a/app/assets/javascripts/diffs/store/actions.js b/app/assets/javascripts/diffs/store/actions.js
index 3c7a3628a02bfe4fec95963ed4d19787c620166d..1c0e20183e2334cb9a1b99421da2e4eeec3df171 100644
--- a/app/assets/javascripts/diffs/store/actions.js
+++ b/app/assets/javascripts/diffs/store/actions.js
@@ -15,6 +15,7 @@ import notesEventHub from '~/notes/event_hub';
 import { generateTreeList } from '~/diffs/utils/tree_worker_utils';
 import { sortTree } from '~/ide/stores/utils';
 import { containsSensitiveToken, confirmSensitiveAction } from '~/lib/utils/secret_detection';
+import { isCollapsed } from '~/diffs/utils/diff_file';
 import {
   PARALLEL_DIFF_VIEW_TYPE,
   INLINE_DIFF_VIEW_TYPE,
@@ -73,6 +74,7 @@ import {
   prepareLineForRenamedFile,
   parseUrlHashAsFileHash,
   isUrlHashNoteLink,
+  findDiffFile,
 } from './utils';
 
 export const setBaseConfig = ({ commit }, options) => {
@@ -1041,8 +1043,15 @@ export function reviewFile({ commit, state }, { file, reviewed = true }) {
 
 export const disableVirtualScroller = ({ commit }) => commit(types.DISABLE_VIRTUAL_SCROLLING);
 
-export const toggleFileCommentForm = ({ commit }, filePath) =>
-  commit(types.TOGGLE_FILE_COMMENT_FORM, filePath);
+export const toggleFileCommentForm = ({ state, commit }, filePath) => {
+  const file = findDiffFile(state.diffFiles, filePath, 'file_path');
+  if (isCollapsed(file)) {
+    commit(types.SET_FILE_COMMENT_FORM, { filePath, expanded: true });
+  } else {
+    commit(types.TOGGLE_FILE_COMMENT_FORM, filePath);
+  }
+  commit(types.SET_FILE_COLLAPSED, { filePath, collapsed: false });
+};
 
 export const addDraftToFile = ({ commit }, { filePath, draft }) =>
   commit(types.ADD_DRAFT_TO_FILE, { filePath, draft });
diff --git a/app/assets/javascripts/diffs/store/mutation_types.js b/app/assets/javascripts/diffs/store/mutation_types.js
index c2177bacbcc717a974445ff3a4dfa977552c0059..b155804c70cf6e9dfdb13d1aa7fa96e906051139 100644
--- a/app/assets/javascripts/diffs/store/mutation_types.js
+++ b/app/assets/javascripts/diffs/store/mutation_types.js
@@ -53,4 +53,5 @@ export const TOGGLE_LINE_DISCUSSIONS = 'TOGGLE_LINE_DISCUSSIONS';
 export const DISABLE_VIRTUAL_SCROLLING = 'DISABLE_VIRTUAL_SCROLLING';
 
 export const TOGGLE_FILE_COMMENT_FORM = 'TOGGLE_FILE_COMMENT_FORM';
+export const SET_FILE_COMMENT_FORM = 'SET_FILE_COMMENT_FORM';
 export const ADD_DRAFT_TO_FILE = 'ADD_DRAFT_TO_FILE';
diff --git a/app/assets/javascripts/diffs/store/mutations.js b/app/assets/javascripts/diffs/store/mutations.js
index 08c195469e3d174771a6ed6bcb65e7f1c645cbff..bc5ed3c40dfe23a689d61f0e6d1f0c5602e31231 100644
--- a/app/assets/javascripts/diffs/store/mutations.js
+++ b/app/assets/javascripts/diffs/store/mutations.js
@@ -394,6 +394,11 @@ export default {
 
     file.hasCommentForm = !file.hasCommentForm;
   },
+  [types.SET_FILE_COMMENT_FORM](state, { filePath, expanded }) {
+    const file = findDiffFile(state.diffFiles, filePath, 'file_path');
+
+    file.hasCommentForm = expanded;
+  },
   [types.ADD_DRAFT_TO_FILE](state, { filePath, draft }) {
     const file = findDiffFile(state.diffFiles, filePath, 'file_path');
 
diff --git a/spec/frontend/diffs/store/actions_spec.js b/spec/frontend/diffs/store/actions_spec.js
index 88c03cbaece87431ec2eef9acf2b854c4694ccac..be3b30e8e7a9bc571fd44891e9e74ac4e5e885f3 100644
--- a/spec/frontend/diffs/store/actions_spec.js
+++ b/spec/frontend/diffs/store/actions_spec.js
@@ -2062,11 +2062,48 @@ describe('DiffsStoreActions', () => {
 
   describe('toggleFileCommentForm', () => {
     it('commits TOGGLE_FILE_COMMENT_FORM', () => {
+      const file = getDiffFileMock();
       return testAction(
         diffActions.toggleFileCommentForm,
-        'path',
-        {},
-        [{ type: types.TOGGLE_FILE_COMMENT_FORM, payload: 'path' }],
+        file.file_path,
+        {
+          diffFiles: [file],
+        },
+        [
+          { type: types.TOGGLE_FILE_COMMENT_FORM, payload: file.file_path },
+          {
+            type: types.SET_FILE_COLLAPSED,
+            payload: { filePath: file.file_path, collapsed: false },
+          },
+        ],
+        [],
+      );
+    });
+
+    it('always opens if file is collapsed', () => {
+      const file = {
+        ...getDiffFileMock(),
+        viewer: {
+          ...getDiffFileMock().viewer,
+          manuallyCollapsed: true,
+        },
+      };
+      return testAction(
+        diffActions.toggleFileCommentForm,
+        file.file_path,
+        {
+          diffFiles: [file],
+        },
+        [
+          {
+            type: types.SET_FILE_COMMENT_FORM,
+            payload: { filePath: file.file_path, expanded: true },
+          },
+          {
+            type: types.SET_FILE_COLLAPSED,
+            payload: { filePath: file.file_path, collapsed: false },
+          },
+        ],
         [],
       );
     });
diff --git a/spec/frontend/diffs/store/mutations_spec.js b/spec/frontend/diffs/store/mutations_spec.js
index fdcf7c3eeab8aec8edbd7886f9b712e1ba2ae075..a5be41aa69f49f3c7eaaf9d3d6d13d5213b60475 100644
--- a/spec/frontend/diffs/store/mutations_spec.js
+++ b/spec/frontend/diffs/store/mutations_spec.js
@@ -1045,6 +1045,17 @@ describe('DiffsStoreMutations', () => {
     });
   });
 
+  describe('SET_FILE_COMMENT_FORM', () => {
+    it('toggles diff files hasCommentForm', () => {
+      const state = { diffFiles: [{ file_path: 'path', hasCommentForm: false }] };
+      const expanded = true;
+
+      mutations[types.SET_FILE_COMMENT_FORM](state, { filePath: 'path', expanded });
+
+      expect(state.diffFiles[0].hasCommentForm).toEqual(expanded);
+    });
+  });
+
   describe('ADD_DRAFT_TO_FILE', () => {
     it('adds draft to diff file', () => {
       const state = { diffFiles: [{ file_path: 'path', drafts: [] }] };