From 74ddf70a77bd6a290e60f9cb091bc69439fef1c3 Mon Sep 17 00:00:00 2001 From: "maxim.gorbatyuk" Date: Thu, 25 Jan 2024 08:10:35 +0600 Subject: [PATCH 1/5] Added component for table --- src/app/modules/admin/admin.module.ts | 9 +- .../salaries-admin-page.component.html | 84 ++---------------- .../salaries-admin-page.component.ts | 54 ++++-------- ...aries-admin-paginated-table.component.html | 87 +++++++++++++++++++ ...es-admin-paginated-table.component.spec.ts | 28 ++++++ ...alaries-admin-paginated-table.component.ts | 63 ++++++++++++++ .../salaries-table-filter.ts | 19 ++++ .../salary-admin-item.ts | 30 +++++++ 8 files changed, 260 insertions(+), 114 deletions(-) create mode 100644 src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-admin-paginated-table.component.html create mode 100644 src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-admin-paginated-table.component.spec.ts create mode 100644 src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-admin-paginated-table.component.ts create mode 100644 src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-table-filter.ts create mode 100644 src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salary-admin-item.ts diff --git a/src/app/modules/admin/admin.module.ts b/src/app/modules/admin/admin.module.ts index a117455a..ecea89bd 100644 --- a/src/app/modules/admin/admin.module.ts +++ b/src/app/modules/admin/admin.module.ts @@ -13,6 +13,7 @@ import { AllOrganizationsAdminComponent } from './components/organizations/all-o import { AdminStartPageComponent } from './components/admin-start-page/admin-start-page.component'; import { SalariesAdminPageComponent } from './components/salaries/salaries-admin-page/salaries-admin-page.component'; import { SalariesAddingChartComponent } from './components/salaries/salaries-adding-chart/salaries-adding-chart.component'; +import { SalariesAdminPaginatedTableComponent } from './components/salaries/salaries-admin-paginated-table/salaries-admin-paginated-table.component'; @NgModule({ declarations: [ @@ -25,7 +26,13 @@ import { SalariesAddingChartComponent } from './components/salaries/salaries-add AdminStartPageComponent, SalariesAdminPageComponent, SalariesAddingChartComponent, + SalariesAdminPaginatedTableComponent ], - imports: [CommonModule, SharedModule, AdminRoutingModule, FormsModule, ReactiveFormsModule] + imports: [ + CommonModule, + SharedModule, + AdminRoutingModule, + FormsModule, + ReactiveFormsModule] }) export class AdminModule {} diff --git a/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.html b/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.html index b96d7497..0b515e69 100644 --- a/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.html +++ b/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.html @@ -4,75 +4,13 @@
-
-
- - -
+ -
- - -
- -
- - -
- -
-
- - -
-
-
- -
- - - - - - - - - - - - - - - - - - - - - -
ValuePeriodProfessionGradeCompanyCreated at
{{ item.value | number: '1.0-0' }}{{ item.quarter }}.{{ item.year }}{{ item.profession }}{{ item.grade }}{{ item.company }}{{ item.createdAt | date: 'yyyy-MM-dd' }} - -
-
- -
- -
@@ -82,13 +20,3 @@ - - -
-
-
There is no salaries.
-
-
-
- - \ No newline at end of file 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 751c38c3..33480aad 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 @@ -3,7 +3,7 @@ import { defaultPageParams } from '@models/page-params'; import { PaginatedList } from '@models/paginated-list'; import { UserSalaryAdminDto } from '@models/salaries/salary.model'; import { TitleService } from '@services/title.service'; -import { UserSalariesService } from '@services/user-salaries.service'; +import { AdminAllSalariesQueryParams, UserSalariesService } from '@services/user-salaries.service'; import { untilDestroyed } from '@shared/subscriptions/until-destroyed'; import { SalaryAdminItem } from './salary-admin-item'; import { ConfirmMsg } from '@shared/components/dialogs/models/confirm-msg'; @@ -18,9 +18,6 @@ export class SalariesAdminPageComponent implements OnInit, OnDestroy { salaries: Array | null = null; source: PaginatedList | null = null; - confirmDeletionMessage: DialogMessage | null = null; - - readonly filter = new SalariesTableFilter(); constructor( private readonly service: UserSalariesService, @@ -28,23 +25,25 @@ export class SalariesAdminPageComponent implements OnInit, OnDestroy { private readonly alert: AlertService) {} ngOnInit(): void { - this.loadData(); + this.loadData( + { + page: 1, + pageSize: defaultPageParams.pageSize, + profession: null, + company: null, + grade: null, + } + ); this.titleService.setTitle('All salaries'); } - loadData(page = 1): void { + loadData(data: AdminAllSalariesQueryParams): void { this.salaries = null; this.source = null; this.service - .all({ - page, - pageSize: defaultPageParams.pageSize, - profession: this.filter.profession ?? null, - company: this.filter.company ?? null, - grade: this.filter.grade ?? null, - }) + .all(data) .pipe(untilDestroyed(this)) .subscribe((x) => { this.salaries = x.results.map((x) => new SalaryAdminItem(x)); @@ -56,27 +55,12 @@ export class SalariesAdminPageComponent implements OnInit, OnDestroy { // ignored } - openDeleteDialog(salary: SalaryAdminItem): void { - this.confirmDeletionMessage = new DialogMessage( - new ConfirmMsg( - 'Delete the salary record', - 'Are you sure to delete?', - () => { - this.service - .delete(salary.id) - .pipe(untilDestroyed(this)) - .subscribe(() => { - this.alert.success('Salary deleted'); - this.loadData(); - }); - } - ) - ); - } - - clearFilter(): void { - this.filter.profession = null; - this.filter.company = null; - this.loadData(); + deleteSalary(salary: SalaryAdminItem): void { + this.service + .delete(salary.id) + .pipe(untilDestroyed(this)) + .subscribe(() => { + this.alert.success('Salary deleted'); + }); } } diff --git a/src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-admin-paginated-table.component.html b/src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-admin-paginated-table.component.html new file mode 100644 index 00000000..54f5b214 --- /dev/null +++ b/src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-admin-paginated-table.component.html @@ -0,0 +1,87 @@ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
ValuePeriodProfessionGradeCompanyCreated at
{{ item.value | number: '1.0-0' }}{{ item.quarter }}.{{ item.year }}{{ item.profession }}{{ item.grade }}{{ item.company }}{{ item.createdAt | date: 'yyyy-MM-dd HH:mm' }} + +
+
+ +
+ +
+ + +
+ +
+
+ + +
+
+
There is no salaries.
+
+
+
+ + \ No newline at end of file diff --git a/src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-admin-paginated-table.component.spec.ts b/src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-admin-paginated-table.component.spec.ts new file mode 100644 index 00000000..c364a0c0 --- /dev/null +++ b/src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-admin-paginated-table.component.spec.ts @@ -0,0 +1,28 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { mostUsedImports, testUtilStubs, mostUsedServices } from '@shared/test-utils'; +import { SalariesAdminPaginatedTableComponent } from './salaries-admin-paginated-table.component'; + +describe('SalariesAdminPaginatedTableComponent', () => { + let component: SalariesAdminPaginatedTableComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [SalariesAdminPaginatedTableComponent], + imports: [...mostUsedImports], + providers: [...testUtilStubs, ...mostUsedServices], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(SalariesAdminPaginatedTableComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-admin-paginated-table.component.ts b/src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-admin-paginated-table.component.ts new file mode 100644 index 00000000..6cbef40d --- /dev/null +++ b/src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-admin-paginated-table.component.ts @@ -0,0 +1,63 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { defaultPageParams } from '@models/page-params'; +import { PaginatedList } from '@models/paginated-list'; +import { UserSalaryAdminDto } from '@models/salaries/salary.model'; +import { AdminAllSalariesQueryParams } from '@services/user-salaries.service'; +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 { SalariesTableFilter } from './salaries-table-filter'; + +@Component({ + selector: 'app-salaries-admin-paginated-table', + templateUrl: './salaries-admin-paginated-table.component.html' +}) +export class SalariesAdminPaginatedTableComponent { + + @Input() + salaries: Array = []; + + @Input() + source: PaginatedList | null = null; + + @Output() + loadDataRequested: EventEmitter = new EventEmitter(); + + @Output() + deleteRequested: EventEmitter = new EventEmitter(); + + confirmDeletionMessage: DialogMessage | null = null; + + readonly filter = new SalariesTableFilter(); + + constructor() {} + + loadData(page = 1): void { + this.loadDataRequested.emit({ + page, + pageSize: defaultPageParams.pageSize, + profession: this.filter.profession ?? null, + company: this.filter.company ?? null, + grade: this.filter.grade ?? null, + }); + } + + openDeleteDialog(salary: SalaryAdminItem): void { + this.confirmDeletionMessage = new DialogMessage( + new ConfirmMsg( + 'Delete the salary record', + 'Are you sure to delete?', + () => { + this.deleteRequested.emit(salary); + this.loadData(); + } + ) + ); + } + + clearFilter(): void { + this.filter.profession = null; + this.filter.company = null; + this.loadData(); + } +} diff --git a/src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-table-filter.ts b/src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-table-filter.ts new file mode 100644 index 00000000..5b035dca --- /dev/null +++ b/src/app/modules/admin/components/salaries/salaries-admin-paginated-table/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/admin/components/salaries/salaries-admin-paginated-table/salary-admin-item.ts b/src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salary-admin-item.ts new file mode 100644 index 00000000..9f762af3 --- /dev/null +++ b/src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salary-admin-item.ts @@ -0,0 +1,30 @@ +import { DeveloperGrade } from "@models/enums/developer-grade.enum"; +import { CompanyType } from "@models/salaries/company-type"; +import { Currency } from "@models/salaries/currency"; +import { UserSalaryAdminDto } from "@models/salaries/salary.model"; +import { UserProfession } from "@models/salaries/user-profession"; + +export class SalaryAdminItem { + + readonly id: string; + readonly value: number; + readonly quarter: number; + readonly year: number; + readonly currency: string; + readonly company: string; + readonly grade: string | null; + readonly profession: string; + readonly createdAt: Date; + + constructor(private readonly item: UserSalaryAdminDto) { + this.id = item.id; + this.value = item.value; + this.quarter = item.quarter; + this.year = item.year; + this.currency = Currency[item.currency]; + this.company = CompanyType[item.company]; + this.grade = item.grade != null ? DeveloperGrade[item.grade] : null; + this.profession = UserProfession[item.profession]; + this.createdAt = item.createdAt; + } +} \ No newline at end of file From 2415b875afa0d0cc548b1bef101b9041f16308c9 Mon Sep 17 00:00:00 2001 From: "maxim.gorbatyuk" Date: Thu, 25 Jan 2024 08:17:39 +0600 Subject: [PATCH 2/5] Adjusted stuff --- .../salaries-admin-page.component.html | 1 + .../salaries-admin-page.component.ts | 11 +++---- ...aries-admin-paginated-table.component.html | 4 +-- ...alaries-admin-paginated-table.component.ts | 25 +++++++++------- .../salaries-table-filter.ts | 19 ------------ .../salary-admin-item.ts | 30 ------------------- .../salaries-table-filter.ts | 0 .../salary-admin-item.ts | 0 8 files changed, 22 insertions(+), 68 deletions(-) delete mode 100644 src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-table-filter.ts delete mode 100644 src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salary-admin-item.ts rename src/app/modules/admin/components/salaries/{salaries-admin-page => }/salaries-table-filter.ts (100%) rename src/app/modules/admin/components/salaries/{salaries-admin-page => }/salary-admin-item.ts (100%) diff --git a/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.html b/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.html index 0b515e69..bbbc3843 100644 --- a/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.html +++ b/src/app/modules/admin/components/salaries/salaries-admin-page/salaries-admin-page.component.html @@ -7,6 +7,7 @@ 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 33480aad..592f21ee 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 @@ -5,11 +5,9 @@ import { UserSalaryAdminDto } from '@models/salaries/salary.model'; import { TitleService } from '@services/title.service'; import { AdminAllSalariesQueryParams, UserSalariesService } from '@services/user-salaries.service'; import { untilDestroyed } from '@shared/subscriptions/until-destroyed'; -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'; +import { SalaryAdminItem } from '../salary-admin-item'; +import { SalariesTableFilter } from '../salaries-table-filter'; @Component({ templateUrl: './salaries-admin-page.component.html' @@ -18,6 +16,7 @@ export class SalariesAdminPageComponent implements OnInit, OnDestroy { salaries: Array | null = null; source: PaginatedList | null = null; + readonly filter = new SalariesTableFilter(); constructor( private readonly service: UserSalariesService, @@ -29,9 +28,7 @@ export class SalariesAdminPageComponent implements OnInit, OnDestroy { { page: 1, pageSize: defaultPageParams.pageSize, - profession: null, - company: null, - grade: null, + ...this.filter } ); this.titleService.setTitle('All salaries'); diff --git a/src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-admin-paginated-table.component.html b/src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-admin-paginated-table.component.html index 54f5b214..9c5f2861 100644 --- a/src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-admin-paginated-table.component.html +++ b/src/app/modules/admin/components/salaries/salaries-admin-paginated-table/salaries-admin-paginated-table.component.html @@ -1,4 +1,4 @@ -
+