+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0; else nothingToShow">
diff --git a/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.ts b/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.ts
index 63b370b4..751c38c3 100644
--- a/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.ts
+++ b/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.ts
@@ -9,6 +9,7 @@ import { SalaryAdminItem } from './salary-admin-item';
import { ConfirmMsg } from '@shared/components/dialogs/models/confirm-msg';
import { DialogMessage } from '@shared/components/dialogs/models/dialog-message';
import { AlertService } from '@shared/components/alert/services/alert.service';
+import { SalariesTableFilter } from './salaries-table-filter';
@Component({
templateUrl: './salaries-admin-page.component.html'
@@ -19,6 +20,8 @@ export class SalariesAdminPageComponent implements OnInit, OnDestroy {
source: PaginatedList | null = null;
confirmDeletionMessage: DialogMessage | null = null;
+ readonly filter = new SalariesTableFilter();
+
constructor(
private readonly service: UserSalariesService,
private readonly titleService: TitleService,
@@ -30,8 +33,18 @@ export class SalariesAdminPageComponent implements OnInit, OnDestroy {
}
loadData(page = 1): void {
+
+ this.salaries = null;
+ this.source = null;
+
this.service
- .all({ ...defaultPageParams, page })
+ .all({
+ page,
+ pageSize: defaultPageParams.pageSize,
+ profession: this.filter.profession ?? null,
+ company: this.filter.company ?? null,
+ grade: this.filter.grade ?? null,
+ })
.pipe(untilDestroyed(this))
.subscribe((x) => {
this.salaries = x.results.map((x) => new SalaryAdminItem(x));
@@ -60,4 +73,10 @@ export class SalariesAdminPageComponent implements OnInit, OnDestroy {
)
);
}
+
+ clearFilter(): void {
+ this.filter.profession = null;
+ this.filter.company = null;
+ this.loadData();
+ }
}
diff --git a/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-table-filter.ts b/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-table-filter.ts
new file mode 100644
index 00000000..5b035dca
--- /dev/null
+++ b/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-table-filter.ts
@@ -0,0 +1,19 @@
+import { DeveloperGrade } from "@models/enums";
+import { CompanyType } from "@models/salaries/company-type";
+import { UserProfession } from "@models/salaries/user-profession";
+import { CompanyTypeSelectItem } from "@shared/select-boxes/company-type-select-item";
+import { DeveloperGradeSelectItem } from "@shared/select-boxes/developer-grade-select-item";
+import { ProfessionSelectItem } from "@shared/select-boxes/profession-select-item";
+
+export class SalariesTableFilter {
+
+ readonly professions: Array = ProfessionSelectItem.allItems();
+ readonly companies: Array = CompanyTypeSelectItem.allItems();
+ readonly grades: Array = DeveloperGradeSelectItem.gradesSimpleOnly();
+
+ profession: UserProfession | null = null;
+ company: CompanyType | null = null;
+ grade: DeveloperGrade | null = null;
+
+ constructor() {}
+}
diff --git a/src/app/modules/salaries/components/add-salary/add-salary.component.html b/src/app/modules/salaries/components/add-salary/add-salary.component.html
index baca3c7a..3b9c31ee 100644
--- a/src/app/modules/salaries/components/add-salary/add-salary.component.html
+++ b/src/app/modules/salaries/components/add-salary/add-salary.component.html
@@ -49,7 +49,7 @@
diff --git a/src/app/services/user-salaries.service.ts b/src/app/services/user-salaries.service.ts
index 4d6a5e61..c97b82a2 100644
--- a/src/app/services/user-salaries.service.ts
+++ b/src/app/services/user-salaries.service.ts
@@ -63,6 +63,14 @@ export interface UpdateSalaryRequest {
grade: DeveloperGrade | null;
}
+export interface AdminAllSalariesQueryParams extends PageParams {
+ page: number;
+ pageSize: number;
+ profession: UserProfession | null;
+ company: CompanyType | null;
+ grade: DeveloperGrade | null;
+}
+
@Injectable({
providedIn: 'root'
})
@@ -70,8 +78,9 @@ export class UserSalariesService {
private readonly root = '/api/salaries/';
constructor(private readonly api: ApiService) {}
- all(pageParams: PageParams = defaultPageParams): Observable
> {
- return this.api.get>(this.root + 'all?' + new ConvertObjectToHttpParams(pageParams).get());
+ all(pageParams: AdminAllSalariesQueryParams): Observable> {
+ return this.api.get>(
+ this.root + 'all?' + new ConvertObjectToHttpParams(pageParams).get());
}
charts(): Observable {
diff --git a/src/app/shared/select-boxes/company-type-select-item.ts b/src/app/shared/select-boxes/company-type-select-item.ts
index 0dc69067..bed4e8ad 100644
--- a/src/app/shared/select-boxes/company-type-select-item.ts
+++ b/src/app/shared/select-boxes/company-type-select-item.ts
@@ -16,7 +16,7 @@ export class CompanyTypeSelectItem implements SelectItem {
this.label = 'Казахстанская';
break;
case CompanyType.Remote:
- this.label = 'Удаленно на иностранную компанию';
+ this.label = 'Иностранная компания (оплата в валюте)';
break;
default:
this.label = new SplittedByWhitespacesString(CompanyType[item]).value;
diff --git a/src/app/shared/value-objects/convert-object-to-http.ts b/src/app/shared/value-objects/convert-object-to-http.ts
index 4fa1db29..c626a98e 100644
--- a/src/app/shared/value-objects/convert-object-to-http.ts
+++ b/src/app/shared/value-objects/convert-object-to-http.ts
@@ -14,6 +14,11 @@ export class ConvertObjectToHttpParams {
let httpParams: HttpParams = new HttpParams();
for (const field of Object.keys(this.params)) {
+ const value = this.params[field];
+ if (value == null) {
+ continue;
+ }
+
httpParams = httpParams.append(field, this.params[field]);
}