Task page - task filters v2 (#10053)
* update column.vue, getters/task.js, getters/user.js and add unittests and helpers * add vue-test-utils pkg + unit test for column.vue * add unit test column.vue * update unit tests * fix linting errors
This commit is contained in:
committed by
Matteo Pagliazzi
parent
68ea28305d
commit
e18e89bc10
@@ -1,5 +1,11 @@
|
||||
import { shouldDo } from 'common/script/cron';
|
||||
|
||||
// Library / Utility function
|
||||
import { orderSingleTypeTasks } from 'client/libs/store/helpers/orderTasks.js';
|
||||
import { getActiveFilter } from 'client/libs/store/helpers/filterTasks.js';
|
||||
|
||||
import sortBy from 'lodash/sortBy';
|
||||
|
||||
// Return all the tags belonging to an user task
|
||||
export function getTagsFor (store) {
|
||||
return (task) => {
|
||||
@@ -109,3 +115,47 @@ export function getTaskClasses (store) {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// Returns all list for given task type
|
||||
export function getUnfilteredTaskList ({state}) {
|
||||
return (type) => state.tasks.data[`${type}s`];
|
||||
}
|
||||
|
||||
// Returns filtered, sorted, ordered, tag filtered, and search filtered task list
|
||||
// @TODO: sort task list based on used preferences
|
||||
export function getFilteredTaskList ({state, getters}) {
|
||||
return ({
|
||||
type,
|
||||
filterType = '',
|
||||
}) => {
|
||||
// get requested tasks
|
||||
// check if task list has been passed as override props
|
||||
// assumption: type will always be passed as param
|
||||
let requestedTasks = getters['tasks:getUnfilteredTaskList'](type);
|
||||
|
||||
let userPreferences = state.user.data.preferences;
|
||||
let taskOrderForType = state.user.data.tasksOrder[type];
|
||||
|
||||
// order tasks based on user set task order
|
||||
// Still needs unit test for this..
|
||||
if (requestedTasks.length > 0 && ['scheduled', 'due'].indexOf(filterType.label) === -1) {
|
||||
requestedTasks = orderSingleTypeTasks(requestedTasks, taskOrderForType);
|
||||
}
|
||||
|
||||
let selectedFilter = getActiveFilter(type, filterType);
|
||||
// Pass user preferences to the filter function which uses currying
|
||||
if (type === 'daily' && (filterType === 'due' || filterType === 'notDue')) {
|
||||
selectedFilter = {
|
||||
...selectedFilter,
|
||||
filterFn: selectedFilter.filterFn(userPreferences),
|
||||
};
|
||||
}
|
||||
|
||||
requestedTasks = requestedTasks.filter(selectedFilter.filterFn);
|
||||
if (selectedFilter.sort) {
|
||||
requestedTasks = sortBy(requestedTasks, selectedFilter.sort);
|
||||
}
|
||||
|
||||
return requestedTasks;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -4,4 +4,16 @@ export function data (store) {
|
||||
|
||||
export function gems (store) {
|
||||
return store.state.user.data.balance * 4;
|
||||
}
|
||||
}
|
||||
|
||||
export function buffs (store) {
|
||||
return (key) => store.state.user.data.stats.buffs[key];
|
||||
}
|
||||
|
||||
export function preferences (store) {
|
||||
return store.state.user.data.preferences;
|
||||
}
|
||||
|
||||
export function tasksOrder (store) {
|
||||
return (type) => store.state.user.tasksOrder[`${type}s`];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user