From 2f32bbae47b058ba637d45bcaf624c94c6242f1f Mon Sep 17 00:00:00 2001 From: Rene Vergara A Date: Tue, 12 Jul 2022 13:22:17 -0500 Subject: [PATCH] On branch zgo-test Changes to be committed: modified: CHANGELOG.md new file: src/app/configdata.ts modified: src/app/fullnode.service.ts modified: src/app/items/items.service.ts modified: src/app/listorders/listorders.component.css modified: src/app/listorders/listorders.component.html modified: src/app/listorders/listorders.component.ts modified: src/app/order/order.service.ts modified: src/app/receipt.service.ts modified: src/app/user.service.ts new file: src/assets/zec_rv.png --- CHANGELOG.md | 7 +++- src/app/configdata.ts | 4 +++ src/app/fullnode.service.ts | 6 ++-- src/app/items/items.service.ts | 11 ++++-- src/app/listorders/listorders.component.css | 19 ++++++----- src/app/listorders/listorders.component.html | 34 +++++++++---------- src/app/listorders/listorders.component.ts | 2 +- src/app/order/order.service.ts | 6 ++-- src/app/receipt.service.ts | 6 ++-- src/app/user.service.ts | 6 ++-- src/assets/zec_rv.png | Bin 0 -> 8263 bytes 11 files changed, 63 insertions(+), 38 deletions(-) create mode 100644 src/app/configdata.ts create mode 100644 src/assets/zec_rv.png diff --git a/CHANGELOG.md b/CHANGELOG.md index ae4c373..e394551 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] -- (20022-07-11) Order's list UI updated (Alpha version) +- (2022-07-12) Set configuration global parameters in one place + + Static class ConfigData created + - configdata.ts created inside "src/app/" folder + + Services modified to include config data + +- (2022-07-11) Order's list UI updated (Alpha version) + Paid status icons added to order's title + Order detail redesigned Components affected: diff --git a/src/app/configdata.ts b/src/app/configdata.ts new file mode 100644 index 0000000..d8246a0 --- /dev/null +++ b/src/app/configdata.ts @@ -0,0 +1,4 @@ +export class ConfigData { + public static Be_URL : string = 'https://test.zgo.cash/'; + public static UsrPwd : string = 'user:superSecret2'; +} \ No newline at end of file diff --git a/src/app/fullnode.service.ts b/src/app/fullnode.service.ts index ca57ecd..b911059 100644 --- a/src/app/fullnode.service.ts +++ b/src/app/fullnode.service.ts @@ -4,12 +4,14 @@ import {HttpClient, HttpParams, HttpHeaders} from '@angular/common/http'; import {UserService} from './user.service'; import { Owner } from './owner.model'; +import { ConfigData } from './configdata'; + var Buffer = require('buffer/').Buffer; //import {User} from './user.model'; @Injectable({providedIn: 'root'}) export class FullnodeService{ - beUrl = 'https://test.zgo.cash/'; + beUrl = ConfigData.Be_URL; private dataStore: { height: number, memoList: string[], addr: string, price: number } = { height: 0, memoList: [], addr: '', price:0 }; private _heightUpdated: BehaviorSubject = new BehaviorSubject(this.dataStore.height); private _memoUpdated: BehaviorSubject = new BehaviorSubject(this.dataStore.memoList); @@ -48,7 +50,7 @@ export class FullnodeService{ }; constructor(private http: HttpClient, public userService: UserService){ - var auth = 'Basic ' + Buffer.from('user:superSecret2').toString('base64'); + var auth = 'Basic ' + Buffer.from(ConfigData.UsrPwd).toString('base64'); this.reqHeaders = new HttpHeaders().set('Authorization', auth); this.ownerUpdate = userService.ownerUpdate; this.getAddr(); diff --git a/src/app/items/items.service.ts b/src/app/items/items.service.ts index a23ea37..96f45c6 100644 --- a/src/app/items/items.service.ts +++ b/src/app/items/items.service.ts @@ -3,12 +3,19 @@ import { Injectable } from '@angular/core'; import { Subject, BehaviorSubject, Observable } from 'rxjs'; import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http'; +import { ConfigData } from '../configdata'; + var Buffer = require('buffer/').Buffer; @Injectable({providedIn: 'root'}) export class ItemService{ - beUrl = 'https://test.zgo.cash/'; +// beUrl = 'https://test.zgo.cash/'; + + beUrl = ConfigData.Be_URL; + +// console.log(ConfigData.Be_URL); + private dataStore: { items: Item[] } = { items: [] } ; private _itemsUpdated: BehaviorSubject = new BehaviorSubject(this.dataStore.items); public readonly itemsUpdated: Observable = this._itemsUpdated.asObservable(); @@ -16,7 +23,7 @@ export class ItemService{ private reqHeaders: HttpHeaders; constructor(private http: HttpClient){ - var auth = 'Basic ' + Buffer.from('user:superSecret2').toString('base64'); + var auth = 'Basic ' + Buffer.from(ConfigData.UsrPwd).toString('base64'); this.reqHeaders = new HttpHeaders().set('Authorization', auth); } diff --git a/src/app/listorders/listorders.component.css b/src/app/listorders/listorders.component.css index 335fd28..6c87d46 100644 --- a/src/app/listorders/listorders.component.css +++ b/src/app/listorders/listorders.component.css @@ -3,9 +3,9 @@ } .text2 { - font-family: 'Noto sans'; - font-size: 15px; - color: #000080; + font-family: 'Roboto Mono'; + font-size: 14px; + color: #000000; text-align: left; margin-left: 5px; background: lightgray; @@ -16,12 +16,12 @@ } .orderdetail { - font-family: 'Noto sans'; - font-size: 15px; - color: #000080; + font-family: 'Roboto Mono'; + font-size: 12px; + color: #000000; text-align: left; margin-left: 5px; - background: lightyellow; + background: lightcyan; } @@ -50,12 +50,13 @@ img.icon{ } .total{ - font-size: large; + font-size: 15px; font-family: 'Roboto Mono', monospace; + margin: auto; } img.total{ - margin-bottom:-2px; + margin-bottom: -15px !important; } .central{ diff --git a/src/app/listorders/listorders.component.html b/src/app/listorders/listorders.component.html index 5119ca5..07e8e65 100644 --- a/src/app/listorders/listorders.component.html +++ b/src/app/listorders/listorders.component.html @@ -8,25 +8,25 @@
- +

Today's Total:

-

- +

+ {{todayTotal | number: '1.0-6'}} -

+

Overall Total:

-

- +

+ {{total | number: '1.0-6'}} -

+
@@ -40,20 +40,20 @@ -  {{order.totalZec | number: '1.0-6'}} -
diff --git a/src/app/listorders/listorders.component.ts b/src/app/listorders/listorders.component.ts index 2791e71..20bf397 100644 --- a/src/app/listorders/listorders.component.ts +++ b/src/app/listorders/listorders.component.ts @@ -76,7 +76,7 @@ export class ListOrdersComponent implements OnInit, OnDestroy{ getIconStyle(order : Order) { if( order.paid ) - return "font-size: 16px; color: #72cc50; margin: auto;"; + return "font-size: 14px; color: #72cc50; margin-bottom: -2px;"; return "color: #88293d; cursor: pointer;"; } diff --git a/src/app/order/order.service.ts b/src/app/order/order.service.ts index 4deb7bb..8338be3 100644 --- a/src/app/order/order.service.ts +++ b/src/app/order/order.service.ts @@ -8,12 +8,14 @@ import { User } from '../user.model'; import { Owner } from '../owner.model'; import { LineItem} from '../items/lineitem.model'; +import { ConfigData } from '../configdata'; + var Buffer = require('buffer/').Buffer; @Injectable({providedIn: 'root'}) export class OrderService { - beUrl = 'https://test.zgo.cash/'; + beUrl = ConfigData.Be_URL; private dataStore: {allOrders: Order[], user: User, order: Order, owner: Owner } = { allOrders: [], user:{ @@ -81,7 +83,7 @@ export class OrderService { public fullnodeService: FullnodeService, public userService: UserService ) { - var auth = 'Basic ' + Buffer.from('user:superSecret2').toString('base64'); + var auth = 'Basic ' + Buffer.from(ConfigData.UsrPwd).toString('base64'); this.reqHeaders = new HttpHeaders().set('Authorization', auth); this.userUpdate = userService.userUpdate; this.ownerUpdate = userService.ownerUpdate; diff --git a/src/app/receipt.service.ts b/src/app/receipt.service.ts index 096a150..d897ca1 100644 --- a/src/app/receipt.service.ts +++ b/src/app/receipt.service.ts @@ -5,13 +5,15 @@ import { Order } from './order/order.model'; import { Owner } from './owner.model'; import { UserService } from './user.service'; +import { ConfigData } from './configdata'; + var Buffer = require('buffer/').Buffer; @Injectable({ providedIn: 'root' }) export class ReceiptService { - beUrl = 'https://test.zgo.cash/'; + beUrl = ConfigData.Be_URL; private dataStore: {order: Order, owner: Owner } = { owner: { _id: '', @@ -67,7 +69,7 @@ export class ReceiptService { private http: HttpClient, public userService: UserService ) { - var auth = 'Basic ' + Buffer.from('user:superSecret2').toString('base64'); + var auth = 'Basic ' + Buffer.from(ConfigData.UsrPwd).toString('base64'); this.reqHeaders = new HttpHeaders().set('Authorization', auth); this.ownerUpdate = userService.ownerUpdate; } diff --git a/src/app/user.service.ts b/src/app/user.service.ts index 4e462a5..dc316ff 100644 --- a/src/app/user.service.ts +++ b/src/app/user.service.ts @@ -6,12 +6,14 @@ import {Owner} from './owner.model'; import { Country } from './country.model'; import {Tx} from './tx.model'; +import { ConfigData } from './configdata'; + var Buffer = require('buffer/').Buffer; @Injectable({providedIn: 'root'}) export class UserService{ - beUrl = 'https://test.zgo.cash/'; + beUrl = ConfigData.Be_URL; private dataStore: { user: User, owner: Owner, txs: Tx[], countries: Country[]} = { user: { address: '', @@ -66,7 +68,7 @@ export class UserService{ private reqHeaders: HttpHeaders; constructor(private http: HttpClient){ - var auth = 'Basic ' + Buffer.from('user:superSecret2').toString('base64'); + var auth = 'Basic ' + Buffer.from(ConfigData.UsrPwd).toString('base64'); this.reqHeaders = new HttpHeaders().set('Authorization', auth); //console.log('US:', this.reqHeaders); this.session = localStorage.getItem('s4z_token'); diff --git a/src/assets/zec_rv.png b/src/assets/zec_rv.png new file mode 100644 index 0000000000000000000000000000000000000000..8a08d646d9ad2ae745ba49339dbe6b917ecd4f4b GIT binary patch literal 8263 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