From 40f0d6892c25444ec47e79bed2d6cdf90f89cedb Mon Sep 17 00:00:00 2001 From: alexm Date: Fri, 10 Jun 2022 14:07:31 +0200 Subject: [PATCH 1/5] feat(server): return header with salix-version --- loopback/server/middleware.json | 3 ++- loopback/server/middleware/salix-version.js | 9 +++++++++ package.json | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 loopback/server/middleware/salix-version.js diff --git a/loopback/server/middleware.json b/loopback/server/middleware.json index 60bedcdb38..d65b8b34a6 100644 --- a/loopback/server/middleware.json +++ b/loopback/server/middleware.json @@ -31,7 +31,8 @@ "loopback#token": {} }, "auth:after": { - "./middleware/current-user": {} + "./middleware/current-user": {}, + "./middleware/salix-version": {} }, "parse": { "body-parser#json":{} diff --git a/loopback/server/middleware/salix-version.js b/loopback/server/middleware/salix-version.js new file mode 100644 index 0000000000..def8e99ef8 --- /dev/null +++ b/loopback/server/middleware/salix-version.js @@ -0,0 +1,9 @@ + +module.exports = function(options) { + return function(req, res, next) { + const packageJson = require('../../../package.json'); + + res.header('Salix-Version', packageJson.version); + next(); + }; +}; diff --git a/package.json b/package.json index a10e445ed0..cb66a79a37 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "salix-back", - "version": "1.0.0", + "version": "6.8.0", "author": "Verdnatura Levante SL", "description": "Salix backend", "license": "GPL-3.0", From 559f313814b5e73465c3dc5efb5ebbbf934cd3fe Mon Sep 17 00:00:00 2001 From: alexm Date: Mon, 13 Jun 2022 13:36:05 +0200 Subject: [PATCH 2/5] feat(front): interceptor getVersion from back --- front/core/services/interceptor.js | 3 ++- front/salix/components/layout/index.html | 9 ++++++++- front/salix/components/layout/index.js | 21 +++++++++++++++++++-- front/salix/components/layout/index.spec.js | 13 +++++++++++++ front/salix/components/layout/style.scss | 3 +++ front/salix/locale/es.yml | 1 + loopback/server/middleware/salix-version.js | 2 +- 7 files changed, 47 insertions(+), 5 deletions(-) diff --git a/front/core/services/interceptor.js b/front/core/services/interceptor.js index b7cf3a0ec4..f7cc19e360 100644 --- a/front/core/services/interceptor.js +++ b/front/core/services/interceptor.js @@ -30,11 +30,12 @@ function interceptor($q, vnApp, vnToken, $translate) { }, response(response) { vnApp.popLoader(); + localStorage.setItem('salix-version', response.headers('salix-version')); return response; }, responseError(rejection) { vnApp.popLoader(); - let err = new HttpError(rejection.statusText); + const err = new HttpError(rejection.statusText); Object.assign(err, rejection); return $q.reject(err); } diff --git a/front/salix/components/layout/index.html b/front/salix/components/layout/index.html index cd13c565e0..88d15987cd 100644 --- a/front/salix/components/layout/index.html +++ b/front/salix/components/layout/index.html @@ -19,6 +19,14 @@
+ + -
diff --git a/front/salix/components/layout/index.js b/front/salix/components/layout/index.js index 986f616220..1b206e6b80 100644 --- a/front/salix/components/layout/index.js +++ b/front/salix/components/layout/index.js @@ -3,9 +3,11 @@ import Component from 'core/lib/component'; import './style.scss'; export class Layout extends Component { - constructor($element, $, vnModules) { + constructor($element, $, vnModules, $http) { super($element, $); this.modules = vnModules.get(); + this.$http = $http; + this.versionInterval = setInterval(this.getVersion.bind(this), 1000); } $onInit() { @@ -26,8 +28,23 @@ export class Layout extends Component { const token = this.vnToken.token; return `/api/Images/user/160x160/${userId}/download?access_token=${token}`; } + + refresh() { + window.location.reload(); + } + + getVersion() { + const currentVersion = localStorage.getItem('salix-version'); + this.$http.get('Applications/status').then(res => { + const newVersion = res.headers('salix-version'); + if (newVersion != currentVersion) { + this.hasNewVersion = true; + clearInterval(this.versionInterval); + } + }); + } } -Layout.$inject = ['$element', '$scope', 'vnModules']; +Layout.$inject = ['$element', '$scope', 'vnModules', '$http']; ngModule.vnComponent('vnLayout', { template: require('./index.html'), diff --git a/front/salix/components/layout/index.spec.js b/front/salix/components/layout/index.spec.js index 71dbb91923..49491e8c81 100644 --- a/front/salix/components/layout/index.spec.js +++ b/front/salix/components/layout/index.spec.js @@ -37,4 +37,17 @@ describe('Component vnLayout', () => { expect(url).not.toBeDefined(); }); }); + + describe('getVersion()', () => { + it('should detect if there is a new version', () => { + const frontVersion = '1'; + localStorage.setItem('salix-version', frontVersion); + + $httpBackend.when('GET', `Applications/status`).respond(200); + controller.getVersion(); + $httpBackend.flush(); + + expect(controller.hasNewVersion).toEqual(true); + }); + }); }); diff --git a/front/salix/components/layout/style.scss b/front/salix/components/layout/style.scss index 36522bc3a1..6123662280 100644 --- a/front/salix/components/layout/style.scss +++ b/front/salix/components/layout/style.scss @@ -60,6 +60,9 @@ vn-layout { font-size: 1.05rem; padding: 0; } + .vn-icon-button.refresh { + color: $color-alert; + } } & > vn-side-menu > .menu { display: flex; diff --git a/front/salix/locale/es.yml b/front/salix/locale/es.yml index 4e93ae18ee..e5dc82b164 100644 --- a/front/salix/locale/es.yml +++ b/front/salix/locale/es.yml @@ -17,6 +17,7 @@ Go to module summary: Ir a la vista previa del módulo Show summary: Mostrar vista previa What is new: Novedades de la versión Settings: Ajustes +There is a new version, click here to reload: Hay una nueva versión, pulse aquí para recargar # Actions diff --git a/loopback/server/middleware/salix-version.js b/loopback/server/middleware/salix-version.js index def8e99ef8..5f297c3342 100644 --- a/loopback/server/middleware/salix-version.js +++ b/loopback/server/middleware/salix-version.js @@ -3,7 +3,7 @@ module.exports = function(options) { return function(req, res, next) { const packageJson = require('../../../package.json'); - res.header('Salix-Version', packageJson.version); + res.set('Salix-Version', packageJson.version); next(); }; }; From 3e133c22e1678724b9695c2cd2a50337e451f671 Mon Sep 17 00:00:00 2001 From: alexm Date: Mon, 13 Jun 2022 13:37:06 +0200 Subject: [PATCH 3/5] correct interval --- front/salix/components/layout/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/salix/components/layout/index.js b/front/salix/components/layout/index.js index 1b206e6b80..9f18695541 100644 --- a/front/salix/components/layout/index.js +++ b/front/salix/components/layout/index.js @@ -7,7 +7,7 @@ export class Layout extends Component { super($element, $); this.modules = vnModules.get(); this.$http = $http; - this.versionInterval = setInterval(this.getVersion.bind(this), 1000); + this.versionInterval = setInterval(this.getVersion.bind(this), 300000); } $onInit() { From fd8375a45a4a6c66f1b43c1943b1e903910ab598 Mon Sep 17 00:00:00 2001 From: alexm Date: Tue, 14 Jun 2022 10:16:41 +0200 Subject: [PATCH 4/5] move code to vnApp and interceptor --- front/core/services/app.js | 5 +++++ front/core/services/interceptor.js | 12 ++++++++++-- front/salix/components/layout/index.html | 2 +- front/salix/components/layout/index.js | 17 ++--------------- front/salix/components/layout/index.spec.js | 13 ------------- loopback/server/middleware/salix-version.js | 3 +-- 6 files changed, 19 insertions(+), 33 deletions(-) diff --git a/front/core/services/app.js b/front/core/services/app.js index 6b2cd1d2a0..8c628aaa56 100644 --- a/front/core/services/app.js +++ b/front/core/services/app.js @@ -10,6 +10,7 @@ export default class App { constructor() { this.loaderStatus = 0; this.loading = false; + this.versionInterval = setInterval(this.getVersion.bind(this), 300000); } showMessage(message) { @@ -38,6 +39,10 @@ export default class App { if (this.loaderStatus === 0) this.loading = false; } + + getVersion() { + this.logger.$http.get('Applications/status'); + } } ngModule.service('vnApp', App); diff --git a/front/core/services/interceptor.js b/front/core/services/interceptor.js index f7cc19e360..ad2227332b 100644 --- a/front/core/services/interceptor.js +++ b/front/core/services/interceptor.js @@ -30,7 +30,15 @@ function interceptor($q, vnApp, vnToken, $translate) { }, response(response) { vnApp.popLoader(); - localStorage.setItem('salix-version', response.headers('salix-version')); + const currentVersion = localStorage.getItem('salix-version'); + const newVersion = response.headers('salix-version'); + if (newVersion) { + if (newVersion != currentVersion) { + vnApp.hasNewVersion = true; + clearInterval(vnApp.versionInterval); + } + localStorage.setItem('salix-version', newVersion); + } return response; }, responseError(rejection) { @@ -38,7 +46,7 @@ function interceptor($q, vnApp, vnToken, $translate) { const err = new HttpError(rejection.statusText); Object.assign(err, rejection); return $q.reject(err); - } + }, }; } ngModule.factory('vnInterceptor', interceptor); diff --git a/front/salix/components/layout/index.html b/front/salix/components/layout/index.html index 88d15987cd..5a525ef77a 100644 --- a/front/salix/components/layout/index.html +++ b/front/salix/components/layout/index.html @@ -22,7 +22,7 @@ diff --git a/front/salix/components/layout/index.js b/front/salix/components/layout/index.js index 9f18695541..372e8e8283 100644 --- a/front/salix/components/layout/index.js +++ b/front/salix/components/layout/index.js @@ -3,11 +3,9 @@ import Component from 'core/lib/component'; import './style.scss'; export class Layout extends Component { - constructor($element, $, vnModules, $http) { + constructor($element, $, vnModules) { super($element, $); this.modules = vnModules.get(); - this.$http = $http; - this.versionInterval = setInterval(this.getVersion.bind(this), 300000); } $onInit() { @@ -32,19 +30,8 @@ export class Layout extends Component { refresh() { window.location.reload(); } - - getVersion() { - const currentVersion = localStorage.getItem('salix-version'); - this.$http.get('Applications/status').then(res => { - const newVersion = res.headers('salix-version'); - if (newVersion != currentVersion) { - this.hasNewVersion = true; - clearInterval(this.versionInterval); - } - }); - } } -Layout.$inject = ['$element', '$scope', 'vnModules', '$http']; +Layout.$inject = ['$element', '$scope', 'vnModules']; ngModule.vnComponent('vnLayout', { template: require('./index.html'), diff --git a/front/salix/components/layout/index.spec.js b/front/salix/components/layout/index.spec.js index 49491e8c81..71dbb91923 100644 --- a/front/salix/components/layout/index.spec.js +++ b/front/salix/components/layout/index.spec.js @@ -37,17 +37,4 @@ describe('Component vnLayout', () => { expect(url).not.toBeDefined(); }); }); - - describe('getVersion()', () => { - it('should detect if there is a new version', () => { - const frontVersion = '1'; - localStorage.setItem('salix-version', frontVersion); - - $httpBackend.when('GET', `Applications/status`).respond(200); - controller.getVersion(); - $httpBackend.flush(); - - expect(controller.hasNewVersion).toEqual(true); - }); - }); }); diff --git a/loopback/server/middleware/salix-version.js b/loopback/server/middleware/salix-version.js index 5f297c3342..988a3b39c9 100644 --- a/loopback/server/middleware/salix-version.js +++ b/loopback/server/middleware/salix-version.js @@ -1,8 +1,7 @@ +const packageJson = require('../../../package.json'); module.exports = function(options) { return function(req, res, next) { - const packageJson = require('../../../package.json'); - res.set('Salix-Version', packageJson.version); next(); }; From 1a88ccaae5345c6b2b66abe3391edd529d5b7e8c Mon Sep 17 00:00:00 2001 From: alexm Date: Thu, 16 Jun 2022 08:25:38 +0200 Subject: [PATCH 5/5] move funcionality setVersion to vnApp --- front/core/services/app.js | 11 +++++++++++ front/core/services/interceptor.js | 10 ++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/front/core/services/app.js b/front/core/services/app.js index 8c628aaa56..889b24d01b 100644 --- a/front/core/services/app.js +++ b/front/core/services/app.js @@ -43,6 +43,17 @@ export default class App { getVersion() { this.logger.$http.get('Applications/status'); } + + setVersion(newVersion) { + if (newVersion) { + const currentVersion = localStorage.getItem('salix-version'); + if (newVersion != currentVersion) { + this.hasNewVersion = true; + clearInterval(this.versionInterval); + } + localStorage.setItem('salix-version', newVersion); + } + } } ngModule.service('vnApp', App); diff --git a/front/core/services/interceptor.js b/front/core/services/interceptor.js index ad2227332b..3f3d9912b1 100644 --- a/front/core/services/interceptor.js +++ b/front/core/services/interceptor.js @@ -30,15 +30,9 @@ function interceptor($q, vnApp, vnToken, $translate) { }, response(response) { vnApp.popLoader(); - const currentVersion = localStorage.getItem('salix-version'); const newVersion = response.headers('salix-version'); - if (newVersion) { - if (newVersion != currentVersion) { - vnApp.hasNewVersion = true; - clearInterval(vnApp.versionInterval); - } - localStorage.setItem('salix-version', newVersion); - } + vnApp.setVersion(newVersion); + return response; }, responseError(rejection) {