summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Hughes <me@iamphill.com>2018-10-02 10:00:58 +0000
committerPhil Hughes <me@iamphill.com>2018-10-02 10:00:58 +0000
commitaf0178aa3a59e587aeaea2c8e87e0f5529ddb589 (patch)
tree07cf7cb229bfc78a3f0522bf127a25f765bae7ee
parent7287fd09e264ad5b8efceab4b1919c92769856b9 (diff)
parentd366ea14380b828daadce14023f0d623b87fe0b3 (diff)
downloadgitlab-ce-af0178aa3a59e587aeaea2c8e87e0f5529ddb589.tar.gz
Merge branch '#50928-stale-list-of-issues-on-board-after-click-back' into 'master'
circumvent browser cache on browser back navigation Closes #50928 See merge request gitlab-org/gitlab-ce!22006
-rw-r--r--app/assets/javascripts/boards/index.js11
-rw-r--r--app/assets/javascripts/lib/utils/common_utils.js11
-rw-r--r--changelogs/unreleased/-50928-stale-list-of-issues-on-board-after-click-back.yml5
-rw-r--r--spec/features/boards/reload_boards_on_browser_back_spec.rb48
4 files changed, 75 insertions, 0 deletions
diff --git a/app/assets/javascripts/boards/index.js b/app/assets/javascripts/boards/index.js
index 662363a6f26..caa6ce84335 100644
--- a/app/assets/javascripts/boards/index.js
+++ b/app/assets/javascripts/boards/index.js
@@ -25,6 +25,7 @@ import './components/board_sidebar';
import './components/new_list_dropdown';
import BoardAddIssuesModal from './components/modal/index.vue';
import '~/vue_shared/vue_resource_interceptor';
+import { NavigationType } from '~/lib/utils/common_utils';
export default () => {
const $boardApp = document.getElementById('board-app');
@@ -32,6 +33,16 @@ export default () => {
window.gl = window.gl || {};
+ // check for browser back and trigger a hard reload to circumvent browser caching.
+ window.addEventListener('pageshow', (event) => {
+ const isNavTypeBackForward = window.performance &&
+ window.performance.navigation.type === NavigationType.TYPE_BACK_FORWARD;
+
+ if (event.persisted || isNavTypeBackForward) {
+ window.location.reload();
+ }
+ });
+
if (gl.IssueBoardsApp) {
gl.IssueBoardsApp.$destroy(true);
}
diff --git a/app/assets/javascripts/lib/utils/common_utils.js b/app/assets/javascripts/lib/utils/common_utils.js
index 30925940807..31faa11ea72 100644
--- a/app/assets/javascripts/lib/utils/common_utils.js
+++ b/app/assets/javascripts/lib/utils/common_utils.js
@@ -616,6 +616,17 @@ export const roundOffFloat = (number, precision = 0) => {
return Math.round(number * multiplier) / multiplier;
};
+/**
+ * Represents navigation type constants of the Performance Navigation API.
+ * Detailed explanation see https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigation.
+ */
+export const NavigationType = {
+ TYPE_NAVIGATE: 0,
+ TYPE_RELOAD: 1,
+ TYPE_BACK_FORWARD: 2,
+ TYPE_RESERVED: 255,
+};
+
window.gl = window.gl || {};
window.gl.utils = {
...(window.gl.utils || {}),
diff --git a/changelogs/unreleased/-50928-stale-list-of-issues-on-board-after-click-back.yml b/changelogs/unreleased/-50928-stale-list-of-issues-on-board-after-click-back.yml
new file mode 100644
index 00000000000..e71b09ec2e3
--- /dev/null
+++ b/changelogs/unreleased/-50928-stale-list-of-issues-on-board-after-click-back.yml
@@ -0,0 +1,5 @@
+---
+title: Fix stale issue boards after browser back
+merge_request: 22006
+author: Johann Hubert Sonntagbauer
+type: fixed
diff --git a/spec/features/boards/reload_boards_on_browser_back_spec.rb b/spec/features/boards/reload_boards_on_browser_back_spec.rb
new file mode 100644
index 00000000000..4b4bd705a77
--- /dev/null
+++ b/spec/features/boards/reload_boards_on_browser_back_spec.rb
@@ -0,0 +1,48 @@
+require 'rails_helper'
+
+describe 'Ensure Boards do not show stale data on browser back', :js do
+ let(:project) {create(:project, :public)}
+ let(:board) {create(:board, project: project)}
+ let(:user) {create(:user)}
+
+ context 'authorized user' do
+ before do
+ project.add_maintainer(user)
+
+ sign_in(user)
+
+ visit project_board_path(project, board)
+ wait_for_requests
+
+ page.within(first('.board .issue-count-badge-count')) do
+ expect(page).to have_content('0')
+ end
+ end
+
+ it 'created issue is listed on board' do
+ visit new_project_issue_path(project)
+ wait_for_requests
+
+ fill_in 'issue_title', with: 'issue should be shown'
+
+ click_button 'Submit issue'
+
+ page.go_back
+ wait_for_requests
+
+ page.go_back
+ wait_for_requests
+
+ page.within(first('.board .issue-count-badge-count')) do
+ expect(page).to have_content('1')
+ end
+
+ page.within(first('.board-card')) do
+ issue = project.issues.find_by_title('issue should be shown')
+
+ expect(page).to have_content(issue.to_reference)
+ expect(page).to have_link(issue.title, href: issue_path(issue))
+ end
+ end
+ end
+end