Merge pull request #2742 from mempool/simon/angular-15
Upgrade to Angular 14
This commit is contained in:
		
						commit
						3406758fd2
					
				| @ -268,57 +268,6 @@ | |||||||
|             } |             } | ||||||
|           } |           } | ||||||
|         }, |         }, | ||||||
|         "server": { |  | ||||||
|           "builder": "@angular-devkit/build-angular:server", |  | ||||||
|           "options": { |  | ||||||
|             "outputPath": "dist/mempool/server", |  | ||||||
|             "main": "server.ts", |  | ||||||
|             "tsConfig": "tsconfig.server.json", |  | ||||||
|             "sourceMap": true, |  | ||||||
|             "optimization": false |  | ||||||
|           }, |  | ||||||
|           "configurations": { |  | ||||||
|             "production": { |  | ||||||
|               "outputHashing": "media", |  | ||||||
|               "fileReplacements": [ |  | ||||||
|                 { |  | ||||||
|                   "replace": "src/environments/environment.ts", |  | ||||||
|                   "with": "src/environments/environment.prod.ts" |  | ||||||
|                 } |  | ||||||
|               ], |  | ||||||
|               "sourceMap": false, |  | ||||||
|               "localize": true, |  | ||||||
|               "optimization": true |  | ||||||
|             } |  | ||||||
|           }, |  | ||||||
|           "defaultConfiguration": "" |  | ||||||
|         }, |  | ||||||
|         "serve-ssr": { |  | ||||||
|           "builder": "@nguniversal/builders:ssr-dev-server", |  | ||||||
|           "options": { |  | ||||||
|             "browserTarget": "mempool:build", |  | ||||||
|             "serverTarget": "mempool:server" |  | ||||||
|           }, |  | ||||||
|           "configurations": { |  | ||||||
|             "production": { |  | ||||||
|               "browserTarget": "mempool:build:production", |  | ||||||
|               "serverTarget": "mempool:server:production" |  | ||||||
|             } |  | ||||||
|           } |  | ||||||
|         }, |  | ||||||
|         "prerender": { |  | ||||||
|           "builder": "@nguniversal/builders:prerender", |  | ||||||
|           "options": { |  | ||||||
|             "browserTarget": "mempool:build:production", |  | ||||||
|             "serverTarget": "mempool:server:production", |  | ||||||
|             "routes": [ |  | ||||||
|               "/" |  | ||||||
|             ] |  | ||||||
|           }, |  | ||||||
|           "configurations": { |  | ||||||
|             "production": {} |  | ||||||
|           } |  | ||||||
|         }, |  | ||||||
|         "cypress-run": { |         "cypress-run": { | ||||||
|           "builder": "@cypress/schematic:cypress", |           "builder": "@cypress/schematic:cypress", | ||||||
|           "options": { |           "options": { | ||||||
| @ -339,6 +288,5 @@ | |||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   }, |   } | ||||||
|   "defaultProject": "mempool" |  | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										13903
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										13903
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -51,9 +51,6 @@ | |||||||
|     "config:defaults:mempool": "node update-config.js TESTNET_ENABLED=true SIGNET_ENABLED=true LIQUID_ENABLED=true LIQUID_TESTNET_ENABLED=true BISQ_ENABLED=true ITEMS_PER_PAGE=25 BASE_MODULE=mempool BLOCK_WEIGHT_UNITS=4000000 && npm run generate-config", |     "config:defaults:mempool": "node update-config.js TESTNET_ENABLED=true SIGNET_ENABLED=true LIQUID_ENABLED=true LIQUID_TESTNET_ENABLED=true BISQ_ENABLED=true ITEMS_PER_PAGE=25 BASE_MODULE=mempool BLOCK_WEIGHT_UNITS=4000000 && npm run generate-config", | ||||||
|     "config:defaults:liquid": "node update-config.js TESTNET_ENABLED=true SIGNET_ENABLED=true LIQUID_ENABLED=true LIQUID_TESTNET_ENABLED=true BISQ_ENABLED=true ITEMS_PER_PAGE=25 BASE_MODULE=liquid BLOCK_WEIGHT_UNITS=300000 && npm run generate-config", |     "config:defaults:liquid": "node update-config.js TESTNET_ENABLED=true SIGNET_ENABLED=true LIQUID_ENABLED=true LIQUID_TESTNET_ENABLED=true BISQ_ENABLED=true ITEMS_PER_PAGE=25 BASE_MODULE=liquid BLOCK_WEIGHT_UNITS=300000 && npm run generate-config", | ||||||
|     "config:defaults:bisq": "node update-config.js TESTNET_ENABLED=true SIGNET_ENABLED=true LIQUID_ENABLED=true BISQ_ENABLED=true ITEMS_PER_PAGE=25 BASE_MODULE=bisq BLOCK_WEIGHT_UNITS=4000000 && npm run generate-config", |     "config:defaults:bisq": "node update-config.js TESTNET_ENABLED=true SIGNET_ENABLED=true LIQUID_ENABLED=true BISQ_ENABLED=true ITEMS_PER_PAGE=25 BASE_MODULE=bisq BLOCK_WEIGHT_UNITS=4000000 && npm run generate-config", | ||||||
|     "dev:ssr": "npm run generate-config && npm run ng -- run mempool:serve-ssr", |  | ||||||
|     "serve:ssr": "node server.run.js", |  | ||||||
|     "build:ssr": "npm run build && npm run ng -- run mempool:server:production && npm run tsc -- server.run.ts", |  | ||||||
|     "prerender": "npm run ng -- run mempool:prerender", |     "prerender": "npm run ng -- run mempool:prerender", | ||||||
|     "cypress:open": "cypress open", |     "cypress:open": "cypress open", | ||||||
|     "cypress:run": "cypress run", |     "cypress:run": "cypress run", | ||||||
| @ -64,48 +61,44 @@ | |||||||
|     "cypress:run:ci:staging": "node update-config.js TESTNET_ENABLED=true SIGNET_ENABLED=true LIQUID_ENABLED=true BISQ_ENABLED=true ITEMS_PER_PAGE=25 && npm run generate-config && start-server-and-test serve:local-staging 4200 cypress:run:record" |     "cypress:run:ci:staging": "node update-config.js TESTNET_ENABLED=true SIGNET_ENABLED=true LIQUID_ENABLED=true BISQ_ENABLED=true ITEMS_PER_PAGE=25 && npm run generate-config && start-server-and-test serve:local-staging 4200 cypress:run:record" | ||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@angular-devkit/build-angular": "~13.3.7", |     "@angular-devkit/build-angular": "^14.2.10", | ||||||
|     "@angular/animations": "~13.3.10", |     "@angular/animations": "^14.2.12", | ||||||
|     "@angular/cli": "~13.3.7", |     "@angular/cli": "^14.2.10", | ||||||
|     "@angular/common": "~13.3.10", |     "@angular/common": "^14.2.12", | ||||||
|     "@angular/compiler": "~13.3.10", |     "@angular/compiler": "^14.2.12", | ||||||
|     "@angular/core": "~13.3.10", |     "@angular/core": "^14.2.12", | ||||||
|     "@angular/forms": "~13.3.10", |     "@angular/forms": "^14.2.12", | ||||||
|     "@angular/localize": "~13.3.10", |     "@angular/localize": "^14.2.12", | ||||||
|     "@angular/platform-browser": "~13.3.10", |     "@angular/platform-browser": "^14.2.12", | ||||||
|     "@angular/platform-browser-dynamic": "~13.3.10", |     "@angular/platform-browser-dynamic": "^14.2.12", | ||||||
|     "@angular/platform-server": "~13.3.10", |     "@angular/platform-server": "^14.2.12", | ||||||
|     "@angular/router": "~13.3.10", |     "@angular/router": "^14.2.12", | ||||||
|     "@fortawesome/angular-fontawesome": "~0.10.2", |     "@fortawesome/angular-fontawesome": "~0.11.1", | ||||||
|     "@fortawesome/fontawesome-common-types": "~6.1.1", |     "@fortawesome/fontawesome-common-types": "~6.2.1", | ||||||
|     "@fortawesome/fontawesome-svg-core": "~6.1.1", |     "@fortawesome/fontawesome-svg-core": "~6.2.1", | ||||||
|     "@fortawesome/free-solid-svg-icons": "~6.1.1", |     "@fortawesome/free-solid-svg-icons": "~6.2.1", | ||||||
|     "@mempool/mempool.js": "2.3.0", |     "@mempool/mempool.js": "2.3.0", | ||||||
|     "@ng-bootstrap/ng-bootstrap": "^11.0.0", |     "@ng-bootstrap/ng-bootstrap": "^13.1.1", | ||||||
|     "@nguniversal/express-engine": "~13.1.1", |     "@types/qrcode": "~1.5.0", | ||||||
|     "@types/qrcode": "~1.4.2", |     "bootstrap": "~4.6.1", | ||||||
|     "bootstrap": "~4.5.0", |  | ||||||
|     "browserify": "^17.0.0", |     "browserify": "^17.0.0", | ||||||
|     "clipboard": "^2.0.10", |     "clipboard": "^2.0.11", | ||||||
|     "domino": "^2.1.6", |     "domino": "^2.1.6", | ||||||
|     "echarts": "~5.3.2", |     "echarts": "~5.3.2", | ||||||
|     "echarts-gl": "^2.0.9", |     "echarts-gl": "^2.0.9", | ||||||
|     "express": "^4.17.1", |  | ||||||
|     "lightweight-charts": "~3.8.0", |     "lightweight-charts": "~3.8.0", | ||||||
|     "ngx-echarts": "8.0.1", |     "ngx-echarts": "8.0.1", | ||||||
|     "ngx-infinite-scroll": "^10.0.1", |     "ngx-infinite-scroll": "^14.0.1", | ||||||
|     "qrcode": "1.5.0", |     "qrcode": "1.5.0", | ||||||
|     "rxjs": "~7.5.5", |     "rxjs": "~7.5.7", | ||||||
|     "tinyify": "^3.0.0", |     "tinyify": "^3.1.0", | ||||||
|     "tlite": "^0.1.9", |     "tlite": "^0.1.9", | ||||||
|     "tslib": "~2.4.0", |     "tslib": "~2.4.1", | ||||||
|     "zone.js": "~0.11.5" |     "zone.js": "~0.11.5" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@angular/compiler-cli": "~13.3.10", |     "@angular/compiler-cli": "^14.2.12", | ||||||
|     "@angular/language-service": "~13.3.10", |     "@angular/language-service": "^14.2.12", | ||||||
|     "@nguniversal/builders": "~13.1.1", |  | ||||||
|     "@types/express": "^4.17.0", |  | ||||||
|     "@types/node": "^12.11.1", |     "@types/node": "^12.11.1", | ||||||
|     "@typescript-eslint/eslint-plugin": "^5.30.5", |     "@typescript-eslint/eslint-plugin": "^5.30.5", | ||||||
|     "@typescript-eslint/parser": "^5.30.5", |     "@typescript-eslint/parser": "^5.30.5", | ||||||
| @ -116,11 +109,11 @@ | |||||||
|     "typescript": "~4.6.4" |     "typescript": "~4.6.4" | ||||||
|   }, |   }, | ||||||
|   "optionalDependencies": { |   "optionalDependencies": { | ||||||
|     "@cypress/schematic": "~2.0.0", |     "@cypress/schematic": "~2.3.0", | ||||||
|     "cypress": "^10.3.0", |     "cypress": "^11.2.0", | ||||||
|     "cypress-fail-on-console-error": "~3.0.0", |     "cypress-fail-on-console-error": "~4.0.2", | ||||||
|     "cypress-wait-until": "^1.7.2", |     "cypress-wait-until": "^1.7.2", | ||||||
|     "mock-socket": "~9.1.4", |     "mock-socket": "~9.1.5", | ||||||
|     "start-server-and-test": "~1.14.0" |     "start-server-and-test": "~1.14.0" | ||||||
|   }, |   }, | ||||||
|   "scarfSettings": { |   "scarfSettings": { | ||||||
|  | |||||||
| @ -1,96 +0,0 @@ | |||||||
| import 'zone.js/node'; |  | ||||||
| import './generated-config'; |  | ||||||
| 
 |  | ||||||
| import * as domino from 'domino'; |  | ||||||
| import * as express from 'express'; |  | ||||||
| import * as fs from 'fs'; |  | ||||||
| import * as path from 'path'; |  | ||||||
| 
 |  | ||||||
| const {readFileSync, existsSync} = require('fs'); |  | ||||||
| const {createProxyMiddleware} = require('http-proxy-middleware'); |  | ||||||
| 
 |  | ||||||
| const template = fs.readFileSync(path.join(process.cwd(), 'dist/mempool/browser/en-US/', 'index.html')).toString(); |  | ||||||
| const win = domino.createWindow(template); |  | ||||||
| 
 |  | ||||||
| // @ts-ignore
 |  | ||||||
| win.__env = global.__env; |  | ||||||
| 
 |  | ||||||
| // @ts-ignore
 |  | ||||||
| win.matchMedia = () => { |  | ||||||
|   return { |  | ||||||
|     matches: true |  | ||||||
|   }; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| // @ts-ignore
 |  | ||||||
| win.setTimeout = (fn) => { fn(); }; |  | ||||||
| win.document.body.scrollTo = (() => {}); |  | ||||||
| // @ts-ignore
 |  | ||||||
| global['window'] = win; |  | ||||||
| global['document'] = win.document; |  | ||||||
| // @ts-ignore
 |  | ||||||
| global['history'] = { state: { } }; |  | ||||||
| 
 |  | ||||||
| global['localStorage'] = { |  | ||||||
|   getItem: () => '', |  | ||||||
|   setItem: () => {}, |  | ||||||
|   removeItem: () => {}, |  | ||||||
|   clear: () => {}, |  | ||||||
|   length: 0, |  | ||||||
|   key: () => '', |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Return the list of supported and actually active locales |  | ||||||
|  */ |  | ||||||
| function getActiveLocales() { |  | ||||||
|   const angularConfig = JSON.parse(readFileSync('angular.json', 'utf8')); |  | ||||||
| 
 |  | ||||||
|   const supportedLocales = [ |  | ||||||
|     angularConfig.projects.mempool.i18n.sourceLocale, |  | ||||||
|     ...Object.keys(angularConfig.projects.mempool.i18n.locales), |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   return supportedLocales.filter(locale => existsSync(`./dist/mempool/server/${locale}`)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function app() { |  | ||||||
|   const server = express(); |  | ||||||
| 
 |  | ||||||
|   // proxy API to nginx
 |  | ||||||
|   server.get('/api/**', createProxyMiddleware({ |  | ||||||
|     // @ts-ignore
 |  | ||||||
|     target: win.__env.NGINX_PROTOCOL + '://' + win.__env.NGINX_HOSTNAME + ':' + win.__env.NGINX_PORT, |  | ||||||
|     changeOrigin: true, |  | ||||||
|   })); |  | ||||||
| 
 |  | ||||||
|   // map / and /en to en-US
 |  | ||||||
|   const defaultLocale = 'en-US'; |  | ||||||
|   console.log(`serving default locale: ${defaultLocale}`); |  | ||||||
|   const appServerModule = require(`./dist/mempool/server/${defaultLocale}/main.js`); |  | ||||||
|   server.use('/', appServerModule.app(defaultLocale)); |  | ||||||
|   server.use('/en', appServerModule.app(defaultLocale)); |  | ||||||
| 
 |  | ||||||
|   // map each locale to its localized main.js
 |  | ||||||
|   getActiveLocales().forEach(locale => { |  | ||||||
|     console.log('serving locale:', locale); |  | ||||||
|     const appServerModule = require(`./dist/mempool/server/${locale}/main.js`); |  | ||||||
| 
 |  | ||||||
|     // map everything to itself
 |  | ||||||
|     server.use(`/${locale}`, appServerModule.app(locale)); |  | ||||||
| 
 |  | ||||||
|   }); |  | ||||||
| 
 |  | ||||||
|   return server; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function run() { |  | ||||||
|   const port = process.env.PORT || 4000; |  | ||||||
| 
 |  | ||||||
|   // Start up the Node server
 |  | ||||||
|   app().listen(port, () => { |  | ||||||
|     console.log(`Node Express server listening on port ${port}`); |  | ||||||
|   }); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| run(); |  | ||||||
| @ -1,160 +0,0 @@ | |||||||
| import 'zone.js/node'; |  | ||||||
| import './generated-config'; |  | ||||||
| 
 |  | ||||||
| import { ngExpressEngine } from '@nguniversal/express-engine'; |  | ||||||
| import * as express from 'express'; |  | ||||||
| import * as fs from 'fs'; |  | ||||||
| import * as path from 'path'; |  | ||||||
| import * as domino from 'domino'; |  | ||||||
| 
 |  | ||||||
| import { join } from 'path'; |  | ||||||
| import { AppServerModule } from './src/main.server'; |  | ||||||
| import { APP_BASE_HREF } from '@angular/common'; |  | ||||||
| import { existsSync } from 'fs'; |  | ||||||
| 
 |  | ||||||
| const template = fs.readFileSync(path.join(process.cwd(), 'dist/mempool/browser/en-US/', 'index.html')).toString(); |  | ||||||
| const win = domino.createWindow(template); |  | ||||||
| 
 |  | ||||||
| // @ts-ignore
 |  | ||||||
| win.__env = global.__env; |  | ||||||
| 
 |  | ||||||
| // @ts-ignore
 |  | ||||||
| win.matchMedia = () => { |  | ||||||
|   return { |  | ||||||
|     matches: true |  | ||||||
|   }; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| // @ts-ignore
 |  | ||||||
| win.setTimeout = (fn) => { fn(); }; |  | ||||||
| win.document.body.scrollTo = (() => {}); |  | ||||||
| // @ts-ignore
 |  | ||||||
| global['window'] = win; |  | ||||||
| global['document'] = win.document; |  | ||||||
| // @ts-ignore
 |  | ||||||
| global['history'] = { state: { } }; |  | ||||||
| 
 |  | ||||||
| global['localStorage'] = { |  | ||||||
|   getItem: () => '', |  | ||||||
|   setItem: () => {}, |  | ||||||
|   removeItem: () => {}, |  | ||||||
|   clear: () => {}, |  | ||||||
|   length: 0, |  | ||||||
|   key: () => '', |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| // The Express app is exported so that it can be used by serverless Functions.
 |  | ||||||
| export function app(locale: string): express.Express { |  | ||||||
|   const server = express(); |  | ||||||
|   const distFolder = join(process.cwd(), `dist/mempool/browser/${locale}`); |  | ||||||
|   const indexHtml = existsSync(join(distFolder, 'index.original.html')) ? 'index.original.html' : 'index'; |  | ||||||
| 
 |  | ||||||
|   // Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine)
 |  | ||||||
|   server.engine('html', ngExpressEngine({ |  | ||||||
|     bootstrap: AppServerModule, |  | ||||||
|   })); |  | ||||||
| 
 |  | ||||||
|   server.set('view engine', 'html'); |  | ||||||
|   server.set('views', distFolder); |  | ||||||
| 
 |  | ||||||
|   // only handle URLs that actually exist
 |  | ||||||
|   //server.get(locale, getLocalizedSSR(indexHtml));
 |  | ||||||
|   server.get('/', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/tx/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/block/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/mempool-block/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/address/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/blocks', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/mining/pools', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/mining/pool/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/graphs', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/liquid', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/liquid/tx/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/liquid/block/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/liquid/mempool-block/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/liquid/address/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/liquid/asset/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/liquid/blocks', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/liquid/graphs', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/liquid/assets', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/liquid/api', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/liquid/tv', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/liquid/status', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/liquid/about', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/testnet', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/testnet/tx/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/testnet/block/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/testnet/mempool-block/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/testnet/address/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/testnet/blocks', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/testnet/mining/pools', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/testnet/graphs', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/testnet/api', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/testnet/tv', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/testnet/status', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/testnet/about', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/signet', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/signet/tx/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/signet/block/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/signet/mempool-block/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/signet/address/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/signet/blocks', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/signet/mining/pools', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/signet/graphs', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/signet/api', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/signet/tv', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/signet/status', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/signet/about', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/bisq', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/bisq/tx/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/bisq/blocks', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/bisq/block/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/bisq/address/*', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/bisq/stats', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/bisq/about', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/bisq/api', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/about', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/api', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/tv', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/status', getLocalizedSSR(indexHtml)); |  | ||||||
|   server.get('/terms-of-service', getLocalizedSSR(indexHtml)); |  | ||||||
| 
 |  | ||||||
|   // fallback to static file handler so we send HTTP 404 to nginx
 |  | ||||||
|   server.get('/**', express.static(distFolder, { maxAge: '1y' })); |  | ||||||
| 
 |  | ||||||
|   return server; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function getLocalizedSSR(indexHtml) { |  | ||||||
|   return (req, res) => { |  | ||||||
|     res.render(indexHtml, { |  | ||||||
|       req, |  | ||||||
|       providers: [ |  | ||||||
|         { provide: APP_BASE_HREF, useValue: req.baseUrl } |  | ||||||
|       ] |  | ||||||
|     }); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // only used for development mode
 |  | ||||||
| function run(): void { |  | ||||||
|   const port = process.env.PORT || 4000; |  | ||||||
| 
 |  | ||||||
|   // Start up the Node server
 |  | ||||||
|   const server = app('en-US'); |  | ||||||
|   server.listen(port, () => { |  | ||||||
|     console.log(`Node Express server listening on port ${port}`); |  | ||||||
|   }); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Webpack will replace 'require' with '__webpack_require__'
 |  | ||||||
| // '__non_webpack_require__' is a proxy to Node 'require'
 |  | ||||||
| // The below code is to ensure that the server is run only when not requiring the bundle.
 |  | ||||||
| declare const __non_webpack_require__: NodeRequire; |  | ||||||
| const mainModule = __non_webpack_require__.main; |  | ||||||
| const moduleFilename = mainModule && mainModule.filename || ''; |  | ||||||
| if (moduleFilename === __filename || moduleFilename.includes('iisnode')) { |  | ||||||
|   run(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| export * from './src/main.server'; |  | ||||||
| @ -627,7 +627,7 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') { | |||||||
| 
 | 
 | ||||||
| @NgModule({ | @NgModule({ | ||||||
|   imports: [RouterModule.forRoot(routes, { |   imports: [RouterModule.forRoot(routes, { | ||||||
|     initialNavigation: 'enabled', |     initialNavigation: 'enabledBlocking', | ||||||
|     scrollPositionRestoration: 'enabled', |     scrollPositionRestoration: 'enabled', | ||||||
|     anchorScrolling: 'enabled', |     anchorScrolling: 'enabled', | ||||||
|     preloadingStrategy: AppPreloadingStrategy |     preloadingStrategy: AppPreloadingStrategy | ||||||
|  | |||||||
| @ -10,27 +10,27 @@ | |||||||
|       </div> |       </div> | ||||||
|    |    | ||||||
|       <form [formGroup]="radioGroupForm" class="mb-3 radio-form"> |       <form [formGroup]="radioGroupForm" class="mb-3 radio-form"> | ||||||
|         <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="interval"> |         <div class="btn-group btn-group-toggle" name="radioBasic"> | ||||||
|           <label ngbButtonLabel class="btn-primary btn-sm"> |           <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('interval').value === 'half_hour'"> | ||||||
|             <input ngbButton type="radio" [value]="'half_hour'" (click)="setFragment('half_hour')"> 30M |             <input type="radio" [value]="'half_hour'" (click)="setFragment('half_hour')" formControlName="interval"> 30M | ||||||
|           </label> |           </label> | ||||||
|           <label ngbButtonLabel class="btn-primary btn-sm"> |           <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('interval').value === 'hour'"> | ||||||
|             <input ngbButton type="radio" [value]="'hour'" (click)="setFragment('hour')"> 1H |             <input type="radio" [value]="'hour'" (click)="setFragment('hour')" formControlName="interval"> 1H | ||||||
|           </label> |           </label> | ||||||
|           <label ngbButtonLabel class="btn-primary btn-sm"> |           <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('interval').value === 'half_day'"> | ||||||
|             <input ngbButton type="radio" [value]="'half_day'" (click)="setFragment('half_day')"> 12H |             <input type="radio" [value]="'half_day'" (click)="setFragment('half_day')" formControlName="interval"> 12H | ||||||
|           </label> |           </label> | ||||||
|           <label ngbButtonLabel class="btn-primary btn-sm"> |           <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('interval').value === 'day'"> | ||||||
|             <input ngbButton type="radio" [value]="'day'" (click)="setFragment('day')"> 1D |             <input type="radio" [value]="'day'" (click)="setFragment('day')" formControlName="interval"> 1D | ||||||
|           </label> |           </label> | ||||||
|           <label ngbButtonLabel class="btn-primary btn-sm"> |           <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('interval').value === 'week'"> | ||||||
|             <input ngbButton type="radio" [value]="'week'" (click)="setFragment('week')"> 1W |             <input type="radio" [value]="'week'" (click)="setFragment('week')" formControlName="interval"> 1W | ||||||
|           </label> |           </label> | ||||||
|           <label ngbButtonLabel class="btn-primary btn-sm"> |           <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('interval').value === 'month'"> | ||||||
|             <input ngbButton type="radio" [value]="'month'" (click)="setFragment('month')"> 1M |             <input type="radio" [value]="'month'" (click)="setFragment('month')" formControlName="interval"> 1M | ||||||
|           </label> |           </label> | ||||||
|           <label ngbButtonLabel class="btn-primary btn-sm"> |           <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('interval').value === 'year'"> | ||||||
|             <input ngbButton type="radio" [value]="'year'" (click)="setFragment('year')"> 1Y |             <input type="radio" [value]="'year'" (click)="setFragment('year')" formControlName="interval"> 1Y | ||||||
|           </label> |           </label> | ||||||
|         </div> |         </div> | ||||||
|       </form> |       </form> | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'; | import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'; | ||||||
| import { FormBuilder, FormGroup } from '@angular/forms'; | import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; | ||||||
| import { ActivatedRoute, Router } from '@angular/router'; | import { ActivatedRoute, Router } from '@angular/router'; | ||||||
| import { combineLatest, merge, Observable, of } from 'rxjs'; | import { combineLatest, merge, Observable, of } from 'rxjs'; | ||||||
| import { map, switchMap } from 'rxjs/operators'; | import { map, switchMap } from 'rxjs/operators'; | ||||||
| @ -19,7 +19,7 @@ export class BisqMarketComponent implements OnInit, OnDestroy { | |||||||
|   currency$: Observable<any>; |   currency$: Observable<any>; | ||||||
|   offers$: Observable<OffersMarket>; |   offers$: Observable<OffersMarket>; | ||||||
|   trades$: Observable<Trade[]>; |   trades$: Observable<Trade[]>; | ||||||
|   radioGroupForm: FormGroup; |   radioGroupForm: UntypedFormGroup; | ||||||
|   defaultInterval = 'day'; |   defaultInterval = 'day'; | ||||||
| 
 | 
 | ||||||
|   isLoadingGraph = false; |   isLoadingGraph = false; | ||||||
| @ -28,7 +28,7 @@ export class BisqMarketComponent implements OnInit, OnDestroy { | |||||||
|     private websocketService: WebsocketService, |     private websocketService: WebsocketService, | ||||||
|     private route: ActivatedRoute, |     private route: ActivatedRoute, | ||||||
|     private bisqApiService: BisqApiService, |     private bisqApiService: BisqApiService, | ||||||
|     private formBuilder: FormBuilder, |     private formBuilder: UntypedFormBuilder, | ||||||
|     private seoService: SeoService, |     private seoService: SeoService, | ||||||
|     private router: Router, |     private router: Router, | ||||||
|   ) { } |   ) { } | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ import { Observable, Subscription } from 'rxjs'; | |||||||
| import { switchMap, map, tap } from 'rxjs/operators'; | import { switchMap, map, tap } from 'rxjs/operators'; | ||||||
| import { BisqApiService } from '../bisq-api.service'; | import { BisqApiService } from '../bisq-api.service'; | ||||||
| import { SeoService } from '../../services/seo.service'; | import { SeoService } from '../../services/seo.service'; | ||||||
| import { FormGroup, FormBuilder } from '@angular/forms'; | import { UntypedFormGroup, UntypedFormBuilder } from '@angular/forms'; | ||||||
| import { Router, ActivatedRoute } from '@angular/router'; | import { Router, ActivatedRoute } from '@angular/router'; | ||||||
| import { IMultiSelectOption, IMultiSelectSettings, IMultiSelectTexts } from '../../components/ngx-bootstrap-multiselect/types' | import { IMultiSelectOption, IMultiSelectSettings, IMultiSelectTexts } from '../../components/ngx-bootstrap-multiselect/types' | ||||||
| import { WebsocketService } from '../../services/websocket.service'; | import { WebsocketService } from '../../services/websocket.service'; | ||||||
| @ -23,7 +23,7 @@ export class BisqTransactionsComponent implements OnInit, OnDestroy { | |||||||
|   fiveItemsPxSize = 250; |   fiveItemsPxSize = 250; | ||||||
|   isLoading = true; |   isLoading = true; | ||||||
|   loadingItems: number[]; |   loadingItems: number[]; | ||||||
|   radioGroupForm: FormGroup; |   radioGroupForm: UntypedFormGroup; | ||||||
|   types: string[] = []; |   types: string[] = []; | ||||||
|   radioGroupSubscription: Subscription; |   radioGroupSubscription: Subscription; | ||||||
| 
 | 
 | ||||||
| @ -70,7 +70,7 @@ export class BisqTransactionsComponent implements OnInit, OnDestroy { | |||||||
|     private websocketService: WebsocketService, |     private websocketService: WebsocketService, | ||||||
|     private bisqApiService: BisqApiService, |     private bisqApiService: BisqApiService, | ||||||
|     private seoService: SeoService, |     private seoService: SeoService, | ||||||
|     private formBuilder: FormBuilder, |     private formBuilder: UntypedFormBuilder, | ||||||
|     private route: ActivatedRoute, |     private route: ActivatedRoute, | ||||||
|     private router: Router, |     private router: Router, | ||||||
|     private cd: ChangeDetectorRef, |     private cd: ChangeDetectorRef, | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import { Component, OnInit, ViewChild } from '@angular/core'; | import { Component, OnInit, ViewChild } from '@angular/core'; | ||||||
| import { FormBuilder, FormGroup, Validators } from '@angular/forms'; | import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; | ||||||
| import { Router } from '@angular/router'; | import { Router } from '@angular/router'; | ||||||
| import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap'; | import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap'; | ||||||
| import { merge, Observable, of, Subject } from 'rxjs'; | import { merge, Observable, of, Subject } from 'rxjs'; | ||||||
| @ -19,7 +19,7 @@ import { environment } from '../../../../environments/environment'; | |||||||
| export class AssetsNavComponent implements OnInit { | export class AssetsNavComponent implements OnInit { | ||||||
|   @ViewChild('instance', {static: true}) instance: NgbTypeahead; |   @ViewChild('instance', {static: true}) instance: NgbTypeahead; | ||||||
|   nativeAssetId = this.stateService.network === 'liquidtestnet' ? environment.nativeTestAssetId : environment.nativeAssetId; |   nativeAssetId = this.stateService.network === 'liquidtestnet' ? environment.nativeTestAssetId : environment.nativeAssetId; | ||||||
|   searchForm: FormGroup; |   searchForm: UntypedFormGroup; | ||||||
|   assetsCache: AssetExtended[]; |   assetsCache: AssetExtended[]; | ||||||
| 
 | 
 | ||||||
|   typeaheadSearchFn: ((text: Observable<string>) => Observable<readonly any[]>); |   typeaheadSearchFn: ((text: Observable<string>) => Observable<readonly any[]>); | ||||||
| @ -30,7 +30,7 @@ export class AssetsNavComponent implements OnInit { | |||||||
|   itemsPerPage = 15; |   itemsPerPage = 15; | ||||||
| 
 | 
 | ||||||
|   constructor( |   constructor( | ||||||
|     private formBuilder: FormBuilder, |     private formBuilder: UntypedFormBuilder, | ||||||
|     private seoService: SeoService, |     private seoService: SeoService, | ||||||
|     private router: Router, |     private router: Router, | ||||||
|     private assetsService: AssetsService, |     private assetsService: AssetsService, | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core'; | import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core'; | ||||||
| import { AssetsService } from '../../services/assets.service'; | import { AssetsService } from '../../services/assets.service'; | ||||||
| import { environment } from '../../../environments/environment'; | import { environment } from '../../../environments/environment'; | ||||||
| import { FormGroup } from '@angular/forms'; | import { UntypedFormGroup } from '@angular/forms'; | ||||||
| import { filter, map, switchMap, take } from 'rxjs/operators'; | import { filter, map, switchMap, take } from 'rxjs/operators'; | ||||||
| import { ActivatedRoute, Router } from '@angular/router'; | import { ActivatedRoute, Router } from '@angular/router'; | ||||||
| import { combineLatest, Observable } from 'rxjs'; | import { combineLatest, Observable } from 'rxjs'; | ||||||
| @ -22,7 +22,7 @@ export class AssetsComponent implements OnInit { | |||||||
| 
 | 
 | ||||||
|   assets: AssetExtended[]; |   assets: AssetExtended[]; | ||||||
|   assetsCache: AssetExtended[]; |   assetsCache: AssetExtended[]; | ||||||
|   searchForm: FormGroup; |   searchForm: UntypedFormGroup; | ||||||
|   assets$: Observable<AssetExtended[]>; |   assets$: Observable<AssetExtended[]>; | ||||||
| 
 | 
 | ||||||
|   page = 1; |   page = 1; | ||||||
|  | |||||||
| @ -10,36 +10,36 @@ | |||||||
|     </div>   |     </div>   | ||||||
| 
 | 
 | ||||||
|     <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(statsObservable$ | async) as stats"> |     <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(statsObservable$ | async) as stats"> | ||||||
|       <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan"> |       <div class="btn-group btn-group-toggle" name="radioBasic"> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 144"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 144" [class.active]="radioGroupForm.get('dateSpan').value === '24h'"> | ||||||
|           <input ngbButton type="radio" [value]="'24h'" fragment="24h" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> 24h |           <input type="radio" [value]="'24h'" fragment="24h" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]" formControlName="dateSpan"> 24h | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 432"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 432" [class.active]="radioGroupForm.get('dateSpan').value === '3d'"> | ||||||
|           <input ngbButton type="radio" [value]="'3d'" fragment="3d" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> 3D |           <input type="radio" [value]="'3d'" fragment="3d" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]" formControlName="dateSpan"> 3D | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 1008"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 1008" [class.active]="radioGroupForm.get('dateSpan').value === '1w'"> | ||||||
|           <input ngbButton type="radio" [value]="'1w'" fragment="1w" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> 1W |           <input type="radio" [value]="'1w'" fragment="1w" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]" formControlName="dateSpan"> 1W | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 4320"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 4320" [class.active]="radioGroupForm.get('dateSpan').value === '1m'"> | ||||||
|           <input ngbButton type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> 1M |           <input type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]" formControlName="dateSpan"> 1M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 12960"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 12960" [class.active]="radioGroupForm.get('dateSpan').value === '3m'"> | ||||||
|           <input ngbButton type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> 3M |           <input type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]" formControlName="dateSpan"> 3M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 25920"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 25920" [class.active]="radioGroupForm.get('dateSpan').value === '6m'"> | ||||||
|           <input ngbButton type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> 6M |           <input type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]" formControlName="dateSpan"> 6M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 52560"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 52560" [class.active]="radioGroupForm.get('dateSpan').value === '1y'"> | ||||||
|           <input ngbButton type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> 1Y |           <input type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]" formControlName="dateSpan"> 1Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 105120"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 105120" [class.active]="radioGroupForm.get('dateSpan').value === '2y'"> | ||||||
|           <input ngbButton type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> 2Y |           <input type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]" formControlName="dateSpan"> 2Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 157680"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 157680" [class.active]="radioGroupForm.get('dateSpan').value === '3y'"> | ||||||
|           <input ngbButton type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> 3Y |           <input type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]" formControlName="dateSpan"> 3Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm"> |         <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === 'all'"> | ||||||
|           <input ngbButton type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]"> ALL |           <input type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]" formControlName="dateSpan"> ALL | ||||||
|         </label> |         </label> | ||||||
|       </div> |       </div> | ||||||
|     </form> |     </form> | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; | |||||||
| import { ApiService } from '../../services/api.service'; | import { ApiService } from '../../services/api.service'; | ||||||
| import { SeoService } from '../../services/seo.service'; | import { SeoService } from '../../services/seo.service'; | ||||||
| import { formatNumber } from '@angular/common'; | import { formatNumber } from '@angular/common'; | ||||||
| import { FormBuilder, FormGroup } from '@angular/forms'; | import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; | ||||||
| import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '../../shared/graphs.utils'; | import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '../../shared/graphs.utils'; | ||||||
| import { StorageService } from '../../services/storage.service'; | import { StorageService } from '../../services/storage.service'; | ||||||
| import { MiningService } from '../../services/mining.service'; | import { MiningService } from '../../services/mining.service'; | ||||||
| @ -33,7 +33,7 @@ export class BlockFeeRatesGraphComponent implements OnInit { | |||||||
|   @Input() left: number | string = 75; |   @Input() left: number | string = 75; | ||||||
| 
 | 
 | ||||||
|   miningWindowPreference: string; |   miningWindowPreference: string; | ||||||
|   radioGroupForm: FormGroup; |   radioGroupForm: UntypedFormGroup; | ||||||
| 
 | 
 | ||||||
|   chartOptions: EChartsOption = {}; |   chartOptions: EChartsOption = {}; | ||||||
|   chartInitOptions = { |   chartInitOptions = { | ||||||
| @ -50,7 +50,7 @@ export class BlockFeeRatesGraphComponent implements OnInit { | |||||||
|     @Inject(LOCALE_ID) public locale: string, |     @Inject(LOCALE_ID) public locale: string, | ||||||
|     private seoService: SeoService, |     private seoService: SeoService, | ||||||
|     private apiService: ApiService, |     private apiService: ApiService, | ||||||
|     private formBuilder: FormBuilder, |     private formBuilder: UntypedFormBuilder, | ||||||
|     private storageService: StorageService, |     private storageService: StorageService, | ||||||
|     private miningService: MiningService, |     private miningService: MiningService, | ||||||
|     private stateService: StateService, |     private stateService: StateService, | ||||||
|  | |||||||
| @ -10,27 +10,27 @@ | |||||||
|     </div>   |     </div>   | ||||||
| 
 | 
 | ||||||
|     <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(statsObservable$ | async) as stats"> |     <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(statsObservable$ | async) as stats"> | ||||||
|       <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan"> |       <div class="btn-group btn-group-toggle" name="radioBasic"> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 4320"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 4320" [class.active]="radioGroupForm.get('dateSpan').value === '1m'"> | ||||||
|           <input ngbButton type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]"> 1M |           <input type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]" formControlName="dateSpan"> 1M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 12960"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 12960" [class.active]="radioGroupForm.get('dateSpan').value === '3m'"> | ||||||
|           <input ngbButton type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]"> 3M |           <input type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]" formControlName="dateSpan"> 3M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 25920"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 25920" [class.active]="radioGroupForm.get('dateSpan').value === '6m'"> | ||||||
|           <input ngbButton type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]"> 6M |           <input type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]" formControlName="dateSpan"> 6M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 52560"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 52560" [class.active]="radioGroupForm.get('dateSpan').value === '1y'"> | ||||||
|           <input ngbButton type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]"> 1Y |           <input type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]" formControlName="dateSpan"> 1Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 105120"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 105120" [class.active]="radioGroupForm.get('dateSpan').value === '2y'"> | ||||||
|           <input ngbButton type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]"> 2Y |           <input type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]" formControlName="dateSpan"> 2Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 157680"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 157680" [class.active]="radioGroupForm.get('dateSpan').value === '3y'"> | ||||||
|           <input ngbButton type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]"> 3Y |           <input type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]" formControlName="dateSpan"> 3Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm"> |         <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === 'all'"> | ||||||
|           <input ngbButton type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]"> ALL |           <input type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]" formControlName="dateSpan"> ALL | ||||||
|         </label> |         </label> | ||||||
|       </div> |       </div> | ||||||
|     </form> |     </form> | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; | |||||||
| import { ApiService } from '../../services/api.service'; | import { ApiService } from '../../services/api.service'; | ||||||
| import { SeoService } from '../../services/seo.service'; | import { SeoService } from '../../services/seo.service'; | ||||||
| import { formatCurrency, formatNumber, getCurrencySymbol } from '@angular/common'; | import { formatCurrency, formatNumber, getCurrencySymbol } from '@angular/common'; | ||||||
| import { FormBuilder, FormGroup } from '@angular/forms'; | import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; | ||||||
| import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '../../shared/graphs.utils'; | import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '../../shared/graphs.utils'; | ||||||
| import { StorageService } from '../../services/storage.service'; | import { StorageService } from '../../services/storage.service'; | ||||||
| import { MiningService } from '../../services/mining.service'; | import { MiningService } from '../../services/mining.service'; | ||||||
| @ -31,7 +31,7 @@ export class BlockFeesGraphComponent implements OnInit { | |||||||
|   @Input() left: number | string = 75; |   @Input() left: number | string = 75; | ||||||
| 
 | 
 | ||||||
|   miningWindowPreference: string; |   miningWindowPreference: string; | ||||||
|   radioGroupForm: FormGroup; |   radioGroupForm: UntypedFormGroup; | ||||||
| 
 | 
 | ||||||
|   chartOptions: EChartsOption = {}; |   chartOptions: EChartsOption = {}; | ||||||
|   chartInitOptions = { |   chartInitOptions = { | ||||||
| @ -48,7 +48,7 @@ export class BlockFeesGraphComponent implements OnInit { | |||||||
|     @Inject(LOCALE_ID) public locale: string, |     @Inject(LOCALE_ID) public locale: string, | ||||||
|     private seoService: SeoService, |     private seoService: SeoService, | ||||||
|     private apiService: ApiService, |     private apiService: ApiService, | ||||||
|     private formBuilder: FormBuilder, |     private formBuilder: UntypedFormBuilder, | ||||||
|     private storageService: StorageService, |     private storageService: StorageService, | ||||||
|     private miningService: MiningService, |     private miningService: MiningService, | ||||||
|     private route: ActivatedRoute, |     private route: ActivatedRoute, | ||||||
|  | |||||||
| @ -10,36 +10,36 @@ | |||||||
|     </div>   |     </div>   | ||||||
| 
 | 
 | ||||||
|     <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(statsObservable$ | async) as stats"> |     <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(statsObservable$ | async) as stats"> | ||||||
|       <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan"> |       <div class="btn-group btn-group-toggle" name="radioBasic"> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 144"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 144" [class.active]="radioGroupForm.get('dateSpan').value === '24h'"> | ||||||
|           <input ngbButton type="radio" [value]="'24h'" fragment="24h" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]"> 24h |           <input type="radio" [value]="'24h'" fragment="24h" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]" formControlName="dateSpan"> 24h | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 432"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 432" [class.active]="radioGroupForm.get('dateSpan').value === '3d'"> | ||||||
|           <input ngbButton type="radio" [value]="'3d'" fragment="3d" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]"> 3D |           <input type="radio" [value]="'3d'" fragment="3d" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]" formControlName="dateSpan"> 3D | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 1008"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 1008" [class.active]="radioGroupForm.get('dateSpan').value === '1w'"> | ||||||
|           <input ngbButton type="radio" [value]="'1w'" fragment="1w" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]"> 1W |           <input type="radio" [value]="'1w'" fragment="1w" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]" formControlName="dateSpan"> 1W | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 4320"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 4320" [class.active]="radioGroupForm.get('dateSpan').value === '1m'"> | ||||||
|           <input ngbButton type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]"> 1M |           <input type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]" formControlName="dateSpan"> 1M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 12960"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 12960" [class.active]="radioGroupForm.get('dateSpan').value === '3m'"> | ||||||
|           <input ngbButton type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]"> 3M |           <input type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]" formControlName="dateSpan"> 3M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 25920"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 25920" [class.active]="radioGroupForm.get('dateSpan').value === '6m'"> | ||||||
|           <input ngbButton type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]"> 6M |           <input type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]" formControlName="dateSpan"> 6M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 52560"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 52560" [class.active]="radioGroupForm.get('dateSpan').value === '1y'"> | ||||||
|           <input ngbButton type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]"> 1Y |           <input type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]" formControlName="dateSpan"> 1Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 105120"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 105120" [class.active]="radioGroupForm.get('dateSpan').value === '2y'"> | ||||||
|           <input ngbButton type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]"> 2Y |           <input type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]" formControlName="dateSpan"> 2Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 157680"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 157680" [class.active]="radioGroupForm.get('dateSpan').value === '3y'"> | ||||||
|           <input ngbButton type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]"> 3Y |           <input type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]" formControlName="dateSpan"> 3Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount > 157680"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount > 157680" [class.active]="radioGroupForm.get('dateSpan').value === 'all'"> | ||||||
|           <input ngbButton type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]"> ALL |           <input type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/block-prediction' | relativeUrl]" formControlName="dateSpan"> ALL | ||||||
|         </label> |         </label> | ||||||
|       </div> |       </div> | ||||||
|     </form> |     </form> | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; | |||||||
| import { ApiService } from '../../services/api.service'; | import { ApiService } from '../../services/api.service'; | ||||||
| import { SeoService } from '../../services/seo.service'; | import { SeoService } from '../../services/seo.service'; | ||||||
| import { formatNumber } from '@angular/common'; | import { formatNumber } from '@angular/common'; | ||||||
| import { FormBuilder, FormGroup } from '@angular/forms'; | import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; | ||||||
| import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '../../shared/graphs.utils'; | import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '../../shared/graphs.utils'; | ||||||
| import { StorageService } from '../../services/storage.service'; | import { StorageService } from '../../services/storage.service'; | ||||||
| import { ActivatedRoute, Router } from '@angular/router'; | import { ActivatedRoute, Router } from '@angular/router'; | ||||||
| @ -31,7 +31,7 @@ export class BlockPredictionGraphComponent implements OnInit { | |||||||
|   @Input() left: number | string = 75; |   @Input() left: number | string = 75; | ||||||
| 
 | 
 | ||||||
|   miningWindowPreference: string; |   miningWindowPreference: string; | ||||||
|   radioGroupForm: FormGroup; |   radioGroupForm: UntypedFormGroup; | ||||||
| 
 | 
 | ||||||
|   chartOptions: EChartsOption = {}; |   chartOptions: EChartsOption = {}; | ||||||
|   chartInitOptions = { |   chartInitOptions = { | ||||||
| @ -48,7 +48,7 @@ export class BlockPredictionGraphComponent implements OnInit { | |||||||
|     @Inject(LOCALE_ID) public locale: string, |     @Inject(LOCALE_ID) public locale: string, | ||||||
|     private seoService: SeoService, |     private seoService: SeoService, | ||||||
|     private apiService: ApiService, |     private apiService: ApiService, | ||||||
|     private formBuilder: FormBuilder, |     private formBuilder: UntypedFormBuilder, | ||||||
|     private storageService: StorageService, |     private storageService: StorageService, | ||||||
|     private zone: NgZone, |     private zone: NgZone, | ||||||
|     private route: ActivatedRoute, |     private route: ActivatedRoute, | ||||||
|  | |||||||
| @ -11,27 +11,27 @@ | |||||||
|     </div>   |     </div>   | ||||||
|    |    | ||||||
|     <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(statsObservable$ | async) as stats"> |     <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(statsObservable$ | async) as stats"> | ||||||
|       <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan"> |       <div class="btn-group btn-group-toggle" name="radioBasic"> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 4320"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 4320" [class.active]="radioGroupForm.get('dateSpan').value === '1m'"> | ||||||
|           <input ngbButton type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"> 1M |           <input type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]" formControlName="dateSpan"> 1M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 12960"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 12960" [class.active]="radioGroupForm.get('dateSpan').value === '3m'"> | ||||||
|           <input ngbButton type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"> 3M |           <input type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]" formControlName="dateSpan"> 3M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 25920"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 25920" [class.active]="radioGroupForm.get('dateSpan').value === '6m'"> | ||||||
|           <input ngbButton type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"> 6M |           <input type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]" formControlName="dateSpan"> 6M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 52560"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 52560" [class.active]="radioGroupForm.get('dateSpan').value === '1y'"> | ||||||
|           <input ngbButton type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"> 1Y |           <input type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]" formControlName="dateSpan"> 1Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 105120"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 105120" [class.active]="radioGroupForm.get('dateSpan').value === '2y'"> | ||||||
|           <input ngbButton type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"> 2Y |           <input type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]" formControlName="dateSpan"> 2Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 157680"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 157680" [class.active]="radioGroupForm.get('dateSpan').value === '3y'"> | ||||||
|           <input ngbButton type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"> 3Y |           <input type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]" formControlName="dateSpan"> 3Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm"> |         <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === 'all'"> | ||||||
|           <input ngbButton type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"> ALL |           <input type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"> ALL | ||||||
|         </label> |         </label> | ||||||
|       </div> |       </div> | ||||||
|     </form> |     </form> | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; | |||||||
| import { ApiService } from '../../services/api.service'; | import { ApiService } from '../../services/api.service'; | ||||||
| import { SeoService } from '../../services/seo.service'; | import { SeoService } from '../../services/seo.service'; | ||||||
| import { formatCurrency, formatNumber, getCurrencySymbol } from '@angular/common'; | import { formatCurrency, formatNumber, getCurrencySymbol } from '@angular/common'; | ||||||
| import { FormBuilder, FormGroup } from '@angular/forms'; | import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; | ||||||
| import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '../../shared/graphs.utils'; | import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '../../shared/graphs.utils'; | ||||||
| import { MiningService } from '../../services/mining.service'; | import { MiningService } from '../../services/mining.service'; | ||||||
| import { StorageService } from '../../services/storage.service'; | import { StorageService } from '../../services/storage.service'; | ||||||
| @ -31,7 +31,7 @@ export class BlockRewardsGraphComponent implements OnInit { | |||||||
|   @Input() left: number | string = 75; |   @Input() left: number | string = 75; | ||||||
| 
 | 
 | ||||||
|   miningWindowPreference: string; |   miningWindowPreference: string; | ||||||
|   radioGroupForm: FormGroup; |   radioGroupForm: UntypedFormGroup; | ||||||
| 
 | 
 | ||||||
|   chartOptions: EChartsOption = {}; |   chartOptions: EChartsOption = {}; | ||||||
|   chartInitOptions = { |   chartInitOptions = { | ||||||
| @ -48,7 +48,7 @@ export class BlockRewardsGraphComponent implements OnInit { | |||||||
|     @Inject(LOCALE_ID) public locale: string, |     @Inject(LOCALE_ID) public locale: string, | ||||||
|     private seoService: SeoService, |     private seoService: SeoService, | ||||||
|     private apiService: ApiService, |     private apiService: ApiService, | ||||||
|     private formBuilder: FormBuilder, |     private formBuilder: UntypedFormBuilder, | ||||||
|     private miningService: MiningService, |     private miningService: MiningService, | ||||||
|     private storageService: StorageService, |     private storageService: StorageService, | ||||||
|     private route: ActivatedRoute, |     private route: ActivatedRoute, | ||||||
|  | |||||||
| @ -9,36 +9,36 @@ | |||||||
|     </div>   |     </div>   | ||||||
| 
 | 
 | ||||||
|     <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(blockSizesWeightsObservable$ | async) as stats"> |     <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(blockSizesWeightsObservable$ | async) as stats"> | ||||||
|       <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan"> |       <div class="btn-group btn-group-toggle" name="radioBasic"> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 144"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 144" [class.active]="radioGroupForm.get('dateSpan').value === '24h'"> | ||||||
|           <input ngbButton type="radio" [value]="'24h'" fragment="24h" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> 24h |           <input type="radio" [value]="'24h'" fragment="24h" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]" formControlName="dateSpan"> 24h | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 432"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 432" [class.active]="radioGroupForm.get('dateSpan').value === '3d'"> | ||||||
|           <input ngbButton type="radio" [value]="'3d'" fragment="3d" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> 3D |           <input type="radio" [value]="'3d'" fragment="3d" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]" formControlName="dateSpan"> 3D | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 1008"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 1008" [class.active]="radioGroupForm.get('dateSpan').value === '1w'"> | ||||||
|           <input ngbButton type="radio" [value]="'1w'" fragment="1w" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> 1W |           <input type="radio" [value]="'1w'" fragment="1w" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]" formControlName="dateSpan"> 1W | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 4320"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 4320" [class.active]="radioGroupForm.get('dateSpan').value === '1m'"> | ||||||
|           <input ngbButton type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> 1M |           <input type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]" formControlName="dateSpan"> 1M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 12960"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 12960" [class.active]="radioGroupForm.get('dateSpan').value === '3m'"> | ||||||
|           <input ngbButton type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> 3M |           <input type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]" formControlName="dateSpan"> 3M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 25920"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 25920" [class.active]="radioGroupForm.get('dateSpan').value === '6m'"> | ||||||
|           <input ngbButton type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> 6M |           <input type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]" formControlName="dateSpan"> 6M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 52560"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 52560" [class.active]="radioGroupForm.get('dateSpan').value === '1y'"> | ||||||
|           <input ngbButton type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> 1Y |           <input type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]" formControlName="dateSpan"> 1Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 105120"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 105120" [class.active]="radioGroupForm.get('dateSpan').value === '2y'"> | ||||||
|           <input ngbButton type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> 2Y |           <input type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]" formControlName="dateSpan"> 2Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 157680"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 157680" [class.active]="radioGroupForm.get('dateSpan').value === '3y'"> | ||||||
|           <input ngbButton type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> 3Y |           <input type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]" formControlName="dateSpan"> 3Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm"> |         <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === 'all'"> | ||||||
|           <input ngbButton type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]"> ALL |           <input type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]" formControlName="dateSpan"> ALL | ||||||
|         </label> |         </label> | ||||||
|       </div> |       </div> | ||||||
|     </form> |     </form> | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; | |||||||
| import { ApiService } from '../../services/api.service'; | import { ApiService } from '../../services/api.service'; | ||||||
| import { SeoService } from '../../services/seo.service'; | import { SeoService } from '../../services/seo.service'; | ||||||
| import { formatNumber } from '@angular/common'; | import { formatNumber } from '@angular/common'; | ||||||
| import { FormBuilder, FormGroup } from '@angular/forms'; | import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; | ||||||
| import { StorageService } from '../../services/storage.service'; | import { StorageService } from '../../services/storage.service'; | ||||||
| import { MiningService } from '../../services/mining.service'; | import { MiningService } from '../../services/mining.service'; | ||||||
| import { ActivatedRoute } from '@angular/router'; | import { ActivatedRoute } from '@angular/router'; | ||||||
| @ -30,7 +30,7 @@ export class BlockSizesWeightsGraphComponent implements OnInit { | |||||||
|   @Input() left: number | string = 75; |   @Input() left: number | string = 75; | ||||||
| 
 | 
 | ||||||
|   miningWindowPreference: string; |   miningWindowPreference: string; | ||||||
|   radioGroupForm: FormGroup; |   radioGroupForm: UntypedFormGroup; | ||||||
| 
 | 
 | ||||||
|   chartOptions: EChartsOption = {}; |   chartOptions: EChartsOption = {}; | ||||||
|   chartInitOptions = { |   chartInitOptions = { | ||||||
| @ -49,7 +49,7 @@ export class BlockSizesWeightsGraphComponent implements OnInit { | |||||||
|     @Inject(LOCALE_ID) public locale: string, |     @Inject(LOCALE_ID) public locale: string, | ||||||
|     private seoService: SeoService, |     private seoService: SeoService, | ||||||
|     private apiService: ApiService, |     private apiService: ApiService, | ||||||
|     private formBuilder: FormBuilder, |     private formBuilder: UntypedFormBuilder, | ||||||
|     private storageService: StorageService, |     private storageService: StorageService, | ||||||
|     private miningService: MiningService, |     private miningService: MiningService, | ||||||
|     private route: ActivatedRoute, |     private route: ActivatedRoute, | ||||||
|  | |||||||
| @ -31,24 +31,24 @@ | |||||||
|     </div>   |     </div>   | ||||||
| 
 | 
 | ||||||
|     <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(hashrateObservable$ | async) as stats"> |     <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(hashrateObservable$ | async) as stats"> | ||||||
|       <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan"> |       <div class="btn-group btn-group-toggle" name="radioBasic"> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 12960"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 12960" [class.active]="radioGroupForm.get('dateSpan').value === '3m'"> | ||||||
|           <input ngbButton type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]" [attr.data-cy]="'3m'"> 3M |           <input type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]" [attr.data-cy]="'3m'" formControlName="dateSpan"> 3M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 25920"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 25920" [class.active]="radioGroupForm.get('dateSpan').value === '6m'"> | ||||||
|           <input ngbButton type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]" [attr.data-cy]="'6m'"> 6M |           <input type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]" [attr.data-cy]="'6m'" formControlName="dateSpan"> 6M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 52560"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 52560" [class.active]="radioGroupForm.get('dateSpan').value === '1y'"> | ||||||
|           <input ngbButton type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]" [attr.data-cy]="'1y'"> 1Y |           <input type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]" [attr.data-cy]="'1y'" formControlName="dateSpan"> 1Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 105120"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 105120" [class.active]="radioGroupForm.get('dateSpan').value === '2y'"> | ||||||
|           <input ngbButton type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]" [attr.data-cy]="'2y'"> 2Y |           <input type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]" [attr.data-cy]="'2y'" formControlName="dateSpan"> 2Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 157680"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 157680" [class.active]="radioGroupForm.get('dateSpan').value === '3y'"> | ||||||
|           <input ngbButton type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]" [attr.data-cy]="'3y'"> 3Y |           <input type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]" [attr.data-cy]="'3y'" formControlName="dateSpan"> 3Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm"> |         <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === 'all'"> | ||||||
|           <input ngbButton type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]" [attr.data-cy]="'all'"> ALL |           <input type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]" [attr.data-cy]="'all'" formControlName="dateSpan"> ALL | ||||||
|         </label> |         </label> | ||||||
|       </div> |       </div> | ||||||
|     </form> |     </form> | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; | |||||||
| import { ApiService } from '../../services/api.service'; | import { ApiService } from '../../services/api.service'; | ||||||
| import { SeoService } from '../../services/seo.service'; | import { SeoService } from '../../services/seo.service'; | ||||||
| import { formatNumber } from '@angular/common'; | import { formatNumber } from '@angular/common'; | ||||||
| import { FormBuilder, FormGroup } from '@angular/forms'; | import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; | ||||||
| import { selectPowerOfTen } from '../../bitcoin.utils'; | import { selectPowerOfTen } from '../../bitcoin.utils'; | ||||||
| import { StorageService } from '../../services/storage.service'; | import { StorageService } from '../../services/storage.service'; | ||||||
| import { MiningService } from '../../services/mining.service'; | import { MiningService } from '../../services/mining.service'; | ||||||
| @ -34,7 +34,7 @@ export class HashrateChartComponent implements OnInit { | |||||||
|   @Input() left: number | string = 75; |   @Input() left: number | string = 75; | ||||||
| 
 | 
 | ||||||
|   miningWindowPreference: string; |   miningWindowPreference: string; | ||||||
|   radioGroupForm: FormGroup; |   radioGroupForm: UntypedFormGroup; | ||||||
| 
 | 
 | ||||||
|   chartOptions: EChartsOption = {}; |   chartOptions: EChartsOption = {}; | ||||||
|   chartInitOptions = { |   chartInitOptions = { | ||||||
| @ -54,7 +54,7 @@ export class HashrateChartComponent implements OnInit { | |||||||
|     @Inject(LOCALE_ID) public locale: string, |     @Inject(LOCALE_ID) public locale: string, | ||||||
|     private seoService: SeoService, |     private seoService: SeoService, | ||||||
|     private apiService: ApiService, |     private apiService: ApiService, | ||||||
|     private formBuilder: FormBuilder, |     private formBuilder: UntypedFormBuilder, | ||||||
|     private storageService: StorageService, |     private storageService: StorageService, | ||||||
|     private miningService: MiningService, |     private miningService: MiningService, | ||||||
|     private route: ActivatedRoute, |     private route: ActivatedRoute, | ||||||
|  | |||||||
| @ -11,21 +11,21 @@ | |||||||
|     </div>   |     </div>   | ||||||
| 
 | 
 | ||||||
|     <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(hashrateObservable$ | async) as stats"> |     <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(hashrateObservable$ | async) as stats"> | ||||||
|       <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan"> |       <div class="btn-group btn-group-toggle" name="radioBasic"> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 25920"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 25920" [class.active]="radioGroupForm.get('dateSpan').value === '6m'"> | ||||||
|           <input ngbButton type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/pools-dominance' | relativeUrl]" [attr.data-cy]="'6m'"> 6M |           <input type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/pools-dominance' | relativeUrl]" [attr.data-cy]="'6m'" formControlName="dateSpan"> 6M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 52560"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 52560" [class.active]="radioGroupForm.get('dateSpan').value === '1y'"> | ||||||
|           <input ngbButton type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/pools-dominance' | relativeUrl]" [attr.data-cy]="'1y'"> 1Y |           <input type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/pools-dominance' | relativeUrl]" [attr.data-cy]="'1y'" formControlName="dateSpan"> 1Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 105120"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 105120" [class.active]="radioGroupForm.get('dateSpan').value === '2y'"> | ||||||
|           <input ngbButton type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/pools-dominance' | relativeUrl]" [attr.data-cy]="'2y'"> 2Y |           <input type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/pools-dominance' | relativeUrl]" [attr.data-cy]="'2y'" formControlName="dateSpan"> 2Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.blockCount >= 157680"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 157680" [class.active]="radioGroupForm.get('dateSpan').value === '3y'"> | ||||||
|           <input ngbButton type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/pools-dominance' | relativeUrl]" [attr.data-cy]="'3y'"> 3Y |           <input type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/pools-dominance' | relativeUrl]" [attr.data-cy]="'3y'" formControlName="dateSpan"> 3Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm"> |         <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === 'all'"> | ||||||
|           <input ngbButton type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/pools-dominance' | relativeUrl]" [attr.data-cy]="'all'"> ALL |           <input type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/pools-dominance' | relativeUrl]" [attr.data-cy]="'all'" formControlName="dateSpan"> ALL | ||||||
|         </label> |         </label> | ||||||
|       </div> |       </div> | ||||||
|     </form> |     </form> | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ import { Observable } from 'rxjs'; | |||||||
| import { delay, map, retryWhen, share, startWith, switchMap, tap } from 'rxjs/operators'; | import { delay, map, retryWhen, share, startWith, switchMap, tap } from 'rxjs/operators'; | ||||||
| import { ApiService } from '../../services/api.service'; | import { ApiService } from '../../services/api.service'; | ||||||
| import { SeoService } from '../../services/seo.service'; | import { SeoService } from '../../services/seo.service'; | ||||||
| import { FormBuilder, FormGroup } from '@angular/forms'; | import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; | ||||||
| import { poolsColor } from '../../app.constants'; | import { poolsColor } from '../../app.constants'; | ||||||
| import { StorageService } from '../../services/storage.service'; | import { StorageService } from '../../services/storage.service'; | ||||||
| import { MiningService } from '../../services/mining.service'; | import { MiningService } from '../../services/mining.service'; | ||||||
| @ -30,7 +30,7 @@ export class HashrateChartPoolsComponent implements OnInit { | |||||||
|   @Input() left: number | string = 25; |   @Input() left: number | string = 25; | ||||||
| 
 | 
 | ||||||
|   miningWindowPreference: string; |   miningWindowPreference: string; | ||||||
|   radioGroupForm: FormGroup; |   radioGroupForm: UntypedFormGroup; | ||||||
| 
 | 
 | ||||||
|   chartOptions: EChartsOption = {}; |   chartOptions: EChartsOption = {}; | ||||||
|   chartInitOptions = { |   chartInitOptions = { | ||||||
| @ -48,7 +48,7 @@ export class HashrateChartPoolsComponent implements OnInit { | |||||||
|     @Inject(LOCALE_ID) public locale: string, |     @Inject(LOCALE_ID) public locale: string, | ||||||
|     private seoService: SeoService, |     private seoService: SeoService, | ||||||
|     private apiService: ApiService, |     private apiService: ApiService, | ||||||
|     private formBuilder: FormBuilder, |     private formBuilder: UntypedFormBuilder, | ||||||
|     private cd: ChangeDetectorRef, |     private cd: ChangeDetectorRef, | ||||||
|     private storageService: StorageService, |     private storageService: StorageService, | ||||||
|     private miningService: MiningService, |     private miningService: MiningService, | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| import { DOCUMENT } from '@angular/common'; | import { DOCUMENT } from '@angular/common'; | ||||||
| import { ChangeDetectionStrategy, Component, Inject, OnInit } from '@angular/core'; | import { ChangeDetectionStrategy, Component, Inject, OnInit } from '@angular/core'; | ||||||
| import { FormBuilder, FormGroup } from '@angular/forms'; | import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; | ||||||
| import { languages } from '../../app.constants'; | import { languages } from '../../app.constants'; | ||||||
| import { LanguageService } from '../../services/language.service'; | import { LanguageService } from '../../services/language.service'; | ||||||
| 
 | 
 | ||||||
| @ -11,12 +11,12 @@ import { LanguageService } from '../../services/language.service'; | |||||||
|   changeDetection: ChangeDetectionStrategy.OnPush |   changeDetection: ChangeDetectionStrategy.OnPush | ||||||
| }) | }) | ||||||
| export class LanguageSelectorComponent implements OnInit { | export class LanguageSelectorComponent implements OnInit { | ||||||
|   languageForm: FormGroup; |   languageForm: UntypedFormGroup; | ||||||
|   languages = languages; |   languages = languages; | ||||||
| 
 | 
 | ||||||
|   constructor( |   constructor( | ||||||
|     @Inject(DOCUMENT) private document: Document, |     @Inject(DOCUMENT) private document: Document, | ||||||
|     private formBuilder: FormBuilder, |     private formBuilder: UntypedFormBuilder, | ||||||
|     private languageService: LanguageService, |     private languageService: LanguageService, | ||||||
|   ) { } |   ) { } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -17,8 +17,8 @@ import { | |||||||
| import { | import { | ||||||
|   AbstractControl, |   AbstractControl, | ||||||
|   ControlValueAccessor, |   ControlValueAccessor, | ||||||
|   FormBuilder, |   UntypedFormBuilder, | ||||||
|   FormControl, |   UntypedFormControl, | ||||||
|   NG_VALUE_ACCESSOR, |   NG_VALUE_ACCESSOR, | ||||||
|   Validator, |   Validator, | ||||||
| } from '@angular/forms'; | } from '@angular/forms'; | ||||||
| @ -52,7 +52,7 @@ export class NgxDropdownMultiselectComponent implements OnInit, | |||||||
|   private localIsVisible = false; |   private localIsVisible = false; | ||||||
|   private workerDocClicked = false; |   private workerDocClicked = false; | ||||||
| 
 | 
 | ||||||
|   filterControl: FormControl = this.fb.control(''); |   filterControl: UntypedFormControl = this.fb.control(''); | ||||||
| 
 | 
 | ||||||
|   @Input() options: Array<IMultiSelectOption>; |   @Input() options: Array<IMultiSelectOption>; | ||||||
|   @Input() settings: IMultiSelectSettings; |   @Input() settings: IMultiSelectSettings; | ||||||
| @ -151,7 +151,7 @@ export class NgxDropdownMultiselectComponent implements OnInit, | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   constructor( |   constructor( | ||||||
|     private fb: FormBuilder, |     private fb: UntypedFormBuilder, | ||||||
|     private searchFilter: MultiSelectSearchFilter, |     private searchFilter: MultiSelectSearchFilter, | ||||||
|     differs: IterableDiffers, |     differs: IterableDiffers, | ||||||
|     private cdRef: ChangeDetectorRef |     private cdRef: ChangeDetectorRef | ||||||
|  | |||||||
| @ -40,36 +40,36 @@ | |||||||
|     </div>   |     </div>   | ||||||
|     <form [formGroup]="radioGroupForm" class="formRadioGroup" |     <form [formGroup]="radioGroupForm" class="formRadioGroup" | ||||||
|       *ngIf="!widget && (miningStatsObservable$ | async) as stats"> |       *ngIf="!widget && (miningStatsObservable$ | async) as stats"> | ||||||
|       <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan"> |       <div class="btn-group btn-group-toggle" name="radioBasic"> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 144"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 144" [class.active]="radioGroupForm.get('dateSpan').value === '24h'"> | ||||||
|           <input ngbButton type="radio" [value]="'24h'" fragment="24h" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'24h'"> 24h |           <input type="radio" [value]="'24h'" fragment="24h" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'24h'" formControlName="dateSpan"> 24h | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 432"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 432" [class.active]="radioGroupForm.get('dateSpan').value === '3d'"> | ||||||
|           <input ngbButton type="radio" [value]="'3d'" fragment="3d" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'3d'"> 3D |           <input type="radio" [value]="'3d'" fragment="3d" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'3d'" formControlName="dateSpan"> 3D | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 1008"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 1008" [class.active]="radioGroupForm.get('dateSpan').value === '1w'"> | ||||||
|           <input ngbButton type="radio" [value]="'1w'" fragment="1w" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'1w'"> 1W |           <input type="radio" [value]="'1w'" fragment="1w" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'1w'" formControlName="dateSpan"> 1W | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 4320"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 4320" [class.active]="radioGroupForm.get('dateSpan').value === '1m'"> | ||||||
|           <input ngbButton type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'1m'"> 1M |           <input type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'1m'" formControlName="dateSpan"> 1M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 12960"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 12960" [class.active]="radioGroupForm.get('dateSpan').value === '3m'"> | ||||||
|           <input ngbButton type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'3m'"> 3M |           <input type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'3m'" formControlName="dateSpan"> 3M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 25920"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 25920" [class.active]="radioGroupForm.get('dateSpan').value === '6m'"> | ||||||
|           <input ngbButton type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'6m'"> 6M |           <input type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'6m'" formControlName="dateSpan"> 6M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 52560"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 52560" [class.active]="radioGroupForm.get('dateSpan').value === '1y'"> | ||||||
|           <input ngbButton type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'1y'"> 1Y |           <input type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'1y'" formControlName="dateSpan"> 1Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 105120"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 105120" [class.active]="radioGroupForm.get('dateSpan').value === '2y'"> | ||||||
|           <input ngbButton type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'2y'"> 2Y |           <input type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'2y'" formControlName="dateSpan"> 2Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 157680"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.totalBlockCount >= 157680" [class.active]="radioGroupForm.get('dateSpan').value === '3y'"> | ||||||
|           <input ngbButton type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'3y'"> 3Y |           <input type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'3y'" formControlName="dateSpan"> 3Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm"> |         <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === 'all'"> | ||||||
|           <input ngbButton type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'all'"><span i18n>All</span> |           <input type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/pools' | relativeUrl]" [attr.data-cy]="'all'" formControlName="dateSpan"><span i18n>All</span> | ||||||
|         </label> |         </label> | ||||||
|       </div> |       </div> | ||||||
|     </form> |     </form> | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import { ChangeDetectionStrategy, Component, Input, NgZone, OnInit, HostBinding } from '@angular/core'; | import { ChangeDetectionStrategy, Component, Input, NgZone, OnInit, HostBinding } from '@angular/core'; | ||||||
| import { FormBuilder, FormGroup } from '@angular/forms'; | import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; | ||||||
| import { ActivatedRoute, Router } from '@angular/router'; | import { ActivatedRoute, Router } from '@angular/router'; | ||||||
| import { EChartsOption, PieSeriesOption } from 'echarts'; | import { EChartsOption, PieSeriesOption } from 'echarts'; | ||||||
| import { concat, Observable } from 'rxjs'; | import { concat, Observable } from 'rxjs'; | ||||||
| @ -24,7 +24,7 @@ export class PoolRankingComponent implements OnInit { | |||||||
|   @Input() widget = false; |   @Input() widget = false; | ||||||
| 
 | 
 | ||||||
|   miningWindowPreference: string; |   miningWindowPreference: string; | ||||||
|   radioGroupForm: FormGroup; |   radioGroupForm: UntypedFormGroup; | ||||||
| 
 | 
 | ||||||
|   isLoading = true; |   isLoading = true; | ||||||
|   chartOptions: EChartsOption = {}; |   chartOptions: EChartsOption = {}; | ||||||
| @ -41,7 +41,7 @@ export class PoolRankingComponent implements OnInit { | |||||||
|   constructor( |   constructor( | ||||||
|     private stateService: StateService, |     private stateService: StateService, | ||||||
|     private storageService: StorageService, |     private storageService: StorageService, | ||||||
|     private formBuilder: FormBuilder, |     private formBuilder: UntypedFormBuilder, | ||||||
|     private miningService: MiningService, |     private miningService: MiningService, | ||||||
|     private seoService: SeoService, |     private seoService: SeoService, | ||||||
|     private router: Router, |     private router: Router, | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import { Component, OnInit } from '@angular/core'; | import { Component, OnInit } from '@angular/core'; | ||||||
| import { FormBuilder, FormGroup, Validators } from '@angular/forms'; | import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; | ||||||
| import { ApiService } from '../../services/api.service'; | import { ApiService } from '../../services/api.service'; | ||||||
| 
 | 
 | ||||||
| @Component({ | @Component({ | ||||||
| @ -8,13 +8,13 @@ import { ApiService } from '../../services/api.service'; | |||||||
|   styleUrls: ['./push-transaction.component.scss'] |   styleUrls: ['./push-transaction.component.scss'] | ||||||
| }) | }) | ||||||
| export class PushTransactionComponent implements OnInit { | export class PushTransactionComponent implements OnInit { | ||||||
|   pushTxForm: FormGroup; |   pushTxForm: UntypedFormGroup; | ||||||
|   error: string = ''; |   error: string = ''; | ||||||
|   txId: string = ''; |   txId: string = ''; | ||||||
|   isLoading = false; |   isLoading = false; | ||||||
| 
 | 
 | ||||||
|   constructor( |   constructor( | ||||||
|     private formBuilder: FormBuilder, |     private formBuilder: UntypedFormBuilder, | ||||||
|     private apiService: ApiService, |     private apiService: ApiService, | ||||||
|   ) { } |   ) { } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import { Component, OnInit, ChangeDetectionStrategy, EventEmitter, Output, ViewChild, HostListener, ElementRef } from '@angular/core'; | import { Component, OnInit, ChangeDetectionStrategy, EventEmitter, Output, ViewChild, HostListener, ElementRef } from '@angular/core'; | ||||||
| import { FormBuilder, FormGroup, Validators } from '@angular/forms'; | import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; | ||||||
| import { Router } from '@angular/router'; | import { Router } from '@angular/router'; | ||||||
| import { AssetsService } from '../../services/assets.service'; | import { AssetsService } from '../../services/assets.service'; | ||||||
| import { StateService } from '../../services/state.service'; | import { StateService } from '../../services/state.service'; | ||||||
| @ -22,7 +22,7 @@ export class SearchFormComponent implements OnInit { | |||||||
|   isSearching = false; |   isSearching = false; | ||||||
|   isTypeaheading$ = new BehaviorSubject<boolean>(false); |   isTypeaheading$ = new BehaviorSubject<boolean>(false); | ||||||
|   typeAhead$: Observable<any>; |   typeAhead$: Observable<any>; | ||||||
|   searchForm: FormGroup; |   searchForm: UntypedFormGroup; | ||||||
|   dropdownHidden = false; |   dropdownHidden = false; | ||||||
| 
 | 
 | ||||||
|   @HostListener('document:click', ['$event']) |   @HostListener('document:click', ['$event']) | ||||||
| @ -48,7 +48,7 @@ export class SearchFormComponent implements OnInit { | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   constructor( |   constructor( | ||||||
|     private formBuilder: FormBuilder, |     private formBuilder: UntypedFormBuilder, | ||||||
|     private router: Router, |     private router: Router, | ||||||
|     private assetsService: AssetsService, |     private assetsService: AssetsService, | ||||||
|     private stateService: StateService, |     private stateService: StateService, | ||||||
|  | |||||||
| @ -13,46 +13,46 @@ | |||||||
|           <form [formGroup]="radioGroupForm" class="formRadioGroup" |           <form [formGroup]="radioGroupForm" class="formRadioGroup" | ||||||
|             [class]="(stateService.env.MINING_DASHBOARD || stateService.env.LIGHTNING) ? 'mining' : 'no-menu'" (click)="saveGraphPreference()"> |             [class]="(stateService.env.MINING_DASHBOARD || stateService.env.LIGHTNING) ? 'mining' : 'no-menu'" (click)="saveGraphPreference()"> | ||||||
|             <div *ngIf="!isMobile()" class="btn-group btn-group-toggle"> |             <div *ngIf="!isMobile()" class="btn-group btn-group-toggle"> | ||||||
|               <label ngbButtonLabel class="btn-primary btn-sm mr-2"> |               <label class="btn btn-primary btn-sm mr-2"> | ||||||
|                 <a [routerLink]="['/tv' | relativeUrl]" style="color: white" id="btn-tv"> |                 <a [routerLink]="['/tv' | relativeUrl]" style="color: white" id="btn-tv"> | ||||||
|                   <fa-icon [icon]="['fas', 'tv']" [fixedWidth]="true" i18n-title="master-page.tvview" title="TV view"></fa-icon> |                   <fa-icon [icon]="['fas', 'tv']" [fixedWidth]="true" i18n-title="master-page.tvview" title="TV view"></fa-icon> | ||||||
|                 </a> |                 </a> | ||||||
|                 </label> |                 </label> | ||||||
|             </div> |             </div> | ||||||
|             <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan"> |             <div class="btn-group btn-group-toggle" name="radioBasic"> | ||||||
|               <label ngbButtonLabel class="btn-primary btn-sm"> |               <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === '2h'"> | ||||||
|                 <input ngbButton type="radio" [value]="'2h'" [routerLink]="['/graphs' | relativeUrl]" fragment="2h"> 2H |                 <input type="radio" [value]="'2h'" [routerLink]="['/graphs' | relativeUrl]" fragment="2h" formControlName="dateSpan"> 2H | ||||||
|                 (LIVE) |                 (LIVE) | ||||||
|               </label> |               </label> | ||||||
|               <label ngbButtonLabel class="btn-primary btn-sm"> |               <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === '24h'"> | ||||||
|                 <input ngbButton type="radio" [value]="'24h'" [routerLink]="['/graphs' | relativeUrl]" fragment="24h"> |                 <input type="radio" [value]="'24h'" [routerLink]="['/graphs' | relativeUrl]" fragment="24h" formControlName="dateSpan"> | ||||||
|                 24H |                 24H | ||||||
|               </label> |               </label> | ||||||
|               <label ngbButtonLabel class="btn-primary btn-sm"> |               <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === '1w'"> | ||||||
|                 <input ngbButton type="radio" [value]="'1w'" [routerLink]="['/graphs' | relativeUrl]" fragment="1w"> 1W |                 <input type="radio" [value]="'1w'" [routerLink]="['/graphs' | relativeUrl]" fragment="1w" formControlName="dateSpan"> 1W | ||||||
|               </label> |               </label> | ||||||
|               <label ngbButtonLabel class="btn-primary btn-sm"> |               <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === '1m'"> | ||||||
|                 <input ngbButton type="radio" [value]="'1m'" [routerLink]="['/graphs' | relativeUrl]" fragment="1m"> 1M |                 <input type="radio" [value]="'1m'" [routerLink]="['/graphs' | relativeUrl]" fragment="1m" formControlName="dateSpan"> 1M | ||||||
|               </label> |               </label> | ||||||
|               <label ngbButtonLabel class="btn-primary btn-sm"> |               <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === '3m'"> | ||||||
|                 <input ngbButton type="radio" [value]="'3m'" [routerLink]="['/graphs' | relativeUrl]" fragment="3m"> 3M |                 <input type="radio" [value]="'3m'" [routerLink]="['/graphs' | relativeUrl]" fragment="3m" formControlName="dateSpan"> 3M | ||||||
|               </label> |               </label> | ||||||
|               <label ngbButtonLabel class="btn-primary btn-sm"> |               <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === '6m'"> | ||||||
|                 <input ngbButton type="radio" [value]="'6m'" [routerLink]="['/graphs' | relativeUrl]" fragment="6m"> 6M |                 <input type="radio" [value]="'6m'" [routerLink]="['/graphs' | relativeUrl]" fragment="6m" formControlName="dateSpan"> 6M | ||||||
|               </label> |               </label> | ||||||
|               <label ngbButtonLabel class="btn-primary btn-sm"> |               <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === '1y'"> | ||||||
|                 <input ngbButton type="radio" [value]="'1y'" [routerLink]="['/graphs' | relativeUrl]" fragment="1y"> 1Y |                 <input type="radio" [value]="'1y'" [routerLink]="['/graphs' | relativeUrl]" fragment="1y" formControlName="dateSpan"> 1Y | ||||||
|               </label> |               </label> | ||||||
|               <label ngbButtonLabel class="btn-primary btn-sm"> |               <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === '2y'"> | ||||||
|                 <input ngbButton type="radio" [value]="'2y'" [routerLink]="['/graphs' | relativeUrl]" fragment="2y"> 2Y |                 <input type="radio" [value]="'2y'" [routerLink]="['/graphs' | relativeUrl]" fragment="2y" formControlName="dateSpan"> 2Y | ||||||
|               </label> |               </label> | ||||||
|               <label ngbButtonLabel class="btn-primary btn-sm"> |               <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === '3y'"> | ||||||
|                 <input ngbButton type="radio" [value]="'3y'" [routerLink]="['/graphs' | relativeUrl]" fragment="3y"> 3Y |                 <input type="radio" [value]="'3y'" [routerLink]="['/graphs' | relativeUrl]" fragment="3y" formControlName="dateSpan"> 3Y | ||||||
|               </label> |               </label> | ||||||
|             </div> |             </div> | ||||||
|             <div class="small-buttons"> |             <div class="small-buttons"> | ||||||
|               <div ngbDropdown #myDrop="ngbDropdown"> |               <div ngbDropdown #myDrop="ngbDropdown"> | ||||||
|                 <button class="btn btn-primary btn-sm" id="dropdownFees" ngbDropdownAnchor (click)="myDrop.toggle()"> |                 <button class="btn btn btn-primary btn-sm" id="dropdownFees" ngbDropdownAnchor (click)="myDrop.toggle()"> | ||||||
|                   <fa-icon [icon]="['fas', 'filter']" [fixedWidth]="true" i18n-title="statistics.component-filter.title" |                   <fa-icon [icon]="['fas', 'filter']" [fixedWidth]="true" i18n-title="statistics.component-filter.title" | ||||||
|                     title="Filter"></fa-icon> |                     title="Filter"></fa-icon> | ||||||
|                 </button> |                 </button> | ||||||
| @ -71,7 +71,7 @@ | |||||||
|                 </div> |                 </div> | ||||||
|               </div> |               </div> | ||||||
| 
 | 
 | ||||||
|               <button (click)="invertGraph()" class="btn btn-primary btn-sm"> |               <button (click)="invertGraph()" class="btn btn btn-primary btn-sm"> | ||||||
|                 <fa-icon [icon]="['fas', 'exchange-alt']" [rotate]="90" [fixedWidth]="true" |                 <fa-icon [icon]="['fas', 'exchange-alt']" [rotate]="90" [fixedWidth]="true" | ||||||
|                   i18n-title="statistics.component-invert.title" title="Invert"></fa-icon> |                   i18n-title="statistics.component-invert.title" title="Invert"></fa-icon> | ||||||
|               </button> |               </button> | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| import { Component, OnInit, LOCALE_ID, Inject, ViewChild, ElementRef } from '@angular/core'; | import { Component, OnInit, LOCALE_ID, Inject, ViewChild, ElementRef } from '@angular/core'; | ||||||
| import { ActivatedRoute } from '@angular/router'; | import { ActivatedRoute } from '@angular/router'; | ||||||
| import { FormGroup, FormBuilder } from '@angular/forms'; | import { UntypedFormGroup, UntypedFormBuilder } from '@angular/forms'; | ||||||
| import { of, merge} from 'rxjs'; | import { of, merge} from 'rxjs'; | ||||||
| import { switchMap } from 'rxjs/operators'; | import { switchMap } from 'rxjs/operators'; | ||||||
| 
 | 
 | ||||||
| @ -39,7 +39,7 @@ export class StatisticsComponent implements OnInit { | |||||||
|   mempoolUnconfirmedTransactionsData: any; |   mempoolUnconfirmedTransactionsData: any; | ||||||
|   mempoolTransactionsWeightPerSecondData: any; |   mempoolTransactionsWeightPerSecondData: any; | ||||||
| 
 | 
 | ||||||
|   radioGroupForm: FormGroup; |   radioGroupForm: UntypedFormGroup; | ||||||
|   graphWindowPreference: string; |   graphWindowPreference: string; | ||||||
|   inverted: boolean; |   inverted: boolean; | ||||||
|   feeLevelDropdownData = []; |   feeLevelDropdownData = []; | ||||||
| @ -47,7 +47,7 @@ export class StatisticsComponent implements OnInit { | |||||||
| 
 | 
 | ||||||
|   constructor( |   constructor( | ||||||
|     @Inject(LOCALE_ID) private locale: string, |     @Inject(LOCALE_ID) private locale: string, | ||||||
|     private formBuilder: FormBuilder, |     private formBuilder: UntypedFormBuilder, | ||||||
|     private route: ActivatedRoute, |     private route: ActivatedRoute, | ||||||
|     private websocketService: WebsocketService, |     private websocketService: WebsocketService, | ||||||
|     private apiService: ApiService, |     private apiService: ApiService, | ||||||
|  | |||||||
| @ -31,6 +31,7 @@ if (browserWindowEnv.BASE_MODULE && (browserWindowEnv.BASE_MODULE === 'bisq' || | |||||||
|   routes = [ |   routes = [ | ||||||
|     { |     { | ||||||
|       path: '', |       path: '', | ||||||
|  |       pathMatch: 'full', | ||||||
|       redirectTo: 'faq' |       redirectTo: 'faq' | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|  | |||||||
| @ -139,6 +139,7 @@ const routes: Routes = [ | |||||||
|           }, |           }, | ||||||
|           { |           { | ||||||
|             path: '', |             path: '', | ||||||
|  |             pathMatch: 'full', | ||||||
|             redirectTo: 'mempool', |             redirectTo: 'mempool', | ||||||
|           }, |           }, | ||||||
|           { |           { | ||||||
|  | |||||||
| @ -1,11 +1,11 @@ | |||||||
| <div *ngIf="channels$ | async as response; else skeleton" style="position: relative;"> | <div *ngIf="channels$ | async as response; else skeleton" style="position: relative;"> | ||||||
|   <form [formGroup]="channelStatusForm" class="formRadioGroup"> |   <form [formGroup]="channelStatusForm" class="formRadioGroup"> | ||||||
|     <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="status"> |     <div class="btn-group btn-group-toggle" name="radioBasic"> | ||||||
|       <label ngbButtonLabel class="btn-primary btn-sm"> |       <label class="btn btn-primary btn-sm" [class.active]="channelStatusForm.get('status').value === 'open'"> | ||||||
|         <input ngbButton type="radio" [value]="'open'" fragment="open"><span i18n="open">Open</span> |         <input type="radio" [value]="'open'" fragment="open" formControlName="status"><span i18n="open">Open</span> | ||||||
|       </label> |       </label> | ||||||
|       <label ngbButtonLabel class="btn-primary btn-sm"> |       <label class="btn btn-primary btn-sm" [class.active]="channelStatusForm.get('status').value === 'closed'"> | ||||||
|         <input ngbButton type="radio" [value]="'closed'" fragment="closed"><span i18n="closed">Closed</span> |         <input type="radio" [value]="'closed'" fragment="closed" formControlName="status"><span i18n="closed">Closed</span> | ||||||
|       </label> |       </label> | ||||||
|     </div> |     </div> | ||||||
|   </form> |   </form> | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core'; | import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core'; | ||||||
| import { FormBuilder, FormGroup } from '@angular/forms'; | import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; | ||||||
| import { BehaviorSubject, merge, Observable } from 'rxjs'; | import { BehaviorSubject, merge, Observable } from 'rxjs'; | ||||||
| import { map, switchMap, tap } from 'rxjs/operators'; | import { map, switchMap, tap } from 'rxjs/operators'; | ||||||
| import { isMobile } from '../../shared/common.utils'; | import { isMobile } from '../../shared/common.utils'; | ||||||
| @ -23,7 +23,7 @@ export class ChannelsListComponent implements OnInit, OnChanges { | |||||||
|   itemsPerPage = 10; |   itemsPerPage = 10; | ||||||
|   page = 1; |   page = 1; | ||||||
|   channelsPage$ = new BehaviorSubject<number>(1); |   channelsPage$ = new BehaviorSubject<number>(1); | ||||||
|   channelStatusForm: FormGroup; |   channelStatusForm: UntypedFormGroup; | ||||||
|   defaultStatus = 'open'; |   defaultStatus = 'open'; | ||||||
|   status = 'open'; |   status = 'open'; | ||||||
|   publicKeySize = 25; |   publicKeySize = 25; | ||||||
| @ -31,7 +31,7 @@ export class ChannelsListComponent implements OnInit, OnChanges { | |||||||
| 
 | 
 | ||||||
|   constructor( |   constructor( | ||||||
|     private lightningApiService: LightningApiService, |     private lightningApiService: LightningApiService, | ||||||
|     private formBuilder: FormBuilder, |     private formBuilder: UntypedFormBuilder, | ||||||
|   ) {  |   ) {  | ||||||
|     this.channelStatusForm = this.formBuilder.group({ |     this.channelStatusForm = this.formBuilder.group({ | ||||||
|       status: [this.defaultStatus], |       status: [this.defaultStatus], | ||||||
|  | |||||||
| @ -55,12 +55,12 @@ | |||||||
| 
 | 
 | ||||||
|   <div class="toggle-holder"> |   <div class="toggle-holder"> | ||||||
|     <form [formGroup]="socketToggleForm" class="formRadioGroup"> |     <form [formGroup]="socketToggleForm" class="formRadioGroup"> | ||||||
|       <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="socket"> |       <div class="btn-group btn-group-toggle" name="radioBasic"> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm"> |         <label class="btn btn-primary btn-sm" [class.active]="socketToggleForm.get('socket').value === 0"> | ||||||
|           <input ngbButton type="radio" [value]="0">IPv4 |           <input type="radio" [value]="0" formControlName="socket">IPv4 | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm"> |         <label class="btn btn-primary btn-sm" [class.active]="socketToggleForm.get('socket').value === 1"> | ||||||
|           <input ngbButton type="radio" [value]="1">IPv6 |           <input type="radio" [value]="1" formControlName="socket">IPv6 | ||||||
|         </label> |         </label> | ||||||
|       </div> |       </div> | ||||||
|     </form> |     </form> | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import { Component, OnInit } from '@angular/core'; | import { Component, OnInit } from '@angular/core'; | ||||||
| import { FormBuilder, FormGroup } from '@angular/forms'; | import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; | ||||||
| import { map, Observable, share } from 'rxjs'; | import { map, Observable, share } from 'rxjs'; | ||||||
| import { SeoService } from '../../services/seo.service'; | import { SeoService } from '../../services/seo.service'; | ||||||
| import { GeolocationData } from '../../shared/components/geolocation/geolocation.component'; | import { GeolocationData } from '../../shared/components/geolocation/geolocation.component'; | ||||||
| @ -17,12 +17,12 @@ export class GroupComponent implements OnInit { | |||||||
|   skeletonLines: number[] = []; |   skeletonLines: number[] = []; | ||||||
|   selectedSocketIndex = 0; |   selectedSocketIndex = 0; | ||||||
|   qrCodeVisible = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; |   qrCodeVisible = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; | ||||||
|   socketToggleForm: FormGroup; |   socketToggleForm: UntypedFormGroup; | ||||||
| 
 | 
 | ||||||
|   constructor( |   constructor( | ||||||
|     private lightningApiService: LightningApiService, |     private lightningApiService: LightningApiService, | ||||||
|     private seoService: SeoService, |     private seoService: SeoService, | ||||||
|     private formBuilder: FormBuilder, |     private formBuilder: UntypedFormBuilder, | ||||||
|   ) { |   ) { | ||||||
|     for (let i = 0; i < 20; ++i) { |     for (let i = 0; i < 20; ++i) { | ||||||
|       this.skeletonLines.push(i); |       this.skeletonLines.push(i); | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ import { EChartsOption } from 'echarts'; | |||||||
| import { Observable } from 'rxjs'; | import { Observable } from 'rxjs'; | ||||||
| import { switchMap, tap } from 'rxjs/operators'; | import { switchMap, tap } from 'rxjs/operators'; | ||||||
| import { formatNumber } from '@angular/common'; | import { formatNumber } from '@angular/common'; | ||||||
| import { FormGroup } from '@angular/forms'; | import { UntypedFormGroup } from '@angular/forms'; | ||||||
| import { StorageService } from '../../services/storage.service'; | import { StorageService } from '../../services/storage.service'; | ||||||
| import { download } from '../../shared/graphs.utils'; | import { download } from '../../shared/graphs.utils'; | ||||||
| import { LightningApiService } from '../lightning-api.service'; | import { LightningApiService } from '../lightning-api.service'; | ||||||
| @ -29,7 +29,7 @@ export class NodeStatisticsChartComponent implements OnInit { | |||||||
|   @Input() widget = false; |   @Input() widget = false; | ||||||
| 
 | 
 | ||||||
|   miningWindowPreference: string; |   miningWindowPreference: string; | ||||||
|   radioGroupForm: FormGroup; |   radioGroupForm: UntypedFormGroup; | ||||||
| 
 | 
 | ||||||
|   chartOptions: EChartsOption = {}; |   chartOptions: EChartsOption = {}; | ||||||
|   chartInitOptions = { |   chartInitOptions = { | ||||||
|  | |||||||
| @ -9,27 +9,27 @@ | |||||||
|     </div>   |     </div>   | ||||||
| 
 | 
 | ||||||
|     <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(nodesNetworkObservable$ | async) as stats"> |     <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(nodesNetworkObservable$ | async) as stats"> | ||||||
|       <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan"> |       <div class="btn-group btn-group-toggle" name="radioBasic"> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.days >= 30"> |         <label  class="btn btn-primary btn-sm" *ngIf="stats.days >= 30" [class.active]="radioGroupForm.get('dateSpan').value === '1m'"> | ||||||
|           <input ngbButton type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/lightning/nodes-networks' | relativeUrl]"> 1M |           <input type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/lightning/nodes-networks' | relativeUrl]" formControlName="dateSpan"> 1M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.days >= 90"> |         <label  class="btn btn-primary btn-sm" *ngIf="stats.days >= 90" [class.active]="radioGroupForm.get('dateSpan').value === '3d'"> | ||||||
|           <input ngbButton type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/lightning/nodes-networks' | relativeUrl]"> 3M |           <input type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/lightning/nodes-networks' | relativeUrl]" formControlName="dateSpan"> 3M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.days >= 180"> |         <label  class="btn btn-primary btn-sm" *ngIf="stats.days >= 180" [class.active]="radioGroupForm.get('dateSpan').value === '6m'"> | ||||||
|           <input ngbButton type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/lightning/nodes-networks' | relativeUrl]"> 6M |           <input type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/lightning/nodes-networks' | relativeUrl]" formControlName="dateSpan"> 6M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.days >= 365"> |         <label  class="btn btn-primary btn-sm" *ngIf="stats.days >= 365" [class.active]="radioGroupForm.get('dateSpan').value === '1y'"> | ||||||
|           <input ngbButton type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/lightning/nodes-networks' | relativeUrl]"> 1Y |           <input type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/lightning/nodes-networks' | relativeUrl]" formControlName="dateSpan"> 1Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.days >= 730"> |         <label  class="btn btn-primary btn-sm" *ngIf="stats.days >= 730" [class.active]="radioGroupForm.get('dateSpan').value === '2y'"> | ||||||
|           <input ngbButton type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/lightning/nodes-networks' | relativeUrl]"> 2Y |           <input type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/lightning/nodes-networks' | relativeUrl]" formControlName="dateSpan"> 2Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.days >= 1095"> |         <label  class="btn btn-primary btn-sm" *ngIf="stats.days >= 1095" [class.active]="radioGroupForm.get('dateSpan').value === '3y'"> | ||||||
|           <input ngbButton type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/lightning/nodes-networks' | relativeUrl]"> 3Y |           <input type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/lightning/nodes-networks' | relativeUrl]" formControlName="dateSpan"> 3Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm"> |         <label  class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === 'all'"> | ||||||
|           <input ngbButton type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/lightning/nodes-networks' | relativeUrl]"> ALL |           <input type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/lightning/nodes-networks' | relativeUrl]" formControlName="dateSpan"> ALL | ||||||
|         </label> |         </label> | ||||||
|       </div> |       </div> | ||||||
|     </form> |     </form> | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ import { EChartsOption, graphic, LineSeriesOption} from 'echarts'; | |||||||
| import { Observable } from 'rxjs'; | import { Observable } from 'rxjs'; | ||||||
| import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; | import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; | ||||||
| import { formatNumber } from '@angular/common'; | import { formatNumber } from '@angular/common'; | ||||||
| import { FormBuilder, FormGroup } from '@angular/forms'; | import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; | ||||||
| import { StorageService } from '../../services/storage.service'; | import { StorageService } from '../../services/storage.service'; | ||||||
| import { MiningService } from '../../services/mining.service'; | import { MiningService } from '../../services/mining.service'; | ||||||
| import { download } from '../../shared/graphs.utils'; | import { download } from '../../shared/graphs.utils'; | ||||||
| @ -32,7 +32,7 @@ export class NodesNetworksChartComponent implements OnInit { | |||||||
|   @Input() widget = false; |   @Input() widget = false; | ||||||
| 
 | 
 | ||||||
|   miningWindowPreference: string; |   miningWindowPreference: string; | ||||||
|   radioGroupForm: FormGroup; |   radioGroupForm: UntypedFormGroup; | ||||||
| 
 | 
 | ||||||
|   chartOptions: EChartsOption = {}; |   chartOptions: EChartsOption = {}; | ||||||
|   chartInitOptions = { |   chartInitOptions = { | ||||||
| @ -51,7 +51,7 @@ export class NodesNetworksChartComponent implements OnInit { | |||||||
|     @Inject(LOCALE_ID) public locale: string, |     @Inject(LOCALE_ID) public locale: string, | ||||||
|     private seoService: SeoService, |     private seoService: SeoService, | ||||||
|     private lightningApiService: LightningApiService, |     private lightningApiService: LightningApiService, | ||||||
|     private formBuilder: FormBuilder, |     private formBuilder: UntypedFormBuilder, | ||||||
|     private storageService: StorageService, |     private storageService: StorageService, | ||||||
|     private miningService: MiningService, |     private miningService: MiningService, | ||||||
|     private amountShortenerPipe: AmountShortenerPipe, |     private amountShortenerPipe: AmountShortenerPipe, | ||||||
|  | |||||||
| @ -9,34 +9,34 @@ | |||||||
|     </div> |     </div> | ||||||
| 
 | 
 | ||||||
|     <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(capacityObservable$ | async) as stats"> |     <form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(capacityObservable$ | async) as stats"> | ||||||
|       <div class="btn-group btn-group-toggle" ngbRadioGroup name="radioBasic" formControlName="dateSpan"> |       <div class="btn-group btn-group-toggle" name="radioBasic"> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.days >= 30"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.days >= 30" [class.active]="radioGroupForm.get('dateSpan').value === '1m'"> | ||||||
|           <input ngbButton type="radio" [value]="'1m'" fragment="1m" |           <input type="radio" [value]="'1m'" fragment="1m" | ||||||
|             [routerLink]="['/graphs/lightning/capacity' | relativeUrl]"> 1M |             [routerLink]="['/graphs/lightning/capacity' | relativeUrl]" formControlName="dateSpan"> 1M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.days >= 90"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.days >= 90" [class.active]="radioGroupForm.get('dateSpan').value === '3m'"> | ||||||
|           <input ngbButton type="radio" [value]="'3m'" fragment="3m" |           <input type="radio" [value]="'3m'" fragment="3m" | ||||||
|             [routerLink]="['/graphs/lightning/capacity' | relativeUrl]"> 3M |             [routerLink]="['/graphs/lightning/capacity' | relativeUrl]" formControlName="dateSpan"> 3M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.days >= 180"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.days >= 180" [class.active]="radioGroupForm.get('dateSpan').value === '6m'"> | ||||||
|           <input ngbButton type="radio" [value]="'6m'" fragment="6m" |           <input type="radio" [value]="'6m'" fragment="6m" | ||||||
|             [routerLink]="['/graphs/lightning/capacity' | relativeUrl]"> 6M |             [routerLink]="['/graphs/lightning/capacity' | relativeUrl]" formControlName="dateSpan"> 6M | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.days >= 365"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.days >= 365" [class.active]="radioGroupForm.get('dateSpan').value === '1y'"> | ||||||
|           <input ngbButton type="radio" [value]="'1y'" fragment="1y" |           <input type="radio" [value]="'1y'" fragment="1y" | ||||||
|             [routerLink]="['/graphs/lightning/capacity' | relativeUrl]"> 1Y |             [routerLink]="['/graphs/lightning/capacity' | relativeUrl]" formControlName="dateSpan"> 1Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.days >= 730"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.days >= 730" [class.active]="radioGroupForm.get('dateSpan').value === '2y'"> | ||||||
|           <input ngbButton type="radio" [value]="'2y'" fragment="2y" |           <input type="radio" [value]="'2y'" fragment="2y" | ||||||
|             [routerLink]="['/graphs/lightning/capacity' | relativeUrl]"> 2Y |             [routerLink]="['/graphs/lightning/capacity' | relativeUrl]" formControlName="dateSpan"> 2Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm" *ngIf="stats.days >= 1095"> |         <label class="btn btn-primary btn-sm" *ngIf="stats.days >= 1095" [class.active]="radioGroupForm.get('dateSpan').value === '3y'"> | ||||||
|           <input ngbButton type="radio" [value]="'3y'" fragment="3y" |           <input type="radio" [value]="'3y'" fragment="3y" | ||||||
|             [routerLink]="['/graphs/lightning/capacity' | relativeUrl]"> 3Y |             [routerLink]="['/graphs/lightning/capacity' | relativeUrl]" formControlName="dateSpan"> 3Y | ||||||
|         </label> |         </label> | ||||||
|         <label ngbButtonLabel class="btn-primary btn-sm"> |         <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === 'all'"> | ||||||
|           <input ngbButton type="radio" [value]="'all'" fragment="all" |           <input type="radio" [value]="'all'" fragment="all" | ||||||
|             [routerLink]="['/graphs/lightning/capacity' | relativeUrl]"> ALL |             [routerLink]="['/graphs/lightning/capacity' | relativeUrl]" formControlName="dateSpan"> ALL | ||||||
|         </label> |         </label> | ||||||
|       </div> |       </div> | ||||||
|     </form> |     </form> | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ import { Observable } from 'rxjs'; | |||||||
| import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; | import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; | ||||||
| import { SeoService } from '../../services/seo.service'; | import { SeoService } from '../../services/seo.service'; | ||||||
| import { formatNumber } from '@angular/common'; | import { formatNumber } from '@angular/common'; | ||||||
| import { FormBuilder, FormGroup } from '@angular/forms'; | import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; | ||||||
| import { StorageService } from '../../services/storage.service'; | import { StorageService } from '../../services/storage.service'; | ||||||
| import { MiningService } from '../../services/mining.service'; | import { MiningService } from '../../services/mining.service'; | ||||||
| import { download } from '../../shared/graphs.utils'; | import { download } from '../../shared/graphs.utils'; | ||||||
| @ -31,7 +31,7 @@ export class LightningStatisticsChartComponent implements OnInit { | |||||||
|   @Input() widget = false; |   @Input() widget = false; | ||||||
| 
 | 
 | ||||||
|   miningWindowPreference: string; |   miningWindowPreference: string; | ||||||
|   radioGroupForm: FormGroup; |   radioGroupForm: UntypedFormGroup; | ||||||
| 
 | 
 | ||||||
|   chartOptions: EChartsOption = {}; |   chartOptions: EChartsOption = {}; | ||||||
|   chartInitOptions = { |   chartInitOptions = { | ||||||
| @ -50,7 +50,7 @@ export class LightningStatisticsChartComponent implements OnInit { | |||||||
|     @Inject(LOCALE_ID) public locale: string, |     @Inject(LOCALE_ID) public locale: string, | ||||||
|     private seoService: SeoService, |     private seoService: SeoService, | ||||||
|     private lightningApiService: LightningApiService, |     private lightningApiService: LightningApiService, | ||||||
|     private formBuilder: FormBuilder, |     private formBuilder: UntypedFormBuilder, | ||||||
|     private storageService: StorageService, |     private storageService: StorageService, | ||||||
|     private miningService: MiningService, |     private miningService: MiningService, | ||||||
|     private amountShortenerPipe: AmountShortenerPipe, |     private amountShortenerPipe: AmountShortenerPipe, | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| import { NgModule } from '@angular/core'; | import { NgModule } from '@angular/core'; | ||||||
| import { CommonModule } from '@angular/common'; | import { CommonModule } from '@angular/common'; | ||||||
| import { NgbCollapse, NgbCollapseModule, NgbRadioGroup, NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap'; | import { NgbCollapseModule, NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap'; | ||||||
| import { FontAwesomeModule, FaIconLibrary } from '@fortawesome/angular-fontawesome'; | import { FontAwesomeModule, FaIconLibrary } from '@fortawesome/angular-fontawesome'; | ||||||
| import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, faChartArea, faCogs, faCubes, faHammer, faDatabase, faExchangeAlt, faInfoCircle, | import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, faChartArea, faCogs, faCubes, faHammer, faDatabase, faExchangeAlt, faInfoCircle, | ||||||
|   faLink, faList, faSearch, faCaretUp, faCaretDown, faTachometerAlt, faThList, faTint, faTv, faAngleDoubleDown, faSortUp, faAngleDoubleUp, faChevronDown, |   faLink, faList, faSearch, faCaretUp, faCaretDown, faTachometerAlt, faThList, faTint, faTv, faAngleDoubleDown, faSortUp, faAngleDoubleUp, faChevronDown, | ||||||
| @ -29,7 +29,7 @@ import { TimeUntilComponent } from '../components/time-until/time-until.componen | |||||||
| import { ClipboardComponent } from '../components/clipboard/clipboard.component'; | import { ClipboardComponent } from '../components/clipboard/clipboard.component'; | ||||||
| import { QrcodeComponent } from '../components/qrcode/qrcode.component'; | import { QrcodeComponent } from '../components/qrcode/qrcode.component'; | ||||||
| import { FiatComponent } from '../fiat/fiat.component'; | import { FiatComponent } from '../fiat/fiat.component'; | ||||||
| import { NgbNavModule, NgbTooltipModule, NgbButtonsModule, NgbPaginationModule, NgbDropdownModule, NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap'; | import { NgbNavModule, NgbTooltipModule, NgbPaginationModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; | ||||||
| import { TxFeaturesComponent } from '../components/tx-features/tx-features.component'; | import { TxFeaturesComponent } from '../components/tx-features/tx-features.component'; | ||||||
| import { TxFeeRatingComponent } from '../components/tx-fee-rating/tx-fee-rating.component'; | import { TxFeeRatingComponent } from '../components/tx-fee-rating/tx-fee-rating.component'; | ||||||
| import { ReactiveFormsModule } from '@angular/forms'; | import { ReactiveFormsModule } from '@angular/forms'; | ||||||
| @ -163,7 +163,6 @@ import { GeolocationComponent } from '../shared/components/geolocation/geolocati | |||||||
|     ReactiveFormsModule, |     ReactiveFormsModule, | ||||||
|     NgbNavModule, |     NgbNavModule, | ||||||
|     NgbTooltipModule, |     NgbTooltipModule, | ||||||
|     NgbButtonsModule, |  | ||||||
|     NgbPaginationModule, |     NgbPaginationModule, | ||||||
|     NgbTypeaheadModule, |     NgbTypeaheadModule, | ||||||
|     NgbDropdownModule, |     NgbDropdownModule, | ||||||
| @ -184,7 +183,6 @@ import { GeolocationComponent } from '../shared/components/geolocation/geolocati | |||||||
|     ReactiveFormsModule, |     ReactiveFormsModule, | ||||||
|     NgbNavModule, |     NgbNavModule, | ||||||
|     NgbTooltipModule, |     NgbTooltipModule, | ||||||
|     NgbButtonsModule, |  | ||||||
|     NgbPaginationModule, |     NgbPaginationModule, | ||||||
|     NgbTypeaheadModule, |     NgbTypeaheadModule, | ||||||
|     NgbDropdownModule, |     NgbDropdownModule, | ||||||
|  | |||||||
| @ -1,16 +0,0 @@ | |||||||
| /*************************************************************************************************** |  | ||||||
|  * Load `$localize` onto the global scope - used if i18n tags appear in Angular templates. |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| import '@angular/localize/init'; |  | ||||||
| 
 |  | ||||||
| import { enableProdMode } from '@angular/core'; |  | ||||||
| 
 |  | ||||||
| import { environment } from './environments/environment'; |  | ||||||
| 
 |  | ||||||
| if (environment.production) { |  | ||||||
|   enableProdMode(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| export { AppServerModule } from './app/app.server.module'; |  | ||||||
| export { renderModule, renderModuleFactory } from '@angular/platform-server'; |  | ||||||
| @ -1073,3 +1073,7 @@ th { | |||||||
| #divider { | #divider { | ||||||
|   background-image: url("data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='104%25' height='100%25' fill='none' stroke='white' stroke-width='4' stroke-dasharray='10%2c17' stroke-dashoffset='18' stroke-linecap='square'/%3e%3c/svg%3e"); |   background-image: url("data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='104%25' height='100%25' fill='none' stroke='white' stroke-width='4' stroke-dasharray='10%2c17' stroke-dashoffset='18' stroke-linecap='square'/%3e%3c/svg%3e"); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | .visually-hidden { | ||||||
|  |   display: none; | ||||||
|  | } | ||||||
|  | |||||||
| @ -1,18 +0,0 @@ | |||||||
| /* To learn more about this file see: https://angular.io/config/tsconfig. */ |  | ||||||
| { |  | ||||||
|   "extends": "./tsconfig.app.json", |  | ||||||
|   "compilerOptions": { |  | ||||||
|     "outDir": "./out-tsc/server", |  | ||||||
|     "target": "es2015", |  | ||||||
|     "types": [ |  | ||||||
|       "node" |  | ||||||
|     ] |  | ||||||
|   }, |  | ||||||
|   "files": [ |  | ||||||
|     "src/main.server.ts", |  | ||||||
|     "server.ts" |  | ||||||
|   ], |  | ||||||
|   "angularCompilerOptions": { |  | ||||||
|     "entryModule": "./src/app/app.server.module#AppServerModule" |  | ||||||
|   } |  | ||||||
| } |  | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user