07ae4134f3
commit 0db0a69f0fa00d831b7d90340e045097e8d92343 Author: Sabe Jones <sabrecat@gmail.com> Date: Tue Jul 16 10:01:49 2019 -0500 fix(groups): return 0, not empty, when skipping downscore on Dailies fixes #11231 commit 1bf5bc714f660345f37bcc4e3587143341521c65 Author: Sabe Jones <sabrecat@gmail.com> Date: Tue Jul 16 09:48:28 2019 -0500 fix(groups): correct task creation button commit 90908211200bc4a3eb204178df5c812ffcd09f37 Author: Sabe Jones <sabrecat@gmail.com> Date: Tue Jul 16 09:46:04 2019 -0500 fix(groups): clear approval status at cron for Habits and Dailies commit 57e8dd0252c3ea45dd6fa1a7670ee197f32e76e5 Merge: d31b0a2d0c9a56e8f3Author: Sabe Jones <sabrecat@gmail.com> Date: Tue Jul 16 09:33:27 2019 -0500 Merge branch 'develop' into sabrecat/group-tasks commit d31b0a2d0e3b7a46235696e9b05fa734ac29a2e5 Merge: f2185a91b043696c22Author: SabreCat <sabrecat@gmail.com> Date: Mon Jun 24 14:58:26 2019 +0000 Merge branch 'develop' into sabrecat/group-tasks commit f2185a91bde554c7eb22cd6bdfc1ef9227f1e765 Author: Sabe Jones <sabrecat@gmail.com> Date: Tue Jun 18 10:10:10 2019 -0500 fix(groups): divide task delta by number of assigned users commit af0cde52f22129312d0102ecc5571f59aa2e396e Author: Sabe Jones <sabrecat@gmail.com> Date: Tue Jun 18 10:06:01 2019 -0500 fix(groups): remove chat spam commit c1c810967a9e34155948a9164862125517372268 Merge: bf4f3fb08f987585cfAuthor: Sabe Jones <sabrecat@gmail.com> Date: Tue Jun 18 08:15:28 2019 -0500 Merge branch 'develop' into sabrecat/group-tasks commit bf4f3fb08491b4c4e1dbfaa58a2a6510c3cb78aa Author: Sabe Jones <sabrecat@gmail.com> Date: Thu May 23 11:29:01 2019 -0500 fix(test): expect new task class from store commit ae0379c80519523f68d4d606e1cc4bed8e9e49ec Merge: ce5096e11664cf5a47Author: Sabe Jones <sabrecat@gmail.com> Date: Thu May 23 11:25:15 2019 -0500 Merge branch 'develop' into sabrecat/group-tasks commit ce5096e116558419e4a73e8b23a58c78a1f2ab9b Author: Sabe Jones <sabrecat@gmail.com> Date: Thu May 23 11:02:01 2019 -0500 feat(group-plans): clarify non-interactive controls on task board commit ff3cec9530e30d51c43171d6f97d3888ff200352 Author: Sabe Jones <sabrecat@gmail.com> Date: Tue May 21 11:10:50 2019 -0500 feat(group-plans): score shared task when user scores it
163 lines
5.5 KiB
JavaScript
163 lines
5.5 KiB
JavaScript
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) => {
|
|
return store.state.user.data.tags
|
|
.filter(tag => task.tags && task.tags.indexOf(tag.id) !== -1)
|
|
.map(tag => tag.name);
|
|
};
|
|
}
|
|
|
|
function getTaskColor (task) {
|
|
if (task.type === 'reward') return 'purple';
|
|
|
|
const value = task.value;
|
|
|
|
if (value < -20) {
|
|
return 'worst';
|
|
} else if (value < -10) {
|
|
return 'worse';
|
|
} else if (value < -1) {
|
|
return 'bad';
|
|
} else if (value < 1) {
|
|
return 'neutral';
|
|
} else if (value < 5) {
|
|
return 'good';
|
|
} else if (value < 10) {
|
|
return 'better';
|
|
} else {
|
|
return 'best';
|
|
}
|
|
}
|
|
|
|
export function canDelete () {
|
|
return (task) => {
|
|
let isUserChallenge = Boolean(task.userId);
|
|
let activeChallenge = isUserChallenge && task.challenge && task.challenge.id && !task.challenge.broken;
|
|
return !activeChallenge;
|
|
};
|
|
}
|
|
|
|
export function getTaskClasses (store) {
|
|
const userPreferences = store.state.user.data.preferences;
|
|
|
|
// Purpose can be one of the following strings:
|
|
// Edit Modal: edit-modal-bg, edit-modal-text, edit-modal-icon
|
|
// Create Modal: create-modal-bg, create-modal-text, create-modal-icon
|
|
// Control: 'control'
|
|
return (task, purpose, dueDate) => {
|
|
if (!dueDate) dueDate = new Date();
|
|
const type = task.type;
|
|
const color = getTaskColor(task);
|
|
|
|
switch (purpose) {
|
|
case 'edit-modal-bg':
|
|
return `task-${color}-modal-bg`;
|
|
case 'edit-modal-text':
|
|
return `task-${color}-modal-text`;
|
|
case 'edit-modal-icon':
|
|
return `task-${color}-modal-icon`;
|
|
case 'edit-modal-option-disabled':
|
|
return `task-${color}-modal-option-disabled`;
|
|
case 'edit-modal-habit-control-disabled':
|
|
return `task-${color}-modal-habit-control-disabled`;
|
|
case 'create-modal-bg':
|
|
return 'task-purple-modal-bg';
|
|
case 'create-modal-text':
|
|
return 'task-purple-modal-text';
|
|
case 'create-modal-icon':
|
|
return 'task-purple-modal-icon';
|
|
case 'create-modal-option-disabled':
|
|
return 'task-purple-modal-option-disabled';
|
|
case 'create-modal-habit-control-disabled':
|
|
return 'task-purple-modal-habit-control-disabled';
|
|
|
|
case 'control':
|
|
if (type === 'todo' || type === 'daily') {
|
|
if (task.completed || !shouldDo(dueDate, task, userPreferences) && type === 'daily') {
|
|
return {
|
|
bg: 'task-disabled-daily-todo-control-bg',
|
|
checkbox: 'task-disabled-daily-todo-control-checkbox',
|
|
inner: 'task-disabled-daily-todo-control-inner',
|
|
content: 'task-disabled-daily-todo-control-content',
|
|
};
|
|
}
|
|
|
|
return {
|
|
bg: `task-${color}-control-bg`,
|
|
checkbox: `task-${color}-control-checkbox`,
|
|
inner: `task-${color}-control-inner-daily-todo`,
|
|
icon: `task-${color}-control-icon`,
|
|
};
|
|
} else if (type === 'reward') {
|
|
return {
|
|
bg: 'task-reward-control-bg',
|
|
};
|
|
} else if (type === 'habit') {
|
|
return {
|
|
up: task.up ?
|
|
{ bg: `task-${color}-control-bg`, inner: `task-${color}-control-inner-habit`, icon: `task-${color}-control-icon`} :
|
|
{ bg: 'task-disabled-habit-control-bg', inner: 'task-disabled-habit-control-inner', icon: `task-${color}-control-icon` },
|
|
down: task.down ?
|
|
{ bg: `task-${color}-control-bg`, inner: `task-${color}-control-inner-habit`, icon: `task-${color}-control-icon`} :
|
|
{ bg: 'task-disabled-habit-control-bg', inner: 'task-disabled-habit-control-inner', icon: `task-${color}-control-icon` },
|
|
};
|
|
}
|
|
break;
|
|
default:
|
|
return 'not a valid class';
|
|
}
|
|
};
|
|
}
|
|
|
|
// 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;
|
|
};
|
|
}
|