Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save bhalash/038b033d125f6948db830f77b3469894 to your computer and use it in GitHub Desktop.
Save bhalash/038b033d125f6948db830f77b3469894 to your computer and use it in GitHub Desktop.
An Angular (> 4.3) interceptor to parse dates from server response.
/**
* Recursively walk HttpResponse object to cast ISO 8601-formatted dates as
* Moment.js objects.
*
* @see https://git.io/fNzJw
* @see https://www.npmjs.com/package/is-iso-date
* @see https://www.npmjs.com/package/traverse
*/
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/do';
import * as moment from 'moment';
import isIsoDate from 'is-iso-date';
import traverse from 'traverse';
import {
HttpErrorResponse,
HttpEvent, HttpHandler,
HttpInterceptor,
HttpRequest,
HttpResponse
} from '@angular/common/http';
@Injectable()
export class AngularDateHttpInterceptor implements HttpInterceptor {
private static castDateAsMoment(event: HttpEvent<any>): void {
if (event instanceof HttpResponse) {
traverse(event.body).forEach(function(value: any): void {
if (isIsoDate(value)) {
this.update(moment(value), true);
}
});
}
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).do(AngularDateHttpInterceptor.castDateAsMoment);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment