@zeniai/client-epic-state 5.0.11-betaND1 → 5.0.11-betaRR2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/entity/file/fileState.d.ts +4 -4
- package/lib/entity/file/fileState.js +4 -0
- package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
- package/lib/entity/snackbar/snackbarTypes.js +2 -0
- package/lib/entity/task/taskPayload.d.ts +3 -1
- package/lib/entity/task/taskPayload.js +5 -3
- package/lib/entity/task/taskState.d.ts +3 -1
- package/lib/entity/transaction/stateTypes/attachment.d.ts +2 -2
- package/lib/epic.d.ts +3 -2
- package/lib/epic.js +3 -2
- package/lib/esm/entity/file/fileState.js +4 -0
- package/lib/esm/entity/snackbar/snackbarTypes.js +2 -0
- package/lib/esm/entity/task/taskPayload.js +5 -3
- package/lib/esm/epic.js +3 -2
- package/lib/esm/index.js +4 -4
- package/lib/esm/view/spendManagement/billPay/billDetailView/epics/fetchBillDetailEpic.js +5 -5
- package/lib/esm/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +3 -0
- package/lib/esm/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +5 -0
- package/lib/esm/view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic.js +1 -0
- package/lib/esm/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +1 -0
- package/lib/esm/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +65 -0
- package/lib/esm/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +56 -0
- package/lib/esm/view/taskManager/taskDetailView/taskDetail.js +4 -0
- package/lib/esm/view/taskManager/taskDetailView/taskDetailReducer.js +51 -1
- package/lib/esm/view/taskManager/taskDetailView/taskDetailSelector.js +15 -2
- package/lib/esm/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +56 -21
- package/lib/esm/view/taskManager/taskListView/epics/dragNDropTasksEpic.js +1 -0
- package/lib/esm/view/taskManager/taskListView/epics/fetchTaskListEpic.js +12 -5
- package/lib/esm/view/taskManager/taskListView/epics/updateTaskFromListViewEpic.js +3 -2
- package/lib/esm/view/taskManager/taskListView/taskList.js +7 -0
- package/lib/esm/view/taskManager/taskListView/taskListPayload.js +1 -5
- package/lib/esm/view/taskManager/taskListView/taskListReducer.js +89 -39
- package/lib/esm/view/taskManager/taskListView/taskListSelector.js +51 -65
- package/lib/index.d.ts +4 -4
- package/lib/index.js +9 -6
- package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
- package/lib/view/spendManagement/billPay/billDetailView/epics/fetchBillDetailEpic.js +5 -5
- package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.d.ts +2 -1
- package/lib/view/taskManager/taskDetailView/epics/archiveTaskEpic.js +3 -0
- package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.d.ts +2 -1
- package/lib/view/taskManager/taskDetailView/epics/deleteTaskEpic.js +5 -0
- package/lib/view/taskManager/taskDetailView/epics/initializeTaskToLocalStoreEpic.js +1 -0
- package/lib/view/taskManager/taskDetailView/epics/saveTaskDetailEpic.js +1 -0
- package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.d.ts +9 -0
- package/lib/view/taskManager/taskDetailView/epics/snoozeTaskEpic.js +69 -0
- package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.d.ts +9 -0
- package/lib/view/taskManager/taskDetailView/epics/unsnoozeTaskEpic.js +60 -0
- package/lib/view/taskManager/taskDetailView/taskDetail.d.ts +2 -0
- package/lib/view/taskManager/taskDetailView/taskDetail.js +4 -0
- package/lib/view/taskManager/taskDetailView/taskDetailReducer.d.ts +10 -1
- package/lib/view/taskManager/taskDetailView/taskDetailReducer.js +52 -2
- package/lib/view/taskManager/taskDetailView/taskDetailSelector.d.ts +5 -0
- package/lib/view/taskManager/taskDetailView/taskDetailSelector.js +15 -2
- package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.d.ts +6 -7
- package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +56 -22
- package/lib/view/taskManager/taskListView/epics/dragNDropTasksEpic.js +1 -0
- package/lib/view/taskManager/taskListView/epics/fetchTaskListEpic.js +12 -5
- package/lib/view/taskManager/taskListView/epics/updateTaskFromListViewEpic.js +3 -2
- package/lib/view/taskManager/taskListView/taskList.d.ts +14 -3
- package/lib/view/taskManager/taskListView/taskList.js +8 -1
- package/lib/view/taskManager/taskListView/taskListPayload.d.ts +4 -31
- package/lib/view/taskManager/taskListView/taskListPayload.js +0 -7
- package/lib/view/taskManager/taskListView/taskListReducer.d.ts +9 -9
- package/lib/view/taskManager/taskListView/taskListReducer.js +90 -40
- package/lib/view/taskManager/taskListView/taskListSelector.d.ts +10 -7
- package/lib/view/taskManager/taskListView/taskListSelector.js +51 -65
- package/package.json +2 -2
- package/lib/esm/view/taskManager/taskListView/epics/createSubtaskFromListViewEpic.js +0 -31
- package/lib/view/taskManager/taskListView/epics/createSubtaskFromListViewEpic.d.ts +0 -8
- package/lib/view/taskManager/taskListView/epics/createSubtaskFromListViewEpic.js +0 -35
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getTaskPayload = exports.
|
|
6
|
+
exports.getTaskPayload = exports.bulkUpdateTaskListEpic = void 0;
|
|
7
7
|
const get_1 = __importDefault(require("lodash/get"));
|
|
8
8
|
const rxjs_1 = require("rxjs");
|
|
9
9
|
const operators_1 = require("rxjs/operators");
|
|
@@ -12,20 +12,25 @@ const formatZeniDateFY_1 = require("../../../../commonStateTypes/fiscalYearHelpe
|
|
|
12
12
|
const taskReducer_1 = require("../../../../entity/task/taskReducer");
|
|
13
13
|
const responsePayload_1 = require("../../../../responsePayload");
|
|
14
14
|
const taskListReducer_1 = require("../taskListReducer");
|
|
15
|
-
const bulkUpdateTaskListEpic = (actions$,
|
|
16
|
-
const state = state$.value;
|
|
15
|
+
const bulkUpdateTaskListEpic = (actions$, _state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(taskListReducer_1.bulkUpdateTaskList.match), (0, operators_1.switchMap)((action) => {
|
|
17
16
|
const { taskIds, updates, groupId } = action.payload;
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
const bulkUpdates = toBulkUpdatesPayload(updates);
|
|
18
|
+
if (groupId != null) {
|
|
19
|
+
bulkUpdates.task_group_ids = [groupId];
|
|
20
|
+
}
|
|
21
|
+
const payload = { task_ids: taskIds, updates: bulkUpdates };
|
|
21
22
|
return zeniAPI
|
|
22
|
-
.putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks`, payload)
|
|
23
|
+
.putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks/bulk-update`, payload)
|
|
23
24
|
.pipe((0, operators_1.mergeMap)((response) => {
|
|
24
25
|
if ((0, responsePayload_1.isSuccessResponse)(response) && response.data != null) {
|
|
26
|
+
const removeFromList = updates.isArchived === true ||
|
|
27
|
+
updates.isDeleted === true ||
|
|
28
|
+
('snoozedUntil' in updates && updates.snoozedUntil != null);
|
|
25
29
|
return (0, rxjs_1.of)((0, taskReducer_1.updateTasks)(response.data.tasks), (0, taskListReducer_1.updateTasksListOnBulkUpdateTasksSuccess)({
|
|
26
30
|
taskIds,
|
|
27
31
|
groupId,
|
|
28
|
-
|
|
32
|
+
removeFromList,
|
|
33
|
+
}), (0, taskListReducer_1.fetchTaskList)());
|
|
29
34
|
}
|
|
30
35
|
else {
|
|
31
36
|
return (0, rxjs_1.of)((0, taskListReducer_1.updateTasksListOnBulkUpdateTasksFailure)({
|
|
@@ -40,21 +45,47 @@ const bulkUpdateTaskListEpic = (actions$, state$, zeniAPI) => actions$.pipe((0,
|
|
|
40
45
|
}));
|
|
41
46
|
}));
|
|
42
47
|
exports.bulkUpdateTaskListEpic = bulkUpdateTaskListEpic;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
48
|
+
/**
|
|
49
|
+
* Helpers
|
|
50
|
+
*/
|
|
51
|
+
const toBulkUpdatesPayload = (updates) => {
|
|
52
|
+
const payload = {};
|
|
53
|
+
if (updates.status != null) {
|
|
54
|
+
payload.status = updates.status.code;
|
|
55
|
+
}
|
|
56
|
+
if (updates.priority != null) {
|
|
57
|
+
payload.priority = updates.priority.code;
|
|
58
|
+
}
|
|
59
|
+
if (updates.assignees != null) {
|
|
60
|
+
payload.assignees = updates.assignees;
|
|
61
|
+
}
|
|
62
|
+
if (updates.groupAssignees != null) {
|
|
63
|
+
payload.group_assignees = updates.groupAssignees;
|
|
64
|
+
}
|
|
65
|
+
if (updates.dueDate != null) {
|
|
66
|
+
payload.due_date = updates.dueDate.format(formatZeniDateFY_1.DEFAULT_DATE_FORMAT);
|
|
67
|
+
}
|
|
68
|
+
if (updates.tagIds != null) {
|
|
69
|
+
payload.tags = updates.tagIds;
|
|
70
|
+
}
|
|
71
|
+
if (updates.timeSpent != null) {
|
|
72
|
+
payload.time_spent = (0, formatMinutesToFromHHMM_1.convertHHMMStrToMinutes)(updates.timeSpent.replace(/\D/g, ''));
|
|
73
|
+
}
|
|
74
|
+
if (updates.isArchived != null) {
|
|
75
|
+
payload.is_archived = updates.isArchived;
|
|
76
|
+
}
|
|
77
|
+
if (updates.isDeleted != null) {
|
|
78
|
+
payload.is_deleted = updates.isDeleted;
|
|
79
|
+
}
|
|
80
|
+
// Bulk snooze is not supported — only bulk unsnooze (clear all snooze fields)
|
|
81
|
+
if ('snoozedUntil' in updates) {
|
|
82
|
+
payload.snoozed_until = null;
|
|
83
|
+
payload.snoozed_by = null;
|
|
84
|
+
payload.snoozed_at = null;
|
|
85
|
+
payload.is_snooze_notification_sent = false;
|
|
86
|
+
}
|
|
87
|
+
return payload;
|
|
56
88
|
};
|
|
57
|
-
exports.getTasksListPayload = getTasksListPayload;
|
|
58
89
|
const getTaskPayload = (state, taskId, updates) => {
|
|
59
90
|
const { taskState } = state;
|
|
60
91
|
const taskData = (0, get_1.default)(taskState.taskByID, taskId);
|
|
@@ -80,6 +111,9 @@ const toTaskPayload = (state, task) => {
|
|
|
80
111
|
assignees: task.assignees,
|
|
81
112
|
description: task.description,
|
|
82
113
|
group_assignees: task.groupAssignees,
|
|
114
|
+
is_archived: task.isArchived,
|
|
115
|
+
is_deleted: task.isDeleted,
|
|
116
|
+
snoozed_until: task.snoozedUntil != null ? task.snoozedUntil.toISOString() : null,
|
|
83
117
|
due_date: task.dueDate != null ? task.dueDate.format(formatZeniDateFY_1.DEFAULT_DATE_FORMAT) : null,
|
|
84
118
|
priority: task.priority.code,
|
|
85
119
|
status: task.status.code,
|
|
@@ -14,6 +14,7 @@ const dragNDropTasksEpic = (actions$, state$) => actions$.pipe((0, operators_1.f
|
|
|
14
14
|
(0, taskListReducer_1.updateTasksListOnBulkUpdateTasksSuccess)({
|
|
15
15
|
taskIds,
|
|
16
16
|
groupId,
|
|
17
|
+
removeFromList: false,
|
|
17
18
|
}),
|
|
18
19
|
(0, taskListReducer_1.bulkUpdateTaskList)(taskIds, groupId, updates),
|
|
19
20
|
];
|
|
@@ -6,19 +6,26 @@ const operators_1 = require("rxjs/operators");
|
|
|
6
6
|
const tagReducer_1 = require("../../../../entity/tag/tagReducer");
|
|
7
7
|
const taskReducer_1 = require("../../../../entity/task/taskReducer");
|
|
8
8
|
const responsePayload_1 = require("../../../../responsePayload");
|
|
9
|
-
const taskListPayload_1 = require("../taskListPayload");
|
|
10
9
|
const taskListReducer_1 = require("../taskListReducer");
|
|
11
10
|
const fetchTaskListEpic = (actions$, _state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(taskListReducer_1.fetchTaskList.match), (0, operators_1.switchMap)(() => {
|
|
12
11
|
return zeniAPI
|
|
13
12
|
.getJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks?query=${encodeURIComponent(`{"task_type": "all"}`)}`)
|
|
14
13
|
.pipe((0, operators_1.mergeMap)((response) => {
|
|
15
14
|
if ((0, responsePayload_1.isSuccessResponse)(response) && response.data != null) {
|
|
16
|
-
const { tasks } = response.data;
|
|
17
|
-
const
|
|
18
|
-
|
|
15
|
+
const { tasks, deleted, archived, snoozed } = response.data;
|
|
16
|
+
const allTasks = [
|
|
17
|
+
...tasks,
|
|
18
|
+
...(deleted ?? []),
|
|
19
|
+
...(archived ?? []),
|
|
20
|
+
...(snoozed ?? []),
|
|
21
|
+
];
|
|
22
|
+
return (0, rxjs_1.of)((0, taskReducer_1.updateTasks)(allTasks), (0, taskListReducer_1.updateTaskList)({
|
|
19
23
|
data: tasks,
|
|
24
|
+
deleted: deleted ?? [],
|
|
25
|
+
archived: archived ?? [],
|
|
26
|
+
snoozed: snoozed ?? [],
|
|
20
27
|
updateType: 'replace',
|
|
21
|
-
}), (0, tagReducer_1.updateTags)(
|
|
28
|
+
}), (0, tagReducer_1.updateTags)(allTasks.map((task) => task.tags).flat()));
|
|
22
29
|
}
|
|
23
30
|
else {
|
|
24
31
|
return (0, rxjs_1.of)((0, taskListReducer_1.updateTaskListFetchStatus)({
|
|
@@ -11,9 +11,10 @@ const updateTaskFromListViewEpic = (actions$, state$, zeniAPI) => actions$.pipe(
|
|
|
11
11
|
const state = state$.value;
|
|
12
12
|
const { task, updates } = action.payload;
|
|
13
13
|
const taskId = task.id;
|
|
14
|
-
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
15
|
+
const { snoozed_until: _snoozedUntil, ...taskData } = (0, bulkUpdateTaskListEpic_1.getTaskPayload)(state, taskId, updates);
|
|
15
16
|
return zeniAPI
|
|
16
|
-
.putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks/${taskId}`,
|
|
17
|
+
.putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks/${taskId}`, taskData)
|
|
17
18
|
.pipe((0, operators_1.mergeMap)((response) => {
|
|
18
19
|
if ((0, responsePayload_1.isSuccessResponse)(response) && response.data != null) {
|
|
19
20
|
return (0, rxjs_1.from)([
|
|
@@ -3,6 +3,17 @@ import { PriorityCodeType, TaskStatusCodeType } from '../../../entity/task/taskS
|
|
|
3
3
|
import { ZeniDate } from '../../../zeniDayJS';
|
|
4
4
|
import { SpendManagementUIState } from '../../spendManagement/billPay/billList/billListState';
|
|
5
5
|
import { CategoryCombinationOperator, FilterCategoryType } from '../../spendManagement/spendManagementFilterHelpers';
|
|
6
|
+
export declare const ALL_TASK_LIST_TABS: readonly ["live", "archived", "deleted", "snoozed"];
|
|
7
|
+
export type TaskListTab = (typeof ALL_TASK_LIST_TABS)[number];
|
|
8
|
+
export interface TaskListTabData {
|
|
9
|
+
taskIds: ID[];
|
|
10
|
+
taskIdsByAssignees: Record<ID, ID[]>;
|
|
11
|
+
taskIdsByDueDate: Record<DueDateGroupKey, ID[]>;
|
|
12
|
+
taskIdsByGroupsIds: Record<ID, ID[]>;
|
|
13
|
+
taskIdsByPriority: Record<PriorityCodeType, ID[]>;
|
|
14
|
+
taskIdsByStatus: Record<TaskStatusCodeType, ID[]>;
|
|
15
|
+
taskIdsByTags: Record<ID, ID[]>;
|
|
16
|
+
}
|
|
6
17
|
export interface TaskListLocalData {
|
|
7
18
|
defaultTaskGroupId: ID | null;
|
|
8
19
|
existingTaskGroupNamesByGroupId: Record<ID, string>;
|
|
@@ -13,10 +24,10 @@ export declare const DUE_DATE_GROUP_KEYS: readonly ["overdue", "today", "this_we
|
|
|
13
24
|
export declare const toDueDateGroupKeyType: (v: string) => "overdue" | "today" | "this_week" | "this_month" | "upcoming";
|
|
14
25
|
export declare type DueDateGroupKey = ReturnType<typeof toDueDateGroupKeyType>;
|
|
15
26
|
export interface TaskListState extends FetchedState {
|
|
27
|
+
byTab: Record<TaskListTab, TaskListTabData>;
|
|
28
|
+
currentTab: TaskListTab;
|
|
16
29
|
filters: TaskListFilters;
|
|
17
30
|
localData: TaskListLocalData;
|
|
18
|
-
/** Maps each list (parent) task id to ordered subtask ids from the last list fetch. */
|
|
19
|
-
subtaskIdsByParentTaskId: Record<ID, ID[]>;
|
|
20
31
|
taskIds: ID[];
|
|
21
32
|
taskIdsByAssignees: Record<ID, ID[]>;
|
|
22
33
|
taskIdsByDueDate: Record<DueDateGroupKey, ID[]>;
|
|
@@ -47,7 +58,7 @@ export interface TaskListUIState extends SpendManagementUIState {
|
|
|
47
58
|
searchText: string;
|
|
48
59
|
sortKey: TaskListViewSortKey;
|
|
49
60
|
}
|
|
50
|
-
declare const toTaskListSortKeyType: (v: string) => "status" | "name" | "dueDate" | "tag" | "priority" | "timeSpent" | "assignee" | "creationDate";
|
|
61
|
+
declare const toTaskListSortKeyType: (v: string) => "status" | "name" | "dueDate" | "tag" | "priority" | "timeSpent" | "assignee" | "creationDate" | "visibility";
|
|
51
62
|
export declare type TaskListViewSortKey = ReturnType<typeof toTaskListSortKeyType>;
|
|
52
63
|
export declare const TASK_LIST_FILTER_CATEGORIES: TaskListFilterCategoryOption[];
|
|
53
64
|
interface TaskListFilterCategoryOption {
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TASK_LIST_GROUP_BY_CATEGORIES = exports.TASK_LIST_FILTER_CATEGORIES = exports.toTaskListGroupByKeyTypeStrict = exports.toTaskListGroupByKeyType = exports.TASK_LIST_GROUP_BY_KEYS = exports.toDueDateGroupKeyType = exports.DUE_DATE_GROUP_KEYS = void 0;
|
|
3
|
+
exports.TASK_LIST_GROUP_BY_CATEGORIES = exports.TASK_LIST_FILTER_CATEGORIES = exports.toTaskListGroupByKeyTypeStrict = exports.toTaskListGroupByKeyType = exports.TASK_LIST_GROUP_BY_KEYS = exports.toDueDateGroupKeyType = exports.DUE_DATE_GROUP_KEYS = exports.ALL_TASK_LIST_TABS = void 0;
|
|
4
4
|
const stringToUnion_1 = require("../../../commonStateTypes/stringToUnion");
|
|
5
|
+
exports.ALL_TASK_LIST_TABS = [
|
|
6
|
+
'live',
|
|
7
|
+
'archived',
|
|
8
|
+
'deleted',
|
|
9
|
+
'snoozed',
|
|
10
|
+
];
|
|
5
11
|
exports.DUE_DATE_GROUP_KEYS = [
|
|
6
12
|
'overdue',
|
|
7
13
|
'today',
|
|
@@ -32,6 +38,7 @@ const ALL_TASK_LIST_SORT_KEYS = [
|
|
|
32
38
|
'status',
|
|
33
39
|
'priority',
|
|
34
40
|
'timeSpent',
|
|
41
|
+
'visibility',
|
|
35
42
|
];
|
|
36
43
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
37
44
|
const toTaskListSortKeyType = (v) => (0, stringToUnion_1.stringToUnion)(v, ALL_TASK_LIST_SORT_KEYS);
|
|
@@ -1,37 +1,10 @@
|
|
|
1
|
-
import { ID } from '../../../commonStateTypes/common';
|
|
2
1
|
import { TaskPayload } from '../../../entity/task/taskPayload';
|
|
3
2
|
import { ZeniAPIResponse } from '../../../responsePayload';
|
|
4
|
-
/**
|
|
5
|
-
* Task row returned by the task list API. Subtasks share the same wire shape
|
|
6
|
-
* as tasks but are nested under their parent and indexed separately in list state.
|
|
7
|
-
*/
|
|
8
|
-
export interface TaskListTaskPayload extends TaskPayload {
|
|
9
|
-
subtasks?: TaskPayload[];
|
|
10
|
-
}
|
|
11
3
|
interface FetchTaskListPayload {
|
|
12
|
-
tasks:
|
|
4
|
+
tasks: TaskPayload[];
|
|
5
|
+
archived?: TaskPayload[];
|
|
6
|
+
deleted?: TaskPayload[];
|
|
7
|
+
snoozed?: TaskPayload[];
|
|
13
8
|
}
|
|
14
9
|
export type FetchTaskListResponse = ZeniAPIResponse<FetchTaskListPayload>;
|
|
15
|
-
/** Request body for POST `/task-manager/tasks` when creating a subtask from the list view. */
|
|
16
|
-
export interface CreateSubtaskFromListViewPayload {
|
|
17
|
-
assignees: string[];
|
|
18
|
-
description: string;
|
|
19
|
-
due_date: string | null;
|
|
20
|
-
file_ids: string[];
|
|
21
|
-
group_assignees: string[];
|
|
22
|
-
name: string;
|
|
23
|
-
parent_task_id: ID;
|
|
24
|
-
priority: string;
|
|
25
|
-
recurring_end_date: string | null;
|
|
26
|
-
recurring_frequency: string | null;
|
|
27
|
-
recurring_start_date: string | null;
|
|
28
|
-
status: string;
|
|
29
|
-
sync_token: string;
|
|
30
|
-
tags: string[];
|
|
31
|
-
task_group_ids: string[];
|
|
32
|
-
time_spent: number;
|
|
33
|
-
type: string;
|
|
34
|
-
}
|
|
35
|
-
/** Parent tasks and nested subtasks as flat `TaskPayload`s for `updateTasks`. */
|
|
36
|
-
export declare const flattenTasksAndSubtasksForEntity: (tasks: TaskListTaskPayload[]) => TaskPayload[];
|
|
37
10
|
export {};
|
|
@@ -1,9 +1,2 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.flattenTasksAndSubtasksForEntity = void 0;
|
|
4
|
-
/** Parent tasks and nested subtasks as flat `TaskPayload`s for `updateTasks`. */
|
|
5
|
-
const flattenTasksAndSubtasksForEntity = (tasks) => tasks.flatMap((task) => {
|
|
6
|
-
const { subtasks, ...parent } = task;
|
|
7
|
-
return [parent, ...(subtasks ?? [])];
|
|
8
|
-
});
|
|
9
|
-
exports.flattenTasksAndSubtasksForEntity = flattenTasksAndSubtasksForEntity;
|
|
@@ -5,15 +5,17 @@ import { TaskGroupPayload } from '../../../entity/taskGroup/taskGroupPayload';
|
|
|
5
5
|
import { TaskGroup } from '../../../entity/taskGroup/taskGroupState';
|
|
6
6
|
import { ZeniAPIStatus } from '../../../responsePayload';
|
|
7
7
|
import { TaskListFilters, TaskListLocalData, TaskListState, TaskListUIState } from './taskList';
|
|
8
|
-
import { CreateSubtaskFromListViewPayload, TaskListTaskPayload } from './taskListPayload';
|
|
9
8
|
export declare const initialState: TaskListState;
|
|
10
9
|
export declare const fetchTaskListPage: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[cacheOverride: boolean, isTaskTemplatesEnabled: boolean], {
|
|
11
10
|
cacheOverride: boolean;
|
|
12
11
|
isTaskTemplatesEnabled: boolean;
|
|
13
12
|
}, "taskList/fetchTaskListPage", never, never>, fetchTaskList: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"taskList/fetchTaskList">, updateTaskList: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
14
|
-
data:
|
|
13
|
+
data: TaskPayload[];
|
|
15
14
|
updateType: UpdateType;
|
|
16
|
-
|
|
15
|
+
archived?: TaskPayload[];
|
|
16
|
+
deleted?: TaskPayload[];
|
|
17
|
+
snoozed?: TaskPayload[];
|
|
18
|
+
}, "taskList/updateTaskList">, updateTaskListTab: import("@reduxjs/toolkit").ActionCreatorWithPayload<"deleted" | "live" | "archived" | "snoozed", "taskList/updateTaskListTab">, updateTaskListFetchStatus: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
17
19
|
fetchState: FetchState;
|
|
18
20
|
error?: ZeniAPIStatus;
|
|
19
21
|
}, "taskList/updateTaskListFetchStatus">, updateTaskListSearchText: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
@@ -30,6 +32,7 @@ export declare const fetchTaskListPage: import("@reduxjs/toolkit").ActionCreator
|
|
|
30
32
|
groupId: string;
|
|
31
33
|
}, "taskList/bulkUpdateTaskList", never, never>, updateTasksListOnBulkUpdateTasksSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
32
34
|
groupId: ID | null;
|
|
35
|
+
removeFromList: boolean;
|
|
33
36
|
taskIds: ID[];
|
|
34
37
|
}, "taskList/updateTasksListOnBulkUpdateTasksSuccess">, updateTasksListOnBulkUpdateTasksFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
35
38
|
error: ZeniAPIStatus;
|
|
@@ -49,16 +52,13 @@ export declare const fetchTaskListPage: import("@reduxjs/toolkit").ActionCreator
|
|
|
49
52
|
}, "taskList/updateTaskListOnNewTaskCreationSuccess">, updateTaskListOnTaskGroupNameUpdate: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
50
53
|
taskGroupId: ID;
|
|
51
54
|
taskGroupName: ID;
|
|
52
|
-
}, "taskList/updateTaskListOnTaskGroupNameUpdate">,
|
|
55
|
+
}, "taskList/updateTaskListOnTaskGroupNameUpdate">, updateTaskFromListView: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
53
56
|
task: Task;
|
|
54
57
|
updates: Partial<Task>;
|
|
55
|
-
}, "taskList/updateTaskFromListView">,
|
|
56
|
-
parentTaskId: ID;
|
|
57
|
-
subtaskId: ID;
|
|
58
|
-
}, "taskList/updateTasksListOnCreateSubtaskFromListViewSuccess">, updateTasksListOnUpdateTaskSuccess: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"taskList/updateTasksListOnUpdateTaskSuccess">, updateTasksListOnUpdateTaskFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
58
|
+
}, "taskList/updateTaskFromListView">, updateTasksListOnUpdateTaskSuccess: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"taskList/updateTasksListOnUpdateTaskSuccess">, updateTasksListOnUpdateTaskFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
59
59
|
error: ZeniAPIStatus;
|
|
60
60
|
}, "taskList/updateTasksListOnUpdateTaskFailure">, updateTaskListOnCreateTaskFromTemplateSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
61
61
|
tasks: TaskPayload[];
|
|
62
|
-
}, "taskList/updateTaskListOnCreateTaskFromTemplateSuccess">, clearTaskList: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"taskList/clearTaskList">;
|
|
62
|
+
}, "taskList/updateTaskListOnCreateTaskFromTemplateSuccess">, removeTaskFromList: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "taskList/removeTaskFromList">, clearTaskList: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"taskList/clearTaskList">;
|
|
63
63
|
declare const _default: import("redux").Reducer<TaskListState>;
|
|
64
64
|
export default _default;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var _a;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.clearTaskList = exports.
|
|
4
|
+
exports.clearTaskList = exports.removeTaskFromList = exports.updateTaskListOnCreateTaskFromTemplateSuccess = exports.updateTasksListOnUpdateTaskFailure = exports.updateTasksListOnUpdateTaskSuccess = exports.updateTaskFromListView = exports.updateTaskListOnTaskGroupNameUpdate = exports.updateTaskListOnNewTaskCreationSuccess = exports.dragNDropTasks = exports.updateTaskListOnTaskGroupDeletion = exports.updateTaskListLocalData = exports.initiateTaskListLocalData = exports.updateTasksListOnBulkUpdateTasksFailure = exports.updateTasksListOnBulkUpdateTasksSuccess = exports.bulkUpdateTaskList = exports.updateTaskListOnNewGroupCreationSuccess = exports.updateTaskFilters = exports.updateTaskListUIState = exports.updateTaskListSearchText = exports.updateTaskListFetchStatus = exports.updateTaskListTab = exports.updateTaskList = exports.fetchTaskList = exports.fetchTaskListPage = exports.initialState = void 0;
|
|
5
5
|
const toolkit_1 = require("@reduxjs/toolkit");
|
|
6
6
|
const taskState_1 = require("../../../entity/task/taskState");
|
|
7
7
|
const zeniDayJS_1 = require("../../../zeniDayJS");
|
|
@@ -33,8 +33,23 @@ const initialTaskIdsByDueDate = {
|
|
|
33
33
|
today: [],
|
|
34
34
|
upcoming: [],
|
|
35
35
|
};
|
|
36
|
+
const initialTabData = {
|
|
37
|
+
taskIds: [],
|
|
38
|
+
taskIdsByAssignees: {},
|
|
39
|
+
taskIdsByDueDate: { ...initialTaskIdsByDueDate },
|
|
40
|
+
taskIdsByGroupsIds: {},
|
|
41
|
+
taskIdsByPriority: { ...initialTaskIdsByPriority },
|
|
42
|
+
taskIdsByStatus: { ...initialTaskIdsByStatus },
|
|
43
|
+
taskIdsByTags: {},
|
|
44
|
+
};
|
|
36
45
|
exports.initialState = {
|
|
37
|
-
|
|
46
|
+
currentTab: 'live',
|
|
47
|
+
byTab: {
|
|
48
|
+
live: { ...initialTabData },
|
|
49
|
+
archived: { ...initialTabData },
|
|
50
|
+
deleted: { ...initialTabData },
|
|
51
|
+
snoozed: { ...initialTabData },
|
|
52
|
+
},
|
|
38
53
|
taskIds: [],
|
|
39
54
|
taskIdsByGroupsIds: {},
|
|
40
55
|
taskIdsByPriority: initialTaskIdsByPriority,
|
|
@@ -91,18 +106,30 @@ const taskList = (0, toolkit_1.createSlice)({
|
|
|
91
106
|
draft.error = undefined;
|
|
92
107
|
},
|
|
93
108
|
updateTaskList(draft, action) {
|
|
94
|
-
const { data } = action.payload;
|
|
109
|
+
const { data, archived, deleted, snoozed } = action.payload;
|
|
95
110
|
draft.fetchState = 'Completed';
|
|
96
111
|
draft.error = undefined;
|
|
97
|
-
|
|
98
|
-
const
|
|
99
|
-
draft.
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
112
|
+
// Group live tasks
|
|
113
|
+
const liveGrouped = getGroupedTaskIds(data);
|
|
114
|
+
draft.byTab.live = toTabData(liveGrouped);
|
|
115
|
+
// Group other tabs if provided
|
|
116
|
+
if (archived != null) {
|
|
117
|
+
draft.byTab.archived = toTabData(getGroupedTaskIds(archived));
|
|
118
|
+
}
|
|
119
|
+
if (deleted != null) {
|
|
120
|
+
draft.byTab.deleted = toTabData(getGroupedTaskIds(deleted));
|
|
121
|
+
}
|
|
122
|
+
if (snoozed != null) {
|
|
123
|
+
draft.byTab.snoozed = toTabData(getGroupedTaskIds(snoozed));
|
|
124
|
+
}
|
|
125
|
+
// Copy active tab data to top-level fields
|
|
126
|
+
const activeTabData = draft.byTab[draft.currentTab];
|
|
127
|
+
copyTabDataToTopLevel(draft, activeTabData);
|
|
128
|
+
},
|
|
129
|
+
updateTaskListTab(draft, action) {
|
|
130
|
+
draft.currentTab = action.payload;
|
|
131
|
+
const activeTabData = draft.byTab[action.payload];
|
|
132
|
+
copyTabDataToTopLevel(draft, activeTabData);
|
|
106
133
|
},
|
|
107
134
|
initiateTaskListLocalData(draft, action) {
|
|
108
135
|
const { taskGroupById } = action.payload;
|
|
@@ -190,10 +217,13 @@ const taskList = (0, toolkit_1.createSlice)({
|
|
|
190
217
|
},
|
|
191
218
|
},
|
|
192
219
|
updateTasksListOnBulkUpdateTasksSuccess(draft, action) {
|
|
193
|
-
const { taskIds, groupId } = action.payload;
|
|
220
|
+
const { taskIds, groupId, removeFromList } = action.payload;
|
|
194
221
|
draft.updateTasksFetchState.fetchState = 'Completed';
|
|
195
222
|
draft.updateTasksFetchState.error = undefined;
|
|
196
|
-
if (
|
|
223
|
+
if (removeFromList) {
|
|
224
|
+
removeTaskIds(draft, taskIds);
|
|
225
|
+
}
|
|
226
|
+
else if (groupId != null) {
|
|
197
227
|
const { groupByKey } = draft.uiState;
|
|
198
228
|
if (groupByKey === 'groupName') {
|
|
199
229
|
Object.keys(draft.taskIdsByGroupsIds).forEach((gId) => {
|
|
@@ -346,17 +376,6 @@ const taskList = (0, toolkit_1.createSlice)({
|
|
|
346
376
|
[taskGroupId]: taskGroupName,
|
|
347
377
|
};
|
|
348
378
|
},
|
|
349
|
-
createSubtaskFromListView: {
|
|
350
|
-
reducer(draft) {
|
|
351
|
-
draft.updateTasksFetchState = {
|
|
352
|
-
fetchState: 'In-Progress',
|
|
353
|
-
error: undefined,
|
|
354
|
-
};
|
|
355
|
-
},
|
|
356
|
-
prepare(payload) {
|
|
357
|
-
return { payload };
|
|
358
|
-
},
|
|
359
|
-
},
|
|
360
379
|
updateTaskFromListView(draft, action) {
|
|
361
380
|
const { updates, task } = action.payload;
|
|
362
381
|
const taskId = task.id;
|
|
@@ -413,13 +432,6 @@ const taskList = (0, toolkit_1.createSlice)({
|
|
|
413
432
|
}
|
|
414
433
|
}
|
|
415
434
|
},
|
|
416
|
-
updateTasksListOnCreateSubtaskFromListViewSuccess(draft, action) {
|
|
417
|
-
const { parentTaskId, subtaskId } = action.payload;
|
|
418
|
-
draft.updateTasksFetchState.fetchState = 'Completed';
|
|
419
|
-
draft.updateTasksFetchState.error = undefined;
|
|
420
|
-
const existing = draft.subtaskIdsByParentTaskId[parentTaskId] ?? [];
|
|
421
|
-
draft.subtaskIdsByParentTaskId[parentTaskId] = [...existing, subtaskId];
|
|
422
|
-
},
|
|
423
435
|
updateTasksListOnUpdateTaskSuccess(draft) {
|
|
424
436
|
draft.updateTasksFetchState.fetchState = 'Completed';
|
|
425
437
|
draft.updateTasksFetchState.error = undefined;
|
|
@@ -428,12 +440,15 @@ const taskList = (0, toolkit_1.createSlice)({
|
|
|
428
440
|
draft.updateTasksFetchState.fetchState = 'Error';
|
|
429
441
|
draft.updateTasksFetchState.error = action.payload.error;
|
|
430
442
|
},
|
|
443
|
+
removeTaskFromList(draft, action) {
|
|
444
|
+
removeTaskIds(draft, [action.payload]);
|
|
445
|
+
},
|
|
431
446
|
clearTaskList(draft) {
|
|
432
447
|
Object.assign(draft, exports.initialState);
|
|
433
448
|
},
|
|
434
449
|
},
|
|
435
450
|
});
|
|
436
|
-
_a = taskList.actions, exports.fetchTaskListPage = _a.fetchTaskListPage, exports.fetchTaskList = _a.fetchTaskList, exports.updateTaskList = _a.updateTaskList, exports.updateTaskListFetchStatus = _a.updateTaskListFetchStatus, exports.updateTaskListSearchText = _a.updateTaskListSearchText, exports.updateTaskListUIState = _a.updateTaskListUIState, exports.updateTaskFilters = _a.updateTaskFilters, exports.updateTaskListOnNewGroupCreationSuccess = _a.updateTaskListOnNewGroupCreationSuccess, exports.bulkUpdateTaskList = _a.bulkUpdateTaskList, exports.updateTasksListOnBulkUpdateTasksSuccess = _a.updateTasksListOnBulkUpdateTasksSuccess, exports.updateTasksListOnBulkUpdateTasksFailure = _a.updateTasksListOnBulkUpdateTasksFailure, exports.initiateTaskListLocalData = _a.initiateTaskListLocalData, exports.updateTaskListLocalData = _a.updateTaskListLocalData, exports.updateTaskListOnTaskGroupDeletion = _a.updateTaskListOnTaskGroupDeletion, exports.dragNDropTasks = _a.dragNDropTasks, exports.updateTaskListOnNewTaskCreationSuccess = _a.updateTaskListOnNewTaskCreationSuccess, exports.updateTaskListOnTaskGroupNameUpdate = _a.updateTaskListOnTaskGroupNameUpdate, exports.
|
|
451
|
+
_a = taskList.actions, exports.fetchTaskListPage = _a.fetchTaskListPage, exports.fetchTaskList = _a.fetchTaskList, exports.updateTaskList = _a.updateTaskList, exports.updateTaskListTab = _a.updateTaskListTab, exports.updateTaskListFetchStatus = _a.updateTaskListFetchStatus, exports.updateTaskListSearchText = _a.updateTaskListSearchText, exports.updateTaskListUIState = _a.updateTaskListUIState, exports.updateTaskFilters = _a.updateTaskFilters, exports.updateTaskListOnNewGroupCreationSuccess = _a.updateTaskListOnNewGroupCreationSuccess, exports.bulkUpdateTaskList = _a.bulkUpdateTaskList, exports.updateTasksListOnBulkUpdateTasksSuccess = _a.updateTasksListOnBulkUpdateTasksSuccess, exports.updateTasksListOnBulkUpdateTasksFailure = _a.updateTasksListOnBulkUpdateTasksFailure, exports.initiateTaskListLocalData = _a.initiateTaskListLocalData, exports.updateTaskListLocalData = _a.updateTaskListLocalData, exports.updateTaskListOnTaskGroupDeletion = _a.updateTaskListOnTaskGroupDeletion, exports.dragNDropTasks = _a.dragNDropTasks, exports.updateTaskListOnNewTaskCreationSuccess = _a.updateTaskListOnNewTaskCreationSuccess, exports.updateTaskListOnTaskGroupNameUpdate = _a.updateTaskListOnTaskGroupNameUpdate, exports.updateTaskFromListView = _a.updateTaskFromListView, exports.updateTasksListOnUpdateTaskSuccess = _a.updateTasksListOnUpdateTaskSuccess, exports.updateTasksListOnUpdateTaskFailure = _a.updateTasksListOnUpdateTaskFailure, exports.updateTaskListOnCreateTaskFromTemplateSuccess = _a.updateTaskListOnCreateTaskFromTemplateSuccess, exports.removeTaskFromList = _a.removeTaskFromList, exports.clearTaskList = _a.clearTaskList;
|
|
437
452
|
exports.default = taskList.reducer;
|
|
438
453
|
/**
|
|
439
454
|
* helpers
|
|
@@ -512,14 +527,49 @@ const getTagsGroupKey = (tags) => {
|
|
|
512
527
|
tagIds.sort();
|
|
513
528
|
return tagIds.join(',');
|
|
514
529
|
};
|
|
515
|
-
const
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
530
|
+
const toTabData = (grouped) => ({
|
|
531
|
+
taskIds: grouped.taskIds,
|
|
532
|
+
taskIdsByAssignees: grouped.taskIdsByAssignees,
|
|
533
|
+
taskIdsByDueDate: grouped.taskIdsByDueDate,
|
|
534
|
+
taskIdsByGroupsIds: grouped.taskIdsByGroupIds,
|
|
535
|
+
taskIdsByPriority: grouped.taskIdsGroupedByPriority,
|
|
536
|
+
taskIdsByStatus: grouped.taskIdsGroupedByStatus,
|
|
537
|
+
taskIdsByTags: grouped.taskIdsByTags,
|
|
538
|
+
});
|
|
539
|
+
const copyTabDataToTopLevel = (draft, tabData) => {
|
|
540
|
+
draft.taskIds = tabData.taskIds;
|
|
541
|
+
draft.taskIdsByGroupsIds = tabData.taskIdsByGroupsIds;
|
|
542
|
+
draft.taskIdsByPriority = tabData.taskIdsByPriority;
|
|
543
|
+
draft.taskIdsByStatus = tabData.taskIdsByStatus;
|
|
544
|
+
draft.taskIdsByAssignees = tabData.taskIdsByAssignees;
|
|
545
|
+
draft.taskIdsByDueDate = tabData.taskIdsByDueDate;
|
|
546
|
+
draft.taskIdsByTags = tabData.taskIdsByTags;
|
|
547
|
+
};
|
|
548
|
+
const removeIdsFromTabData = (tabData, taskIds) => {
|
|
549
|
+
const isRemoved = (id) => taskIds.includes(id);
|
|
550
|
+
tabData.taskIds = tabData.taskIds.filter((id) => !isRemoved(id));
|
|
551
|
+
Object.keys(tabData.taskIdsByGroupsIds).forEach((gId) => {
|
|
552
|
+
tabData.taskIdsByGroupsIds[gId] = tabData.taskIdsByGroupsIds[gId].filter((id) => !isRemoved(id));
|
|
553
|
+
});
|
|
554
|
+
Object.keys(tabData.taskIdsByPriority).forEach((key) => {
|
|
555
|
+
tabData.taskIdsByPriority[key] = tabData.taskIdsByPriority[key].filter((id) => !isRemoved(id));
|
|
556
|
+
});
|
|
557
|
+
Object.keys(tabData.taskIdsByStatus).forEach((key) => {
|
|
558
|
+
tabData.taskIdsByStatus[key] = tabData.taskIdsByStatus[key].filter((id) => !isRemoved(id));
|
|
521
559
|
});
|
|
522
|
-
|
|
560
|
+
Object.keys(tabData.taskIdsByDueDate).forEach((key) => {
|
|
561
|
+
tabData.taskIdsByDueDate[key] = tabData.taskIdsByDueDate[key].filter((id) => !isRemoved(id));
|
|
562
|
+
});
|
|
563
|
+
Object.keys(tabData.taskIdsByAssignees).forEach((key) => {
|
|
564
|
+
tabData.taskIdsByAssignees[key] = tabData.taskIdsByAssignees[key].filter((id) => !isRemoved(id));
|
|
565
|
+
});
|
|
566
|
+
Object.keys(tabData.taskIdsByTags).forEach((key) => {
|
|
567
|
+
tabData.taskIdsByTags[key] = tabData.taskIdsByTags[key].filter((id) => !isRemoved(id));
|
|
568
|
+
});
|
|
569
|
+
};
|
|
570
|
+
const removeTaskIds = (draft, taskIds) => {
|
|
571
|
+
removeIdsFromTabData(draft, taskIds);
|
|
572
|
+
removeIdsFromTabData(draft.byTab[draft.currentTab], taskIds);
|
|
523
573
|
};
|
|
524
574
|
const getGroupedTaskIds = (tasks) => {
|
|
525
575
|
const taskIds = [];
|
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
import { FetchStateAndError
|
|
1
|
+
import { FetchStateAndError } from '../../../commonStateTypes/common';
|
|
2
2
|
import { SelectorView } from '../../../commonStateTypes/viewAndReport/viewAndReport';
|
|
3
3
|
import { AddressState } from '../../../entity/address/addressState';
|
|
4
4
|
import { TagState } from '../../../entity/tag/tagState';
|
|
5
5
|
import { Task, TaskState } from '../../../entity/task/taskState';
|
|
6
6
|
import { TaskGroupTemplate } from '../../../entity/taskGroupTemplate/taskGroupTemplateState';
|
|
7
7
|
import { UserState } from '../../../entity/user/userState';
|
|
8
|
+
import { UserGroupsState } from '../../../entity/userGroups/userGroupsState';
|
|
8
9
|
import { UserRoleState } from '../../../entity/userRole/userRoleState';
|
|
9
10
|
import { RootState } from '../../../reducer';
|
|
10
11
|
import { UserAndRole } from '../../companyView/types/userAndRole';
|
|
11
12
|
import { UserGroupListSelectorView } from '../../userGroupListView/userGroupListViewSelector';
|
|
12
13
|
import { UserListSelectorView } from '../../userListView/userListViewSelector';
|
|
13
|
-
import { TaskListFilters, TaskListLocalData, TaskListState, TaskListUIState } from './taskList';
|
|
14
|
+
import { TaskListFilters, TaskListLocalData, TaskListState, TaskListTab, TaskListUIState } from './taskList';
|
|
14
15
|
export interface TaskWithUserDetails extends Task {
|
|
15
16
|
assigneeUsers: UserAndRole[];
|
|
16
|
-
|
|
17
|
+
firstAssigneeSortName: string;
|
|
17
18
|
}
|
|
18
19
|
export interface TaskGroupWithTasksList {
|
|
19
20
|
groupName: string;
|
|
@@ -22,10 +23,10 @@ export interface TaskGroupWithTasksList {
|
|
|
22
23
|
tasks: TaskWithUserDetails[];
|
|
23
24
|
}
|
|
24
25
|
export interface TaskListSelectorView extends SelectorView {
|
|
26
|
+
currentTab: TaskListTab;
|
|
25
27
|
filters: TaskListFilters;
|
|
26
28
|
localData: TaskListLocalData;
|
|
27
|
-
|
|
28
|
-
subtaskIdsByParentTaskId: Record<ID, ID[]>;
|
|
29
|
+
tabCounts: Record<TaskListTab, number>;
|
|
29
30
|
taskCreationFromTemplateStatus: FetchStateAndError;
|
|
30
31
|
taskGroupCreationStatus: FetchStateAndError;
|
|
31
32
|
taskGroupDeleteStatus: FetchStateAndError;
|
|
@@ -37,11 +38,12 @@ export interface TaskListSelectorView extends SelectorView {
|
|
|
37
38
|
userGroupList: UserGroupListSelectorView;
|
|
38
39
|
userList: UserListSelectorView;
|
|
39
40
|
}
|
|
40
|
-
export declare const getTaskListGroupedByAssignees: ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }: {
|
|
41
|
+
export declare const getTaskListGroupedByAssignees: ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }: {
|
|
41
42
|
addressState: AddressState;
|
|
42
43
|
tagState: TagState;
|
|
43
44
|
taskListState: TaskListState;
|
|
44
45
|
taskState: TaskState;
|
|
46
|
+
userGroupsState: UserGroupsState;
|
|
45
47
|
userRoleState: UserRoleState;
|
|
46
48
|
userState: UserState;
|
|
47
49
|
}) => {
|
|
@@ -50,11 +52,12 @@ export declare const getTaskListGroupedByAssignees: ({ taskListState, taskState,
|
|
|
50
52
|
isDefault: boolean;
|
|
51
53
|
tasks: TaskWithUserDetails[];
|
|
52
54
|
}[];
|
|
53
|
-
export declare const getTaskListGroupedByPriority: ({ taskListState, taskState, userState, userRoleState, addressState, tagState, }: {
|
|
55
|
+
export declare const getTaskListGroupedByPriority: ({ taskListState, taskState, userState, userRoleState, addressState, tagState, userGroupsState, }: {
|
|
54
56
|
addressState: AddressState;
|
|
55
57
|
tagState: TagState;
|
|
56
58
|
taskListState: TaskListState;
|
|
57
59
|
taskState: TaskState;
|
|
60
|
+
userGroupsState: UserGroupsState;
|
|
58
61
|
userRoleState: UserRoleState;
|
|
59
62
|
userState: UserState;
|
|
60
63
|
}) => {
|