Reset filter button in project listing & overview
This commit is contained in:
parent
902f518357
commit
9ca7b93d2b
@ -49,15 +49,15 @@ export class FilterComponent {
|
|||||||
this.applyFilters();
|
this.applyFilters();
|
||||||
}
|
}
|
||||||
|
|
||||||
activateAllFilters() {
|
public activateAllFilters() {
|
||||||
this._setAllFilters(true);
|
this._setAllFilters(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
deactivateAllFilters() {
|
public deactivateAllFilters() {
|
||||||
this._setAllFilters(false);
|
this._setAllFilters(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
get hasActiveFilters(): boolean {
|
public get hasActiveFilters(): boolean {
|
||||||
for (const filter of this.filters ? this.filters : []) {
|
for (const filter of this.filters ? this.filters : []) {
|
||||||
if (filter.checked || filter.indeterminate) {
|
if (filter.checked || filter.indeterminate) {
|
||||||
return true;
|
return true;
|
||||||
@ -66,7 +66,7 @@ export class FilterComponent {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
applyFilters() {
|
public applyFilters() {
|
||||||
this.filtersChanged.emit(this.filters);
|
this.filtersChanged.emit(this.filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -40,7 +40,7 @@
|
|||||||
<textarea
|
<textarea
|
||||||
redactionHasScrollbar
|
redactionHasScrollbar
|
||||||
formControlName="text"
|
formControlName="text"
|
||||||
[placeholder]="'watermark-screen.placeholder' | translate"
|
[placeholder]="'watermark-screen.form.text-placeholder' | translate"
|
||||||
(mousemove)="triggerChanges()"
|
(mousemove)="triggerChanges()"
|
||||||
class="w-full"
|
class="w-full"
|
||||||
name="text"
|
name="text"
|
||||||
|
|||||||
@ -3,18 +3,21 @@
|
|||||||
<div class="filters">
|
<div class="filters">
|
||||||
<div translate="filters.filter-by"></div>
|
<div translate="filters.filter-by"></div>
|
||||||
<redaction-filter
|
<redaction-filter
|
||||||
|
#statusFilter
|
||||||
(filtersChanged)="filtersChanged()"
|
(filtersChanged)="filtersChanged()"
|
||||||
[filterLabel]="'filters.status'"
|
[filterLabel]="'filters.status'"
|
||||||
[filters]="statusFilters"
|
[filters]="statusFilters"
|
||||||
[icon]="'red:status'"
|
[icon]="'red:status'"
|
||||||
></redaction-filter>
|
></redaction-filter>
|
||||||
<redaction-filter
|
<redaction-filter
|
||||||
|
#peopleFilter
|
||||||
(filtersChanged)="filtersChanged()"
|
(filtersChanged)="filtersChanged()"
|
||||||
[filterLabel]="'filters.people'"
|
[filterLabel]="'filters.people'"
|
||||||
[filters]="peopleFilters"
|
[filters]="peopleFilters"
|
||||||
[icon]="'red:user'"
|
[icon]="'red:user'"
|
||||||
></redaction-filter>
|
></redaction-filter>
|
||||||
<redaction-filter
|
<redaction-filter
|
||||||
|
#needsWorkFilter
|
||||||
(filtersChanged)="filtersChanged()"
|
(filtersChanged)="filtersChanged()"
|
||||||
[filterLabel]="'filters.needs-work'"
|
[filterLabel]="'filters.needs-work'"
|
||||||
[filterTemplate]="needsWorkTemplate"
|
[filterTemplate]="needsWorkTemplate"
|
||||||
@ -43,6 +46,8 @@
|
|||||||
<span class="all-caps-label">
|
<span class="all-caps-label">
|
||||||
{{ 'project-listing.table-header.title' | translate: { length: displayedProjects.length || 0 } }}
|
{{ 'project-listing.table-header.title' | translate: { length: displayedProjects.length || 0 } }}
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
|
<div class="reset-filters" *ngIf="hasActiveFilters"><span (click)="resetFilters()" translate="reset-filters"></span></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div [class.no-data]="noData" class="table-header" redactionSyncWidth="table-item">
|
<div [class.no-data]="noData" class="table-header" redactionSyncWidth="table-item">
|
||||||
|
|||||||
@ -25,6 +25,7 @@ import { StatusSorter } from '../../common/sorters/status-sorter';
|
|||||||
import { Router } from '@angular/router';
|
import { Router } from '@angular/router';
|
||||||
import { FormBuilder, FormGroup } from '@angular/forms';
|
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||||
import { debounce } from '../../utils/debounce';
|
import { debounce } from '../../utils/debounce';
|
||||||
|
import { FilterComponent } from '../../common/filter/filter.component';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'redaction-project-listing-screen',
|
selector: 'redaction-project-listing-screen',
|
||||||
@ -51,6 +52,10 @@ export class ProjectListingScreenComponent implements OnInit, OnDestroy {
|
|||||||
public displayedProjects: ProjectWrapper[] = [];
|
public displayedProjects: ProjectWrapper[] = [];
|
||||||
private projectAutoUpdateTimer: Subscription;
|
private projectAutoUpdateTimer: Subscription;
|
||||||
|
|
||||||
|
@ViewChild('statusFilter') private _statusFilterComponent: FilterComponent;
|
||||||
|
@ViewChild('peopleFilter') private _peopleFilterComponent: FilterComponent;
|
||||||
|
@ViewChild('needsWorkFilter') private _needsWorkFilterComponent: FilterComponent;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
public readonly appStateService: AppStateService,
|
public readonly appStateService: AppStateService,
|
||||||
public readonly userService: UserService,
|
public readonly userService: UserService,
|
||||||
@ -90,10 +95,23 @@ export class ProjectListingScreenComponent implements OnInit, OnDestroy {
|
|||||||
this.projectAutoUpdateTimer.unsubscribe();
|
this.projectAutoUpdateTimer.unsubscribe();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public get hasActiveFilters() {
|
||||||
|
return (
|
||||||
|
this._statusFilterComponent?.hasActiveFilters || this._peopleFilterComponent?.hasActiveFilters || this._needsWorkFilterComponent?.hasActiveFilters
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public get noData() {
|
public get noData() {
|
||||||
return this.displayedProjects?.length === 0;
|
return this.displayedProjects?.length === 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public resetFilters() {
|
||||||
|
this._statusFilterComponent.deactivateAllFilters();
|
||||||
|
this._peopleFilterComponent.deactivateAllFilters();
|
||||||
|
this._needsWorkFilterComponent.deactivateAllFilters();
|
||||||
|
this.filtersChanged();
|
||||||
|
}
|
||||||
|
|
||||||
private _calculateData() {
|
private _calculateData() {
|
||||||
this._computeAllFilters();
|
this._computeAllFilters();
|
||||||
this._filterProjects();
|
this._filterProjects();
|
||||||
|
|||||||
@ -3,18 +3,21 @@
|
|||||||
<div class="filters">
|
<div class="filters">
|
||||||
<div translate="filters.filter-by"></div>
|
<div translate="filters.filter-by"></div>
|
||||||
<redaction-filter
|
<redaction-filter
|
||||||
|
#statusFilter
|
||||||
(filtersChanged)="filtersChanged()"
|
(filtersChanged)="filtersChanged()"
|
||||||
[filterLabel]="'filters.status'"
|
[filterLabel]="'filters.status'"
|
||||||
[filters]="statusFilters"
|
[filters]="statusFilters"
|
||||||
[icon]="'red:status'"
|
[icon]="'red:status'"
|
||||||
></redaction-filter>
|
></redaction-filter>
|
||||||
<redaction-filter
|
<redaction-filter
|
||||||
|
#peopleFilter
|
||||||
(filtersChanged)="filtersChanged()"
|
(filtersChanged)="filtersChanged()"
|
||||||
[filterLabel]="'filters.assigned-people'"
|
[filterLabel]="'filters.assigned-people'"
|
||||||
[filters]="peopleFilters"
|
[filters]="peopleFilters"
|
||||||
[icon]="'red:user'"
|
[icon]="'red:user'"
|
||||||
></redaction-filter>
|
></redaction-filter>
|
||||||
<redaction-filter
|
<redaction-filter
|
||||||
|
#needsWorkFilter
|
||||||
(filtersChanged)="filtersChanged()"
|
(filtersChanged)="filtersChanged()"
|
||||||
[filterLabel]="'filters.needs-work'"
|
[filterLabel]="'filters.needs-work'"
|
||||||
[filterTemplate]="needsWorkTemplate"
|
[filterTemplate]="needsWorkTemplate"
|
||||||
@ -120,6 +123,8 @@
|
|||||||
</span>
|
</span>
|
||||||
|
|
||||||
<redaction-bulk-actions [selectedFileIds]="selectedFileIds" (reload)="bulkActionPerformed()"></redaction-bulk-actions>
|
<redaction-bulk-actions [selectedFileIds]="selectedFileIds" (reload)="bulkActionPerformed()"></redaction-bulk-actions>
|
||||||
|
|
||||||
|
<div class="reset-filters" *ngIf="hasActiveFilters"><span (click)="resetFilters()" translate="reset-filters"></span></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="table-header" redactionSyncWidth="table-item" [class.no-data]="noData">
|
<div class="table-header" redactionSyncWidth="table-item" [class.no-data]="noData">
|
||||||
|
|||||||
@ -27,6 +27,7 @@ import { FormBuilder, FormGroup } from '@angular/forms';
|
|||||||
import { debounce } from '../../utils/debounce';
|
import { debounce } from '../../utils/debounce';
|
||||||
import { download } from '../../utils/file-download-utils';
|
import { download } from '../../utils/file-download-utils';
|
||||||
import { convertFiles, handleFileDrop } from '../../utils/file-drop-utils';
|
import { convertFiles, handleFileDrop } from '../../utils/file-drop-utils';
|
||||||
|
import { FilterComponent } from '../../common/filter/filter.component';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'redaction-project-overview-screen',
|
selector: 'redaction-project-overview-screen',
|
||||||
@ -52,6 +53,10 @@ export class ProjectOverviewScreenComponent implements OnInit, OnDestroy {
|
|||||||
private _projectDetailsComponent: ProjectDetailsComponent;
|
private _projectDetailsComponent: ProjectDetailsComponent;
|
||||||
private filesAutoUpdateTimer: Subscription;
|
private filesAutoUpdateTimer: Subscription;
|
||||||
|
|
||||||
|
@ViewChild('statusFilter') private _statusFilterComponent: FilterComponent;
|
||||||
|
@ViewChild('peopleFilter') private _peopleFilterComponent: FilterComponent;
|
||||||
|
@ViewChild('needsWorkFilter') private _needsWorkFilterComponent: FilterComponent;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
public readonly appStateService: AppStateService,
|
public readonly appStateService: AppStateService,
|
||||||
public readonly userService: UserService,
|
public readonly userService: UserService,
|
||||||
@ -136,6 +141,19 @@ export class ProjectOverviewScreenComponent implements OnInit, OnDestroy {
|
|||||||
this._sortingService.toggleSort('project-overview', $event);
|
this._sortingService.toggleSort('project-overview', $event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public get hasActiveFilters() {
|
||||||
|
return (
|
||||||
|
this._statusFilterComponent?.hasActiveFilters || this._peopleFilterComponent?.hasActiveFilters || this._needsWorkFilterComponent?.hasActiveFilters
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public resetFilters() {
|
||||||
|
this._statusFilterComponent.deactivateAllFilters();
|
||||||
|
this._peopleFilterComponent.deactivateAllFilters();
|
||||||
|
this._needsWorkFilterComponent.deactivateAllFilters();
|
||||||
|
this.filtersChanged();
|
||||||
|
}
|
||||||
|
|
||||||
reloadProjects() {
|
reloadProjects() {
|
||||||
this.appStateService.getFiles().then(() => {
|
this.appStateService.getFiles().then(() => {
|
||||||
this.calculateData();
|
this.calculateData();
|
||||||
|
|||||||
@ -667,7 +667,6 @@
|
|||||||
"revert-changes": "Revert"
|
"revert-changes": "Revert"
|
||||||
},
|
},
|
||||||
"watermark-screen": {
|
"watermark-screen": {
|
||||||
"placeholder": "Watermark ... ",
|
|
||||||
"form": {
|
"form": {
|
||||||
"text-placeholder": "Enter text",
|
"text-placeholder": "Enter text",
|
||||||
"opacity": "Opacity",
|
"opacity": "Opacity",
|
||||||
@ -695,5 +694,6 @@
|
|||||||
},
|
},
|
||||||
"rule-editor": "Rule Editor",
|
"rule-editor": "Rule Editor",
|
||||||
"watermark": "Watermark",
|
"watermark": "Watermark",
|
||||||
"pending-changes-guard": "WARNING: You have unsaved changes. Press Cancel to go back and save these changes, or OK to lose these changes."
|
"pending-changes-guard": "WARNING: You have unsaved changes. Press Cancel to go back and save these changes, or OK to lose these changes.",
|
||||||
|
"reset-filters": "Reset Filters"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -25,7 +25,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.justify-end {
|
.reset-filters {
|
||||||
justify-content: flex-end;
|
flex: 1;
|
||||||
|
text-align: end;
|
||||||
|
color: $primary;
|
||||||
|
|
||||||
|
span {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user