Advertisement
pmtpenza

Untitled

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