Merge branch 'fix-pinned-statuses' into 'develop'
Fix pinned statuses appearing at the bottom of user timeline Closes #1112 See merge request pleroma/pleroma-fe!1433
This commit is contained in:
commit
56616787ec
|
@ -12,19 +12,6 @@ library.add(
|
||||||
faCog
|
faCog
|
||||||
)
|
)
|
||||||
|
|
||||||
export const getExcludedStatusIdsByPinning = (statuses, pinnedStatusIds) => {
|
|
||||||
const ids = []
|
|
||||||
if (pinnedStatusIds && pinnedStatusIds.length > 0) {
|
|
||||||
for (let status of statuses) {
|
|
||||||
if (!pinnedStatusIds.includes(status.id)) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
ids.push(status.id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ids
|
|
||||||
}
|
|
||||||
|
|
||||||
const Timeline = {
|
const Timeline = {
|
||||||
props: [
|
props: [
|
||||||
'timeline',
|
'timeline',
|
||||||
|
@ -77,11 +64,6 @@ const Timeline = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// id map of statuses which need to be hidden in the main list due to pinning logic
|
// id map of statuses which need to be hidden in the main list due to pinning logic
|
||||||
excludedStatusIdsObject () {
|
|
||||||
const ids = getExcludedStatusIdsByPinning(this.timeline.visibleStatuses, this.pinnedStatusIds)
|
|
||||||
// Convert id array to object
|
|
||||||
return keyBy(ids)
|
|
||||||
},
|
|
||||||
pinnedStatusIdsObject () {
|
pinnedStatusIdsObject () {
|
||||||
return keyBy(this.pinnedStatusIds)
|
return keyBy(this.pinnedStatusIds)
|
||||||
},
|
},
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
</template>
|
</template>
|
||||||
<template v-for="status in timeline.visibleStatuses">
|
<template v-for="status in timeline.visibleStatuses">
|
||||||
<conversation
|
<conversation
|
||||||
v-if="!excludedStatusIdsObject[status.id]"
|
v-if="timelineName !== 'user' || (status.id >= timeline.minId && status.id <= timeline.maxId)"
|
||||||
:key="status.id"
|
:key="status.id"
|
||||||
class="status-fadein"
|
class="status-fadein"
|
||||||
:status-id="status.id"
|
:status-id="status.id"
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
import { getExcludedStatusIdsByPinning } from 'src/components/timeline/timeline.js'
|
|
||||||
|
|
||||||
describe('Timeline', () => {
|
|
||||||
describe('getExcludedStatusIdsByPinning', () => {
|
|
||||||
const mockStatuses = (ids) => ids.map(id => ({ id }))
|
|
||||||
|
|
||||||
it('should return only members of both pinnedStatusIds and ids of the given statuses', () => {
|
|
||||||
const statusIds = [1, 2, 3, 4]
|
|
||||||
const statuses = mockStatuses(statusIds)
|
|
||||||
const pinnedStatusIds = [1, 3, 5]
|
|
||||||
const result = getExcludedStatusIdsByPinning(statuses, pinnedStatusIds)
|
|
||||||
result.forEach(item => {
|
|
||||||
expect(item).to.be.oneOf(statusIds)
|
|
||||||
expect(item).to.be.oneOf(pinnedStatusIds)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should return ids of pinned statuses not posted before any unpinned status', () => {
|
|
||||||
const pinnedStatusIdSet1 = ['PINNED1', 'PINNED2']
|
|
||||||
const pinnedStatusIdSet2 = ['PINNED3', 'PINNED4']
|
|
||||||
const pinnedStatusIds = [...pinnedStatusIdSet1, ...pinnedStatusIdSet2]
|
|
||||||
const statusIds = [...pinnedStatusIdSet1, 'UNPINNED1', ...pinnedStatusIdSet2]
|
|
||||||
const statuses = mockStatuses(statusIds)
|
|
||||||
expect(getExcludedStatusIdsByPinning(statuses, pinnedStatusIds)).to.eql(pinnedStatusIdSet1)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
Loading…
Reference in New Issue