pmtpenza

Untitled

Aug 15th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.95 KB | None | 0 0
  1. import { Injectable } from '@angular/core';
  2. import { LoadingController, AlertController, NavController } from '@ionic/angular';
  3. import { HttpClient, HttpRequest, HttpHeaders, HttpParams } from '@angular/common/http';
  4. import { Events } from '@ionic/angular';
  5. import { timeout } from 'rxjs/operators';
  6. import { NativeStorage } from '@ionic-native/native-storage/ngx';
  7. import { Platform } from '@ionic/angular';
  8.  
  9. /**
  10. * Api is a generic REST Api handler. Set your API url first.
  11. */
  12. @Injectable()
  13. export class Api {
  14. loadingMask: any;
  15. alert: any;
  16. errorDisplayed: boolean = false;
  17. repeatInterval: number;
  18.  
  19. constructor(
  20. public http: HttpClient,
  21. public loadingCtrl: LoadingController,
  22. public events: Events,
  23. private alertCtrl: AlertController,
  24. private storage: NativeStorage,
  25. private navCtrl: NavController,
  26. private platform: Platform
  27. ) {
  28. let self = this;
  29. }
  30. getBackendUrl() {
  31. return 'http://api.anatoly.com/';
  32. }
  33. showMask() {
  34. let self = this;
  35. return new Promise((resolve, reject) => {
  36. self.beforeShowMask().then(() => {
  37. resolve();
  38. });
  39. });
  40. }
  41. async beforeShowMask() {
  42. let self = this;
  43. self.loadingMask = await this.loadingCtrl.create({
  44. mode: 'md',
  45. spinner: 'lines-small',
  46. message: 'Выполняется запрос'
  47. });
  48. await self.loadingMask.present();
  49.  
  50. }
  51. hideMask() {
  52. let self = this;
  53. return new Promise((resolve, reject) => {
  54. if (self.loadingMask) {
  55. self.loadingMask.dismiss()
  56. .then(() => {
  57. resolve();
  58. });
  59. } else {
  60. resolve();
  61. }
  62. });
  63. }
  64. async showError(status?: any, errorText?: string, doneFunc: any = () => {}) {
  65. let self = this;
  66. if (!self.errorDisplayed) {
  67. self.alert = await self.alertCtrl.create({
  68. header: status ? status : 'Ошибка',
  69. message: errorText ? errorText : 'Произошла ошибка',
  70. backdropDismiss: false,
  71. mode: 'md',
  72. buttons: [{
  73. text: 'OK',
  74. handler: () => {
  75. self.errorDisplayed = false;
  76. self.alert.dismiss().then(doneFunc());
  77. return false;
  78. }
  79. }]
  80. });
  81. if (self.loadingMask && !self.loadingMask._isHidden) {
  82. self.hideMask()
  83. .then(() => {
  84. self.errorDisplayed = true;
  85. self.alert.present();
  86. });
  87. } else {
  88. self.errorDisplayed = true;
  89. self.alert.present();
  90. }
  91. }
  92. }
  93. toHttpParams(obj: Object): HttpParams {
  94. let params = new HttpParams();
  95. for (const key in obj) {
  96. if (obj.hasOwnProperty(key)) {
  97. const val = obj[key];
  98. if (val !== null && val !== undefined) {
  99. params = params.append(key, val.toString());
  100. }
  101. }
  102. }
  103. return params;
  104. }
  105. serialize(obj: any) {
  106. const formData = new FormData();
  107.  
  108. for (let key in obj) {
  109. if (obj.hasOwnProperty(key)) {
  110. let element = obj[key];
  111. formData.append(key, element);
  112. }
  113. }
  114. return formData;
  115. }
  116. getToken(){
  117. let self = this;
  118. return new Promise((resolve, reject) => {
  119. if(self.platform.is('cordova')) {
  120. self.storage.getItem('token')
  121. .then((token: any) => {
  122. resolve(token);
  123. });
  124. } else {
  125. resolve(JSON.parse((<any>window).localStorage.getItem('token')))
  126. }
  127. });
  128. }
  129.  
  130. doRequest(method: string, endpoint: string, params?: any, skipError?: boolean) {
  131. let self = this,
  132. options: any = {};
  133. return new Promise((resolve, reject) => {
  134. let headers: any = {};
  135. headers['Content-Type'] = 'application/json';
  136. self.getToken()
  137. .then((token: any) => {
  138. console.log('params ', params);
  139. if (params) {
  140. if (method === 'GET') {
  141. options.params = self.toHttpParams(params);
  142. } else {
  143. options.body = params;
  144. }
  145. }
  146. options.headers = new HttpHeaders(headers);
  147. self.http.request(method, self.getBackendUrl() + endpoint, options)
  148. .pipe(timeout(60000))
  149. .subscribe(data => {
  150. resolve(data);
  151. },
  152. error => {
  153. self.hideMask()
  154. .then(() => {
  155. if(error.status === 200) {
  156. resolve(error.error.text);
  157. } else if(error.status === 401) {
  158. this.navCtrl.navigateRoot('/landing');
  159. resolve();
  160. } else {
  161. console.log('api error ', error);
  162. /*self.showError('Ошибка ' + error.status, error.error.data && error.error.data.status ? error.error.data.status : error.statusText, () => {
  163. reject(error.error);
  164. });*/
  165. //TODO вывод ошибки сервера
  166. }
  167. });
  168. });
  169. });
  170. });
  171. }
  172. getPartnery(){
  173. return this.doRequest('GET', `partnery`, {});
  174. }
  175. }
Advertisement
Add Comment
Please, Sign In to add comment