Files
cmc/support-portal-frontend/src/app/service/hero-image.service.ts

79 lines
2.5 KiB
TypeScript

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { environment } from '../../environments/environment';
import { HeroImage } from '../model/hero-image.model';
import { CustomHttpResponse } from '../dto/custom-http-response';
@Injectable({
providedIn: 'root'
})
export class HeroImageService {
private host = environment.apiUrl;
constructor(private http: HttpClient) {}
public addHeroImage(formData: FormData): Observable<HeroImage> {
return this.http.post<any>(`${this.host}/hero`, formData).pipe(
map(img => this.transformHeroImage(img))
);
}
public updateHeroImage(id: number, formData: FormData): Observable<HeroImage> {
return this.http.put<any>(`${this.host}/hero/${id}`, formData).pipe(
map(img => this.transformHeroImage(img))
);
}
public getActiveHeroImage(): Observable<HeroImage> {
return this.http.get<any>(`${this.host}/hero/active`).pipe(
map(img => this.transformHeroImage(img))
);
}
public getHeroImageById(id: number): Observable<HeroImage> {
return this.http.get<any>(`${this.host}/hero/${id}`).pipe(
map(img => this.transformHeroImage(img))
);
}
public getAllHeroImages(): Observable<HeroImage[]> {
return this.http.get<any[]>(`${this.host}/hero`).pipe(
map(images => images.map(img => this.transformHeroImage(img)))
);
}
public deleteHeroImage(id: number): Observable<CustomHttpResponse> {
return this.http.delete<CustomHttpResponse>(`${this.host}/hero/${id}`);
}
public setActiveHeroImage(id: number): Observable<HeroImage> {
return this.http.put<any>(`${this.host}/hero/${id}/activate`, {}).pipe(
map(img => this.transformHeroImage(img))
);
}
// Transform backend response to match frontend model
private transformHeroImage(img: any): HeroImage {
return {
...img,
isActive: img.isActive !== undefined ? img.isActive : img.active
};
}
// Local storage methods
public addHeroImagesToLocalStorage(heroImages: HeroImage[]): void {
localStorage.setItem('heroImages', JSON.stringify(heroImages));
}
public getHeroImagesFromLocalStorage(): HeroImage[] {
const heroImages = localStorage.getItem('heroImages');
return heroImages ? JSON.parse(heroImages) : [];
}
public getActiveHeroImageFromLocalStorage(): HeroImage | null {
const heroImages = this.getHeroImagesFromLocalStorage();
return heroImages.find(img => img.isActive) || null;
}
}