UNPKG

ng-rest-http

Version:

http client module for Angular [ tested for angular6 ]

1 lines 22.1 kB
{"version":3,"file":"ng-rest-http.mjs","sources":["../../../projects/ng-rest-http/src/lib/http.service.ts","../../../projects/ng-rest-http/src/lib/upload.service.ts","../../../projects/ng-rest-http/src/lib/http.module.ts","../../../projects/ng-rest-http/src/ng-rest-http.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams, HttpHeaders, HttpErrorResponse } from '@angular/common/http';\r\nimport { throwError, of } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RestHttpClient {\r\n constructor(private http: HttpClient) {}\r\n\r\n /**\r\n * @param Object obj {url, params, headers}\r\n * url : String,\r\n * params {k1:v1, k2:v2....}\r\n * headers {k1:v1, k2:v2....}\r\n * @return Callback Function\r\n */\r\n public get(obj: any): Promise<any> {\r\n const apiUrl = obj.url;\r\n const body: any = {};\r\n body.observe = 'response';\r\n\r\n if (!Object.entries) {\r\n Object.entries = ( entryObj: any ) => {\r\n const ownProps = Object.keys( entryObj );\r\n let i = ownProps.length;\r\n const resArray = new Array(i); // preallocate the Array\r\n while (i--) {\r\n resArray[i] = [ownProps[i], entryObj[ownProps[i]]];\r\n }\r\n return resArray;\r\n };\r\n }\r\n\r\n if (typeof obj.params !== 'undefined') {\r\n let Params = new HttpParams();\r\n Object.entries(obj.params).forEach(\r\n ([key, value]) => Params = Params.append(key, String(value))\r\n );\r\n\r\n body.params = Params;\r\n }\r\n\r\n if (typeof obj.headers !== 'undefined') {\r\n body.headers = this.createHeders(obj.headers);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n this.http.get(apiUrl, body)\r\n .pipe (\r\n // 에러가 발생하면 err를 녀ㅠㄴㅊ갸ㅠㄷdml next 로 보낸다.\r\n catchError(err => {return of(err);})\r\n // catchError(this.handleError)\r\n // catchError(err => {return of(this.handleError(err));})\r\n )\r\n .subscribe({\r\n next: (v) => resolve(v),\r\n error: (e) => reject(e), // this.logError(e),\r\n complete: () => console.info('complete') \r\n })\r\n })\r\n }\r\n\r\n /**\r\n * @param Object obj {url, params}\r\n * @return Callback Function\r\n */\r\n public post(obj: any): Promise<any> {\r\n const apiUrl = obj.url;\r\n const params = obj.params;\r\n\r\n const body: any = {};\r\n body.observe = 'response';\r\n\r\n if (typeof obj.headers !== 'undefined') {\r\n body.headers = this.createHeders(obj.headers);\r\n }\r\n\r\n return new Promise((resolve) => {\r\n this.http.post(apiUrl, params, body)\r\n .subscribe({\r\n next: (v) => resolve(v),\r\n error: (e) => this.logError(e),\r\n complete: () => console.info('complete') \r\n })\r\n })\r\n }\r\n\r\n /**\r\n * @param Object obj {url, params}\r\n * @return Callback Function\r\n */\r\n\r\n public delete(obj: any): Promise<any> {\r\n const apiUrl = obj.url;\r\n const body: any = {};\r\n body.observe = 'response';\r\n\r\n if (typeof obj.headers !== 'undefined') {\r\n body.headers = this.createHeders(obj.headers);\r\n }\r\n\r\n return new Promise((resolve) => {\r\n this.http.delete(apiUrl, body)\r\n .subscribe({\r\n next: (v) => resolve(v),\r\n error: (e) => this.logError(e),\r\n complete: () => console.info('complete') \r\n })\r\n })\r\n }\r\n\r\n /**\r\n * @param Object obj {url, params}\r\n * @return Callback Function\r\n */\r\n public update(obj: any): Promise<any> {\r\n const apiUrl = obj.url;\r\n const params = obj.params;\r\n const body: any = {};\r\n body.observe = 'response';\r\n\r\n if (typeof obj.headers !== 'undefined') {\r\n body.headers = this.createHeders(obj.headers);\r\n }\r\n\r\n return new Promise((resolve) => {\r\n this.http.post(apiUrl, params, body)\r\n .subscribe({\r\n next: (v) => resolve(v),\r\n error: (e) => this.logError(e),\r\n complete: () => console.info('complete') \r\n })\r\n })\r\n }\r\n\r\n /**\r\n * @param Object obj {url, params}\r\n * @return Callback Function\r\n */\r\n public put(obj: any): Promise<any> {\r\n const apiUrl = obj.url;\r\n const params = obj.params;\r\n const body: any = {};\r\n body.observe = 'response';\r\n\r\n if (typeof obj.headers !== 'undefined') {\r\n body.headers = this.createHeders(obj.headers);\r\n }\r\n\r\n return new Promise((resolve) => {\r\n this.http.put(apiUrl, params, body)\r\n .subscribe({\r\n next: (v) => resolve(v),\r\n error: (e) => this.logError(e),\r\n complete: () => console.info('complete') \r\n })\r\n });\r\n }\r\n\r\n /**\r\n * @param Object headers : headers {k1:v1, k2:v2....}\r\n */\r\n private createHeders(headers: HttpHeaders): HttpHeaders {\r\n let header = new HttpHeaders (); // { 'Content-Type': 'application/json' }\r\n\r\n if (!Object.entries) {\r\n Object.entries = ( entryObj: any ) => {\r\n const ownProps = Object.keys( entryObj );\r\n let i = ownProps.length;\r\n const resArray = new Array(i); // preallocate the Array\r\n while (i--) {\r\n resArray[i] = [ownProps[i], entryObj[ownProps[i]]];\r\n }\r\n return resArray;\r\n };\r\n }\r\n\r\n Object.entries(headers).forEach (\r\n ([key, value]) => header = header.append(key, String(value))\r\n );\r\n\r\n return header;\r\n }\r\n\r\n private extractData(res: any): any {\r\n try {\r\n if ( typeof res.constructor !== 'undefined' && res.constructor.name === 'HttpResponse') {\r\n return res.body;\r\n } else {\r\n const body = res.json();\r\n return body || {};\r\n }\r\n } catch (e) {\r\n return res._body;\r\n }\r\n }\r\n\r\n private handleError(error: HttpErrorResponse) {\r\n if (error.status === 0) {\r\n // A client-side or network error occurred. Handle it accordingly.\r\n console.error('An error occurred:', error.error);\r\n } else {\r\n // The backend returned an unsuccessful response code.\r\n // The response body may contain clues as to what went wrong.\r\n console.error(\r\n `Backend returned code ${error.status}, body was: `, error.error);\r\n }\r\n return error;\r\n // return throwError(() => new Error('Something bad happened; please try again later.'));\r\n }\r\n\r\n private logError(err: string): void {\r\n console.error('There was an error: ');\r\n console.error(err);\r\n }\r\n\r\n /**\r\n * Not yet tested\r\n * @param Object obj {url, params, headers}\r\n * url : String,\r\n * params {k1:v1, k2:v2....}\r\n * headers {k1:v1, k2:v2....}\r\n * @return Callback Function\r\n * @param String filetype application/ms-excel image/jpeg, image/png, and image/svg+xml.\r\n * https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types\r\n */\r\n public filedownload(obj: any, filetype?: string): Promise<any> {\r\n const apiUrl = obj.url;\r\n const body: any = {};\r\n body.observe = 'response';\r\n body.responseType = 'arraybuffer'; // add responseType\r\n\r\n if (!Object.entries) {\r\n Object.entries = ( entryObj: any ) => {\r\n const ownProps = Object.keys( entryObj );\r\n let i = ownProps.length;\r\n const resArray = new Array(i); // preallocate the Array\r\n while (i--) {\r\n resArray[i] = [ownProps[i], entryObj[ownProps[i]]];\r\n }\r\n\r\n return resArray;\r\n };\r\n }\r\n\r\n if (typeof obj.params !== 'undefined') {\r\n let Params = new HttpParams();\r\n Object.entries(obj.params).forEach(\r\n ([key, value]) => Params = Params.append(key, String(value))\r\n );\r\n\r\n body.params = Params;\r\n }\r\n\r\n if (typeof obj.headers !== 'undefined') {\r\n body.headers = this.createHeders(obj.headers);\r\n }\r\n\r\n if (typeof obj.headers !== 'undefined') {\r\n this.createHeders(obj.headers);\r\n }\r\n\r\n return new Promise((resolve) => {\r\n this.http.get(apiUrl, body)\r\n .pipe (\r\n // catchError(this.handleError)\r\n catchError(err => {return of(err);})\r\n // catchError(err => {return of(this.handleError(err));})\r\n )\r\n .subscribe({\r\n next: (v: any) => resolve(v.body),\r\n error: (e) => this.logError(e),\r\n complete: () => console.info('complete') \r\n })\r\n })\r\n }\r\n /**\r\n * Method is use to download file.\r\n * @param data - Array Buffer data\r\n * @param type - type of the document.\r\n */\r\n private downLoadFile(data: any, type: string): void {\r\n const blob = new Blob([data], { type});\r\n\r\n const url = window.URL.createObjectURL(blob);\r\n const pwa = window.open(url);\r\n if (!pwa || pwa.closed || typeof pwa.closed === 'undefined') {\r\n console.log( 'Please disable your Pop-up blocker and try again.');\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams, HttpRequest, HttpEvent } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class UploadService {\r\n\r\n constructor(private http: HttpClient) {}\r\n\r\n // file from event.target.files[0]\r\n uploadFile(url: string, file: File): Observable < HttpEvent < any >> {\r\n\r\n const formData = new FormData();\r\n formData.append('upload', file);\r\n\r\n const params = new HttpParams();\r\n\r\n const options = {\r\n params: params,\r\n reportProgress: true,\r\n };\r\n\r\n /*\r\n const options = {\r\n headers: new HttpHeaders().set('Authorization', this.loopBackAuth.accessTokenId),\r\n params: params,\r\n reportProgress: true,\r\n withCredentials: true,\r\n }\r\n */\r\n\r\n const req = new HttpRequest('POST', url, formData, options);\r\n return this.http.request(req); // return event\r\n }\r\n}\r\n\r\n/* in your component\r\n// At the drag drop area\r\n // (drop)=\"onDropFile($event)\"\r\nonDropFile(event: DragEvent) {\r\n event.preventDefault();\r\n this.uploadFile(event.dataTransfer.files);\r\n}\r\n\r\n// At the drag drop area\r\n// (dragover)=\"onDragOverFile($event)\"\r\nonDragOverFile(event) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n}\r\n\r\n// At the file input element\r\n// <input type=\"file\" (change)=\"selectFile($event)\" name=\"file\" />\r\nselectFile(event) {\r\n this.uploadFile(event.target.files);\r\n}\r\n\r\nuploadFile(files: FileList) {\r\n if (files.length == 0) {\r\n console.log(\"No file selected!\");\r\n return\r\n }\r\n let file: File = files[0];\r\n\r\n this.upload.uploadFile(this.appCfg.baseUrl + \"/api/flash/upload\", file)\r\n .subscribe(\r\n event => {\r\n if (event.type == HttpEventType.UploadProgress) {\r\n const percentDone = Math.round(100 * event.loaded / event.total);\r\n console.log(`File is ${percentDone}% loaded.`);\r\n } else if (event instanceof HttpResponse) {\r\n console.log('File is completely loaded!');\r\n }\r\n },\r\n (err) => {\r\n console.log(\"Upload Error:\", err);\r\n }, () => {\r\n console.log(\"Upload done\");\r\n }\r\n )\r\n}\r\n */\r\n","import { NgModule } from '@angular/core';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { RestHttpClient } from './http.service';\r\nimport { UploadService } from './upload.service';\r\n\r\n@NgModule({\r\n imports: [ HttpClientModule ],\r\n providers: [ RestHttpClient, UploadService ]\r\n})\r\nexport class RestHttpClientModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}