Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { Injectable } from '@angular/core';
- import { LoadingController, AlertController, NavController } from '@ionic/angular';
- import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
- import { Events } from '@ionic/angular';
- import { timeout } from 'rxjs/operators';
- import { NativeStorage } from '@ionic-native/native-storage/ngx';
- import { Platform } from '@ionic/angular';
- /**
- * Api is a generic REST Api handler. Set your API url first.
- */
- @Injectable({
- providedIn: 'root'
- })
- export class Api {
- loadingMask: any;
- alert: any;
- errorDisplayed: boolean = false;
- repeatInterval: number;
- constructor(
- public http: HttpClient,
- public loadingCtrl: LoadingController,
- public events: Events,
- private alertCtrl: AlertController,
- private storage: NativeStorage,
- private navCtrl: NavController,
- private platform: Platform
- ) {
- let self = this;
- }
- getBackendUrl() {
- return 'https://apitrener.ru/api/';
- }
- showMask() {
- let self = this;
- return new Promise((resolve, reject) => {
- self.beforeShowMask().then(() => {
- resolve();
- });
- });
- }
- async beforeShowMask() {
- let self = this;
- self.loadingMask = await this.loadingCtrl.create({
- mode: 'md',
- spinner: 'lines-small',
- message: 'Выполняется запрос'
- });
- await self.loadingMask.present();
- }
- hideMask() {
- let self = this;
- return new Promise((resolve, reject) => {
- if (self.loadingMask) {
- self.loadingMask.dismiss()
- .then(() => {
- resolve();
- });
- } else {
- resolve();
- }
- });
- }
- async showError(status?: any, errorText?: string, doneFunc: any = () => {}) {
- let self = this;
- if (!self.errorDisplayed) {
- self.alert = await self.alertCtrl.create({
- header: status ? status : 'Ошибка',
- message: errorText ? errorText : 'Произошла ошибка',
- backdropDismiss: false,
- mode: 'md',
- buttons: [{
- text: 'OK',
- handler: () => {
- self.errorDisplayed = false;
- self.alert.dismiss().then(doneFunc());
- return false;
- }
- }]
- });
- if (self.loadingMask && !self.loadingMask._isHidden) {
- self.hideMask()
- .then(() => {
- self.errorDisplayed = true;
- self.alert.present();
- });
- } else {
- self.errorDisplayed = true;
- self.alert.present();
- }
- }
- }
- toHttpParams(obj: Object): HttpParams {
- let params = new HttpParams();
- for (const key in obj) {
- if (obj.hasOwnProperty(key)) {
- const val = obj[key];
- if (val !== null && val !== undefined) {
- params = params.append(key, val.toString());
- }
- }
- }
- return params;
- }
- serialize(obj: any) {
- const formData = new FormData();
- for (let key in obj) {
- if (obj.hasOwnProperty(key)) {
- let element = obj[key];
- formData.append(key, element);
- }
- }
- return formData;
- }
- getToken(){
- let self = this;
- return new Promise((resolve, reject) => {
- if(self.platform.is('cordova')) {
- self.storage.getItem('token')
- .then((token: any) => {
- resolve(token);
- });
- } else {
- resolve(JSON.parse((<any>window).localStorage.getItem('token')))
- }
- });
- }
- doRequest(method: string, endpoint: string, params?: any) {
- let self = this,
- options: any = {};
- return new Promise((resolve, reject) => {
- let headers: any = {};
- headers['Content-Type'] = 'application/json';
- self.getToken()
- .then(() => {
- console.log('params ', params);
- if (params) {
- if (method === 'GET') {
- options.params = self.toHttpParams(params);
- } else {
- options.body = params;
- }
- }
- options.headers = new HttpHeaders(headers);
- self.http.request(method, self.getBackendUrl() + endpoint, options)
- .pipe(timeout(60000))
- .subscribe(data => {
- resolve(data);
- },
- error => {
- self.hideMask()
- .then(() => {
- if(error.status === 200) {
- resolve(error.error.text);
- } else if(error.status === 401) {
- this.navCtrl.navigateRoot('/home');
- resolve();
- } else {
- console.log('api error ', error);
- /*self.showError('Ошибка ' + error.status, error.error.data && error.error.data.status ? error.error.data.status : error.statusText, () => {
- reject(error.error);
- });*/
- //TODO вывод ошибки сервера
- }
- });
- });
- });
- });
- }
- getPartnery(){
- return this.doRequest('GET', `web/partnery`, {});
- }
- getUprazh(id: number){
- return this.doRequest('GET', `web/urazn?zony_id=${id}`, {});
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement