From 0eb323b2f12ce8d916219122e787e7077c90fe35 Mon Sep 17 00:00:00 2001 From: Ivan Kljun Date: Tue, 23 Jan 2024 11:52:35 +0100 Subject: [PATCH 1/3] Add wrong-version modal for SciNote Edit [SCI-10010] --- .../javascripts/sitewide/constants.js.erb | 2 + .../content/attachments/context_menu.vue | 17 ++++-- .../attachments/mixins/open_locally.js | 16 +++++- .../content/attachments/open_locally_menu.vue | 54 +++++++++++-------- .../shared/content/attachments/thumbnail.vue | 9 +++- .../content/modal/no_predefined_app_modal.vue | 6 +-- .../content/modal/update_version_modal.vue | 54 +++++++++++++++++++ .../vue/shared/scinote_edit_download.vue | 30 +++++++---- .../shared/file_preview/_content.html.erb | 2 +- config/initializers/constants.rb | 4 ++ config/locales/en.yml | 7 ++- 11 files changed, 155 insertions(+), 46 deletions(-) create mode 100644 app/javascript/vue/shared/content/modal/update_version_modal.vue diff --git a/app/assets/javascripts/sitewide/constants.js.erb b/app/assets/javascripts/sitewide/constants.js.erb index 8e37b3abc..2ba7d7fc4 100644 --- a/app/assets/javascripts/sitewide/constants.js.erb +++ b/app/assets/javascripts/sitewide/constants.js.erb @@ -15,4 +15,6 @@ const GLOBAL_CONSTANTS = { FAST_STATUS_POLLING_INTERVAL: <%= Constants::FAST_STATUS_POLLING_INTERVAL %>, SLOW_STATUS_POLLING_INTERVAL: <%= Constants::SLOW_STATUS_POLLING_INTERVAL %>, ASSET_SYNC_URL: '<%= Constants::ASSET_SYNC_URL %>', + MIN_SCINOTE_EDIT_VERSION: '<%= Constants::MIN_SCINOTE_EDIT_VERSION %>', + MAX_SCINOTE_EDIT_VERSION: '<%= Constants::MAX_SCINOTE_EDIT_VERSION %>', }; diff --git a/app/javascript/vue/shared/content/attachments/context_menu.vue b/app/javascript/vue/shared/content/attachments/context_menu.vue index 1dd6c0af0..d78379525 100644 --- a/app/javascript/vue/shared/content/attachments/context_menu.vue +++ b/app/javascript/vue/shared/content/attachments/context_menu.vue @@ -57,11 +57,15 @@ :fileName="attachment.attributes.file_name" @confirm="showNoPredefinedAppModal = false" /> + @@ -72,6 +76,7 @@ import deleteAttachmentModal from './delete_modal.vue'; import editLaunchingApplicationModal from './edit_launching_application_modal.vue'; import moveAssetModal from '../modal/move.vue'; import NoPredefinedAppModal from '../modal/no_predefined_app_modal.vue'; +import UpdateVersionModal from '../modal/update_version_modal.vue'; import MoveMixin from './mixins/move.js'; import OpenLocallyMixin from './mixins/open_locally.js'; import MenuDropdown from '../../menu_dropdown.vue'; @@ -83,6 +88,7 @@ export default { moveAssetModal, MenuDropdown, NoPredefinedAppModal, + UpdateVersionModal, editLaunchingApplicationModal }, mixins: [MoveMixin, OpenLocallyMixin], @@ -98,7 +104,8 @@ export default { viewModeOptions: ['inline', 'thumbnail', 'list'], deleteModal: false, editAppModal: false, - showNoPredefinedAppModal: false + showNoPredefinedAppModal: false, + showUpdateVersionModal: false }; }, computed: { diff --git a/app/javascript/vue/shared/content/attachments/mixins/open_locally.js b/app/javascript/vue/shared/content/attachments/mixins/open_locally.js index 6ce3d06d4..a104e7a7c 100644 --- a/app/javascript/vue/shared/content/attachments/mixins/open_locally.js +++ b/app/javascript/vue/shared/content/attachments/mixins/open_locally.js @@ -1,10 +1,12 @@ import axios from '../../../../../packs/custom_axios.js'; +import { satisfies } from 'compare-versions'; export default { data() { return { localAppName: null, - scinoteEditRunning: false + scinoteEditRunning: false, + scinoteEditVersion: null }; }, computed: { @@ -24,6 +26,7 @@ export default { if (statusResponse.status === 200) { this.scinoteEditRunning = true; + this.scinoteEditVersion = statusResponse.data.version; } else { return; } @@ -40,7 +43,10 @@ export default { } }, async openLocally() { - if (this.localAppName === null) { + if (this.isWrongVersion(this.scinoteEditVersion)) { + this.showUpdateVersionModal = true; + return; + } else if (this.localAppName === null) { this.showNoPredefinedAppModal = true; return; } @@ -52,6 +58,12 @@ export default { } catch (error) { console.error('Error in request:', error); } + }, + isWrongVersion(version) { + const min = GLOBAL_CONSTANTS.MIN_SCINOTE_EDIT_VERSION; + const max = GLOBAL_CONSTANTS.MAX_SCINOTE_EDIT_VERSION; + version = "3.0" + return !satisfies(version, `${min} - ${max}`); } } } diff --git a/app/javascript/vue/shared/content/attachments/open_locally_menu.vue b/app/javascript/vue/shared/content/attachments/open_locally_menu.vue index 43d1498aa..16fe92443 100644 --- a/app/javascript/vue/shared/content/attachments/open_locally_menu.vue +++ b/app/javascript/vue/shared/content/attachments/open_locally_menu.vue @@ -1,21 +1,27 @@ @@ -23,17 +29,21 @@ diff --git a/app/javascript/vue/shared/content/attachments/thumbnail.vue b/app/javascript/vue/shared/content/attachments/thumbnail.vue index 980b1ddab..e8fffed5f 100644 --- a/app/javascript/vue/shared/content/attachments/thumbnail.vue +++ b/app/javascript/vue/shared/content/attachments/thumbnail.vue @@ -145,6 +145,10 @@ :fileName="attachment.attributes.file_name" @confirm="showNoPredefinedAppModal = false" /> +