mirror of
https://gitlab.com/bramw/baserow.git
synced 2024-11-24 16:36:46 +00:00
114 lines
2.8 KiB
JavaScript
114 lines
2.8 KiB
JavaScript
import _ from 'lodash'
|
|
|
|
import moment from '@baserow/modules/core/moment'
|
|
|
|
import RowHistoryService from '@baserow/modules/database/services/rowHistory'
|
|
|
|
export const state = () => ({
|
|
entries: [],
|
|
loading: false,
|
|
loaded: false,
|
|
totalCount: 0,
|
|
loadedRowId: false,
|
|
loadedTableId: false,
|
|
})
|
|
|
|
export const mutations = {
|
|
ADD_ENTRIES(state, { entries }) {
|
|
entries.forEach((newEntry) => {
|
|
const existingIndex = state.entries.findIndex((e) => e.id === newEntry.id)
|
|
if (existingIndex >= 0) {
|
|
// Prevent duplicates by just replacing them inline
|
|
state.entries.splice(existingIndex, 0, newEntry)
|
|
} else {
|
|
state.entries.push(newEntry)
|
|
}
|
|
})
|
|
},
|
|
RESET_ENTRIES(state) {
|
|
state.entries = []
|
|
state.totalCount = 0
|
|
},
|
|
SET_LOADING(state, loading) {
|
|
state.loading = loading
|
|
},
|
|
SET_LOADED(state, loaded) {
|
|
state.loaded = loaded
|
|
},
|
|
SET_LOADED_TABLE_AND_ROW(state, { tableId, rowId }) {
|
|
state.loadedRowId = rowId
|
|
state.loadedTableId = tableId
|
|
},
|
|
SET_TOTAL_COUNT(state, totalCount) {
|
|
state.totalCount = totalCount
|
|
},
|
|
}
|
|
|
|
export const actions = {
|
|
async fetchInitial({ commit }, { tableId, rowId }) {
|
|
commit('RESET_ENTRIES')
|
|
commit('SET_LOADING', true)
|
|
commit('SET_LOADED', false)
|
|
try {
|
|
const { data } = await RowHistoryService(this.$client).fetchAll({
|
|
tableId,
|
|
rowId,
|
|
limit: 30,
|
|
})
|
|
commit('ADD_ENTRIES', { entries: data.results })
|
|
commit('SET_TOTAL_COUNT', data.count)
|
|
commit('SET_LOADED_TABLE_AND_ROW', { tableId, rowId })
|
|
commit('SET_LOADED', true)
|
|
} finally {
|
|
commit('SET_LOADING', false)
|
|
}
|
|
},
|
|
async fetchNextPage({ commit, getters }, { tableId, rowId }) {
|
|
commit('SET_LOADING', true)
|
|
try {
|
|
const { data } = await RowHistoryService(this.$client).fetchAll({
|
|
tableId,
|
|
rowId,
|
|
offset: getters.getCurrentCount,
|
|
limit: 30,
|
|
})
|
|
commit('ADD_ENTRIES', { entries: data.results })
|
|
commit('SET_TOTAL_COUNT', data.count)
|
|
} finally {
|
|
commit('SET_LOADING', false)
|
|
}
|
|
},
|
|
forceCreate({ commit, state }, { rowHistoryEntry, rowId, tableId }) {
|
|
if (state.loadedTableId === tableId && state.loadedRowId === rowId) {
|
|
commit('ADD_ENTRIES', { entries: [rowHistoryEntry] })
|
|
commit('SET_TOTAL_COUNT', state.totalCount + 1)
|
|
}
|
|
},
|
|
}
|
|
|
|
export const getters = {
|
|
getSortedEntries(state) {
|
|
return _.sortBy(state.entries, (e) => -moment.utc(e.timestamp))
|
|
},
|
|
getCurrentCount(state) {
|
|
return state.entries.length
|
|
},
|
|
getTotalCount(state) {
|
|
return state.totalCount
|
|
},
|
|
getLoading(state) {
|
|
return state.loading
|
|
},
|
|
getLoaded(state) {
|
|
return state.loaded
|
|
},
|
|
}
|
|
|
|
export default {
|
|
namespaced: true,
|
|
state,
|
|
getters,
|
|
actions,
|
|
mutations,
|
|
}
|