forked from AkkomaGang/akkoma-fe
maintain conversationsObject storage
This commit is contained in:
parent
fa16d66c52
commit
ab7a418d80
2 changed files with 40 additions and 14 deletions
|
@ -1,4 +1,4 @@
|
||||||
import { reduce, filter, findIndex } from 'lodash'
|
import { reduce, filter, findIndex, clone } from 'lodash'
|
||||||
import Status from '../status/status.vue'
|
import Status from '../status/status.vue'
|
||||||
|
|
||||||
const sortById = (a, b) => {
|
const sortById = (a, b) => {
|
||||||
|
@ -75,9 +75,7 @@ const conversation = {
|
||||||
return [this.status]
|
return [this.status]
|
||||||
}
|
}
|
||||||
|
|
||||||
const statuses = this.$store.state.statuses.allStatuses
|
const conversation = clone(this.$store.state.statuses.conversationsObject[this.conversationId])
|
||||||
const conversation = filter(statuses, { statusnet_conversation_id: this.conversationId })
|
|
||||||
|
|
||||||
const statusIndex = findIndex(conversation, { id: this.statusId })
|
const statusIndex = findIndex(conversation, { id: this.statusId })
|
||||||
if (statusIndex !== -1) {
|
if (statusIndex !== -1) {
|
||||||
conversation[statusIndex] = this.status
|
conversation[statusIndex] = this.status
|
||||||
|
|
|
@ -33,6 +33,7 @@ const emptyNotifications = () => ({
|
||||||
export const defaultState = () => ({
|
export const defaultState = () => ({
|
||||||
allStatuses: [],
|
allStatuses: [],
|
||||||
allStatusesObject: {},
|
allStatusesObject: {},
|
||||||
|
conversationsObject: {},
|
||||||
maxId: 0,
|
maxId: 0,
|
||||||
notifications: emptyNotifications(),
|
notifications: emptyNotifications(),
|
||||||
favorites: new Set(),
|
favorites: new Set(),
|
||||||
|
@ -112,6 +113,39 @@ const sortTimeline = (timeline) => {
|
||||||
return timeline
|
return timeline
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add status to the global storages (arrays and objects maintaining statuses) except timelines
|
||||||
|
const addStatusToGlobalStorage = (state, data) => {
|
||||||
|
const result = mergeOrAdd(state.allStatuses, state.allStatusesObject, data)
|
||||||
|
if (result.new) {
|
||||||
|
// Add to conversation
|
||||||
|
const status = result.item
|
||||||
|
const conversationsObject = state.conversationsObject
|
||||||
|
const conversationId = status.statusnet_conversation_id
|
||||||
|
if (conversationsObject[conversationId]) {
|
||||||
|
conversationsObject[conversationId].push(status)
|
||||||
|
} else {
|
||||||
|
set(conversationsObject, conversationId, [status])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove status from the global storages (arrays and objects maintaining statuses) except timelines
|
||||||
|
const removeStatusFromGlobalStorage = (state, status) => {
|
||||||
|
remove(state.allStatuses, { id: status.id })
|
||||||
|
|
||||||
|
// TODO: Need to remove from allStatusesObject?
|
||||||
|
|
||||||
|
// Remove possible notification
|
||||||
|
remove(state.notifications.data, ({action: {id}}) => id === status.id)
|
||||||
|
|
||||||
|
// Remove from conversation
|
||||||
|
const conversationId = status.statusnet_conversation_id
|
||||||
|
if (state.conversationsObject[conversationId]) {
|
||||||
|
remove(state.conversationsObject[conversationId], { id: status.id })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const addNewStatuses = (state, { statuses, showImmediately = false, timeline, user = {}, noIdUpdate = false, userId }) => {
|
const addNewStatuses = (state, { statuses, showImmediately = false, timeline, user = {}, noIdUpdate = false, userId }) => {
|
||||||
// Sanity check
|
// Sanity check
|
||||||
if (!isArray(statuses)) {
|
if (!isArray(statuses)) {
|
||||||
|
@ -119,7 +153,6 @@ const addNewStatuses = (state, { statuses, showImmediately = false, timeline, us
|
||||||
}
|
}
|
||||||
|
|
||||||
const allStatuses = state.allStatuses
|
const allStatuses = state.allStatuses
|
||||||
const allStatusesObject = state.allStatusesObject
|
|
||||||
const timelineObject = state.timelines[timeline]
|
const timelineObject = state.timelines[timeline]
|
||||||
|
|
||||||
const maxNew = statuses.length > 0 ? maxBy(statuses, 'id').id : 0
|
const maxNew = statuses.length > 0 ? maxBy(statuses, 'id').id : 0
|
||||||
|
@ -142,7 +175,7 @@ const addNewStatuses = (state, { statuses, showImmediately = false, timeline, us
|
||||||
}
|
}
|
||||||
|
|
||||||
const addStatus = (data, showImmediately, addToTimeline = true) => {
|
const addStatus = (data, showImmediately, addToTimeline = true) => {
|
||||||
const result = mergeOrAdd(allStatuses, allStatusesObject, data)
|
const result = addStatusToGlobalStorage(state, data)
|
||||||
const status = result.item
|
const status = result.item
|
||||||
|
|
||||||
if (result.new) {
|
if (result.new) {
|
||||||
|
@ -236,16 +269,13 @@ const addNewStatuses = (state, { statuses, showImmediately = false, timeline, us
|
||||||
},
|
},
|
||||||
'deletion': (deletion) => {
|
'deletion': (deletion) => {
|
||||||
const uri = deletion.uri
|
const uri = deletion.uri
|
||||||
|
|
||||||
// Remove possible notification
|
|
||||||
const status = find(allStatuses, {uri})
|
const status = find(allStatuses, {uri})
|
||||||
if (!status) {
|
if (!status) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
remove(state.notifications.data, ({action: {id}}) => id === status.id)
|
removeStatusFromGlobalStorage(state, status)
|
||||||
|
|
||||||
remove(allStatuses, { uri })
|
|
||||||
if (timeline) {
|
if (timeline) {
|
||||||
remove(timelineObject.statuses, { uri })
|
remove(timelineObject.statuses, { uri })
|
||||||
remove(timelineObject.visibleStatuses, { uri })
|
remove(timelineObject.visibleStatuses, { uri })
|
||||||
|
@ -273,12 +303,10 @@ const addNewStatuses = (state, { statuses, showImmediately = false, timeline, us
|
||||||
}
|
}
|
||||||
|
|
||||||
const addNewNotifications = (state, { dispatch, notifications, older, visibleNotificationTypes, rootGetters }) => {
|
const addNewNotifications = (state, { dispatch, notifications, older, visibleNotificationTypes, rootGetters }) => {
|
||||||
const allStatuses = state.allStatuses
|
|
||||||
const allStatusesObject = state.allStatusesObject
|
|
||||||
each(notifications, (notification) => {
|
each(notifications, (notification) => {
|
||||||
if (notification.type !== 'follow') {
|
if (notification.type !== 'follow') {
|
||||||
notification.action = mergeOrAdd(allStatuses, allStatusesObject, notification.action).item
|
notification.action = addStatusToGlobalStorage(state, notification.action).item
|
||||||
notification.status = notification.status && mergeOrAdd(allStatuses, allStatusesObject, notification.status).item
|
notification.status = notification.status && addStatusToGlobalStorage(state, notification.status).item
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only add a new notification if we don't have one for the same action
|
// Only add a new notification if we don't have one for the same action
|
||||||
|
|
Loading…
Reference in a new issue