diff --git a/ui/src/app/components/skeleton-list/skeleton-list.component.html b/ui/src/app/components/skeleton-list/skeleton-list.component.html
new file mode 100644
index 000000000..5a43ad94f
--- /dev/null
+++ b/ui/src/app/components/skeleton-list/skeleton-list.component.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ui/src/app/components/skeleton-list/skeleton-list.component.module.ts b/ui/src/app/components/skeleton-list/skeleton-list.component.module.ts
new file mode 100644
index 000000000..e777c211c
--- /dev/null
+++ b/ui/src/app/components/skeleton-list/skeleton-list.component.module.ts
@@ -0,0 +1,18 @@
+import { NgModule } from '@angular/core'
+import { CommonModule } from '@angular/common'
+import { SkeletonListComponent } from './skeleton-list.component'
+import { IonicModule } from '@ionic/angular'
+import { RouterModule } from '@angular/router'
+
+@NgModule({
+ declarations: [
+ SkeletonListComponent,
+ ],
+ imports: [
+ CommonModule,
+ IonicModule,
+ RouterModule.forChild([]),
+ ],
+ exports: [SkeletonListComponent],
+})
+export class SkeletonListComponentModule { }
diff --git a/ui/src/app/components/skeleton-list/skeleton-list.component.scss b/ui/src/app/components/skeleton-list/skeleton-list.component.scss
new file mode 100644
index 000000000..8ae532d55
--- /dev/null
+++ b/ui/src/app/components/skeleton-list/skeleton-list.component.scss
@@ -0,0 +1,44 @@
+$base-color: #3e3e3e;
+$shine-color: #454545;
+$animation-duration: 1.2s;
+
+@mixin background-gradient {
+ background-image: linear-gradient(90deg, $base-color 0px, $shine-color 40px, $base-color 80px);
+ background-size: 100px;
+}
+
+.post {
+ height: 52px;
+ position: relative;
+ left: 12px;
+ background-color: var(--ion-item-background);
+ border-style: solid;
+ border-width: 0 0 1px 0;
+ border-color: #262626;
+ .label {
+ float: left;
+ left: 30px;
+ width: 50%;
+ height: 24px;
+ margin: 14px 0;
+ border-radius: 7px;
+ @include background-gradient;
+ animation: shine-lines $animation-duration infinite linear
+ }
+ .note {
+ float: right;
+ position: relative;
+ right: 24px;
+ width: 25%;
+ height: 24px;
+ margin: 14px 0;
+ border-radius: 7px;
+ @include background-gradient;
+ animation: shine-lines $animation-duration infinite linear
+ }
+}
+
+@keyframes shine-lines {
+ 0% { background-position: -100px; }
+ 40%, 100% { background-position: 140px; }
+}
diff --git a/ui/src/app/components/skeleton-list/skeleton-list.component.ts b/ui/src/app/components/skeleton-list/skeleton-list.component.ts
new file mode 100644
index 000000000..2f8e5d793
--- /dev/null
+++ b/ui/src/app/components/skeleton-list/skeleton-list.component.ts
@@ -0,0 +1,20 @@
+import { Component, Input } from '@angular/core'
+
+@Component({
+ selector: 'skeleton-list',
+ templateUrl: './skeleton-list.component.html',
+ styleUrls: ['./skeleton-list.component.scss'],
+})
+export class SkeletonListComponent {
+ @Input() groups: number
+ @Input() rows: number = 3
+ groupsArr: number[] = []
+ rowsArr: number[] = []
+
+ ngOnInit () {
+ if (this.groups) {
+ this.groupsArr = Array(Number(this.groups)).fill(0).map((_, i) => i)
+ }
+ this.rowsArr = Array(Number(this.rows)).fill(0).map((_, i) => i)
+ }
+}
diff --git a/ui/src/app/pages/apps-routes/app-metrics/app-metrics.module.ts b/ui/src/app/pages/apps-routes/app-metrics/app-metrics.module.ts
index b15526a5d..a4afbc9d1 100644
--- a/ui/src/app/pages/apps-routes/app-metrics/app-metrics.module.ts
+++ b/ui/src/app/pages/apps-routes/app-metrics/app-metrics.module.ts
@@ -5,6 +5,7 @@ import { IonicModule } from '@ionic/angular'
import { AppMetricsPage } from './app-metrics.page'
import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module'
import { SharingModule } from 'src/app/modules/sharing.module'
+import { SkeletonListComponentModule } from 'src/app/components/skeleton-list/skeleton-list.component.module'
const routes: Routes = [
{
@@ -20,6 +21,7 @@ const routes: Routes = [
RouterModule.forChild(routes),
PwaBackComponentModule,
SharingModule,
+ SkeletonListComponentModule,
],
declarations: [AppMetricsPage],
})
diff --git a/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.html b/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.html
index d4813b285..e21c12060 100644
--- a/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.html
+++ b/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.html
@@ -48,20 +48,7 @@
-
-
-
-
-
+
diff --git a/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.scss b/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.scss
index 29b21a6a0..eea898305 100644
--- a/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.scss
+++ b/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.scss
@@ -1,44 +1,3 @@
.metric-note {
font-size: 16px;
-}
-
-$base-color: #7b7b7b;
-$shine-color: #8a8a8a;
-$animation-duration: 1.2s;
-
-@mixin background-gradient {
- background-image: linear-gradient(90deg, $base-color 0px, $shine-color 40px, $base-color 80px);
- background-size: 100px;
-}
-
-.post {
- height: 52px;
- position: relative;
- left: 12px;
- .label {
- float: left;
- left: 30px;
- width: 55%;
- height: 24px;
- margin: 14px 0;
- border-radius: 7px;
- @include background-gradient;
- animation: shine-lines $animation-duration infinite linear
- }
- .note {
- float: right;
- position: relative;
- right: 12px;
- width: 30%;
- height: 24px;
- margin: 14px 0;
- border-radius: 7px;
- @include background-gradient;
- animation: shine-lines $animation-duration infinite linear
- }
-}
-
-@keyframes shine-lines {
- 0% { background-position: -100px; }
- 40%, 100% { background-position: 140px; }
-}
+}
\ No newline at end of file
diff --git a/ui/src/app/pages/server-routes/server-metrics/server-metrics.module.ts b/ui/src/app/pages/server-routes/server-metrics/server-metrics.module.ts
index 5cc4b27bb..151a11da9 100644
--- a/ui/src/app/pages/server-routes/server-metrics/server-metrics.module.ts
+++ b/ui/src/app/pages/server-routes/server-metrics/server-metrics.module.ts
@@ -4,7 +4,7 @@ import { Routes, RouterModule } from '@angular/router'
import { IonicModule } from '@ionic/angular'
import { ServerMetricsPage } from './server-metrics.page'
import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module'
-import { TextSpinnerComponentModule } from 'src/app/components/text-spinner/text-spinner.component.module'
+import { SkeletonListComponentModule } from 'src/app/components/skeleton-list/skeleton-list.component.module'
const routes: Routes = [
{
@@ -19,7 +19,7 @@ const routes: Routes = [
IonicModule,
RouterModule.forChild(routes),
PwaBackComponentModule,
- TextSpinnerComponentModule,
+ SkeletonListComponentModule,
],
declarations: [ServerMetricsPage],
})
diff --git a/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.html b/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.html
index a114156ae..72413763e 100644
--- a/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.html
+++ b/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.html
@@ -8,9 +8,9 @@
-
+
-
+
{{ metricGroup.key }}
@@ -22,6 +22,6 @@
-
+
\ No newline at end of file