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
					
				
					 3 changed files with 1 additions and 46 deletions
				
			
		| 
						 | 
				
			
			@ -12,19 +12,6 @@ library.add(
 | 
			
		|||
  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 = {
 | 
			
		||||
  props: [
 | 
			
		||||
    'timeline',
 | 
			
		||||
| 
						 | 
				
			
			@ -77,11 +64,6 @@ const Timeline = {
 | 
			
		|||
      }
 | 
			
		||||
    },
 | 
			
		||||
    // 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 () {
 | 
			
		||||
      return keyBy(this.pinnedStatusIds)
 | 
			
		||||
    },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,7 +37,7 @@
 | 
			
		|||
        </template>
 | 
			
		||||
        <template v-for="status in timeline.visibleStatuses">
 | 
			
		||||
          <conversation
 | 
			
		||||
            v-if="!excludedStatusIdsObject[status.id]"
 | 
			
		||||
            v-if="timelineName !== 'user' || (status.id >= timeline.minId && status.id <= timeline.maxId)"
 | 
			
		||||
            :key="status.id"
 | 
			
		||||
            class="status-fadein"
 | 
			
		||||
            :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 a new issue