Some cleanup on the filtering
Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
@@ -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'],
|
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -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));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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])
|
||||||
|
|||||||
@@ -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
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user