import { LocaleService } from '../common/i18n'; import { BasicService } from '../common/utils'; import { Observable } from 'rxjs/Observable'; import { Http, RequestOptionsArgs, URLSearchParams, Headers } from '@angular/http'; import { Locker } from 'angular-safeguard'; export class MySearchParams extends URLSearchParams { constructor(obj: any = {}) { const searchQuery = Object.keys(obj).map(key => `${key}=${encodeURIComponent(obj[key])}`).join('&'); super(searchQuery); } } export class SeCurisResourceServices extends BasicService { constructor($L: LocaleService, protected http: Http, protected store: Locker, protected resource: string) { super($L); this.resource = `api/${resource}`; } protected getAuthHeaders(): RequestOptionsArgs { const token = this.store.get('token'); const headers = new Headers(); if (token) { headers.append('X-SECURIS-TOKEN', token); } headers.append('Content-Type', 'application/json'); return { headers: headers }; } public get(id?: any): Observable { const url = `${this.resource}/${id || ''}`; return this.http.get(url, this.getAuthHeaders()) .map(response => response.json()) .catch(err => super.processErrorResponse(err)); } public create(data: any): Observable { const url = `${this.resource}`; return this.http.post(url, JSON.stringify(data), this.getAuthHeaders()) .map(response => response.json()) .catch(err => super.processErrorResponse(err)); } public modify(id: any, data: any): Observable { const url = `${this.resource}/${id}`; // Se usa POST para modificar (según tu diseño original) return this.http.post(url, JSON.stringify(data), this.getAuthHeaders()) .map(response => response.json()) .catch(err => super.processErrorResponse(err)); } public remove(id: any): Observable { const url = `${this.resource}/${id}`; return this.http.delete(url, this.getAuthHeaders()) .map(response => response.json()) .catch(err => super.processErrorResponse(err)); } public action(id: any, action: string, method: string = 'POST', params: any = {}): Observable { const url = `${this.resource}/${id}/${action}`; params.action = action; const options: RequestOptionsArgs = { url: url, method: method, search: (method === 'GET') ? new MySearchParams(params) : undefined, headers: this.getAuthHeaders().headers, body: (method === 'POST') ? JSON.stringify(params) : undefined }; return this.http.request(url, options) .map(response => response.json()) .catch(err => super.processErrorResponse(err)); } }