format entries, do not load on end, loading by click on another card/board

Signed-off-by: Jakob <jakob.roehrl@web.de>
This commit is contained in:
Jakob
2019-08-27 11:24:37 +02:00
committed by Julius Härtl
parent 9f62a24450
commit 001aaa4dcd
3 changed files with 43 additions and 12 deletions

View File

@@ -7,12 +7,12 @@
<span v-html="parseMessage(entry)" /> <span v-html="parseMessage(entry)" />
<span> {{ getTime(entry.datetime) }} </span> <span> {{ getTime(entry.datetime) }} </span>
</div> </div>
<button @click="loadMore">Load More</button> <button v-if="activityLoadMore" @click="loadMore">Load More</button>
</div> </div>
</template> </template>
<script> <script>
import { mapGetters } from 'vuex' import { mapState } from 'vuex'
export default { export default {
name: 'TimelineTabSidebard', name: 'TimelineTabSidebard',
@@ -36,8 +36,9 @@ export default {
} }
}, },
computed: { computed: {
...mapGetters({ ...mapState({
boardActivity: 'activity' boardActivity: 'activity',
activityLoadMore: 'activityLoadMore'
}) })
}, },
created() { created() {

View File

@@ -81,10 +81,10 @@
<div v-if="isLoading" class="icon icon-loading" /> <div v-if="isLoading" class="icon icon-loading" />
<div v-for="entry in cardActivity" v-else :key="entry.activity_id"> <div v-for="entry in cardActivity" v-else :key="entry.activity_id">
<img :src="entry.icon"> <img :src="entry.icon">
{{ entry.subject }} <span v-html="parseMessage(entry)" />
{{ getTime(entry.datetime) }} {{ getTime(entry.datetime) }}
</div> </div>
<button @click="loadMore">Load More</button> <button v-if="activityLoadMore" @click="loadMore">Load More</button>
</AppSidebarTab> </AppSidebarTab>
</app-sidebar> </app-sidebar>
</template> </template>
@@ -142,7 +142,8 @@ export default {
...mapState({ ...mapState({
currentBoard: state => state.currentBoard, currentBoard: state => state.currentBoard,
assignableUsers: state => state.assignableUsers, assignableUsers: state => state.assignableUsers,
cardActivity: 'activity' cardActivity: 'activity',
activityLoadMore: 'activityLoadMore'
}), }),
currentCard() { currentCard() {
return this.$store.getters.cardById(this.id) return this.$store.getters.cardById(this.id)
@@ -175,8 +176,16 @@ export default {
handler() { handler() {
this.copiedCard = JSON.parse(JSON.stringify(this.currentCard)) this.copiedCard = JSON.parse(JSON.stringify(this.currentCard))
this.allLabels = this.currentCard.labels this.allLabels = this.currentCard.labels
this.assignedUsers = this.currentCard.assignedUsers.map((item) => item.participant)
if (this.currentCard.assignedUsers.length > 0) {
this.assignedUsers = this.currentCard.assignedUsers.map((item) => item.participant)
}
this.desc = this.currentCard.description
this.updateRelativeTimestamps() this.updateRelativeTimestamps()
this.params.object_id = this.id
this.loadCardActivity()
} }
}, },
@@ -261,6 +270,15 @@ export default {
this.params.since = aId this.params.since = aId
this.loadCardActivity() this.loadCardActivity()
}, },
parseMessage(activity) {
let subject = activity.subject_rich[0]
let parameters = activity.subject_rich[1]
if (parameters.after && typeof parameters.after.id === 'string' && parameters.after.id.startsWith('dt:')) {
let dateTime = parameters.after.id.substr(3)
parameters.after.name = window.moment(dateTime).format('L LTS')
}
return OCA.Activity.RichObjectStringParser.parseMessage(subject, parameters)
},
clickAddNewAttachmment() { clickAddNewAttachmment() {
} }

View File

@@ -55,7 +55,8 @@ export default new Vuex.Store({
sharees: [], sharees: [],
assignableUsers: [], assignableUsers: [],
boardFilter: BOARD_FILTERS.ALL, boardFilter: BOARD_FILTERS.ALL,
activity: [] activity: [],
activityLoadMore: true
}, },
getters: { getters: {
boards: state => { boards: state => {
@@ -64,9 +65,6 @@ export default new Vuex.Store({
sharees: state => { sharees: state => {
return state.sharees return state.sharees
}, },
activity: state => {
return state.activity
},
noneArchivedBoards: state => { noneArchivedBoards: state => {
return state.boards.filter(board => { return state.boards.filter(board => {
return board.archived === false && !board.deletedAt return board.archived === false && !board.deletedAt
@@ -152,6 +150,12 @@ export default new Vuex.Store({
}) })
}, },
clearActivity(state) {
state.activity = []
},
setActivityLoadMore(state, value) {
state.activityLoadMore = value
},
setAssignableUsers(state, users) { setAssignableUsers(state, users) {
state.assignableUsers = users state.assignableUsers = users
}, },
@@ -288,12 +292,20 @@ export default new Vuex.Store({
params.append('object_type', obj.object_type) params.append('object_type', obj.object_type)
params.append('object_id', obj.object_id) params.append('object_id', obj.object_id)
if (obj.since === 0) {
commit('clearActivity')
}
let keyword = 'deck' let keyword = 'deck'
if (obj.type === 'filter') { if (obj.type === 'filter') {
keyword = 'filter' keyword = 'filter'
} }
axios.get(OC.linkToOCS('apps/activity/api/v2/activity') + keyword, { params }).then((response) => { axios.get(OC.linkToOCS('apps/activity/api/v2/activity') + keyword, { params }).then((response) => {
commit('setActivity', response.data.ocs.data) commit('setActivity', response.data.ocs.data)
commit('setActivityLoadMore', true)
if (response.data.ocs.meta.statuscode === 304) {
commit('setActivityLoadMore', false)
}
}) })
}, },