38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
|
|
import { HttpInterceptorFn } from '@angular/common/http';
|
||
|
|
import { inject } from '@angular/core';
|
||
|
|
import { LocationService } from '../services/location.service';
|
||
|
|
import { LanguageService } from '../services/language.service';
|
||
|
|
import { environment } from '../../environments/environment';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Interceptor that attaches X-Region and X-Language headers
|
||
|
|
* to every outgoing request aimed at our API.
|
||
|
|
*
|
||
|
|
* The backend reads these headers to:
|
||
|
|
* - filter catalog by region
|
||
|
|
* - return translated content in the requested language
|
||
|
|
*/
|
||
|
|
export const apiHeadersInterceptor: HttpInterceptorFn = (req, next) => {
|
||
|
|
// Only attach headers to our own API requests
|
||
|
|
if (!req.url.startsWith(environment.apiUrl)) {
|
||
|
|
return next(req);
|
||
|
|
}
|
||
|
|
|
||
|
|
const locationService = inject(LocationService);
|
||
|
|
const languageService = inject(LanguageService);
|
||
|
|
|
||
|
|
const regionId = locationService.regionId(); // '' when global
|
||
|
|
const lang = languageService.currentLanguage(); // 'ru' | 'en' | 'hy'
|
||
|
|
|
||
|
|
let headers = req.headers;
|
||
|
|
|
||
|
|
if (regionId) {
|
||
|
|
headers = headers.set('X-Region', regionId);
|
||
|
|
}
|
||
|
|
if (lang) {
|
||
|
|
headers = headers.set('X-Language', lang);
|
||
|
|
}
|
||
|
|
|
||
|
|
return next(req.clone({ headers }));
|
||
|
|
};
|