Skip to content

Commit 7ba1ff0

Browse files
committed
chore(#639): update bypassCache behaviour
1 parent cfc7dde commit 7ba1ff0

File tree

4 files changed

+49
-20
lines changed

4 files changed

+49
-20
lines changed

packages/druxt/src/stores/druxt.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ const DruxtStore = ({ store }) => {
244244
*/
245245
async getResource ({ commit, dispatch, state }, { type, id, query, prefix, bypassCache = false }) {
246246
// Get the resource from the store if it's avaialble.
247-
const storedResource = !bypassCache && ((state.resources[type] || {})[id] || {})[prefix] ?
247+
const storedResource = ((state.resources[type] || {})[id] || {})[prefix] ?
248248
{ ...state.resources[type][id][prefix] }
249249
: null
250250

@@ -322,9 +322,13 @@ const DruxtStore = ({ store }) => {
322322

323323
// Request the resource from the DruxtClient if required.
324324
let resource
325-
if (!storedResource || fields) {
326-
resource = await this.$druxt.getResource(type, id, getDrupalJsonApiParams(queryObject), prefix)
327-
commit('addResource', { prefix, resource: { ...resource } })
325+
if (bypassCache || !storedResource || fields) {
326+
try {
327+
resource = await this.$druxt.getResource(type, id, getDrupalJsonApiParams(queryObject), prefix)
328+
commit('addResource', { prefix, resource: { ...resource } })
329+
} catch(e) {
330+
// Do nothing, just don't error.
331+
}
328332
}
329333

330334
// Build resource to be returned.

packages/entity/src/components/DruxtEntity.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ export default {
187187
},
188188
},
189189
190-
created() {
190+
mounted() {
191191
// If static, re-fetch data allowing for cache-bypass.
192192
// @TODO - Don't re-fetch in serverless configuration.
193193
if (this.$store.app.context.isStatic) {
@@ -365,9 +365,9 @@ export default {
365365
366366
// Start with the `nuxt.config.js` `druxt.settings.entity` settings and
367367
// merge the Wrapper component settings on top.
368-
let mergedSettings = merge($druxt.settings.entity || {}, wrapperSettings, { arrayMerge: (dest, src) => src })
368+
let mergedSettings = merge(($druxt.settings || {}).entity || {}, wrapperSettings || {}, { arrayMerge: (dest, src) => src })
369369
// Merge the DruxtEntity component `settings` property on top.
370-
mergedSettings = merge(mergedSettings || {}, settings, { arrayMerge: (dest, src) => src })
370+
mergedSettings = merge(mergedSettings || {}, settings || {}, { arrayMerge: (dest, src) => src })
371371
372372
// Evaluate the bypass cache function.
373373
if (typeof (mergedSettings.query || {}).bypassCache === 'function') {

packages/views/src/components/DruxtView.vue

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,17 @@ export default {
7878
default: 'default',
7979
},
8080
81+
/**
82+
* Module settings object.
83+
*
84+
* @type {ModuleSettings}
85+
* @default {}
86+
*/
87+
settings: {
88+
type: Object,
89+
default: () => ({}),
90+
},
91+
8192
/**
8293
* JSON:API Resource type.
8394
*
@@ -329,7 +340,7 @@ export default {
329340
},
330341
},
331342
332-
created() {
343+
mounted() {
333344
// If static, re-fetch data allowing for cache-bypass.
334345
// @TODO - Don't re-fetch in serverless configuration.
335346
if (this.$store.app.context.isStatic) {
@@ -493,16 +504,23 @@ export default {
493504
* Component settings.
494505
*/
495506
settings: (context, wrapperSettings) => {
496-
const { $druxt } = context
497-
const settings = merge($druxt.settings.views || {}, wrapperSettings, { arrayMerge: (dest, src) => src })
507+
const { $druxt, settings } = context
508+
509+
// Start with the `nuxt.config.js` `druxt.settings.views` settings and
510+
// merge the Wrapper component settings on top.
511+
let mergedSettings = merge(($druxt.settings || {}).views || {}, wrapperSettings || {}, { arrayMerge: (dest, src) => src })
512+
// Merge the DruxtViews component `settings` property on top.
513+
mergedSettings = merge(mergedSettings || {}, settings || {}, { arrayMerge: (dest, src) => src })
498514
499515
// Evaluate the bypass cache function.
500-
if (typeof (settings.query || {}).bypassCache === 'function') {
501-
settings.query.bypassCache = !!settings.query.bypassCache(context)
516+
if (typeof (mergedSettings.query || {}).bypassCache === 'function') {
517+
mergedSettings.query.bypassCache = !!mergedSettings.query.bypassCache(context)
502518
}
503519
520+
console.log('mergedSettings', mergedSettings)
521+
504522
return {
505-
query: settings.query || {},
523+
query: mergedSettings.query || {},
506524
}
507525
},
508526

packages/views/src/stores/views.js

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -102,15 +102,22 @@ const DruxtViewsStore = ({ store }) => {
102102
*/
103103
async getResults ({ commit, state }, { viewId, displayId, query, prefix, bypassCache = false }) {
104104
const hash = query ? md5(this.$druxt.buildQueryUrl('', query)) : '_default'
105-
if (!bypassCache && typeof (((state.results[viewId] || {})[displayId] || {})[prefix] || {})[hash] !== 'undefined') {
106-
return state.results[viewId][displayId][prefix][hash]
107-
}
108-
109-
const results = await this.$druxt.getResource(`views--${viewId}`, displayId, query, prefix)
110105

111-
commit('addResults', { results, viewId, displayId, prefix, hash })
106+
let cache
107+
if (typeof (((state.results[viewId] || {})[displayId] || {})[prefix] || {})[hash] !== 'undefined') {
108+
cache = state.results[viewId][displayId][prefix][hash]
109+
if (!bypassCache) return cache
110+
}
112111

113-
return results
112+
try {
113+
const results = await this.$druxt.getResource(`views--${viewId}`, displayId, query, prefix)
114+
commit('addResults', { results, viewId, displayId, prefix, hash })
115+
return results
116+
}
117+
catch(e) {
118+
// Fall back to cache if possible.
119+
return cache ? cache : false
120+
}
114121
}
115122
}
116123
}

0 commit comments

Comments
 (0)