From e93264c17b39403d7e8a9af5133bd0a7fd6786b9 Mon Sep 17 00:00:00 2001 From: Amitosh Swain Mahapatra Date: May 17 2018 16:01:07 +0000 Subject: Add config based on environment vars --- diff --git a/.gitignore b/.gitignore index faf0575..982495e 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,6 @@ $RECYCLE.BIN/ .DS_Store Thumbs.db UserInterfaceState.xcuserstate + +# Config +src/app/config.*.ts diff --git a/README.md b/README.md index 0a1db31..44d4cf2 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# ![Fedora-Logo](https://pagure.io/fork/thelittlewonder/Fedora-app/raw/master/f/Screenshots/FedoraLogo.png) Fedora App +# ![Fedora-Logo](https://pagure.io/Fedora-app/raw/master/f/Screenshots/FedoraLogo.png) Fedora App -![Screenshot](https://pagure.io/fork/thelittlewonder/Fedora-app/raw/master/f/Screenshots/HomeScreen.png) +![Screenshot](https://pagure.io/Fedora-app/raw/master/f/Screenshots/HomeScreen.png) -[![Get it on Google Play](https://pagure.io/fork/thelittlewonder/Fedora-app/raw/master/f/Screenshots/GetItOnGooglePlay.png)](https://play.google.com/store/apps/details?id=com.fedoraqa.fedora) +[![Get it on Google Play](https://pagure.io/Fedora-app/raw/master/f/Screenshots/GetItOnGooglePlay.png)](https://play.google.com/store/apps/details?id=com.fedoraqa.fedora) The Fedora Project is a global partnership of free software community members. The Fedora Project is sponsored by Red Hat, which invests in our infrastructure and resources to encourage collaboration and incubate innovative new technologies. Some of these technologies may later be integrated into Red Hat products. They are developed in Fedora and produced under a free and open source license from inception, so other free software communities and projects are free to study, adopt, and modify them. @@ -13,6 +13,7 @@ This is the source for the Fedora App. [Fedora App on Google Play Store](https://play.google.com/store/apps/details?id=com.fedoraqa.fedora) ## Technologies Used + Angular, Ionic 3, TypeScript, SCSS ## Current features @@ -62,6 +63,7 @@ _Note: You may need to add “sudo” in front of any global commands to install * Clone this repository: `git clone https://pagure.io/Fedora-app.git`. * Run `npm install` from the project root. +* Copy `src/app/config.env.ts.example` to `src/app/config.dev.ts` and `src/app/config.prod.ts`. Replace the example API keys inside them with real API keys. * Run `ionic serve` in a terminal from the project root. * Open http://localhost:8100 to preview your app. * Profit. :tada: diff --git a/package-lock.json b/package-lock.json index 3ec7c5b..719245a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -188,6 +188,21 @@ "resolved": "https://registry.npmjs.org/@types/localforage/-/localforage-0.0.30.tgz", "integrity": "sha1-PWCmv23aOOP4pGlhFZg3nx9klQk=" }, + "@types/lodash": { + "version": "4.14.108", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.108.tgz", + "integrity": "sha512-WD2vUOKfBBVHxWUV9iMR9RMfpuf8HquxWeAq2yqGVL7Nc4JW2+sQama0pREMqzNI3Tutj0PyxYUJwuoxxvX+xA==", + "dev": true + }, + "@types/lodash-es": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.0.tgz", + "integrity": "sha512-h8lkWQSgT4qjs9PcIhcL2nWubZeXRVzjZxYlRFmcX9BW1PIk5qRc0djtRWZqtM+GDDFhwBt0ztRu72D/YxIcEw==", + "dev": true, + "requires": { + "@types/lodash": "4.14.108" + } + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -3074,7 +3089,6 @@ "os-tmpdir": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "osenv": { diff --git a/package.json b/package.json index fff71cb..c529928 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,9 @@ "description": "Fedora mobile app", "main": "index.js", "private": true, + "config": { + "ionic_webpack": "./webpack.config.js" + }, "scripts": { "clean": "ionic-app-scripts clean", "build": "ionic-app-scripts build", @@ -66,6 +69,7 @@ }, "devDependencies": { "@ionic/app-scripts": "3.1.8", + "@types/lodash-es": "^4.17.0", "typescript": "2.4.2" }, "cordova": { @@ -88,4 +92,4 @@ "android" ] } -} \ No newline at end of file +} diff --git a/src/app/config.env.ts.example b/src/app/config.env.ts.example new file mode 100644 index 0000000..9ed087a --- /dev/null +++ b/src/app/config.env.ts.example @@ -0,0 +1,21 @@ +// Copy this file into config.dev.ts and config.prod.ts +// for dev settings and prod settings respectively + +const FB_CONFIG = { + accessToken: '123456789012345|8exAMp1e3iDWxl92d6pgj0xC3a8', + xfbml: true, + version: 'v2.6' +}; + +const TWITTER_CONFIG = { + BEARER_TOKEN: 'AAAAAEXAMPLEAAAAAAAAMmWwEXAMPLE9tGRvIFnIR8XYXmIFTFaEGagjX0%3Dup2JDIi9hjbCJKGaEGDqkLMtYSGumkyMa6SbwXx0FMB1vOlvN0'; +}; + +const ENV = { + // change this to true, in config.prod.ts + PROD: false, + FB_CONFIG, + TWITTER_CONFIG +}; + +export default ENV; diff --git a/src/app/main.ts b/src/app/main.ts index 6af7a5b..060f649 100644 --- a/src/app/main.ts +++ b/src/app/main.ts @@ -1,5 +1,10 @@ import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; - +import ENV from '@environment'; import { AppModule } from './app.module'; +import { enableProdMode } from '@angular/core'; + +if (ENV.PROD) { + enableProdMode(); +} platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/src/pages/social/social.ts b/src/pages/social/social.ts index 4af236f..7219971 100644 --- a/src/pages/social/social.ts +++ b/src/pages/social/social.ts @@ -46,14 +46,14 @@ export class SocialPage { .then((posts:Array) => { this.posts = posts; this.mergeUpdates(); - }).catch((err) => console.log(err + "kanika")); + }); this.tw .getTimelineTweets(this.USER.TW) .then((tweets:Array) => { this.tweets = tweets; this.mergeUpdates(); - }).catch((err) => console.log(err)); + }); } mergeUpdates() { diff --git a/src/providers/fb/fb.ts b/src/providers/fb/fb.ts index a593233..4a12aa8 100644 --- a/src/providers/fb/fb.ts +++ b/src/providers/fb/fb.ts @@ -1,14 +1,10 @@ import { Injectable } from '@angular/core'; import 'rxjs/add/operator/map'; +import ENV from '@environment'; import { Facebook } from 'fb'; import * as _ from 'lodash'; -const FB_CONFIG = { - accessToken: '1242536905766029|8btZ0cyO3iDWxl92d6pgj0xC3a8', - xfbml: true, - version: 'v2.6' -}; /* Generated class for the Fb provider. @@ -20,7 +16,7 @@ const FB_CONFIG = { export class FB { private fb:Facebook; constructor() { - this.fb = new Facebook(FB_CONFIG); + this.fb = new Facebook(ENV.FB_CONFIG); } api(urlParts) { diff --git a/src/providers/request/request.ts b/src/providers/request/request.ts index 0937441..3a41e5f 100644 --- a/src/providers/request/request.ts +++ b/src/providers/request/request.ts @@ -29,12 +29,12 @@ export class Request { this.isCordova = window.hasOwnProperty('cordova'); this.isLiveReload = false; - this.http - .get('http://localhost:8100') - .subscribe( - res => this.isLiveReload = !_.isEmpty(res), - err => console.log(this.useProxy()) - ); + // this.http + // .get('http://localhost:8100') + // .subscribe( + // res => this.isLiveReload = !_.isEmpty(res), + // err => console.log(this.useProxy()) + // ); } private startHandler = () => { @@ -42,7 +42,6 @@ export class Request { } private stopHandler = () => { - console.log(this); this.spinnerDialog.hide(); } diff --git a/src/providers/tw/tw.ts b/src/providers/tw/tw.ts index a99d7ab..5cbb6b2 100644 --- a/src/providers/tw/tw.ts +++ b/src/providers/tw/tw.ts @@ -1,8 +1,8 @@ import { Injectable } from '@angular/core'; import 'rxjs/add/operator/map'; +import ENV from '@environment'; import * as _ from 'lodash'; - import { Request } from '../request/request'; @@ -14,8 +14,6 @@ const API:any = { } API.timeline = API.statuses.concat(['user_timeline.json']); -const BEARER_TOKEN = 'AAAAAAAAAAAAAAAAAAAAAMmWwAAAAAAA9tGRvIFnIR8XYXmIFTFaEGagjX0%3Dup2JDIi9hjbCJKGaEGDqkLMtYSGumkyMa6SbwXx0FMB1vOlvN0'; - /* Generated class for the Tw provider. @@ -31,7 +29,7 @@ export class Tw { return new Promise((resolve, reject) => { this.request.get( API.timeline, { screen_name: user }, - { 'Authorization': 'Bearer ' + BEARER_TOKEN } + { 'Authorization': 'Bearer ' + ENV.TWITTER_CONFIG.BEARER_TOKEN } ).then(data => { var tweets = _.map(data, t => { return { diff --git a/tsconfig.json b/tsconfig.json index 5d53142..2d46d72 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,10 @@ { "compilerOptions": { + //... + "baseUrl": "./src", + "paths": { + "@environment": ["app/config.prod"] + }, "allowSyntheticDefaultImports": true, "declaration": false, "emitDecoratorMetadata": true, diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..512bfc3 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,9 @@ +const path = require('path'); +const useDefaultConfig = require('@ionic/app-scripts/config/webpack.config.js'); + +module.exports = function () { + useDefaultConfig[process.env.IONIC_ENV].resolve.alias = { + "@environment": path.resolve(__dirname + '/src/app/config.' + process.env.IONIC_ENV + '.ts'), + }; + return useDefaultConfig; +};