Commit 4a541ab9 by Nabil Sadki

Pre-alpha

parent e30fbb52
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { IonicStorageModule } from '@ionic/storage';
import { HTTP } from '@ionic-native/http/ngx';
import { HttpClientModule } from '@angular/common/http';
import { Diagnostic } from '@ionic-native/diagnostic/ngx';
import { LocationAccuracy } from '@ionic-native/location-accuracy/ngx';
import { LocalNotifications } from '@ionic-native/local-notifications/ngx';
import { BackgroundMode } from '@ionic-native/background-mode/ngx';
import { BackgroundGeolocation } from '@ionic-native/background-geolocation/ngx';
@NgModule({
declarations: [AppComponent],
entryComponents: [],
imports: [
BrowserModule,
IonicModule.forRoot(),
AppRoutingModule,
IonicStorageModule.forRoot({
name: '__allo_testeurs_app',
driverOrder: ['websql', 'sqlite', 'indexeddb']
}),
HttpClientModule
],
providers: [
StatusBar,
SplashScreen,
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
HTTP,
Diagnostic,
LocationAccuracy,
LocalNotifications,
BackgroundMode,
BackgroundGeolocation
],
bootstrap: [AppComponent]
})
export class AppModule { }
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { IonicStorageModule } from '@ionic/storage';
import { HTTP } from '@ionic-native/http/ngx';
import { HttpClientModule } from '@angular/common/http';
import { Diagnostic } from '@ionic-native/diagnostic/ngx';
import { LocationAccuracy } from '@ionic-native/location-accuracy/ngx';
import { LocalNotifications } from '@ionic-native/local-notifications/ngx';
import { BackgroundMode } from '@ionic-native/background-mode/ngx';
import { BackgroundGeolocation } from '@ionic-native/background-geolocation/ngx';
import { AppVersion } from '@ionic-native/app-version/ngx';
@NgModule({
declarations: [AppComponent],
entryComponents: [],
imports: [
BrowserModule,
IonicModule.forRoot(),
AppRoutingModule,
IonicStorageModule.forRoot({
name: '__allo_testeurs_app',
driverOrder: ['websql', 'sqlite', 'indexeddb']
}),
HttpClientModule
],
providers: [
StatusBar,
SplashScreen,
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
HTTP,
Diagnostic,
LocationAccuracy,
LocalNotifications,
BackgroundMode,
BackgroundGeolocation,
AppVersion
],
bootstrap: [AppComponent]
})
export class AppModule { }
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-a-propos',
templateUrl: './a-propos.page.html',
styleUrls: ['./a-propos.page.scss'],
})
export class AProposPage implements OnInit {
constructor() { }
ngOnInit() {
}
}
<ion-header>
<ion-toolbar color="primary">
<ion-buttons slot="start">
<ion-menu-button>
<ion-icon name="menu" size="large"></ion-icon>
</ion-menu-button>
</ion-buttons>
<ion-title>A propos</ion-title>
</ion-toolbar>
</ion-header>
<ion-content color="primary" padding class="apropos-page">
<div padding-horizontal text-center class="animated fadeInUp">
<img src="../../../assets/logo-full-white.png" />
<div class="logo"></div>
<!-- <h2 ion-text class="text-primary">
<strong>Allo Testeurs</strong><br />Le club!
</h2>-->
</div>
<div margin text-justify class="description">
<p>La nouvelle application <strong>Allo Testeurs</strong> vous offre les meilleurs deals offerts par nos
partenaires, spécialement pour nos membres détenant la carte club.</p>
<p>Si vous êtes un heureux déteneur d'une carte club, vous aurez accès à une multitude d'offres gratuitement! mais
encore plus, sur chaque offre vous bénéficierez d'un certains nombre de points, qui vous permettrons par la suite
de gagner des cadeaux remarquables!</p>
<p>Vous aurez plus de points en parrainant vos ami(e)s et la famille!</p>
<p text-center>Ver 1.0.8.0</p>
</div>
</ion-content>
\ No newline at end of file
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-a-propos',
templateUrl: './a-propos.page.html',
styleUrls: ['./a-propos.page.scss'],
})
export class AProposPage implements OnInit {
public appVersionNumber;
constructor() { }
ngOnInit() {
}
}
import { Component, OnInit } from '@angular/core';
import { AppVersion } from '@ionic-native/app-version/ngx';
@Component({
selector: 'app-a-propos',
templateUrl: './a-propos.page.html',
styleUrls: ['./a-propos.page.scss'],
})
export class AProposPage implements OnInit {
public appVersionNumber;
public appVersionCode;
public appPackageName;
public appAppName;
constructor(
private appVersion: AppVersion
) {
console.log(
this.appVersion.getAppName(),
this.appVersion.getPackageName(),
this.appVersion.getVersionCode(),
this.appVersion.getVersionNumber()
);
}
ngOnInit() {
}
}
import { Component, OnInit } from '@angular/core';
import { AppVersion } from '@ionic-native/app-version/ngx';
@Component({
selector: 'app-a-propos',
templateUrl: './a-propos.page.html',
styleUrls: ['./a-propos.page.scss'],
})
export class AProposPage implements OnInit {
public appVersionNumber;
public appVersionCode;
public appPackageName;
public appAppName;
constructor(
private appVersion: AppVersion
) {
this.appVersion.getAppName().then((appName) => {
console.log(appName);
});
this.appVersion.getPackageName().then((packageName) => {
console.log(packageName);
});
this.appVersion.getVersionCode().then((versionCode) => {
console.log(versionCode);
});
this.appVersion.getVersionNumber().then((versionNumber) => {
console.log(versionNumber);
});
}
ngOnInit() {
}
}
import { Component, OnInit } from '@angular/core';
import { Platform } from '@ionic/angular';
import { AppVersion } from '@ionic-native/app-version/ngx';
@Component({
selector: 'app-a-propos',
templateUrl: './a-propos.page.html',
styleUrls: ['./a-propos.page.scss'],
})
export class AProposPage implements OnInit {
public appVersionNumber;
public appVersionCode;
public appPackageName;
public appAppName;
constructor(
private platform: Platform,
private appVersion: AppVersion
) {
this.platform.ready().then(() => {
this.appVersion.getAppName().then((appName) => {
this.appAppName = appName;
});
this.appVersion.getPackageName().then((packageName) => {
this.appPackageName = packageName;
});
this.appVersion.getVersionCode().then((versionCode) => {
this.appVersionCode = versionCode;
});
this.appVersion.getVersionNumber().then((versionNumber) => {
this.appVersionNumber = versionNumber;
});
});
}
ngOnInit() {
}
}
import { Component, OnInit } from '@angular/core';
import { Platform } from '@ionic/angular';
import { AppVersion } from '@ionic-native/app-version/ngx';
@Component({
selector: 'app-a-propos',
templateUrl: './a-propos.page.html',
styleUrls: ['./a-propos.page.scss'],
})
export class AProposPage implements OnInit {
public appVersionNumber = '1';
public appVersionCode = '1';
public appPackageName = 'com.allo_testeurs.app';
public appAppName = 'Allo Testeurs';
constructor(
private platform: Platform,
private appVersion: AppVersion
) {
this.platform.ready().then(() => {
if (this.platform.is('cordova')) {
this.appVersion.getAppName().then((appName) => {
this.appAppName = appName;
});
this.appVersion.getPackageName().then((packageName) => {
this.appPackageName = packageName;
});
this.appVersion.getVersionCode().then((versionCode) => {
this.appVersionCode = versionCode;
});
this.appVersion.getVersionNumber().then((versionNumber) => {
this.appVersionNumber = versionNumber;
});
}
});
}
ngOnInit() {
}
}
import { Component, OnInit } from '@angular/core';
import { Platform } from '@ionic/angular';
import { AppVersion } from '@ionic-native/app-version/ngx';
@Component({
selector: 'app-a-propos',
templateUrl: './a-propos.page.html',
styleUrls: ['./a-propos.page.scss'],
})
export class AProposPage implements OnInit {
public appVersionNumber = '1';
public appVersionCode: any = '1';
public appPackageName = 'com.allo_testeurs.app';
public appAppName = 'Allo Testeurs';
constructor(
private platform: Platform,
private appVersion: AppVersion
) {
this.platform.ready().then(() => {
if (this.platform.is('cordova')) {
this.appVersion.getAppName().then((appName) => {
this.appAppName = appName;
});
this.appVersion.getPackageName().then((packageName) => {
this.appPackageName = packageName;
});
this.appVersion.getVersionCode().then((versionCode) => {
this.appVersionCode = versionCode;
});
this.appVersion.getVersionNumber().then((versionNumber) => {
this.appVersionNumber = versionNumber;
});
}
});
}
ngOnInit() {
}
}
import { Component, OnInit } from '@angular/core';
import { Platform } from '@ionic/angular';
import { AppVersion } from '@ionic-native/app-version/ngx';
@Component({
selector: 'app-a-propos',
templateUrl: './a-propos.page.html',
styleUrls: ['./a-propos.page.scss'],
})
export class AProposPage implements OnInit {
public appVersionNumber: any = '1';
public appVersionCode: any = '1';
public appPackageName: any = 'com.allo_testeurs.app';
public appAppName: any = 'Allo Testeurs';
constructor(
private platform: Platform,
private appVersion: AppVersion
) {
this.platform.ready().then(() => {
if (this.platform.is('cordova')) {
this.appVersion.getAppName().then((appName) => {
this.appAppName = appName;
});
this.appVersion.getPackageName().then((packageName) => {
this.appPackageName = packageName;
});
this.appVersion.getVersionCode().then((versionCode) => {
this.appVersionCode = versionCode;
});
this.appVersion.getVersionNumber().then((versionNumber) => {
this.appVersionNumber = versionNumber;
});
}
});
}
ngOnInit() {
}
}
<ion-header>
<ion-toolbar color="primary">
<ion-buttons slot="start">
<ion-menu-button>
<ion-icon name="menu" size="large"></ion-icon>
</ion-menu-button>
</ion-buttons>
<ion-title>A propos</ion-title>
</ion-toolbar>
</ion-header>
<ion-content color="primary" padding class="apropos-page">
<div padding-horizontal text-center class="animated fadeInUp">
<img src="../../../assets/logo-full-white.png" />
<div class="logo"></div>
<!-- <h2 ion-text class="text-primary">
<strong>Allo Testeurs</strong><br />Le club!
</h2>-->
</div>
<div margin text-justify class="description">
<p>La nouvelle application <strong>Allo Testeurs</strong> vous offre les meilleurs deals offerts par nos
partenaires, spécialement pour nos membres détenant la carte club.</p>
<p>Si vous êtes un heureux déteneur d'une carte club, vous aurez accès à une multitude d'offres gratuitement! mais
encore plus, sur chaque offre vous bénéficierez d'un certains nombre de points, qui vous permettrons par la suite
de gagner des cadeaux remarquables!</p>
<p>Vous aurez plus de points en parrainant vos ami(e)s et la famille!</p>
<p text-center>Ver {{ appVersionNumber }}</p>
</div>
</ion-content>
\ No newline at end of file
import { Component, OnInit } from '@angular/core';
import { NavController, ToastController } from "@ionic/angular";
import { AlloService } from '../../services/allo-service';
import { TripService } from '../../services/trip-service';
// import { TripDetailPage } from "../trip-detail/trip-detail";
import { HTTP } from '@ionic-native/http/ngx';
import { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';
import { Storage } from '@ionic/storage';
@Component({
selector: 'app-dashboard',
templateUrl: './dashboard.page.html',
styleUrls: ['./dashboard.page.scss'],
})
export class DashboardPage implements OnInit {
// list of products
public products: any;
public toast: any;
public show_more_filters = false;
constructor(
public nav: NavController,
public _ALLO: AlloService,
public _TRIP: TripService,
public http: HttpClient,
public toastCtrl: ToastController,
private storage: Storage
) {
}
ngOnInit() {
console.log('ngOnInit Dashboard');
this._ALLO.presentLoading();
}
showHideMoreFilters() {
if (this.show_more_filters === false) {
this.show_more_filters = true;
} else {
this.show_more_filters = false;
}
}
async presentToast() {
const toast = await this.toastCtrl.create({
message: 'Liste mise à jour',
showCloseButton: true,
position: 'bottom',
closeButtonText: 'OK',
duration: 2000
});
toast.present();
}
async doRefresh(refresher) {
try {
this.toast.dismiss();
} catch (e) { }
console.log('refreshing');
this._TRIP.fetchData(true);
refresher.target.complete();
this.presentToast();
// this._TRIP.getRequest().subscribe((data) => {
// this.setData(data);
// refresher.target.complete();
// this.presentToast();
// },
// err => {
// if (typeof refresher !== 'undefined' && refresher !== null) {
// refresher.target.complete();
// }
// });
}
ionViewWillEnter() {
console.log('ionViewWillEnter Dashboard');
// this._ALLO.presentLoading();
}
ionViewDidEnter() {
console.log('ionViewDidEnter Dashboard');
// this._ALLO.presentLoading();
}
ionViewDidLoad() {
console.log('ionViewDidLoad Dashboard');
// this._ALLO.dismissLoading();
}
onContextChange(ctxt: any): void {
// if ('all' === ctxt){
// return true;
// }
// this.products = this.products.filter(item => {
// console.log(item);
//// if (item.description.indexOf(ctxt.id) >= 0 ||
//// item.name.indexOf(ctxt.id) >= 0) {
//// return true;
//// }
// return false;
// });
}
// view trip detail
viewDetail(id) {
console.log(id);
// this.nav.push(TripDetailPage, { id: id });
}
}
import { Component, OnInit } from '@angular/core';
import { NavController, ToastController } from "@ionic/angular";
import { AlloService } from '../../services/allo-service';
import { TripService } from '../../services/trip-service';
// import { TripDetailPage } from "../trip-detail/trip-detail";
import { HTTP } from '@ionic-native/http/ngx';
import { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';
import { Storage } from '@ionic/storage';
@Component({
selector: 'app-dashboard',
templateUrl: './dashboard.page.html',
styleUrls: ['./dashboard.page.scss'],
})
export class DashboardPage implements OnInit {
// list of products
public products: any;
public toast: any;
public terms: any;
public show_more_filters = false;
constructor(
public nav: NavController,
public _ALLO: AlloService,
public _TRIP: TripService,
public http: HttpClient,
public toastCtrl: ToastController,
private storage: Storage
) {
}
ngOnInit() {
console.log('ngOnInit Dashboard');
this._ALLO.presentLoading();
}
showHideMoreFilters() {
if (this.show_more_filters === false) {
this.show_more_filters = true;
} else {
this.show_more_filters = false;
}
}
async presentToast() {
const toast = await this.toastCtrl.create({
message: 'Liste mise à jour',
showCloseButton: true,
position: 'bottom',
closeButtonText: 'OK',
duration: 2000
});
toast.present();
}
async doRefresh(refresher) {
try {
this.toast.dismiss();
} catch (e) { }
console.log('refreshing');
this._TRIP.fetchData(true);
refresher.target.complete();
this.presentToast();
// this._TRIP.getRequest().subscribe((data) => {
// this.setData(data);
// refresher.target.complete();
// this.presentToast();
// },
// err => {
// if (typeof refresher !== 'undefined' && refresher !== null) {
// refresher.target.complete();
// }
// });
}
ionViewWillEnter() {
console.log('ionViewWillEnter Dashboard');
// this._ALLO.presentLoading();
}
ionViewDidEnter() {
console.log('ionViewDidEnter Dashboard');
// this._ALLO.presentLoading();
}
ionViewDidLoad() {
console.log('ionViewDidLoad Dashboard');
// this._ALLO.dismissLoading();
}
onContextChange(ctxt: any): void {
// if ('all' === ctxt){
// return true;
// }
// this.products = this.products.filter(item => {
// console.log(item);
//// if (item.description.indexOf(ctxt.id) >= 0 ||
//// item.name.indexOf(ctxt.id) >= 0) {
//// return true;
//// }
// return false;
// });
}
// view trip detail
viewDetail(id) {
console.log(id);
// this.nav.push(TripDetailPage, { id: id });
}
}
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-login',
templateUrl: './login.page.html',
styleUrls: ['./login.page.scss'],
})
export class LoginPage implements OnInit {
constructor() { }
ngOnInit() {
}
}
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-login',
templateUrl: './login.page.html',
styleUrls: ['./login.page.scss'],
})
export class LoginPage implements OnInit {
login: any;
constructor() { }
ngOnInit() {
}
}
...@@ -127,8 +127,13 @@ ...@@ -127,8 +127,13 @@
"lint": { "lint": {
"builder": "@angular-devkit/build-angular:tslint", "builder": "@angular-devkit/build-angular:tslint",
"options": { "options": {
"tsConfig": ["src/tsconfig.app.json", "src/tsconfig.spec.json"], "tsConfig": [
"exclude": ["**/node_modules/**"] "src/tsconfig.app.json",
"src/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
} }
}, },
"ionic-cordova-build": { "ionic-cordova-build": {
...@@ -180,7 +185,9 @@ ...@@ -180,7 +185,9 @@
"builder": "@angular-devkit/build-angular:tslint", "builder": "@angular-devkit/build-angular:tslint",
"options": { "options": {
"tsConfig": "e2e/tsconfig.e2e.json", "tsConfig": "e2e/tsconfig.e2e.json",
"exclude": ["**/node_modules/**"] "exclude": [
"**/node_modules/**"
]
} }
} }
} }
...@@ -197,4 +204,4 @@ ...@@ -197,4 +204,4 @@
"styleext": "scss" "styleext": "scss"
} }
} }
} }
\ No newline at end of file
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.allotesteurs.app" version="1.0.8.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>Allo Testeurs</name>
<description>Découvrir les bon plans à Kénitra et ailleurs!</description>
<author email="contact@allo-testeurs.com" href="https://www.allo-testeurs.com">Allo Testeurs Agency</author>
<content src="index.html" />
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-navigation href="http://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<platform name="android">
<allow-intent href="market:*" />
<icon density="ldpi" src="src\assets\img\ionic3-ico.png" />
<icon density="mdpi" src="src\assets\img\ionic3-ico.png" />
<icon density="hdpi" src="src\assets\img\ionic3-ico.png" />
<icon density="xhdpi" src="src\assets\img\ionic3-ico.png" />
<icon density="xxhdpi" src="src\assets\img\ionic3-ico.png" />
<icon density="xxxhdpi" src="src\assets\img\ionic3-ico.png" />
<splash density="land-ldpi" src="resources\splash.png" />
<splash density="land-mdpi" src="resources\splash.png" />
<splash density="land-hdpi" src="resources\splash.png" />
<splash density="land-xhdpi" src="resources\splash.png" />
<splash density="land-xxhdpi" src="resources\splash.png" />
<splash density="land-xxxhdpi" src="resources\splash.png" />
<splash density="port-ldpi" src="resources\splash.png" />
<splash density="port-mdpi" src="resources\splash.png" />
<splash density="port-hdpi" src="resources\splash.png" />
<splash density="port-xhdpi" src="resources\splash.png" />
<splash density="port-xxhdpi" src="resources\splash.png" />
<splash density="port-xxxhdpi" src="resources\splash.png" />
<icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" />
<icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" />
<icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" />
<icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" />
<icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
<icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
<splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" />
<splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" />
<splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" />
<splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" />
<splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" />
<splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" />
<splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" />
<splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" />
<splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" />
<splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" />
<splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" />
<splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
<icon height="57" src="resources/ios/icon/icon.png" width="57" />
<icon height="114" src="resources/ios/icon/icon@2x.png" width="114" />
<icon height="40" src="resources/ios/icon/icon-40.png" width="40" />
<icon height="80" src="resources/ios/icon/icon-40@2x.png" width="80" />
<icon height="120" src="resources/ios/icon/icon-40@3x.png" width="120" />
<icon height="50" src="resources/ios/icon/icon-50.png" width="50" />
<icon height="100" src="resources/ios/icon/icon-50@2x.png" width="100" />
<icon height="60" src="resources/ios/icon/icon-60.png" width="60" />
<icon height="120" src="resources/ios/icon/icon-60@2x.png" width="120" />
<icon height="180" src="resources/ios/icon/icon-60@3x.png" width="180" />
<icon height="72" src="resources/ios/icon/icon-72.png" width="72" />
<icon height="144" src="resources/ios/icon/icon-72@2x.png" width="144" />
<icon height="76" src="resources/ios/icon/icon-76.png" width="76" />
<icon height="152" src="resources/ios/icon/icon-76@2x.png" width="152" />
<icon height="167" src="resources/ios/icon/icon-83.5@2x.png" width="167" />
<icon height="29" src="resources/ios/icon/icon-small.png" width="29" />
<icon height="58" src="resources/ios/icon/icon-small@2x.png" width="58" />
<icon height="87" src="resources/ios/icon/icon-small@3x.png" width="87" />
<splash height="1136" src="resources/ios/splash/Default-568h@2x~iphone.png" width="640" />
<splash height="1334" src="resources/ios/splash/Default-667h.png" width="750" />
<splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" />
<splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208" />
<splash height="1536" src="resources/ios/splash/Default-Landscape@2x~ipad.png" width="2048" />
<splash height="2048" src="resources/ios/splash/Default-Landscape@~ipadpro.png" width="2732" />
<splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024" />
<splash height="2048" src="resources/ios/splash/Default-Portrait@2x~ipad.png" width="1536" />
<splash height="2732" src="resources/ios/splash/Default-Portrait@~ipadpro.png" width="2048" />
<splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768" />
<splash height="960" src="resources/ios/splash/Default@2x~iphone.png" width="640" />
<splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" />
<icon height="1024" src="resources/ios/icon/icon-1024.png" width="1024" />
<splash height="2732" src="resources/ios/splash/Default@2x~universal~anyany.png" width="2732" />
</platform>
<preference name="orientation" value="portrait" />
<preference name="webviewbounce" value="false" />
<preference name="UIWebViewBounce" value="false" />
<preference name="DisallowOverscroll" value="true" />
<preference name="android-minSdkVersion" value="19" />
<preference name="BackupWebStorage" value="none" />
<preference name="SplashScreenDelay" value="6000" />
<preference name="FadeSplashScreen" value="true" />
<preference name="ShowSplashScreen" value="true" />
<preference name="ShowSplashScreenSpinner" value="false" />
<preference name="FadeSplashScreenDuration" value="600" />
<preference name="SplashScreenBackgroundColor" value="0xFFFFFFFF" />
<preference name="SplashScreen" value="screen" />
<preference name="SplashMaintainAspectRatio" value="true" />
<preference name="fullscreen" value="true" />
<feature name="StatusBar">
<param name="ios-package" onload="true" value="CDVStatusBar" />
</feature>
<preference name="SplashShowOnlyFirstTime" value="false" />
</widget>
{ {
"name": "atapp", "name": "atapp",
"integrations": {}, "integrations": {
"cordova": {}
},
"type": "angular" "type": "angular"
} }
{ {
"name": "atapp", "name": "atapp",
"version": "0.0.1", "version": "0.0.1",
"author": "Ionic Framework", "author": "Allo Testeurs",
"homepage": "https://ionicframework.com/", "homepage": "http://www.allo-testeurs.com/",
"scripts": { "scripts": {
"ng": "ng", "ng": "ng",
"start": "ng serve", "start": "ng serve",
...@@ -20,11 +20,34 @@ ...@@ -20,11 +20,34 @@
"@angular/platform-browser": "^7.2.2", "@angular/platform-browser": "^7.2.2",
"@angular/platform-browser-dynamic": "^7.2.2", "@angular/platform-browser-dynamic": "^7.2.2",
"@angular/router": "^7.2.2", "@angular/router": "^7.2.2",
"@ionic-native/app-version": "^5.11.0",
"@ionic-native/background-geolocation": "^5.8.0",
"@ionic-native/background-mode": "^5.11.0",
"@ionic-native/core": "^5.0.0", "@ionic-native/core": "^5.0.0",
"@ionic-native/diagnostic": "^5.8.0",
"@ionic-native/http": "^5.8.0",
"@ionic-native/local-notifications": "^5.11.0",
"@ionic-native/location-accuracy": "^5.8.0",
"@ionic-native/splash-screen": "^5.0.0", "@ionic-native/splash-screen": "^5.0.0",
"@ionic-native/status-bar": "^5.0.0", "@ionic-native/status-bar": "^5.0.0",
"@ionic/angular": "^4.1.0", "@ionic/angular": "^4.1.0",
"@ionic/storage": "^2.2.0",
"@mauron85/cordova-plugin-background-geolocation": "^3.0.3",
"cordova-android": "^8.0.0",
"cordova-plugin-advanced-http": "^2.1.1",
"cordova-plugin-app-version": "^0.1.9",
"cordova-plugin-background-mode": "git+https://github.com/sercatven/cordova-plugin-background-mode.git",
"cordova-plugin-badge": "^0.8.8",
"cordova-plugin-file": "^6.0.1",
"cordova-plugin-local-notification": "^0.9.0-beta.2",
"cordova-plugin-request-location-accuracy": "^2.3.0",
"cordova-sqlite-storage": "^3.2.0",
"cordova.plugins.diagnostic": "^5.0.0",
"core-js": "^2.5.4", "core-js": "^2.5.4",
"ionic-image-loader": "^6.3.3",
"leaflet": "^1.5.1",
"leaflet.markercluster": "^1.4.1",
"path": "^0.12.7",
"rxjs": "~6.5.1", "rxjs": "~6.5.1",
"tslib": "^1.9.0", "tslib": "^1.9.0",
"zone.js": "~0.8.29" "zone.js": "~0.8.29"
...@@ -39,9 +62,10 @@ ...@@ -39,9 +62,10 @@
"@angular/compiler-cli": "~7.2.2", "@angular/compiler-cli": "~7.2.2",
"@angular/language-service": "~7.2.2", "@angular/language-service": "~7.2.2",
"@ionic/angular-toolkit": "~1.5.1", "@ionic/angular-toolkit": "~1.5.1",
"@types/node": "~12.0.0", "@ionic/lab": "2.0.4",
"@types/jasmine": "~2.8.8", "@types/jasmine": "~2.8.8",
"@types/jasminewd2": "~2.0.3", "@types/jasminewd2": "~2.0.3",
"@types/node": "~12.0.0",
"codelyzer": "~4.5.0", "codelyzer": "~4.5.0",
"jasmine-core": "~2.99.1", "jasmine-core": "~2.99.1",
"jasmine-spec-reporter": "~4.2.1", "jasmine-spec-reporter": "~4.2.1",
...@@ -53,7 +77,52 @@ ...@@ -53,7 +77,52 @@
"protractor": "~5.4.0", "protractor": "~5.4.0",
"ts-node": "~8.3.0", "ts-node": "~8.3.0",
"tslint": "~5.17.0", "tslint": "~5.17.0",
"typescript": "~3.1.6" "typescript": "~3.1.6",
"cordova-plugin-whitelist": "1.3.3",
"cordova-plugin-statusbar": "2.4.2",
"cordova-plugin-device": "2.0.2",
"cordova-plugin-splashscreen": "5.0.2",
"cordova-plugin-ionic-webview": "^4.0.0",
"cordova-plugin-ionic-keyboard": "^2.0.5"
},
"browser": {
"crypto": false,
"fs": false,
"module": false
}, },
"description": "An Ionic project" "description": "An Ionic project",
} "cordova": {
"plugins": {
"cordova-sqlite-storage": {},
"cordova-plugin-advanced-http": {},
"cordova.plugins.diagnostic": {
"ANDROID_SUPPORT_VERSION": "28.+"
},
"cordova-plugin-request-location-accuracy": {},
"cordova-plugin-local-notification": {},
"cordova-plugin-mauron85-background-geolocation": {},
"cordova-plugin-whitelist": {},
"cordova-plugin-statusbar": {},
"cordova-plugin-device": {},
"cordova-plugin-splashscreen": {},
"cordova-plugin-ionic-webview": {},
"cordova-plugin-ionic-keyboard": {},
"cordova-plugin-background-mode": {},
"@mauron85/cordova-plugin-background-geolocation": {
"GOOGLE_PLAY_SERVICES_VERSION": "11+",
"ANDROID_SUPPORT_LIBRARY_VERSION": "26+",
"ICON": "@mipmap/ic_launcher",
"SMALL_ICON": "@mipmap/ic_launcher",
"ACCOUNT_NAME": "@string/app_name",
"ACCOUNT_LABEL": "@string/app_name",
"ACCOUNT_TYPE": "$PACKAGE_NAME.account",
"CONTENT_AUTHORITY": "$PACKAGE_NAME"
},
"cordova-plugin-app-version": {},
"cordova-plugin-file": {}
},
"platforms": [
"android"
]
}
}
\ No newline at end of file
These are Cordova resources. You can replace icon.png and splash.png and run
`ionic cordova resources` to generate custom icons and splash screens for your
app. See `ionic cordova resources --help` for details.
Cordova reference documentation:
- Icons: https://cordova.apache.org/docs/en/latest/config_ref/images.html
- Splash Screens: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-splashscreen/
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain>localhost</domain>
</domain-config>
</network-security-config>
...@@ -2,13 +2,31 @@ import { NgModule } from '@angular/core'; ...@@ -2,13 +2,31 @@ import { NgModule } from '@angular/core';
import { PreloadAllModules, RouterModule, Routes } from '@angular/router'; import { PreloadAllModules, RouterModule, Routes } from '@angular/router';
const routes: Routes = [ const routes: Routes = [
{ path: '', redirectTo: 'home', pathMatch: 'full' }, { path: '', redirectTo: 'start', pathMatch: 'full' },
{ path: 'home', loadChildren: './home/home.module#HomePageModule' }, { path: 'start', loadChildren: './pages/start/start.module#StartPageModule' },
{ path: 'mainslider', loadChildren: './pages/mainslider/mainslider.module#MainsliderPageModule' },
{ path: 'app', loadChildren: './pages/menu/menu.module#MenuPageModule' },
// { path: 'etablissement', loadChildren: './pages/etablissement/etablissement.module#EtablissementPageModule' },
// { path: 'login', loadChildren: './pages/login/login.module#LoginPageModule' },
// { path: 'dashboard', loadChildren: './pages/dashboard/dashboard.module#DashboardPageModule' },
// { path: 'contact', loadChildren: './pages/contact/contact.module#ContactPageModule' },
// { path: 'a-propos', loadChildren: './pages/a-propos/a-propos.module#AProposPageModule' },
// { path: 'params', loadChildren: './pages/params/params.module#ParamsPageModule' },
// { path: 'gagner-points', loadChildren: './pages/gagner-points/gagner-points.module#GagnerPointsPageModule' },
// { path: 'lots-a-gagner', loadChildren: './pages/lots-a-gagner/lots-a-gagner.module#LotsAGagnerPageModule' },
// { path: 'partenaires', loadChildren: './pages/partenaires/partenaires.module#PartenairesPageModule' },
// { path: 'partenaires-list', loadChildren: './pages/partenaires-list/partenaires-list.module#PartenairesListPageModule' },
// { path: 'partenaires-map', loadChildren: './pages/partenaires-map/partenaires-map.module#PartenairesMapPageModule' },
]; ];
@NgModule({ @NgModule({
imports: [ imports: [
RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }) RouterModule.forRoot(
routes,
{
preloadingStrategy: PreloadAllModules
}
)
], ],
exports: [RouterModule] exports: [RouterModule]
}) })
......
<ion-app> <ion-app>
<ion-router-outlet></ion-router-outlet> <ion-router-outlet></ion-router-outlet>
</ion-app> </ion-app>
\ No newline at end of file
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { Storage } from '@ionic/storage';
import { Platform } from '@ionic/angular'; import { Platform } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx'; import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx'; import { StatusBar } from '@ionic-native/status-bar/ngx';
import { LocalNotifications } from '@ionic-native/local-notifications/ngx';
import { TripService } from './services/trip-service';
// import { LocationService } from './services/location-service';
@Component({ @Component({
selector: 'app-root', selector: 'app-root',
...@@ -10,9 +16,13 @@ import { StatusBar } from '@ionic-native/status-bar/ngx'; ...@@ -10,9 +16,13 @@ import { StatusBar } from '@ionic-native/status-bar/ngx';
}) })
export class AppComponent { export class AppComponent {
constructor( constructor(
public LN: LocalNotifications,
private platform: Platform, private platform: Platform,
private splashScreen: SplashScreen, private splashScreen: SplashScreen,
private statusBar: StatusBar private statusBar: StatusBar,
private router: Router,
private _STOR: Storage
// private _LOCAT: LocationService
) { ) {
this.initializeApp(); this.initializeApp();
} }
...@@ -21,6 +31,71 @@ export class AppComponent { ...@@ -21,6 +31,71 @@ export class AppComponent {
this.platform.ready().then(() => { this.platform.ready().then(() => {
this.statusBar.styleDefault(); this.statusBar.styleDefault();
this.splashScreen.hide(); this.splashScreen.hide();
// Set params
this.setDefaultParams();
// Set locator
// this.setLocator();
this._STOR.get('PARAM_mainslider').then((prmMainslider) => {
if (prmMainslider) {
this.router.navigateByUrl('/app/dashboard', { replaceUrl: true });
} else {
this.router.navigateByUrl('/mainslider', { replaceUrl: true });
this._STOR.set('PARAM_mainslider', true);
}
});
});
}
setDefaultParams() {
this._STOR.get('PARAM_geolocate').then((val) => {
if (val === null) {
this._STOR.set('PARAM_geolocate', false);
}
});
this._STOR.get('PARAM_geoarea').then((val) => {
if (val === null) {
this._STOR.set('PARAM_geoarea', 1000);
}
});
this._STOR.get('PARAM_notiftime').then((val) => {
if (val === null) {
this._STOR.set('PARAM_notiftime', 15);
}
}); });
this._STOR.get('PARAM_trackdelay').then((val) => {
if (val === null) {
this._STOR.set('PARAM_trackdelay', 60000);
}
});
this._STOR.get('PARAM_notifnbr').then((val) => {
if (val === null) {
this._STOR.set('PARAM_notifnbr', 'all');
}
});
this._STOR.get('NOTIF_shownpartners').then((val) => {
if (val === null) {
this._STOR.set('NOTIF_shownpartners', []);
}
});
}
setLocator() {
// Start locator if ON
// this._STOR.get('PARAM_geolocate').then((val) => {
// if (val !== null) {
// this._LOCAT.restartTracking();
// }
// });
this.LN.on('offres').subscribe(res => {
console.log('offres notif', res);
});
// this.LN.on('trigger').subscribe(res => {
// console.log('trigger notif', res);
// });
} }
} }
...@@ -9,15 +9,41 @@ import { StatusBar } from '@ionic-native/status-bar/ngx'; ...@@ -9,15 +9,41 @@ import { StatusBar } from '@ionic-native/status-bar/ngx';
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module'; import { AppRoutingModule } from './app-routing.module';
import { IonicStorageModule } from '@ionic/storage';
import { HTTP } from '@ionic-native/http/ngx';
import { HttpClientModule } from '@angular/common/http';
import { Diagnostic } from '@ionic-native/diagnostic/ngx';
import { LocationAccuracy } from '@ionic-native/location-accuracy/ngx';
import { LocalNotifications } from '@ionic-native/local-notifications/ngx';
import { BackgroundMode } from '@ionic-native/background-mode/ngx';
import { BackgroundGeolocation } from '@ionic-native/background-geolocation/ngx';
import { AppVersion } from '@ionic-native/app-version/ngx';
@NgModule({ @NgModule({
declarations: [AppComponent], declarations: [AppComponent],
entryComponents: [], entryComponents: [],
imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule], imports: [
BrowserModule,
IonicModule.forRoot(),
AppRoutingModule,
IonicStorageModule.forRoot({
name: '__allo_testeurs_app',
driverOrder: ['websql', 'sqlite', 'indexeddb']
}),
HttpClientModule
],
providers: [ providers: [
StatusBar, StatusBar,
SplashScreen, SplashScreen,
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy } { provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
HTTP,
Diagnostic,
LocationAccuracy,
LocalNotifications,
BackgroundMode,
BackgroundGeolocation,
AppVersion
], ],
bootstrap: [AppComponent] bootstrap: [AppComponent]
}) })
export class AppModule {} export class AppModule { }
// App Styles // App Styles
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Put style rules here that you want to apply to the entire application. These // Put style rules here that you want to apply to the entire application. These
// styles are for the entire app and not just one component. Additionally, this // styles are for the entire app and not just one component. Additionally, this
// file can hold Sass mixins, functions, and placeholder classes to be imported // file can hold Sass mixins, functions, and placeholder classes to be imported
// and used throughout the application. // and used throughout the application.
\ No newline at end of file
.map-popup {
.leaflet-popup-content {
width: 80vw !important;
margin: 0 !important;
.logo-container {
max-height: 50vw;
background: var(--ion-color-secondary, #989aa2);
img {
max-height: 50vw;
width: auto;
margin: 0 auto;
}
}
h2 {
white-space: initial !important;
}
}
.leaflet-popup-close-button {
padding: 11px 24px 23px 11px !important;
background: var(--ion-color-primary, #f93129) !important;
border-top-right-radius: 7px !important;
color: var(--ion-color-light, #ffffff) !important;
}
}
<ion-header>
<ion-toolbar>
<ion-title>
Ionic Blank
</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<div class="ion-padding">
The world is your oyster.
<p>If you get lost, the <a target="_blank" rel="noopener" href="https://ionicframework.com/docs/">docs</a> will be your guide.</p>
</div>
</ion-content>
import { Component } from '@angular/core';
@Component({
selector: 'app-home',
templateUrl: 'home.page.html',
styleUrls: ['home.page.scss'],
})
export class HomePage {
constructor() {}
}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { AProposPage } from './a-propos.page';
const routes: Routes = [
{
path: '',
component: AProposPage
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
],
declarations: [AProposPage]
})
export class AProposPageModule {}
<ion-header>
<ion-toolbar color="primary">
<ion-buttons slot="start">
<ion-menu-button>
<ion-icon name="menu" size="large"></ion-icon>
</ion-menu-button>
</ion-buttons>
<ion-title>A propos</ion-title>
</ion-toolbar>
</ion-header>
<ion-content color="primary" padding class="apropos-page">
<div padding-horizontal text-center class="animated fadeInUp">
<img src="../../../assets/logo-full-white.png" />
<div class="logo"></div>
<!-- <h2 ion-text class="text-primary">
<strong>Allo Testeurs</strong><br />Le club!
</h2>-->
</div>
<div margin text-justify class="description">
<p>La nouvelle application <strong>Allo Testeurs</strong> vous offre les meilleurs deals offerts par nos
partenaires, spécialement pour nos membres détenant la carte club.</p>
<p>Si vous êtes un heureux déteneur d'une carte club, vous aurez accès à une multitude d'offres gratuitement! mais
encore plus, sur chaque offre vous bénéficierez d'un certains nombre de points, qui vous permettrons par la suite
de gagner des cadeaux remarquables!</p>
<p>Vous aurez plus de points en parrainant vos ami(e)s et la famille!</p>
<p text-center>Ver {{ appVersionNumber }}</p>
</div>
</ion-content>
\ No newline at end of file
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { HomePage } from './home.page'; import { AProposPage } from './a-propos.page';
describe('HomePage', () => { describe('AProposPage', () => {
let component: HomePage; let component: AProposPage;
let fixture: ComponentFixture<HomePage>; let fixture: ComponentFixture<AProposPage>;
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
declarations: [ HomePage ], declarations: [ AProposPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
}) })
.compileComponents(); .compileComponents();
})); }));
beforeEach(() => { beforeEach(() => {
fixture = TestBed.createComponent(HomePage); fixture = TestBed.createComponent(AProposPage);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
......
import { Component, OnInit } from '@angular/core';
import { Platform } from '@ionic/angular';
import { AppVersion } from '@ionic-native/app-version/ngx';
@Component({
selector: 'app-a-propos',
templateUrl: './a-propos.page.html',
styleUrls: ['./a-propos.page.scss'],
})
export class AProposPage implements OnInit {
public appVersionNumber: any = '1';
public appVersionCode: any = '1';
public appPackageName: any = 'com.allo_testeurs.app';
public appAppName: any = 'Allo Testeurs';
constructor(
private platform: Platform,
private appVersion: AppVersion
) {
this.platform.ready().then(() => {
if (this.platform.is('cordova')) {
this.appVersion.getAppName().then((appName) => {
this.appAppName = appName;
});
this.appVersion.getPackageName().then((packageName) => {
this.appPackageName = packageName;
});
this.appVersion.getVersionCode().then((versionCode) => {
this.appVersionCode = versionCode;
});
this.appVersion.getVersionNumber().then((versionNumber) => {
this.appVersionNumber = versionNumber;
});
}
});
}
ngOnInit() {
}
}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { ContactPage } from './contact.page';
const routes: Routes = [
{
path: '',
component: ContactPage
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
],
declarations: [ContactPage]
})
export class ContactPageModule {}
<ion-header>
<ion-toolbar color="primary">
<ion-buttons slot="start">
<ion-menu-button>
<ion-icon name="menu" size="large"></ion-icon>
</ion-menu-button>
</ion-buttons>
<ion-title>Nous contacter</ion-title>
</ion-toolbar>
</ion-header>
<ion-content padding>
<p class="text-dark">Vous pouvez nous contacter via les réseaux sociaux, ou bien notre site web sur ces liens :</p>
<ion-card no-margin>
<ion-card-content no-padding>
<ion-list>
<ion-item href="https://www.facebook.com/AlloTesteurs">
<ion-icon name="logo-facebook" slot="start" color="secondary"></ion-icon>
<ion-label>/AlloTesteurs</ion-label>
</ion-item>
<ion-item href="https://www.instagram.com/allotesteurs">
<ion-icon name="logo-instagram" slot="start" color="secondary"></ion-icon>
<ion-label>@allotesteurs</ion-label>
</ion-item>
<ion-item href="http://www.allo-testeurs.com">
<ion-icon name="home" slot="start" color="secondary"></ion-icon>
<ion-label>www.allo-testeurs.com</ion-label>
</ion-item>
<ion-item href="mailto:contact@allo-testeurs.com" lines="none">
<ion-icon name="mail" slot="start" color="secondary"></ion-icon>
<ion-label>contact@allo-testeurs.com</ion-label>
</ion-item>
</ion-list>
</ion-card-content>
</ion-card>
<p class="text-dark">Mais aussi, par téléphone/WhatsApp sur ces numéro :</p>
<ion-card no-margin>
<ion-card-content no-padding>
<ion-list>
<ion-item href="tel://0661934878">
<ion-icon name="logo-whatsapp" slot="start" color="secondary"></ion-icon><ion-icon name="phone-portrait" slot="start" color="secondary"></ion-icon>
<ion-label>(+212) 06 61 93 48 78</ion-label>
</ion-item>
<ion-item href="tel://0661934328" lines="none">
<ion-icon name="logo-whatsapp" slot="start" color="secondary"></ion-icon><ion-icon name="phone-portrait" slot="start" color="secondary"></ion-icon>
<ion-label>(+212) 06 61 93 43 28</ion-label>
</ion-item>
</ion-list>
</ion-card-content>
</ion-card>
</ion-content>
\ No newline at end of file
// page-contact {
// ion-content {
// p,
// ul,
// li,
// a {
// color: color($colors, dark);
// }
// ion-icon {
// color: color($colors, primary);
// }
// p {
// font-family: "Open Sans";
// margin-top: 20px;
// }
// }
// }
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ContactPage } from './contact.page';
describe('ContactPage', () => {
let component: ContactPage;
let fixture: ComponentFixture<ContactPage>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ContactPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ContactPage);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-contact',
templateUrl: './contact.page.html',
styleUrls: ['./contact.page.scss'],
})
export class ContactPage implements OnInit {
constructor() { }
ngOnInit() {
}
}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { SearchPipe } from '../../pipes/search/search.pipe';
import { DashboardPage } from './dashboard.page';
const routes: Routes = [
{
path: '',
component: DashboardPage
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
],
declarations: [DashboardPage, SearchPipe]
})
export class DashboardPageModule {}
<ion-header *ngIf="_ALLO.showPage">
<ion-toolbar color="primary">
<ion-buttons slot="start">
<!-- <ion-button menuToggle>
<ion-icon name="menu" size="large"></ion-icon>
</ion-button> -->
<ion-menu-button>
<!-- <ion-icon name="menu" size="large" color="light"></ion-icon> -->
</ion-menu-button>
</ion-buttons>
<ion-card class="top-card" no-margin>
<ion-card-content no-padding>
<ion-item lines="none">
<ion-label class="text-1x bold text-primary">Catégories</ion-label>
<ion-select cancelText="Fermer" class="text-primary" [(ngModel)]="terms"
(ionChange)="onContextChange($event.id)">
<ion-select-option value="all">- Tout -</ion-select-option>
<ion-select-option *ngFor="let category of _TRIP.cats" [value]="category.id">{{ category.label }}
</ion-select-option>
</ion-select>
</ion-item>
</ion-card-content>
</ion-card>
<ion-buttons slot="end">
<!-- <ion-button (click)="showHideMoreFilters()"> -->
<ion-button>
<!-- <ion-icon name="options"></ion-icon> -->
</ion-button>
</ion-buttons>
<!--<ion-title>-->
<!--<span ion-text>Super promos!</span>-->
<!--<ion-searchbar hidden [(ngModel)]="terms" placeholder="Rechercher"></ion-searchbar>-->
<!--</ion-title>-->
</ion-toolbar>
<ion-grid color="primary" *ngIf="show_more_filters" no-padding>
<!-- <ion-row>
<ion-col col-12>
<ion-card class="top-card" no-margin>
<ion-card-content no-padding>
<ion-item>
<ion-label class="text-1x bold text-primary">Etablissement</ion-label>
<ion-select cancelText="Fermer" class="text-primary" [(ngModel)]="terms" (ionChange)="onContextChange($event.id)">
<ion-option *ngFor="let brand of select_brands" [value]="brand.id">{{ brand.label }}</ion-option>
</ion-select>
</ion-item>
</ion-card-content>
</ion-card>
</ion-col>
</ion-row>-->
<ion-row no-padding>
<ion-col col-12 no-padding>
<ion-item color="primary">
<ion-label color="light" class="text-1x">Offres Carte Testeur seulement</ion-label>
<ion-toggle checked color="secondary" [(ngModel)]="prm_ctonly" [ngModelOptions]="{standalone: true}"
(ionChange)="_ALLO.setParam('ctonly', 'h')"></ion-toggle>
</ion-item>
</ion-col>
</ion-row>
<ion-row no-padding>
<ion-col col-12 no-padding>
<ion-item color="primary" lines="none">
<ion-label color="light" class="text-1x">Offres populaires</ion-label>
<ion-toggle checked color="secondary" [(ngModel)]="prm_hotdeals" [ngModelOptions]="{standalone: true}"
(ionChange)="_ALLO.setParam('hotdeals', 'j')"></ion-toggle>
</ion-item>
</ion-col>
</ion-row>
</ion-grid>
</ion-header>
<ion-content padding class="dashboard">
<ion-refresher (ionRefresh)="doRefresh($event)">
<ion-refresher-content></ion-refresher-content>
</ion-refresher>
<!--list of trips-->
<ion-card *ngFor="let trip of _TRIP.products | search : terms" (click)="viewDetail(trip.id)" tappable no-margin
margin-bottom>
<div class="img-spinner-wrap ion-text-center">
<ion-spinner name="dots" *ngIf="trip.hidden"></ion-spinner>
</div>
<ion-img [src]="trip.thumb" [class.no-visibility]="trip.hidden" (ionImgDidLoad)="setImgVisible(trip)"></ion-img>
<ion-card-header>
<ion-card-subtitle color="primary">
<ion-icon name="pin"></ion-icon>
<ion-label>{{ trip.location }}</ion-label>
<ion-badge fill="outline" *ngIf="trip.price_adult" color="warning">
-{{ ((trip.price_adult_before - trip.price_adult) * 100) / trip.price_adult_before | number:'1.0-0' }}%
</ion-badge>
</ion-card-subtitle>
<ion-card-title>
{{ trip.name | slice:0:100 }}
</ion-card-title>
</ion-card-header>
<!-- <ion-item>
<ion-icon name="pin" slot="start"></ion-icon>
<ion-label>{{ trip.location }}</ion-label>
<ion-button fill="outline" slot="end">View</ion-button>
</ion-item> -->
<ion-card-content no-padding padding-horizontal padding-bottom>
{{ trip.description | slice:0:130 }}...
</ion-card-content>
<ion-item *ngIf="trip.price_adult" color="primary" lines="none">
<ion-icon name="cash" slot="start"></ion-icon>
<ion-button slot="end" class="before">
<ion-text color="light">
({{ trip.price_adult_before }} Dh)
</ion-text>
</ion-button>
<ion-button slot="end" color="light">
<ion-text color="primary">
{{ trip.price_adult }} Dh
</ion-text>
</ion-button>
</ion-item>
</ion-card>
</ion-content>
\ No newline at end of file
ion-header {
ion-card {
margin-top: 4px;
}
}
.dashboard {
ion-card {
ion-badge {
float: right;
margin-top: -36px;
width: 18vw;
height: 8vw;
font-size: large;
}
ion-img {
min-height: 10rem;
background: var(--ion-color-tertiary, #989aa2);
}
ion-item {
ion-button {
font-size: large;
height: 10vw;
}
ion-button.before {
text-decoration: line-through;
font-size: initial;
height: auto;
}
}
}
}
.no-visibility {
visibility: hidden;
}
.img-spinner-wrap {
position: absolute;
width: 100%;
min-height: 10rem;
padding-top: 4.5rem;
}
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { DashboardPage } from './dashboard.page';
describe('DashboardPage', () => {
let component: DashboardPage;
let fixture: ComponentFixture<DashboardPage>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ DashboardPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(DashboardPage);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
import { NavController, ToastController } from "@ionic/angular";
import { AlloService } from '../../services/allo-service';
import { TripService } from '../../services/trip-service';
// import { TripDetailPage } from "../trip-detail/trip-detail";
import { HTTP } from '@ionic-native/http/ngx';
import { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';
import { Storage } from '@ionic/storage';
@Component({
selector: 'app-dashboard',
templateUrl: './dashboard.page.html',
styleUrls: ['./dashboard.page.scss'],
})
export class DashboardPage implements OnInit {
// list of products
public products: any;
public toast: any;
public terms: any;
public show_more_filters = false;
constructor(
public nav: NavController,
public _ALLO: AlloService,
public _TRIP: TripService,
public http: HttpClient,
public toastCtrl: ToastController,
private storage: Storage
) {
}
ngOnInit() {
console.log('ngOnInit Dashboard');
this._ALLO.presentLoading();
}
setImgVisible(trip) {
trip.hidden = false;
}
showHideMoreFilters() {
if (this.show_more_filters === false) {
this.show_more_filters = true;
} else {
this.show_more_filters = false;
}
}
async presentToast() {
const toast = await this.toastCtrl.create({
message: 'Liste mise à jour',
showCloseButton: true,
position: 'bottom',
closeButtonText: 'OK',
duration: 2000
});
toast.present();
}
async doRefresh(refresher) {
try {
this.toast.dismiss();
} catch (e) { }
console.log('refreshing');
this._TRIP.fetchData(true);
refresher.target.complete();
this.presentToast();
// this._TRIP.getRequest().subscribe((data) => {
// this.setData(data);
// refresher.target.complete();
// this.presentToast();
// },
// err => {
// if (typeof refresher !== 'undefined' && refresher !== null) {
// refresher.target.complete();
// }
// });
}
ionViewWillEnter() {
console.log('ionViewWillEnter Dashboard');
// this._ALLO.presentLoading();
}
ionViewDidEnter() {
console.log('ionViewDidEnter Dashboard');
// this._ALLO.presentLoading();
}
ionViewDidLoad() {
console.log('ionViewDidLoad Dashboard');
// this._ALLO.dismissLoading();
}
onContextChange(ctxt: any): void {
// if ('all' === ctxt){
// return true;
// }
// this.products = this.products.filter(item => {
// console.log(item);
//// if (item.description.indexOf(ctxt.id) >= 0 ||
//// item.name.indexOf(ctxt.id) >= 0) {
//// return true;
//// }
// return false;
// });
}
// view trip detail
viewDetail(id) {
console.log(id);
// this.nav.push(TripDetailPage, { id: id });
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment