Completed Sort Fields for Project model

This commit is contained in:
Gianfranco Gasbarri 2020-06-30 22:18:24 +01:00
parent bb1bdc1257
commit c61f57ba31
5 changed files with 85 additions and 20 deletions

View File

@ -164,7 +164,12 @@ abstract class ProjectEntity extends Object
return actions..addAll(super.getActions(userCompany: userCompany));
}
int compareTo(ProjectEntity project, String sortField, bool sortAscending) {
int compareTo(
ProjectEntity project,
String sortField,
bool sortAscending,
BuiltMap<String, UserEntity> userMap,
BuiltMap<String, ClientEntity> clientMap) {
int response = 0;
final ProjectEntity projectA = sortAscending ? this : project;
final ProjectEntity projectB = sortAscending ? project : this;
@ -177,6 +182,53 @@ abstract class ProjectEntity extends Object
case ProjectFields.taskRate:
response = projectA.taskRate.compareTo(projectB.taskRate);
break;
case ProjectFields.client:
final clientA = clientMap[projectA.clientId] ?? ClientEntity();
final clientB = clientMap[projectB.clientId] ?? ClientEntity();
response = clientA.listDisplayName
.toLowerCase()
.compareTo(clientB.listDisplayName.toLowerCase());
break;
case ProjectFields.dueDate:
response = projectA.dueDate.compareTo(projectB.dueDate);
break;
case ProjectFields.privateNotes:
response = projectA.privateNotes.compareTo(projectB.privateNotes);
break;
case ProjectFields.budgetedHours:
response = projectA.budgetedHours.compareTo(projectB.budgetedHours);
break;
case EntityFields.state:
final stateA =
EntityState.valueOf(projectA.entityState) ?? EntityState.active;
final stateB =
EntityState.valueOf(projectB.entityState) ?? EntityState.active;
response =
stateA.name.toLowerCase().compareTo(stateB.name.toLowerCase());
break;
case EntityFields.createdAt:
response = projectA.createdAt.compareTo(projectB.createdAt);
break;
case ProjectFields.archivedAt:
response = projectA.archivedAt.compareTo(projectB.archivedAt);
break;
case ProjectFields.updatedAt:
response = projectA.updatedAt.compareTo(projectB.updatedAt);
break;
case EntityFields.assignedTo:
final userA = userMap[projectA.assignedUserId] ?? UserEntity();
final userB = userMap[projectB.assignedUserId] ?? UserEntity();
response = userA.listDisplayName
.toLowerCase()
.compareTo(userB.listDisplayName.toLowerCase());
break;
case EntityFields.createdBy:
final userA = userMap[projectA.createdUserId] ?? UserEntity();
final userB = userMap[projectB.createdUserId] ?? UserEntity();
response = userA.listDisplayName
.toLowerCase()
.compareTo(userB.listDisplayName.toLowerCase());
break;
default:
print('## ERROR: sort by project.$sortField is not implemented');
break;

View File

@ -21,15 +21,20 @@ List<InvoiceItemEntity> convertProjectToInvoiceItem(
return items;
}
var memoizedDropdownProjectList = memo4(
(BuiltMap<String, ProjectEntity> projectMap, BuiltList<String> projectList,
BuiltMap<String, ClientEntity> clientMap, String clientId) =>
dropdownProjectsSelector(projectMap, projectList, clientMap, clientId));
var memoizedDropdownProjectList = memo5(
(BuiltMap<String, ProjectEntity> projectMap,
BuiltList<String> projectList,
BuiltMap<String, ClientEntity> clientMap,
BuiltMap<String, UserEntity> userMap,
String clientId) =>
dropdownProjectsSelector(
projectMap, projectList, clientMap, userMap, clientId));
List<String> dropdownProjectsSelector(
BuiltMap<String, ProjectEntity> projectMap,
BuiltList<String> projectList,
BuiltMap<String, ClientEntity> clientMap,
BuiltMap<String, UserEntity> userMap,
String clientId) {
final list = projectList.where((projectId) {
final project = projectMap[projectId];
@ -49,25 +54,28 @@ List<String> dropdownProjectsSelector(
list.sort((projectAId, projectBId) {
final projectA = projectMap[projectAId];
final projectB = projectMap[projectBId];
return projectA.compareTo(projectB, ProjectFields.name, true);
return projectA.compareTo(
projectB, ProjectFields.name, true, userMap, clientMap);
});
return list;
}
var memoizedFilteredProjectList = memo4(
var memoizedFilteredProjectList = memo5(
(BuiltMap<String, ProjectEntity> projectMap,
BuiltList<String> projectList,
ListUIState projectListState,
BuiltMap<String, ClientEntity> clientMap) =>
BuiltMap<String, ClientEntity> clientMap,
BuiltMap<String, UserEntity> userMap) =>
filteredProjectsSelector(
projectMap, projectList, projectListState, clientMap));
projectMap, projectList, projectListState, clientMap, userMap));
List<String> filteredProjectsSelector(
BuiltMap<String, ProjectEntity> projectMap,
BuiltList<String> projectList,
ListUIState projectListState,
BuiltMap<String, ClientEntity> clientMap) {
BuiltMap<String, ClientEntity> clientMap,
BuiltMap<String, UserEntity> userMap) {
final list = projectList.where((projectId) {
final project = projectMap[projectId];
final client =
@ -111,8 +119,8 @@ List<String> filteredProjectsSelector(
list.sort((projectAId, projectBId) {
final projectA = projectMap[projectAId];
final projectB = projectMap[projectBId];
return projectA.compareTo(
projectB, projectListState.sortField, projectListState.sortAscending);
return projectA.compareTo(projectB, projectListState.sortField,
projectListState.sortAscending, userMap, clientMap);
});
return list;

View File

@ -124,7 +124,9 @@ class ProjectListVM {
state.projectState.map,
state.projectState.list,
state.projectListState,
state.clientState.map),
state.clientState.map,
state.userState.map,
),
projectMap: state.projectState.map,
clientMap: state.clientState.map,
isLoading: state.isLoading,

View File

@ -48,7 +48,9 @@ class ProjectScreenVM {
state.projectState.map,
state.projectState.list,
state.projectListState,
state.clientState.map),
state.clientState.map,
state.userState.map,
),
userCompany: state.userCompany,
isInMultiselect: state.projectListState.isInMultiselect(),
);

View File

@ -118,6 +118,7 @@ class _TaskEditDetailsState extends State<TaskEditDetails> {
state.projectState.map,
state.projectState.list,
state.clientState.map,
state.userState.map,
task.clientId),
onSelected: (selected) {
final project = selected as ProjectEntity;