Needs work filter

This commit is contained in:
Adina Țeudan 2020-11-06 00:30:09 +02:00
parent 4ce1592207
commit 91b4e77c2e
4 changed files with 21 additions and 11 deletions

View File

@ -16,18 +16,29 @@ export function handleCheckedValue(filter: FilterModel) {
} }
} }
export function checkFilter(entity: any, filters: FilterModel[], validate: Function) { export function checkFilter(
entity: any,
filters: FilterModel[],
validate: Function,
matchAll: boolean = false
) {
const hasChecked = filters.find((f) => f.checked); const hasChecked = filters.find((f) => f.checked);
if (!hasChecked) { if (!hasChecked) {
return true; return true;
} }
let filterMatched = false;
let filterMatched = matchAll;
for (const filter of filters) { for (const filter of filters) {
if (filter.checked && validate(entity, filter)) { if (filter.checked) {
filterMatched = true; if (matchAll) {
break; filterMatched = filterMatched && validate(entity, filter);
} else {
filterMatched = filterMatched || validate(entity, filter);
}
} }
} }
return filterMatched; return filterMatched;
} }
@ -57,13 +68,13 @@ export const addedDateChecker = (pw: ProjectWrapper, filter: FilterModel) =>
export function getFilteredEntities( export function getFilteredEntities(
entities: any[], entities: any[],
filters: { values: FilterModel[]; checker: Function }[] filters: { values: FilterModel[]; checker: Function; matchAll?: boolean }[]
) { ) {
const filteredEntities = []; const filteredEntities = [];
for (const entity of entities) { for (const entity of entities) {
let add = true; let add = true;
for (const filter of filters) { for (const filter of filters) {
add = add && checkFilter(entity, filter.values, filter.checker); add = add && checkFilter(entity, filter.values, filter.checker, filter.matchAll);
} }
if (add) { if (add) {
filteredEntities.push(entity); filteredEntities.push(entity);

View File

@ -62,7 +62,7 @@
<span class="all-caps-label"> <span class="all-caps-label">
{{ {{
'project-listing.table-header.title' 'project-listing.table-header.title'
| translate: { length: appStateService.allProjects?.length || 0 } | translate: { length: displayedProjects.length || 0 }
}} }}
</span> </span>
</div> </div>

View File

@ -80,8 +80,7 @@
<span class="all-caps-label"> <span class="all-caps-label">
{{ {{
'project-overview.table-header.title' 'project-overview.table-header.title'
| translate | translate: { length: displayedFiles.length || 0 }
: { length: appStateService.activeProject?.files.length || 0 }
}} }}
</span> </span>
</div> </div>

View File

@ -333,7 +333,7 @@ export class ProjectOverviewScreenComponent implements OnInit, OnDestroy {
{ values: this.statusFilters, checker: keyChecker('status') }, { values: this.statusFilters, checker: keyChecker('status') },
{ values: this.peopleFilters, checker: keyChecker('currentReviewer') }, { values: this.peopleFilters, checker: keyChecker('currentReviewer') },
{ values: this.addedDateFilters, checker: fileAddedFilterChecker }, { values: this.addedDateFilters, checker: fileAddedFilterChecker },
{ values: this.needsWorkFilters, checker: annotationFilterChecker } { values: this.needsWorkFilters, checker: annotationFilterChecker, matchAll: true }
]; ];
this.displayedFiles = getFilteredEntities( this.displayedFiles = getFilteredEntities(
this.appStateService.activeProject.files, this.appStateService.activeProject.files,