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