@zeniai/client-epic-state 5.0.3-betaND3 → 5.0.3-betaRD1
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/aiAccountantCustomer/aiAccountantCustomerPayload.d.ts +9 -1
- package/lib/entity/aiAccountantCustomer/aiAccountantCustomerPayload.js +16 -1
- package/lib/entity/task/taskPayload.d.ts +0 -1
- package/lib/entity/task/taskPayload.js +39 -46
- package/lib/entity/task/taskState.d.ts +0 -2
- package/lib/esm/entity/aiAccountantCustomer/aiAccountantCustomerPayload.js +16 -1
- package/lib/esm/entity/task/taskPayload.js +39 -46
- package/lib/esm/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +0 -4
- package/lib/esm/view/taskManager/taskListView/epics/fetchTaskListEpic.js +3 -6
- package/lib/esm/view/taskManager/taskListView/epics/updateTaskFromListViewEpic.js +2 -6
- package/lib/esm/view/taskManager/taskListView/taskListPayload.js +1 -5
- package/lib/esm/view/taskManager/taskListView/taskListReducer.js +0 -11
- package/lib/esm/view/taskManager/taskListView/taskListSelector.js +4 -27
- package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
- package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.d.ts +0 -2
- package/lib/view/taskManager/taskListView/epics/bulkUpdateTaskListEpic.js +0 -4
- package/lib/view/taskManager/taskListView/epics/fetchTaskListEpic.js +3 -6
- package/lib/view/taskManager/taskListView/epics/updateTaskFromListViewEpic.js +2 -6
- package/lib/view/taskManager/taskListView/taskList.d.ts +0 -2
- package/lib/view/taskManager/taskListView/taskListPayload.d.ts +1 -10
- package/lib/view/taskManager/taskListView/taskListPayload.js +0 -7
- package/lib/view/taskManager/taskListView/taskListReducer.d.ts +1 -4
- package/lib/view/taskManager/taskListView/taskListReducer.js +0 -11
- package/lib/view/taskManager/taskListView/taskListSelector.d.ts +1 -4
- package/lib/view/taskManager/taskListView/taskListSelector.js +4 -27
- package/package.json +1 -1
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import { AiAccountantCustomer, AiAccountantEnrollment, AiAccountantJob } from './aiAccountantCustomerState';
|
|
2
|
+
export interface AiAccountantModelAccuracyPayload {
|
|
3
|
+
accuracy: number;
|
|
4
|
+
model_id: string;
|
|
5
|
+
passed: boolean;
|
|
6
|
+
threshold: number;
|
|
7
|
+
training_status: string;
|
|
8
|
+
validated_at: string;
|
|
9
|
+
}
|
|
2
10
|
export interface AiAccountantEnrollmentPayload {
|
|
3
11
|
status: string;
|
|
4
|
-
accuracy?: Record<string,
|
|
12
|
+
accuracy?: Record<string, AiAccountantModelAccuracyPayload>;
|
|
5
13
|
latest_training?: string;
|
|
6
14
|
latest_transaction_sync?: string;
|
|
7
15
|
offboarded_at?: string;
|
|
@@ -4,9 +4,24 @@ exports.toAiAccountantJob = exports.toAiAccountantCustomer = exports.toAiAccount
|
|
|
4
4
|
const zeniDayJS_1 = require("../../zeniDayJS");
|
|
5
5
|
const aiAccountantCustomerState_1 = require("./aiAccountantCustomerState");
|
|
6
6
|
// ── Mapping functions (payload → state) ──
|
|
7
|
+
// Backend returns accuracy as a percent (0–100) inside a nested object; the UI
|
|
8
|
+
// layer treats it as a 0–1 fraction. Normalize here and drop malformed entries.
|
|
9
|
+
const toAccuracyByModel = (accuracyPayload) => {
|
|
10
|
+
if (accuracyPayload == null) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
const result = {};
|
|
14
|
+
Object.entries(accuracyPayload).forEach(([model, entry]) => {
|
|
15
|
+
const percent = entry?.accuracy;
|
|
16
|
+
if (typeof percent === 'number' && Number.isFinite(percent)) {
|
|
17
|
+
result[model] = percent / 100;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
return result;
|
|
21
|
+
};
|
|
7
22
|
const toAiAccountantEnrollment = (payload) => ({
|
|
8
23
|
status: (0, aiAccountantCustomerState_1.toAiAccountantEnrollmentStatus)(payload.status),
|
|
9
|
-
accuracy: payload.accuracy,
|
|
24
|
+
accuracy: toAccuracyByModel(payload.accuracy),
|
|
10
25
|
latestTraining: payload.latest_training != null
|
|
11
26
|
? (0, zeniDayJS_1.date)(payload.latest_training)
|
|
12
27
|
: undefined,
|
|
@@ -5,50 +5,43 @@ const formatMinutesToFromHHMM_1 = require("../../commonStateTypes/fiscalYearHelp
|
|
|
5
5
|
const recurringViewHelper_1 = require("../../view/common/recurringViewHelper");
|
|
6
6
|
const zeniDayJS_1 = require("../../zeniDayJS");
|
|
7
7
|
const taskState_1 = require("./taskState");
|
|
8
|
-
const mapTaskPayloadToTask = (payload) => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
};
|
|
48
|
-
const parentTaskId = payload.parent_task_id;
|
|
49
|
-
if (typeof parentTaskId === 'string' && parentTaskId.length > 0) {
|
|
50
|
-
task.parentTaskId = parentTaskId;
|
|
51
|
-
}
|
|
52
|
-
return task;
|
|
53
|
-
};
|
|
8
|
+
const mapTaskPayloadToTask = (payload) => ({
|
|
9
|
+
id: payload.task_id,
|
|
10
|
+
assignees: payload.assignees,
|
|
11
|
+
createdBy: payload.created_by,
|
|
12
|
+
description: payload.description,
|
|
13
|
+
fileIds: payload.file_ids,
|
|
14
|
+
isArchived: payload.is_archived,
|
|
15
|
+
isDeleted: payload.is_deleted,
|
|
16
|
+
name: payload.name,
|
|
17
|
+
syncToken: payload.sync_token ?? '',
|
|
18
|
+
priority: {
|
|
19
|
+
code: (0, taskState_1.toPriorityCodeType)(payload.priority.code),
|
|
20
|
+
name: payload.priority.name,
|
|
21
|
+
},
|
|
22
|
+
status: {
|
|
23
|
+
code: (0, taskState_1.toTaskStatusCodeType)(payload.status.code),
|
|
24
|
+
name: payload.status.name,
|
|
25
|
+
},
|
|
26
|
+
tagIds: payload.tags.map((tag) => tag.tag_id),
|
|
27
|
+
type: { code: (0, taskState_1.toTaskCodeType)(payload.type.code), name: payload.type.name },
|
|
28
|
+
recurringEndDate: payload.recurring_end_date != null
|
|
29
|
+
? (0, zeniDayJS_1.date)(payload.recurring_end_date)
|
|
30
|
+
: undefined,
|
|
31
|
+
recurringFrequency: payload.recurring_frequency != null
|
|
32
|
+
? (0, recurringViewHelper_1.toRecurringFrequencyStrict)(payload.recurring_frequency.code)
|
|
33
|
+
: undefined,
|
|
34
|
+
recurringStartDate: payload.recurring_start_date != null
|
|
35
|
+
? (0, zeniDayJS_1.date)(payload.recurring_start_date)
|
|
36
|
+
: undefined,
|
|
37
|
+
createTime: (0, zeniDayJS_1.date)(payload.create_time),
|
|
38
|
+
dueDate: payload.due_date != null ? (0, zeniDayJS_1.date)(payload.due_date) : undefined,
|
|
39
|
+
updateTime: payload.update_time != null ? (0, zeniDayJS_1.date)(payload.update_time) : undefined,
|
|
40
|
+
companyId: payload.company_id,
|
|
41
|
+
taskGroupIds: payload.task_group_ids != null ? payload.task_group_ids : [],
|
|
42
|
+
timeSpent: payload.time_spent != null
|
|
43
|
+
? (0, formatMinutesToFromHHMM_1.convertMinutesToHHMM)(payload.time_spent)
|
|
44
|
+
: (0, formatMinutesToFromHHMM_1.convertMinutesToHHMM)(0),
|
|
45
|
+
groupAssignees: payload.group_assignees ?? [],
|
|
46
|
+
});
|
|
54
47
|
exports.mapTaskPayloadToTask = mapTaskPayloadToTask;
|
|
@@ -21,8 +21,6 @@ export interface Task {
|
|
|
21
21
|
type: TaskType;
|
|
22
22
|
companyId?: ID;
|
|
23
23
|
dueDate?: ZeniDate;
|
|
24
|
-
/** Present when this task is a subtask of another task. */
|
|
25
|
-
parentTaskId?: ID;
|
|
26
24
|
recurringEndDate?: ZeniDate;
|
|
27
25
|
recurringFrequency?: RecurringFrequencyType;
|
|
28
26
|
recurringStartDate?: ZeniDate;
|
|
@@ -1,9 +1,24 @@
|
|
|
1
1
|
import { date } from '../../zeniDayJS';
|
|
2
2
|
import { toAiAccountantEnrollmentStatus, toAiAccountantJobStatus, toAiAccountantOperationType, } from './aiAccountantCustomerState';
|
|
3
3
|
// ── Mapping functions (payload → state) ──
|
|
4
|
+
// Backend returns accuracy as a percent (0–100) inside a nested object; the UI
|
|
5
|
+
// layer treats it as a 0–1 fraction. Normalize here and drop malformed entries.
|
|
6
|
+
const toAccuracyByModel = (accuracyPayload) => {
|
|
7
|
+
if (accuracyPayload == null) {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
const result = {};
|
|
11
|
+
Object.entries(accuracyPayload).forEach(([model, entry]) => {
|
|
12
|
+
const percent = entry?.accuracy;
|
|
13
|
+
if (typeof percent === 'number' && Number.isFinite(percent)) {
|
|
14
|
+
result[model] = percent / 100;
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
return result;
|
|
18
|
+
};
|
|
4
19
|
export const toAiAccountantEnrollment = (payload) => ({
|
|
5
20
|
status: toAiAccountantEnrollmentStatus(payload.status),
|
|
6
|
-
accuracy: payload.accuracy,
|
|
21
|
+
accuracy: toAccuracyByModel(payload.accuracy),
|
|
7
22
|
latestTraining: payload.latest_training != null
|
|
8
23
|
? date(payload.latest_training)
|
|
9
24
|
: undefined,
|
|
@@ -2,49 +2,42 @@ import { convertMinutesToHHMM } from '../../commonStateTypes/fiscalYearHelpers/f
|
|
|
2
2
|
import { toRecurringFrequencyStrict } from '../../view/common/recurringViewHelper';
|
|
3
3
|
import { date } from '../../zeniDayJS';
|
|
4
4
|
import { toPriorityCodeType, toTaskCodeType, toTaskStatusCodeType, } from './taskState';
|
|
5
|
-
export const mapTaskPayloadToTask = (payload) => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
};
|
|
45
|
-
const parentTaskId = payload.parent_task_id;
|
|
46
|
-
if (typeof parentTaskId === 'string' && parentTaskId.length > 0) {
|
|
47
|
-
task.parentTaskId = parentTaskId;
|
|
48
|
-
}
|
|
49
|
-
return task;
|
|
50
|
-
};
|
|
5
|
+
export const mapTaskPayloadToTask = (payload) => ({
|
|
6
|
+
id: payload.task_id,
|
|
7
|
+
assignees: payload.assignees,
|
|
8
|
+
createdBy: payload.created_by,
|
|
9
|
+
description: payload.description,
|
|
10
|
+
fileIds: payload.file_ids,
|
|
11
|
+
isArchived: payload.is_archived,
|
|
12
|
+
isDeleted: payload.is_deleted,
|
|
13
|
+
name: payload.name,
|
|
14
|
+
syncToken: payload.sync_token ?? '',
|
|
15
|
+
priority: {
|
|
16
|
+
code: toPriorityCodeType(payload.priority.code),
|
|
17
|
+
name: payload.priority.name,
|
|
18
|
+
},
|
|
19
|
+
status: {
|
|
20
|
+
code: toTaskStatusCodeType(payload.status.code),
|
|
21
|
+
name: payload.status.name,
|
|
22
|
+
},
|
|
23
|
+
tagIds: payload.tags.map((tag) => tag.tag_id),
|
|
24
|
+
type: { code: toTaskCodeType(payload.type.code), name: payload.type.name },
|
|
25
|
+
recurringEndDate: payload.recurring_end_date != null
|
|
26
|
+
? date(payload.recurring_end_date)
|
|
27
|
+
: undefined,
|
|
28
|
+
recurringFrequency: payload.recurring_frequency != null
|
|
29
|
+
? toRecurringFrequencyStrict(payload.recurring_frequency.code)
|
|
30
|
+
: undefined,
|
|
31
|
+
recurringStartDate: payload.recurring_start_date != null
|
|
32
|
+
? date(payload.recurring_start_date)
|
|
33
|
+
: undefined,
|
|
34
|
+
createTime: date(payload.create_time),
|
|
35
|
+
dueDate: payload.due_date != null ? date(payload.due_date) : undefined,
|
|
36
|
+
updateTime: payload.update_time != null ? date(payload.update_time) : undefined,
|
|
37
|
+
companyId: payload.company_id,
|
|
38
|
+
taskGroupIds: payload.task_group_ids != null ? payload.task_group_ids : [],
|
|
39
|
+
timeSpent: payload.time_spent != null
|
|
40
|
+
? convertMinutesToHHMM(payload.time_spent)
|
|
41
|
+
: convertMinutesToHHMM(0),
|
|
42
|
+
groupAssignees: payload.group_assignees ?? [],
|
|
43
|
+
});
|
|
@@ -87,9 +87,5 @@ const toTaskPayload = (state, task) => {
|
|
|
87
87
|
task_group_ids: task.taskGroupIds,
|
|
88
88
|
time_spent: convertHHMMStrToMinutes(task.timeSpent),
|
|
89
89
|
};
|
|
90
|
-
const parentTaskId = task.parentTaskId;
|
|
91
|
-
if (typeof parentTaskId === 'string' && parentTaskId.length > 0) {
|
|
92
|
-
taskPayload.parent_task_id = parentTaskId;
|
|
93
|
-
}
|
|
94
90
|
return taskPayload;
|
|
95
91
|
};
|
|
@@ -3,19 +3,16 @@ import { catchError, filter, mergeMap, switchMap } from 'rxjs/operators';
|
|
|
3
3
|
import { updateTags } from '../../../../entity/tag/tagReducer';
|
|
4
4
|
import { updateTasks } from '../../../../entity/task/taskReducer';
|
|
5
5
|
import { createZeniAPIStatus, isSuccessResponse, } from '../../../../responsePayload';
|
|
6
|
-
import { flattenTasksAndSubtasksForEntity, } from '../taskListPayload';
|
|
7
6
|
import { fetchTaskList, updateTaskList, updateTaskListFetchStatus, } from '../taskListReducer';
|
|
8
7
|
export const fetchTaskListEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(fetchTaskList.match), switchMap(() => {
|
|
9
8
|
return zeniAPI
|
|
10
9
|
.getJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks?query=${encodeURIComponent(`{"task_type": "all"}`)}`)
|
|
11
10
|
.pipe(mergeMap((response) => {
|
|
12
11
|
if (isSuccessResponse(response) && response.data != null) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
return of(updateTasks(tasksForEntity), updateTaskList({
|
|
16
|
-
data: tasks,
|
|
12
|
+
return of(updateTasks(response.data.tasks), updateTaskList({
|
|
13
|
+
data: response.data.tasks,
|
|
17
14
|
updateType: 'replace',
|
|
18
|
-
}), updateTags(
|
|
15
|
+
}), updateTags(response.data.tasks.map((task) => task.tags).flat()));
|
|
19
16
|
}
|
|
20
17
|
else {
|
|
21
18
|
return of(updateTaskListFetchStatus({
|
|
@@ -6,13 +6,9 @@ import { updateTaskFromListView, updateTasksListOnUpdateTaskFailure, updateTasks
|
|
|
6
6
|
import { getTaskPayload } from './bulkUpdateTaskListEpic';
|
|
7
7
|
export const updateTaskFromListViewEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(updateTaskFromListView.match), switchMap((action) => {
|
|
8
8
|
const state = state$.value;
|
|
9
|
-
const { task, updates
|
|
9
|
+
const { task, updates } = action.payload;
|
|
10
10
|
const taskId = task.id;
|
|
11
|
-
const
|
|
12
|
-
if (typeof parentTaskId === 'string' && parentTaskId.length > 0) {
|
|
13
|
-
mergedUpdates.parentTaskId = parentTaskId;
|
|
14
|
-
}
|
|
15
|
-
const taskData = getTaskPayload(state, taskId, mergedUpdates);
|
|
11
|
+
const taskData = getTaskPayload(state, taskId, updates);
|
|
16
12
|
return zeniAPI
|
|
17
13
|
.putAndGetJSON(`${zeniAPI.apiEndPoints.taskMicroServiceBaseUrl}/1.0/task-manager/tasks/${taskId}`, { ...taskData })
|
|
18
14
|
.pipe(mergeMap((response) => {
|
|
@@ -30,7 +30,6 @@ const initialTaskIdsByDueDate = {
|
|
|
30
30
|
upcoming: [],
|
|
31
31
|
};
|
|
32
32
|
export const initialState = {
|
|
33
|
-
subtaskIdsByParentTaskId: {},
|
|
34
33
|
taskIds: [],
|
|
35
34
|
taskIdsByGroupsIds: {},
|
|
36
35
|
taskIdsByPriority: initialTaskIdsByPriority,
|
|
@@ -90,7 +89,6 @@ const taskList = createSlice({
|
|
|
90
89
|
const { data } = action.payload;
|
|
91
90
|
draft.fetchState = 'Completed';
|
|
92
91
|
draft.error = undefined;
|
|
93
|
-
draft.subtaskIdsByParentTaskId = buildSubtaskIdsByParentTaskId(data);
|
|
94
92
|
const { taskIds, taskIdsGroupedByPriority, taskIdsByGroupIds, taskIdsGroupedByStatus, taskIdsByAssignees, taskIdsByDueDate, taskIdsByTags, } = getGroupedTaskIds(data);
|
|
95
93
|
draft.taskIds = taskIds;
|
|
96
94
|
draft.taskIdsByGroupsIds = taskIdsByGroupIds;
|
|
@@ -490,15 +488,6 @@ const getTagsGroupKey = (tags) => {
|
|
|
490
488
|
tagIds.sort();
|
|
491
489
|
return tagIds.join(',');
|
|
492
490
|
};
|
|
493
|
-
const buildSubtaskIdsByParentTaskId = (tasks) => {
|
|
494
|
-
const subtaskIdsByParentTaskId = {};
|
|
495
|
-
tasks.forEach((task) => {
|
|
496
|
-
if (task.subtasks != null && task.subtasks.length > 0) {
|
|
497
|
-
subtaskIdsByParentTaskId[task.task_id] = task.subtasks.map((s) => s.task_id);
|
|
498
|
-
}
|
|
499
|
-
});
|
|
500
|
-
return subtaskIdsByParentTaskId;
|
|
501
|
-
};
|
|
502
491
|
const getGroupedTaskIds = (tasks) => {
|
|
503
492
|
const taskIds = [];
|
|
504
493
|
const taskIdsByGroupIds = {};
|
|
@@ -43,30 +43,6 @@ const sortTasksList = (tagState, tasksList, sortKey, sortOrder) => {
|
|
|
43
43
|
}, sortOrder);
|
|
44
44
|
return tasksInOrder;
|
|
45
45
|
};
|
|
46
|
-
const taskToTaskWithUserDetails = (task, userState, userRoleState, addressState) => ({
|
|
47
|
-
...task,
|
|
48
|
-
assigneeUsers: task.assignees
|
|
49
|
-
.map((userId) => getUserAndUserRole(userState, userRoleState, addressState, userId))
|
|
50
|
-
.filter((value) => value != null),
|
|
51
|
-
subtasks: [],
|
|
52
|
-
});
|
|
53
|
-
const attachSubtasksForTask = (taskWithAssignees, taskListState, taskState, userState, userRoleState, addressState) => {
|
|
54
|
-
const subtaskIds = taskListState.subtaskIdsByParentTaskId[taskWithAssignees.id] ?? [];
|
|
55
|
-
if (subtaskIds.length === 0) {
|
|
56
|
-
return { ...taskWithAssignees, subtasks: [] };
|
|
57
|
-
}
|
|
58
|
-
const subtasks = subtaskIds
|
|
59
|
-
.map((subtaskId) => {
|
|
60
|
-
const subtask = getTaskById(taskState, subtaskId);
|
|
61
|
-
if (subtask == null) {
|
|
62
|
-
return undefined;
|
|
63
|
-
}
|
|
64
|
-
const withAssignees = taskToTaskWithUserDetails(subtask, userState, userRoleState, addressState);
|
|
65
|
-
return attachSubtasksForTask(withAssignees, taskListState, taskState, userState, userRoleState, addressState);
|
|
66
|
-
})
|
|
67
|
-
.filter((value) => value != null);
|
|
68
|
-
return { ...taskWithAssignees, subtasks };
|
|
69
|
-
};
|
|
70
46
|
const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRoleState, addressState, taskIds, tagState, }) => {
|
|
71
47
|
const { sortKey, searchText } = taskListState.uiState;
|
|
72
48
|
const sortOrder = getSortOrder(taskListState.uiState.sortOrder);
|
|
@@ -74,8 +50,10 @@ const getTasksWithUserDetails = ({ taskListState, taskState, userState, userRole
|
|
|
74
50
|
.map((taskId) => {
|
|
75
51
|
const task = getTaskById(taskState, taskId);
|
|
76
52
|
if (task != null) {
|
|
77
|
-
const
|
|
78
|
-
|
|
53
|
+
const assigneeUsers = task.assignees
|
|
54
|
+
.map((userId) => getUserAndUserRole(userState, userRoleState, addressState, userId))
|
|
55
|
+
.filter((value) => value != null);
|
|
56
|
+
return { ...task, assigneeUsers };
|
|
79
57
|
}
|
|
80
58
|
return undefined;
|
|
81
59
|
})
|
|
@@ -356,7 +334,6 @@ export const getAllTasks = createSelector((state) => state.taskListState, (state
|
|
|
356
334
|
return {
|
|
357
335
|
uiState: taskListState.uiState,
|
|
358
336
|
filters: taskListState.filters,
|
|
359
|
-
subtaskIdsByParentTaskId: taskListState.subtaskIdsByParentTaskId,
|
|
360
337
|
taskGroupTemplates,
|
|
361
338
|
fetchState: fetchState,
|
|
362
339
|
userList: getUserList(userState, userRoleState, userListViewState, 'taskManagerCandidate'),
|