Completed Sort Fields for Task model
This commit is contained in:
parent
c61f57ba31
commit
ed0e80f5e5
|
|
@ -47,6 +47,7 @@ abstract class TaskItemResponse
|
|||
}
|
||||
|
||||
class TaskFields {
|
||||
static const String name = 'name';
|
||||
static const String description = 'description';
|
||||
static const String duration = 'duration';
|
||||
static const String invoiceId = 'invoice_id';
|
||||
|
|
@ -58,6 +59,8 @@ class TaskFields {
|
|||
static const String isRunning = 'is_running';
|
||||
static const String customValue1 = 'custom1';
|
||||
static const String customValue2 = 'custom2';
|
||||
static const String customValue3 = 'custom3';
|
||||
static const String customValue4 = 'custom4';
|
||||
|
||||
static const String updatedAt = 'updated_at';
|
||||
static const String archivedAt = 'archived_at';
|
||||
|
|
@ -437,14 +440,77 @@ abstract class TaskEntity extends Object
|
|||
return actions..addAll(super.getActions(userCompany: userCompany));
|
||||
}
|
||||
|
||||
int compareTo(TaskEntity task, String sortField, bool sortAscending) {
|
||||
int compareTo(
|
||||
TaskEntity task,
|
||||
String sortField,
|
||||
bool sortAscending,
|
||||
BuiltMap<String, UserEntity> userMap,
|
||||
BuiltMap<String, ClientEntity> clientMap,
|
||||
BuiltMap<String, ProjectEntity> projectMap,
|
||||
BuiltMap<String, InvoiceEntity> invoiceMap) {
|
||||
int response = 0;
|
||||
final TaskEntity taskA = sortAscending ? this : task;
|
||||
final TaskEntity taskB = sortAscending ? task : this;
|
||||
|
||||
switch (sortField) {
|
||||
case TaskFields.duration:
|
||||
response = taskA.clientId.compareTo(taskB.clientId);
|
||||
response = taskA.duration.compareTo(taskB.duration);
|
||||
break;
|
||||
case TaskFields.description:
|
||||
response = taskA.description.compareTo(taskB.description);
|
||||
break;
|
||||
case TaskFields.customValue1:
|
||||
response = taskA.customValue1.compareTo(taskB.customValue1);
|
||||
break;
|
||||
case TaskFields.customValue2:
|
||||
response = taskA.customValue2.compareTo(taskB.customValue2);
|
||||
break;
|
||||
case TaskFields.customValue3:
|
||||
response = taskA.customValue3.compareTo(taskB.customValue3);
|
||||
break;
|
||||
case TaskFields.clientId:
|
||||
case TaskFields.client:
|
||||
final clientA = clientMap[taskA.clientId] ?? ClientEntity();
|
||||
final clientB = clientMap[taskB.clientId] ?? ClientEntity();
|
||||
response = clientA.listDisplayName
|
||||
.toLowerCase()
|
||||
.compareTo(clientB.listDisplayName.toLowerCase());
|
||||
break;
|
||||
case TaskFields.projectId:
|
||||
case TaskFields.project:
|
||||
final projectA = projectMap[taskA.projectId] ?? ProjectEntity();
|
||||
final projectB = projectMap[taskB.projectId] ?? ProjectEntity();
|
||||
response = projectA.listDisplayName
|
||||
.toLowerCase()
|
||||
.compareTo(projectB.listDisplayName.toLowerCase());
|
||||
break;
|
||||
case TaskFields.invoiceId:
|
||||
final invoiceA = invoiceMap[taskA.invoiceId] ?? InvoiceEntity();
|
||||
final invoiceB = invoiceMap[taskB.invoiceId] ?? InvoiceEntity();
|
||||
response = invoiceA.listDisplayName
|
||||
.toLowerCase()
|
||||
.compareTo(invoiceB.listDisplayName.toLowerCase());
|
||||
break;
|
||||
case EntityFields.state:
|
||||
final stateA =
|
||||
EntityState.valueOf(taskA.entityState) ?? EntityState.active;
|
||||
final stateB =
|
||||
EntityState.valueOf(taskB.entityState) ?? EntityState.active;
|
||||
response =
|
||||
stateA.name.toLowerCase().compareTo(stateB.name.toLowerCase());
|
||||
break;
|
||||
case TaskFields.timeLog:
|
||||
response =
|
||||
taskA.timeLog.toLowerCase().compareTo(taskB.timeLog.toLowerCase());
|
||||
break;
|
||||
case EntityFields.createdAt:
|
||||
response = taskA.createdAt.compareTo(taskB.createdAt);
|
||||
break;
|
||||
case TaskFields.archivedAt:
|
||||
response = taskA.archivedAt.compareTo(taskB.archivedAt);
|
||||
break;
|
||||
case TaskFields.updatedAt:
|
||||
response = taskA.updatedAt.compareTo(taskB.updatedAt);
|
||||
break;
|
||||
default:
|
||||
print('## ERROR: sort by task.$sortField is not implemented');
|
||||
|
|
|
|||
|
|
@ -32,11 +32,19 @@ InvoiceItemEntity convertTaskToInvoiceItem(
|
|||
..quantity = round(task.duration / 3600, 3));
|
||||
}
|
||||
|
||||
var memoizedTaskList = memo2(
|
||||
(BuiltMap<String, TaskEntity> taskMap, String clientId) =>
|
||||
taskList(taskMap, clientId));
|
||||
var memoizedTaskList = memo5((BuiltMap<String, TaskEntity> taskMap,
|
||||
String clientId,
|
||||
BuiltMap<String, UserEntity> userMap,
|
||||
BuiltMap<String, ClientEntity> clientMap,
|
||||
BuiltMap<String, ProjectEntity> projectMap) =>
|
||||
taskList(taskMap, clientId, userMap, clientMap, projectMap));
|
||||
|
||||
List<String> taskList(BuiltMap<String, TaskEntity> taskMap, String clientId) {
|
||||
List<String> taskList(
|
||||
BuiltMap<String, TaskEntity> taskMap,
|
||||
String clientId,
|
||||
BuiltMap<String, UserEntity> userMap,
|
||||
BuiltMap<String, ClientEntity> clientMap,
|
||||
BuiltMap<String, ProjectEntity> projectMap) {
|
||||
final list = taskMap.keys.where((taskId) {
|
||||
final task = taskMap[taskId];
|
||||
if (clientId != null && clientId != null && task.clientId != clientId) {
|
||||
|
|
@ -51,35 +59,50 @@ List<String> taskList(BuiltMap<String, TaskEntity> taskMap, String clientId) {
|
|||
return list;
|
||||
}
|
||||
|
||||
var memoizedDropdownTaskList = memo2(
|
||||
(BuiltMap<String, TaskEntity> taskMap, BuiltList<String> taskList) =>
|
||||
dropdownTasksSelector(taskMap, taskList));
|
||||
var memoizedDropdownTaskList = memo6((BuiltMap<String, TaskEntity> taskMap,
|
||||
BuiltList<String> taskList,
|
||||
BuiltMap<String, UserEntity> userMap,
|
||||
BuiltMap<String, ClientEntity> clientMap,
|
||||
BuiltMap<String, InvoiceEntity> invoiceMap,
|
||||
BuiltMap<String, ProjectEntity> projectMap) =>
|
||||
dropdownTasksSelector(
|
||||
taskMap, taskList, userMap, clientMap, invoiceMap, projectMap));
|
||||
|
||||
List<String> dropdownTasksSelector(
|
||||
BuiltMap<String, TaskEntity> taskMap, BuiltList<String> taskList) {
|
||||
BuiltMap<String, TaskEntity> taskMap,
|
||||
BuiltList<String> taskList,
|
||||
BuiltMap<String, UserEntity> userMap,
|
||||
BuiltMap<String, ClientEntity> clientMap,
|
||||
BuiltMap<String, InvoiceEntity> invoiceMap,
|
||||
BuiltMap<String, ProjectEntity> projectMap) {
|
||||
final list = taskList.where((taskId) => taskMap[taskId].isActive).toList();
|
||||
|
||||
list.sort((taskAId, taskBId) {
|
||||
final taskA = taskMap[taskAId];
|
||||
final taskB = taskMap[taskBId];
|
||||
return taskA.compareTo(taskB, TaskFields.updatedAt, false);
|
||||
return taskA.compareTo(taskB, TaskFields.updatedAt, false, userMap,
|
||||
clientMap, projectMap, invoiceMap);
|
||||
});
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
var memoizedFilteredTaskList = memo5((BuiltMap<String, TaskEntity> taskMap,
|
||||
var memoizedFilteredTaskList = memo7((BuiltMap<String, TaskEntity> taskMap,
|
||||
BuiltMap<String, ClientEntity> clientMap,
|
||||
BuiltMap<String, UserEntity> userMap,
|
||||
BuiltMap<String, ProjectEntity> projectMap,
|
||||
BuiltMap<String, InvoiceEntity> invoiceMap,
|
||||
BuiltList<String> taskList,
|
||||
ListUIState taskListState) =>
|
||||
filteredTasksSelector(
|
||||
taskMap, clientMap, projectMap, taskList, taskListState));
|
||||
filteredTasksSelector(taskMap, clientMap, userMap, projectMap, invoiceMap,
|
||||
taskList, taskListState));
|
||||
|
||||
List<String> filteredTasksSelector(
|
||||
BuiltMap<String, TaskEntity> taskMap,
|
||||
BuiltMap<String, ClientEntity> clientMap,
|
||||
BuiltMap<String, UserEntity> userMap,
|
||||
BuiltMap<String, ProjectEntity> projectMap,
|
||||
BuiltMap<String, InvoiceEntity> invoiceMap,
|
||||
BuiltList<String> taskList,
|
||||
ListUIState taskListState) {
|
||||
final list = taskList.where((taskId) {
|
||||
|
|
@ -140,7 +163,13 @@ List<String> filteredTasksSelector(
|
|||
final taskA = taskMap[taskAId];
|
||||
final taskB = taskMap[taskBId];
|
||||
return taskA.compareTo(
|
||||
taskB, taskListState.sortField, taskListState.sortAscending);
|
||||
taskB,
|
||||
taskListState.sortField,
|
||||
taskListState.sortAscending,
|
||||
userMap,
|
||||
clientMap,
|
||||
projectMap,
|
||||
invoiceMap);
|
||||
});
|
||||
|
||||
return list;
|
||||
|
|
|
|||
|
|
@ -212,7 +212,12 @@ class _InvoiceItemSelectorState extends State<InvoiceItemSelector>
|
|||
}
|
||||
|
||||
Widget _taskList() {
|
||||
final matches = memoizedTaskList(state.taskState.map, _filterClientId)
|
||||
final matches = memoizedTaskList(
|
||||
state.taskState.map,
|
||||
_filterClientId,
|
||||
state.userState.map,
|
||||
state.clientState.map,
|
||||
state.projectState.map)
|
||||
.where((entityId) {
|
||||
final task = state.taskState.map[entityId];
|
||||
if (widget.excluded != null && widget.excluded.contains(task)) {
|
||||
|
|
|
|||
|
|
@ -127,7 +127,9 @@ class TaskListVM {
|
|||
taskList: memoizedFilteredTaskList(
|
||||
state.taskState.map,
|
||||
state.clientState.map,
|
||||
state.userState.map,
|
||||
state.projectState.map,
|
||||
state.invoiceState.map,
|
||||
state.taskState.list,
|
||||
state.taskListState),
|
||||
taskMap: state.taskState.map,
|
||||
|
|
|
|||
|
|
@ -47,7 +47,9 @@ class TaskScreenVM {
|
|||
taskList: memoizedFilteredTaskList(
|
||||
state.taskState.map,
|
||||
state.clientState.map,
|
||||
state.userState.map,
|
||||
state.projectState.map,
|
||||
state.invoiceState.map,
|
||||
state.taskState.list,
|
||||
state.taskListState),
|
||||
userCompany: state.userCompany,
|
||||
|
|
|
|||
Loading…
Reference in New Issue