more prefs storage work + move dontShowUpdateNotifs to prefs
This commit is contained in:
parent
aa41cedd93
commit
2c0eb29b28
|
@ -38,7 +38,7 @@ const UpdateNotification = {
|
||||||
return !this.$store.state.instance.disableUpdateNotification &&
|
return !this.$store.state.instance.disableUpdateNotification &&
|
||||||
this.$store.state.users.currentUser &&
|
this.$store.state.users.currentUser &&
|
||||||
this.$store.state.serverSideStorage.flagStorage.updateCounter < CURRENT_UPDATE_COUNTER &&
|
this.$store.state.serverSideStorage.flagStorage.updateCounter < CURRENT_UPDATE_COUNTER &&
|
||||||
!this.$store.state.serverSideStorage.flagStorage.dontShowUpdateNotifs
|
!this.$store.state.serverSideStorage.prefsStorage.simple.dontShowUpdateNotifs
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -48,7 +48,7 @@ const UpdateNotification = {
|
||||||
neverShowAgain () {
|
neverShowAgain () {
|
||||||
this.toggleShow()
|
this.toggleShow()
|
||||||
this.$store.commit('setFlag', { flag: 'updateCounter', value: CURRENT_UPDATE_COUNTER })
|
this.$store.commit('setFlag', { flag: 'updateCounter', value: CURRENT_UPDATE_COUNTER })
|
||||||
this.$store.commit('setFlag', { flag: 'dontShowUpdateNotifs', value: 1 })
|
this.$store.commit('setPreference', { path: 'simple.dontShowUpdateNotifs', value: true })
|
||||||
this.$store.dispatch('pushServerSideStorage')
|
this.$store.dispatch('pushServerSideStorage')
|
||||||
},
|
},
|
||||||
dismiss () {
|
dismiss () {
|
||||||
|
|
|
@ -14,9 +14,6 @@ export const defaultState = {
|
||||||
// storage of flags - stuff that can only be set and incremented
|
// storage of flags - stuff that can only be set and incremented
|
||||||
flagStorage: {
|
flagStorage: {
|
||||||
updateCounter: 0, // Counter for most recent update notification seen
|
updateCounter: 0, // Counter for most recent update notification seen
|
||||||
// TODO move to prefsStorage when that becomes a thing since only way
|
|
||||||
// this can be reset is by complete reset of all flags
|
|
||||||
dontShowUpdateNotifs: 0, // if user chose to not show update notifications ever again
|
|
||||||
reset: 0 // special flag that can be used to force-reset all flags, debug purposes only
|
reset: 0 // special flag that can be used to force-reset all flags, debug purposes only
|
||||||
// special reset codes:
|
// special reset codes:
|
||||||
// 1000: trim keys to those known by currently running FE
|
// 1000: trim keys to those known by currently running FE
|
||||||
|
@ -24,7 +21,9 @@ export const defaultState = {
|
||||||
},
|
},
|
||||||
prefsStorage: {
|
prefsStorage: {
|
||||||
_journal: [],
|
_journal: [],
|
||||||
simple: {}
|
simple: {
|
||||||
|
dontShowUpdateNotifs: false
|
||||||
|
}
|
||||||
},
|
},
|
||||||
// raw data
|
// raw data
|
||||||
raw: null,
|
raw: null,
|
||||||
|
@ -248,6 +247,20 @@ export const mutations = {
|
||||||
setFlag (state, { flag, value }) {
|
setFlag (state, { flag, value }) {
|
||||||
state.flagStorage[flag] = value
|
state.flagStorage[flag] = value
|
||||||
state.dirty = true
|
state.dirty = true
|
||||||
|
},
|
||||||
|
setPreference (state, { path, value }) {
|
||||||
|
if (path.startsWith('_')) {
|
||||||
|
console.error(`tried to edit internal (starts with _) field '${path}', ignoring.`)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
set(state.prefsStorage, path, value)
|
||||||
|
state.prefsStorage._journal = uniqBy(
|
||||||
|
[
|
||||||
|
...state.prefsStorage._journal,
|
||||||
|
{ command: 'set', path, args: [value], timestamp: Date.now() }
|
||||||
|
].sort((a, b) => a.timestamp > b.timestamp ? -1 : 1),
|
||||||
|
'path'
|
||||||
|
).reverse()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -262,7 +275,7 @@ const serverSideStorage = {
|
||||||
if (!needPush) return
|
if (!needPush) return
|
||||||
state.cache = _wrapData({
|
state.cache = _wrapData({
|
||||||
flagStorage: toRaw(state.flagStorage),
|
flagStorage: toRaw(state.flagStorage),
|
||||||
prefsStorage: toRaw(state.flagStorage)
|
prefsStorage: toRaw(state.prefsStorage)
|
||||||
})
|
})
|
||||||
const params = { pleroma_settings_store: { 'pleroma-fe': state.cache } }
|
const params = { pleroma_settings_store: { 'pleroma-fe': state.cache } }
|
||||||
rootState.api.backendInteractor
|
rootState.api.backendInteractor
|
||||||
|
|
|
@ -105,6 +105,38 @@ describe('The serverSideStorage module', () => {
|
||||||
expect(state.cache.flagStorage).to.eql(defaultState.flagStorage)
|
expect(state.cache.flagStorage).to.eql(defaultState.flagStorage)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
describe('setPreference', () => {
|
||||||
|
const { setPreference } = mutations
|
||||||
|
|
||||||
|
it('should set preference and update journal log accordingly', () => {
|
||||||
|
const state = cloneDeep(defaultState)
|
||||||
|
setPreference(state, { path: 'simple.testing', value: 1 })
|
||||||
|
expect(state.prefsStorage.simple.testing).to.eql(1)
|
||||||
|
expect(state.prefsStorage._journal.length).to.eql(1)
|
||||||
|
expect(state.prefsStorage._journal[0]).to.eql({
|
||||||
|
path: 'simple.testing',
|
||||||
|
command: 'set',
|
||||||
|
args: [1],
|
||||||
|
// should have A timestamp, we don't really care what it is
|
||||||
|
timestamp: state.prefsStorage._journal[0].timestamp
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should keep journal to a minimum (one entry per path)', () => {
|
||||||
|
const state = cloneDeep(defaultState)
|
||||||
|
setPreference(state, { path: 'simple.testing', value: 1 })
|
||||||
|
setPreference(state, { path: 'simple.testing', value: 2 })
|
||||||
|
expect(state.prefsStorage.simple.testing).to.eql(1)
|
||||||
|
expect(state.prefsStorage._journal.length).to.eql(1)
|
||||||
|
expect(state.prefsStorage._journal[0]).to.eql({
|
||||||
|
path: 'simple.testing',
|
||||||
|
command: 'set',
|
||||||
|
args: [2],
|
||||||
|
// should have A timestamp, we don't really care what it is
|
||||||
|
timestamp: state.prefsStorage._journal[0].timestamp
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('helper functions', () => {
|
describe('helper functions', () => {
|
||||||
|
|
Loading…
Reference in New Issue