From 87160f5387cd2ae42c3c47820cdc58f5aab9a717 Mon Sep 17 00:00:00 2001 From: Thomas Bloor Date: Mon, 9 Sep 2019 20:45:24 +0100 Subject: [PATCH 1/6] remove uneccessary stuff and work on CI --- bin/build-releases | 4 +- package.json | 4 +- .../more-graphs-and-tables.component.ts | 6 +- src/app/panels/candlestick.component.html | 19 ----- src/app/panels/candlestick.component.ts | 84 ------------------- src/app/panels/polar-panel.component.html | 19 ----- src/app/panels/polar-panel.component.ts | 72 ---------------- .../panels/stacked-bar.component.html.broken | 19 ----- .../panels/stacked-bar.component.ts.broken | 68 --------------- 9 files changed, 8 insertions(+), 287 deletions(-) delete mode 100644 src/app/panels/candlestick.component.html delete mode 100644 src/app/panels/candlestick.component.ts delete mode 100644 src/app/panels/polar-panel.component.html delete mode 100644 src/app/panels/polar-panel.component.ts delete mode 100644 src/app/panels/stacked-bar.component.html.broken delete mode 100644 src/app/panels/stacked-bar.component.ts.broken diff --git a/bin/build-releases b/bin/build-releases index f7f5334..bb16744 100755 --- a/bin/build-releases +++ b/bin/build-releases @@ -12,13 +12,13 @@ echo "Building releases for $VERSION" echo "Building Prod Release..." -ng build --prod +ng build --configuration=prod tar -czf ../WebApp-Releases/LocalLoop-Web-prod-$VERSION.tar.gz dist echo "Building Dev Release..." -ng build --dev +ng build --configuration=dev tar -czf ../WebApp-Releases/LocalLoop-Web-dev-$VERSION.tar.gz dist diff --git a/package.json b/package.json index d5348ee..b4b0703 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,10 @@ "ng": "ng", "start": "ng serve", "start:dev": "ng serve --optimization=false --configuration=dev", + "start:prod": "ng serve --optimization=false --configuration=prod", "start:local": "ng serve --optimization=false --configuration=local", - "build": "ng build", + "build:dev": "ng build --configuration=dev", + "build:prod": "ng build --configuration=prod", "test": "ng test", "test:ci": "ng test --watch=false", "lint": "ng lint", diff --git a/src/app/dashboard/more-graphs-and-tables.component.ts b/src/app/dashboard/more-graphs-and-tables.component.ts index 1e41ad8..2de09b7 100644 --- a/src/app/dashboard/more-graphs-and-tables.component.ts +++ b/src/app/dashboard/more-graphs-and-tables.component.ts @@ -38,7 +38,7 @@ export class MoreStuffComponent implements OnInit { this.loadData(); } - private loadData() { + public loadData() { this.tableSummary(); this.loadYearSpend(); this.loadSupplierBubble(); @@ -284,8 +284,8 @@ export class MoreStuffComponent implements OnInit { private _supplierHistoryData: any[]; private _supplierHistoryPerPage: number = 15; - private _supplierHistoryPage: number = 1; - private _supplierHistoryPages: number = 1; + public _supplierHistoryPage: number = 1; + public _supplierHistoryPages: number = 1; public supplierMonthChartData: any[] = [ { data: [], diff --git a/src/app/panels/candlestick.component.html b/src/app/panels/candlestick.component.html deleted file mode 100644 index 9aa9cb5..0000000 --- a/src/app/panels/candlestick.component.html +++ /dev/null @@ -1,19 +0,0 @@ -
-
-
-
-

All Purchases

-
-
-
- -
-
-
- \ No newline at end of file diff --git a/src/app/panels/candlestick.component.ts b/src/app/panels/candlestick.component.ts deleted file mode 100644 index 4f8d3c0..0000000 --- a/src/app/panels/candlestick.component.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; -import 'dist/chartjs-chart-financial/chartjs-chart-financial'; -import * as luxon from 'luxon'; -import 'chartjs-adapter-luxon'; -import { ChartOptions } from 'chart.js'; -import { Color, BaseChartDirective } from 'ng2-charts'; - -@Component({ - selector: 'app-financial-chart', - templateUrl: './financial-chart.component.html', - styleUrls: ['./financial-chart.component.css'] -}) -export class FinancialChartComponent implements OnInit { - barCount = 60; - initialDateStr = '01 Apr 2017 00:00 Z'; - - public financialChartData = [ - { - label: 'CHRT - Chart.js Corporation', - data: this.getRandomData(this.initialDateStr, this.barCount) - }, - ]; - public financialChartOptions: ChartOptions = { - responsive: true, - maintainAspectRatio: false, - }; - public financialChartColors: Color[] = [ - { - borderColor: 'black', - backgroundColor: 'rgba(255,0,0,0.3)', - }, - ]; - public financialChartLegend : Boolean; - public chartLegend : Boolean; - public financialChartType = 'candlestick'; - public chartType : string; - public financialChartPlugins = []; - - @ViewChild(BaseChartDirective, { static: true }) chart: BaseChartDirective; - - constructor() { } - - ngOnInit() { - this.financialChartType = 'candlestick'; - this.chartType=this.financialChartType; - - this.financialChartLegend = this.chartLegend; - } - - randomNumber(min: number, max: number) { - return Math.random() * (max - min) + min; - } - - randomBar(date: luxon.DateTime, lastClose: number) { - const open = this.randomNumber(lastClose * 0.95, lastClose * 1.05); - const close = this.randomNumber(open * 0.95, open * 1.05); - const high = this.randomNumber(Math.max(open, close), Math.max(open, close) * 1.1); - const low = this.randomNumber(Math.min(open, close) * 0.9, Math.min(open, close)); - return { - t: date.valueOf(), - o: open, - h: high, - l: low, - c: close - }; - } - - getRandomData(dateStr: string, count: number) { - let date = luxon.DateTime.fromRFC2822(dateStr); - const data = [this.randomBar(date, 30)]; - while (data.length < count) { - date = date.plus({ days: 1 }); - if (date.weekday <= 5) { - data.push(this.randomBar(date, data[data.length - 1].c)); - } - } - return data; - } - - update() { - // candlestick vs ohlc - this.financialChartType = this.financialChartType === 'candlestick' ? 'ohlc' : 'candlestick'; - } -} \ No newline at end of file diff --git a/src/app/panels/polar-panel.component.html b/src/app/panels/polar-panel.component.html deleted file mode 100644 index 9aa9cb5..0000000 --- a/src/app/panels/polar-panel.component.html +++ /dev/null @@ -1,19 +0,0 @@ -
-
-
-
-

All Purchases

-
-
-
- -
-
-
- \ No newline at end of file diff --git a/src/app/panels/polar-panel.component.ts b/src/app/panels/polar-panel.component.ts deleted file mode 100644 index e698fb4..0000000 --- a/src/app/panels/polar-panel.component.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; -import { SingleDataSet, Label } from 'ng2-charts'; -import { ChartType } from 'chart.js'; -import { ApiService } from '../providers/api-service'; -import { CustPiesService } from '../providers/cust-pies.service'; -import { DataType } from '../shared/data-types.enum'; -import { ChartData } from '../_interfaces/chart-data'; - -@Component({ - selector: 'polar-area', - templateUrl: 'polar-panel.component.html', -}) - -export class PolarAreaChartComponent implements OnInit { - // PolarArea - - public chartType : 'polar-area'; - public polarAreaChartLabels: Label[]; - public polarAreaChartData: SingleDataSet; - public chartLegend : Boolean; - public polarAreaLegend : Boolean; - - public polarChartLabelsLocal: string[] = []; - public polarChartDataLocal: number[] = []; - - public polarAreaChartType: ChartType = 'polarArea'; - - constructor( - private api: ApiService, - private pieService: CustPiesService, - ) { - this.pieService.getPie().subscribe( - result => { - this.setChartData(result.local_all); - }, - error => { - console.log('Retrieval Error'); - console.log( error._body ); - } - ); - } - - ngOnInit() { - this.polarAreaLegend = this.chartLegend; - this.polarAreaLegend = true; - } - - private setChartData(dataLocal: any) { - this.polarChartDataLocal = Object.keys(dataLocal).map(key => dataLocal[key]); - // setTimeout is currently a workaround for ng2-charts labels - setTimeout(() => this.polarChartLabelsLocal = Object.keys(dataLocal), 0); - } - - public convertHex(hex: string, opacity: number) { - hex = hex.replace('#', ''); - const r = parseInt(hex.substring(0, 2), 16); - const g = parseInt(hex.substring(2, 4), 16); - const b = parseInt(hex.substring(4, 6), 16); - - const rgba = 'rgba(' + r + ', ' + g + ', ' + b + ', ' + opacity / 100 + ')'; - return rgba; - } - - // events - public chartClicked({ event, active }: { event: MouseEvent, active: {}[] }): void { - console.log(event, active); - } - - public chartHovered({ event, active }: { event: MouseEvent, active: {}[] }): void { - console.log(event, active); - } -} \ No newline at end of file diff --git a/src/app/panels/stacked-bar.component.html.broken b/src/app/panels/stacked-bar.component.html.broken deleted file mode 100644 index 8a95a2e..0000000 --- a/src/app/panels/stacked-bar.component.html.broken +++ /dev/null @@ -1,19 +0,0 @@ -
-
-
-
-

All Purchases

-
-
-
- -
-
-
- \ No newline at end of file diff --git a/src/app/panels/stacked-bar.component.ts.broken b/src/app/panels/stacked-bar.component.ts.broken deleted file mode 100644 index 3987dc5..0000000 --- a/src/app/panels/stacked-bar.component.ts.broken +++ /dev/null @@ -1,68 +0,0 @@ -import { NgModule, enableProdMode } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; -import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; -import { ApiService } from '../providers/api-service'; -import { CustPiesService } from '../providers/cust-pies.service'; -import { DataType } from '../shared/data-types.enum'; -import { ChartData } from '../_interfaces/chart-data'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; - -import { DxChartModule } from 'devextreme-angular'; - -if(!/localhost/.test(document.location.host)) { - enableProdMode(); -} - -@Component({ - selector: 'stacked-bar', - templateUrl: 'stacked-bar.component.html', -}) -@NgModule({ - imports: [ - BrowserModule, - DxChartModule - ], - declarations: [StackedBarChartComponent], - bootstrap: [StackedBarChartComponent] -}) -export class StackedBarChartComponent { - - public chartType: 'stacked-bar'; - public chartLegend = true; - public stackedBarChartDataLocal : number[] = []; - public stackedBarChartLabelsLocal : string[] = []; - - constructor( - private api: ApiService, - private pieService: CustPiesService, - ) { - this.pieService.getPie().subscribe( - result => { - this.setChartData(result.local_all); - }, - error => { - console.log('Retrieval Error'); - console.log( error._body ); - } - ); - } - - public ngOnInit(): void { - console.log("stacked bar graph tried to initialise"); - } - - private setChartData(dataLocal: any) { - this.stackedBarChartDataLocal = Object.keys(dataLocal).map(key => dataLocal[key]); - // setTimeout is currently a workaround for ng2-charts labels - setTimeout(() => this.stackedBarChartLabelsLocal = Object.keys(dataLocal), 0); - } - - customizeTooltip(arg: any) { - return { - text: arg.percentText + ' - ' + arg.valueText - }; - } -} - - -platformBrowserDynamic().bootstrapModule(StackedBarChartComponent); \ No newline at end of file From bad4f7f83c5be3921edd411ce1992a0052530959 Mon Sep 17 00:00:00 2001 From: Thomas Bloor Date: Mon, 9 Sep 2019 20:55:21 +0100 Subject: [PATCH 2/6] fix CI config --- .travis.yml | 4 ---- package.json | 2 +- protractor.conf.js | 5 ++++- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 428a222..cced2fd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,3 @@ -# Force sudo due to issue in travis -sudo: required addons: chrome: stable language: node_js @@ -9,8 +7,6 @@ before_install: - openssl aes-256-cbc -K $encrypted_9d2af3734b6c_key -iv $encrypted_9d2af3734b6c_iv -in src/environments/environments.tar.enc -out src/environments/environments.tar -d - tar xf src/environments/environments.tar -C src/environments before_script: - - export DISPLAY=:99.0 - - sh -e /etc/init.d/xvfb start - npm config set spin false install: - npm install diff --git a/package.json b/package.json index b4b0703..db30269 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "build:dev": "ng build --configuration=dev", "build:prod": "ng build --configuration=prod", "test": "ng test", - "test:ci": "ng test --watch=false", + "test:ci": "ng test --watch=false --browsers=ChromeHeadless --configuration=ci", "lint": "ng lint", "e2e": "ng e2e", "e2e:ci": "ng e2e --configuration=ci", diff --git a/protractor.conf.js b/protractor.conf.js index 1c5e1e5..7775398 100644 --- a/protractor.conf.js +++ b/protractor.conf.js @@ -9,7 +9,10 @@ exports.config = { './e2e/**/*.e2e-spec.ts' ], capabilities: { - 'browserName': 'chrome' + 'browserName': 'chrome', + chromeOptions: { + args: [ "--headless" ] + } }, directConnect: true, baseUrl: 'http://localhost:4200/', From abdbfda56c88b62d9abfa284e0bb31a72f9e15cf Mon Sep 17 00:00:00 2001 From: Thomas Bloor Date: Mon, 9 Sep 2019 21:00:30 +0100 Subject: [PATCH 3/6] change to use latest node for compilation --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index cced2fd..cbd8de5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,7 @@ addons: chrome: stable language: node_js node_js: - - 8 + - node before_install: - openssl aes-256-cbc -K $encrypted_9d2af3734b6c_key -iv $encrypted_9d2af3734b6c_iv -in src/environments/environments.tar.enc -out src/environments/environments.tar -d - tar xf src/environments/environments.tar -C src/environments From f697b2243d1a53e39f48a49384503e15c67c2da4 Mon Sep 17 00:00:00 2001 From: Thomas Bloor Date: Mon, 9 Sep 2019 21:08:49 +0100 Subject: [PATCH 4/6] more CI fixes --- karma.conf.js | 2 +- package.json | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/karma.conf.js b/karma.conf.js index 02b3582..6591b35 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -7,7 +7,7 @@ module.exports = function (config) { frameworks: ['jasmine', '@angular-devkit/build-angular'], plugins: [ require('karma-jasmine'), - require("readable-stream"); + require("readable-stream"), require('karma-chrome-launcher'), require('karma-jasmine-html-reporter'), require('karma-coverage-istanbul-reporter'), diff --git a/package.json b/package.json index db30269..a37905e 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "build:dev": "ng build --configuration=dev", "build:prod": "ng build --configuration=prod", "test": "ng test", - "test:ci": "ng test --watch=false --browsers=ChromeHeadless --configuration=ci", + "test:ci": "ng test --watch=false --browsers=ChromeHeadless", "lint": "ng lint", "e2e": "ng e2e", "e2e:ci": "ng e2e --configuration=ci", @@ -77,6 +77,7 @@ "karma-cli": "2.0.0", "karma-coverage-istanbul-reporter": "^2.0.5", "karma-jasmine": "^2.0.1", + "readable-stream": "latest", "karma-jasmine-html-reporter": "^1.4.2", "protractor": "^5.4.2", "ts-node": "^8.3.0", From 66388593e69f9d6d290ea475f8fd7f13b3c27da3 Mon Sep 17 00:00:00 2001 From: Thomas Bloor Date: Mon, 9 Sep 2019 21:09:47 +0100 Subject: [PATCH 5/6] note even sure why that was there --- karma.conf.js | 1 - 1 file changed, 1 deletion(-) diff --git a/karma.conf.js b/karma.conf.js index 6591b35..3c0a8cb 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -7,7 +7,6 @@ module.exports = function (config) { frameworks: ['jasmine', '@angular-devkit/build-angular'], plugins: [ require('karma-jasmine'), - require("readable-stream"), require('karma-chrome-launcher'), require('karma-jasmine-html-reporter'), require('karma-coverage-istanbul-reporter'), From 75edb86abe8caeb9049da525150e793b2f9b84ba Mon Sep 17 00:00:00 2001 From: Thomas Bloor Date: Mon, 9 Sep 2019 21:19:51 +0100 Subject: [PATCH 6/6] update secret files --- .travis.yml | 2 +- src/environments/environments.tar.enc | Bin 10256 -> 10256 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index cbd8de5..3c1cbeb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,7 @@ language: node_js node_js: - node before_install: - - openssl aes-256-cbc -K $encrypted_9d2af3734b6c_key -iv $encrypted_9d2af3734b6c_iv -in src/environments/environments.tar.enc -out src/environments/environments.tar -d + - openssl aes-256-cbc -K $encrypted_17157b34afc7_key -iv $encrypted_17157b34afc7_iv -in src/environments/environments.tar.enc -out src/environments/environments.tar -d - tar xf src/environments/environments.tar -C src/environments before_script: - npm config set spin false diff --git a/src/environments/environments.tar.enc b/src/environments/environments.tar.enc index ebe8734359d26c80dd254092761190e9ca8695ee..166b4e838a0d3f4e2834c55bea5854a90f05b3ea 100644 GIT binary patch literal 10256 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 WG6bx#sal!FfsT2zFoc^xvEV%+%?5h_ literal 10256 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 W>c*d7lO>;*&N;5od$TUc>i)P(KpH^+