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:
kartik adur
2018-03-18 20:53:58 +05:30
committed by Matteo Pagliazzi
parent 68ea28305d
commit e18e89bc10
11 changed files with 714 additions and 137 deletions
+50
View File
@@ -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;
};
}
+13 -1
View File
@@ -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`];
}