Some cleanup on the filtering

Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
Julius Härtl
2020-08-24 15:08:46 +02:00
parent 7a1acaf2dd
commit 0b23401a07
8 changed files with 25 additions and 72 deletions

View File

@@ -136,7 +136,6 @@ return [
['name' => 'comments_api#delete', 'url' => '/api/v1.0/cards/{cardId}/comments/{commentId}', 'verb' => 'DELETE'], ['name' => 'comments_api#delete', 'url' => '/api/v1.0/cards/{cardId}/comments/{commentId}', 'verb' => 'DELETE'],
// dashboard // dashboard
['name' => 'overview_api#findAllWithDue', 'url' => '/api/v1.0/overview/due', 'verb' => 'GET'], ['name' => 'overview_api#upcomingCards', 'url' => '/api/v1.0/overview/upcoming', 'verb' => 'GET'],
['name' => 'overview_api#findAssignedCards', 'url' => '/api/v1.0/overview/assigned', 'verb' => 'GET'],
] ]
]; ];

View File

@@ -48,14 +48,7 @@ class OverviewApiController extends OCSController {
/** /**
* @NoAdminRequired * @NoAdminRequired
*/ */
public function findAllWithDue(): DataResponse { public function upcomingCards(): DataResponse {
return new DataResponse($this->dashboardService->findAllWithDue($this->userId)); return new DataResponse($this->dashboardService->findUpcomingCards($this->userId));
}
/**
* @NoAdminRequired
*/
public function findAssignedCards(): DataResponse {
return new DataResponse($this->dashboardService->findAssignedCards($this->userId));
} }
} }

View File

@@ -107,13 +107,13 @@ class OverviewService {
return $allDueCards; return $allDueCards;
} }
public function findAssignedCards(string $userId): array { public function findUpcomingCards(string $userId): array {
$userBoards = $this->findAllBoardsFromUser($userId); $userBoards = $this->findAllBoardsFromUser($userId);
$findCards = []; $findCards = [];
foreach ($userBoards as $userBoard) { foreach ($userBoards as $userBoard) {
$service = $this; $service = $this;
if (count($userBoard->getAcl()) == 0) { if (count($userBoard->getAcl()) === 0) {
// get cards with due date // get cards with due date
$findCards[] = array_map(static function ($card) use ($service, $userBoard, $userId) { $findCards[] = array_map(static function ($card) use ($service, $userBoard, $userId) {
$service->enrich($card, $userId); $service->enrich($card, $userId);
@@ -130,13 +130,11 @@ class OverviewService {
return $cardData; return $cardData;
}, $this->cardMapper->findAssignedCards($userBoard->getId(), $userId)); }, $this->cardMapper->findAssignedCards($userBoard->getId(), $userId));
} }
} }
return $findCards; return $findCards;
} }
// FIXME: This is duplicate code with the board service // FIXME: This is duplicate code with the board service
private function findAllBoardsFromUser(string $userId): array { private function findAllBoardsFromUser(string $userId): array {
$userInfo = $this->getBoardPrerequisites($userId); $userInfo = $this->getBoardPrerequisites($userId);
$userBoards = $this->boardMapper->findAllByUser($userInfo['user'], null, null); $userBoards = $this->boardMapper->findAllByUser($userInfo['user'], null, null);

View File

@@ -26,7 +26,7 @@
<AppNavigationItem <AppNavigationItem
:title="t('deck', 'Upcoming cards')" :title="t('deck', 'Upcoming cards')"
icon="icon-desktop" icon="icon-desktop"
to="/overview/assigned" /> to="/" />
<AppNavigationBoardCategory <AppNavigationBoardCategory
id="deck-navigation-all" id="deck-navigation-all"
to="/board" to="/board"

View File

@@ -85,12 +85,10 @@ import CardItem from '../cards/CardItem'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import moment from '@nextcloud/moment' import moment from '@nextcloud/moment'
const FILTER_DUE = 'due' const FILTER_UPCOMING = 'upcoming'
const FILTER_ASSIGNED = 'assigned'
const SUPPORTED_FILTERS = [ const SUPPORTED_FILTERS = [
FILTER_ASSIGNED, FILTER_UPCOMING,
FILTER_DUE,
] ]
export default { export default {
@@ -102,7 +100,7 @@ export default {
props: { props: {
filter: { filter: {
type: String, type: String,
default: FILTER_ASSIGNED, default: FILTER_UPCOMING,
}, },
}, },
data() { data() {
@@ -116,25 +114,21 @@ export default {
}, },
filterDisplayName() { filterDisplayName() {
switch (this.filter) { switch (this.filter) {
case FILTER_ASSIGNED: case FILTER_UPCOMING:
return t('deck', 'Upcoming cards') return t('deck', 'Upcoming cards')
default: default:
return '' return ''
} }
}, },
...mapGetters([ ...mapGetters([
'withDueDashboard',
'assignedCardsDashboard', 'assignedCardsDashboard',
]), ]),
cardsByDueDate() { cardsByDueDate() {
switch (this.filter) { switch (this.filter) {
case FILTER_ASSIGNED: case FILTER_UPCOMING:
return this.groupByDue(this.assignedCardsDashboard) return this.groupByDue(this.assignedCardsDashboard)
case FILTER_DUE:
return this.groupByDue(this.withDueDashboard)
default:
return null
} }
return null
}, },
}, },
watch: { watch: {
@@ -149,12 +143,8 @@ export default {
async getData() { async getData() {
this.loading = true this.loading = true
try { try {
if (this.filter === 'due') { if (this.filter === FILTER_UPCOMING) {
await this.$store.dispatch('loadDueDashboard') await this.$store.dispatch('loadUpcoming')
}
if (this.filter === 'assigned') {
await this.$store.dispatch('loadAssignDashboard')
} }
} catch (e) { } catch (e) {
console.error(e) console.error(e)
@@ -172,7 +162,6 @@ export default {
later: [], later: [],
} }
dataset.forEach(card => { dataset.forEach(card => {
if (card.duedate === null) { if (card.duedate === null) {
all.nodue.push(card) all.nodue.push(card)
} else { } else {
@@ -195,10 +184,13 @@ export default {
all.later.push(card) all.later.push(card)
} }
} }
})
Object.keys(all).forEach((list) => {
all[list] = all[list].sort((a, b) => {
return (new Date(a.duedate)).getTime() - (new Date(b.duedate)).getTime()
})
}) })
return all return all
}, },
}, },

View File

@@ -29,20 +29,8 @@ export class OverviewApi {
return generateOcsUrl(`apps/deck/api/v1.0`) + url return generateOcsUrl(`apps/deck/api/v1.0`) + url
} }
findAllWithDue(data) { get(filter) {
return axios.get(this.url(`overview/due`), { return axios.get(this.url(`overview/${filter}`), {
headers: { 'OCS-APIRequest': 'true' },
})
.then(
(response) => Promise.resolve(response.data.ocs.data),
(err) => Promise.reject(err)
)
.catch((err) => Promise.reject(err)
)
}
findMyAssignedCards(data) {
return axios.get(this.url(`overview/assigned`), {
headers: { 'OCS-APIRequest': 'true' }, headers: { 'OCS-APIRequest': 'true' },
}) })
.then( .then(

View File

@@ -28,39 +28,22 @@ Vue.use(Vuex)
const apiClient = new OverviewApi() const apiClient = new OverviewApi()
export default { export default {
state: { state: {
withDue: [],
assignedCards: [], assignedCards: [],
}, },
getters: { getters: {
withDueDashboard: state => {
return state.withDue
},
assignedCardsDashboard: state => { assignedCardsDashboard: state => {
return state.assignedCards return state.assignedCards
}, },
}, },
mutations: { mutations: {
setWithDueDashboard(state, withDue) {
state.withDue = withDue
},
setAssignedCards(state, assignedCards) { setAssignedCards(state, assignedCards) {
state.assignedCards = assignedCards state.assignedCards = assignedCards
}, },
}, },
actions: { actions: {
async loadDueDashboard({ commit }) { async loadUpcoming({ commit }) {
commit('setCurrentBoard', null) commit('setCurrentBoard', null)
const cardsWithDueDate = await apiClient.findAllWithDue() const assignedCards = await apiClient.get('upcoming')
const withDueFlat = cardsWithDueDate.flat()
for (const i in withDueFlat) {
commit('addCard', withDueFlat[i])
}
commit('setWithDueDashboard', withDueFlat)
},
async loadAssignDashboard({ commit }) {
commit('setCurrentBoard', null)
const assignedCards = await apiClient.findMyAssignedCards()
const assignedCardsFlat = assignedCards.flat() const assignedCardsFlat = assignedCards.flat()
for (const i in assignedCardsFlat) { for (const i in assignedCardsFlat) {
commit('addCard', assignedCardsFlat[i]) commit('addCard', assignedCardsFlat[i])

View File

@@ -100,7 +100,7 @@ export default {
}, },
beforeMount() { beforeMount() {
this.loading = true this.loading = true
this.$store.dispatch('loadAssignDashboard').then(() => { this.$store.dispatch('loadUpcoming').then(() => {
this.loading = false this.loading = false
}) })
}, },