diff --git a/app/assets/javascripts/ide/stores/modules/file_templates/actions.js b/app/assets/javascripts/ide/stores/modules/file_templates/actions.js
index dd53213ed18a4ff734635780faa6fef60e77782c..cc9f6c8638c6c8c91efb0e2d3b54cf49896f119b 100644
--- a/app/assets/javascripts/ide/stores/modules/file_templates/actions.js
+++ b/app/assets/javascripts/ide/stores/modules/file_templates/actions.js
@@ -1,5 +1,6 @@
 import Api from '~/api';
 import { __ } from '~/locale';
+import { normalizeHeaders } from '~/lib/utils/common_utils';
 import * as types from './mutation_types';
 import eventHub from '../../../eventhub';
 
@@ -22,13 +23,21 @@ export const receiveTemplateTypesError = ({ commit, dispatch }) => {
 export const receiveTemplateTypesSuccess = ({ commit }, templates) =>
   commit(types.RECEIVE_TEMPLATE_TYPES_SUCCESS, templates);
 
-export const fetchTemplateTypes = ({ dispatch, state }) => {
+export const fetchTemplateTypes = ({ dispatch, state }, page = 1) => {
   if (!Object.keys(state.selectedTemplateType).length) return Promise.reject();
 
   dispatch('requestTemplateTypes');
 
-  return Api.templates(state.selectedTemplateType.key)
-    .then(({ data }) => dispatch('receiveTemplateTypesSuccess', data))
+  return Api.templates(state.selectedTemplateType.key, { page })
+    .then(({ data, headers }) => {
+      const nextPage = parseInt(normalizeHeaders(headers)['X-NEXT-PAGE'], 10);
+
+      dispatch('receiveTemplateTypesSuccess', data);
+
+      if (nextPage) {
+        dispatch('fetchTemplateTypes', nextPage);
+      }
+    })
     .catch(() => dispatch('receiveTemplateTypesError'));
 };
 
diff --git a/app/assets/javascripts/ide/stores/modules/file_templates/mutations.js b/app/assets/javascripts/ide/stores/modules/file_templates/mutations.js
index 674782a28ca45a2712d8dea3eddd624cfe8e8ecd..d519c0337692f0e52b79710e885de9c30684e455 100644
--- a/app/assets/javascripts/ide/stores/modules/file_templates/mutations.js
+++ b/app/assets/javascripts/ide/stores/modules/file_templates/mutations.js
@@ -9,7 +9,7 @@ export default {
   },
   [types.RECEIVE_TEMPLATE_TYPES_SUCCESS](state, templates) {
     state.isLoading = false;
-    state.templates = templates;
+    state.templates = state.templates.concat(templates);
   },
   [types.SET_SELECTED_TEMPLATE_TYPE](state, type) {
     state.selectedTemplateType = type;
diff --git a/changelogs/unreleased/ide-fetch-templates-pages.yml b/changelogs/unreleased/ide-fetch-templates-pages.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d4703e530f269d1d790b00c22fecdcab6239a50e
--- /dev/null
+++ b/changelogs/unreleased/ide-fetch-templates-pages.yml
@@ -0,0 +1,5 @@
+---
+title: Fixed file templates not fully being fetched in Web IDE
+merge_request:
+author:
+type: fixed
diff --git a/spec/javascripts/ide/stores/modules/file_templates/actions_spec.js b/spec/javascripts/ide/stores/modules/file_templates/actions_spec.js
index c29dd9f0d06958e025cfaf721259d0e45b100298..734233100abc8f4acf21143f02cef11fb5d4eb97 100644
--- a/spec/javascripts/ide/stores/modules/file_templates/actions_spec.js
+++ b/spec/javascripts/ide/stores/modules/file_templates/actions_spec.js
@@ -69,11 +69,17 @@ describe('IDE file templates actions', () => {
 
   describe('fetchTemplateTypes', () => {
     describe('success', () => {
+      let nextPage;
+
       beforeEach(() => {
-        mock.onGet(/api\/(.*)\/templates\/licenses/).replyOnce(200, [
-          {
-            name: 'MIT',
-          },
+        mock.onGet(/api\/(.*)\/templates\/licenses/).replyOnce(() => [
+          200,
+          [
+            {
+              name: 'MIT',
+            },
+          ],
+          { 'X-NEXT-PAGE': nextPage },
         ]);
       });
 
@@ -116,6 +122,38 @@ describe('IDE file templates actions', () => {
           done,
         );
       });
+
+      it('dispatches actions for next page', done => {
+        nextPage = '2';
+        state.selectedTemplateType = {
+          key: 'licenses',
+        };
+
+        testAction(
+          actions.fetchTemplateTypes,
+          null,
+          state,
+          [],
+          [
+            {
+              type: 'requestTemplateTypes',
+            },
+            {
+              type: 'receiveTemplateTypesSuccess',
+              payload: [
+                {
+                  name: 'MIT',
+                },
+              ],
+            },
+            {
+              type: 'fetchTemplateTypes',
+              payload: 2,
+            },
+          ],
+          done,
+        );
+      });
     });
 
     describe('error', () => {