Browse Source
Feature/setup skeleton loader for data tables (#3735)
* Setup skeleton loader for data tables
* Update changelog
pull/3738/head
Shaunak Das
5 months ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with
37 additions and
1 deletions
-
CHANGELOG.md
-
apps/client/src/app/components/admin-jobs/admin-jobs.component.ts
-
apps/client/src/app/components/admin-jobs/admin-jobs.html
-
apps/client/src/app/components/admin-jobs/admin-jobs.module.ts
-
apps/client/src/app/components/admin-users/admin-users.component.ts
-
apps/client/src/app/components/admin-users/admin-users.html
-
apps/client/src/app/components/admin-users/admin-users.module.ts
|
|
@ -10,6 +10,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 |
|
|
|
### Added |
|
|
|
|
|
|
|
- Set up a performance logging service |
|
|
|
- Added a loading indicator to the queue jobs table in the admin control panel |
|
|
|
- Added a loading indicator to the users table in the admin control panel |
|
|
|
- Added the attribute `mode` to the scraper configuration to get quotes instantly |
|
|
|
|
|
|
|
### Changed |
|
|
|
|
|
@ -51,6 +51,7 @@ export class AdminJobsComponent implements OnDestroy, OnInit { |
|
|
|
'status', |
|
|
|
'actions' |
|
|
|
]; |
|
|
|
public isLoading = false; |
|
|
|
public statusFilterOptions = QUEUE_JOB_STATUS_LIST; |
|
|
|
public user: User; |
|
|
|
|
|
|
@ -138,12 +139,16 @@ export class AdminJobsComponent implements OnDestroy, OnInit { |
|
|
|
} |
|
|
|
|
|
|
|
private fetchJobs(aStatus?: JobStatus[]) { |
|
|
|
this.isLoading = true; |
|
|
|
|
|
|
|
this.adminService |
|
|
|
.fetchJobs({ status: aStatus }) |
|
|
|
.pipe(takeUntil(this.unsubscribeSubject)) |
|
|
|
.subscribe(({ jobs }) => { |
|
|
|
this.dataSource = new MatTableDataSource(jobs); |
|
|
|
|
|
|
|
this.isLoading = false; |
|
|
|
|
|
|
|
this.changeDetectorRef.markForCheck(); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
@ -183,6 +183,16 @@ |
|
|
|
<tr *matHeaderRowDef="displayedColumns" mat-header-row></tr> |
|
|
|
<tr *matRowDef="let row; columns: displayedColumns" mat-row></tr> |
|
|
|
</table> |
|
|
|
@if (isLoading) { |
|
|
|
<ngx-skeleton-loader |
|
|
|
animation="pulse" |
|
|
|
class="px-4 py-3" |
|
|
|
[theme]="{ |
|
|
|
height: '1.5rem', |
|
|
|
width: '100%' |
|
|
|
}" |
|
|
|
/> |
|
|
|
} |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
@ -5,6 +5,7 @@ import { MatButtonModule } from '@angular/material/button'; |
|
|
|
import { MatMenuModule } from '@angular/material/menu'; |
|
|
|
import { MatSelectModule } from '@angular/material/select'; |
|
|
|
import { MatTableModule } from '@angular/material/table'; |
|
|
|
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; |
|
|
|
|
|
|
|
import { AdminJobsComponent } from './admin-jobs.component'; |
|
|
|
|
|
|
@ -17,6 +18,7 @@ import { AdminJobsComponent } from './admin-jobs.component'; |
|
|
|
MatMenuModule, |
|
|
|
MatSelectModule, |
|
|
|
MatTableModule, |
|
|
|
NgxSkeletonLoaderModule, |
|
|
|
ReactiveFormsModule |
|
|
|
], |
|
|
|
schemas: [CUSTOM_ELEMENTS_SCHEMA] |
|
|
|
|
|
@ -32,6 +32,7 @@ export class AdminUsersComponent implements OnDestroy, OnInit { |
|
|
|
public hasPermissionForSubscription: boolean; |
|
|
|
public hasPermissionToImpersonateAllUsers: boolean; |
|
|
|
public info: InfoItem; |
|
|
|
public isLoading = false; |
|
|
|
public user: User; |
|
|
|
|
|
|
|
private unsubscribeSubject = new Subject<void>(); |
|
|
@ -142,12 +143,16 @@ export class AdminUsersComponent implements OnDestroy, OnInit { |
|
|
|
} |
|
|
|
|
|
|
|
private fetchAdminData() { |
|
|
|
this.isLoading = true; |
|
|
|
|
|
|
|
this.adminService |
|
|
|
.fetchAdminData() |
|
|
|
.pipe(takeUntil(this.unsubscribeSubject)) |
|
|
|
.subscribe(({ users }) => { |
|
|
|
this.dataSource = new MatTableDataSource(users); |
|
|
|
|
|
|
|
this.isLoading = false; |
|
|
|
|
|
|
|
this.changeDetectorRef.markForCheck(); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
@ -245,6 +245,16 @@ |
|
|
|
></tr> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
@if (isLoading) { |
|
|
|
<ngx-skeleton-loader |
|
|
|
animation="pulse" |
|
|
|
class="px-4 py-3" |
|
|
|
[theme]="{ |
|
|
|
height: '1.5rem', |
|
|
|
width: '100%' |
|
|
|
}" |
|
|
|
/> |
|
|
|
} |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
@ -6,6 +6,7 @@ import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; |
|
|
|
import { MatButtonModule } from '@angular/material/button'; |
|
|
|
import { MatMenuModule } from '@angular/material/menu'; |
|
|
|
import { MatTableModule } from '@angular/material/table'; |
|
|
|
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; |
|
|
|
|
|
|
|
import { AdminUsersComponent } from './admin-users.component'; |
|
|
|
|
|
|
@ -18,7 +19,8 @@ import { AdminUsersComponent } from './admin-users.component'; |
|
|
|
GfValueComponent, |
|
|
|
MatButtonModule, |
|
|
|
MatMenuModule, |
|
|
|
MatTableModule |
|
|
|
MatTableModule, |
|
|
|
NgxSkeletonLoaderModule |
|
|
|
], |
|
|
|
schemas: [CUSTOM_ELEMENTS_SCHEMA] |
|
|
|
}) |
|
|
|