Skip to content
This repository was archived by the owner on Jan 26, 2024. It is now read-only.

Commit 14e3477

Browse files
authored
Merge pull request #4110 from DivanteLtd/hotfix/v1.10.6
Hotfix/v1.10.6
2 parents 09c39c8 + d49c877 commit 14e3477

File tree

46 files changed

+376
-191
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+376
-191
lines changed

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,24 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
8+
## [1.10.6] - 21.02.2020
9+
10+
## Added
11+
- Add lazy create cart token - @gibkigonzo (#3994)
12+
- Add server context to async data loader - @gibkigonzo (pr#4113)
13+
14+
### Fixed
15+
- Fix low-quality images styles - @przspa (#3906)
16+
- Fix page-not-found redirect in dispatcher - @gibkigonzo (#3956)
17+
- Fix hiding overlay for newsletter modal - @gibkigonzo (#3970)
18+
- Fix problem with storeView as dependency in filters - @gibkigonzo (#3968)
19+
- Fix v-model not working in BaseRadioButton - @lukeromanowicz (#4035)
20+
- add disconnect and sync options for clear/cart - @gibkigonzo (#4062)
21+
- Fix current token invalidation with refresh token - @gibkigonzo (#3928, #3620, #3626)
22+
- Disable overriding `route`, `config`, `storeView`, `version` state in __INITIAL_STATE__ - @gibkigonzo (pr#4095)
23+
- Disable zoom image on hover in mobile - @gibkigonzo (pr#4115)
24+
725
## [1.10.5] - 28.11.2019
826

927
### Fixed

config/default.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,6 @@
239239
"width": 150,
240240
"height": 150
241241
},
242-
"bypassCartLoaderForAuthorizedUsers": true,
243242
"serverMergeByDefault": true,
244243
"serverSyncCanRemoveLocalItems": false,
245244
"serverSyncCanModifyLocalItems": false,

core/client-entry.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { AsyncDataLoader } from './lib/async-data-loader'
1313
import { Logger } from '@vue-storefront/core/lib/logger'
1414
import globalConfig from 'config'
1515
import { RouterManager } from './lib/router-manager';
16+
import omit from 'lodash-es/omit'
1617
declare var window: any
1718

1819
const invokeClientEntry = async () => {
@@ -22,7 +23,8 @@ const invokeClientEntry = async () => {
2223
const { app, router, store } = await createApp(null, dynamicRuntimeConfig, storeCode)
2324

2425
if (window.__INITIAL_STATE__) {
25-
store.replaceState(Object.assign({}, store.state, window.__INITIAL_STATE__, { config: globalConfig }))
26+
const initialState = omit(window.__INITIAL_STATE__, ['storeView', 'config', 'version', 'route'])
27+
store.replaceState(Object.assign({}, store.state, initialState, { config: globalConfig }))
2628
}
2729

2830
await store.dispatch('url/registerDynamicRoutes')

core/filters/date.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ once('__VUE_EXTEND_DAYJS_LOCALIZED_FORMAT__', () => {
1212
* @param {String} date
1313
* @param {String} format
1414
*/
15-
export function date (date, format) {
16-
const displayFormat = format || currentStoreView().i18n.dateFormat
17-
let storeLocale = currentStoreView().i18n.defaultLocale.toLocaleLowerCase()
15+
export function date (date, format, storeView) {
16+
const _storeView = storeView || currentStoreView()
17+
const displayFormat = format || _storeView.i18n.dateFormat
18+
let storeLocale = _storeView.i18n.defaultLocale.toLocaleLowerCase()
1819
const separatorIndex = storeLocale.indexOf('-')
1920
const languageCode = separatorIndex ? storeLocale.substr(0, separatorIndex) : storeLocale
2021

core/filters/price.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,24 @@ import { currentStoreView } from '@vue-storefront/core/lib/multistore'
44
* Converts number to price string
55
* @param {Number} value
66
*/
7-
export function price (value) {
7+
export function price (value, storeView) {
88
if (isNaN(value)) {
99
return value
1010
}
1111
let formattedVal = Math.abs(parseFloat(value)).toFixed(2)
12-
const storeView = currentStoreView()
13-
if (!storeView.i18n) {
12+
const _storeView = storeView || currentStoreView();
13+
if (!_storeView.i18n) {
1414
return value;
1515
}
1616
const prependCurrency = (price) => {
17-
return storeView.i18n.currencySign + price
17+
return _storeView.i18n.currencySign + price
1818
}
1919

2020
const appendCurrency = (price) => {
21-
return price + storeView.i18n.currencySign
21+
return price + _storeView.i18n.currencySign
2222
}
2323

24-
if (storeView.i18n.currencySignPlacement === 'append') {
24+
if (_storeView.i18n.currencySignPlacement === 'append') {
2525
formattedVal = appendCurrency(formattedVal)
2626
} else {
2727
formattedVal = prependCurrency(formattedVal)

core/i18n/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@vue-storefront/i18n",
3-
"version": "1.10.5",
3+
"version": "1.10.6",
44
"description": "Vue Storefront i18n",
55
"license": "MIT",
66
"main": "index.ts",

core/lib/multistore.ts

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,32 @@ import VueRouter, { RouteConfig, RawLocation } from 'vue-router'
88
import config from 'config'
99
import { LocalizedRoute, StoreView } from './types'
1010
import storeCodeFromRoute from './storeCodeFromRoute'
11+
import cloneDeep from 'lodash-es/cloneDeep'
12+
import get from 'lodash-es/get'
13+
import { isServer } from '@vue-storefront/core/helpers'
14+
15+
/**
16+
* Returns base storeView object that can be created without storeCode
17+
*/
18+
function buildBaseStoreView (): StoreView {
19+
return cloneDeep({
20+
tax: config.tax,
21+
i18n: config.i18n,
22+
elasticsearch: config.elasticsearch,
23+
storeCode: null,
24+
storeId: config.defaultStoreCode && config.defaultStoreCode !== '' ? config.storeViews[config.defaultStoreCode].storeId : 1,
25+
seo: config.seo
26+
})
27+
}
1128

1229
export function currentStoreView (): StoreView {
13-
// TODO: Change to getter all along our code
14-
return rootStore.state.storeView
30+
const serverStoreView = get(global, 'process.storeView', undefined)
31+
const clientStoreView = get(rootStore, 'state.storeView', undefined)
32+
return (isServer ? serverStoreView : clientStoreView) || buildBaseStoreView()
1533
}
1634

1735
export async function prepareStoreView (storeCode: string): Promise<StoreView> {
18-
let storeView = { // current, default store
19-
tax: Object.assign({}, config.tax),
20-
i18n: Object.assign({}, config.i18n),
21-
elasticsearch: Object.assign({}, config.elasticsearch),
22-
storeCode: '',
23-
storeId: config.defaultStoreCode && config.defaultStoreCode !== '' ? config.storeViews[config.defaultStoreCode].storeId : 1
24-
}
36+
let storeView: StoreView = buildBaseStoreView() // current, default store
2537
const storeViewHasChanged = !rootStore.state.storeView || rootStore.state.storeView.storeCode !== storeCode
2638
if (storeCode) { // current store code
2739
const currentStoreView = config.storeViews[storeCode]
@@ -38,6 +50,11 @@ export async function prepareStoreView (storeCode: string): Promise<StoreView> {
3850
}
3951
if (storeViewHasChanged) {
4052
rootStore.state.storeView = storeView
53+
54+
if (global && isServer) {
55+
(global.process as any).storeView = storeView
56+
}
57+
4158
await loadLanguageAsync(storeView.i18n.defaultLocale)
4259
}
4360
if (storeViewHasChanged || Vue.prototype.$db.currentStoreCode !== storeCode) {

core/lib/sync/helpers/index.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
export const hasResponseError = (jsonResponse): boolean => {
2+
if (typeof jsonResponse.result === 'string') {
3+
return true
4+
}
5+
6+
const hasMessage = jsonResponse.result.result || jsonResponse.result.message
7+
8+
return Boolean(hasMessage) && jsonResponse.result.code !== 'ENOTFOUND'
9+
}
10+
11+
export const getResponseMessage = (jsonResponse): string => {
12+
if (typeof jsonResponse.result === 'string') {
13+
return jsonResponse.result
14+
}
15+
16+
if (typeof jsonResponse.result.result === 'string') {
17+
return jsonResponse.result.result
18+
}
19+
20+
return jsonResponse.result.message
21+
}
22+
23+
export const getResponseCode = (jsonResponse): number => {
24+
let responseCode = null
25+
if (jsonResponse.result && jsonResponse.result.code) {
26+
responseCode = parseInt(jsonResponse.result.code)
27+
} else {
28+
responseCode = parseInt(jsonResponse.code)
29+
}
30+
return responseCode
31+
}

core/lib/sync/task.ts

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import Vue from 'vue'
22
import i18n from '@vue-storefront/i18n'
33
import isNaN from 'lodash-es/isNaN'
44
import isUndefined from 'lodash-es/isUndefined'
5-
import toString from 'lodash-es/toString'
65
import fetch from 'isomorphic-fetch'
76
import * as localForage from 'localforage'
87
import rootStore from '@vue-storefront/core/store'
@@ -16,6 +15,7 @@ import { processURLAddress } from '@vue-storefront/core/helpers'
1615
import { serial } from '@vue-storefront/core/helpers'
1716
import config from 'config'
1817
import { onlineHelper } from '@vue-storefront/core/helpers'
18+
import { hasResponseError, getResponseMessage, getResponseCode } from '@vue-storefront/core/lib/sync/helpers'
1919

2020
const AUTO_REFRESH_MAX_ATTEMPTS = 20
2121

@@ -33,7 +33,7 @@ function _sleep (time) {
3333
}
3434

3535
function _internalExecute (resolve, reject, task: Task, currentToken, currentCartId) {
36-
if (currentToken !== null && rootStore.state.userTokenInvalidateLock > 0) { // invalidate lock set
36+
if (currentToken && rootStore.state.userTokenInvalidateLock > 0) { // invalidate lock set
3737
Logger.log('Waiting for rootStore.state.userTokenInvalidateLock to release for ' + task.url, 'sync')()
3838
_sleep(1000).then(() => {
3939
Logger.log('Another try for rootStore.state.userTokenInvalidateLock for ' + task.url, 'sync')()
@@ -42,7 +42,7 @@ function _internalExecute (resolve, reject, task: Task, currentToken, currentCar
4242
return // return but not resolve
4343
} else if (rootStore.state.userTokenInvalidateLock < 0) {
4444
Logger.error('Aborting the network task' + task.url + rootStore.state.userTokenInvalidateLock, 'sync')()
45-
resolve({ code: 401, message: i18n.t('Error refreshing user token. User is not authorized to access the resource') })()
45+
resolve({ code: 401, result: i18n.t('Error refreshing user token. User is not authorized to access the resource') })()
4646
return
4747
} else {
4848
if (rootStore.state.userTokenInvalidated) {
@@ -73,9 +73,9 @@ function _internalExecute (resolve, reject, task: Task, currentToken, currentCar
7373
}
7474
}).then((jsonResponse) => {
7575
if (jsonResponse) {
76-
const responseCode = parseInt(jsonResponse.code)
76+
const responseCode = getResponseCode(jsonResponse)
7777
if (responseCode !== 200) {
78-
if (responseCode === 401 /** unauthorized */ && currentToken !== null) { // the token is no longer valid, try to invalidate it
78+
if (responseCode === 401 /** unauthorized */ && currentToken) { // the token is no longer valid, try to invalidate it
7979
Logger.error('Invalid token - need to be revalidated' + currentToken + task.url + rootStore.state.userTokenInvalidateLock, 'sync')()
8080
if (isNaN(rootStore.state.userTokenInvalidateAttemptsCount) || isUndefined(rootStore.state.userTokenInvalidateAttemptsCount)) rootStore.state.userTokenInvalidateAttemptsCount = 0
8181
if (isNaN(rootStore.state.userTokenInvalidateLock) || isUndefined(rootStore.state.userTokenInvalidateLock)) rootStore.state.userTokenInvalidateLock = 0
@@ -128,12 +128,10 @@ function _internalExecute (resolve, reject, task: Task, currentToken, currentCar
128128
}
129129
}
130130

131-
if (!task.silent && jsonResponse.result && (typeof jsonResponse.result === 'string' || (((jsonResponse.result.result || jsonResponse.result.message) && jsonResponse.result.code !== 'ENOTFOUND') && !silentMode))) {
132-
const message = typeof jsonResponse.result === 'string' ? jsonResponse.result : typeof jsonResponse.result.result === 'string' ? jsonResponse.result.result : jsonResponse.result.message
133-
131+
if (!task.silent && jsonResponse.result && hasResponseError(jsonResponse) && !silentMode) {
134132
rootStore.dispatch('notification/spawnNotification', {
135133
type: 'error',
136-
message: i18n.t(message),
134+
message: i18n.t(getResponseMessage(jsonResponse)),
137135
action1: { label: i18n.t('OK') }
138136
})
139137
}

core/mixins/multistore.js

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,7 @@ export const multistore = {
1010
* @param {Int} height
1111
*/
1212
localizedRoute (routeObj) {
13-
let storeView
14-
15-
if (isServer) {
16-
storeView = this.$ssrContext.helpers.currentStoreView()
17-
} else {
18-
storeView = currentStoreView()
19-
}
13+
const storeView = currentStoreView()
2014

2115
return localizedRouteHelper(routeObj, storeView.storeCode)
2216
},
@@ -27,13 +21,7 @@ export const multistore = {
2721
* @param {Int} height
2822
*/
2923
localizedDispatcherRoute (routeObj) {
30-
let storeView
31-
32-
if (isServer) {
33-
storeView = this.$ssrContext.helpers.currentStoreView()
34-
} else {
35-
storeView = currentStoreView()
36-
}
24+
const storeView = currentStoreView()
3725

3826
return localizedDispatcherRouteHelper(routeObj, storeView.storeCode)
3927
}

0 commit comments

Comments
 (0)