diff --git a/src/app/app.config.ts b/src/app/app.config.ts
index b9be8fe..9ac22c1 100644
--- a/src/app/app.config.ts
+++ b/src/app/app.config.ts
@@ -1,16 +1,17 @@
-import { provideHttpClient } from '@angular/common/http';
+import { HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
import { ApplicationConfig } from '@angular/core';
import { provideAnimationsAsync } from '@angular/platform-browser/animations/async';
import { provideRouter } from '@angular/router';
import { provideToastr } from 'ngx-toastr';
import { routes } from './app.routes';
import { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';
+import { CaseConversionInterceptor } from './shared/interceptors/case-conversion.interceptor';
export const appConfig: ApplicationConfig = {
providers: [
provideRouter(routes),
provideAnimationsAsync(),
- provideHttpClient(),
+ provideHttpClient(withInterceptorsFromDi()),
provideToastr({
positionClass: 'toast-bottom-right'
}),
@@ -19,6 +20,11 @@ export const appConfig: ApplicationConfig = {
useValue: {
subscriptSizing: 'dynamic'
}
+ },
+ {
+ provide: HTTP_INTERCEPTORS,
+ useClass: CaseConversionInterceptor,
+ multi: true
}
]
};
diff --git a/src/app/features/clipboard/clipboard-details/clipboard-details.component.html b/src/app/features/clipboard/clipboard-details/clipboard-details.component.html
index 91c89b8..3b66ec4 100644
--- a/src/app/features/clipboard/clipboard-details/clipboard-details.component.html
+++ b/src/app/features/clipboard/clipboard-details/clipboard-details.component.html
@@ -39,7 +39,10 @@
Platform:
-
{{ clipboardItem.platform }}
+
+
![]()
+
{{ clipboardItem.platform }}
+
Description:
diff --git a/src/app/features/clipboard/clipboard-details/clipboard-details.component.scss b/src/app/features/clipboard/clipboard-details/clipboard-details.component.scss
index 4ad576e..b2b910a 100644
--- a/src/app/features/clipboard/clipboard-details/clipboard-details.component.scss
+++ b/src/app/features/clipboard/clipboard-details/clipboard-details.component.scss
@@ -48,6 +48,12 @@
background: $warn-color;
}
}
+
+ &.flex-row {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ }
}
}
diff --git a/src/app/shared/interceptors/case-conversion.interceptor.ts b/src/app/shared/interceptors/case-conversion.interceptor.ts
new file mode 100644
index 0000000..91c7c02
--- /dev/null
+++ b/src/app/shared/interceptors/case-conversion.interceptor.ts
@@ -0,0 +1,32 @@
+import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { Observable } from 'rxjs';
+import { map } from 'rxjs/operators';
+
+@Injectable()
+export class CaseConversionInterceptor implements HttpInterceptor {
+ intercept(req: HttpRequest
, next: HttpHandler): Observable> {
+ return next.handle(req).pipe(
+ map((event) => {
+ if (event instanceof HttpResponse && event.body) {
+ return event.clone({ body: this.snakeToCamel(event.body) });
+ }
+ return event;
+ })
+ );
+ }
+
+ private snakeToCamel(obj: any): any {
+ if (obj instanceof Array) {
+ return obj.map((v) => this.snakeToCamel(v));
+ } else if (obj !== null && obj?.constructor === Object) {
+ return Object.keys(obj).reduce((result, key) => {
+ const camelKey = key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
+ result[camelKey] = this.snakeToCamel(obj[key]);
+ return result;
+ }, {} as any);
+ }
+
+ return obj;
+ }
+}
diff --git a/src/app/shared/models/clipboard-item.ts b/src/app/shared/models/clipboard-item.ts
index 983582f..f96fbf3 100644
--- a/src/app/shared/models/clipboard-item.ts
+++ b/src/app/shared/models/clipboard-item.ts
@@ -32,6 +32,7 @@ export interface PaymentClipboardItem extends ClipboardItem {
destinations: PaymentDestination[];
platform: string;
description: string | null;
+ platformLogoUrl: string;
}
export interface Bolt11ClipboardItem extends ClipboardItem, Bolt11Details {}