Format docs using linter and prettier.

This commit is contained in:
Spencer Ofwiti 2021-05-11 20:51:48 +03:00
parent 5228842e61
commit 208c448984
309 changed files with 11327 additions and 3307 deletions

View File

@ -682,7 +682,7 @@ Returns &quot;true&quot; for available and &quot;false&quot; otherwise.</p>
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import Web3 from &#x27;web3&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import Web3 from &#x27;web3&#x27;;
// Application imports // Application imports
import {environment} from &#x27;@src/environments/environment&#x27;; import { environment } from &#x27;@src/environments/environment&#x27;;
/** Fetch the account registry contract&#x27;s ABI. */ /** Fetch the account registry contract&#x27;s ABI. */
const abi: Array&lt;any&gt; &#x3D; require(&#x27;@src/assets/js/block-sync/data/AccountRegistry.json&#x27;); const abi: Array&lt;any&gt; &#x3D; require(&#x27;@src/assets/js/block-sync/data/AccountRegistry.json&#x27;);
@ -735,8 +735,8 @@ export class AccountIndex {
* @returns true - If registration is successful or account had already been registered. * @returns true - If registration is successful or account had already been registered.
*/ */
public async addToAccountRegistry(address: string): Promise&lt;boolean&gt; { public async addToAccountRegistry(address: string): Promise&lt;boolean&gt; {
if (!await this.haveAccount(address)) { if (!(await this.haveAccount(address))) {
return await this.contract.methods.add(address).send({from: this.signerAddress}); return await this.contract.methods.add(address).send({ from: this.signerAddress });
} }
return true; return true;
} }
@ -756,7 +756,7 @@ export class AccountIndex {
* @returns true - If the address has been registered in the accounts registry. * @returns true - If the address has been registered in the accounts registry.
*/ */
public async haveAccount(address: string): Promise&lt;boolean&gt; { public async haveAccount(address: string): Promise&lt;boolean&gt; {
return await this.contract.methods.accountIndex(address).call() !&#x3D;&#x3D; 0; return (await this.contract.methods.accountIndex(address).call()) !&#x3D;&#x3D; 0;
} }
/** /**

View File

@ -260,7 +260,7 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {AccountDetails} from &#x27;@app/_models/account&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { AccountDetails } from &#x27;@app/_models/account&#x27;;
class BlocksBloom { class BlocksBloom {
low: number; low: number;
@ -305,13 +305,7 @@ class Conversion {
tx: Tx; tx: Tx;
} }
export { export { BlocksBloom, TxToken, Tx, Transaction, Conversion };
BlocksBloom,
TxToken,
Tx,
Transaction,
Conversion
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -320,7 +320,7 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {AccountDetails} from &#x27;@app/_models/account&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { AccountDetails } from &#x27;@app/_models/account&#x27;;
class BlocksBloom { class BlocksBloom {
low: number; low: number;
@ -365,13 +365,7 @@ class Conversion {
tx: Tx; tx: Tx;
} }
export { export { BlocksBloom, TxToken, Tx, Transaction, Conversion };
BlocksBloom,
TxToken,
Tx,
Transaction,
Conversion
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -79,11 +79,6 @@
<code>ErrorStateMatcher</code> <code>ErrorStateMatcher</code>
</p> </p>
<p class="comment">
<h3>Example</h3>
</p>
<div class="io-description">
</div>
<section> <section>
<h3 id="index">Index</h3> <h3 id="index">Index</h3>
@ -142,8 +137,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="18" <div class="io-line">Defined in <a href="" data-line="17"
class="link-to-prism">src/app/_helpers/custom-error-state-matcher.ts:18</a></div> class="link-to-prism">src/app/_helpers/custom-error-state-matcher.ts:17</a></div>
</td> </td>
</tr> </tr>
@ -228,15 +223,14 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {FormControl, FormGroupDirective, NgForm} from &#x27;@angular/forms&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { ErrorStateMatcher } from &#x27;@angular/material/core&#x27;;
import {ErrorStateMatcher} from &#x27;@angular/material/core&#x27;; import { FormControl, FormGroupDirective, NgForm } from &#x27;@angular/forms&#x27;;
/** /**
* Custom provider that defines how form controls behave with regards to displaying error messages. * Custom provider that defines how form controls behave with regards to displaying error messages.
* *
* @implements ErrorStateMatcher
*/ */
export class CustomErrorStateMatcher implements ErrorStateMatcher{ export class CustomErrorStateMatcher implements ErrorStateMatcher {
/** /**
* Checks whether an invalid input has been made and an error should be made. * Checks whether an invalid input has been made and an error should be made.
* *

View File

@ -305,7 +305,7 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {AbstractControl, ValidationErrors} from &#x27;@angular/forms&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { AbstractControl, ValidationErrors } from &#x27;@angular/forms&#x27;;
/** /**
* Provides methods to perform custom validation to form inputs. * Provides methods to perform custom validation to form inputs.

View File

@ -241,12 +241,12 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {HttpErrorResponse} from &#x27;@angular/common/http&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { HttpErrorResponse } from &#x27;@angular/common/http&#x27;;
import {ErrorHandler, Injectable} from &#x27;@angular/core&#x27;; import { ErrorHandler, Injectable } from &#x27;@angular/core&#x27;;
import {Router} from &#x27;@angular/router&#x27;; import { Router } from &#x27;@angular/router&#x27;;
// Application imports // Application imports
import {LoggingService} from &#x27;@app/_services/logging.service&#x27;; import { LoggingService } from &#x27;@app/_services/logging.service&#x27;;
/** /**
* A generalized http response error. * A generalized http response error.
@ -279,7 +279,6 @@ export class HttpError extends Error {
export class GlobalErrorHandler extends ErrorHandler { export class GlobalErrorHandler extends ErrorHandler {
/** /**
* An array of sentence sections that denote warnings. * An array of sentence sections that denote warnings.
* @private
*/ */
private sentencesForWarningLogging: Array&lt;string&gt; &#x3D; []; private sentencesForWarningLogging: Array&lt;string&gt; &#x3D; [];
@ -289,10 +288,7 @@ export class GlobalErrorHandler extends ErrorHandler {
* @param loggingService - A service that provides logging capabilities. * @param loggingService - A service that provides logging capabilities.
* @param router - A service that provides navigation among views and URL manipulation capabilities. * @param router - A service that provides navigation among views and URL manipulation capabilities.
*/ */
constructor( constructor(private loggingService: LoggingService, private router: Router) {
private loggingService: LoggingService,
private router: Router
) {
super(); super();
} }
@ -313,9 +309,9 @@ export class GlobalErrorHandler extends ErrorHandler {
const isWarning: boolean &#x3D; this.isWarning(errorTraceString); const isWarning: boolean &#x3D; this.isWarning(errorTraceString);
if (isWarning) { if (isWarning) {
this.loggingService.sendWarnLevelMessage(errorTraceString, {error}); this.loggingService.sendWarnLevelMessage(errorTraceString, { error });
} else { } else {
this.loggingService.sendErrorLevelMessage(errorTraceString, this, {error}); this.loggingService.sendErrorLevelMessage(errorTraceString, this, { error });
} }
throw error; throw error;
@ -326,7 +322,6 @@ export class GlobalErrorHandler extends ErrorHandler {
* *
* @param errorTraceString - A description of the error and it&#x27;s stack trace. * @param errorTraceString - A description of the error and it&#x27;s stack trace.
* @returns true - If the error is of type warning. * @returns true - If the error is of type warning.
* @private
*/ */
private isWarning(errorTraceString: string): boolean { private isWarning(errorTraceString: string): boolean {
let isWarning: boolean &#x3D; true; let isWarning: boolean &#x3D; true;
@ -352,14 +347,30 @@ export class GlobalErrorHandler extends ErrorHandler {
const route: string &#x3D; this.router.url; const route: string &#x3D; this.router.url;
if (error instanceof HttpErrorResponse) { if (error instanceof HttpErrorResponse) {
this.loggingService.sendErrorLevelMessage( this.loggingService.sendErrorLevelMessage(
&#x60;There was an HTTP error on route ${route}.\n${error.message}.\nStatus code: ${(error as HttpErrorResponse).status}&#x60;, &#x60;There was an HTTP error on route ${route}.\n${error.message}.\nStatus code: ${
this, {error}); (error as HttpErrorResponse).status
}&#x60;,
this,
{ error }
);
} else if (error instanceof TypeError) { } else if (error instanceof TypeError) {
this.loggingService.sendErrorLevelMessage(&#x60;There was a Type error on route ${route}.\n${error.message}&#x60;, this, {error}); this.loggingService.sendErrorLevelMessage(
&#x60;There was a Type error on route ${route}.\n${error.message}&#x60;,
this,
{ error }
);
} else if (error instanceof Error) { } else if (error instanceof Error) {
this.loggingService.sendErrorLevelMessage(&#x60;There was a general error on route ${route}.\n${error.message}&#x60;, this, {error}); this.loggingService.sendErrorLevelMessage(
&#x60;There was a general error on route ${route}.\n${error.message}&#x60;,
this,
{ error }
);
} else { } else {
this.loggingService.sendErrorLevelMessage(&#x60;Nobody threw an error but something happened on route ${route}!&#x60;, this, {error}); this.loggingService.sendErrorLevelMessage(
&#x60;Nobody threw an error but something happened on route ${route}!&#x60;,
this,
{ error }
);
} }
} }
} }

View File

@ -72,11 +72,6 @@
<code><a href="../interfaces/MutableKeyStore.html" target="_self" >MutableKeyStore</a></code> <code><a href="../interfaces/MutableKeyStore.html" target="_self" >MutableKeyStore</a></code>
</p> </p>
<p class="comment">
<h3>Example</h3>
</p>
<div class="io-description">
</div>
<section> <section>
<h3 id="index">Index</h3> <h3 id="index">Index</h3>
@ -213,8 +208,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="148" <div class="io-line">Defined in <a href="" data-line="149"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:148</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:149</a></div>
</td> </td>
</tr> </tr>
@ -252,8 +247,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="72" <div class="io-line">Defined in <a href="" data-line="65"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:72</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:65</a></div>
</td> </td>
</tr> </tr>
@ -291,8 +286,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="100" <div class="io-line">Defined in <a href="" data-line="93"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:100</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:93</a></div>
</td> </td>
</tr> </tr>
@ -330,8 +325,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="106" <div class="io-line">Defined in <a href="" data-line="103"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:106</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:103</a></div>
</td> </td>
</tr> </tr>
@ -400,8 +395,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="115" <div class="io-line">Defined in <a href="" data-line="116"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:115</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:116</a></div>
</td> </td>
</tr> </tr>
@ -470,8 +465,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="80" <div class="io-line">Defined in <a href="" data-line="73"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:80</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:73</a></div>
</td> </td>
</tr> </tr>
@ -509,8 +504,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="123" <div class="io-line">Defined in <a href="" data-line="124"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:123</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:124</a></div>
</td> </td>
</tr> </tr>
@ -575,8 +570,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="110" <div class="io-line">Defined in <a href="" data-line="107"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:110</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:107</a></div>
</td> </td>
</tr> </tr>
@ -614,8 +609,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="76" <div class="io-line">Defined in <a href="" data-line="69"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:76</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:69</a></div>
</td> </td>
</tr> </tr>
@ -653,8 +648,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="119" <div class="io-line">Defined in <a href="" data-line="120"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:119</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:120</a></div>
</td> </td>
</tr> </tr>
@ -719,8 +714,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="127" <div class="io-line">Defined in <a href="" data-line="128"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:127</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:128</a></div>
</td> </td>
</tr> </tr>
@ -785,8 +780,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="60" <div class="io-line">Defined in <a href="" data-line="53"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:60</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:53</a></div>
</td> </td>
</tr> </tr>
@ -824,8 +819,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="131" <div class="io-line">Defined in <a href="" data-line="132"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:131</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:132</a></div>
</td> </td>
</tr> </tr>
@ -890,8 +885,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="68" <div class="io-line">Defined in <a href="" data-line="61"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:68</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:61</a></div>
</td> </td>
</tr> </tr>
@ -929,8 +924,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="64" <div class="io-line">Defined in <a href="" data-line="57"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:64</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:57</a></div>
</td> </td>
</tr> </tr>
@ -970,8 +965,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="47" <div class="io-line">Defined in <a href="" data-line="40"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:47</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:40</a></div>
</td> </td>
</tr> </tr>
@ -1054,8 +1049,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="56" <div class="io-line">Defined in <a href="" data-line="49"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:56</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:49</a></div>
</td> </td>
</tr> </tr>
@ -1124,8 +1119,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="52" <div class="io-line">Defined in <a href="" data-line="45"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:52</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:45</a></div>
</td> </td>
</tr> </tr>
@ -1196,8 +1191,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="90" <div class="io-line">Defined in <a href="" data-line="83"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:90</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:83</a></div>
</td> </td>
</tr> </tr>
@ -1268,8 +1263,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="84" <div class="io-line">Defined in <a href="" data-line="77"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:84</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:77</a></div>
</td> </td>
</tr> </tr>
@ -1336,8 +1331,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="42" <div class="io-line">Defined in <a href="" data-line="35"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:42</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:35</a></div>
</td> </td>
</tr> </tr>
@ -1375,8 +1370,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="135" <div class="io-line">Defined in <a href="" data-line="136"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:135</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:136</a></div>
</td> </td>
</tr> </tr>
@ -1441,8 +1436,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="143" <div class="io-line">Defined in <a href="" data-line="144"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:143</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:144</a></div>
</td> </td>
</tr> </tr>
@ -1511,8 +1506,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="139" <div class="io-line">Defined in <a href="" data-line="140"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:139</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:140</a></div>
</td> </td>
</tr> </tr>
@ -1579,8 +1574,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="152" <div class="io-line">Defined in <a href="" data-line="153"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:152</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:153</a></div>
</td> </td>
</tr> </tr>
@ -1638,9 +1633,6 @@
import * as openpgp from &#x27;openpgp&#x27;; import * as openpgp from &#x27;openpgp&#x27;;
const keyring &#x3D; new openpgp.Keyring(); const keyring &#x3D; new openpgp.Keyring();
/**
* @extends
*/
interface MutableKeyStore extends KeyStore { interface MutableKeyStore extends KeyStore {
loadKeyring(): void; loadKeyring(): void;
importKeyPair(publicKey: any, privateKey: any): Promise&lt;void&gt;; importKeyPair(publicKey: any, privateKey: any): Promise&lt;void&gt;;
@ -1669,11 +1661,7 @@ interface MutableKeyStore extends KeyStore {
sign(plainText: string): Promise&lt;any&gt;; sign(plainText: string): Promise&lt;any&gt;;
} }
/** class MutablePgpKeyStore implements MutableKeyStore {
* @implements
*/
class MutablePgpKeyStore implements MutableKeyStore{
async loadKeyring(): Promise&lt;void&gt; { async loadKeyring(): Promise&lt;void&gt; {
await keyring.load(); await keyring.load();
await keyring.store(); await keyring.store();
@ -1718,8 +1706,8 @@ class MutablePgpKeyStore implements MutableKeyStore{
async isValidKey(key): Promise&lt;boolean&gt; { async isValidKey(key): Promise&lt;boolean&gt; {
// There is supposed to be an openpgp.readKey() method but I can&#x27;t find it? // There is supposed to be an openpgp.readKey() method but I can&#x27;t find it?
const _key &#x3D; await openpgp.key.readArmored(key); const testKey &#x3D; await openpgp.key.readArmored(key);
return !_key.err; return !testKey.err;
} }
async isEncryptedPrivateKey(privateKey: any): Promise&lt;boolean&gt; { async isEncryptedPrivateKey(privateKey: any): Promise&lt;boolean&gt; {
@ -1734,8 +1722,12 @@ class MutablePgpKeyStore implements MutableKeyStore{
getFingerprint(): string { getFingerprint(): string {
// TODO Handle multiple keys // TODO Handle multiple keys
return keyring.privateKeys &amp;&amp; keyring.privateKeys.keys[0] &amp;&amp; keyring.privateKeys.keys[0].keyPacket &amp;&amp; return (
keyring.privateKeys.keys[0].keyPacket.fingerprint; keyring.privateKeys &amp;&amp;
keyring.privateKeys.keys[0] &amp;&amp;
keyring.privateKeys.keys[0].keyPacket &amp;&amp;
keyring.privateKeys.keys[0].keyPacket.fingerprint
);
} }
getKeyId(key: any): string { getKeyId(key: any): string {
@ -1744,7 +1736,11 @@ class MutablePgpKeyStore implements MutableKeyStore{
getPrivateKeyId(): string { getPrivateKeyId(): string {
// TODO is there a library that comes with angular for doing this? // TODO is there a library that comes with angular for doing this?
return keyring.privateKeys &amp;&amp; keyring.privateKeys.keys[0] &amp;&amp; keyring.privateKeys.keys[0].getKeyId().toHex(); return (
keyring.privateKeys &amp;&amp;
keyring.privateKeys.keys[0] &amp;&amp;
keyring.privateKeys.keys[0].getKeyId().toHex()
);
} }
getKeysForId(keyId: string): Array&lt;any&gt; { getKeysForId(keyId: string): Array&lt;any&gt; {
@ -1776,7 +1772,7 @@ class MutablePgpKeyStore implements MutableKeyStore{
} }
removePublicKey(publicKey: any): any { removePublicKey(publicKey: any): any {
const keyId &#x3D; publicKey.getKeyId().toHex(); const keyId &#x3D; publicKey.getKeyId().toHex();
return keyring.publicKeys.removeForId(keyId); return keyring.publicKeys.removeForId(keyId);
} }
@ -1800,10 +1796,7 @@ class MutablePgpKeyStore implements MutableKeyStore{
} }
} }
export { export { MutablePgpKeyStore, MutableKeyStore };
MutablePgpKeyStore,
MutableKeyStore
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -161,7 +161,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="35" class="link-to-prism">src/app/_pgp/pgp-signer.ts:35</a></div> <div class="io-line">Defined in <a href="" data-line="34" class="link-to-prism">src/app/_pgp/pgp-signer.ts:34</a></div>
</td> </td>
</tr> </tr>
@ -229,7 +229,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="29" class="link-to-prism">src/app/_pgp/pgp-signer.ts:29</a></div> <div class="io-line">Defined in <a href="" data-line="28" class="link-to-prism">src/app/_pgp/pgp-signer.ts:28</a></div>
</td> </td>
</tr> </tr>
@ -256,7 +256,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="30" class="link-to-prism">src/app/_pgp/pgp-signer.ts:30</a></div> <div class="io-line">Defined in <a href="" data-line="29" class="link-to-prism">src/app/_pgp/pgp-signer.ts:29</a></div>
</td> </td>
</tr> </tr>
@ -288,7 +288,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="28" class="link-to-prism">src/app/_pgp/pgp-signer.ts:28</a></div> <div class="io-line">Defined in <a href="" data-line="27" class="link-to-prism">src/app/_pgp/pgp-signer.ts:27</a></div>
</td> </td>
</tr> </tr>
@ -315,7 +315,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="32" class="link-to-prism">src/app/_pgp/pgp-signer.ts:32</a></div> <div class="io-line">Defined in <a href="" data-line="31" class="link-to-prism">src/app/_pgp/pgp-signer.ts:31</a></div>
</td> </td>
</tr> </tr>
@ -342,7 +342,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="35" class="link-to-prism">src/app/_pgp/pgp-signer.ts:35</a></div> <div class="io-line">Defined in <a href="" data-line="34" class="link-to-prism">src/app/_pgp/pgp-signer.ts:34</a></div>
</td> </td>
</tr> </tr>
@ -369,7 +369,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="33" class="link-to-prism">src/app/_pgp/pgp-signer.ts:33</a></div> <div class="io-line">Defined in <a href="" data-line="32" class="link-to-prism">src/app/_pgp/pgp-signer.ts:32</a></div>
</td> </td>
</tr> </tr>
@ -396,7 +396,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="34" class="link-to-prism">src/app/_pgp/pgp-signer.ts:34</a></div> <div class="io-line">Defined in <a href="" data-line="33" class="link-to-prism">src/app/_pgp/pgp-signer.ts:33</a></div>
</td> </td>
</tr> </tr>
@ -423,7 +423,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="31" class="link-to-prism">src/app/_pgp/pgp-signer.ts:31</a></div> <div class="io-line">Defined in <a href="" data-line="30" class="link-to-prism">src/app/_pgp/pgp-signer.ts:30</a></div>
</td> </td>
</tr> </tr>
@ -461,8 +461,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="43" <div class="io-line">Defined in <a href="" data-line="42"
class="link-to-prism">src/app/_pgp/pgp-signer.ts:43</a></div> class="link-to-prism">src/app/_pgp/pgp-signer.ts:42</a></div>
</td> </td>
</tr> </tr>
@ -502,8 +502,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="47" <div class="io-line">Defined in <a href="" data-line="46"
class="link-to-prism">src/app/_pgp/pgp-signer.ts:47</a></div> class="link-to-prism">src/app/_pgp/pgp-signer.ts:46</a></div>
</td> </td>
</tr> </tr>
@ -575,8 +575,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="77" <div class="io-line">Defined in <a href="" data-line="83"
class="link-to-prism">src/app/_pgp/pgp-signer.ts:77</a></div> class="link-to-prism">src/app/_pgp/pgp-signer.ts:83</a></div>
</td> </td>
</tr> </tr>
@ -647,8 +647,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="52" <div class="io-line">Defined in <a href="" data-line="51"
class="link-to-prism">src/app/_pgp/pgp-signer.ts:52</a></div> class="link-to-prism">src/app/_pgp/pgp-signer.ts:51</a></div>
</td> </td>
</tr> </tr>
@ -717,8 +717,8 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {MutableKeyStore} from &#x27;@app/_pgp/pgp-key-store&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { MutableKeyStore } from &#x27;@app/_pgp/pgp-key-store&#x27;;
import {LoggingService} from &#x27;@app/_services/logging.service&#x27;; import { LoggingService } from &#x27;@app/_services/logging.service&#x27;;
const openpgp &#x3D; require(&#x27;openpgp&#x27;); const openpgp &#x3D; require(&#x27;openpgp&#x27;);
@ -726,12 +726,12 @@ interface Signable {
digest(): string; digest(): string;
} }
type Signature &#x3D; { interface Signature {
engine: string engine: string;
algo: string algo: string;
data: string data: string;
digest: string; digest: string;
}; }
interface Signer { interface Signer {
onsign(signature: Signature): void; onsign(signature: Signature): void;
@ -743,7 +743,6 @@ interface Signer {
} }
class PGPSigner implements Signer { class PGPSigner implements Signer {
engine &#x3D; &#x27;pgp&#x27;; engine &#x3D; &#x27;pgp&#x27;;
algo &#x3D; &#x27;sha256&#x27;; algo &#x3D; &#x27;sha256&#x27;;
dgst: string; dgst: string;
@ -769,28 +768,35 @@ class PGPSigner implements Signer {
} }
public verify(digest: string, signature: Signature): void { public verify(digest: string, signature: Signature): void {
openpgp.signature.readArmored(signature.data).then((sig) &#x3D;&gt; { openpgp.signature
const opts &#x3D; { .readArmored(signature.data)
message: openpgp.cleartext.fromText(digest), .then((sig) &#x3D;&gt; {
publicKeys: this.keyStore.getTrustedKeys(), const opts &#x3D; {
signature: sig, message: openpgp.cleartext.fromText(digest),
}; publicKeys: this.keyStore.getTrustedKeys(),
openpgp.verify(opts).then((v) &#x3D;&gt; { signature: sig,
let i &#x3D; 0; };
for (i &#x3D; 0; i &lt; v.signatures.length; i++) { openpgp.verify(opts).then((v) &#x3D;&gt; {
const s &#x3D; v.signatures[i]; let i &#x3D; 0;
if (s.valid) { for (i &#x3D; 0; i &lt; v.signatures.length; i++) {
this.onverify(s); const s &#x3D; v.signatures[i];
return; if (s.valid) {
this.onverify(s);
return;
}
} }
} this.loggingService.sendErrorLevelMessage(
this.loggingService.sendErrorLevelMessage(&#x60;Checked ${i} signature(s) but none valid&#x60;, this, {error: &#x27;404 Not found!&#x27;}); &#x60;Checked ${i} signature(s) but none valid&#x60;,
this,
{ error: &#x27;404 Not found!&#x27; }
);
this.onverify(false);
});
})
.catch((e) &#x3D;&gt; {
this.loggingService.sendErrorLevelMessage(e.message, this, { error: e });
this.onverify(false); this.onverify(false);
}); });
}).catch((e) &#x3D;&gt; {
this.loggingService.sendErrorLevelMessage(e.message, this, {error: e});
this.onverify(false);
});
} }
public async sign(digest: string): Promise&lt;void&gt; { public async sign(digest: string): Promise&lt;void&gt; {
@ -805,28 +811,26 @@ class PGPSigner implements Signer {
privateKeys: [pk], privateKeys: [pk],
detached: true, detached: true,
}; };
openpgp.sign(opts).then((s) &#x3D;&gt; { openpgp
this.signature &#x3D; { .sign(opts)
engine: this.engine, .then((s) &#x3D;&gt; {
algo: this.algo, this.signature &#x3D; {
data: s.signature, engine: this.engine,
// TODO: fix for browser later algo: this.algo,
digest, data: s.signature,
}; // TODO: fix for browser later
this.onsign(this.signature); digest,
}).catch((e) &#x3D;&gt; { };
this.loggingService.sendErrorLevelMessage(e.message, this, {error: e}); this.onsign(this.signature);
this.onsign(undefined); })
}); .catch((e) &#x3D;&gt; {
this.loggingService.sendErrorLevelMessage(e.message, this, { error: e });
this.onsign(undefined);
});
} }
} }
export { export { Signable, Signature, Signer, PGPSigner };
Signable,
Signature,
Signer,
PGPSigner
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -305,10 +305,7 @@ class W3 {
provider: any; provider: any;
} }
export { export { Settings, W3 };
Settings,
W3
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -151,7 +151,7 @@ Allows querying of tokens that have been registered as valid tokens in the netwo
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="26" class="link-to-prism">src/app/_eth/token-registry.ts:26</a></div> <div class="io-line">Defined in <a href="" data-line="25" class="link-to-prism">src/app/_eth/token-registry.ts:25</a></div>
</td> </td>
</tr> </tr>
@ -241,7 +241,7 @@ Allows querying of tokens that have been registered as valid tokens in the netwo
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="22" class="link-to-prism">src/app/_eth/token-registry.ts:22</a></div> <div class="io-line">Defined in <a href="" data-line="21" class="link-to-prism">src/app/_eth/token-registry.ts:21</a></div>
</td> </td>
</tr> </tr>
@ -274,7 +274,7 @@ Allows querying of tokens that have been registered as valid tokens in the netwo
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="24" class="link-to-prism">src/app/_eth/token-registry.ts:24</a></div> <div class="io-line">Defined in <a href="" data-line="23" class="link-to-prism">src/app/_eth/token-registry.ts:23</a></div>
</td> </td>
</tr> </tr>
@ -307,7 +307,7 @@ Allows querying of tokens that have been registered as valid tokens in the netwo
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="26" class="link-to-prism">src/app/_eth/token-registry.ts:26</a></div> <div class="io-line">Defined in <a href="" data-line="25" class="link-to-prism">src/app/_eth/token-registry.ts:25</a></div>
</td> </td>
</tr> </tr>
@ -352,8 +352,8 @@ Allows querying of tokens that have been registered as valid tokens in the netwo
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="57" <div class="io-line">Defined in <a href="" data-line="56"
class="link-to-prism">src/app/_eth/token-registry.ts:57</a></div> class="link-to-prism">src/app/_eth/token-registry.ts:56</a></div>
</td> </td>
</tr> </tr>
@ -444,8 +444,8 @@ Allows querying of tokens that have been registered as valid tokens in the netwo
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="75" <div class="io-line">Defined in <a href="" data-line="74"
class="link-to-prism">src/app/_eth/token-registry.ts:75</a></div> class="link-to-prism">src/app/_eth/token-registry.ts:74</a></div>
</td> </td>
</tr> </tr>
@ -536,8 +536,8 @@ Allows querying of tokens that have been registered as valid tokens in the netwo
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="91" <div class="io-line">Defined in <a href="" data-line="90"
class="link-to-prism">src/app/_eth/token-registry.ts:91</a></div> class="link-to-prism">src/app/_eth/token-registry.ts:90</a></div>
</td> </td>
</tr> </tr>
@ -583,8 +583,7 @@ Allows querying of tokens that have been registered as valid tokens in the netwo
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import Web3 from &#x27;web3&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import Web3 from &#x27;web3&#x27;;
// Application imports // Application imports
import {environment} from &#x27;@src/environments/environment&#x27;; import { environment } from &#x27;@src/environments/environment&#x27;;
/** Fetch the token registry contract&#x27;s ABI. */ /** Fetch the token registry contract&#x27;s ABI. */
const abi: Array&lt;any&gt; &#x3D; require(&#x27;@src/assets/js/block-sync/data/TokenUniqueSymbolIndex.json&#x27;); const abi: Array&lt;any&gt; &#x3D; require(&#x27;@src/assets/js/block-sync/data/TokenUniqueSymbolIndex.json&#x27;);

View File

@ -352,7 +352,7 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {AccountDetails} from &#x27;@app/_models/account&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { AccountDetails } from &#x27;@app/_models/account&#x27;;
class BlocksBloom { class BlocksBloom {
low: number; low: number;
@ -397,13 +397,7 @@ class Conversion {
tx: Tx; tx: Tx;
} }
export { export { BlocksBloom, TxToken, Tx, Transaction, Conversion };
BlocksBloom,
TxToken,
Tx,
Transaction,
Conversion
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -260,7 +260,7 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {AccountDetails} from &#x27;@app/_models/account&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { AccountDetails } from &#x27;@app/_models/account&#x27;;
class BlocksBloom { class BlocksBloom {
low: number; low: number;
@ -305,13 +305,7 @@ class Conversion {
tx: Tx; tx: Tx;
} }
export { export { BlocksBloom, TxToken, Tx, Transaction, Conversion };
BlocksBloom,
TxToken,
Tx,
Transaction,
Conversion
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -200,7 +200,7 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {AccountDetails} from &#x27;@app/_models/account&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { AccountDetails } from &#x27;@app/_models/account&#x27;;
class BlocksBloom { class BlocksBloom {
low: number; low: number;
@ -245,13 +245,7 @@ class Conversion {
tx: Tx; tx: Tx;
} }
export { export { BlocksBloom, TxToken, Tx, Transaction, Conversion };
BlocksBloom,
TxToken,
Tx,
Transaction,
Conversion
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -189,10 +189,7 @@ class W3 {
provider: any; provider: any;
} }
export { export { Settings, W3 };
Settings,
W3
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

File diff suppressed because one or more lines are too long

View File

@ -366,8 +366,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="71" <div class="io-line">Defined in <a href="" data-line="85"
class="link-to-prism">src/app/pages/accounts/account-search/account-search.component.ts:71</a></div> class="link-to-prism">src/app/pages/accounts/account-search/account-search.component.ts:85</a></div>
</td> </td>
</tr> </tr>
@ -405,8 +405,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="49" <div class="io-line">Defined in <a href="" data-line="55"
class="link-to-prism">src/app/pages/accounts/account-search/account-search.component.ts:49</a></div> class="link-to-prism">src/app/pages/accounts/account-search/account-search.component.ts:55</a></div>
</td> </td>
</tr> </tr>
@ -446,8 +446,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="57" <div class="io-line">Defined in <a href="" data-line="65"
class="link-to-prism">src/app/pages/accounts/account-search/account-search.component.ts:57</a></div> class="link-to-prism">src/app/pages/accounts/account-search/account-search.component.ts:65</a></div>
</td> </td>
</tr> </tr>
@ -818,7 +818,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="46" class="link-to-prism">src/app/pages/accounts/account-search/account-search.component.ts:46</a></div> <div class="io-line">Defined in <a href="" data-line="48" class="link-to-prism">src/app/pages/accounts/account-search/account-search.component.ts:48</a></div>
</td> </td>
</tr> </tr>
@ -840,7 +840,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="47" class="link-to-prism">src/app/pages/accounts/account-search/account-search.component.ts:47</a></div> <div class="io-line">Defined in <a href="" data-line="51" class="link-to-prism">src/app/pages/accounts/account-search/account-search.component.ts:51</a></div>
</td> </td>
</tr> </tr>
@ -852,18 +852,18 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Component, OnInit, ChangeDetectionStrategy } from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Component, OnInit, ChangeDetectionStrategy } from &#x27;@angular/core&#x27;;
import {FormBuilder, FormGroup, Validators} from &#x27;@angular/forms&#x27;; import { FormBuilder, FormGroup, Validators } from &#x27;@angular/forms&#x27;;
import {CustomErrorStateMatcher} from &#x27;@app/_helpers&#x27;; import { CustomErrorStateMatcher } from &#x27;@app/_helpers&#x27;;
import {UserService} from &#x27;@app/_services&#x27;; import { UserService } from &#x27;@app/_services&#x27;;
import {Router} from &#x27;@angular/router&#x27;; import { Router } from &#x27;@angular/router&#x27;;
import {strip0x} from &#x27;@src/assets/js/ethtx/dist/hex&#x27;; import { strip0x } from &#x27;@src/assets/js/ethtx/dist/hex&#x27;;
import {environment} from &#x27;@src/environments/environment&#x27;; import { environment } from &#x27;@src/environments/environment&#x27;;
@Component({ @Component({
selector: &#x27;app-account-search&#x27;, selector: &#x27;app-account-search&#x27;,
templateUrl: &#x27;./account-search.component.html&#x27;, templateUrl: &#x27;./account-search.component.html&#x27;,
styleUrls: [&#x27;./account-search.component.scss&#x27;], styleUrls: [&#x27;./account-search.component.scss&#x27;],
changeDetection: ChangeDetectionStrategy.OnPush changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class AccountSearchComponent implements OnInit { export class AccountSearchComponent implements OnInit {
nameSearchForm: FormGroup; nameSearchForm: FormGroup;
@ -880,8 +880,8 @@ export class AccountSearchComponent implements OnInit {
constructor( constructor(
private formBuilder: FormBuilder, private formBuilder: FormBuilder,
private userService: UserService, private userService: UserService,
private router: Router, private router: Router
) { } ) {}
ngOnInit(): void { ngOnInit(): void {
this.nameSearchForm &#x3D; this.formBuilder.group({ this.nameSearchForm &#x3D; this.formBuilder.group({
@ -895,13 +895,21 @@ export class AccountSearchComponent implements OnInit {
}); });
} }
get nameSearchFormStub(): any { return this.nameSearchForm.controls; } get nameSearchFormStub(): any {
get phoneSearchFormStub(): any { return this.phoneSearchForm.controls; } return this.nameSearchForm.controls;
get addressSearchFormStub(): any { return this.addressSearchForm.controls; } }
get phoneSearchFormStub(): any {
return this.phoneSearchForm.controls;
}
get addressSearchFormStub(): any {
return this.addressSearchForm.controls;
}
onNameSearch(): void { onNameSearch(): void {
this.nameSearchSubmitted &#x3D; true; this.nameSearchSubmitted &#x3D; true;
if (this.nameSearchForm.invalid) { return; } if (this.nameSearchForm.invalid) {
return;
}
this.nameSearchLoading &#x3D; true; this.nameSearchLoading &#x3D; true;
this.userService.searchAccountByName(this.nameSearchFormStub.name.value); this.userService.searchAccountByName(this.nameSearchFormStub.name.value);
this.nameSearchLoading &#x3D; false; this.nameSearchLoading &#x3D; false;
@ -909,11 +917,17 @@ export class AccountSearchComponent implements OnInit {
async onPhoneSearch(): Promise&lt;void&gt; { async onPhoneSearch(): Promise&lt;void&gt; {
this.phoneSearchSubmitted &#x3D; true; this.phoneSearchSubmitted &#x3D; true;
if (this.phoneSearchForm.invalid) { return; } if (this.phoneSearchForm.invalid) {
return;
}
this.phoneSearchLoading &#x3D; true; this.phoneSearchLoading &#x3D; true;
(await this.userService.getAccountByPhone(this.phoneSearchFormStub.phoneNumber.value, 100)).subscribe(async res &#x3D;&gt; { (
await this.userService.getAccountByPhone(this.phoneSearchFormStub.phoneNumber.value, 100)
).subscribe(async (res) &#x3D;&gt; {
if (res !&#x3D;&#x3D; undefined) { if (res !&#x3D;&#x3D; undefined) {
await this.router.navigateByUrl(&#x60;/accounts/${strip0x(res.identities.evm[&#x60;bloxberg:${environment.bloxbergChainId}&#x60;][0])}&#x60;); await this.router.navigateByUrl(
&#x60;/accounts/${strip0x(res.identities.evm[&#x60;bloxberg:${environment.bloxbergChainId}&#x60;][0])}&#x60;
);
} else { } else {
alert(&#x27;Account not found!&#x27;); alert(&#x27;Account not found!&#x27;);
} }
@ -923,11 +937,17 @@ export class AccountSearchComponent implements OnInit {
async onAddressSearch(): Promise&lt;void&gt; { async onAddressSearch(): Promise&lt;void&gt; {
this.addressSearchSubmitted &#x3D; true; this.addressSearchSubmitted &#x3D; true;
if (this.addressSearchForm.invalid) { return; } if (this.addressSearchForm.invalid) {
return;
}
this.addressSearchLoading &#x3D; true; this.addressSearchLoading &#x3D; true;
(await this.userService.getAccountByAddress(this.addressSearchFormStub.address.value, 100)).subscribe(async res &#x3D;&gt; { (
await this.userService.getAccountByAddress(this.addressSearchFormStub.address.value, 100)
).subscribe(async (res) &#x3D;&gt; {
if (res !&#x3D;&#x3D; undefined) { if (res !&#x3D;&#x3D; undefined) {
await this.router.navigateByUrl(&#x60;/accounts/${strip0x(res.identities.evm[&#x60;bloxberg:${environment.bloxbergChainId}&#x60;][0])}&#x60;); await this.router.navigateByUrl(
&#x60;/accounts/${strip0x(res.identities.evm[&#x60;bloxberg:${environment.bloxbergChainId}&#x60;][0])}&#x60;
);
} else { } else {
alert(&#x27;Account not found!&#x27;); alert(&#x27;Account not found!&#x27;);
} }
@ -1034,8 +1054,8 @@ export class AccountSearchComponent implements OnInit {
<script src="../js/libs/deep-iterator.js"></script> <script src="../js/libs/deep-iterator.js"></script>
<script> <script>
var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper"> <app-sidebar></app-sidebar> <!-- ============================================================== --> <!-- Start Page Content here --> <!-- ============================================================== --> <div id="content"> <app-topbar></app-topbar> <!-- Start Content--> <div class="container-fluid" appMenuSelection> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a routerLink="/home">Home</a></li> <li class="breadcrumb-item"><a routerLink="/accounts">Accounts</a></li> <li class="breadcrumb-item active" aria-current="page">Search</li> </ol> </nav> <div class="card"> <mat-card-title class="card-header"> Accounts </mat-card-title> <div class="card-body"> <mat-tab-group> <mat-tab label="Phone Number"> <form [formGroup]="phoneSearchForm" (ngSubmit)="onPhoneSearch()"> <mat-form-field appearance="outline"> <mat-label> Search </mat-label> <input matInput type="text" placeholder="Search by phone number" formControlName="phoneNumber" [errorStateMatcher]="matcher"> <mat-error *ngIf="phoneSearchSubmitted && phoneSearchFormStub.phoneNumber.errors">Phone Number is required.</mat-error> <mat-icon matSuffix>phone</mat-icon> <mat-hint>Phone Number</mat-hint> </mat-form-field> <button mat-raised-button color="primary" type="submit" class="btn btn-outline-primary ml-3"> SEARCH </button> </form> </mat-tab> <mat-tab label="Account Address"> <form [formGroup]="addressSearchForm" (ngSubmit)="onAddressSearch()"> <mat-form-field appearance="outline"> <mat-label> Search </mat-label> <input matInput type="text" placeholder="Search by account address" formControlName="address" [errorStateMatcher]="matcher"> <mat-error *ngIf="addressSearchSubmitted && addressSearchFormStub.address.errors">Account Address is required.</mat-error> <mat-icon matSuffix>view_in_ar</mat-icon> <mat-hint>Account Address</mat-hint> </mat-form-field> <button mat-raised-button color="primary" type="submit" class="btn btn-outline-primary ml-3"> SEARCH </button> </form> </mat-tab> </mat-tab-group> </div> </div> </div> <app-footer appMenuSelection></app-footer> </div> <!-- ============================================================== --> <!-- End Page content --> <!-- ============================================================== --></div></div>' var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper"> <app-sidebar></app-sidebar> <!-- ============================================================== --> <!-- Start Page Content here --> <!-- ============================================================== --> <div id="content"> <app-topbar></app-topbar> <!-- Start Content--> <div class="container-fluid" appMenuSelection> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a routerLink="/home">Home</a></li> <li class="breadcrumb-item"><a routerLink="/accounts">Accounts</a></li> <li class="breadcrumb-item active" aria-current="page">Search</li> </ol> </nav> <div class="card"> <mat-card-title class="card-header"> Accounts </mat-card-title> <div class="card-body"> <mat-tab-group> <mat-tab label="Phone Number"> <form [formGroup]="phoneSearchForm" (ngSubmit)="onPhoneSearch()"> <mat-form-field appearance="outline"> <mat-label> Search </mat-label> <input matInput type="text" placeholder="Search by phone number" formControlName="phoneNumber" [errorStateMatcher]="matcher"> <mat-error *ngIf="phoneSearchSubmitted && phoneSearchFormStub.phoneNumber.errors">Phone Number is required.</mat-error> <mat-icon matSuffix>phone</mat-icon> <mat-hint>Phone Number</mat-hint> </mat-form-field> <button mat-raised-button color="primary" type="submit" class="btn btn-outline-primary ml-3"> SEARCH </button> </form> </mat-tab> <mat-tab label="Account Address"> <form [formGroup]="addressSearchForm" (ngSubmit)="onAddressSearch()"> <mat-form-field appearance="outline"> <mat-label> Search </mat-label> <input matInput type="text" placeholder="Search by account address" formControlName="address" [errorStateMatcher]="matcher"> <mat-error *ngIf="addressSearchSubmitted && addressSearchFormStub.address.errors">Account Address is required.</mat-error> <mat-icon matSuffix>view_in_ar</mat-icon> <mat-hint>Account Address</mat-hint> </mat-form-field> <button mat-raised-button color="primary" type="submit" class="btn btn-outline-primary ml-3"> SEARCH </button> </form> </mat-tab> </mat-tab-group> </div> </div> </div> <app-footer appMenuSelection></app-footer> </div> <!-- ============================================================== --> <!-- End Page content --> <!-- ============================================================== --></div></div>'
var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}]; var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[routerLink]'}]; var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'AccountSearchComponent'}; var ACTUAL_COMPONENT = {'name': 'AccountSearchComponent'};
</script> </script>
<script src="../js/tree.js"></script> <script src="../js/tree.js"></script>

View File

@ -307,8 +307,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="57" <div class="io-line">Defined in <a href="" data-line="59"
class="link-to-prism">src/app/pages/accounts/accounts.component.ts:57</a></div> class="link-to-prism">src/app/pages/accounts/accounts.component.ts:59</a></div>
</td> </td>
</tr> </tr>
@ -377,8 +377,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="84" <div class="io-line">Defined in <a href="" data-line="88"
class="link-to-prism">src/app/pages/accounts/accounts.component.ts:84</a></div> class="link-to-prism">src/app/pages/accounts/accounts.component.ts:88</a></div>
</td> </td>
</tr> </tr>
@ -416,8 +416,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="65" <div class="io-line">Defined in <a href="" data-line="69"
class="link-to-prism">src/app/pages/accounts/accounts.component.ts:65</a></div> class="link-to-prism">src/app/pages/accounts/accounts.component.ts:69</a></div>
</td> </td>
</tr> </tr>
@ -455,8 +455,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="48" <div class="io-line">Defined in <a href="" data-line="50"
class="link-to-prism">src/app/pages/accounts/accounts.component.ts:48</a></div> class="link-to-prism">src/app/pages/accounts/accounts.component.ts:50</a></div>
</td> </td>
</tr> </tr>
@ -494,8 +494,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="76" <div class="io-line">Defined in <a href="" data-line="80"
class="link-to-prism">src/app/pages/accounts/accounts.component.ts:76</a></div> class="link-to-prism">src/app/pages/accounts/accounts.component.ts:80</a></div>
</td> </td>
</tr> </tr>
@ -535,8 +535,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="61" <div class="io-line">Defined in <a href="" data-line="63"
class="link-to-prism">src/app/pages/accounts/accounts.component.ts:61</a></div> class="link-to-prism">src/app/pages/accounts/accounts.component.ts:63</a></div>
</td> </td>
</tr> </tr>
@ -877,23 +877,23 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {ChangeDetectionStrategy, Component, OnInit, ViewChild} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { ChangeDetectionStrategy, Component, OnInit, ViewChild } from &#x27;@angular/core&#x27;;
import {MatTableDataSource} from &#x27;@angular/material/table&#x27;; import { MatTableDataSource } from &#x27;@angular/material/table&#x27;;
import {MatPaginator} from &#x27;@angular/material/paginator&#x27;; import { MatPaginator } from &#x27;@angular/material/paginator&#x27;;
import {MatSort} from &#x27;@angular/material/sort&#x27;; import { MatSort } from &#x27;@angular/material/sort&#x27;;
import {LoggingService, UserService} from &#x27;@app/_services&#x27;; import { LoggingService, UserService } from &#x27;@app/_services&#x27;;
import {Router} from &#x27;@angular/router&#x27;; import { Router } from &#x27;@angular/router&#x27;;
import {exportCsv} from &#x27;@app/_helpers&#x27;; import { exportCsv } from &#x27;@app/_helpers&#x27;;
import {strip0x} from &#x27;@src/assets/js/ethtx/dist/hex&#x27;; import { strip0x } from &#x27;@src/assets/js/ethtx/dist/hex&#x27;;
import {first} from &#x27;rxjs/operators&#x27;; import { first } from &#x27;rxjs/operators&#x27;;
import {environment} from &#x27;@src/environments/environment&#x27;; import { environment } from &#x27;@src/environments/environment&#x27;;
import {AccountDetails} from &#x27;@app/_models&#x27;; import { AccountDetails } from &#x27;@app/_models&#x27;;
@Component({ @Component({
selector: &#x27;app-accounts&#x27;, selector: &#x27;app-accounts&#x27;,
templateUrl: &#x27;./accounts.component.html&#x27;, templateUrl: &#x27;./accounts.component.html&#x27;,
styleUrls: [&#x27;./accounts.component.scss&#x27;], styleUrls: [&#x27;./accounts.component.scss&#x27;],
changeDetection: ChangeDetectionStrategy.OnPush changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class AccountsComponent implements OnInit { export class AccountsComponent implements OnInit {
dataSource: MatTableDataSource&lt;any&gt;; dataSource: MatTableDataSource&lt;any&gt;;
@ -911,21 +911,23 @@ export class AccountsComponent implements OnInit {
private userService: UserService, private userService: UserService,
private loggingService: LoggingService, private loggingService: LoggingService,
private router: Router private router: Router
) ) {
{
(async () &#x3D;&gt; { (async () &#x3D;&gt; {
try { try {
// TODO it feels like this should be in the onInit handler // TODO it feels like this should be in the onInit handler
await this.userService.loadAccounts(100); await this.userService.loadAccounts(100);
} catch (error) { } catch (error) {
this.loggingService.sendErrorLevelMessage(&#x27;Failed to load accounts&#x27;, this, {error}); this.loggingService.sendErrorLevelMessage(&#x27;Failed to load accounts&#x27;, this, { error });
} }
})(); })();
this.userService.getAccountTypes().pipe(first()).subscribe(res &#x3D;&gt; this.accountTypes &#x3D; res); this.userService
.getAccountTypes()
.pipe(first())
.subscribe((res) &#x3D;&gt; (this.accountTypes &#x3D; res));
} }
ngOnInit(): void { ngOnInit(): void {
this.userService.accountsSubject.subscribe(accounts &#x3D;&gt; { this.userService.accountsSubject.subscribe((accounts) &#x3D;&gt; {
this.dataSource &#x3D; new MatTableDataSource&lt;any&gt;(accounts); this.dataSource &#x3D; new MatTableDataSource&lt;any&gt;(accounts);
this.dataSource.paginator &#x3D; this.paginator; this.dataSource.paginator &#x3D; this.paginator;
this.dataSource.sort &#x3D; this.sort; this.dataSource.sort &#x3D; this.sort;
@ -938,17 +940,19 @@ export class AccountsComponent implements OnInit {
} }
async viewAccount(account): Promise&lt;void&gt; { async viewAccount(account): Promise&lt;void&gt; {
await this.router.navigateByUrl(&#x60;/accounts/${strip0x(account.identities.evm[&#x60;bloxberg:${environment.bloxbergChainId}&#x60;][0])}&#x60;); await this.router.navigateByUrl(
&#x60;/accounts/${strip0x(account.identities.evm[&#x60;bloxberg:${environment.bloxbergChainId}&#x60;][0])}&#x60;
);
} }
filterAccounts(): void { filterAccounts(): void {
if (this.accountsType &#x3D;&#x3D;&#x3D; &#x27;all&#x27;) { if (this.accountsType &#x3D;&#x3D;&#x3D; &#x27;all&#x27;) {
this.userService.accountsSubject.subscribe(accounts &#x3D;&gt; { this.userService.accountsSubject.subscribe((accounts) &#x3D;&gt; {
this.dataSource.data &#x3D; accounts; this.dataSource.data &#x3D; accounts;
this.accounts &#x3D; accounts; this.accounts &#x3D; accounts;
}); });
} else { } else {
this.dataSource.data &#x3D; this.accounts.filter(account &#x3D;&gt; account.type &#x3D;&#x3D;&#x3D; this.accountsType); this.dataSource.data &#x3D; this.accounts.filter((account) &#x3D;&gt; account.type &#x3D;&#x3D;&#x3D; this.accountsType);
} }
} }
@ -1089,8 +1093,8 @@ export class AccountsComponent implements OnInit {
<script src="../js/libs/deep-iterator.js"></script> <script src="../js/libs/deep-iterator.js"></script>
<script> <script>
var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper"> <app-sidebar></app-sidebar> <!-- ============================================================== --> <!-- Start Page Content here --> <!-- ============================================================== --> <div id="content"> <app-topbar></app-topbar> <!-- Start Content--> <div class="container-fluid" appMenuSelection> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a routerLink="/home">Home</a></li> <li class="breadcrumb-item active" aria-current="page">Accounts</li> </ol> </nav> <div class="card"> <mat-card-title class="card-header"> Accounts </mat-card-title> <div class="card-body"> <div class="row card-header"> <mat-form-field appearance="outline"> <mat-label> ACCOUNT TYPE </mat-label> <mat-select id="typeSelect" [(value)]="accountsType" (selectionChange)="filterAccounts()"> <mat-option value="all">ALL</mat-option> <mat-option *ngFor="let accountType of accountTypes" [value]="accountType"> {{accountType | uppercase}} </mat-option> </mat-select> </mat-form-field> <button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto mr-2" routerLink="/accounts/search"> SEARCH </button> <button mat-raised-button color="primary" type="button" class="btn btn-outline-primary mr-2" (click)="downloadCsv()"> EXPORT </button> </div> <mat-form-field appearance="outline"> <mat-label> Filter </mat-label> <input matInput type="text" (keyup)="doFilter($event.target.value)" placeholder="Filter"> <mat-icon matSuffix>search</mat-icon> </mat-form-field> <mat-table class="mat-elevation-z10" [dataSource]="dataSource" matSort matSortActive="created" matSortDirection="desc" matSortDisableClear> <ng-container matColumnDef="name"> <mat-header-cell *matHeaderCellDef mat-sort-header> NAME </mat-header-cell> <mat-cell *matCellDef="let user"> {{user?.vcard.fn[0].value}} </mat-cell> </ng-container> <ng-container matColumnDef="phone"> <mat-header-cell *matHeaderCellDef mat-sort-header> PHONE NUMBER </mat-header-cell> <mat-cell *matCellDef="let user"> {{user?.vcard.tel[0].value}} </mat-cell> </ng-container> <ng-container matColumnDef="created"> <mat-header-cell *matHeaderCellDef mat-sort-header> CREATED </mat-header-cell> <mat-cell *matCellDef="let user"> {{user?.date_registered | date}} </mat-cell> </ng-container> <ng-container matColumnDef="balance"> <mat-header-cell *matHeaderCellDef mat-sort-header> BALANCE </mat-header-cell> <mat-cell *matCellDef="let user"> {{user?.balance | tokenRatio}} </mat-cell> </ng-container> <ng-container matColumnDef="location"> <mat-header-cell *matHeaderCellDef mat-sort-header> LOCATION </mat-header-cell> <mat-cell *matCellDef="let user"> {{user?.location.area_name}} </mat-cell> </ng-container> <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row> <mat-row *matRowDef="let account; columns: displayedColumns" (click)="viewAccount(account)" matRipple></mat-row> </mat-table> <mat-paginator [pageSize]="defaultPageSize" [pageSizeOptions]="pageSizeOptions" showFirstLastButtons></mat-paginator> </div> </div> </div> <app-footer appMenuSelection></app-footer> </div> <!-- ============================================================== --> <!-- End Page content --> <!-- ============================================================== --></div></div>' var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper"> <app-sidebar></app-sidebar> <!-- ============================================================== --> <!-- Start Page Content here --> <!-- ============================================================== --> <div id="content"> <app-topbar></app-topbar> <!-- Start Content--> <div class="container-fluid" appMenuSelection> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a routerLink="/home">Home</a></li> <li class="breadcrumb-item active" aria-current="page">Accounts</li> </ol> </nav> <div class="card"> <mat-card-title class="card-header"> Accounts </mat-card-title> <div class="card-body"> <div class="row card-header"> <mat-form-field appearance="outline"> <mat-label> ACCOUNT TYPE </mat-label> <mat-select id="typeSelect" [(value)]="accountsType" (selectionChange)="filterAccounts()"> <mat-option value="all">ALL</mat-option> <mat-option *ngFor="let accountType of accountTypes" [value]="accountType"> {{accountType | uppercase}} </mat-option> </mat-select> </mat-form-field> <button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto mr-2" routerLink="/accounts/search"> SEARCH </button> <button mat-raised-button color="primary" type="button" class="btn btn-outline-primary mr-2" (click)="downloadCsv()"> EXPORT </button> </div> <mat-form-field appearance="outline"> <mat-label> Filter </mat-label> <input matInput type="text" (keyup)="doFilter($event.target.value)" placeholder="Filter"> <mat-icon matSuffix>search</mat-icon> </mat-form-field> <mat-table class="mat-elevation-z10" [dataSource]="dataSource" matSort matSortActive="created" matSortDirection="desc" matSortDisableClear> <ng-container matColumnDef="name"> <mat-header-cell *matHeaderCellDef mat-sort-header> NAME </mat-header-cell> <mat-cell *matCellDef="let user"> {{user?.vcard.fn[0].value}} </mat-cell> </ng-container> <ng-container matColumnDef="phone"> <mat-header-cell *matHeaderCellDef mat-sort-header> PHONE NUMBER </mat-header-cell> <mat-cell *matCellDef="let user"> {{user?.vcard.tel[0].value}} </mat-cell> </ng-container> <ng-container matColumnDef="created"> <mat-header-cell *matHeaderCellDef mat-sort-header> CREATED </mat-header-cell> <mat-cell *matCellDef="let user"> {{user?.date_registered | date}} </mat-cell> </ng-container> <ng-container matColumnDef="balance"> <mat-header-cell *matHeaderCellDef mat-sort-header> BALANCE </mat-header-cell> <mat-cell *matCellDef="let user"> {{user?.balance | tokenRatio}} </mat-cell> </ng-container> <ng-container matColumnDef="location"> <mat-header-cell *matHeaderCellDef mat-sort-header> LOCATION </mat-header-cell> <mat-cell *matCellDef="let user"> {{user?.location.area_name}} </mat-cell> </ng-container> <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row> <mat-row *matRowDef="let account; columns: displayedColumns" (click)="viewAccount(account)" matRipple></mat-row> </mat-table> <mat-paginator [pageSize]="defaultPageSize" [pageSizeOptions]="pageSizeOptions" showFirstLastButtons></mat-paginator> </div> </div> </div> <app-footer appMenuSelection></app-footer> </div> <!-- ============================================================== --> <!-- End Page content --> <!-- ============================================================== --></div></div>'
var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}]; var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[routerLink]'}]; var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'AccountsComponent'}; var ACTUAL_COMPONENT = {'name': 'AccountsComponent'};
</script> </script>
<script src="../js/tree.js"></script> <script src="../js/tree.js"></script>

View File

@ -288,8 +288,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="53" <div class="io-line">Defined in <a href="" data-line="49"
class="link-to-prism">src/app/pages/admin/admin.component.ts:53</a></div> class="link-to-prism">src/app/pages/admin/admin.component.ts:49</a></div>
</td> </td>
</tr> </tr>
@ -358,8 +358,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="57" <div class="io-line">Defined in <a href="" data-line="53"
class="link-to-prism">src/app/pages/admin/admin.component.ts:57</a></div> class="link-to-prism">src/app/pages/admin/admin.component.ts:53</a></div>
</td> </td>
</tr> </tr>
@ -428,8 +428,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="63" <div class="io-line">Defined in <a href="" data-line="64"
class="link-to-prism">src/app/pages/admin/admin.component.ts:63</a></div> class="link-to-prism">src/app/pages/admin/admin.component.ts:64</a></div>
</td> </td>
</tr> </tr>
@ -498,8 +498,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="49" <div class="io-line">Defined in <a href="" data-line="45"
class="link-to-prism">src/app/pages/admin/admin.component.ts:49</a></div> class="link-to-prism">src/app/pages/admin/admin.component.ts:45</a></div>
</td> </td>
</tr> </tr>
@ -568,8 +568,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="73" <div class="io-line">Defined in <a href="" data-line="79"
class="link-to-prism">src/app/pages/admin/admin.component.ts:73</a></div> class="link-to-prism">src/app/pages/admin/admin.component.ts:79</a></div>
</td> </td>
</tr> </tr>
@ -607,8 +607,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="69" <div class="io-line">Defined in <a href="" data-line="75"
class="link-to-prism">src/app/pages/admin/admin.component.ts:69</a></div> class="link-to-prism">src/app/pages/admin/admin.component.ts:75</a></div>
</td> </td>
</tr> </tr>
@ -673,8 +673,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="46" <div class="io-line">Defined in <a href="" data-line="43"
class="link-to-prism">src/app/pages/admin/admin.component.ts:46</a></div> class="link-to-prism">src/app/pages/admin/admin.component.ts:43</a></div>
</td> </td>
</tr> </tr>
@ -887,15 +887,15 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {ChangeDetectionStrategy, Component, OnInit, ViewChild} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { ChangeDetectionStrategy, Component, OnInit, ViewChild } from &#x27;@angular/core&#x27;;
import {MatTableDataSource} from &#x27;@angular/material/table&#x27;; import { MatTableDataSource } from &#x27;@angular/material/table&#x27;;
import {MatPaginator} from &#x27;@angular/material/paginator&#x27;; import { MatPaginator } from &#x27;@angular/material/paginator&#x27;;
import {MatSort} from &#x27;@angular/material/sort&#x27;; import { MatSort } from &#x27;@angular/material/sort&#x27;;
import {LoggingService, UserService} from &#x27;@app/_services&#x27;; import { LoggingService, UserService } from &#x27;@app/_services&#x27;;
import {animate, state, style, transition, trigger} from &#x27;@angular/animations&#x27;; import { animate, state, style, transition, trigger } from &#x27;@angular/animations&#x27;;
import {first} from &#x27;rxjs/operators&#x27;; import { first } from &#x27;rxjs/operators&#x27;;
import {exportCsv} from &#x27;@app/_helpers&#x27;; import { exportCsv } from &#x27;@app/_helpers&#x27;;
import {Action} from &#x27;../../_models&#x27;; import { Action } from &#x27;../../_models&#x27;;
@Component({ @Component({
selector: &#x27;app-admin&#x27;, selector: &#x27;app-admin&#x27;,
@ -904,11 +904,11 @@ import {Action} from &#x27;../../_models&#x27;;
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
animations: [ animations: [
trigger(&#x27;detailExpand&#x27;, [ trigger(&#x27;detailExpand&#x27;, [
state(&#x27;collapsed&#x27;, style({height: &#x27;0px&#x27;, minHeight: 0, visibility: &#x27;hidden&#x27;})), state(&#x27;collapsed&#x27;, style({ height: &#x27;0px&#x27;, minHeight: 0, visibility: &#x27;hidden&#x27; })),
state(&#x27;expanded&#x27;, style({height: &#x27;*&#x27;, visibility: &#x27;visible&#x27;})), state(&#x27;expanded&#x27;, style({ height: &#x27;*&#x27;, visibility: &#x27;visible&#x27; })),
transition(&#x27;expanded &lt;&#x3D;&gt; collapsed&#x27;, animate(&#x27;225ms cubic-bezier(0.4, 0.0, 0.2, 1)&#x27;)), transition(&#x27;expanded &lt;&#x3D;&gt; collapsed&#x27;, animate(&#x27;225ms cubic-bezier(0.4, 0.0, 0.2, 1)&#x27;)),
]) ]),
] ],
}) })
export class AdminComponent implements OnInit { export class AdminComponent implements OnInit {
dataSource: MatTableDataSource&lt;any&gt;; dataSource: MatTableDataSource&lt;any&gt;;
@ -919,12 +919,9 @@ export class AdminComponent implements OnInit {
@ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatPaginator) paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort; @ViewChild(MatSort) sort: MatSort;
constructor( constructor(private userService: UserService, private loggingService: LoggingService) {
private userService: UserService,
private loggingService: LoggingService
) {
this.userService.getActions(); this.userService.getActions();
this.userService.actionsSubject.subscribe(actions &#x3D;&gt; { this.userService.actionsSubject.subscribe((actions) &#x3D;&gt; {
this.dataSource &#x3D; new MatTableDataSource&lt;any&gt;(actions); this.dataSource &#x3D; new MatTableDataSource&lt;any&gt;(actions);
this.dataSource.paginator &#x3D; this.paginator; this.dataSource.paginator &#x3D; this.paginator;
this.dataSource.sort &#x3D; this.sort; this.dataSource.sort &#x3D; this.sort;
@ -932,8 +929,7 @@ export class AdminComponent implements OnInit {
}); });
} }
ngOnInit(): void { ngOnInit(): void {}
}
doFilter(value: string): void { doFilter(value: string): void {
this.dataSource.filter &#x3D; value.trim().toLocaleLowerCase(); this.dataSource.filter &#x3D; value.trim().toLocaleLowerCase();
@ -944,14 +940,24 @@ export class AdminComponent implements OnInit {
} }
approveAction(action: any): void { approveAction(action: any): void {
if (!confirm(&#x27;Approve action?&#x27;)) { return; } if (!confirm(&#x27;Approve action?&#x27;)) {
this.userService.approveAction(action.id).pipe(first()).subscribe(res &#x3D;&gt; this.loggingService.sendInfoLevelMessage(res)); return;
}
this.userService
.approveAction(action.id)
.pipe(first())
.subscribe((res) &#x3D;&gt; this.loggingService.sendInfoLevelMessage(res));
this.userService.getActions(); this.userService.getActions();
} }
disapproveAction(action: any): void { disapproveAction(action: any): void {
if (!confirm(&#x27;Disapprove action?&#x27;)) { return; } if (!confirm(&#x27;Disapprove action?&#x27;)) {
this.userService.revokeAction(action.id).pipe(first()).subscribe(res &#x3D;&gt; this.loggingService.sendInfoLevelMessage(res)); return;
}
this.userService
.revokeAction(action.id)
.pipe(first())
.subscribe((res) &#x3D;&gt; this.loggingService.sendInfoLevelMessage(res));
this.userService.getActions(); this.userService.getActions();
} }
@ -1111,8 +1117,8 @@ export class AdminComponent implements OnInit {
<script src="../js/libs/deep-iterator.js"></script> <script src="../js/libs/deep-iterator.js"></script>
<script> <script>
var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper"> <app-sidebar></app-sidebar> <!-- ============================================================== --> <!-- Start Page Content here --> <!-- ============================================================== --> <div id="content"> <app-topbar></app-topbar> <!-- Start Content--> <div class="container-fluid" appMenuSelection> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a routerLink="/home">Home</a></li> <li class="breadcrumb-item active" aria-current="page">Admin</li> </ol> </nav> <div class="card"> <mat-card-title class="card-header"> <div class="row"> Actions <button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto mr-2" (click)="downloadCsv()"> EXPORT </button> </div> </mat-card-title> <div class="card-body"> <mat-form-field appearance="outline"> <mat-label> Filter </mat-label> <input matInput type="text" (keyup)="doFilter($event.target.value)" placeholder="Filter"> <mat-icon matSuffix>search</mat-icon> </mat-form-field> <mat-table class="mat-elevation-z10" [dataSource]="dataSource" multiTemplateDataRows> <!-- Expand Column --> <ng-container matColumnDef="expand"> <mat-header-cell *matHeaderCellDef> Expand </mat-header-cell> <mat-cell *matCellDef="let element" (click)="expandCollapse(element)"> <span *ngIf="!element.isExpanded" class="signs"> + </span> <span *ngIf="element.isExpanded" class="signs"> - </span> </mat-cell> </ng-container> <ng-container matColumnDef="user"> <mat-header-cell *matHeaderCellDef> NAME </mat-header-cell> <mat-cell *matCellDef="let action"> {{action.user}} </mat-cell> </ng-container> <ng-container matColumnDef="role"> <mat-header-cell *matHeaderCellDef> ROLE </mat-header-cell> <mat-cell *matCellDef="let action"> {{action.role}} </mat-cell> </ng-container> <ng-container matColumnDef="action"> <mat-header-cell *matHeaderCellDef> ACTION </mat-header-cell> <mat-cell *matCellDef="let action"> {{action.action}} </mat-cell> </ng-container> <ng-container matColumnDef="status"> <mat-header-cell *matHeaderCellDef> STATUS </mat-header-cell> <mat-cell *matCellDef="let action"> <span *ngIf="action.approval == true" class="badge badge-success badge-pill"> {{approvalStatus(action.approval)}} </span> <span *ngIf="action.approval == false" class="badge badge-danger badge-pill"> {{approvalStatus(action.approval)}} </span> </mat-cell> </ng-container> <ng-container matColumnDef="approve"> <mat-header-cell *matHeaderCellDef> APPROVE </mat-header-cell> <mat-cell *matCellDef="let action"> <button mat-raised-button color="primary" *ngIf="!action.approval" class="btn btn-outline-success" (click)="approveAction(action)"> Approve </button> <button mat-raised-button color="warn" *ngIf="action.approval" class="btn btn-outline-danger" (click)="disapproveAction(action)"> Disapprove </button> </mat-cell> </ng-container> <!-- Expanded Content Column - The detail row is made up of this one column --> <ng-container matColumnDef="expandedDetail"> <mat-cell *matCellDef="let action"> <div> <span><strong>Staff Name:</strong> {{action.user}}</span><br> <span><strong>Role:</strong> {{action.role}}</span><br> <span><strong>Action Details:</strong> {{action.action}}</span><br> <span><strong>Approval Status:</strong> {{action.approval}}</span><br> </div> </mat-cell> </ng-container> <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row> <mat-row *matRowDef="let row; columns: displayedColumns;" matRipple class="element-row" [class.expanded]="row.isExpanded"></mat-row> <mat-row *matRowDef="let row; columns: [\'expandedDetail\'];" [@detailExpand]="row.isExpanded == true ? \'expanded\': \'collapsed\'" style="overflow: hidden"></mat-row> </mat-table> <mat-paginator [pageSize]="10" [pageSizeOptions]="[10, 20, 50, 100]" showFirstLastButtons></mat-paginator> </div> </div> </div> <app-footer appMenuSelection></app-footer> </div> <!-- ============================================================== --> <!-- End Page content --> <!-- ============================================================== --></div></div>' var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper"> <app-sidebar></app-sidebar> <!-- ============================================================== --> <!-- Start Page Content here --> <!-- ============================================================== --> <div id="content"> <app-topbar></app-topbar> <!-- Start Content--> <div class="container-fluid" appMenuSelection> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a routerLink="/home">Home</a></li> <li class="breadcrumb-item active" aria-current="page">Admin</li> </ol> </nav> <div class="card"> <mat-card-title class="card-header"> <div class="row"> Actions <button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto mr-2" (click)="downloadCsv()"> EXPORT </button> </div> </mat-card-title> <div class="card-body"> <mat-form-field appearance="outline"> <mat-label> Filter </mat-label> <input matInput type="text" (keyup)="doFilter($event.target.value)" placeholder="Filter"> <mat-icon matSuffix>search</mat-icon> </mat-form-field> <mat-table class="mat-elevation-z10" [dataSource]="dataSource" multiTemplateDataRows> <!-- Expand Column --> <ng-container matColumnDef="expand"> <mat-header-cell *matHeaderCellDef> Expand </mat-header-cell> <mat-cell *matCellDef="let element" (click)="expandCollapse(element)"> <span *ngIf="!element.isExpanded" class="signs"> + </span> <span *ngIf="element.isExpanded" class="signs"> - </span> </mat-cell> </ng-container> <ng-container matColumnDef="user"> <mat-header-cell *matHeaderCellDef> NAME </mat-header-cell> <mat-cell *matCellDef="let action"> {{action.user}} </mat-cell> </ng-container> <ng-container matColumnDef="role"> <mat-header-cell *matHeaderCellDef> ROLE </mat-header-cell> <mat-cell *matCellDef="let action"> {{action.role}} </mat-cell> </ng-container> <ng-container matColumnDef="action"> <mat-header-cell *matHeaderCellDef> ACTION </mat-header-cell> <mat-cell *matCellDef="let action"> {{action.action}} </mat-cell> </ng-container> <ng-container matColumnDef="status"> <mat-header-cell *matHeaderCellDef> STATUS </mat-header-cell> <mat-cell *matCellDef="let action"> <span *ngIf="action.approval == true" class="badge badge-success badge-pill"> {{approvalStatus(action.approval)}} </span> <span *ngIf="action.approval == false" class="badge badge-danger badge-pill"> {{approvalStatus(action.approval)}} </span> </mat-cell> </ng-container> <ng-container matColumnDef="approve"> <mat-header-cell *matHeaderCellDef> APPROVE </mat-header-cell> <mat-cell *matCellDef="let action"> <button mat-raised-button color="primary" *ngIf="!action.approval" class="btn btn-outline-success" (click)="approveAction(action)"> Approve </button> <button mat-raised-button color="warn" *ngIf="action.approval" class="btn btn-outline-danger" (click)="disapproveAction(action)"> Disapprove </button> </mat-cell> </ng-container> <!-- Expanded Content Column - The detail row is made up of this one column --> <ng-container matColumnDef="expandedDetail"> <mat-cell *matCellDef="let action"> <div> <span><strong>Staff Name:</strong> {{action.user}}</span><br> <span><strong>Role:</strong> {{action.role}}</span><br> <span><strong>Action Details:</strong> {{action.action}}</span><br> <span><strong>Approval Status:</strong> {{action.approval}}</span><br> </div> </mat-cell> </ng-container> <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row> <mat-row *matRowDef="let row; columns: displayedColumns;" matRipple class="element-row" [class.expanded]="row.isExpanded"></mat-row> <mat-row *matRowDef="let row; columns: [\'expandedDetail\'];" [@detailExpand]="row.isExpanded == true ? \'expanded\': \'collapsed\'" style="overflow: hidden"></mat-row> </mat-table> <mat-paginator [pageSize]="10" [pageSizeOptions]="[10, 20, 50, 100]" showFirstLastButtons></mat-paginator> </div> </div> </div> <app-footer appMenuSelection></app-footer> </div> <!-- ============================================================== --> <!-- End Page content --> <!-- ============================================================== --></div></div>'
var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}]; var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[routerLink]'}]; var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'AdminComponent'}; var ACTUAL_COMPONENT = {'name': 'AdminComponent'};
</script> </script>
<script src="../js/tree.js"></script> <script src="../js/tree.js"></script>

View File

@ -66,6 +66,12 @@
<p class="comment">
<h3>Implements</h3>
</p>
<p class="comment">
<code><a href="https://angular.io/api/core/OnInit" target="_blank" >OnInit</a></code>
</p>
<section> <section>
@ -151,6 +157,9 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<ul class="index-list"> <ul class="index-list">
<li>
<a href="#ngOnInit">ngOnInit</a>
</li>
<li> <li>
<a href="#onResize">onResize</a> <a href="#onResize">onResize</a>
</li> </li>
@ -189,12 +198,12 @@
<tbody> <tbody>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<code>constructor(authService: <a href="../injectables/AuthService.html">AuthService</a>, transactionService: <a href="../injectables/TransactionService.html">TransactionService</a>, loggingService: <a href="../injectables/LoggingService.html">LoggingService</a>, errorDialogService: <a href="../injectables/ErrorDialogService.html">ErrorDialogService</a>)</code> <code>constructor(authService: <a href="../injectables/AuthService.html">AuthService</a>, transactionService: <a href="../injectables/TransactionService.html">TransactionService</a>, loggingService: <a href="../injectables/LoggingService.html">LoggingService</a>, errorDialogService: <a href="../injectables/ErrorDialogService.html">ErrorDialogService</a>, swUpdate: <a href="https://angular.io/api/service-worker/SwUpdate" target="_blank">SwUpdate</a>)</code>
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="15" class="link-to-prism">src/app/app.component.ts:15</a></div> <div class="io-line">Defined in <a href="" data-line="21" class="link-to-prism">src/app/app.component.ts:21</a></div>
</td> </td>
</tr> </tr>
@ -259,6 +268,18 @@
</td> </td>
</tr> </tr>
<tr>
<td>swUpdate</td>
<td>
<code><a href="https://angular.io/api/service-worker/SwUpdate" target="_blank" >SwUpdate</a></code>
</td>
<td>
No
</td>
</tr>
</tbody> </tbody>
</table> </table>
</div> </div>
@ -299,8 +320,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="74" <div class="io-line">Defined in <a href="" data-line="93"
class="link-to-prism">src/app/app.component.ts:74</a></div> class="link-to-prism">src/app/app.component.ts:93</a></div>
</td> </td>
</tr> </tr>
@ -334,8 +355,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="68" <div class="io-line">Defined in <a href="" data-line="87"
class="link-to-prism">src/app/app.component.ts:68</a></div> class="link-to-prism">src/app/app.component.ts:87</a></div>
</td> </td>
</tr> </tr>
@ -348,6 +369,45 @@
<h3 id="methods"> <h3 id="methods">
Methods Methods
</h3> </h3>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="ngOnInit"></a>
<span class="name">
<b>
ngOnInit
</b>
<a href="#ngOnInit"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<code>ngOnInit()</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="51"
class="link-to-prism">src/app/app.component.ts:51</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered"> <table class="table table-sm table-bordered">
<tbody> <tbody>
<tr> <tr>
@ -370,8 +430,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="43" <div class="io-line">Defined in <a href="" data-line="62"
class="link-to-prism">src/app/app.component.ts:43</a></div> class="link-to-prism">src/app/app.component.ts:62</a></div>
</td> </td>
</tr> </tr>
@ -445,7 +505,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="15" class="link-to-prism">src/app/app.component.ts:15</a></div> <div class="io-line">Defined in <a href="" data-line="21" class="link-to-prism">src/app/app.component.ts:21</a></div>
</td> </td>
</tr> </tr>
@ -477,7 +537,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="14" class="link-to-prism">src/app/app.component.ts:14</a></div> <div class="io-line">Defined in <a href="" data-line="20" class="link-to-prism">src/app/app.component.ts:20</a></div>
</td> </td>
</tr> </tr>
@ -509,7 +569,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="13" class="link-to-prism">src/app/app.component.ts:13</a></div> <div class="io-line">Defined in <a href="" data-line="19" class="link-to-prism">src/app/app.component.ts:19</a></div>
</td> </td>
</tr> </tr>
@ -541,7 +601,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="12" class="link-to-prism">src/app/app.component.ts:12</a></div> <div class="io-line">Defined in <a href="" data-line="18" class="link-to-prism">src/app/app.component.ts:18</a></div>
</td> </td>
</tr> </tr>
@ -554,17 +614,23 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {ChangeDetectionStrategy, Component, HostListener} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { ChangeDetectionStrategy, Component, HostListener, OnInit } from &#x27;@angular/core&#x27;;
import {AuthService, ErrorDialogService, LoggingService, TransactionService} from &#x27;@app/_services&#x27;; import {
import {catchError} from &#x27;rxjs/operators&#x27;; AuthService,
ErrorDialogService,
LoggingService,
TransactionService,
} from &#x27;@app/_services&#x27;;
import { catchError } from &#x27;rxjs/operators&#x27;;
import { SwUpdate } from &#x27;@angular/service-worker&#x27;;
@Component({ @Component({
selector: &#x27;app-root&#x27;, selector: &#x27;app-root&#x27;,
templateUrl: &#x27;./app.component.html&#x27;, templateUrl: &#x27;./app.component.html&#x27;,
styleUrls: [&#x27;./app.component.scss&#x27;], styleUrls: [&#x27;./app.component.scss&#x27;],
changeDetection: ChangeDetectionStrategy.OnPush changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class AppComponent { export class AppComponent implements OnInit {
title &#x3D; &#x27;CICADA&#x27;; title &#x3D; &#x27;CICADA&#x27;;
readyStateTarget: number &#x3D; 3; readyStateTarget: number &#x3D; 3;
readyState: number &#x3D; 0; readyState: number &#x3D; 0;
@ -574,7 +640,8 @@ export class AppComponent {
private authService: AuthService, private authService: AuthService,
private transactionService: TransactionService, private transactionService: TransactionService,
private loggingService: LoggingService, private loggingService: LoggingService,
private errorDialogService: ErrorDialogService private errorDialogService: ErrorDialogService,
private swUpdate: SwUpdate
) { ) {
(async () &#x3D;&gt; { (async () &#x3D;&gt; {
try { try {
@ -587,14 +654,26 @@ export class AppComponent {
const publicKeys &#x3D; await this.authService.getPublicKeys(); const publicKeys &#x3D; await this.authService.getPublicKeys();
await this.authService.mutableKeyStore.importPublicKey(publicKeys); await this.authService.mutableKeyStore.importPublicKey(publicKeys);
} catch (error) { } catch (error) {
this.errorDialogService.openDialog({message: &#x27;Trusted keys endpoint can\&#x27;t be reached. Please try again later.&#x27;}); this.errorDialogService.openDialog({
message: &#x27;Trusted keys endpoint cannot be reached. Please try again later.&#x27;,
});
// TODO do something to halt user progress...show a sad cicada page 🦗? // TODO do something to halt user progress...show a sad cicada page 🦗?
} }
})(); })();
this.mediaQuery.addListener(this.onResize); this.mediaQuery.addEventListener(&#x27;change&#x27;, this.onResize);
this.onResize(this.mediaQuery); this.onResize(this.mediaQuery);
} }
ngOnInit(): void {
if (!this.swUpdate.isEnabled) {
this.swUpdate.available.subscribe(() &#x3D;&gt; {
if (confirm(&#x27;New Version available. Load New Version?&#x27;)) {
window.location.reload();
}
});
}
}
// Load resize // Load resize
onResize(e): void { onResize(e): void {
const sidebar: HTMLElement &#x3D; document.getElementById(&#x27;sidebar&#x27;); const sidebar: HTMLElement &#x3D; document.getElementById(&#x27;sidebar&#x27;);
@ -636,7 +715,8 @@ export class AppComponent {
</div> </div>
<div class="tab-pane fade " id="c-templateData"> <div class="tab-pane fade " id="c-templateData">
<pre class="line-numbers"><code class="language-html">&lt;router-outlet (activate)&#x3D;&quot;onResize(mediaQuery)&quot;&gt;&lt;/router-outlet&gt; <pre class="line-numbers"><code class="language-html">&lt;app-network-status&gt;&lt;/app-network-status&gt;
&lt;router-outlet (activate)&#x3D;&quot;onResize(mediaQuery)&quot;&gt;&lt;/router-outlet&gt;
</code></pre> </code></pre>
</div> </div>
@ -672,9 +752,9 @@ export class AppComponent {
<script src="../js/libs/htmlparser.js"></script> <script src="../js/libs/htmlparser.js"></script>
<script src="../js/libs/deep-iterator.js"></script> <script src="../js/libs/deep-iterator.js"></script>
<script> <script>
var COMPONENT_TEMPLATE = '<div><router-outlet (activate)="onResize(mediaQuery)"></router-outlet></div>' var COMPONENT_TEMPLATE = '<div><app-network-status></app-network-status><router-outlet (activate)="onResize(mediaQuery)"></router-outlet></div>'
var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}]; var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[routerLink]'}]; var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'AppComponent'}; var ACTUAL_COMPONENT = {'name': 'AppComponent'};
</script> </script>
<script src="../js/tree.js"></script> <script src="../js/tree.js"></script>

View File

@ -304,8 +304,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="48" <div class="io-line">Defined in <a href="" data-line="52"
class="link-to-prism">src/app/auth/auth.component.ts:48</a></div> class="link-to-prism">src/app/auth/auth.component.ts:52</a></div>
</td> </td>
</tr> </tr>
@ -386,8 +386,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="38" <div class="io-line">Defined in <a href="" data-line="40"
class="link-to-prism">src/app/auth/auth.component.ts:38</a></div> class="link-to-prism">src/app/auth/auth.component.ts:40</a></div>
</td> </td>
</tr> </tr>
@ -425,8 +425,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="59" <div class="io-line">Defined in <a href="" data-line="63"
class="link-to-prism">src/app/auth/auth.component.ts:59</a></div> class="link-to-prism">src/app/auth/auth.component.ts:63</a></div>
</td> </td>
</tr> </tr>
@ -464,8 +464,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="67" <div class="io-line">Defined in <a href="" data-line="71"
class="link-to-prism">src/app/auth/auth.component.ts:67</a></div> class="link-to-prism">src/app/auth/auth.component.ts:71</a></div>
</td> </td>
</tr> </tr>
@ -674,17 +674,17 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {ChangeDetectionStrategy, Component, OnInit} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { ChangeDetectionStrategy, Component, OnInit } from &#x27;@angular/core&#x27;;
import {FormBuilder, FormGroup, Validators} from &#x27;@angular/forms&#x27;; import { FormBuilder, FormGroup, Validators } from &#x27;@angular/forms&#x27;;
import {CustomErrorStateMatcher} from &#x27;@app/_helpers&#x27;; import { CustomErrorStateMatcher } from &#x27;@app/_helpers&#x27;;
import {AuthService} from &#x27;@app/_services&#x27;; import { AuthService } from &#x27;@app/_services&#x27;;
import {Router} from &#x27;@angular/router&#x27;; import { Router } from &#x27;@angular/router&#x27;;
@Component({ @Component({
selector: &#x27;app-auth&#x27;, selector: &#x27;app-auth&#x27;,
templateUrl: &#x27;./auth.component.html&#x27;, templateUrl: &#x27;./auth.component.html&#x27;,
styleUrls: [&#x27;./auth.component.scss&#x27;], styleUrls: [&#x27;./auth.component.scss&#x27;],
changeDetection: ChangeDetectionStrategy.OnPush changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class AuthComponent implements OnInit { export class AuthComponent implements OnInit {
keyForm: FormGroup; keyForm: FormGroup;
@ -696,7 +696,7 @@ export class AuthComponent implements OnInit {
private authService: AuthService, private authService: AuthService,
private formBuilder: FormBuilder, private formBuilder: FormBuilder,
private router: Router private router: Router
) { } ) {}
async ngOnInit(): Promise&lt;void&gt; { async ngOnInit(): Promise&lt;void&gt; {
this.keyForm &#x3D; this.formBuilder.group({ this.keyForm &#x3D; this.formBuilder.group({
@ -709,12 +709,16 @@ export class AuthComponent implements OnInit {
// } // }
} }
get keyFormStub(): any { return this.keyForm.controls; } get keyFormStub(): any {
return this.keyForm.controls;
}
async onSubmit(): Promise&lt;void&gt; { async onSubmit(): Promise&lt;void&gt; {
this.submitted &#x3D; true; this.submitted &#x3D; true;
if (this.keyForm.invalid) { return; } if (this.keyForm.invalid) {
return;
}
this.loading &#x3D; true; this.loading &#x3D; true;
await this.authService.setKey(this.keyFormStub.key.value); await this.authService.setKey(this.keyFormStub.key.value);
@ -722,11 +726,11 @@ export class AuthComponent implements OnInit {
} }
login(): void { login(): void {
// TODO check if we have privatekey // TODO check if we have privatekey
// Send us to home if we have a private key // Send us to home if we have a private key
// talk to meta somehow // talk to meta somehow
// in the error interceptor if 401/403 handle it // in the error interceptor if 401/403 handle it
// if 200 go /home // if 200 go /home
if (this.authService.getPrivateKey()) { if (this.authService.getPrivateKey()) {
this.router.navigate([&#x27;/home&#x27;]); this.router.navigate([&#x27;/home&#x27;]);
} }
@ -840,8 +844,8 @@ export class AuthComponent implements OnInit {
<script src="../js/libs/deep-iterator.js"></script> <script src="../js/libs/deep-iterator.js"></script>
<script> <script>
var COMPONENT_TEMPLATE = '<div><div class="container"> <div class="row justify-content-center mt-5 mb-5"> <div class="col-lg-6 col-md-8 col-sm-10"> <div class="card"> <mat-card-title class="card-header pt-4 pb-4 text-center bg-dark"> <a routerLink="/"> <h1 class="text-white">CICADA</h1> </a> </mat-card-title> <div id="one" style="display: block" class="card-body p-4"> <div class="text-center w-75 m-auto"> <h4 class="text-dark-50 text-center font-weight-bold">Add Private Key</h4> </div> <form [formGroup]="keyForm" (ngSubmit)="onSubmit()"> <mat-form-field appearance="outline" class="full-width"> <mat-label>Private Key</mat-label> <textarea matInput style="height: 30rem" formControlName="key" placeholder="Enter your private key..." [errorStateMatcher]="matcher"></textarea> <div *ngIf="submitted && keyFormStub.key.errors" class="invalid-feedback"> <mat-error *ngIf="keyFormStub.key.errors.required">Private Key is required.</mat-error> </div> </mat-form-field> <button mat-raised-button matRipple color="primary" type="submit" [disabled]="loading"> <span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span> Add Key </button> </form> </div> <div id="two" style="display: none" class="card-body p-4 align-items-center"> <div class="text-center w-75 m-auto"> <h4 id="state" class="text-dark-50 text-center font-weight-bold"></h4> <button mat-raised-button matRipple color="primary" type="submit" (click)="login()"> Login </button> </div> <div class="row mt-3"> <div class="col-12 text-center"> <p class="text-muted">Change private key? <a (click)="switchWindows()" class="text-muted ml-1"><b>Enter private key</b></a></p> </div> <!-- end col--> </div> <!-- end row --> </div> </div> </div> </div></div></div>' var COMPONENT_TEMPLATE = '<div><div class="container"> <div class="row justify-content-center mt-5 mb-5"> <div class="col-lg-6 col-md-8 col-sm-10"> <div class="card"> <mat-card-title class="card-header pt-4 pb-4 text-center bg-dark"> <a routerLink="/"> <h1 class="text-white">CICADA</h1> </a> </mat-card-title> <div id="one" style="display: block" class="card-body p-4"> <div class="text-center w-75 m-auto"> <h4 class="text-dark-50 text-center font-weight-bold">Add Private Key</h4> </div> <form [formGroup]="keyForm" (ngSubmit)="onSubmit()"> <mat-form-field appearance="outline" class="full-width"> <mat-label>Private Key</mat-label> <textarea matInput style="height: 30rem" formControlName="key" placeholder="Enter your private key..." [errorStateMatcher]="matcher"></textarea> <div *ngIf="submitted && keyFormStub.key.errors" class="invalid-feedback"> <mat-error *ngIf="keyFormStub.key.errors.required">Private Key is required.</mat-error> </div> </mat-form-field> <button mat-raised-button matRipple color="primary" type="submit" [disabled]="loading"> <span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span> Add Key </button> </form> </div> <div id="two" style="display: none" class="card-body p-4 align-items-center"> <div class="text-center w-75 m-auto"> <h4 id="state" class="text-dark-50 text-center font-weight-bold"></h4> <button mat-raised-button matRipple color="primary" type="submit" (click)="login()"> Login </button> </div> <div class="row mt-3"> <div class="col-12 text-center"> <p class="text-muted">Change private key? <a (click)="switchWindows()" class="text-muted ml-1"><b>Enter private key</b></a></p> </div> <!-- end col--> </div> <!-- end row --> </div> </div> </div> </div></div></div>'
var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}]; var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[routerLink]'}]; var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'AuthComponent'}; var ACTUAL_COMPONENT = {'name': 'AuthComponent'};
</script> </script>
<script src="../js/tree.js"></script> <script src="../js/tree.js"></script>

File diff suppressed because one or more lines are too long

View File

@ -233,7 +233,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="12" class="link-to-prism">src/app/shared/error-dialog/error-dialog.component.ts:12</a></div> <div class="io-line">Defined in <a href="" data-line="11" class="link-to-prism">src/app/shared/error-dialog/error-dialog.component.ts:11</a></div>
</td> </td>
</tr> </tr>
@ -246,19 +246,17 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {Component, ChangeDetectionStrategy, Inject} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Component, ChangeDetectionStrategy, Inject } from &#x27;@angular/core&#x27;;
import {MAT_DIALOG_DATA} from &#x27;@angular/material/dialog&#x27;; import { MAT_DIALOG_DATA } from &#x27;@angular/material/dialog&#x27;;
@Component({ @Component({
selector: &#x27;app-error-dialog&#x27;, selector: &#x27;app-error-dialog&#x27;,
templateUrl: &#x27;./error-dialog.component.html&#x27;, templateUrl: &#x27;./error-dialog.component.html&#x27;,
styleUrls: [&#x27;./error-dialog.component.scss&#x27;], styleUrls: [&#x27;./error-dialog.component.scss&#x27;],
changeDetection: ChangeDetectionStrategy.OnPush changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class ErrorDialogComponent { export class ErrorDialogComponent {
constructor(@Inject(MAT_DIALOG_DATA) public data: any) {}
constructor(@Inject(MAT_DIALOG_DATA) public data: any) { }
} }
</code></pre> </code></pre>
</div> </div>
@ -310,8 +308,8 @@ export class ErrorDialogComponent {
<script src="../js/libs/deep-iterator.js"></script> <script src="../js/libs/deep-iterator.js"></script>
<script> <script>
var COMPONENT_TEMPLATE = '<div><div> <div> <p> Message: {{ data.message }} </p> <p *ngIf="data.status"> Status: {{ data?.status }} </p> </div></div></div>' var COMPONENT_TEMPLATE = '<div><div> <div> <p> Message: {{ data.message }} </p> <p *ngIf="data.status"> Status: {{ data?.status }} </p> </div></div></div>'
var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}]; var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[routerLink]'}]; var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'ErrorDialogComponent'}; var ACTUAL_COMPONENT = {'name': 'ErrorDialogComponent'};
</script> </script>
<script src="../js/tree.js"></script> <script src="../js/tree.js"></script>

View File

@ -199,8 +199,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="13" <div class="io-line">Defined in <a href="" data-line="12"
class="link-to-prism">src/app/shared/footer/footer.component.ts:13</a></div> class="link-to-prism">src/app/shared/footer/footer.component.ts:12</a></div>
</td> </td>
</tr> </tr>
@ -222,21 +222,18 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {ChangeDetectionStrategy, Component, OnInit} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { ChangeDetectionStrategy, Component, OnInit } from &#x27;@angular/core&#x27;;
@Component({ @Component({
selector: &#x27;app-footer&#x27;, selector: &#x27;app-footer&#x27;,
templateUrl: &#x27;./footer.component.html&#x27;, templateUrl: &#x27;./footer.component.html&#x27;,
styleUrls: [&#x27;./footer.component.scss&#x27;], styleUrls: [&#x27;./footer.component.scss&#x27;],
changeDetection: ChangeDetectionStrategy.OnPush changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class FooterComponent implements OnInit { export class FooterComponent implements OnInit {
constructor() {}
constructor() { } ngOnInit(): void {}
ngOnInit(): void {
}
} }
</code></pre> </code></pre>
</div> </div>
@ -283,8 +280,8 @@ export class FooterComponent implements OnInit {
<script src="../js/libs/deep-iterator.js"></script> <script src="../js/libs/deep-iterator.js"></script>
<script> <script>
var COMPONENT_TEMPLATE = '<div><!-- Footer Start --><footer class="footer"> 2020 © Grassroots Economics</footer><!-- end Footer --></div>' var COMPONENT_TEMPLATE = '<div><!-- Footer Start --><footer class="footer"> 2020 © Grassroots Economics</footer><!-- end Footer --></div>'
var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}]; var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[routerLink]'}]; var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'FooterComponent'}; var ACTUAL_COMPONENT = {'name': 'FooterComponent'};
</script> </script>
<script src="../js/tree.js"></script> <script src="../js/tree.js"></script>

View File

@ -150,8 +150,8 @@ export class FooterStubComponent {}
<script src="../js/libs/deep-iterator.js"></script> <script src="../js/libs/deep-iterator.js"></script>
<script> <script>
var COMPONENT_TEMPLATE = '<div></div>' var COMPONENT_TEMPLATE = '<div></div>'
var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}]; var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[routerLink]'}]; var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'FooterStubComponent'}; var ACTUAL_COMPONENT = {'name': 'FooterStubComponent'};
</script> </script>
<script src="../js/tree.js"></script> <script src="../js/tree.js"></script>

View File

@ -0,0 +1,498 @@
<!doctype html>
<html class="no-js" lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>CICADA</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="../images/favicon.ico">
<link rel="stylesheet" href="../styles/style.css">
</head>
<body>
<div class="navbar navbar-default navbar-fixed-top visible-xs">
<a href="../" class="navbar-brand">CICADA</a>
<button type="button" class="btn btn-default btn-menu ion-ios-menu" id="btn-menu"></button>
</div>
<div class="xs-menu menu" id="mobile-menu">
<div id="book-search-input" role="search"><input type="text" placeholder="Type to search"></div> <compodoc-menu></compodoc-menu>
</div>
<div class="container-fluid main">
<div class="row main">
<div class="hidden-xs menu">
<compodoc-menu mode="normal"></compodoc-menu>
</div>
<!-- START CONTENT -->
<div class="content component">
<div class="content-data">
<ol class="breadcrumb">
<li>Components</li>
<li>NetworkStatusComponent</li>
</ol>
<ul class="nav nav-tabs" role="tablist">
<li class="active">
<a href="#info" role="tab" id="info-tab" data-toggle="tab" data-link="info">Info</a>
</li>
<li >
<a href="#source" role="tab" id="source-tab" data-toggle="tab" data-link="source">Source</a>
</li>
<li >
<a href="#templateData" role="tab" id="templateData-tab" data-toggle="tab" data-link="template">Template</a>
</li>
<li >
<a href="#styleData" role="tab" id="styleData-tab" data-toggle="tab" data-link="style">Styles</a>
</li>
<li >
<a href="#tree" role="tab" id="tree-tab" data-toggle="tab" data-link="dom-tree">DOM Tree</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane fade active in" id="c-info"><p class="comment">
<h3>File</h3>
</p>
<p class="comment">
<code>src/app/shared/network-status/network-status.component.ts</code>
</p>
<p class="comment">
<h3>Implements</h3>
</p>
<p class="comment">
<code><a href="https://angular.io/api/core/OnInit" target="_blank" >OnInit</a></code>
</p>
<section>
<h3>Metadata</h3>
<table class="table table-sm table-hover">
<tbody>
<tr>
<td class="col-md-3">changeDetection</td>
<td class="col-md-9"><code>ChangeDetectionStrategy.OnPush</code></td>
</tr>
<tr>
<td class="col-md-3">selector</td>
<td class="col-md-9"><code>app-network-status</code></td>
</tr>
<tr>
<td class="col-md-3">styleUrls</td>
<td class="col-md-9"><code>./network-status.component.scss</code></td>
</tr>
<tr>
<td class="col-md-3">templateUrl</td>
<td class="col-md-9"><code>./network-status.component.html</code></td>
</tr>
</tbody>
</table>
</section>
<section>
<h3 id="index">Index</h3>
<table class="table table-sm table-bordered index-table">
<tbody>
<tr>
<td class="col-md-4">
<h6><b>Properties</b></h6>
</td>
</tr>
<tr>
<td class="col-md-4">
<ul class="index-list">
<li>
<a href="#noInternetConnection">noInternetConnection</a>
</li>
</ul>
</td>
</tr>
<tr>
<td class="col-md-4">
<h6><b>Methods</b></h6>
</td>
</tr>
<tr>
<td class="col-md-4">
<ul class="index-list">
<li>
<a href="#handleNetworkChange">handleNetworkChange</a>
</li>
<li>
<a href="#ngOnInit">ngOnInit</a>
</li>
</ul>
</td>
</tr>
</tbody>
</table>
</section>
<section>
<h3 id="constructor">Constructor</h3>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<code>constructor(cdr: <a href="https://angular.io/api/core/ChangeDetectorRef" target="_blank">ChangeDetectorRef</a>)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="10" class="link-to-prism">src/app/shared/network-status/network-status.component.ts:10</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div>
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>cdr</td>
<td>
<code><a href="https://angular.io/api/core/ChangeDetectorRef" target="_blank" >ChangeDetectorRef</a></code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
</tbody>
</table>
</section>
<section>
<h3 id="methods">
Methods
</h3>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="handleNetworkChange"></a>
<span class="name">
<b>
handleNetworkChange
</b>
<a href="#handleNetworkChange"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<code>handleNetworkChange()</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="18"
class="link-to-prism">src/app/shared/network-status/network-status.component.ts:18</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="ngOnInit"></a>
<span class="name">
<b>
ngOnInit
</b>
<a href="#ngOnInit"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<code>ngOnInit()</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="16"
class="link-to-prism">src/app/shared/network-status/network-status.component.ts:16</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
</td>
</tr>
</tbody>
</table>
</section>
<section>
<h3 id="inputs">
Properties
</h3>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="noInternetConnection"></a>
<span class="name">
<b>
noInternetConnection</b>
<a href="#noInternetConnection"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/boolean" target="_blank" >boolean</a></code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Default value : </i><code>!navigator.onLine</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="10" class="link-to-prism">src/app/shared/network-status/network-status.component.ts:10</a></div>
</td>
</tr>
</tbody>
</table>
</section>
</div>
<div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Component, OnInit, ChangeDetectionStrategy, ChangeDetectorRef } from &#x27;@angular/core&#x27;;
@Component({
selector: &#x27;app-network-status&#x27;,
templateUrl: &#x27;./network-status.component.html&#x27;,
styleUrls: [&#x27;./network-status.component.scss&#x27;],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class NetworkStatusComponent implements OnInit {
noInternetConnection: boolean &#x3D; !navigator.onLine;
constructor(private cdr: ChangeDetectorRef) {
this.handleNetworkChange();
}
ngOnInit(): void {}
handleNetworkChange(): void {
setTimeout(() &#x3D;&gt; {
if (!navigator.onLine !&#x3D;&#x3D; this.noInternetConnection) {
this.noInternetConnection &#x3D; !navigator.onLine;
this.cdr.detectChanges();
}
this.handleNetworkChange();
}, 5000);
}
}
</code></pre>
</div>
<div class="tab-pane fade " id="c-templateData">
<pre class="line-numbers"><code class="language-html">&lt;nav class&#x3D;&quot;navbar navbar-dark bg-dark&quot;&gt;
&lt;h1 class&#x3D;&quot;navbar-brand&quot;&gt;
&lt;div *ngIf&#x3D;&quot;noInternetConnection; then offlineBlock else onlineBlock&quot;&gt;&lt;/div&gt;
&lt;ng-template #offlineBlock&gt;
&lt;strong style&#x3D;&quot;color: red;&quot;&gt;OFFLINE &lt;/strong&gt;
&lt;img width&#x3D;&quot;20rem&quot; src&#x3D;&quot;assets/images/no-wifi.svg&quot; alt&#x3D;&quot;Internet Disconnected&quot;&gt;
&lt;/ng-template&gt;
&lt;ng-template #onlineBlock&gt;
&lt;strong style&#x3D;&quot;color: lawngreen;&quot;&gt;ONLINE &lt;/strong&gt;
&lt;img width&#x3D;&quot;20rem&quot; src&#x3D;&quot;assets/images/wifi.svg&quot; alt&#x3D;&quot;Internet Connected&quot;&gt;
&lt;/ng-template&gt;
&lt;/h1&gt;
&lt;/nav&gt;
</code></pre>
</div>
<div class="tab-pane fade " id="c-styleData">
<p class="comment">
<code>./network-status.component.scss</code>
</p>
<pre class="line-numbers"><code class="language-scss"></code></pre>
</div>
<div class="tab-pane fade " id="c-tree">
<div id="tree-container"></div>
<div class="tree-legend">
<div class="title">
<b>Legend</b>
</div>
<div>
<div class="color htmlelement"></div><span>Html element</span>
</div>
<div>
<div class="color component"></div><span>Component</span>
</div>
<div>
<div class="color directive"></div><span>Html element with directive</span>
</div>
</div>
</div>
</div>
<script src="../js/libs/vis.min.js"></script>
<script src="../js/libs/htmlparser.js"></script>
<script src="../js/libs/deep-iterator.js"></script>
<script>
var COMPONENT_TEMPLATE = '<div><nav class="navbar navbar-dark bg-dark"> <h1 class="navbar-brand"> <div *ngIf="noInternetConnection; then offlineBlock else onlineBlock"></div> <ng-template #offlineBlock> <strong style="color: red;">OFFLINE </strong> <img width="20rem" src="assets/images/no-wifi.svg" alt="Internet Disconnected"> </ng-template> <ng-template #onlineBlock> <strong style="color: lawngreen;">ONLINE </strong> <img width="20rem" src="assets/images/wifi.svg" alt="Internet Connected"> </ng-template> </h1></nav></div>'
var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'NetworkStatusComponent'};
</script>
<script src="../js/tree.js"></script>
</div><div class="search-results">
<div class="has-results">
<h1 class="search-results-title"><span class='search-results-count'></span> result-matching "<span class='search-query'></span>"</h1>
<ul class="search-results-list"></ul>
</div>
<div class="no-results">
<h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
</div>
</div>
</div>
<!-- END CONTENT -->
</div>
</div>
<script>
var COMPODOC_CURRENT_PAGE_DEPTH = 1;
var COMPODOC_CURRENT_PAGE_CONTEXT = 'component';
var COMPODOC_CURRENT_PAGE_URL = 'NetworkStatusComponent.html';
var MAX_SEARCH_RESULTS = 15;
</script>
<script src="../js/libs/custom-elements.min.js"></script>
<script src="../js/libs/lit-html.js"></script>
<!-- Required to polyfill modern browsers as code is ES5 for IE... -->
<script src="../js/libs/custom-elements-es5-adapter.js" charset="utf-8" defer></script>
<script src="../js/menu-wc.js" defer></script>
<script src="../js/libs/bootstrap-native.js"></script>
<script src="../js/libs/es6-shim.min.js"></script>
<script src="../js/libs/EventDispatcher.js"></script>
<script src="../js/libs/promise.min.js"></script>
<script src="../js/libs/zepto.min.js"></script>
<script src="../js/compodoc.js"></script>
<script src="../js/tabs.js"></script>
<script src="../js/menu.js"></script>
<script src="../js/libs/clipboard.min.js"></script>
<script src="../js/libs/prism.js"></script>
<script src="../js/sourceCode.js"></script>
<script src="../js/search/search.js"></script>
<script src="../js/search/lunr.min.js"></script>
<script src="../js/search/search-lunr.js"></script>
<script src="../js/search/search_index.js"></script>
<script src="../js/lazy-load-graphs.js"></script>
</body>
</html>

View File

@ -266,8 +266,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="20" <div class="io-line">Defined in <a href="" data-line="18"
class="link-to-prism">src/app/pages/settings/organization/organization.component.ts:20</a></div> class="link-to-prism">src/app/pages/settings/organization/organization.component.ts:18</a></div>
</td> </td>
</tr> </tr>
@ -441,7 +441,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="28" class="link-to-prism">src/app/pages/settings/organization/organization.component.ts:28</a></div> <div class="io-line">Defined in <a href="" data-line="26" class="link-to-prism">src/app/pages/settings/organization/organization.component.ts:26</a></div>
</td> </td>
</tr> </tr>
@ -452,38 +452,40 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {ChangeDetectionStrategy, Component, OnInit} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { ChangeDetectionStrategy, Component, OnInit } from &#x27;@angular/core&#x27;;
import {FormBuilder, FormGroup, Validators} from &#x27;@angular/forms&#x27;; import { FormBuilder, FormGroup, Validators } from &#x27;@angular/forms&#x27;;
import {CustomErrorStateMatcher} from &#x27;@app/_helpers&#x27;; import { CustomErrorStateMatcher } from &#x27;@app/_helpers&#x27;;
@Component({ @Component({
selector: &#x27;app-organization&#x27;, selector: &#x27;app-organization&#x27;,
templateUrl: &#x27;./organization.component.html&#x27;, templateUrl: &#x27;./organization.component.html&#x27;,
styleUrls: [&#x27;./organization.component.scss&#x27;], styleUrls: [&#x27;./organization.component.scss&#x27;],
changeDetection: ChangeDetectionStrategy.OnPush changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class OrganizationComponent implements OnInit { export class OrganizationComponent implements OnInit {
organizationForm: FormGroup; organizationForm: FormGroup;
submitted: boolean &#x3D; false; submitted: boolean &#x3D; false;
matcher: CustomErrorStateMatcher &#x3D; new CustomErrorStateMatcher(); matcher: CustomErrorStateMatcher &#x3D; new CustomErrorStateMatcher();
constructor( constructor(private formBuilder: FormBuilder) {}
private formBuilder: FormBuilder
) { }
ngOnInit(): void { ngOnInit(): void {
this.organizationForm &#x3D; this.formBuilder.group({ this.organizationForm &#x3D; this.formBuilder.group({
disbursement: [&#x27;&#x27;, Validators.required], disbursement: [&#x27;&#x27;, Validators.required],
transfer: &#x27;&#x27;, transfer: &#x27;&#x27;,
countryCode: [&#x27;&#x27;, Validators.required] countryCode: [&#x27;&#x27;, Validators.required],
}); });
} }
get organizationFormStub(): any { return this.organizationForm.controls; } get organizationFormStub(): any {
return this.organizationForm.controls;
}
onSubmit(): void { onSubmit(): void {
this.submitted &#x3D; true; this.submitted &#x3D; true;
if (this.organizationForm.invalid || !confirm(&#x27;Set organization information?&#x27;)) { return; } if (this.organizationForm.invalid || !confirm(&#x27;Set organization information?&#x27;)) {
return;
}
this.submitted &#x3D; false; this.submitted &#x3D; false;
} }
} }
@ -590,8 +592,8 @@ export class OrganizationComponent implements OnInit {
<script src="../js/libs/deep-iterator.js"></script> <script src="../js/libs/deep-iterator.js"></script>
<script> <script>
var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper"> <app-sidebar></app-sidebar> <!-- ============================================================== --> <!-- Start Page Content here --> <!-- ============================================================== --> <div id="content"> <app-topbar></app-topbar> <!-- Start Content--> <div class="container-fluid" appMenuSelection> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a routerLink="/home">Home</a></li> <li class="breadcrumb-item"><a routerLink="/settings">Settings</a></li> <li class="breadcrumb-item active" aria-current="page">Organization Settings</li> </ol> </nav> <div class="col-md-6 center-body"> <div class="card"> <mat-card-title class="card-header text-center"> DEFAULT ORGANISATION SETTINGS </mat-card-title> <div class="card-body"> <form [formGroup]="organizationForm" (ngSubmit)="onSubmit()"> <mat-form-field appearance="outline"> <mat-label>Default Disbursement *</mat-label> <input matInput type="text" id="amount" placeholder="Amount" formControlName="disbursement" [errorStateMatcher]="matcher"> <span matSuffix>RCU</span> <mat-error *ngIf="submitted && organizationFormStub.disbursement.errors"> Default Disbursement is required. </mat-error> </mat-form-field> <div class="form-group form-check"> <mat-checkbox id="transferCard" formControlName="transfer">Require Transfer Card *</mat-checkbox> </div> <mat-form-field appearance="outline"> <mat-label>Default Country Code *</mat-label> <mat-select id="countryCode" formControlName="countryCode" [errorStateMatcher]="matcher"> <mat-option value="KE">KE Kenya</mat-option> <mat-option value="US">US United States</mat-option> <mat-option value="ETH">ETH Ethiopia</mat-option> <mat-option value="GER">GER Germany</mat-option> <mat-option value="UG">UG Uganda</mat-option> </mat-select> <mat-error *ngIf="submitted && organizationFormStub.countryCode.errors"> Country Code is required. </mat-error> </mat-form-field><br> <button mat-raised-button color="primary" type="submit" class="btn btn-primary">Submit</button> </form> </div> </div> </div> </div> <app-footer appMenuSelection></app-footer> </div> <!-- ============================================================== --> <!-- End Page content --> <!-- ============================================================== --></div></div>' var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper"> <app-sidebar></app-sidebar> <!-- ============================================================== --> <!-- Start Page Content here --> <!-- ============================================================== --> <div id="content"> <app-topbar></app-topbar> <!-- Start Content--> <div class="container-fluid" appMenuSelection> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a routerLink="/home">Home</a></li> <li class="breadcrumb-item"><a routerLink="/settings">Settings</a></li> <li class="breadcrumb-item active" aria-current="page">Organization Settings</li> </ol> </nav> <div class="col-md-6 center-body"> <div class="card"> <mat-card-title class="card-header text-center"> DEFAULT ORGANISATION SETTINGS </mat-card-title> <div class="card-body"> <form [formGroup]="organizationForm" (ngSubmit)="onSubmit()"> <mat-form-field appearance="outline"> <mat-label>Default Disbursement *</mat-label> <input matInput type="text" id="amount" placeholder="Amount" formControlName="disbursement" [errorStateMatcher]="matcher"> <span matSuffix>RCU</span> <mat-error *ngIf="submitted && organizationFormStub.disbursement.errors"> Default Disbursement is required. </mat-error> </mat-form-field> <div class="form-group form-check"> <mat-checkbox id="transferCard" formControlName="transfer">Require Transfer Card *</mat-checkbox> </div> <mat-form-field appearance="outline"> <mat-label>Default Country Code *</mat-label> <mat-select id="countryCode" formControlName="countryCode" [errorStateMatcher]="matcher"> <mat-option value="KE">KE Kenya</mat-option> <mat-option value="US">US United States</mat-option> <mat-option value="ETH">ETH Ethiopia</mat-option> <mat-option value="GER">GER Germany</mat-option> <mat-option value="UG">UG Uganda</mat-option> </mat-select> <mat-error *ngIf="submitted && organizationFormStub.countryCode.errors"> Country Code is required. </mat-error> </mat-form-field><br> <button mat-raised-button color="primary" type="submit" class="btn btn-primary">Submit</button> </form> </div> </div> </div> </div> <app-footer appMenuSelection></app-footer> </div> <!-- ============================================================== --> <!-- End Page content --> <!-- ============================================================== --></div></div>'
var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}]; var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[routerLink]'}]; var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'OrganizationComponent'}; var ACTUAL_COMPONENT = {'name': 'OrganizationComponent'};
</script> </script>
<script src="../js/tree.js"></script> <script src="../js/tree.js"></script>

View File

@ -210,18 +210,18 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {ChangeDetectionStrategy, Component} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { ChangeDetectionStrategy, Component } from &#x27;@angular/core&#x27;;
@Component({ @Component({
selector: &#x27;app-pages&#x27;, selector: &#x27;app-pages&#x27;,
templateUrl: &#x27;./pages.component.html&#x27;, templateUrl: &#x27;./pages.component.html&#x27;,
styleUrls: [&#x27;./pages.component.scss&#x27;], styleUrls: [&#x27;./pages.component.scss&#x27;],
changeDetection: ChangeDetectionStrategy.OnPush changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class PagesComponent { export class PagesComponent {
url: string &#x3D; &#x27;https://dashboard.sarafu.network/&#x27;; url: string &#x3D; &#x27;https://dashboard.sarafu.network/&#x27;;
constructor() { } constructor() {}
} }
</code></pre> </code></pre>
</div> </div>
@ -295,8 +295,8 @@ export class PagesComponent {
<script src="../js/libs/deep-iterator.js"></script> <script src="../js/libs/deep-iterator.js"></script>
<script> <script>
var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper"> <app-sidebar></app-sidebar> <!-- ============================================================== --> <!-- Start Page Content here --> <!-- ============================================================== --> <div id="content"> <app-topbar></app-topbar> <!-- Start Content--> <div class="container-fluid" appMenuSelection> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item active" aria-current="page">Home</li> </ol> </nav> <div class="embed-responsive embed-responsive-16by9"> <iframe class="embed-responsive-item" [src]="url | safe" allow="fullscreen" loading="lazy" title="Community inclusion currencies dashboard" referrerpolicy="no-referrer"> <p> <a href="{{url}}"> Your browser does not support iframes. </a> </p> </iframe> </div> </div> <app-footer appMenuSelection></app-footer> </div> <!-- ============================================================== --> <!-- End Page content --> <!-- ============================================================== --></div></div>' var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper"> <app-sidebar></app-sidebar> <!-- ============================================================== --> <!-- Start Page Content here --> <!-- ============================================================== --> <div id="content"> <app-topbar></app-topbar> <!-- Start Content--> <div class="container-fluid" appMenuSelection> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item active" aria-current="page">Home</li> </ol> </nav> <div class="embed-responsive embed-responsive-16by9"> <iframe class="embed-responsive-item" [src]="url | safe" allow="fullscreen" loading="lazy" title="Community inclusion currencies dashboard" referrerpolicy="no-referrer"> <p> <a href="{{url}}"> Your browser does not support iframes. </a> </p> </iframe> </div> </div> <app-footer appMenuSelection></app-footer> </div> <!-- ============================================================== --> <!-- End Page content --> <!-- ============================================================== --></div></div>'
var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}]; var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[routerLink]'}]; var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'PagesComponent'}; var ACTUAL_COMPONENT = {'name': 'PagesComponent'};
</script> </script>
<script src="../js/tree.js"></script> <script src="../js/tree.js"></script>

View File

@ -267,8 +267,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="37" <div class="io-line">Defined in <a href="" data-line="35"
class="link-to-prism">src/app/pages/settings/settings.component.ts:37</a></div> class="link-to-prism">src/app/pages/settings/settings.component.ts:35</a></div>
</td> </td>
</tr> </tr>
@ -337,8 +337,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="41" <div class="io-line">Defined in <a href="" data-line="39"
class="link-to-prism">src/app/pages/settings/settings.component.ts:41</a></div> class="link-to-prism">src/app/pages/settings/settings.component.ts:39</a></div>
</td> </td>
</tr> </tr>
@ -376,8 +376,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="45" <div class="io-line">Defined in <a href="" data-line="43"
class="link-to-prism">src/app/pages/settings/settings.component.ts:45</a></div> class="link-to-prism">src/app/pages/settings/settings.component.ts:43</a></div>
</td> </td>
</tr> </tr>
@ -415,8 +415,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="28" <div class="io-line">Defined in <a href="" data-line="26"
class="link-to-prism">src/app/pages/settings/settings.component.ts:28</a></div> class="link-to-prism">src/app/pages/settings/settings.component.ts:26</a></div>
</td> </td>
</tr> </tr>
@ -629,19 +629,19 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {ChangeDetectionStrategy, Component, OnInit, ViewChild} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { ChangeDetectionStrategy, Component, OnInit, ViewChild } from &#x27;@angular/core&#x27;;
import {MatTableDataSource} from &#x27;@angular/material/table&#x27;; import { MatTableDataSource } from &#x27;@angular/material/table&#x27;;
import {MatPaginator} from &#x27;@angular/material/paginator&#x27;; import { MatPaginator } from &#x27;@angular/material/paginator&#x27;;
import {MatSort} from &#x27;@angular/material/sort&#x27;; import { MatSort } from &#x27;@angular/material/sort&#x27;;
import {AuthService} from &#x27;@app/_services&#x27;; import { AuthService } from &#x27;@app/_services&#x27;;
import {Staff} from &#x27;@app/_models/staff&#x27;; import { Staff } from &#x27;@app/_models/staff&#x27;;
import {exportCsv} from &#x27;@app/_helpers&#x27;; import { exportCsv } from &#x27;@app/_helpers&#x27;;
@Component({ @Component({
selector: &#x27;app-settings&#x27;, selector: &#x27;app-settings&#x27;,
templateUrl: &#x27;./settings.component.html&#x27;, templateUrl: &#x27;./settings.component.html&#x27;,
styleUrls: [&#x27;./settings.component.scss&#x27;], styleUrls: [&#x27;./settings.component.scss&#x27;],
changeDetection: ChangeDetectionStrategy.OnPush changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class SettingsComponent implements OnInit { export class SettingsComponent implements OnInit {
date: string; date: string;
@ -652,9 +652,7 @@ export class SettingsComponent implements OnInit {
@ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatPaginator) paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort; @ViewChild(MatSort) sort: MatSort;
constructor( constructor(private authService: AuthService) {}
private authService: AuthService
) { }
ngOnInit(): void { ngOnInit(): void {
const d &#x3D; new Date(); const d &#x3D; new Date();
@ -822,8 +820,8 @@ export class SettingsComponent implements OnInit {
<script src="../js/libs/deep-iterator.js"></script> <script src="../js/libs/deep-iterator.js"></script>
<script> <script>
var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper"> <app-sidebar></app-sidebar> <!-- ============================================================== --> <!-- Start Page Content here --> <!-- ============================================================== --> <div id="content"> <app-topbar></app-topbar> <!-- Start Content--> <div class="container-fluid" appMenuSelection> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a routerLink="/home">Home</a></li> <li class="breadcrumb-item active" aria-current="page">Settings</li> </ol> </nav> <div class="row"> <div class="col-md-6 mb-2"> <div class="card"> <mat-card-title class="card-header text-center"> SETTINGS </mat-card-title> <div class="card-body"> <h4>Kobo Toolbox Credentials</h4> <span><strong>Username: </strong> admin_reserve </span><br> <span><strong>Password: </strong> ******** </span> </div> <hr> <div class="card-body"> <h4>Organization Settings</h4> <a routerLink="/settings/organization"><i>Update your organization settings</i></a> </div> </div> </div> <div class="col-md-6 mb-2"> <div class="card"> <mat-card-title class="card-header text-center"> ACCOUNT MANAGEMENT </mat-card-title> <div class="card-body"> <h4>Change Password</h4> <a routerLink="/settings"><i>Change your account password</i></a> </div> <hr> <div class="card-body"> <h4>Two-step authentication</h4> <a routerLink="/settings"><i>Secure your account with two step verification</i></a> </div> <hr> <div class="card-body"> <button mat-raised-button color="primary" type="button" class="btn btn-outline-primary" (click)="logout()"> LOGOUT ADMIN </button> </div> </div> </div> <div class="col-12"> <div class="card mb-3"> <mat-card-title class="card-header"> <div class="row"> TRUSTED USERS <button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto mr-2" (click)="downloadCsv()"> EXPORT </button> </div> </mat-card-title> <div class="card-body"> <mat-form-field appearance="outline"> <mat-label> Filter </mat-label> <input matInput type="text" (keyup)="doFilter($event.target.value)" placeholder="Filter"> <mat-icon matSuffix>search</mat-icon> </mat-form-field> <mat-table class="mat-elevation-z10" [dataSource]="dataSource" matSort matSortActive="name" matSortDirection="asc" matSortDisableClear> <ng-container matColumnDef="name"> <mat-header-cell *matHeaderCellDef mat-sort-header> NAME </mat-header-cell> <mat-cell *matCellDef="let user"> {{user.name}} </mat-cell> </ng-container> <ng-container matColumnDef="email"> <mat-header-cell *matHeaderCellDef mat-sort-header> EMAIL </mat-header-cell> <mat-cell *matCellDef="let user"> {{user.email}} </mat-cell> </ng-container> <ng-container matColumnDef="userId"> <mat-header-cell *matHeaderCellDef mat-sort-header> USER ID </mat-header-cell> <mat-cell *matCellDef="let user"> {{user.userid}} </mat-cell> </ng-container> <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row> <mat-row *matRowDef="let user; columns: displayedColumns"></mat-row> </mat-table> <mat-paginator [pageSize]="5" [pageSizeOptions]="[5, 10, 20, 50, 100]" showFirstLastButtons></mat-paginator> </div> </div> </div> </div> </div> <app-footer appMenuSelection></app-footer> </div> <!-- ============================================================== --> <!-- End Page content --> <!-- ============================================================== --></div></div>' var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper"> <app-sidebar></app-sidebar> <!-- ============================================================== --> <!-- Start Page Content here --> <!-- ============================================================== --> <div id="content"> <app-topbar></app-topbar> <!-- Start Content--> <div class="container-fluid" appMenuSelection> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a routerLink="/home">Home</a></li> <li class="breadcrumb-item active" aria-current="page">Settings</li> </ol> </nav> <div class="row"> <div class="col-md-6 mb-2"> <div class="card"> <mat-card-title class="card-header text-center"> SETTINGS </mat-card-title> <div class="card-body"> <h4>Kobo Toolbox Credentials</h4> <span><strong>Username: </strong> admin_reserve </span><br> <span><strong>Password: </strong> ******** </span> </div> <hr> <div class="card-body"> <h4>Organization Settings</h4> <a routerLink="/settings/organization"><i>Update your organization settings</i></a> </div> </div> </div> <div class="col-md-6 mb-2"> <div class="card"> <mat-card-title class="card-header text-center"> ACCOUNT MANAGEMENT </mat-card-title> <div class="card-body"> <h4>Change Password</h4> <a routerLink="/settings"><i>Change your account password</i></a> </div> <hr> <div class="card-body"> <h4>Two-step authentication</h4> <a routerLink="/settings"><i>Secure your account with two step verification</i></a> </div> <hr> <div class="card-body"> <button mat-raised-button color="primary" type="button" class="btn btn-outline-primary" (click)="logout()"> LOGOUT ADMIN </button> </div> </div> </div> <div class="col-12"> <div class="card mb-3"> <mat-card-title class="card-header"> <div class="row"> TRUSTED USERS <button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto mr-2" (click)="downloadCsv()"> EXPORT </button> </div> </mat-card-title> <div class="card-body"> <mat-form-field appearance="outline"> <mat-label> Filter </mat-label> <input matInput type="text" (keyup)="doFilter($event.target.value)" placeholder="Filter"> <mat-icon matSuffix>search</mat-icon> </mat-form-field> <mat-table class="mat-elevation-z10" [dataSource]="dataSource" matSort matSortActive="name" matSortDirection="asc" matSortDisableClear> <ng-container matColumnDef="name"> <mat-header-cell *matHeaderCellDef mat-sort-header> NAME </mat-header-cell> <mat-cell *matCellDef="let user"> {{user.name}} </mat-cell> </ng-container> <ng-container matColumnDef="email"> <mat-header-cell *matHeaderCellDef mat-sort-header> EMAIL </mat-header-cell> <mat-cell *matCellDef="let user"> {{user.email}} </mat-cell> </ng-container> <ng-container matColumnDef="userId"> <mat-header-cell *matHeaderCellDef mat-sort-header> USER ID </mat-header-cell> <mat-cell *matCellDef="let user"> {{user.userid}} </mat-cell> </ng-container> <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row> <mat-row *matRowDef="let user; columns: displayedColumns"></mat-row> </mat-table> <mat-paginator [pageSize]="5" [pageSizeOptions]="[5, 10, 20, 50, 100]" showFirstLastButtons></mat-paginator> </div> </div> </div> </div> </div> <app-footer appMenuSelection></app-footer> </div> <!-- ============================================================== --> <!-- End Page content --> <!-- ============================================================== --></div></div>'
var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}]; var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[routerLink]'}]; var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'SettingsComponent'}; var ACTUAL_COMPONENT = {'name': 'SettingsComponent'};
</script> </script>
<script src="../js/tree.js"></script> <script src="../js/tree.js"></script>

View File

@ -199,8 +199,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="13" <div class="io-line">Defined in <a href="" data-line="12"
class="link-to-prism">src/app/shared/sidebar/sidebar.component.ts:13</a></div> class="link-to-prism">src/app/shared/sidebar/sidebar.component.ts:12</a></div>
</td> </td>
</tr> </tr>
@ -222,21 +222,18 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {ChangeDetectionStrategy, Component, OnInit} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { ChangeDetectionStrategy, Component, OnInit } from &#x27;@angular/core&#x27;;
@Component({ @Component({
selector: &#x27;app-sidebar&#x27;, selector: &#x27;app-sidebar&#x27;,
templateUrl: &#x27;./sidebar.component.html&#x27;, templateUrl: &#x27;./sidebar.component.html&#x27;,
styleUrls: [&#x27;./sidebar.component.scss&#x27;], styleUrls: [&#x27;./sidebar.component.scss&#x27;],
changeDetection: ChangeDetectionStrategy.OnPush changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class SidebarComponent implements OnInit { export class SidebarComponent implements OnInit {
constructor() {}
constructor() { } ngOnInit(): void {}
ngOnInit(): void {
}
} }
</code></pre> </code></pre>
</div> </div>
@ -330,8 +327,8 @@ export class SidebarComponent implements OnInit {
<script src="../js/libs/deep-iterator.js"></script> <script src="../js/libs/deep-iterator.js"></script>
<script> <script>
var COMPONENT_TEMPLATE = '<div><!-- ========== Left Sidebar Start ========== --><div id="sidebar"> <nav> <div class="sidebar-header"> <h3> <img class="full-width" src="assets/images/CIC-Logo-white.png" alt="CIC Admin Dashboard"> </h3> <strong>CICADA</strong> </div> <ul class="list-unstyled components"> <li> <a routerLink="/home" routerLinkActive="active" appMenuSelection> <i class="fa fa-home"></i> <span> Dashboard </span> </a> </li> <li> <a routerLink="/accounts" routerLinkActive="active" appMenuSelection> <i class="fa fa-users"></i> <span> Accounts </span> </a> </li> <li> <a routerLink="/tx" routerLinkActive="active" appMenuSelection> <i class="fa fa-exchange"></i> <span> Transactions </span> </a> </li> <li> <a routerLink="/tokens" routerLinkActive="active" appMenuSelection> <i class="fa fa-money"></i> <span> Tokens </span> </a> </li> <li> <a routerLink="/settings" routerLinkActive="active" appMenuSelection> <i class="fa fa-cog"></i> <span> Settings </span> </a> </li> <li> <a routerLink="/admin" routerLinkActive="active" appMenuSelection> <i class="fa fa-user-secret"></i> <span> Admin </span> </a> </li> </ul> </nav></div><!-- Left Sidebar End --></div>' var COMPONENT_TEMPLATE = '<div><!-- ========== Left Sidebar Start ========== --><div id="sidebar"> <nav> <div class="sidebar-header"> <h3> <img class="full-width" src="assets/images/CIC-Logo-white.png" alt="CIC Admin Dashboard"> </h3> <strong>CICADA</strong> </div> <ul class="list-unstyled components"> <li> <a routerLink="/home" routerLinkActive="active" appMenuSelection> <i class="fa fa-home"></i> <span> Dashboard </span> </a> </li> <li> <a routerLink="/accounts" routerLinkActive="active" appMenuSelection> <i class="fa fa-users"></i> <span> Accounts </span> </a> </li> <li> <a routerLink="/tx" routerLinkActive="active" appMenuSelection> <i class="fa fa-exchange"></i> <span> Transactions </span> </a> </li> <li> <a routerLink="/tokens" routerLinkActive="active" appMenuSelection> <i class="fa fa-money"></i> <span> Tokens </span> </a> </li> <li> <a routerLink="/settings" routerLinkActive="active" appMenuSelection> <i class="fa fa-cog"></i> <span> Settings </span> </a> </li> <li> <a routerLink="/admin" routerLinkActive="active" appMenuSelection> <i class="fa fa-user-secret"></i> <span> Admin </span> </a> </li> </ul> </nav></div><!-- Left Sidebar End --></div>'
var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}]; var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[routerLink]'}]; var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'SidebarComponent'}; var ACTUAL_COMPONENT = {'name': 'SidebarComponent'};
</script> </script>
<script src="../js/tree.js"></script> <script src="../js/tree.js"></script>

View File

@ -150,8 +150,8 @@ export class FooterStubComponent {}
<script src="../js/libs/deep-iterator.js"></script> <script src="../js/libs/deep-iterator.js"></script>
<script> <script>
var COMPONENT_TEMPLATE = '<div></div>' var COMPONENT_TEMPLATE = '<div></div>'
var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}]; var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[routerLink]'}]; var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'SidebarStubComponent'}; var ACTUAL_COMPONENT = {'name': 'SidebarStubComponent'};
</script> </script>
<script src="../js/tree.js"></script> <script src="../js/tree.js"></script>

View File

@ -311,35 +311,33 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {ChangeDetectionStrategy, Component, OnInit} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { ChangeDetectionStrategy, Component, OnInit } from &#x27;@angular/core&#x27;;
import {ActivatedRoute, Params} from &#x27;@angular/router&#x27;; import { ActivatedRoute, Params } from &#x27;@angular/router&#x27;;
import {TokenService} from &#x27;@app/_services&#x27;; import { TokenService } from &#x27;@app/_services&#x27;;
import {first} from &#x27;rxjs/operators&#x27;; import { first } from &#x27;rxjs/operators&#x27;;
import {Token} from &#x27;../../../_models&#x27;; import { Token } from &#x27;../../../_models&#x27;;
@Component({ @Component({
selector: &#x27;app-token-details&#x27;, selector: &#x27;app-token-details&#x27;,
templateUrl: &#x27;./token-details.component.html&#x27;, templateUrl: &#x27;./token-details.component.html&#x27;,
styleUrls: [&#x27;./token-details.component.scss&#x27;], styleUrls: [&#x27;./token-details.component.scss&#x27;],
changeDetection: ChangeDetectionStrategy.OnPush changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class TokenDetailsComponent implements OnInit { export class TokenDetailsComponent implements OnInit {
token: Token; token: Token;
constructor( constructor(private route: ActivatedRoute, private tokenService: TokenService) {
private route: ActivatedRoute,
private tokenService: TokenService
) {
this.route.paramMap.subscribe((params: Params) &#x3D;&gt; { this.route.paramMap.subscribe((params: Params) &#x3D;&gt; {
this.tokenService.getTokenBySymbol(params.get(&#x27;id&#x27;)).pipe(first()).subscribe(res &#x3D;&gt; { this.tokenService
this.token &#x3D; res; .getTokenBySymbol(params.get(&#x27;id&#x27;))
}); .pipe(first())
.subscribe((res) &#x3D;&gt; {
this.token &#x3D; res;
});
}); });
} }
ngOnInit(): void { ngOnInit(): void {}
}
} }
</code></pre> </code></pre>
</div> </div>
@ -441,8 +439,8 @@ export class TokenDetailsComponent implements OnInit {
<script src="../js/libs/deep-iterator.js"></script> <script src="../js/libs/deep-iterator.js"></script>
<script> <script>
var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper"> <app-sidebar></app-sidebar> <!-- ============================================================== --> <!-- Start Page Content here --> <!-- ============================================================== --> <div id="content"> <app-topbar></app-topbar> <!-- Start Content--> <div class="container-fluid text-center" appMenuSelection> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a routerLink="/home">Home</a></li> <li class="breadcrumb-item"><a routerLink="/tokens">Tokens</a></li> <li class="breadcrumb-item active" aria-current="page">{{token.name}}</li> </ol> </nav> <div class="col-md-6 center-body"> <div class="card"> <mat-card-title class="card-header"> Token </mat-card-title> <div class="card-body"> <div> <span><strong>Name:</strong> {{token.name}}</span> </div> <div> <span><strong>Symbol:</strong> {{token.symbol}}</span> </div> <div> <span><strong>Address:</strong> {{token.address}}</span> </div> <div> <span><strong>Details:</strong> A community inclusive currency for trading among lower to middle income societies.</span> </div> <div> <span><strong>Supply:</strong> {{token.supply | tokenRatio}}</span> </div><br> <div> <h2>Reserve</h2> <div> <span><strong>Weight:</strong> {{token.reserveRatio}}</span> </div> <div> <span><strong>Owner:</strong> {{token.owner}}</span> </div> </div> </div> </div> </div> </div> <app-footer appMenuSelection></app-footer> </div> <!-- ============================================================== --> <!-- End Page content --> <!-- ============================================================== --></div></div>' var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper"> <app-sidebar></app-sidebar> <!-- ============================================================== --> <!-- Start Page Content here --> <!-- ============================================================== --> <div id="content"> <app-topbar></app-topbar> <!-- Start Content--> <div class="container-fluid text-center" appMenuSelection> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a routerLink="/home">Home</a></li> <li class="breadcrumb-item"><a routerLink="/tokens">Tokens</a></li> <li class="breadcrumb-item active" aria-current="page">{{token.name}}</li> </ol> </nav> <div class="col-md-6 center-body"> <div class="card"> <mat-card-title class="card-header"> Token </mat-card-title> <div class="card-body"> <div> <span><strong>Name:</strong> {{token.name}}</span> </div> <div> <span><strong>Symbol:</strong> {{token.symbol}}</span> </div> <div> <span><strong>Address:</strong> {{token.address}}</span> </div> <div> <span><strong>Details:</strong> A community inclusive currency for trading among lower to middle income societies.</span> </div> <div> <span><strong>Supply:</strong> {{token.supply | tokenRatio}}</span> </div><br> <div> <h2>Reserve</h2> <div> <span><strong>Weight:</strong> {{token.reserveRatio}}</span> </div> <div> <span><strong>Owner:</strong> {{token.owner}}</span> </div> </div> </div> </div> </div> </div> <app-footer appMenuSelection></app-footer> </div> <!-- ============================================================== --> <!-- End Page content --> <!-- ============================================================== --></div></div>'
var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}]; var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[routerLink]'}]; var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'TokenDetailsComponent'}; var ACTUAL_COMPONENT = {'name': 'TokenDetailsComponent'};
</script> </script>
<script src="../js/tree.js"></script> <script src="../js/tree.js"></script>

View File

@ -656,21 +656,21 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {ChangeDetectionStrategy, Component, OnInit, ViewChild} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { ChangeDetectionStrategy, Component, OnInit, ViewChild } from &#x27;@angular/core&#x27;;
import {MatPaginator} from &#x27;@angular/material/paginator&#x27;; import { MatPaginator } from &#x27;@angular/material/paginator&#x27;;
import {MatSort} from &#x27;@angular/material/sort&#x27;; import { MatSort } from &#x27;@angular/material/sort&#x27;;
import {LoggingService, TokenService} from &#x27;@app/_services&#x27;; import { LoggingService, TokenService } from &#x27;@app/_services&#x27;;
import {MatTableDataSource} from &#x27;@angular/material/table&#x27;; import { MatTableDataSource } from &#x27;@angular/material/table&#x27;;
import {Router} from &#x27;@angular/router&#x27;; import { Router } from &#x27;@angular/router&#x27;;
import {exportCsv} from &#x27;@app/_helpers&#x27;; import { exportCsv } from &#x27;@app/_helpers&#x27;;
import {TokenRegistry} from &#x27;../../_eth&#x27;; import { TokenRegistry } from &#x27;../../_eth&#x27;;
import {Token} from &#x27;../../_models&#x27;; import { Token } from &#x27;../../_models&#x27;;
@Component({ @Component({
selector: &#x27;app-tokens&#x27;, selector: &#x27;app-tokens&#x27;,
templateUrl: &#x27;./tokens.component.html&#x27;, templateUrl: &#x27;./tokens.component.html&#x27;,
styleUrls: [&#x27;./tokens.component.scss&#x27;], styleUrls: [&#x27;./tokens.component.scss&#x27;],
changeDetection: ChangeDetectionStrategy.OnPush changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class TokensComponent implements OnInit { export class TokensComponent implements OnInit {
dataSource: MatTableDataSource&lt;any&gt;; dataSource: MatTableDataSource&lt;any&gt;;
@ -683,7 +683,7 @@ export class TokensComponent implements OnInit {
private tokenService: TokenService, private tokenService: TokenService,
private loggingService: LoggingService, private loggingService: LoggingService,
private router: Router private router: Router
) { } ) {}
async ngOnInit(): Promise&lt;void&gt; { async ngOnInit(): Promise&lt;void&gt; {
this.tokenService.LoadEvent.subscribe(async () &#x3D;&gt; { this.tokenService.LoadEvent.subscribe(async () &#x3D;&gt; {
@ -816,8 +816,8 @@ export class TokensComponent implements OnInit {
<script src="../js/libs/deep-iterator.js"></script> <script src="../js/libs/deep-iterator.js"></script>
<script> <script>
var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper"> <app-sidebar></app-sidebar> <!-- ============================================================== --> <!-- Start Page Content here --> <!-- ============================================================== --> <div id="content"> <app-topbar></app-topbar> <!-- Start Content--> <div class="container-fluid" appMenuSelection> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a routerLink="/home">Home</a></li> <li class="breadcrumb-item active" aria-current="page">Tokens</li> </ol> </nav> <div class="card"> <mat-card-title class="card-header"> <div class="row"> Tokens <button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto mr-2" (click)="downloadCsv()"> EXPORT </button> </div> </mat-card-title> <div class="card-body"> <mat-form-field appearance="outline"> <mat-label> Filter </mat-label> <input matInput type="text" (keyup)="doFilter($event.target.value)" placeholder="Filter"> <mat-icon matSuffix>search</mat-icon> </mat-form-field> <mat-table class="mat-elevation-z10 table-responsive" [dataSource]="dataSource" matSort matSortDirection="asc" matSortDisableClear> <ng-container matColumnDef="name"> <mat-header-cell *matHeaderCellDef mat-sort-header> Name </mat-header-cell> <mat-cell *matCellDef="let token"> {{token.name}} </mat-cell> </ng-container> <ng-container matColumnDef="symbol"> <mat-header-cell *matHeaderCellDef mat-sort-header> Symbol </mat-header-cell> <mat-cell *matCellDef="let token"> {{token.symbol}} </mat-cell> </ng-container> <ng-container matColumnDef="address"> <mat-header-cell *matHeaderCellDef mat-sort-header> Address </mat-header-cell> <mat-cell *matCellDef="let token"> {{token.address}} </mat-cell> </ng-container> <ng-container matColumnDef="supply"> <mat-header-cell *matHeaderCellDef mat-sort-header> Supply </mat-header-cell> <mat-cell *matCellDef="let token"> {{token.supply | tokenRatio}} </mat-cell> </ng-container> <mat-header-row *matHeaderRowDef="columnsToDisplay"></mat-header-row> <mat-row *matRowDef="let token; columns: columnsToDisplay" (click)="viewToken(token)" matRipple></mat-row> </mat-table> <mat-paginator [pageSize]="5" [pageSizeOptions]="[5, 10, 25, 100]" showFirstLastButtons></mat-paginator> </div> </div> </div> <app-footer appMenuSelection></app-footer> </div> <!-- ============================================================== --> <!-- End Page content --> <!-- ============================================================== --></div></div>' var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper"> <app-sidebar></app-sidebar> <!-- ============================================================== --> <!-- Start Page Content here --> <!-- ============================================================== --> <div id="content"> <app-topbar></app-topbar> <!-- Start Content--> <div class="container-fluid" appMenuSelection> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a routerLink="/home">Home</a></li> <li class="breadcrumb-item active" aria-current="page">Tokens</li> </ol> </nav> <div class="card"> <mat-card-title class="card-header"> <div class="row"> Tokens <button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto mr-2" (click)="downloadCsv()"> EXPORT </button> </div> </mat-card-title> <div class="card-body"> <mat-form-field appearance="outline"> <mat-label> Filter </mat-label> <input matInput type="text" (keyup)="doFilter($event.target.value)" placeholder="Filter"> <mat-icon matSuffix>search</mat-icon> </mat-form-field> <mat-table class="mat-elevation-z10 table-responsive" [dataSource]="dataSource" matSort matSortDirection="asc" matSortDisableClear> <ng-container matColumnDef="name"> <mat-header-cell *matHeaderCellDef mat-sort-header> Name </mat-header-cell> <mat-cell *matCellDef="let token"> {{token.name}} </mat-cell> </ng-container> <ng-container matColumnDef="symbol"> <mat-header-cell *matHeaderCellDef mat-sort-header> Symbol </mat-header-cell> <mat-cell *matCellDef="let token"> {{token.symbol}} </mat-cell> </ng-container> <ng-container matColumnDef="address"> <mat-header-cell *matHeaderCellDef mat-sort-header> Address </mat-header-cell> <mat-cell *matCellDef="let token"> {{token.address}} </mat-cell> </ng-container> <ng-container matColumnDef="supply"> <mat-header-cell *matHeaderCellDef mat-sort-header> Supply </mat-header-cell> <mat-cell *matCellDef="let token"> {{token.supply | tokenRatio}} </mat-cell> </ng-container> <mat-header-row *matHeaderRowDef="columnsToDisplay"></mat-header-row> <mat-row *matRowDef="let token; columns: columnsToDisplay" (click)="viewToken(token)" matRipple></mat-row> </mat-table> <mat-paginator [pageSize]="5" [pageSizeOptions]="[5, 10, 25, 100]" showFirstLastButtons></mat-paginator> </div> </div> </div> <app-footer appMenuSelection></app-footer> </div> <!-- ============================================================== --> <!-- End Page content --> <!-- ============================================================== --></div></div>'
var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}]; var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[routerLink]'}]; var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'TokensComponent'}; var ACTUAL_COMPONENT = {'name': 'TokensComponent'};
</script> </script>
<script src="../js/tree.js"></script> <script src="../js/tree.js"></script>

View File

@ -199,8 +199,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="13" <div class="io-line">Defined in <a href="" data-line="12"
class="link-to-prism">src/app/shared/topbar/topbar.component.ts:13</a></div> class="link-to-prism">src/app/shared/topbar/topbar.component.ts:12</a></div>
</td> </td>
</tr> </tr>
@ -222,21 +222,18 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {ChangeDetectionStrategy, Component, OnInit} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { ChangeDetectionStrategy, Component, OnInit } from &#x27;@angular/core&#x27;;
@Component({ @Component({
selector: &#x27;app-topbar&#x27;, selector: &#x27;app-topbar&#x27;,
templateUrl: &#x27;./topbar.component.html&#x27;, templateUrl: &#x27;./topbar.component.html&#x27;,
styleUrls: [&#x27;./topbar.component.scss&#x27;], styleUrls: [&#x27;./topbar.component.scss&#x27;],
changeDetection: ChangeDetectionStrategy.OnPush changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class TopbarComponent implements OnInit { export class TopbarComponent implements OnInit {
constructor() {}
constructor() { } ngOnInit(): void {}
ngOnInit(): void {
}
} }
</code></pre> </code></pre>
</div> </div>
@ -289,8 +286,8 @@ export class TopbarComponent implements OnInit {
<script src="../js/libs/deep-iterator.js"></script> <script src="../js/libs/deep-iterator.js"></script>
<script> <script>
var COMPONENT_TEMPLATE = '<div><!-- Topbar Start --><nav class="navbar navbar-expand-lg navbar-light bg-light sticky-top"> <div class="container-fluid"> <button type="button" id="sidebarCollapse" class="navbar-btn menutoggle" aria-label="Sidebar toggle" appMenuToggle> <span></span> <span></span> <span></span> </button> </div></nav><!-- end Topbar --></div>' var COMPONENT_TEMPLATE = '<div><!-- Topbar Start --><nav class="navbar navbar-expand-lg navbar-light bg-light sticky-top"> <div class="container-fluid"> <button type="button" id="sidebarCollapse" class="navbar-btn menutoggle" aria-label="Sidebar toggle" appMenuToggle> <span></span> <span></span> <span></span> </button> </div></nav><!-- end Topbar --></div>'
var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}]; var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[routerLink]'}]; var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'TopbarComponent'}; var ACTUAL_COMPONENT = {'name': 'TopbarComponent'};
</script> </script>
<script src="../js/tree.js"></script> <script src="../js/tree.js"></script>

View File

@ -150,8 +150,8 @@ export class FooterStubComponent {}
<script src="../js/libs/deep-iterator.js"></script> <script src="../js/libs/deep-iterator.js"></script>
<script> <script>
var COMPONENT_TEMPLATE = '<div></div>' var COMPONENT_TEMPLATE = '<div></div>'
var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}]; var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[routerLink]'}]; var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'TopbarStubComponent'}; var ACTUAL_COMPONENT = {'name': 'TopbarStubComponent'};
</script> </script>
<script src="../js/tree.js"></script> <script src="../js/tree.js"></script>

File diff suppressed because one or more lines are too long

View File

@ -217,7 +217,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="27" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:27</a></div> <div class="io-line">Defined in <a href="" data-line="33" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:33</a></div>
</td> </td>
</tr> </tr>
@ -310,8 +310,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="51" <div class="io-line">Defined in <a href="" data-line="60"
class="link-to-prism">src/app/pages/transactions/transactions.component.ts:51</a></div> class="link-to-prism">src/app/pages/transactions/transactions.component.ts:60</a></div>
</td> </td>
</tr> </tr>
@ -391,8 +391,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="71" <div class="io-line">Defined in <a href="" data-line="82"
class="link-to-prism">src/app/pages/transactions/transactions.component.ts:71</a></div> class="link-to-prism">src/app/pages/transactions/transactions.component.ts:82</a></div>
</td> </td>
</tr> </tr>
@ -430,8 +430,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="55" <div class="io-line">Defined in <a href="" data-line="64"
class="link-to-prism">src/app/pages/transactions/transactions.component.ts:55</a></div> class="link-to-prism">src/app/pages/transactions/transactions.component.ts:64</a></div>
</td> </td>
</tr> </tr>
@ -469,8 +469,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="66" <div class="io-line">Defined in <a href="" data-line="77"
class="link-to-prism">src/app/pages/transactions/transactions.component.ts:66</a></div> class="link-to-prism">src/app/pages/transactions/transactions.component.ts:77</a></div>
</td> </td>
</tr> </tr>
@ -508,8 +508,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="37" <div class="io-line">Defined in <a href="" data-line="43"
class="link-to-prism">src/app/pages/transactions/transactions.component.ts:37</a></div> class="link-to-prism">src/app/pages/transactions/transactions.component.ts:43</a></div>
</td> </td>
</tr> </tr>
@ -547,8 +547,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="47" <div class="io-line">Defined in <a href="" data-line="56"
class="link-to-prism">src/app/pages/transactions/transactions.component.ts:47</a></div> class="link-to-prism">src/app/pages/transactions/transactions.component.ts:56</a></div>
</td> </td>
</tr> </tr>
@ -622,7 +622,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="19" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:19</a></div> <div class="io-line">Defined in <a href="" data-line="25" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:25</a></div>
</td> </td>
</tr> </tr>
@ -654,7 +654,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="20" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:20</a></div> <div class="io-line">Defined in <a href="" data-line="26" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:26</a></div>
</td> </td>
</tr> </tr>
@ -690,7 +690,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="26" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:26</a></div> <div class="io-line">Defined in <a href="" data-line="32" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:32</a></div>
</td> </td>
</tr> </tr>
@ -726,7 +726,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="27" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:27</a></div> <div class="io-line">Defined in <a href="" data-line="33" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:33</a></div>
</td> </td>
</tr> </tr>
@ -753,7 +753,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="22" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:22</a></div> <div class="io-line">Defined in <a href="" data-line="28" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:28</a></div>
</td> </td>
</tr> </tr>
@ -780,7 +780,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="17" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:17</a></div> <div class="io-line">Defined in <a href="" data-line="23" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:23</a></div>
</td> </td>
</tr> </tr>
@ -812,7 +812,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="18" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:18</a></div> <div class="io-line">Defined in <a href="" data-line="24" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:24</a></div>
</td> </td>
</tr> </tr>
@ -839,7 +839,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="21" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:21</a></div> <div class="io-line">Defined in <a href="" data-line="27" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:27</a></div>
</td> </td>
</tr> </tr>
@ -871,7 +871,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="23" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:23</a></div> <div class="io-line">Defined in <a href="" data-line="29" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:29</a></div>
</td> </td>
</tr> </tr>
@ -898,7 +898,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="24" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:24</a></div> <div class="io-line">Defined in <a href="" data-line="30" class="link-to-prism">src/app/pages/transactions/transactions.component.ts:30</a></div>
</td> </td>
</tr> </tr>
@ -911,20 +911,26 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {AfterViewInit, ChangeDetectionStrategy, Component, OnInit, ViewChild} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {
import {BlockSyncService, TransactionService, UserService} from &#x27;@app/_services&#x27;; AfterViewInit,
import {MatTableDataSource} from &#x27;@angular/material/table&#x27;; ChangeDetectionStrategy,
import {MatPaginator} from &#x27;@angular/material/paginator&#x27;; Component,
import {MatSort} from &#x27;@angular/material/sort&#x27;; OnInit,
import {exportCsv} from &#x27;@app/_helpers&#x27;; ViewChild,
import {first} from &#x27;rxjs/operators&#x27;; } from &#x27;@angular/core&#x27;;
import {Transaction} from &#x27;@app/_models&#x27;; import { BlockSyncService, TransactionService, UserService } from &#x27;@app/_services&#x27;;
import { MatTableDataSource } from &#x27;@angular/material/table&#x27;;
import { MatPaginator } from &#x27;@angular/material/paginator&#x27;;
import { MatSort } from &#x27;@angular/material/sort&#x27;;
import { exportCsv } from &#x27;@app/_helpers&#x27;;
import { first } from &#x27;rxjs/operators&#x27;;
import { Transaction } from &#x27;@app/_models&#x27;;
@Component({ @Component({
selector: &#x27;app-transactions&#x27;, selector: &#x27;app-transactions&#x27;,
templateUrl: &#x27;./transactions.component.html&#x27;, templateUrl: &#x27;./transactions.component.html&#x27;,
styleUrls: [&#x27;./transactions.component.scss&#x27;], styleUrls: [&#x27;./transactions.component.scss&#x27;],
changeDetection: ChangeDetectionStrategy.OnPush changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class TransactionsComponent implements OnInit, AfterViewInit { export class TransactionsComponent implements OnInit, AfterViewInit {
transactionDataSource: MatTableDataSource&lt;any&gt;; transactionDataSource: MatTableDataSource&lt;any&gt;;
@ -948,13 +954,16 @@ export class TransactionsComponent implements OnInit, AfterViewInit {
} }
ngOnInit(): void { ngOnInit(): void {
this.transactionService.transactionsSubject.subscribe(transactions &#x3D;&gt; { this.transactionService.transactionsSubject.subscribe((transactions) &#x3D;&gt; {
this.transactionDataSource &#x3D; new MatTableDataSource&lt;any&gt;(transactions); this.transactionDataSource &#x3D; new MatTableDataSource&lt;any&gt;(transactions);
this.transactionDataSource.paginator &#x3D; this.paginator; this.transactionDataSource.paginator &#x3D; this.paginator;
this.transactionDataSource.sort &#x3D; this.sort; this.transactionDataSource.sort &#x3D; this.sort;
this.transactions &#x3D; transactions; this.transactions &#x3D; transactions;
}); });
this.userService.getTransactionTypes().pipe(first()).subscribe(res &#x3D;&gt; this.transactionsTypes &#x3D; res); this.userService
.getTransactionTypes()
.pipe(first())
.subscribe((res) &#x3D;&gt; (this.transactionsTypes &#x3D; res));
} }
viewTransaction(transaction): void { viewTransaction(transaction): void {
@ -967,12 +976,14 @@ export class TransactionsComponent implements OnInit, AfterViewInit {
filterTransactions(): void { filterTransactions(): void {
if (this.transactionsType &#x3D;&#x3D;&#x3D; &#x27;all&#x27;) { if (this.transactionsType &#x3D;&#x3D;&#x3D; &#x27;all&#x27;) {
this.transactionService.transactionsSubject.subscribe(transactions &#x3D;&gt; { this.transactionService.transactionsSubject.subscribe((transactions) &#x3D;&gt; {
this.transactionDataSource.data &#x3D; transactions; this.transactionDataSource.data &#x3D; transactions;
this.transactions &#x3D; transactions; this.transactions &#x3D; transactions;
}); });
} else { } else {
this.transactionDataSource.data &#x3D; this.transactions.filter(transaction &#x3D;&gt; transaction.type &#x3D;&#x3D;&#x3D; this.transactionsType); this.transactionDataSource.data &#x3D; this.transactions.filter(
(transaction) &#x3D;&gt; transaction.type &#x3D;&#x3D;&#x3D; this.transactionsType
);
} }
} }
@ -1120,8 +1131,8 @@ export class TransactionsComponent implements OnInit, AfterViewInit {
<script src="../js/libs/deep-iterator.js"></script> <script src="../js/libs/deep-iterator.js"></script>
<script> <script>
var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper"> <app-sidebar></app-sidebar> <!-- ============================================================== --> <!-- Start Page Content here --> <!-- ============================================================== --> <div id="content"> <app-topbar></app-topbar> <!-- Start Content--> <div class="container-fluid" appMenuSelection> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a routerLink="/home">Home</a></li> <li class="breadcrumb-item active" aria-current="page">Transactions</li> </ol> </nav> <div class="card"> <mat-card-title class="card-header"> Transfers </mat-card-title> <div class="card-body"> <app-transaction-details [transaction]="transaction"></app-transaction-details> <div class="row card-header"> <mat-form-field appearance="outline"> <mat-label> TRANSFER TYPE </mat-label> <mat-select id="typeSelect" [(value)]="transactionsType" (selectionChange)="filterTransactions()"> <mat-option value="all">ALL TRANSFERS</mat-option> <mat-option *ngFor="let transactionType of transactionsTypes" [value]="transactionType"> {{transactionType | uppercase}} </mat-option> </mat-select> </mat-form-field> <button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto mr-2" (click)="downloadCsv()"> EXPORT </button> </div> <mat-form-field appearance="outline"> <mat-label> Filter </mat-label> <input matInput type="text" (keyup)="doFilter($event.target.value, transactionDataSource)" placeholder="Filter"> <mat-icon matSuffix>search</mat-icon> </mat-form-field> <table mat-table class="mat-elevation-z10" [dataSource]="transactionDataSource" matSort matSortActive="created" matSortDirection="desc" matSortDisableClear> <ng-container matColumnDef="sender"> <th mat-header-cell *matHeaderCellDef mat-sort-header> Sender </th> <td mat-cell *matCellDef="let transaction"> {{transaction?.sender?.vcard.fn[0].value}} </td> </ng-container> <ng-container matColumnDef="recipient"> <th mat-header-cell *matHeaderCellDef mat-sort-header> Recipient </th> <td mat-cell *matCellDef="let transaction"> {{transaction?.recipient?.vcard.fn[0].value}} </td> </ng-container> <ng-container matColumnDef="value"> <th mat-header-cell *matHeaderCellDef mat-sort-header> Value </th> <td mat-cell *matCellDef="let transaction"> <span *ngIf="transaction.type == \'transaction\'">{{transaction?.value | tokenRatio}}</span> <span *ngIf="transaction.type == \'conversion\'">{{transaction?.toValue | tokenRatio}}</span> </td> </ng-container> <ng-container matColumnDef="created"> <th mat-header-cell *matHeaderCellDef mat-sort-header> Created </th> <td mat-cell *matCellDef="let transaction"> {{transaction?.tx.timestamp | date}} </td> </ng-container> <ng-container matColumnDef="type"> <th mat-header-cell *matHeaderCellDef mat-sort-header> TYPE </th> <td mat-cell *matCellDef="let transaction"> <span class="badge badge-success badge-pill"> {{transaction?.type}} </span> </td> </ng-container> <tr mat-header-row *matHeaderRowDef="transactionDisplayedColumns"></tr> <tr mat-row *matRowDef="let transaction; columns: transactionDisplayedColumns;" (click)="viewTransaction(transaction)"></tr> </table> <mat-paginator [pageSize]="defaultPageSize" [pageSizeOptions]="pageSizeOptions" showFirstLastButtons></mat-paginator> </div> </div> </div> <app-footer appMenuSelection></app-footer> </div> <!-- ============================================================== --> <!-- End Page content --> <!-- ============================================================== --></div></div>' var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper"> <app-sidebar></app-sidebar> <!-- ============================================================== --> <!-- Start Page Content here --> <!-- ============================================================== --> <div id="content"> <app-topbar></app-topbar> <!-- Start Content--> <div class="container-fluid" appMenuSelection> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item"><a routerLink="/home">Home</a></li> <li class="breadcrumb-item active" aria-current="page">Transactions</li> </ol> </nav> <div class="card"> <mat-card-title class="card-header"> Transfers </mat-card-title> <div class="card-body"> <app-transaction-details [transaction]="transaction"></app-transaction-details> <div class="row card-header"> <mat-form-field appearance="outline"> <mat-label> TRANSFER TYPE </mat-label> <mat-select id="typeSelect" [(value)]="transactionsType" (selectionChange)="filterTransactions()"> <mat-option value="all">ALL TRANSFERS</mat-option> <mat-option *ngFor="let transactionType of transactionsTypes" [value]="transactionType"> {{transactionType | uppercase}} </mat-option> </mat-select> </mat-form-field> <button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto mr-2" (click)="downloadCsv()"> EXPORT </button> </div> <mat-form-field appearance="outline"> <mat-label> Filter </mat-label> <input matInput type="text" (keyup)="doFilter($event.target.value, transactionDataSource)" placeholder="Filter"> <mat-icon matSuffix>search</mat-icon> </mat-form-field> <table mat-table class="mat-elevation-z10" [dataSource]="transactionDataSource" matSort matSortActive="created" matSortDirection="desc" matSortDisableClear> <ng-container matColumnDef="sender"> <th mat-header-cell *matHeaderCellDef mat-sort-header> Sender </th> <td mat-cell *matCellDef="let transaction"> {{transaction?.sender?.vcard.fn[0].value}} </td> </ng-container> <ng-container matColumnDef="recipient"> <th mat-header-cell *matHeaderCellDef mat-sort-header> Recipient </th> <td mat-cell *matCellDef="let transaction"> {{transaction?.recipient?.vcard.fn[0].value}} </td> </ng-container> <ng-container matColumnDef="value"> <th mat-header-cell *matHeaderCellDef mat-sort-header> Value </th> <td mat-cell *matCellDef="let transaction"> <span *ngIf="transaction.type == \'transaction\'">{{transaction?.value | tokenRatio}}</span> <span *ngIf="transaction.type == \'conversion\'">{{transaction?.toValue | tokenRatio}}</span> </td> </ng-container> <ng-container matColumnDef="created"> <th mat-header-cell *matHeaderCellDef mat-sort-header> Created </th> <td mat-cell *matCellDef="let transaction"> {{transaction?.tx.timestamp | date}} </td> </ng-container> <ng-container matColumnDef="type"> <th mat-header-cell *matHeaderCellDef mat-sort-header> TYPE </th> <td mat-cell *matCellDef="let transaction"> <span class="badge badge-success badge-pill"> {{transaction?.type}} </span> </td> </ng-container> <tr mat-header-row *matHeaderRowDef="transactionDisplayedColumns"></tr> <tr mat-row *matRowDef="let transaction; columns: transactionDisplayedColumns;" (click)="viewTransaction(transaction)"></tr> </table> <mat-paginator [pageSize]="defaultPageSize" [pageSizeOptions]="pageSizeOptions" showFirstLastButtons></mat-paginator> </div> </div> </div> <app-footer appMenuSelection></app-footer> </div> <!-- ============================================================== --> <!-- End Page content --> <!-- ============================================================== --></div></div>'
var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}]; var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[routerLink]'}]; var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'TransactionsComponent'}; var ACTUAL_COMPONENT = {'name': 'TransactionsComponent'};
</script> </script>
<script src="../js/tree.js"></script> <script src="../js/tree.js"></script>

View File

@ -748,6 +748,18 @@
<span class="coverage-count">(0/2)</span> <span class="coverage-count">(0/2)</span>
</td> </td>
</tr> </tr>
<tr class="low">
<td>
<!-- miscellaneous -->
<a href="./interfaces/Signature.html">src/app/_pgp/pgp-signer.ts</a>
</td>
<td>interface</td>
<td>Signature</td>
<td align="right" data-sort="0">
<span class="coverage-percent">0 %</span>
<span class="coverage-count">(0/5)</span>
</td>
</tr>
<tr class="low"> <tr class="low">
<td> <td>
<!-- miscellaneous --> <!-- miscellaneous -->
@ -913,7 +925,7 @@
<td>AppComponent</td> <td>AppComponent</td>
<td align="right" data-sort="0"> <td align="right" data-sort="0">
<span class="coverage-percent">0 %</span> <span class="coverage-percent">0 %</span>
<span class="coverage-count">(0/9)</span> <span class="coverage-count">(0/10)</span>
</td> </td>
</tr> </tr>
<tr class="low"> <tr class="low">
@ -1156,6 +1168,18 @@
<span class="coverage-count">(0/3)</span> <span class="coverage-count">(0/3)</span>
</td> </td>
</tr> </tr>
<tr class="low">
<td>
<!-- miscellaneous -->
<a href="./components/NetworkStatusComponent.html">src/app/shared/network-status/network-status.component.ts</a>
</td>
<td>component</td>
<td>NetworkStatusComponent</td>
<td align="right" data-sort="0">
<span class="coverage-percent">0 %</span>
<span class="coverage-count">(0/5)</span>
</td>
</tr>
<tr class="low"> <tr class="low">
<td> <td>
<!-- miscellaneous --> <!-- miscellaneous -->

View File

@ -67,6 +67,8 @@
<b>@angular/platform-browser-dynamic</b> : ~10.2.0</li> <b>@angular/platform-browser-dynamic</b> : ~10.2.0</li>
<li> <li>
<b>@angular/router</b> : ~10.2.0</li> <b>@angular/router</b> : ~10.2.0</li>
<li>
<b>@angular/service-worker</b> : ~10.2.0</li>
<li> <li>
<b>@popperjs/core</b> : ^2.5.4</li> <b>@popperjs/core</b> : ^2.5.4</li>
<li> <li>
@ -89,6 +91,8 @@
<b>datatables.net-dt</b> : ^1.10.22</li> <b>datatables.net-dt</b> : ^1.10.22</li>
<li> <li>
<b>ethers</b> : ^5.0.31</li> <b>ethers</b> : ^5.0.31</li>
<li>
<b>http-server</b> : ^0.12.3</li>
<li> <li>
<b>jquery</b> : ^3.5.1</li> <b>jquery</b> : ^3.5.1</li>
<li> <li>

View File

@ -195,8 +195,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="20" <div class="io-line">Defined in <a href="" data-line="16"
class="link-to-prism">src/app/shared/_directives/menu-selection.directive.ts:20</a></div> class="link-to-prism">src/app/shared/_directives/menu-selection.directive.ts:16</a></div>
</td> </td>
</tr> </tr>
@ -219,17 +219,13 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {Directive, ElementRef, Renderer2} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Directive, ElementRef, Renderer2 } from &#x27;@angular/core&#x27;;
@Directive({ @Directive({
selector: &#x27;[appMenuSelection]&#x27; selector: &#x27;[appMenuSelection]&#x27;,
}) })
export class MenuSelectionDirective { export class MenuSelectionDirective {
constructor(private elementRef: ElementRef, private renderer: Renderer2) {
constructor(
private elementRef: ElementRef,
private renderer: Renderer2
) {
this.renderer.listen(this.elementRef.nativeElement, &#x27;click&#x27;, () &#x3D;&gt; { this.renderer.listen(this.elementRef.nativeElement, &#x27;click&#x27;, () &#x3D;&gt; {
const mediaQuery &#x3D; window.matchMedia(&#x27;(max-width: 768px)&#x27;); const mediaQuery &#x3D; window.matchMedia(&#x27;(max-width: 768px)&#x27;);
if (mediaQuery.matches) { if (mediaQuery.matches) {

View File

@ -195,8 +195,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="18" <div class="io-line">Defined in <a href="" data-line="14"
class="link-to-prism">src/app/shared/_directives/menu-toggle.directive.ts:18</a></div> class="link-to-prism">src/app/shared/_directives/menu-toggle.directive.ts:14</a></div>
</td> </td>
</tr> </tr>
@ -219,17 +219,13 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {Directive, ElementRef, Renderer2} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Directive, ElementRef, Renderer2 } from &#x27;@angular/core&#x27;;
@Directive({ @Directive({
selector: &#x27;[appMenuToggle]&#x27; selector: &#x27;[appMenuToggle]&#x27;,
}) })
export class MenuToggleDirective { export class MenuToggleDirective {
constructor(private elementRef: ElementRef, private renderer: Renderer2) {
constructor(
private elementRef: ElementRef,
private renderer: Renderer2
) {
this.renderer.listen(this.elementRef.nativeElement, &#x27;click&#x27;, () &#x3D;&gt; { this.renderer.listen(this.elementRef.nativeElement, &#x27;click&#x27;, () &#x3D;&gt; {
this.onMenuToggle(); this.onMenuToggle();
}); });

View File

@ -256,8 +256,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="22" <div class="io-line">Defined in <a href="" data-line="19"
class="link-to-prism">src/app/auth/_directives/password-toggle.directive.ts:22</a></div> class="link-to-prism">src/app/auth/_directives/password-toggle.directive.ts:19</a></div>
</td> </td>
</tr> </tr>
@ -280,10 +280,10 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {Directive, ElementRef, Input, Renderer2} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Directive, ElementRef, Input, Renderer2 } from &#x27;@angular/core&#x27;;
@Directive({ @Directive({
selector: &#x27;[appPasswordToggle]&#x27; selector: &#x27;[appPasswordToggle]&#x27;,
}) })
export class PasswordToggleDirective { export class PasswordToggleDirective {
@Input() @Input()
@ -292,10 +292,7 @@ export class PasswordToggleDirective {
@Input() @Input()
iconId: string; iconId: string;
constructor( constructor(private elementRef: ElementRef, private renderer: Renderer2) {
private elementRef: ElementRef,
private renderer: Renderer2,
) {
this.renderer.listen(this.elementRef.nativeElement, &#x27;click&#x27;, () &#x3D;&gt; { this.renderer.listen(this.elementRef.nativeElement, &#x27;click&#x27;, () &#x3D;&gt; {
this.togglePasswordVisibility(); this.togglePasswordVisibility();
}); });

View File

@ -68,7 +68,7 @@
<tr> <tr>
<td class="col-md-3">Selector</td> <td class="col-md-3">Selector</td>
<td class="col-md-9"><code>[routerLink]</code></td> <td class="col-md-9"><code>[appRouterLink]</code></td>
</tr> </tr>
</tbody> </tbody>
@ -150,7 +150,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-2" colspan="2"> <td class="col-md-2" colspan="2">
<div class="io-line">Defined in <a href="" data-line="7" class="link-to-prism">src/testing/router-link-directive-stub.ts:7</a></div> <div class="io-line">Defined in <a href="" data-line="9" class="link-to-prism">src/testing/router-link-directive-stub.ts:9</a></div>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -181,8 +181,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="11" <div class="io-line">Defined in <a href="" data-line="13"
class="link-to-prism">src/testing/router-link-directive-stub.ts:11</a></div> class="link-to-prism">src/testing/router-link-directive-stub.ts:13</a></div>
</td> </td>
</tr> </tr>
@ -221,7 +221,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="8" class="link-to-prism">src/testing/router-link-directive-stub.ts:8</a></div> <div class="io-line">Defined in <a href="" data-line="10" class="link-to-prism">src/testing/router-link-directive-stub.ts:10</a></div>
</td> </td>
</tr> </tr>
@ -238,9 +238,11 @@
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {Directive, HostListener, Input} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {Directive, HostListener, Input} from &#x27;@angular/core&#x27;;
@Directive({ @Directive({
selector: &#x27;[routerLink]&#x27; selector: &#x27;[appRouterLink]&#x27;
}) })
// tslint:disable-next-line:directive-class-suffix
export class RouterLinkDirectiveStub { export class RouterLinkDirectiveStub {
// tslint:disable-next-line:no-input-rename
@Input(&#x27;routerLink&#x27;) linkParams: any; @Input(&#x27;routerLink&#x27;) linkParams: any;
navigatedTo: any &#x3D; null; navigatedTo: any &#x3D; null;

View File

@ -102,41 +102,41 @@
</g> </g>
<g id="clust84" class="cluster"> <g id="clust84" class="cluster">
<title>cluster_SharedModule</title> <title>cluster_SharedModule</title>
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="430,-70 430,-138 2389,-138 2389,-70 430,-70"/> <polygon fill="none" stroke="black" stroke-dasharray="1,5" points="243,-70 243,-138 2571,-138 2571,-70 243,-70"/>
</g> </g>
<g id="clust85" class="cluster"> <g id="clust85" class="cluster">
<title>cluster_SharedModule_declarations</title> <title>cluster_SharedModule_declarations</title>
<polygon fill="none" stroke="black" points="1262,-78 1262,-130 2381,-130 2381,-78 1262,-78"/> <polygon fill="none" stroke="black" points="1262,-78 1262,-130 2563,-130 2563,-78 1262,-78"/>
</g> </g>
<g id="clust95" class="cluster"> <g id="clust96" class="cluster">
<title>cluster_SharedModule_exports</title> <title>cluster_SharedModule_exports</title>
<polygon fill="none" stroke="black" points="438,-78 438,-130 1254,-130 1254,-78 438,-78"/> <polygon fill="none" stroke="black" points="251,-78 251,-130 1254,-130 1254,-78 251,-78"/>
</g> </g>
<g id="clust98" class="cluster"> <g id="clust99" class="cluster">
<title>cluster_TokensModule</title> <title>cluster_TokensModule</title>
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="4073,-146 4073,-274 4572,-274 4572,-146 4073,-146"/> <polygon fill="none" stroke="black" stroke-dasharray="1,5" points="4073,-146 4073,-274 4572,-274 4572,-146 4073,-146"/>
</g> </g>
<g id="clust99" class="cluster"> <g id="clust100" class="cluster">
<title>cluster_TokensModule_declarations</title> <title>cluster_TokensModule_declarations</title>
<polygon fill="none" stroke="black" points="4251,-154 4251,-206 4564,-206 4564,-154 4251,-154"/> <polygon fill="none" stroke="black" points="4251,-154 4251,-206 4564,-206 4564,-154 4251,-154"/>
</g> </g>
<g id="clust102" class="cluster"> <g id="clust103" class="cluster">
<title>cluster_TokensModule_imports</title> <title>cluster_TokensModule_imports</title>
<polygon fill="none" stroke="black" points="4081,-154 4081,-206 4243,-206 4243,-154 4081,-154"/> <polygon fill="none" stroke="black" points="4081,-154 4081,-206 4243,-206 4243,-154 4081,-154"/>
</g> </g>
<g id="clust112" class="cluster"> <g id="clust113" class="cluster">
<title>cluster_TransactionsModule</title> <title>cluster_TransactionsModule</title>
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="336,-146 336,-214 1140,-214 1140,-146 336,-146"/> <polygon fill="none" stroke="black" stroke-dasharray="1,5" points="336,-146 336,-214 1140,-214 1140,-146 336,-146"/>
</g> </g>
<g id="clust113" class="cluster"> <g id="clust114" class="cluster">
<title>cluster_TransactionsModule_declarations</title> <title>cluster_TransactionsModule_declarations</title>
<polygon fill="none" stroke="black" points="758,-154 758,-206 1132,-206 1132,-154 758,-154"/> <polygon fill="none" stroke="black" points="758,-154 758,-206 1132,-206 1132,-154 758,-154"/>
</g> </g>
<g id="clust116" class="cluster"> <g id="clust117" class="cluster">
<title>cluster_TransactionsModule_imports</title> <title>cluster_TransactionsModule_imports</title>
<polygon fill="none" stroke="black" points="558,-154 558,-206 750,-206 750,-154 558,-154"/> <polygon fill="none" stroke="black" points="558,-154 558,-206 750,-206 750,-154 558,-154"/>
</g> </g>
<g id="clust117" class="cluster"> <g id="clust118" class="cluster">
<title>cluster_TransactionsModule_exports</title> <title>cluster_TransactionsModule_exports</title>
<polygon fill="none" stroke="black" points="344,-154 344,-206 550,-206 550,-154 344,-154"/> <polygon fill="none" stroke="black" points="344,-154 344,-206 550,-206 550,-154 344,-154"/>
</g> </g>
@ -225,7 +225,7 @@
<text text-anchor="middle" x="1230" y="-243.8" font-family="Times,serif" font-size="14.00">TransactionsModule</text> <text text-anchor="middle" x="1230" y="-243.8" font-family="Times,serif" font-size="14.00">TransactionsModule</text>
</g> </g>
<!-- SharedModule&#45;&gt;TransactionsModule --> <!-- SharedModule&#45;&gt;TransactionsModule -->
<g id="edge49" class="edge"> <g id="edge51" class="edge">
<title>SharedModule&#45;&gt;TransactionsModule</title> <title>SharedModule&#45;&gt;TransactionsModule</title>
<path fill="none" stroke="black" d="M1410.09,-198.22C1410.09,-218.37 1410.09,-248 1410.09,-248 1410.09,-248 1305.78,-248 1305.78,-248"/> <path fill="none" stroke="black" d="M1410.09,-198.22C1410.09,-218.37 1410.09,-248 1410.09,-248 1410.09,-248 1305.78,-248 1305.78,-248"/>
<polygon fill="black" stroke="black" points="1305.78,-244.5 1295.78,-248 1305.78,-251.5 1305.78,-244.5"/> <polygon fill="black" stroke="black" points="1305.78,-244.5 1295.78,-248 1305.78,-251.5 1305.78,-244.5"/>
@ -279,85 +279,97 @@
<polygon fill="black" stroke="black" points="3692.58,-219.93 3696.08,-229.93 3699.58,-219.93 3692.58,-219.93"/> <polygon fill="black" stroke="black" points="3692.58,-219.93 3696.08,-229.93 3699.58,-219.93 3692.58,-219.93"/>
</g> </g>
<!-- FooterComponent --> <!-- FooterComponent -->
<g id="node39" class="node"> <g id="node40" class="node">
<title>FooterComponent </title> <title>FooterComponent </title>
<polygon fill="#fb8072" stroke="black" points="741.88,-122 620.12,-122 620.12,-86 741.88,-86 741.88,-122"/> <polygon fill="#fb8072" stroke="black" points="828.88,-122 707.12,-122 707.12,-86 828.88,-86 828.88,-122"/>
<text text-anchor="middle" x="681" y="-99.8" font-family="Times,serif" font-size="14.00">FooterComponent </text> <text text-anchor="middle" x="768" y="-99.8" font-family="Times,serif" font-size="14.00">FooterComponent </text>
</g> </g>
<!-- SharedModule&#45;&gt;FooterComponent --> <!-- SharedModule&#45;&gt;FooterComponent -->
<g id="edge37" class="edge"> <g id="edge38" class="edge">
<title>SharedModule&#45;&gt;FooterComponent </title> <title>SharedModule&#45;&gt;FooterComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1353.35,-161.79C1353.35,-156.45 1353.35,-152 1353.35,-152 1353.35,-152 681,-152 681,-152 681,-152 681,-132.15 681,-132.15"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M1363.9,-161.81C1363.9,-153.72 1363.9,-146 1363.9,-146 1363.9,-146 797.13,-146 797.13,-146 797.13,-146 797.13,-132.06 797.13,-132.06"/>
<polygon fill="black" stroke="black" points="684.5,-132.15 681,-122.15 677.5,-132.15 684.5,-132.15"/> <polygon fill="black" stroke="black" points="800.63,-132.06 797.13,-122.06 793.63,-132.06 800.63,-132.06"/>
</g> </g>
<!-- MenuSelectionDirective --> <!-- MenuSelectionDirective -->
<g id="node40" class="node"> <g id="node41" class="node">
<title>MenuSelectionDirective </title> <title>MenuSelectionDirective </title>
<polygon fill="#fb8072" stroke="black" points="602.34,-122 445.66,-122 445.66,-86 602.34,-86 602.34,-122"/> <polygon fill="#fb8072" stroke="black" points="689.34,-122 532.66,-122 532.66,-86 689.34,-86 689.34,-122"/>
<text text-anchor="middle" x="524" y="-99.8" font-family="Times,serif" font-size="14.00">MenuSelectionDirective </text> <text text-anchor="middle" x="611" y="-99.8" font-family="Times,serif" font-size="14.00">MenuSelectionDirective </text>
</g> </g>
<!-- SharedModule&#45;&gt;MenuSelectionDirective --> <!-- SharedModule&#45;&gt;MenuSelectionDirective -->
<g id="edge38" class="edge"> <g id="edge39" class="edge">
<title>SharedModule&#45;&gt;MenuSelectionDirective </title> <title>SharedModule&#45;&gt;MenuSelectionDirective </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1346.57,-161.88C1346.57,-159.03 1346.57,-157 1346.57,-157 1346.57,-157 584.04,-157 584.04,-157 584.04,-157 584.04,-132.24 584.04,-132.24"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M1357.88,-161.86C1357.88,-155.54 1357.88,-150 1357.88,-150 1357.88,-150 627.54,-150 627.54,-150 627.54,-150 627.54,-132.18 627.54,-132.18"/>
<polygon fill="black" stroke="black" points="587.54,-132.24 584.04,-122.24 580.54,-132.24 587.54,-132.24"/> <polygon fill="black" stroke="black" points="631.04,-132.18 627.54,-122.18 624.04,-132.18 631.04,-132.18"/>
</g>
<!-- NetworkStatusComponent -->
<g id="node42" class="node">
<title>NetworkStatusComponent </title>
<polygon fill="#fb8072" stroke="black" points="515.03,-122 346.97,-122 346.97,-86 515.03,-86 515.03,-122"/>
<text text-anchor="middle" x="431" y="-99.8" font-family="Times,serif" font-size="14.00">NetworkStatusComponent </text>
</g>
<!-- SharedModule&#45;&gt;NetworkStatusComponent -->
<g id="edge40" class="edge">
<title>SharedModule&#45;&gt;NetworkStatusComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1351.85,-161.94C1351.85,-157.51 1351.85,-154 1351.85,-154 1351.85,-154 433.37,-154 433.37,-154 433.37,-154 433.37,-132.05 433.37,-132.05"/>
<polygon fill="black" stroke="black" points="436.87,-132.05 433.37,-122.05 429.87,-132.05 436.87,-132.05"/>
</g> </g>
<!-- SafePipe --> <!-- SafePipe -->
<g id="node41" class="node"> <g id="node43" class="node">
<title>SafePipe </title> <title>SafePipe </title>
<polygon fill="#fb8072" stroke="black" points="1245.76,-122 1176.24,-122 1176.24,-86 1245.76,-86 1245.76,-122"/> <polygon fill="#fb8072" stroke="black" points="328.76,-122 259.24,-122 259.24,-86 328.76,-86 328.76,-122"/>
<text text-anchor="middle" x="1211" y="-99.8" font-family="Times,serif" font-size="14.00">SafePipe </text> <text text-anchor="middle" x="294" y="-99.8" font-family="Times,serif" font-size="14.00">SafePipe </text>
</g> </g>
<!-- SharedModule&#45;&gt;SafePipe --> <!-- SharedModule&#45;&gt;SafePipe -->
<g id="edge39" class="edge"> <g id="edge41" class="edge">
<title>SharedModule&#45;&gt;SafePipe </title> <title>SharedModule&#45;&gt;SafePipe </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1380.48,-161.85C1380.48,-148.26 1380.48,-132 1380.48,-132 1380.48,-132 1211,-132 1211,-132 1211,-132 1211,-131.02 1211,-131.02"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M1345.82,-161.83C1345.82,-159.55 1345.82,-158 1345.82,-158 1345.82,-158 320.37,-158 320.37,-158 320.37,-158 320.37,-132.28 320.37,-132.28"/>
<polygon fill="black" stroke="black" points="1214.5,-132.21 1211,-122.21 1207.5,-132.21 1214.5,-132.21"/> <polygon fill="black" stroke="black" points="323.87,-132.28 320.37,-122.28 316.87,-132.28 323.87,-132.28"/>
</g> </g>
<!-- SidebarComponent --> <!-- SidebarComponent -->
<g id="node42" class="node"> <g id="node44" class="node">
<title>SidebarComponent </title> <title>SidebarComponent </title>
<polygon fill="#fb8072" stroke="black" points="1158.6,-122 1031.4,-122 1031.4,-86 1158.6,-86 1158.6,-122"/> <polygon fill="#fb8072" stroke="black" points="1245.6,-122 1118.4,-122 1118.4,-86 1245.6,-86 1245.6,-122"/>
<text text-anchor="middle" x="1095" y="-99.8" font-family="Times,serif" font-size="14.00">SidebarComponent </text> <text text-anchor="middle" x="1182" y="-99.8" font-family="Times,serif" font-size="14.00">SidebarComponent </text>
</g> </g>
<!-- SharedModule&#45;&gt;SidebarComponent --> <!-- SharedModule&#45;&gt;SidebarComponent -->
<g id="edge40" class="edge"> <g id="edge42" class="edge">
<title>SharedModule&#45;&gt;SidebarComponent </title> <title>SharedModule&#45;&gt;SidebarComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1373.7,-161.51C1373.7,-149.86 1373.7,-137 1373.7,-137 1373.7,-137 1141.17,-137 1141.17,-137 1141.17,-137 1141.17,-132.04 1141.17,-132.04"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M1381.99,-161.82C1381.99,-148.96 1381.99,-134 1381.99,-134 1381.99,-134 1205.01,-134 1205.01,-134 1205.01,-134 1205.01,-132.14 1205.01,-132.14"/>
<polygon fill="black" stroke="black" points="1144.67,-132.04 1141.17,-122.04 1137.67,-132.04 1144.67,-132.04"/> <polygon fill="black" stroke="black" points="1208.51,-132.14 1205.01,-122.14 1201.51,-132.14 1208.51,-132.14"/>
</g> </g>
<!-- TokenRatioPipe --> <!-- TokenRatioPipe -->
<g id="node43" class="node"> <g id="node45" class="node">
<title>TokenRatioPipe </title> <title>TokenRatioPipe </title>
<polygon fill="#fb8072" stroke="black" points="1013.49,-122 902.51,-122 902.51,-86 1013.49,-86 1013.49,-122"/> <polygon fill="#fb8072" stroke="black" points="1100.49,-122 989.51,-122 989.51,-86 1100.49,-86 1100.49,-122"/>
<text text-anchor="middle" x="958" y="-99.8" font-family="Times,serif" font-size="14.00">TokenRatioPipe </text> <text text-anchor="middle" x="1045" y="-99.8" font-family="Times,serif" font-size="14.00">TokenRatioPipe </text>
</g> </g>
<!-- SharedModule&#45;&gt;TokenRatioPipe --> <!-- SharedModule&#45;&gt;TokenRatioPipe -->
<g id="edge41" class="edge"> <g id="edge43" class="edge">
<title>SharedModule&#45;&gt;TokenRatioPipe </title> <title>SharedModule&#45;&gt;TokenRatioPipe </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1366.92,-161.89C1366.92,-152.1 1366.92,-142 1366.92,-142 1366.92,-142 974.86,-142 974.86,-142 974.86,-142 974.86,-132.11 974.86,-132.11"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M1375.96,-161.94C1375.96,-150.56 1375.96,-138 1375.96,-138 1375.96,-138 1045,-138 1045,-138 1045,-138 1045,-132.19 1045,-132.19"/>
<polygon fill="black" stroke="black" points="978.36,-132.11 974.86,-122.11 971.36,-132.11 978.36,-132.11"/> <polygon fill="black" stroke="black" points="1048.5,-132.19 1045,-122.19 1041.5,-132.19 1048.5,-132.19"/>
</g> </g>
<!-- TopbarComponent --> <!-- TopbarComponent -->
<g id="node44" class="node"> <g id="node46" class="node">
<title>TopbarComponent </title> <title>TopbarComponent </title>
<polygon fill="#fb8072" stroke="black" points="884.76,-122 759.24,-122 759.24,-86 884.76,-86 884.76,-122"/> <polygon fill="#fb8072" stroke="black" points="971.76,-122 846.24,-122 846.24,-86 971.76,-86 971.76,-122"/>
<text text-anchor="middle" x="822" y="-99.8" font-family="Times,serif" font-size="14.00">TopbarComponent </text> <text text-anchor="middle" x="909" y="-99.8" font-family="Times,serif" font-size="14.00">TopbarComponent </text>
</g> </g>
<!-- SharedModule&#45;&gt;TopbarComponent --> <!-- SharedModule&#45;&gt;TopbarComponent -->
<g id="edge42" class="edge"> <g id="edge44" class="edge">
<title>SharedModule&#45;&gt;TopbarComponent </title> <title>SharedModule&#45;&gt;TopbarComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1360.14,-161.96C1360.14,-154.25 1360.14,-147 1360.14,-147 1360.14,-147 825.1,-147 825.1,-147 825.1,-147 825.1,-132.49 825.1,-132.49"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M1369.93,-161.89C1369.93,-152.1 1369.93,-142 1369.93,-142 1369.93,-142 954.05,-142 954.05,-142 954.05,-142 954.05,-132.11 954.05,-132.11"/>
<polygon fill="black" stroke="black" points="828.6,-132.49 825.1,-122.49 821.6,-132.49 828.6,-132.49"/> <polygon fill="black" stroke="black" points="957.55,-132.11 954.05,-122.11 950.55,-132.11 957.55,-132.11"/>
</g> </g>
<!-- TokensModule --> <!-- TokensModule -->
<g id="node47" class="node"> <g id="node49" class="node">
<title>TokensModule</title> <title>TokensModule</title>
<polygon fill="#8dd3c7" stroke="black" points="4291.26,-266 4288.26,-270 4267.26,-270 4264.26,-266 4190.74,-266 4190.74,-230 4291.26,-230 4291.26,-266"/> <polygon fill="#8dd3c7" stroke="black" points="4291.26,-266 4288.26,-270 4267.26,-270 4264.26,-266 4190.74,-266 4190.74,-230 4291.26,-230 4291.26,-266"/>
<text text-anchor="middle" x="4241" y="-243.8" font-family="Times,serif" font-size="14.00">TokensModule</text> <text text-anchor="middle" x="4241" y="-243.8" font-family="Times,serif" font-size="14.00">TokensModule</text>
</g> </g>
<!-- SharedModule&#45;&gt;TokensModule --> <!-- SharedModule&#45;&gt;TokensModule -->
<g id="edge45" class="edge"> <g id="edge47" class="edge">
<title>SharedModule&#45;&gt;TokensModule</title> <title>SharedModule&#45;&gt;TokensModule</title>
<path fill="none" stroke="black" d="M1396.03,-198.17C1396.03,-202.05 1396.03,-205 1396.03,-205 1396.03,-205 4205.39,-205 4205.39,-205 4205.39,-205 4205.39,-219.51 4205.39,-219.51"/> <path fill="none" stroke="black" d="M1396.03,-198.17C1396.03,-202.05 1396.03,-205 1396.03,-205 1396.03,-205 4205.39,-205 4205.39,-205 4205.39,-205 4205.39,-219.51 4205.39,-219.51"/>
<polygon fill="black" stroke="black" points="4201.89,-219.51 4205.39,-229.51 4208.89,-219.51 4201.89,-219.51"/> <polygon fill="black" stroke="black" points="4201.89,-219.51 4205.39,-229.51 4208.89,-219.51 4201.89,-219.51"/>
@ -369,13 +381,13 @@
<polygon fill="black" stroke="black" points="1478.68,-325.5 1488.68,-322 1478.68,-318.5 1478.68,-325.5"/> <polygon fill="black" stroke="black" points="1478.68,-325.5 1488.68,-322 1478.68,-318.5 1478.68,-325.5"/>
</g> </g>
<!-- TransactionDetailsComponent --> <!-- TransactionDetailsComponent -->
<g id="node52" class="node"> <g id="node54" class="node">
<title>TransactionDetailsComponent </title> <title>TransactionDetailsComponent </title>
<polygon fill="#fb8072" stroke="black" points="542.07,-198 351.93,-198 351.93,-162 542.07,-162 542.07,-198"/> <polygon fill="#fb8072" stroke="black" points="542.07,-198 351.93,-198 351.93,-162 542.07,-162 542.07,-198"/>
<text text-anchor="middle" x="447" y="-175.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent </text> <text text-anchor="middle" x="447" y="-175.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent </text>
</g> </g>
<!-- TransactionsModule&#45;&gt;TransactionDetailsComponent --> <!-- TransactionsModule&#45;&gt;TransactionDetailsComponent -->
<g id="edge51" class="edge"> <g id="edge53" class="edge">
<title>TransactionsModule&#45;&gt;TransactionDetailsComponent </title> <title>TransactionsModule&#45;&gt;TransactionDetailsComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1164.25,-259C975.77,-259 447,-259 447,-259 447,-259 447,-208.32 447,-208.32"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M1164.25,-259C975.77,-259 447,-259 447,-259 447,-259 447,-208.32 447,-208.32"/>
<polygon fill="black" stroke="black" points="450.5,-208.32 447,-198.32 443.5,-208.32 450.5,-208.32"/> <polygon fill="black" stroke="black" points="450.5,-208.32 447,-198.32 443.5,-208.32 450.5,-208.32"/>
@ -593,167 +605,179 @@
<!-- ErrorDialogComponent --> <!-- ErrorDialogComponent -->
<g id="node31" class="node"> <g id="node31" class="node">
<title>ErrorDialogComponent</title> <title>ErrorDialogComponent</title>
<polygon fill="#ffffb3" stroke="black" points="2109.47,-122 1960.53,-122 1960.53,-86 2109.47,-86 2109.47,-122"/> <polygon fill="#ffffb3" stroke="black" points="2291.47,-122 2142.53,-122 2142.53,-86 2291.47,-86 2291.47,-122"/>
<text text-anchor="middle" x="2035" y="-99.8" font-family="Times,serif" font-size="14.00">ErrorDialogComponent</text> <text text-anchor="middle" x="2217" y="-99.8" font-family="Times,serif" font-size="14.00">ErrorDialogComponent</text>
</g> </g>
<!-- ErrorDialogComponent&#45;&gt;SharedModule --> <!-- ErrorDialogComponent&#45;&gt;SharedModule -->
<g id="edge29" class="edge"> <g id="edge29" class="edge">
<title>ErrorDialogComponent&#45;&gt;SharedModule</title> <title>ErrorDialogComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M1974.61,-122.32C1974.61,-145.66 1974.61,-183 1974.61,-183 1974.61,-183 1448.42,-183 1448.42,-183"/> <path fill="none" stroke="black" d="M2147.36,-122.23C2147.36,-146.93 2147.36,-188 2147.36,-188 2147.36,-188 1448.47,-188 1448.47,-188"/>
<polygon fill="black" stroke="black" points="1448.42,-179.5 1438.42,-183 1448.42,-186.5 1448.42,-179.5"/> <polygon fill="black" stroke="black" points="1448.47,-184.5 1438.47,-188 1448.47,-191.5 1448.47,-184.5"/>
</g> </g>
<!-- FooterComponent --> <!-- FooterComponent -->
<g id="node32" class="node"> <g id="node32" class="node">
<title>FooterComponent</title> <title>FooterComponent</title>
<polygon fill="#ffffb3" stroke="black" points="1942.88,-122 1825.12,-122 1825.12,-86 1942.88,-86 1942.88,-122"/> <polygon fill="#ffffb3" stroke="black" points="2124.88,-122 2007.12,-122 2007.12,-86 2124.88,-86 2124.88,-122"/>
<text text-anchor="middle" x="1884" y="-99.8" font-family="Times,serif" font-size="14.00">FooterComponent</text> <text text-anchor="middle" x="2066" y="-99.8" font-family="Times,serif" font-size="14.00">FooterComponent</text>
</g> </g>
<!-- FooterComponent&#45;&gt;SharedModule --> <!-- FooterComponent&#45;&gt;SharedModule -->
<g id="edge30" class="edge"> <g id="edge30" class="edge">
<title>FooterComponent&#45;&gt;SharedModule</title> <title>FooterComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M1884,-122.29C1884,-144.21 1884,-178 1884,-178 1884,-178 1448.27,-178 1448.27,-178"/> <path fill="none" stroke="black" d="M2066,-122.32C2066,-145.66 2066,-183 2066,-183 2066,-183 1448.23,-183 1448.23,-183"/>
<polygon fill="black" stroke="black" points="1448.27,-174.5 1438.27,-178 1448.27,-181.5 1448.27,-174.5"/> <polygon fill="black" stroke="black" points="1448.23,-179.5 1438.23,-183 1448.23,-186.5 1448.23,-179.5"/>
</g> </g>
<!-- MenuSelectionDirective --> <!-- MenuSelectionDirective -->
<g id="node33" class="node"> <g id="node33" class="node">
<title>MenuSelectionDirective</title> <title>MenuSelectionDirective</title>
<polygon fill="#ffffb3" stroke="black" points="1807.34,-122 1654.66,-122 1654.66,-86 1807.34,-86 1807.34,-122"/> <polygon fill="#ffffb3" stroke="black" points="1989.34,-122 1836.66,-122 1836.66,-86 1989.34,-86 1989.34,-122"/>
<text text-anchor="middle" x="1731" y="-99.8" font-family="Times,serif" font-size="14.00">MenuSelectionDirective</text> <text text-anchor="middle" x="1913" y="-99.8" font-family="Times,serif" font-size="14.00">MenuSelectionDirective</text>
</g> </g>
<!-- MenuSelectionDirective&#45;&gt;SharedModule --> <!-- MenuSelectionDirective&#45;&gt;SharedModule -->
<g id="edge31" class="edge"> <g id="edge31" class="edge">
<title>MenuSelectionDirective&#45;&gt;SharedModule</title> <title>MenuSelectionDirective&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M1717.34,-122.13C1717.34,-142.57 1717.34,-173 1717.34,-173 1717.34,-173 1448.51,-173 1448.51,-173"/> <path fill="none" stroke="black" d="M1901,-122.29C1901,-144.21 1901,-178 1901,-178 1901,-178 1448.56,-178 1448.56,-178"/>
<polygon fill="black" stroke="black" points="1448.51,-169.5 1438.51,-173 1448.51,-176.5 1448.51,-169.5"/> <polygon fill="black" stroke="black" points="1448.56,-174.5 1438.56,-178 1448.56,-181.5 1448.56,-174.5"/>
</g> </g>
<!-- MenuToggleDirective --> <!-- MenuToggleDirective -->
<g id="node34" class="node"> <g id="node34" class="node">
<title>MenuToggleDirective</title> <title>MenuToggleDirective</title>
<polygon fill="#ffffb3" stroke="black" points="1636.4,-122 1495.6,-122 1495.6,-86 1636.4,-86 1636.4,-122"/> <polygon fill="#ffffb3" stroke="black" points="1818.4,-122 1677.6,-122 1677.6,-86 1818.4,-86 1818.4,-122"/>
<text text-anchor="middle" x="1566" y="-99.8" font-family="Times,serif" font-size="14.00">MenuToggleDirective</text> <text text-anchor="middle" x="1748" y="-99.8" font-family="Times,serif" font-size="14.00">MenuToggleDirective</text>
</g> </g>
<!-- MenuToggleDirective&#45;&gt;SharedModule --> <!-- MenuToggleDirective&#45;&gt;SharedModule -->
<g id="edge32" class="edge"> <g id="edge32" class="edge">
<title>MenuToggleDirective&#45;&gt;SharedModule</title> <title>MenuToggleDirective&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M1561.72,-122.17C1561.72,-141.09 1561.72,-168 1561.72,-168 1561.72,-168 1448.5,-168 1448.5,-168"/> <path fill="none" stroke="black" d="M1728.95,-122.13C1728.95,-142.57 1728.95,-173 1728.95,-173 1728.95,-173 1448.43,-173 1448.43,-173"/>
<polygon fill="black" stroke="black" points="1448.5,-164.5 1438.5,-168 1448.5,-171.5 1448.5,-164.5"/> <polygon fill="black" stroke="black" points="1448.43,-169.5 1438.43,-173 1448.43,-176.5 1448.43,-169.5"/>
</g>
<!-- NetworkStatusComponent -->
<g id="node35" class="node">
<title>NetworkStatusComponent</title>
<polygon fill="#ffffb3" stroke="black" points="1660.04,-122 1495.96,-122 1495.96,-86 1660.04,-86 1660.04,-122"/>
<text text-anchor="middle" x="1578" y="-99.8" font-family="Times,serif" font-size="14.00">NetworkStatusComponent</text>
</g>
<!-- NetworkStatusComponent&#45;&gt;SharedModule -->
<g id="edge33" class="edge">
<title>NetworkStatusComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M1561.69,-122.17C1561.69,-141.09 1561.69,-168 1561.69,-168 1561.69,-168 1448.49,-168 1448.49,-168"/>
<polygon fill="black" stroke="black" points="1448.49,-164.5 1438.49,-168 1448.49,-171.5 1448.49,-164.5"/>
</g> </g>
<!-- SafePipe --> <!-- SafePipe -->
<g id="node35" class="node"> <g id="node36" class="node">
<title>SafePipe</title> <title>SafePipe</title>
<polygon fill="#ffffb3" stroke="black" points="1477.76,-122 1412.24,-122 1412.24,-86 1477.76,-86 1477.76,-122"/> <polygon fill="#ffffb3" stroke="black" points="1477.76,-122 1412.24,-122 1412.24,-86 1477.76,-86 1477.76,-122"/>
<text text-anchor="middle" x="1445" y="-99.8" font-family="Times,serif" font-size="14.00">SafePipe</text> <text text-anchor="middle" x="1445" y="-99.8" font-family="Times,serif" font-size="14.00">SafePipe</text>
</g> </g>
<!-- SafePipe&#45;&gt;SharedModule --> <!-- SafePipe&#45;&gt;SharedModule -->
<g id="edge33" class="edge"> <g id="edge34" class="edge">
<title>SafePipe&#45;&gt;SharedModule</title> <title>SafePipe&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M1420.82,-122.01C1420.82,-122.01 1420.82,-151.85 1420.82,-151.85"/> <path fill="none" stroke="black" d="M1418.64,-122.01C1418.64,-122.01 1418.64,-151.85 1418.64,-151.85"/>
<polygon fill="black" stroke="black" points="1417.32,-151.85 1420.82,-161.85 1424.32,-151.85 1417.32,-151.85"/> <polygon fill="black" stroke="black" points="1415.14,-151.85 1418.64,-161.85 1422.14,-151.85 1415.14,-151.85"/>
</g> </g>
<!-- SidebarComponent --> <!-- SidebarComponent -->
<g id="node36" class="node"> <g id="node37" class="node">
<title>SidebarComponent</title> <title>SidebarComponent</title>
<polygon fill="#ffffb3" stroke="black" points="1394.1,-122 1269.9,-122 1269.9,-86 1394.1,-86 1394.1,-122"/> <polygon fill="#ffffb3" stroke="black" points="1394.1,-122 1269.9,-122 1269.9,-86 1394.1,-86 1394.1,-122"/>
<text text-anchor="middle" x="1332" y="-99.8" font-family="Times,serif" font-size="14.00">SidebarComponent</text> <text text-anchor="middle" x="1332" y="-99.8" font-family="Times,serif" font-size="14.00">SidebarComponent</text>
</g> </g>
<!-- SidebarComponent&#45;&gt;SharedModule --> <!-- SidebarComponent&#45;&gt;SharedModule -->
<g id="edge34" class="edge"> <g id="edge35" class="edge">
<title>SidebarComponent&#45;&gt;SharedModule</title> <title>SidebarComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M1387.27,-122.01C1387.27,-122.01 1387.27,-151.85 1387.27,-151.85"/> <path fill="none" stroke="black" d="M1388.02,-122.01C1388.02,-122.01 1388.02,-151.85 1388.02,-151.85"/>
<polygon fill="black" stroke="black" points="1383.77,-151.85 1387.27,-161.85 1390.77,-151.85 1383.77,-151.85"/> <polygon fill="black" stroke="black" points="1384.52,-151.85 1388.02,-161.85 1391.52,-151.85 1384.52,-151.85"/>
</g> </g>
<!-- TokenRatioPipe --> <!-- TokenRatioPipe -->
<g id="node37" class="node"> <g id="node38" class="node">
<title>TokenRatioPipe</title> <title>TokenRatioPipe</title>
<polygon fill="#ffffb3" stroke="black" points="2373.49,-122 2266.51,-122 2266.51,-86 2373.49,-86 2373.49,-122"/> <polygon fill="#ffffb3" stroke="black" points="2555.49,-122 2448.51,-122 2448.51,-86 2555.49,-86 2555.49,-122"/>
<text text-anchor="middle" x="2320" y="-99.8" font-family="Times,serif" font-size="14.00">TokenRatioPipe</text> <text text-anchor="middle" x="2502" y="-99.8" font-family="Times,serif" font-size="14.00">TokenRatioPipe</text>
</g> </g>
<!-- TokenRatioPipe&#45;&gt;SharedModule --> <!-- TokenRatioPipe&#45;&gt;SharedModule -->
<g id="edge35" class="edge"> <g id="edge36" class="edge">
<title>TokenRatioPipe&#45;&gt;SharedModule</title> <title>TokenRatioPipe&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M2318.15,-122.12C2318.15,-124.97 2318.15,-127 2318.15,-127 2318.15,-127 1429.51,-127 1429.51,-127 1429.51,-127 1429.51,-151.76 1429.51,-151.76"/> <path fill="none" stroke="black" d="M2492.14,-122.06C2492.14,-126.49 2492.14,-130 2492.14,-130 2492.14,-130 1431.69,-130 1431.69,-130 1431.69,-130 1431.69,-151.95 1431.69,-151.95"/>
<polygon fill="black" stroke="black" points="1426.01,-151.76 1429.51,-161.76 1433.01,-151.76 1426.01,-151.76"/> <polygon fill="black" stroke="black" points="1428.19,-151.95 1431.69,-161.95 1435.19,-151.95 1428.19,-151.95"/>
</g> </g>
<!-- TopbarComponent --> <!-- TopbarComponent -->
<g id="node38" class="node"> <g id="node39" class="node">
<title>TopbarComponent</title> <title>TopbarComponent</title>
<polygon fill="#ffffb3" stroke="black" points="2248.76,-122 2127.24,-122 2127.24,-86 2248.76,-86 2248.76,-122"/> <polygon fill="#ffffb3" stroke="black" points="2430.76,-122 2309.24,-122 2309.24,-86 2430.76,-86 2430.76,-122"/>
<text text-anchor="middle" x="2188" y="-99.8" font-family="Times,serif" font-size="14.00">TopbarComponent</text> <text text-anchor="middle" x="2370" y="-99.8" font-family="Times,serif" font-size="14.00">TopbarComponent</text>
</g> </g>
<!-- TopbarComponent&#45;&gt;SharedModule --> <!-- TopbarComponent&#45;&gt;SharedModule -->
<g id="edge36" class="edge"> <g id="edge37" class="edge">
<title>TopbarComponent&#45;&gt;SharedModule</title> <title>TopbarComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M2139.66,-122.23C2139.66,-146.93 2139.66,-188 2139.66,-188 2139.66,-188 1448.25,-188 1448.25,-188"/> <path fill="none" stroke="black" d="M2339.46,-122.17C2339.46,-124.45 2339.46,-126 2339.46,-126 2339.46,-126 1425.17,-126 1425.17,-126 1425.17,-126 1425.17,-151.72 1425.17,-151.72"/>
<polygon fill="black" stroke="black" points="1448.25,-184.5 1438.25,-188 1448.25,-191.5 1448.25,-184.5"/> <polygon fill="black" stroke="black" points="1421.67,-151.72 1425.17,-161.72 1428.67,-151.72 1421.67,-151.72"/>
</g> </g>
<!-- TokenDetailsComponent --> <!-- TokenDetailsComponent -->
<g id="node45" class="node"> <g id="node47" class="node">
<title>TokenDetailsComponent</title> <title>TokenDetailsComponent</title>
<polygon fill="#ffffb3" stroke="black" points="4556.25,-198 4399.75,-198 4399.75,-162 4556.25,-162 4556.25,-198"/> <polygon fill="#ffffb3" stroke="black" points="4556.25,-198 4399.75,-198 4399.75,-162 4556.25,-162 4556.25,-198"/>
<text text-anchor="middle" x="4478" y="-175.8" font-family="Times,serif" font-size="14.00">TokenDetailsComponent</text> <text text-anchor="middle" x="4478" y="-175.8" font-family="Times,serif" font-size="14.00">TokenDetailsComponent</text>
</g> </g>
<!-- TokenDetailsComponent&#45;&gt;TokensModule --> <!-- TokenDetailsComponent&#45;&gt;TokensModule -->
<g id="edge43" class="edge"> <g id="edge45" class="edge">
<title>TokenDetailsComponent&#45;&gt;TokensModule</title> <title>TokenDetailsComponent&#45;&gt;TokensModule</title>
<path fill="none" stroke="black" d="M4478,-198.22C4478,-218.37 4478,-248 4478,-248 4478,-248 4301.55,-248 4301.55,-248"/> <path fill="none" stroke="black" d="M4478,-198.22C4478,-218.37 4478,-248 4478,-248 4478,-248 4301.55,-248 4301.55,-248"/>
<polygon fill="black" stroke="black" points="4301.55,-244.5 4291.55,-248 4301.55,-251.5 4301.55,-244.5"/> <polygon fill="black" stroke="black" points="4301.55,-244.5 4291.55,-248 4301.55,-251.5 4301.55,-244.5"/>
</g> </g>
<!-- TokensComponent --> <!-- TokensComponent -->
<g id="node46" class="node"> <g id="node48" class="node">
<title>TokensComponent</title> <title>TokensComponent</title>
<polygon fill="#ffffb3" stroke="black" points="4381.05,-198 4258.95,-198 4258.95,-162 4381.05,-162 4381.05,-198"/> <polygon fill="#ffffb3" stroke="black" points="4381.05,-198 4258.95,-198 4258.95,-162 4381.05,-162 4381.05,-198"/>
<text text-anchor="middle" x="4320" y="-175.8" font-family="Times,serif" font-size="14.00">TokensComponent</text> <text text-anchor="middle" x="4320" y="-175.8" font-family="Times,serif" font-size="14.00">TokensComponent</text>
</g> </g>
<!-- TokensComponent&#45;&gt;TokensModule --> <!-- TokensComponent&#45;&gt;TokensModule -->
<g id="edge44" class="edge"> <g id="edge46" class="edge">
<title>TokensComponent&#45;&gt;TokensModule</title> <title>TokensComponent&#45;&gt;TokensModule</title>
<path fill="none" stroke="black" d="M4275.05,-198.22C4275.05,-198.22 4275.05,-219.73 4275.05,-219.73"/> <path fill="none" stroke="black" d="M4275.05,-198.22C4275.05,-198.22 4275.05,-219.73 4275.05,-219.73"/>
<polygon fill="black" stroke="black" points="4271.55,-219.73 4275.05,-229.73 4278.55,-219.73 4271.55,-219.73"/> <polygon fill="black" stroke="black" points="4271.55,-219.73 4275.05,-229.73 4278.55,-219.73 4271.55,-219.73"/>
</g> </g>
<!-- TokensRoutingModule --> <!-- TokensRoutingModule -->
<g id="node48" class="node"> <g id="node50" class="node">
<title>TokensRoutingModule</title> <title>TokensRoutingModule</title>
<polygon fill="#8dd3c7" stroke="black" points="4234.88,-198 4231.88,-202 4210.88,-202 4207.88,-198 4089.12,-198 4089.12,-162 4234.88,-162 4234.88,-198"/> <polygon fill="#8dd3c7" stroke="black" points="4234.88,-198 4231.88,-202 4210.88,-202 4207.88,-198 4089.12,-198 4089.12,-162 4234.88,-162 4234.88,-198"/>
<text text-anchor="middle" x="4162" y="-175.8" font-family="Times,serif" font-size="14.00">TokensRoutingModule</text> <text text-anchor="middle" x="4162" y="-175.8" font-family="Times,serif" font-size="14.00">TokensRoutingModule</text>
</g> </g>
<!-- TokensRoutingModule&#45;&gt;TokensModule --> <!-- TokensRoutingModule&#45;&gt;TokensModule -->
<g id="edge46" class="edge"> <g id="edge48" class="edge">
<title>TokensRoutingModule&#45;&gt;TokensModule</title> <title>TokensRoutingModule&#45;&gt;TokensModule</title>
<path fill="none" stroke="black" d="M4220.17,-198.22C4220.17,-198.22 4220.17,-219.73 4220.17,-219.73"/> <path fill="none" stroke="black" d="M4220.17,-198.22C4220.17,-198.22 4220.17,-219.73 4220.17,-219.73"/>
<polygon fill="black" stroke="black" points="4216.67,-219.73 4220.17,-229.73 4223.67,-219.73 4216.67,-219.73"/> <polygon fill="black" stroke="black" points="4216.67,-219.73 4220.17,-229.73 4223.67,-219.73 4216.67,-219.73"/>
</g> </g>
<!-- TransactionDetailsComponent --> <!-- TransactionDetailsComponent -->
<g id="node49" class="node"> <g id="node51" class="node">
<title>TransactionDetailsComponent</title> <title>TransactionDetailsComponent</title>
<polygon fill="#ffffb3" stroke="black" points="1123.57,-198 936.43,-198 936.43,-162 1123.57,-162 1123.57,-198"/> <polygon fill="#ffffb3" stroke="black" points="1123.57,-198 936.43,-198 936.43,-162 1123.57,-162 1123.57,-198"/>
<text text-anchor="middle" x="1030" y="-175.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent</text> <text text-anchor="middle" x="1030" y="-175.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent</text>
</g> </g>
<!-- TransactionDetailsComponent&#45;&gt;TransactionsModule --> <!-- TransactionDetailsComponent&#45;&gt;TransactionsModule -->
<g id="edge47" class="edge"> <g id="edge49" class="edge">
<title>TransactionDetailsComponent&#45;&gt;TransactionsModule</title> <title>TransactionDetailsComponent&#45;&gt;TransactionsModule</title>
<path fill="none" stroke="black" d="M1030,-198.03C1030,-215.06 1030,-238 1030,-238 1030,-238 1154.24,-238 1154.24,-238"/> <path fill="none" stroke="black" d="M1030,-198.03C1030,-215.06 1030,-238 1030,-238 1030,-238 1154.24,-238 1154.24,-238"/>
<polygon fill="black" stroke="black" points="1154.24,-241.5 1164.24,-238 1154.24,-234.5 1154.24,-241.5"/> <polygon fill="black" stroke="black" points="1154.24,-241.5 1164.24,-238 1154.24,-234.5 1154.24,-241.5"/>
</g> </g>
<!-- TransactionsComponent --> <!-- TransactionsComponent -->
<g id="node50" class="node"> <g id="node52" class="node">
<title>TransactionsComponent</title> <title>TransactionsComponent</title>
<polygon fill="#ffffb3" stroke="black" points="918.36,-198 765.64,-198 765.64,-162 918.36,-162 918.36,-198"/> <polygon fill="#ffffb3" stroke="black" points="918.36,-198 765.64,-198 765.64,-162 918.36,-162 918.36,-198"/>
<text text-anchor="middle" x="842" y="-175.8" font-family="Times,serif" font-size="14.00">TransactionsComponent</text> <text text-anchor="middle" x="842" y="-175.8" font-family="Times,serif" font-size="14.00">TransactionsComponent</text>
</g> </g>
<!-- TransactionsComponent&#45;&gt;TransactionsModule --> <!-- TransactionsComponent&#45;&gt;TransactionsModule -->
<g id="edge48" class="edge"> <g id="edge50" class="edge">
<title>TransactionsComponent&#45;&gt;TransactionsModule</title> <title>TransactionsComponent&#45;&gt;TransactionsModule</title>
<path fill="none" stroke="black" d="M842,-198.11C842,-217.34 842,-245 842,-245 842,-245 1154.18,-245 1154.18,-245"/> <path fill="none" stroke="black" d="M842,-198.11C842,-217.34 842,-245 842,-245 842,-245 1154.18,-245 1154.18,-245"/>
<polygon fill="black" stroke="black" points="1154.18,-248.5 1164.18,-245 1154.18,-241.5 1154.18,-248.5"/> <polygon fill="black" stroke="black" points="1154.18,-248.5 1164.18,-245 1154.18,-241.5 1154.18,-248.5"/>
</g> </g>
<!-- TransactionsRoutingModule --> <!-- TransactionsRoutingModule -->
<g id="node51" class="node"> <g id="node53" class="node">
<title>TransactionsRoutingModule</title> <title>TransactionsRoutingModule</title>
<polygon fill="#8dd3c7" stroke="black" points="742.2,-198 739.2,-202 718.2,-202 715.2,-198 565.8,-198 565.8,-162 742.2,-162 742.2,-198"/> <polygon fill="#8dd3c7" stroke="black" points="742.2,-198 739.2,-202 718.2,-202 715.2,-198 565.8,-198 565.8,-162 742.2,-162 742.2,-198"/>
<text text-anchor="middle" x="654" y="-175.8" font-family="Times,serif" font-size="14.00">TransactionsRoutingModule</text> <text text-anchor="middle" x="654" y="-175.8" font-family="Times,serif" font-size="14.00">TransactionsRoutingModule</text>
</g> </g>
<!-- TransactionsRoutingModule&#45;&gt;TransactionsModule --> <!-- TransactionsRoutingModule&#45;&gt;TransactionsModule -->
<g id="edge50" class="edge"> <g id="edge52" class="edge">
<title>TransactionsRoutingModule&#45;&gt;TransactionsModule</title> <title>TransactionsRoutingModule&#45;&gt;TransactionsModule</title>
<path fill="none" stroke="black" d="M654,-198.17C654,-219.5 654,-252 654,-252 654,-252 1154.21,-252 1154.21,-252"/> <path fill="none" stroke="black" d="M654,-198.17C654,-219.5 654,-252 654,-252 654,-252 1154.21,-252 1154.21,-252"/>
<polygon fill="black" stroke="black" points="1154.21,-255.5 1164.21,-252 1154.21,-248.5 1154.21,-255.5"/> <polygon fill="black" stroke="black" points="1154.21,-255.5 1164.21,-252 1154.21,-248.5 1154.21,-255.5"/>

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 44 KiB

View File

@ -72,11 +72,6 @@ Dictates access to routes depending on the authentication status.</p>
<p class="comment">
<h3>Example</h3>
</p>
<div class="io-description">
</div>
<section> <section>
<h3 id="index">Index</h3> <h3 id="index">Index</h3>
@ -117,7 +112,7 @@ Dictates access to routes depending on the authentication status.</p>
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="17" class="link-to-prism">src/app/_guards/auth.guard.ts:17</a></div> <div class="io-line">Defined in <a href="" data-line="21" class="link-to-prism">src/app/_guards/auth.guard.ts:21</a></div>
</td> </td>
</tr> </tr>
@ -191,8 +186,8 @@ Dictates access to routes depending on the authentication status.</p>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="35" <div class="io-line">Defined in <a href="" data-line="38"
class="link-to-prism">src/app/_guards/auth.guard.ts:35</a></div> class="link-to-prism">src/app/_guards/auth.guard.ts:38</a></div>
</td> </td>
</tr> </tr>
@ -275,7 +270,13 @@ ActivatedRouteSnapshot can also be used to traverse the router state tree.</li>
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Injectable } from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Injectable } from &#x27;@angular/core&#x27;;
import {ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree} from &#x27;@angular/router&#x27;; import {
ActivatedRouteSnapshot,
CanActivate,
Router,
RouterStateSnapshot,
UrlTree,
} from &#x27;@angular/router&#x27;;
// Third party imports // Third party imports
import { Observable } from &#x27;rxjs&#x27;; import { Observable } from &#x27;rxjs&#x27;;
@ -283,14 +284,11 @@ import { Observable } from &#x27;rxjs&#x27;;
/** /**
* Auth guard implementation. * Auth guard implementation.
* Dictates access to routes depending on the authentication status. * Dictates access to routes depending on the authentication status.
*
* @implements CanActivate
*/ */
@Injectable({ @Injectable({
providedIn: &#x27;root&#x27; providedIn: &#x27;root&#x27;,
}) })
export class AuthGuard implements CanActivate { export class AuthGuard implements CanActivate {
/** /**
* Instantiates the auth guard class. * Instantiates the auth guard class.
* *
@ -309,14 +307,14 @@ export class AuthGuard implements CanActivate {
*/ */
canActivate( canActivate(
route: ActivatedRouteSnapshot, route: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable&lt;boolean | UrlTree&gt; | Promise&lt;boolean | UrlTree&gt; | boolean | UrlTree { state: RouterStateSnapshot
): Observable&lt;boolean | UrlTree&gt; | Promise&lt;boolean | UrlTree&gt; | boolean | UrlTree {
if (localStorage.getItem(btoa(&#x27;CICADA_PRIVATE_KEY&#x27;))) { if (localStorage.getItem(btoa(&#x27;CICADA_PRIVATE_KEY&#x27;))) {
return true; return true;
} }
this.router.navigate([&#x27;/auth&#x27;]); this.router.navigate([&#x27;/auth&#x27;]);
return false; return false;
} }
} }
</code></pre> </code></pre>
</div> </div>

View File

@ -72,11 +72,6 @@ Dictates access to routes depending on the user&#39;s role.</p>
<p class="comment">
<h3>Example</h3>
</p>
<div class="io-description">
</div>
<section> <section>
<h3 id="index">Index</h3> <h3 id="index">Index</h3>
@ -117,7 +112,7 @@ Dictates access to routes depending on the user&#39;s role.</p>
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="17" class="link-to-prism">src/app/_guards/role.guard.ts:17</a></div> <div class="io-line">Defined in <a href="" data-line="21" class="link-to-prism">src/app/_guards/role.guard.ts:21</a></div>
</td> </td>
</tr> </tr>
@ -191,8 +186,8 @@ Dictates access to routes depending on the user&#39;s role.</p>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="35" <div class="io-line">Defined in <a href="" data-line="38"
class="link-to-prism">src/app/_guards/role.guard.ts:35</a></div> class="link-to-prism">src/app/_guards/role.guard.ts:38</a></div>
</td> </td>
</tr> </tr>
@ -275,7 +270,13 @@ ActivatedRouteSnapshot can also be used to traverse the router state tree.</li>
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Injectable } from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Injectable } from &#x27;@angular/core&#x27;;
import {ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree} from &#x27;@angular/router&#x27;; import {
ActivatedRouteSnapshot,
CanActivate,
Router,
RouterStateSnapshot,
UrlTree,
} from &#x27;@angular/router&#x27;;
// Third party imports // Third party imports
import { Observable } from &#x27;rxjs&#x27;; import { Observable } from &#x27;rxjs&#x27;;
@ -283,14 +284,11 @@ import { Observable } from &#x27;rxjs&#x27;;
/** /**
* Role guard implementation. * Role guard implementation.
* Dictates access to routes depending on the user&#x27;s role. * Dictates access to routes depending on the user&#x27;s role.
*
* @implements CanActivate
*/ */
@Injectable({ @Injectable({
providedIn: &#x27;root&#x27; providedIn: &#x27;root&#x27;,
}) })
export class RoleGuard implements CanActivate { export class RoleGuard implements CanActivate {
/** /**
* Instantiates the role guard class. * Instantiates the role guard class.
* *
@ -309,7 +307,8 @@ export class RoleGuard implements CanActivate {
*/ */
canActivate( canActivate(
route: ActivatedRouteSnapshot, route: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable&lt;boolean | UrlTree&gt; | Promise&lt;boolean | UrlTree&gt; | boolean | UrlTree { state: RouterStateSnapshot
): Observable&lt;boolean | UrlTree&gt; | Promise&lt;boolean | UrlTree&gt; | boolean | UrlTree {
const currentUser &#x3D; JSON.parse(localStorage.getItem(atob(&#x27;CICADA_USER&#x27;))); const currentUser &#x3D; JSON.parse(localStorage.getItem(atob(&#x27;CICADA_USER&#x27;)));
if (currentUser) { if (currentUser) {
if (route.data.roles &amp;&amp; route.data.roles.indexOf(currentUser.role) &#x3D;&#x3D;&#x3D; -1) { if (route.data.roles &amp;&amp; route.data.roles.indexOf(currentUser.role) &#x3D;&#x3D;&#x3D; -1) {
@ -319,10 +318,9 @@ export class RoleGuard implements CanActivate {
return true; return true;
} }
this.router.navigate([&#x27;/auth&#x27;], { queryParams: { returnUrl: state.url }}); this.router.navigate([&#x27;/auth&#x27;], { queryParams: { returnUrl: state.url } });
return false; return false;
} }
} }
</code></pre> </code></pre>
</div> </div>

View File

@ -4,6 +4,6 @@
<rect id="svg_2" height="20" width="40" y="0" x="92" stroke-width="1.5" stroke="#dab226" fill="#dab226" rx="7" ry="7"/> <rect id="svg_2" height="20" width="40" y="0" x="92" stroke-width="1.5" stroke="#dab226" fill="#dab226" rx="7" ry="7"/>
<rect id="svg_3" height="20" width="22" y="0" x="92" stroke-width="1.5" stroke="#dab226" fill="#dab226"/> <rect id="svg_3" height="20" width="22" y="0" x="92" stroke-width="1.5" stroke="#dab226" fill="#dab226"/>
<text xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="12" id="svg_4" y="14" x="6" stroke-width="0" stroke="#5d5d5d" fill="#ffffff">documentation</text> <text xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="12" id="svg_4" y="14" x="6" stroke-width="0" stroke="#5d5d5d" fill="#ffffff">documentation</text>
<text xml:space="preserve" text-anchor="middle" font-family="Helvetica, Arial, sans-serif" font-size="12" id="svg_5" y="14" x="112" stroke-width="0" stroke="#5d5d5d" fill="#ffffff" style="text-anchor: middle">30%</text> <text xml:space="preserve" text-anchor="middle" font-family="Helvetica, Arial, sans-serif" font-size="12" id="svg_5" y="14" x="112" stroke-width="0" stroke="#5d5d5d" fill="#ffffff" style="text-anchor: middle">29%</text>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 894 B

After

Width:  |  Height:  |  Size: 894 B

View File

@ -289,8 +289,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="204" <div class="io-line">Defined in <a href="" data-line="206"
class="link-to-prism">src/app/_services/auth.service.ts:204</a></div> class="link-to-prism">src/app/_services/auth.service.ts:206</a></div>
</td> </td>
</tr> </tr>
@ -330,8 +330,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="193" <div class="io-line">Defined in <a href="" data-line="196"
class="link-to-prism">src/app/_services/auth.service.ts:193</a></div> class="link-to-prism">src/app/_services/auth.service.ts:196</a></div>
</td> </td>
</tr> </tr>
@ -369,8 +369,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="187" <div class="io-line">Defined in <a href="" data-line="190"
class="link-to-prism">src/app/_services/auth.service.ts:187</a></div> class="link-to-prism">src/app/_services/auth.service.ts:190</a></div>
</td> </td>
</tr> </tr>
@ -488,8 +488,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="99" <div class="io-line">Defined in <a href="" data-line="98"
class="link-to-prism">src/app/_services/auth.service.ts:99</a></div> class="link-to-prism">src/app/_services/auth.service.ts:98</a></div>
</td> </td>
</tr> </tr>
@ -529,8 +529,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="118" <div class="io-line">Defined in <a href="" data-line="116"
class="link-to-prism">src/app/_services/auth.service.ts:118</a></div> class="link-to-prism">src/app/_services/auth.service.ts:116</a></div>
</td> </td>
</tr> </tr>
@ -599,8 +599,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="147" <div class="io-line">Defined in <a href="" data-line="150"
class="link-to-prism">src/app/_services/auth.service.ts:147</a></div> class="link-to-prism">src/app/_services/auth.service.ts:150</a></div>
</td> </td>
</tr> </tr>
@ -638,8 +638,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="181" <div class="io-line">Defined in <a href="" data-line="184"
class="link-to-prism">src/app/_services/auth.service.ts:181</a></div> class="link-to-prism">src/app/_services/auth.service.ts:184</a></div>
</td> </td>
</tr> </tr>
@ -749,8 +749,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="157" <div class="io-line">Defined in <a href="" data-line="156"
class="link-to-prism">src/app/_services/auth.service.ts:157</a></div> class="link-to-prism">src/app/_services/auth.service.ts:156</a></div>
</td> </td>
</tr> </tr>
@ -957,18 +957,18 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {Injectable} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Injectable } from &#x27;@angular/core&#x27;;
import {hobaParseChallengeHeader} from &#x27;@src/assets/js/hoba.js&#x27;; import { hobaParseChallengeHeader } from &#x27;@src/assets/js/hoba.js&#x27;;
import {signChallenge} from &#x27;@src/assets/js/hoba-pgp.js&#x27;; import { signChallenge } from &#x27;@src/assets/js/hoba-pgp.js&#x27;;
import {environment} from &#x27;@src/environments/environment&#x27;; import { environment } from &#x27;@src/environments/environment&#x27;;
import {LoggingService} from &#x27;@app/_services/logging.service&#x27;; import { LoggingService } from &#x27;@app/_services/logging.service&#x27;;
import {MutableKeyStore, MutablePgpKeyStore} from &#x27;@app/_pgp&#x27;; import { MutableKeyStore, MutablePgpKeyStore } from &#x27;@app/_pgp&#x27;;
import {ErrorDialogService} from &#x27;@app/_services/error-dialog.service&#x27;; import { ErrorDialogService } from &#x27;@app/_services/error-dialog.service&#x27;;
import {HttpClient} from &#x27;@angular/common/http&#x27;; import { HttpClient } from &#x27;@angular/common/http&#x27;;
import {HttpError} from &#x27;@app/_helpers/global-error-handler&#x27;; import { HttpError } from &#x27;@app/_helpers/global-error-handler&#x27;;
@Injectable({ @Injectable({
providedIn: &#x27;root&#x27; providedIn: &#x27;root&#x27;,
}) })
export class AuthService { export class AuthService {
sessionToken: any; sessionToken: any;
@ -1027,8 +1027,8 @@ export class AuthService {
xhr.setRequestHeader(&#x27;x-cic-automerge&#x27;, &#x27;none&#x27;); xhr.setRequestHeader(&#x27;x-cic-automerge&#x27;, &#x27;none&#x27;);
xhr.addEventListener(&#x27;load&#x27;, (e) &#x3D;&gt; { xhr.addEventListener(&#x27;load&#x27;, (e) &#x3D;&gt; {
if (xhr.status !&#x3D;&#x3D; 200) { if (xhr.status !&#x3D;&#x3D; 200) {
const error &#x3D; new HttpError(xhr.statusText, xhr.status); const error &#x3D; new HttpError(xhr.statusText, xhr.status);
return reject(error); return reject(error);
} }
this.sessionToken &#x3D; xhr.getResponseHeader(&#x27;Token&#x27;); this.sessionToken &#x3D; xhr.getResponseHeader(&#x27;Token&#x27;);
sessionStorage.setItem(btoa(&#x27;CICADA_SESSION_TOKEN&#x27;), this.sessionToken); sessionStorage.setItem(btoa(&#x27;CICADA_SESSION_TOKEN&#x27;), this.sessionToken);
@ -1054,50 +1054,53 @@ export class AuthService {
xhr.send(); xhr.send();
} }
login(): boolean { login(): boolean {
if (this.sessionToken !&#x3D;&#x3D; undefined) { if (this.sessionToken !&#x3D;&#x3D; undefined) {
try { try {
this.getWithToken(); this.getWithToken();
return true; return true;
} catch (e) { } catch (e) {
this.loggingService.sendErrorLevelMessage(&#x27;Login token failed&#x27;, this, {error: e}); this.loggingService.sendErrorLevelMessage(&#x27;Login token failed&#x27;, this, { error: e });
} }
} else { } else {
try { try {
this.getChallenge(); this.getChallenge();
} catch (e) { } catch (e) {
this.loggingService.sendErrorLevelMessage(&#x27;Login challenge failed&#x27;, this, {error: e}); this.loggingService.sendErrorLevelMessage(&#x27;Login challenge failed&#x27;, this, { error: e });
} }
} }
return false; return false;
} }
async loginResponse(o: { challenge: string; realm: any }): Promise&lt;any&gt; {
async loginResponse(o: { challenge: string, realm: any }): Promise&lt;any&gt; {
return new Promise(async (resolve, reject) &#x3D;&gt; { return new Promise(async (resolve, reject) &#x3D;&gt; {
try { try {
const r &#x3D; await signChallenge(o.challenge, const r &#x3D; await signChallenge(
o.realm, o.challenge,
environment.cicMetaUrl, o.realm,
this.mutableKeyStore); environment.cicMetaUrl,
this.mutableKeyStore
);
const sessionTokenResult: boolean &#x3D; await this.sendResponse(r); const sessionTokenResult: boolean &#x3D; await this.sendResponse(r);
} catch (error) { } catch (error) {
if (error instanceof HttpError) { if (error instanceof HttpError) {
if (error.status &#x3D;&#x3D;&#x3D; 403) { if (error.status &#x3D;&#x3D;&#x3D; 403) {
this.errorDialogService.openDialog({ message: &#x27;You are not authorized to use this system&#x27; }); this.errorDialogService.openDialog({
message: &#x27;You are not authorized to use this system&#x27;,
});
} }
if (error.status &#x3D;&#x3D;&#x3D; 401) { if (error.status &#x3D;&#x3D;&#x3D; 401) {
this.errorDialogService.openDialog({ this.errorDialogService.openDialog({
message: &#x27;Unable to authenticate with the service. &#x27; + message:
&#x27;Unable to authenticate with the service. &#x27; +
&#x27;Please speak with the staff at Grassroots &#x27; + &#x27;Please speak with the staff at Grassroots &#x27; +
&#x27;Economics for requesting access &#x27; + &#x27;Economics for requesting access &#x27; +
&#x27;staff@grassrootseconomics.net.&#x27; &#x27;staff@grassrootseconomics.net.&#x27;,
}); });
} }
} }
// TODO define this error // TODO define this error
this.errorDialogService.openDialog({message: &#x27;Incorrect key passphrase.&#x27;}); this.errorDialogService.openDialog({ message: &#x27;Incorrect key passphrase.&#x27; });
resolve(false); resolve(false);
} }
}); });
@ -1109,10 +1112,6 @@ export class AuthService {
this.setState(&#x27;Click button to log in with PGP key &#x27; + this.mutableKeyStore.getPrivateKeyId()); this.setState(&#x27;Click button to log in with PGP key &#x27; + this.mutableKeyStore.getPrivateKeyId());
} }
/**
* @throws
* @param privateKeyArmored
*/
async setKey(privateKeyArmored): Promise&lt;boolean&gt; { async setKey(privateKeyArmored): Promise&lt;boolean&gt; {
try { try {
const isValidKeyCheck &#x3D; await this.mutableKeyStore.isValidKey(privateKeyArmored); const isValidKeyCheck &#x3D; await this.mutableKeyStore.isValidKey(privateKeyArmored);
@ -1127,7 +1126,11 @@ export class AuthService {
const key &#x3D; await this.mutableKeyStore.importPrivateKey(privateKeyArmored); const key &#x3D; await this.mutableKeyStore.importPrivateKey(privateKeyArmored);
localStorage.setItem(btoa(&#x27;CICADA_PRIVATE_KEY&#x27;), privateKeyArmored); localStorage.setItem(btoa(&#x27;CICADA_PRIVATE_KEY&#x27;), privateKeyArmored);
} catch (err) { } catch (err) {
this.loggingService.sendErrorLevelMessage(&#x60;Failed to set key: ${err.message || err.statusText}&#x60;, this, {error: err}); this.loggingService.sendErrorLevelMessage(
&#x60;Failed to set key: ${err.message || err.statusText}&#x60;,
this,
{ error: err }
);
this.errorDialogService.openDialog({ this.errorDialogService.openDialog({
message: &#x60;Failed to set key: ${err.message || err.statusText}&#x60;, message: &#x60;Failed to set key: ${err.message || err.statusText}&#x60;,
}); });
@ -1140,28 +1143,27 @@ export class AuthService {
logout(): void { logout(): void {
sessionStorage.removeItem(btoa(&#x27;CICADA_SESSION_TOKEN&#x27;)); sessionStorage.removeItem(btoa(&#x27;CICADA_SESSION_TOKEN&#x27;));
this.sessionToken &#x3D; undefined; this.sessionToken &#x3D; undefined;
window.location.reload(true); window.location.reload();
} }
getTrustedUsers(): any { getTrustedUsers(): any {
const trustedUsers: Array&lt;any&gt; &#x3D; []; const trustedUsers: Array&lt;any&gt; &#x3D; [];
this.mutableKeyStore.getPublicKeys().forEach(key &#x3D;&gt; trustedUsers.push(key.users[0].userId)); this.mutableKeyStore.getPublicKeys().forEach((key) &#x3D;&gt; trustedUsers.push(key.users[0].userId));
return trustedUsers; return trustedUsers;
} }
async getPublicKeys(): Promise&lt;any&gt; { async getPublicKeys(): Promise&lt;any&gt; {
return await fetch(environment.publicKeysUrl) return await fetch(environment.publicKeysUrl).then((res) &#x3D;&gt; {
.then(res &#x3D;&gt; { if (!res.ok) {
if (!res.ok) { // TODO does angular recommend an error interface?
// TODO does angular recommend an error interface? throw Error(&#x60;${res.statusText} - ${res.status}&#x60;);
throw Error(&#x60;${res.statusText} - ${res.status}&#x60;); }
} return res.text();
return res.text(); });
});
} }
getPrivateKey(): any { getPrivateKey(): any {
return this.mutableKeyStore.getPrivateKey(); return this.mutableKeyStore.getPrivateKey();
} }
} }
</code></pre> </code></pre>

View File

@ -327,8 +327,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="101" <div class="io-line">Defined in <a href="" data-line="118"
class="link-to-prism">src/app/_services/block-sync.service.ts:101</a></div> class="link-to-prism">src/app/_services/block-sync.service.ts:118</a></div>
</td> </td>
</tr> </tr>
@ -409,8 +409,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="76" <div class="io-line">Defined in <a href="" data-line="89"
class="link-to-prism">src/app/_services/block-sync.service.ts:76</a></div> class="link-to-prism">src/app/_services/block-sync.service.ts:89</a></div>
</td> </td>
</tr> </tr>
@ -479,8 +479,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="68" <div class="io-line">Defined in <a href="" data-line="81"
class="link-to-prism">src/app/_services/block-sync.service.ts:68</a></div> class="link-to-prism">src/app/_services/block-sync.service.ts:81</a></div>
</td> </td>
</tr> </tr>
@ -669,8 +669,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="84" <div class="io-line">Defined in <a href="" data-line="97"
class="link-to-prism">src/app/_services/block-sync.service.ts:84</a></div> class="link-to-prism">src/app/_services/block-sync.service.ts:97</a></div>
</td> </td>
</tr> </tr>
@ -853,17 +853,17 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {Injectable} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Injectable } from &#x27;@angular/core&#x27;;
import {Settings} from &#x27;@app/_models&#x27;; import { Settings } from &#x27;@app/_models&#x27;;
import {TransactionHelper} from &#x27;cic-client&#x27;; import { TransactionHelper } from &#x27;cic-client&#x27;;
import {first} from &#x27;rxjs/operators&#x27;; import { first } from &#x27;rxjs/operators&#x27;;
import {TransactionService} from &#x27;@app/_services/transaction.service&#x27;; import { TransactionService } from &#x27;@app/_services/transaction.service&#x27;;
import {environment} from &#x27;@src/environments/environment&#x27;; import { environment } from &#x27;@src/environments/environment&#x27;;
import {LoggingService} from &#x27;@app/_services/logging.service&#x27;; import { LoggingService } from &#x27;@app/_services/logging.service&#x27;;
import {RegistryService} from &#x27;@app/_services/registry.service&#x27;; import { RegistryService } from &#x27;@app/_services/registry.service&#x27;;
@Injectable({ @Injectable({
providedIn: &#x27;root&#x27; providedIn: &#x27;root&#x27;,
}) })
export class BlockSyncService { export class BlockSyncService {
readyStateTarget: number &#x3D; 2; readyStateTarget: number &#x3D; 2;
@ -872,8 +872,8 @@ export class BlockSyncService {
constructor( constructor(
private transactionService: TransactionService, private transactionService: TransactionService,
private loggingService: LoggingService, private loggingService: LoggingService,
private registryService: RegistryService, private registryService: RegistryService
) { } ) {}
blockSync(address: string &#x3D; null, offset: number &#x3D; 0, limit: number &#x3D; 100): void { blockSync(address: string &#x3D; null, offset: number &#x3D; 0, limit: number &#x3D; 100): void {
this.transactionService.resetTransactionsList(); this.transactionService.resetTransactionsList();
@ -898,7 +898,14 @@ export class BlockSyncService {
settings.registry.load(); settings.registry.load();
} }
readyStateProcessor(settings: Settings, bit: number, address: string, offset: number, limit: number): void { readyStateProcessor(
settings: Settings,
bit: number,
address: string,
offset: number,
limit: number
): void {
// tslint:disable-next-line:no-bitwise
this.readyState |&#x3D; bit; this.readyState |&#x3D; bit;
if (this.readyStateTarget &#x3D;&#x3D;&#x3D; this.readyState &amp;&amp; this.readyStateTarget) { if (this.readyStateTarget &#x3D;&#x3D;&#x3D; this.readyState &amp;&amp; this.readyStateTarget) {
const wHeadSync: Worker &#x3D; new Worker(&#x27;./../assets/js/block-sync/head.js&#x27;); const wHeadSync: Worker &#x3D; new Worker(&#x27;./../assets/js/block-sync/head.js&#x27;);
@ -909,13 +916,19 @@ export class BlockSyncService {
w3_provider: settings.w3.provider, w3_provider: settings.w3.provider,
}); });
if (address &#x3D;&#x3D;&#x3D; null) { if (address &#x3D;&#x3D;&#x3D; null) {
this.transactionService.getAllTransactions(offset, limit).pipe(first()).subscribe(res &#x3D;&gt; { this.transactionService
this.fetcher(settings, res); .getAllTransactions(offset, limit)
}); .pipe(first())
.subscribe((res) &#x3D;&gt; {
this.fetcher(settings, res);
});
} else { } else {
this.transactionService.getAddressTransactions(address, offset, limit).pipe(first()).subscribe(res &#x3D;&gt; { this.transactionService
this.fetcher(settings, res); .getAddressTransactions(address, offset, limit)
}); .pipe(first())
.subscribe((res) &#x3D;&gt; {
this.fetcher(settings, res);
});
} }
} }
} }
@ -936,7 +949,14 @@ export class BlockSyncService {
}); });
} }
async scan(settings: Settings, lo: number, hi: number, bloomBlockBytes: Uint8Array, bloomBlocktxBytes: Uint8Array, bloomRounds: any): Promise&lt;void&gt; { async scan(
settings: Settings,
lo: number,
hi: number,
bloomBlockBytes: Uint8Array,
bloomBlocktxBytes: Uint8Array,
bloomRounds: any
): Promise&lt;void&gt; {
const w: Worker &#x3D; new Worker(&#x27;./../assets/js/block-sync/ondemand.js&#x27;); const w: Worker &#x3D; new Worker(&#x27;./../assets/js/block-sync/ondemand.js&#x27;);
w.onmessage &#x3D; (m) &#x3D;&gt; { w.onmessage &#x3D; (m) &#x3D;&gt; {
settings.txHelper.processReceipt(m.data); settings.txHelper.processReceipt(m.data);
@ -945,10 +965,7 @@ export class BlockSyncService {
w3_provider: settings.w3.provider, w3_provider: settings.w3.provider,
lo, lo,
hi, hi,
filters: [ filters: [bloomBlockBytes, bloomBlocktxBytes],
bloomBlockBytes,
bloomBlocktxBytes,
],
filter_rounds: bloomRounds, filter_rounds: bloomRounds,
}); });
} }
@ -956,13 +973,20 @@ export class BlockSyncService {
fetcher(settings: Settings, transactionsInfo: any): void { fetcher(settings: Settings, transactionsInfo: any): void {
const blockFilterBinstr: string &#x3D; window.atob(transactionsInfo.block_filter); const blockFilterBinstr: string &#x3D; window.atob(transactionsInfo.block_filter);
const bOne: Uint8Array &#x3D; new Uint8Array(blockFilterBinstr.length); const bOne: Uint8Array &#x3D; new Uint8Array(blockFilterBinstr.length);
bOne.map((e, i, v) &#x3D;&gt; v[i] &#x3D; blockFilterBinstr.charCodeAt(i)); bOne.map((e, i, v) &#x3D;&gt; (v[i] &#x3D; blockFilterBinstr.charCodeAt(i)));
const blocktxFilterBinstr: string &#x3D; window.atob(transactionsInfo.blocktx_filter); const blocktxFilterBinstr: string &#x3D; window.atob(transactionsInfo.blocktx_filter);
const bTwo: Uint8Array &#x3D; new Uint8Array(blocktxFilterBinstr.length); const bTwo: Uint8Array &#x3D; new Uint8Array(blocktxFilterBinstr.length);
bTwo.map((e, i, v) &#x3D;&gt; v[i] &#x3D; blocktxFilterBinstr.charCodeAt(i)); bTwo.map((e, i, v) &#x3D;&gt; (v[i] &#x3D; blocktxFilterBinstr.charCodeAt(i)));
settings.scanFilter(settings, transactionsInfo.low, transactionsInfo.high, bOne, bTwo, transactionsInfo.filter_rounds); settings.scanFilter(
settings,
transactionsInfo.low,
transactionsInfo.high,
bOne,
bTwo,
transactionsInfo.filter_rounds
);
} }
} }
</code></pre> </code></pre>

View File

@ -185,8 +185,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="15" <div class="io-line">Defined in <a href="" data-line="13"
class="link-to-prism">src/app/_services/error-dialog.service.ts:15</a></div> class="link-to-prism">src/app/_services/error-dialog.service.ts:13</a></div>
</td> </td>
</tr> </tr>
@ -256,7 +256,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="12" class="link-to-prism">src/app/_services/error-dialog.service.ts:12</a></div> <div class="io-line">Defined in <a href="" data-line="11" class="link-to-prism">src/app/_services/error-dialog.service.ts:11</a></div>
</td> </td>
</tr> </tr>
@ -303,18 +303,16 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Injectable } from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Injectable } from &#x27;@angular/core&#x27;;
import {MatDialog, MatDialogRef} from &#x27;@angular/material/dialog&#x27;; import { MatDialog, MatDialogRef } from &#x27;@angular/material/dialog&#x27;;
import {ErrorDialogComponent} from &#x27;@app/shared/error-dialog/error-dialog.component&#x27;; import { ErrorDialogComponent } from &#x27;@app/shared/error-dialog/error-dialog.component&#x27;;
@Injectable({ @Injectable({
providedIn: &#x27;root&#x27; providedIn: &#x27;root&#x27;,
}) })
export class ErrorDialogService { export class ErrorDialogService {
public isDialogOpen: boolean &#x3D; false; public isDialogOpen: boolean &#x3D; false;
constructor( constructor(public dialog: MatDialog) {}
public dialog: MatDialog,
) { }
openDialog(data): any { openDialog(data): any {
if (this.isDialogOpen) { if (this.isDialogOpen) {
@ -323,10 +321,10 @@ export class ErrorDialogService {
this.isDialogOpen &#x3D; true; this.isDialogOpen &#x3D; true;
const dialogRef: MatDialogRef&lt;any&gt; &#x3D; this.dialog.open(ErrorDialogComponent, { const dialogRef: MatDialogRef&lt;any&gt; &#x3D; this.dialog.open(ErrorDialogComponent, {
width: &#x27;300px&#x27;, width: &#x27;300px&#x27;,
data data,
}); });
dialogRef.afterClosed().subscribe(() &#x3D;&gt; this.isDialogOpen &#x3D; false); dialogRef.afterClosed().subscribe(() &#x3D;&gt; (this.isDialogOpen &#x3D; false));
} }
} }
</code></pre> </code></pre>

View File

@ -141,7 +141,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="42" class="link-to-prism">src/app/_helpers/global-error-handler.ts:42</a></div> <div class="io-line">Defined in <a href="" data-line="41" class="link-to-prism">src/app/_helpers/global-error-handler.ts:41</a></div>
</td> </td>
</tr> </tr>
@ -233,8 +233,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="62" <div class="io-line">Defined in <a href="" data-line="58"
class="link-to-prism">src/app/_helpers/global-error-handler.ts:62</a></div> class="link-to-prism">src/app/_helpers/global-error-handler.ts:58</a></div>
</td> </td>
</tr> </tr>
@ -314,8 +314,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="89" <div class="io-line">Defined in <a href="" data-line="84"
class="link-to-prism">src/app/_helpers/global-error-handler.ts:89</a></div> class="link-to-prism">src/app/_helpers/global-error-handler.ts:84</a></div>
</td> </td>
</tr> </tr>
@ -394,8 +394,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="109" <div class="io-line">Defined in <a href="" data-line="104"
class="link-to-prism">src/app/_helpers/global-error-handler.ts:109</a></div> class="link-to-prism">src/app/_helpers/global-error-handler.ts:104</a></div>
</td> </td>
</tr> </tr>
@ -483,7 +483,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="42" class="link-to-prism">src/app/_helpers/global-error-handler.ts:42</a></div> <div class="io-line">Defined in <a href="" data-line="41" class="link-to-prism">src/app/_helpers/global-error-handler.ts:41</a></div>
</td> </td>
</tr> </tr>
@ -502,12 +502,12 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {HttpErrorResponse} from &#x27;@angular/common/http&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { HttpErrorResponse } from &#x27;@angular/common/http&#x27;;
import {ErrorHandler, Injectable} from &#x27;@angular/core&#x27;; import { ErrorHandler, Injectable } from &#x27;@angular/core&#x27;;
import {Router} from &#x27;@angular/router&#x27;; import { Router } from &#x27;@angular/router&#x27;;
// Application imports // Application imports
import {LoggingService} from &#x27;@app/_services/logging.service&#x27;; import { LoggingService } from &#x27;@app/_services/logging.service&#x27;;
/** /**
* A generalized http response error. * A generalized http response error.
@ -540,7 +540,6 @@ export class HttpError extends Error {
export class GlobalErrorHandler extends ErrorHandler { export class GlobalErrorHandler extends ErrorHandler {
/** /**
* An array of sentence sections that denote warnings. * An array of sentence sections that denote warnings.
* @private
*/ */
private sentencesForWarningLogging: Array&lt;string&gt; &#x3D; []; private sentencesForWarningLogging: Array&lt;string&gt; &#x3D; [];
@ -550,10 +549,7 @@ export class GlobalErrorHandler extends ErrorHandler {
* @param loggingService - A service that provides logging capabilities. * @param loggingService - A service that provides logging capabilities.
* @param router - A service that provides navigation among views and URL manipulation capabilities. * @param router - A service that provides navigation among views and URL manipulation capabilities.
*/ */
constructor( constructor(private loggingService: LoggingService, private router: Router) {
private loggingService: LoggingService,
private router: Router
) {
super(); super();
} }
@ -574,9 +570,9 @@ export class GlobalErrorHandler extends ErrorHandler {
const isWarning: boolean &#x3D; this.isWarning(errorTraceString); const isWarning: boolean &#x3D; this.isWarning(errorTraceString);
if (isWarning) { if (isWarning) {
this.loggingService.sendWarnLevelMessage(errorTraceString, {error}); this.loggingService.sendWarnLevelMessage(errorTraceString, { error });
} else { } else {
this.loggingService.sendErrorLevelMessage(errorTraceString, this, {error}); this.loggingService.sendErrorLevelMessage(errorTraceString, this, { error });
} }
throw error; throw error;
@ -587,7 +583,6 @@ export class GlobalErrorHandler extends ErrorHandler {
* *
* @param errorTraceString - A description of the error and it&#x27;s stack trace. * @param errorTraceString - A description of the error and it&#x27;s stack trace.
* @returns true - If the error is of type warning. * @returns true - If the error is of type warning.
* @private
*/ */
private isWarning(errorTraceString: string): boolean { private isWarning(errorTraceString: string): boolean {
let isWarning: boolean &#x3D; true; let isWarning: boolean &#x3D; true;
@ -613,14 +608,30 @@ export class GlobalErrorHandler extends ErrorHandler {
const route: string &#x3D; this.router.url; const route: string &#x3D; this.router.url;
if (error instanceof HttpErrorResponse) { if (error instanceof HttpErrorResponse) {
this.loggingService.sendErrorLevelMessage( this.loggingService.sendErrorLevelMessage(
&#x60;There was an HTTP error on route ${route}.\n${error.message}.\nStatus code: ${(error as HttpErrorResponse).status}&#x60;, &#x60;There was an HTTP error on route ${route}.\n${error.message}.\nStatus code: ${
this, {error}); (error as HttpErrorResponse).status
}&#x60;,
this,
{ error }
);
} else if (error instanceof TypeError) { } else if (error instanceof TypeError) {
this.loggingService.sendErrorLevelMessage(&#x60;There was a Type error on route ${route}.\n${error.message}&#x60;, this, {error}); this.loggingService.sendErrorLevelMessage(
&#x60;There was a Type error on route ${route}.\n${error.message}&#x60;,
this,
{ error }
);
} else if (error instanceof Error) { } else if (error instanceof Error) {
this.loggingService.sendErrorLevelMessage(&#x60;There was a general error on route ${route}.\n${error.message}&#x60;, this, {error}); this.loggingService.sendErrorLevelMessage(
&#x60;There was a general error on route ${route}.\n${error.message}&#x60;,
this,
{ error }
);
} else { } else {
this.loggingService.sendErrorLevelMessage(&#x60;Nobody threw an error but something happened on route ${route}!&#x60;, this, {error}); this.loggingService.sendErrorLevelMessage(
&#x60;Nobody threw an error but something happened on route ${route}!&#x60;,
this,
{ error }
);
} }
} }
} }

View File

@ -175,8 +175,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="20" <div class="io-line">Defined in <a href="" data-line="17"
class="link-to-prism">src/app/_services/location.service.ts:20</a></div> class="link-to-prism">src/app/_services/location.service.ts:17</a></div>
</td> </td>
</tr> </tr>
@ -245,8 +245,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="16" <div class="io-line">Defined in <a href="" data-line="13"
class="link-to-prism">src/app/_services/location.service.ts:16</a></div> class="link-to-prism">src/app/_services/location.service.ts:13</a></div>
</td> </td>
</tr> </tr>
@ -284,8 +284,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="28" <div class="io-line">Defined in <a href="" data-line="25"
class="link-to-prism">src/app/_services/location.service.ts:28</a></div> class="link-to-prism">src/app/_services/location.service.ts:25</a></div>
</td> </td>
</tr> </tr>
@ -354,8 +354,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="24" <div class="io-line">Defined in <a href="" data-line="21"
class="link-to-prism">src/app/_services/location.service.ts:24</a></div> class="link-to-prism">src/app/_services/location.service.ts:21</a></div>
</td> </td>
</tr> </tr>
@ -378,19 +378,16 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Injectable } from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Injectable } from &#x27;@angular/core&#x27;;
import {Observable} from &#x27;rxjs&#x27;; import { Observable } from &#x27;rxjs&#x27;;
import {environment} from &#x27;@src/environments/environment&#x27;; import { environment } from &#x27;@src/environments/environment&#x27;;
import {first} from &#x27;rxjs/operators&#x27;; import { first } from &#x27;rxjs/operators&#x27;;
import {HttpClient} from &#x27;@angular/common/http&#x27;; import { HttpClient } from &#x27;@angular/common/http&#x27;;
@Injectable({ @Injectable({
providedIn: &#x27;root&#x27; providedIn: &#x27;root&#x27;,
}) })
export class LocationService { export class LocationService {
constructor(private httpClient: HttpClient) {}
constructor(
private httpClient: HttpClient,
) { }
getAreaNames(): Observable&lt;any&gt; { getAreaNames(): Observable&lt;any&gt; {
return this.httpClient.get(&#x60;${environment.cicMetaUrl}/areanames&#x60;); return this.httpClient.get(&#x60;${environment.cicMetaUrl}/areanames&#x60;);
@ -405,7 +402,9 @@ export class LocationService {
} }
getAreaTypeByArea(area: string): Observable&lt;any&gt; { getAreaTypeByArea(area: string): Observable&lt;any&gt; {
return this.httpClient.get(&#x60;${environment.cicMetaUrl}/areatypes/${area.toLowerCase()}&#x60;).pipe(first()); return this.httpClient
.get(&#x60;${environment.cicMetaUrl}/areatypes/${area.toLowerCase()}&#x60;)
.pipe(first());
} }
} }
</code></pre> </code></pre>

View File

@ -867,11 +867,11 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {Injectable, isDevMode} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Injectable, isDevMode } from &#x27;@angular/core&#x27;;
import {NGXLogger} from &#x27;ngx-logger&#x27;; import { NGXLogger } from &#x27;ngx-logger&#x27;;
@Injectable({ @Injectable({
providedIn: &#x27;root&#x27; providedIn: &#x27;root&#x27;,
}) })
export class LoggingService { export class LoggingService {
env: string; env: string;

View File

@ -124,7 +124,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="14" class="link-to-prism">src/app/_services/registry.service.ts:14</a></div> <div class="io-line">Defined in <a href="" data-line="19" class="link-to-prism">src/app/_services/registry.service.ts:19</a></div>
</td> </td>
</tr> </tr>
@ -159,8 +159,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="21" <div class="io-line">Defined in <a href="" data-line="26"
class="link-to-prism">src/app/_services/registry.service.ts:21</a></div> class="link-to-prism">src/app/_services/registry.service.ts:26</a></div>
</td> </td>
</tr> </tr>
@ -198,8 +198,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="25" <div class="io-line">Defined in <a href="" data-line="30"
class="link-to-prism">src/app/_services/registry.service.ts:25</a></div> class="link-to-prism">src/app/_services/registry.service.ts:30</a></div>
</td> </td>
</tr> </tr>
@ -273,8 +273,13 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<i>Default value : </i><code>new CICRegistry(this.web3, environment.registryAddress, &#x27;CICRegistry&#x27;, this.fileGetter, <i>Default value : </i><code>new CICRegistry(
[&#x27;../../assets/js/block-sync/data&#x27;])</code> this.web3,
environment.registryAddress,
&#x27;CICRegistry&#x27;,
this.fileGetter,
[&#x27;../../assets/js/block-sync/data&#x27;]
)</code>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -326,18 +331,23 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Injectable } from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Injectable } from &#x27;@angular/core&#x27;;
import Web3 from &#x27;web3&#x27;; import Web3 from &#x27;web3&#x27;;
import {environment} from &#x27;@src/environments/environment&#x27;; import { environment } from &#x27;@src/environments/environment&#x27;;
import {CICRegistry, FileGetter} from &#x27;cic-client&#x27;; import { CICRegistry, FileGetter } from &#x27;cic-client&#x27;;
import {HttpGetter} from &#x27;@app/_helpers&#x27;; import { HttpGetter } from &#x27;@app/_helpers&#x27;;
@Injectable({ @Injectable({
providedIn: &#x27;root&#x27; providedIn: &#x27;root&#x27;,
}) })
export class RegistryService { export class RegistryService {
web3: Web3 &#x3D; new Web3(environment.web3Provider); web3: Web3 &#x3D; new Web3(environment.web3Provider);
fileGetter: FileGetter &#x3D; new HttpGetter(); fileGetter: FileGetter &#x3D; new HttpGetter();
registry: CICRegistry &#x3D; new CICRegistry(this.web3, environment.registryAddress, &#x27;CICRegistry&#x27;, this.fileGetter, registry: CICRegistry &#x3D; new CICRegistry(
[&#x27;../../assets/js/block-sync/data&#x27;]); this.web3,
environment.registryAddress,
&#x27;CICRegistry&#x27;,
this.fileGetter,
[&#x27;../../assets/js/block-sync/data&#x27;]
);
constructor() { constructor() {
this.registry.declaratorHelper.addTrust(environment.trustedDeclaratorAddress); this.registry.declaratorHelper.addTrust(environment.trustedDeclaratorAddress);

View File

@ -208,8 +208,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="38" <div class="io-line">Defined in <a href="" data-line="37"
class="link-to-prism">src/app/_services/token.service.ts:38</a></div> class="link-to-prism">src/app/_services/token.service.ts:37</a></div>
</td> </td>
</tr> </tr>
@ -278,8 +278,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="34" <div class="io-line">Defined in <a href="" data-line="33"
class="link-to-prism">src/app/_services/token.service.ts:34</a></div> class="link-to-prism">src/app/_services/token.service.ts:33</a></div>
</td> </td>
</tr> </tr>
@ -350,8 +350,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="29" <div class="io-line">Defined in <a href="" data-line="28"
class="link-to-prism">src/app/_services/token.service.ts:29</a></div> class="link-to-prism">src/app/_services/token.service.ts:28</a></div>
</td> </td>
</tr> </tr>
@ -466,36 +466,35 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { EventEmitter, Injectable } from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { EventEmitter, Injectable } from &#x27;@angular/core&#x27;;
import {environment} from &#x27;@src/environments/environment&#x27;; import { environment } from &#x27;@src/environments/environment&#x27;;
import {BehaviorSubject, Observable} from &#x27;rxjs&#x27;; import { BehaviorSubject, Observable } from &#x27;rxjs&#x27;;
import {CICRegistry} from &#x27;cic-client&#x27;; import { CICRegistry } from &#x27;cic-client&#x27;;
import {TokenRegistry} from &#x27;@app/_eth&#x27;; import { TokenRegistry } from &#x27;@app/_eth&#x27;;
import {HttpClient} from &#x27;@angular/common/http&#x27;; import { HttpClient } from &#x27;@angular/common/http&#x27;;
import {RegistryService} from &#x27;@app/_services/registry.service&#x27;; import { RegistryService } from &#x27;@app/_services/registry.service&#x27;;
@Injectable({ @Injectable({
providedIn: &#x27;root&#x27; providedIn: &#x27;root&#x27;,
}) })
export class TokenService { export class TokenService {
registry: CICRegistry; registry: CICRegistry;
tokenRegistry: TokenRegistry; tokenRegistry: TokenRegistry;
LoadEvent: EventEmitter&lt;number&gt; &#x3D; new EventEmitter&lt;number&gt;(); LoadEvent: EventEmitter&lt;number&gt; &#x3D; new EventEmitter&lt;number&gt;();
constructor( constructor(private httpClient: HttpClient, private registryService: RegistryService) {
private httpClient: HttpClient,
private registryService: RegistryService,
) {
this.registry &#x3D; registryService.getRegistry(); this.registry &#x3D; registryService.getRegistry();
this.registry.load(); this.registry.load();
this.registry.onload &#x3D; async (address: string): Promise&lt;void&gt; &#x3D;&gt; { this.registry.onload &#x3D; async (address: string): Promise&lt;void&gt; &#x3D;&gt; {
this.tokenRegistry &#x3D; new TokenRegistry(await this.registry.getContractAddressByName(&#x27;TokenRegistry&#x27;)); this.tokenRegistry &#x3D; new TokenRegistry(
await this.registry.getContractAddressByName(&#x27;TokenRegistry&#x27;)
);
this.LoadEvent.next(Date.now()); this.LoadEvent.next(Date.now());
}; };
} }
async getTokens(): Promise&lt;Array&lt;Promise&lt;string&gt;&gt;&gt; { async getTokens(): Promise&lt;Array&lt;Promise&lt;string&gt;&gt;&gt; {
const count: number &#x3D; await this.tokenRegistry.totalTokens(); const count: number &#x3D; await this.tokenRegistry.totalTokens();
return Array.from({length: count}, async (v, i) &#x3D;&gt; await this.tokenRegistry.entry(i)); return Array.from({ length: count }, async (v, i) &#x3D;&gt; await this.tokenRegistry.entry(i));
} }
getTokenBySymbol(symbol: string): Observable&lt;any&gt; { getTokenBySymbol(symbol: string): Observable&lt;any&gt; {

View File

@ -268,8 +268,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="89" <div class="io-line">Defined in <a href="" data-line="111"
class="link-to-prism">src/app/_services/transaction.service.ts:89</a></div> class="link-to-prism">src/app/_services/transaction.service.ts:111</a></div>
</td> </td>
</tr> </tr>
@ -349,8 +349,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="102" <div class="io-line">Defined in <a href="" data-line="124"
class="link-to-prism">src/app/_services/transaction.service.ts:102</a></div> class="link-to-prism">src/app/_services/transaction.service.ts:124</a></div>
</td> </td>
</tr> </tr>
@ -595,8 +595,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="97" <div class="io-line">Defined in <a href="" data-line="119"
class="link-to-prism">src/app/_services/transaction.service.ts:97</a></div> class="link-to-prism">src/app/_services/transaction.service.ts:119</a></div>
</td> </td>
</tr> </tr>
@ -636,8 +636,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="73" <div class="io-line">Defined in <a href="" data-line="87"
class="link-to-prism">src/app/_services/transaction.service.ts:73</a></div> class="link-to-prism">src/app/_services/transaction.service.ts:87</a></div>
</td> </td>
</tr> </tr>
@ -796,8 +796,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="108" <div class="io-line">Defined in <a href="" data-line="130"
class="link-to-prism">src/app/_services/transaction.service.ts:108</a></div> class="link-to-prism">src/app/_services/transaction.service.ts:130</a></div>
</td> </td>
</tr> </tr>
@ -1059,28 +1059,28 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Injectable } from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Injectable } from &#x27;@angular/core&#x27;;
import {first} from &#x27;rxjs/operators&#x27;; import { first } from &#x27;rxjs/operators&#x27;;
import {BehaviorSubject, Observable} from &#x27;rxjs&#x27;; import { BehaviorSubject, Observable } from &#x27;rxjs&#x27;;
import {environment} from &#x27;@src/environments/environment&#x27;; import { environment } from &#x27;@src/environments/environment&#x27;;
import {Envelope, User} from &#x27;cic-client-meta&#x27;; import { Envelope, User } from &#x27;cic-client-meta&#x27;;
import {UserService} from &#x27;@app/_services/user.service&#x27;; import { UserService } from &#x27;@app/_services/user.service&#x27;;
import { Keccak } from &#x27;sha3&#x27;; import { Keccak } from &#x27;sha3&#x27;;
import { utils } from &#x27;ethers&#x27;; import { utils } from &#x27;ethers&#x27;;
import {add0x, fromHex, strip0x, toHex} from &#x27;@src/assets/js/ethtx/dist/hex&#x27;; import { add0x, fromHex, strip0x, toHex } from &#x27;@src/assets/js/ethtx/dist/hex&#x27;;
import {Tx} from &#x27;@src/assets/js/ethtx/dist&#x27;; import { Tx } from &#x27;@src/assets/js/ethtx/dist&#x27;;
import {toValue} from &#x27;@src/assets/js/ethtx/dist/tx&#x27;; import { toValue } from &#x27;@src/assets/js/ethtx/dist/tx&#x27;;
import * as secp256k1 from &#x27;secp256k1&#x27;; import * as secp256k1 from &#x27;secp256k1&#x27;;
import {AuthService} from &#x27;@app/_services/auth.service&#x27;; import { AuthService } from &#x27;@app/_services/auth.service&#x27;;
import {defaultAccount} from &#x27;@app/_models&#x27;; import { defaultAccount } from &#x27;@app/_models&#x27;;
import {LoggingService} from &#x27;@app/_services/logging.service&#x27;; import { LoggingService } from &#x27;@app/_services/logging.service&#x27;;
import {HttpClient} from &#x27;@angular/common/http&#x27;; import { HttpClient } from &#x27;@angular/common/http&#x27;;
import {CICRegistry} from &#x27;cic-client&#x27;; import { CICRegistry } from &#x27;cic-client&#x27;;
import {RegistryService} from &#x27;@app/_services/registry.service&#x27;; import { RegistryService } from &#x27;@app/_services/registry.service&#x27;;
import Web3 from &#x27;web3&#x27;; import Web3 from &#x27;web3&#x27;;
const vCard &#x3D; require(&#x27;vcard-parser&#x27;); const vCard &#x3D; require(&#x27;vcard-parser&#x27;);
@Injectable({ @Injectable({
providedIn: &#x27;root&#x27; providedIn: &#x27;root&#x27;,
}) })
export class TransactionService { export class TransactionService {
transactions: any[] &#x3D; []; transactions: any[] &#x3D; [];
@ -1095,7 +1095,7 @@ export class TransactionService {
private authService: AuthService, private authService: AuthService,
private userService: UserService, private userService: UserService,
private loggingService: LoggingService, private loggingService: LoggingService,
private registryService: RegistryService, private registryService: RegistryService
) { ) {
this.web3 &#x3D; this.registryService.getWeb3(); this.web3 &#x3D; this.registryService.getWeb3();
this.registry &#x3D; registryService.getRegistry(); this.registry &#x3D; registryService.getRegistry();
@ -1111,36 +1111,58 @@ export class TransactionService {
} }
async setTransaction(transaction, cacheSize: number): Promise&lt;void&gt; { async setTransaction(transaction, cacheSize: number): Promise&lt;void&gt; {
if (this.transactions.find(cachedTx &#x3D;&gt; cachedTx.tx.txHash &#x3D;&#x3D;&#x3D; transaction.tx.txHash)) { return; } if (this.transactions.find((cachedTx) &#x3D;&gt; cachedTx.tx.txHash &#x3D;&#x3D;&#x3D; transaction.tx.txHash)) {
return;
}
transaction.value &#x3D; Number(transaction.value); transaction.value &#x3D; Number(transaction.value);
transaction.type &#x3D; &#x27;transaction&#x27;; transaction.type &#x3D; &#x27;transaction&#x27;;
try { try {
this.userService.getAccountDetailsFromMeta(await User.toKey(transaction.from)).pipe(first()).subscribe((res) &#x3D;&gt; { this.userService
transaction.sender &#x3D; this.getAccountInfo(res.body); .getAccountDetailsFromMeta(await User.toKey(transaction.from))
}, error &#x3D;&gt; { .pipe(first())
transaction.sender &#x3D; defaultAccount; .subscribe(
}); (res) &#x3D;&gt; {
this.userService.getAccountDetailsFromMeta(await User.toKey(transaction.to)).pipe(first()).subscribe((res) &#x3D;&gt; { transaction.sender &#x3D; this.getAccountInfo(res.body);
transaction.recipient &#x3D; this.getAccountInfo(res.body); },
}, error &#x3D;&gt; { (error) &#x3D;&gt; {
transaction.recipient &#x3D; defaultAccount; transaction.sender &#x3D; defaultAccount;
}); }
);
this.userService
.getAccountDetailsFromMeta(await User.toKey(transaction.to))
.pipe(first())
.subscribe(
(res) &#x3D;&gt; {
transaction.recipient &#x3D; this.getAccountInfo(res.body);
},
(error) &#x3D;&gt; {
transaction.recipient &#x3D; defaultAccount;
}
);
} finally { } finally {
this.addTransaction(transaction, cacheSize); this.addTransaction(transaction, cacheSize);
} }
} }
async setConversion(conversion, cacheSize): Promise&lt;void&gt; { async setConversion(conversion, cacheSize): Promise&lt;void&gt; {
if (this.transactions.find(cachedTx &#x3D;&gt; cachedTx.tx.txHash &#x3D;&#x3D;&#x3D; conversion.tx.txHash)) { return; } if (this.transactions.find((cachedTx) &#x3D;&gt; cachedTx.tx.txHash &#x3D;&#x3D;&#x3D; conversion.tx.txHash)) {
return;
}
conversion.type &#x3D; &#x27;conversion&#x27;; conversion.type &#x3D; &#x27;conversion&#x27;;
conversion.fromValue &#x3D; Number(conversion.fromValue); conversion.fromValue &#x3D; Number(conversion.fromValue);
conversion.toValue &#x3D; Number(conversion.toValue); conversion.toValue &#x3D; Number(conversion.toValue);
try { try {
this.userService.getAccountDetailsFromMeta(await User.toKey(conversion.trader)).pipe(first()).subscribe((res) &#x3D;&gt; { this.userService
conversion.sender &#x3D; conversion.recipient &#x3D; this.getAccountInfo(res.body); .getAccountDetailsFromMeta(await User.toKey(conversion.trader))
}, error &#x3D;&gt; { .pipe(first())
conversion.sender &#x3D; conversion.recipient &#x3D; defaultAccount; .subscribe(
}); (res) &#x3D;&gt; {
conversion.sender &#x3D; conversion.recipient &#x3D; this.getAccountInfo(res.body);
},
(error) &#x3D;&gt; {
conversion.sender &#x3D; conversion.recipient &#x3D; defaultAccount;
}
);
} finally { } finally {
this.addTransaction(conversion, cacheSize); this.addTransaction(conversion, cacheSize);
} }
@ -1160,19 +1182,29 @@ export class TransactionService {
} }
getAccountInfo(account: string): any { getAccountInfo(account: string): any {
let accountInfo &#x3D; Envelope.fromJSON(JSON.stringify(account)).unwrap().m.data; const accountInfo &#x3D; Envelope.fromJSON(JSON.stringify(account)).unwrap().m.data;
accountInfo.vcard &#x3D; vCard.parse(atob(accountInfo.vcard)); accountInfo.vcard &#x3D; vCard.parse(atob(accountInfo.vcard));
return accountInfo; return accountInfo;
} }
async transferRequest(tokenAddress: string, senderAddress: string, recipientAddress: string, value: number): Promise&lt;any&gt; { async transferRequest(
const transferAuthAddress &#x3D; await this.registry.getContractAddressByName(&#x27;TransferAuthorization&#x27;); tokenAddress: string,
senderAddress: string,
recipientAddress: string,
value: number
): Promise&lt;any&gt; {
const transferAuthAddress &#x3D; await this.registry.getContractAddressByName(
&#x27;TransferAuthorization&#x27;
);
const hashFunction &#x3D; new Keccak(256); const hashFunction &#x3D; new Keccak(256);
hashFunction.update(&#x27;createRequest(address,address,address,uint256)&#x27;); hashFunction.update(&#x27;createRequest(address,address,address,uint256)&#x27;);
const hash &#x3D; hashFunction.digest(); const hash &#x3D; hashFunction.digest();
const methodSignature &#x3D; hash.toString(&#x27;hex&#x27;).substring(0, 8); const methodSignature &#x3D; hash.toString(&#x27;hex&#x27;).substring(0, 8);
const abiCoder &#x3D; new utils.AbiCoder(); const abiCoder &#x3D; new utils.AbiCoder();
const abi &#x3D; await abiCoder.encode([&#x27;address&#x27;, &#x27;address&#x27;, &#x27;address&#x27;, &#x27;uint256&#x27;], [senderAddress, recipientAddress, tokenAddress, value]); const abi &#x3D; await abiCoder.encode(
[&#x27;address&#x27;, &#x27;address&#x27;, &#x27;address&#x27;, &#x27;uint256&#x27;],
[senderAddress, recipientAddress, tokenAddress, value]
);
const data &#x3D; fromHex(methodSignature + strip0x(abi)); const data &#x3D; fromHex(methodSignature + strip0x(abi));
const tx &#x3D; new Tx(environment.bloxbergChainId); const tx &#x3D; new Tx(environment.bloxbergChainId);
tx.nonce &#x3D; await this.web3.eth.getTransactionCount(senderAddress); tx.nonce &#x3D; await this.web3.eth.getTransactionCount(senderAddress);
@ -1182,7 +1214,7 @@ export class TransactionService {
tx.value &#x3D; toValue(value); tx.value &#x3D; toValue(value);
tx.data &#x3D; data; tx.data &#x3D; data;
const txMsg &#x3D; tx.message(); const txMsg &#x3D; tx.message();
const privateKey &#x3D; this.authService.mutableKeyStore.getPrivateKey(); const privateKey &#x3D; this.authService.mutableKeyStore.getPrivateKey();
if (!privateKey.isDecrypted()) { if (!privateKey.isDecrypted()) {
const password &#x3D; window.prompt(&#x27;password&#x27;); const password &#x3D; window.prompt(&#x27;password&#x27;);
await privateKey.decrypt(password); await privateKey.decrypt(password);

View File

@ -209,7 +209,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="34" class="link-to-prism">src/app/_services/user.service.ts:34</a></div> <div class="io-line">Defined in <a href="" data-line="36" class="link-to-prism">src/app/_services/user.service.ts:36</a></div>
</td> </td>
</tr> </tr>
@ -322,8 +322,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="123" <div class="io-line">Defined in <a href="" data-line="154"
class="link-to-prism">src/app/_services/user.service.ts:123</a></div> class="link-to-prism">src/app/_services/user.service.ts:154</a></div>
</td> </td>
</tr> </tr>
@ -394,8 +394,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="65" <div class="io-line">Defined in <a href="" data-line="67"
class="link-to-prism">src/app/_services/user.service.ts:65</a></div> class="link-to-prism">src/app/_services/user.service.ts:67</a></div>
</td> </td>
</tr> </tr>
@ -586,8 +586,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="160" <div class="io-line">Defined in <a href="" data-line="195"
class="link-to-prism">src/app/_services/user.service.ts:160</a></div> class="link-to-prism">src/app/_services/user.service.ts:195</a></div>
</td> </td>
</tr> </tr>
@ -676,8 +676,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="179" <div class="io-line">Defined in <a href="" data-line="221"
class="link-to-prism">src/app/_services/user.service.ts:179</a></div> class="link-to-prism">src/app/_services/user.service.ts:221</a></div>
</td> </td>
</tr> </tr>
@ -764,8 +764,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="131" <div class="io-line">Defined in <a href="" data-line="162"
class="link-to-prism">src/app/_services/user.service.ts:131</a></div> class="link-to-prism">src/app/_services/user.service.ts:162</a></div>
</td> </td>
</tr> </tr>
@ -834,8 +834,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="56" <div class="io-line">Defined in <a href="" data-line="58"
class="link-to-prism">src/app/_services/user.service.ts:56</a></div> class="link-to-prism">src/app/_services/user.service.ts:58</a></div>
</td> </td>
</tr> </tr>
@ -904,8 +904,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="207" <div class="io-line">Defined in <a href="" data-line="256"
class="link-to-prism">src/app/_services/user.service.ts:207</a></div> class="link-to-prism">src/app/_services/user.service.ts:256</a></div>
</td> </td>
</tr> </tr>
@ -943,8 +943,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="119" <div class="io-line">Defined in <a href="" data-line="150"
class="link-to-prism">src/app/_services/user.service.ts:119</a></div> class="link-to-prism">src/app/_services/user.service.ts:150</a></div>
</td> </td>
</tr> </tr>
@ -1013,8 +1013,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="115" <div class="io-line">Defined in <a href="" data-line="143"
class="link-to-prism">src/app/_services/user.service.ts:115</a></div> class="link-to-prism">src/app/_services/user.service.ts:143</a></div>
</td> </td>
</tr> </tr>
@ -1052,8 +1052,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="199" <div class="io-line">Defined in <a href="" data-line="248"
class="link-to-prism">src/app/_services/user.service.ts:199</a></div> class="link-to-prism">src/app/_services/user.service.ts:248</a></div>
</td> </td>
</tr> </tr>
@ -1091,8 +1091,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="203" <div class="io-line">Defined in <a href="" data-line="252"
class="link-to-prism">src/app/_services/user.service.ts:203</a></div> class="link-to-prism">src/app/_services/user.service.ts:252</a></div>
</td> </td>
</tr> </tr>
@ -1161,8 +1161,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="215" <div class="io-line">Defined in <a href="" data-line="264"
class="link-to-prism">src/app/_services/user.service.ts:215</a></div> class="link-to-prism">src/app/_services/user.service.ts:264</a></div>
</td> </td>
</tr> </tr>
@ -1200,8 +1200,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="61" <div class="io-line">Defined in <a href="" data-line="63"
class="link-to-prism">src/app/_services/user.service.ts:61</a></div> class="link-to-prism">src/app/_services/user.service.ts:63</a></div>
</td> </td>
</tr> </tr>
@ -1282,8 +1282,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="211" <div class="io-line">Defined in <a href="" data-line="260"
class="link-to-prism">src/app/_services/user.service.ts:211</a></div> class="link-to-prism">src/app/_services/user.service.ts:260</a></div>
</td> </td>
</tr> </tr>
@ -1323,8 +1323,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="149" <div class="io-line">Defined in <a href="" data-line="180"
class="link-to-prism">src/app/_services/user.service.ts:149</a></div> class="link-to-prism">src/app/_services/user.service.ts:180</a></div>
</td> </td>
</tr> </tr>
@ -1412,8 +1412,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="192" <div class="io-line">Defined in <a href="" data-line="239"
class="link-to-prism">src/app/_services/user.service.ts:192</a></div> class="link-to-prism">src/app/_services/user.service.ts:239</a></div>
</td> </td>
</tr> </tr>
@ -1451,8 +1451,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="51" <div class="io-line">Defined in <a href="" data-line="53"
class="link-to-prism">src/app/_services/user.service.ts:51</a></div> class="link-to-prism">src/app/_services/user.service.ts:53</a></div>
</td> </td>
</tr> </tr>
@ -1521,8 +1521,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="127" <div class="io-line">Defined in <a href="" data-line="158"
class="link-to-prism">src/app/_services/user.service.ts:127</a></div> class="link-to-prism">src/app/_services/user.service.ts:158</a></div>
</td> </td>
</tr> </tr>
@ -1591,8 +1591,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="197" <div class="io-line">Defined in <a href="" data-line="244"
class="link-to-prism">src/app/_services/user.service.ts:197</a></div> class="link-to-prism">src/app/_services/user.service.ts:244</a></div>
</td> </td>
</tr> </tr>
@ -1663,8 +1663,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="107" <div class="io-line">Defined in <a href="" data-line="128"
class="link-to-prism">src/app/_services/user.service.ts:107</a></div> class="link-to-prism">src/app/_services/user.service.ts:128</a></div>
</td> </td>
</tr> </tr>
@ -1757,8 +1757,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="135" <div class="io-line">Defined in <a href="" data-line="166"
class="link-to-prism">src/app/_services/user.service.ts:135</a></div> class="link-to-prism">src/app/_services/user.service.ts:166</a></div>
</td> </td>
</tr> </tr>
@ -1876,7 +1876,9 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<i>Default value : </i><code>new BehaviorSubject&lt;Array&lt;AccountDetails&gt;&gt;(this.accounts)</code> <i>Default value : </i><code>new BehaviorSubject&lt;
Array&lt;AccountDetails&gt;
&gt;(this.accounts)</code>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -1913,7 +1915,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="30" class="link-to-prism">src/app/_services/user.service.ts:30</a></div> <div class="io-line">Defined in <a href="" data-line="32" class="link-to-prism">src/app/_services/user.service.ts:32</a></div>
</td> </td>
</tr> </tr>
@ -1945,7 +1947,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="32" class="link-to-prism">src/app/_services/user.service.ts:32</a></div> <div class="io-line">Defined in <a href="" data-line="34" class="link-to-prism">src/app/_services/user.service.ts:34</a></div>
</td> </td>
</tr> </tr>
@ -1978,7 +1980,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="33" class="link-to-prism">src/app/_services/user.service.ts:33</a></div> <div class="io-line">Defined in <a href="" data-line="35" class="link-to-prism">src/app/_services/user.service.ts:35</a></div>
</td> </td>
</tr> </tr>
@ -2010,7 +2012,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="34" class="link-to-prism">src/app/_services/user.service.ts:34</a></div> <div class="io-line">Defined in <a href="" data-line="36" class="link-to-prism">src/app/_services/user.service.ts:36</a></div>
</td> </td>
</tr> </tr>
@ -2037,7 +2039,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<i>Default value : </i><code>new HttpHeaders({&#x27;x-cic-automerge&#x27;: &#x27;client&#x27;})</code> <i>Default value : </i><code>new HttpHeaders({ &#x27;x-cic-automerge&#x27;: &#x27;client&#x27; })</code>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -2136,35 +2138,37 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {Injectable} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Injectable } from &#x27;@angular/core&#x27;;
import {BehaviorSubject, Observable, Subject} from &#x27;rxjs&#x27;; import { BehaviorSubject, Observable, Subject } from &#x27;rxjs&#x27;;
import {HttpClient, HttpHeaders, HttpParams} from &#x27;@angular/common/http&#x27;; import { HttpClient, HttpHeaders, HttpParams } from &#x27;@angular/common/http&#x27;;
import {environment} from &#x27;@src/environments/environment&#x27;; import { environment } from &#x27;@src/environments/environment&#x27;;
import {first} from &#x27;rxjs/operators&#x27;; import { first } from &#x27;rxjs/operators&#x27;;
import {ArgPair, Envelope, Phone, Syncable, User} from &#x27;cic-client-meta&#x27;; import { ArgPair, Envelope, Phone, Syncable, User } from &#x27;cic-client-meta&#x27;;
import {AccountDetails} from &#x27;@app/_models&#x27;; import { AccountDetails } from &#x27;@app/_models&#x27;;
import {LoggingService} from &#x27;@app/_services/logging.service&#x27;; import { LoggingService } from &#x27;@app/_services/logging.service&#x27;;
import {TokenService} from &#x27;@app/_services/token.service&#x27;; import { TokenService } from &#x27;@app/_services/token.service&#x27;;
import {AccountIndex} from &#x27;@app/_eth&#x27;; import { AccountIndex } from &#x27;@app/_eth&#x27;;
import {MutableKeyStore, PGPSigner, Signer} from &#x27;@app/_pgp&#x27;; import { MutableKeyStore, PGPSigner, Signer } from &#x27;@app/_pgp&#x27;;
import {RegistryService} from &#x27;@app/_services/registry.service&#x27;; import { RegistryService } from &#x27;@app/_services/registry.service&#x27;;
import {CICRegistry} from &#x27;cic-client&#x27;; import { CICRegistry } from &#x27;cic-client&#x27;;
import {AuthService} from &#x27;@app/_services/auth.service&#x27;; import { AuthService } from &#x27;@app/_services/auth.service&#x27;;
import {personValidation, vcardValidation} from &#x27;@app/_helpers&#x27;; import { personValidation, vcardValidation } from &#x27;@app/_helpers&#x27;;
import {add0x} from &#x27;@src/assets/js/ethtx/dist/hex&#x27;; import { add0x } from &#x27;@src/assets/js/ethtx/dist/hex&#x27;;
const vCard &#x3D; require(&#x27;vcard-parser&#x27;); const vCard &#x3D; require(&#x27;vcard-parser&#x27;);
@Injectable({ @Injectable({
providedIn: &#x27;root&#x27; providedIn: &#x27;root&#x27;,
}) })
export class UserService { export class UserService {
headers: HttpHeaders &#x3D; new HttpHeaders({&#x27;x-cic-automerge&#x27;: &#x27;client&#x27;}); headers: HttpHeaders &#x3D; new HttpHeaders({ &#x27;x-cic-automerge&#x27;: &#x27;client&#x27; });
keystore: MutableKeyStore; keystore: MutableKeyStore;
signer: Signer; signer: Signer;
registry: CICRegistry; registry: CICRegistry;
accounts: Array&lt;AccountDetails&gt; &#x3D; []; accounts: Array&lt;AccountDetails&gt; &#x3D; [];
private accountsList: BehaviorSubject&lt;Array&lt;AccountDetails&gt;&gt; &#x3D; new BehaviorSubject&lt;Array&lt;AccountDetails&gt;&gt;(this.accounts); private accountsList: BehaviorSubject&lt;Array&lt;AccountDetails&gt;&gt; &#x3D; new BehaviorSubject&lt;
Array&lt;AccountDetails&gt;
&gt;(this.accounts);
accountsSubject: Observable&lt;Array&lt;AccountDetails&gt;&gt; &#x3D; this.accountsList.asObservable(); accountsSubject: Observable&lt;Array&lt;AccountDetails&gt;&gt; &#x3D; this.accountsList.asObservable();
actions: Array&lt;any&gt; &#x3D; []; actions: Array&lt;any&gt; &#x3D; [];
@ -2176,7 +2180,7 @@ export class UserService {
private loggingService: LoggingService, private loggingService: LoggingService,
private tokenService: TokenService, private tokenService: TokenService,
private registryService: RegistryService, private registryService: RegistryService,
private authService: AuthService, private authService: AuthService
) { ) {
this.authService.init().then(() &#x3D;&gt; { this.authService.init().then(() &#x3D;&gt; {
this.keystore &#x3D; authService.mutableKeyStore; this.keystore &#x3D; authService.mutableKeyStore;
@ -2188,28 +2192,38 @@ export class UserService {
resetPin(phone: string): Observable&lt;any&gt; { resetPin(phone: string): Observable&lt;any&gt; {
const params: HttpParams &#x3D; new HttpParams().set(&#x27;phoneNumber&#x27;, phone); const params: HttpParams &#x3D; new HttpParams().set(&#x27;phoneNumber&#x27;, phone);
return this.httpClient.get(&#x60;${environment.cicUssdUrl}/pin&#x60;, {params}); return this.httpClient.get(&#x60;${environment.cicUssdUrl}/pin&#x60;, { params });
} }
getAccountStatus(phone: string): Observable&lt;any&gt; { getAccountStatus(phone: string): Observable&lt;any&gt; {
const params: HttpParams &#x3D; new HttpParams().set(&#x27;phoneNumber&#x27;, phone); const params: HttpParams &#x3D; new HttpParams().set(&#x27;phoneNumber&#x27;, phone);
return this.httpClient.get(&#x60;${environment.cicUssdUrl}/pin&#x60;, {params}); return this.httpClient.get(&#x60;${environment.cicUssdUrl}/pin&#x60;, { params });
} }
getLockedAccounts(offset: number, limit: number): Observable&lt;any&gt; { getLockedAccounts(offset: number, limit: number): Observable&lt;any&gt; {
return this.httpClient.get(&#x60;${environment.cicUssdUrl}/accounts/locked/${offset}/${limit}&#x60;); return this.httpClient.get(&#x60;${environment.cicUssdUrl}/accounts/locked/${offset}/${limit}&#x60;);
} }
async changeAccountInfo(address: string, name: string, phoneNumber: string, age: string, type: string, bio: string, gender: string, async changeAccountInfo(
businessCategory: string, userLocation: string, location: string, locationType: string address: string,
name: string,
phoneNumber: string,
age: string,
type: string,
bio: string,
gender: string,
businessCategory: string,
userLocation: string,
location: string,
locationType: string
): Promise&lt;any&gt; { ): Promise&lt;any&gt; {
const accountInfo: any &#x3D; { const accountInfo: any &#x3D; {
vcard: { vcard: {
fn: [{}], fn: [{}],
n: [{}], n: [{}],
tel: [{}] tel: [{}],
}, },
location: {} location: {},
}; };
accountInfo.vcard.fn[0].value &#x3D; name; accountInfo.vcard.fn[0].value &#x3D; name;
accountInfo.vcard.n[0].value &#x3D; name.split(&#x27; &#x27;); accountInfo.vcard.n[0].value &#x3D; name.split(&#x27; &#x27;);
@ -2225,33 +2239,52 @@ export class UserService {
await vcardValidation(accountInfo.vcard); await vcardValidation(accountInfo.vcard);
accountInfo.vcard &#x3D; btoa(vCard.generate(accountInfo.vcard)); accountInfo.vcard &#x3D; btoa(vCard.generate(accountInfo.vcard));
const accountKey: string &#x3D; await User.toKey(address); const accountKey: string &#x3D; await User.toKey(address);
this.getAccountDetailsFromMeta(accountKey).pipe(first()).subscribe(async res &#x3D;&gt; { this.getAccountDetailsFromMeta(accountKey)
const syncableAccount: Syncable &#x3D; Envelope.fromJSON(JSON.stringify(res)).unwrap(); .pipe(first())
const update: Array&lt;ArgPair&gt; &#x3D; []; .subscribe(
for (const prop in accountInfo) { async (res) &#x3D;&gt; {
update.push(new ArgPair(prop, accountInfo[prop])); const syncableAccount: Syncable &#x3D; Envelope.fromJSON(JSON.stringify(res)).unwrap();
} const update: Array&lt;ArgPair&gt; &#x3D; [];
syncableAccount.update(update, &#x27;client-branch&#x27;); for (const prop of Object.keys(accountInfo)) {
await personValidation(syncableAccount.m.data); update.push(new ArgPair(prop, accountInfo[prop]));
await this.updateMeta(syncableAccount, accountKey, this.headers); }
}, async error &#x3D;&gt; { syncableAccount.update(update, &#x27;client-branch&#x27;);
this.loggingService.sendErrorLevelMessage(&#x27;Can\&#x27;t find account info in meta service&#x27;, this, {error}); await personValidation(syncableAccount.m.data);
const syncableAccount: Syncable &#x3D; new Syncable(accountKey, accountInfo); await this.updateMeta(syncableAccount, accountKey, this.headers);
await this.updateMeta(syncableAccount, accountKey, this.headers); },
}); async (error) &#x3D;&gt; {
this.loggingService.sendErrorLevelMessage(
&#x27;Cannot find account info in meta service&#x27;,
this,
{ error }
);
const syncableAccount: Syncable &#x3D; new Syncable(accountKey, accountInfo);
await this.updateMeta(syncableAccount, accountKey, this.headers);
}
);
return accountKey; return accountKey;
} }
async updateMeta(syncableAccount: Syncable, accountKey: string, headers: HttpHeaders): Promise&lt;any&gt; { async updateMeta(
const envelope: Envelope &#x3D; await this.wrap(syncableAccount , this.signer); syncableAccount: Syncable,
accountKey: string,
headers: HttpHeaders
): Promise&lt;any&gt; {
const envelope: Envelope &#x3D; await this.wrap(syncableAccount, this.signer);
const reqBody: string &#x3D; envelope.toJSON(); const reqBody: string &#x3D; envelope.toJSON();
this.httpClient.put(&#x60;${environment.cicMetaUrl}/${accountKey}&#x60;, reqBody , { headers }).pipe(first()).subscribe(res &#x3D;&gt; { this.httpClient
this.loggingService.sendInfoLevelMessage(&#x60;Response: ${res}&#x60;); .put(&#x60;${environment.cicMetaUrl}/${accountKey}&#x60;, reqBody, { headers })
}); .pipe(first())
.subscribe((res) &#x3D;&gt; {
this.loggingService.sendInfoLevelMessage(&#x60;Response: ${res}&#x60;);
});
} }
getActions(): void { getActions(): void {
this.httpClient.get(&#x60;${environment.cicCacheUrl}/actions&#x60;).pipe(first()).subscribe(res &#x3D;&gt; this.actionsList.next(res)); this.httpClient
.get(&#x60;${environment.cicCacheUrl}/actions&#x60;)
.pipe(first())
.subscribe((res) &#x3D;&gt; this.actionsList.next(res));
} }
getActionById(id: string): Observable&lt;any&gt; { getActionById(id: string): Observable&lt;any&gt; {
@ -2286,44 +2319,60 @@ export class UserService {
async loadAccounts(limit: number &#x3D; 100, offset: number &#x3D; 0): Promise&lt;void&gt; { async loadAccounts(limit: number &#x3D; 100, offset: number &#x3D; 0): Promise&lt;void&gt; {
this.resetAccountsList(); this.resetAccountsList();
const accountIndexAddress: string &#x3D; await this.registry.getContractAddressByName(&#x27;AccountRegistry&#x27;); const accountIndexAddress: string &#x3D; await this.registry.getContractAddressByName(
&#x27;AccountRegistry&#x27;
);
const accountIndexQuery &#x3D; new AccountIndex(accountIndexAddress); const accountIndexQuery &#x3D; new AccountIndex(accountIndexAddress);
const accountAddresses: Array&lt;string&gt; &#x3D; await accountIndexQuery.last(await accountIndexQuery.totalAccounts()); const accountAddresses: Array&lt;string&gt; &#x3D; await accountIndexQuery.last(
await accountIndexQuery.totalAccounts()
);
this.loggingService.sendInfoLevelMessage(accountAddresses); this.loggingService.sendInfoLevelMessage(accountAddresses);
for (const accountAddress of accountAddresses.slice(offset, offset + limit)) { for (const accountAddress of accountAddresses.slice(offset, offset + limit)) {
await this.getAccountByAddress(accountAddress, limit); await this.getAccountByAddress(accountAddress, limit);
} }
} }
async getAccountByAddress(accountAddress: string, limit: number &#x3D; 100): Promise&lt;Observable&lt;AccountDetails&gt;&gt; { async getAccountByAddress(
let accountSubject: Subject&lt;any&gt; &#x3D; new Subject&lt;any&gt;(); accountAddress: string,
this.getAccountDetailsFromMeta(await User.toKey(add0x(accountAddress))).pipe(first()).subscribe(async res &#x3D;&gt; { limit: number &#x3D; 100
const account: Syncable &#x3D; Envelope.fromJSON(JSON.stringify(res)).unwrap(); ): Promise&lt;Observable&lt;AccountDetails&gt;&gt; {
const accountInfo &#x3D; account.m.data; const accountSubject: Subject&lt;any&gt; &#x3D; new Subject&lt;any&gt;();
await personValidation(accountInfo); this.getAccountDetailsFromMeta(await User.toKey(add0x(accountAddress)))
accountInfo.balance &#x3D; await this.tokenService.getTokenBalance(accountInfo.identities.evm[&#x60;bloxberg:${environment.bloxbergChainId}&#x60;][0]); .pipe(first())
accountInfo.vcard &#x3D; vCard.parse(atob(accountInfo.vcard)); .subscribe(async (res) &#x3D;&gt; {
await vcardValidation(accountInfo.vcard); const account: Syncable &#x3D; Envelope.fromJSON(JSON.stringify(res)).unwrap();
this.accounts.unshift(accountInfo); const accountInfo &#x3D; account.m.data;
if (this.accounts.length &gt; limit) { await personValidation(accountInfo);
this.accounts.length &#x3D; limit; accountInfo.balance &#x3D; await this.tokenService.getTokenBalance(
} accountInfo.identities.evm[&#x60;bloxberg:${environment.bloxbergChainId}&#x60;][0]
this.accountsList.next(this.accounts); );
accountSubject.next(accountInfo); accountInfo.vcard &#x3D; vCard.parse(atob(accountInfo.vcard));
}); await vcardValidation(accountInfo.vcard);
this.accounts.unshift(accountInfo);
if (this.accounts.length &gt; limit) {
this.accounts.length &#x3D; limit;
}
this.accountsList.next(this.accounts);
accountSubject.next(accountInfo);
});
return accountSubject.asObservable(); return accountSubject.asObservable();
} }
async getAccountByPhone(phoneNumber: string, limit: number &#x3D; 100): Promise&lt;Observable&lt;AccountDetails&gt;&gt; { async getAccountByPhone(
let accountSubject: Subject&lt;any&gt; &#x3D; new Subject&lt;any&gt;(); phoneNumber: string,
this.getAccountDetailsFromMeta(await Phone.toKey(phoneNumber)).pipe(first()).subscribe(async res &#x3D;&gt; { limit: number &#x3D; 100
const response: Syncable &#x3D; Envelope.fromJSON(JSON.stringify(res)).unwrap(); ): Promise&lt;Observable&lt;AccountDetails&gt;&gt; {
const address: string &#x3D; response.m.data; const accountSubject: Subject&lt;any&gt; &#x3D; new Subject&lt;any&gt;();
const account: Observable&lt;AccountDetails&gt; &#x3D; await this.getAccountByAddress(address, limit); this.getAccountDetailsFromMeta(await Phone.toKey(phoneNumber))
account.subscribe(result &#x3D;&gt; { .pipe(first())
accountSubject.next(result); .subscribe(async (res) &#x3D;&gt; {
const response: Syncable &#x3D; Envelope.fromJSON(JSON.stringify(res)).unwrap();
const address: string &#x3D; response.m.data;
const account: Observable&lt;AccountDetails&gt; &#x3D; await this.getAccountByAddress(address, limit);
account.subscribe((result) &#x3D;&gt; {
accountSubject.next(result);
});
}); });
});
return accountSubject.asObservable(); return accountSubject.asObservable();
} }
@ -2332,7 +2381,9 @@ export class UserService {
this.accountsList.next(this.accounts); this.accountsList.next(this.accounts);
} }
searchAccountByName(name: string): any { return; } searchAccountByName(name: string): any {
return;
}
getCategories(): Observable&lt;any&gt; { getCategories(): Observable&lt;any&gt; {
return this.httpClient.get(&#x60;${environment.cicMetaUrl}/categories&#x60;); return this.httpClient.get(&#x60;${environment.cicMetaUrl}/categories&#x60;);

View File

@ -101,7 +101,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="14" class="link-to-prism">src/app/_interceptors/error.interceptor.ts:14</a></div> <div class="io-line">Defined in <a href="" data-line="15" class="link-to-prism">src/app/_interceptors/error.interceptor.ts:15</a></div>
</td> </td>
</tr> </tr>
@ -256,21 +256,21 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {Injectable} from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Injectable } from &#x27;@angular/core&#x27;;
import { import {
HttpRequest, HttpRequest,
HttpHandler, HttpHandler,
HttpEvent, HttpEvent,
HttpInterceptor, HttpErrorResponse HttpInterceptor,
HttpErrorResponse,
} from &#x27;@angular/common/http&#x27;; } from &#x27;@angular/common/http&#x27;;
import {Observable, throwError} from &#x27;rxjs&#x27;; import { Observable, throwError } from &#x27;rxjs&#x27;;
import {catchError} from &#x27;rxjs/operators&#x27;; import { catchError } from &#x27;rxjs/operators&#x27;;
import {ErrorDialogService, LoggingService} from &#x27;@app/_services&#x27;; import { ErrorDialogService, LoggingService } from &#x27;@app/_services&#x27;;
import {Router} from &#x27;@angular/router&#x27;; import { Router } from &#x27;@angular/router&#x27;;
@Injectable() @Injectable()
export class ErrorInterceptor implements HttpInterceptor { export class ErrorInterceptor implements HttpInterceptor {
constructor( constructor(
private errorDialogService: ErrorDialogService, private errorDialogService: ErrorDialogService,
private loggingService: LoggingService, private loggingService: LoggingService,
@ -287,11 +287,13 @@ export class ErrorInterceptor implements HttpInterceptor {
} else { } else {
// The backend returned an unsuccessful response code. // The backend returned an unsuccessful response code.
// The response body may contain clues as to what went wrong. // The response body may contain clues as to what went wrong.
errorMessage &#x3D; &#x60;Backend returned code ${err.status}, body was: ${JSON.stringify(err.error)}&#x60;; errorMessage &#x3D; &#x60;Backend returned code ${err.status}, body was: ${JSON.stringify(
err.error
)}&#x60;;
} }
this.loggingService.sendErrorLevelMessage(errorMessage, this, {error: err}); this.loggingService.sendErrorLevelMessage(errorMessage, this, { error: err });
switch (err.status) { switch (err.status) {
case 401: // unauthorized case 401: // unauthorized
this.router.navigateByUrl(&#x27;/auth&#x27;).then(); this.router.navigateByUrl(&#x27;/auth&#x27;).then();
break; break;
case 403: // forbidden case 403: // forbidden

View File

@ -101,7 +101,7 @@
</tr> </tr>
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="11" class="link-to-prism">src/app/_interceptors/http-config.interceptor.ts:11</a></div> <div class="io-line">Defined in <a href="" data-line="6" class="link-to-prism">src/app/_interceptors/http-config.interceptor.ts:6</a></div>
</td> </td>
</tr> </tr>
@ -136,8 +136,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="15" <div class="io-line">Defined in <a href="" data-line="9"
class="link-to-prism">src/app/_interceptors/http-config.interceptor.ts:15</a></div> class="link-to-prism">src/app/_interceptors/http-config.interceptor.ts:9</a></div>
</td> </td>
</tr> </tr>
@ -203,17 +203,11 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Injectable } from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Injectable } from &#x27;@angular/core&#x27;;
import { import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from &#x27;@angular/common/http&#x27;;
HttpRequest,
HttpHandler,
HttpEvent,
HttpInterceptor
} from &#x27;@angular/common/http&#x27;;
import { Observable } from &#x27;rxjs&#x27;; import { Observable } from &#x27;rxjs&#x27;;
@Injectable() @Injectable()
export class HttpConfigInterceptor implements HttpInterceptor { export class HttpConfigInterceptor implements HttpInterceptor {
constructor() {} constructor() {}
intercept(request: HttpRequest&lt;unknown&gt;, next: HttpHandler): Observable&lt;HttpEvent&lt;unknown&gt;&gt; { intercept(request: HttpRequest&lt;unknown&gt;, next: HttpHandler): Observable&lt;HttpEvent&lt;unknown&gt;&gt; {

View File

@ -166,8 +166,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="20" <div class="io-line">Defined in <a href="" data-line="17"
class="link-to-prism">src/app/_interceptors/logging.interceptor.ts:20</a></div> class="link-to-prism">src/app/_interceptors/logging.interceptor.ts:17</a></div>
</td> </td>
</tr> </tr>
@ -238,18 +238,15 @@ import {
HttpHandler, HttpHandler,
HttpEvent, HttpEvent,
HttpInterceptor, HttpInterceptor,
HttpResponse HttpResponse,
} from &#x27;@angular/common/http&#x27;; } from &#x27;@angular/common/http&#x27;;
import {Observable} from &#x27;rxjs&#x27;; import { Observable } from &#x27;rxjs&#x27;;
import {LoggingService} from &#x27;@app/_services/logging.service&#x27;; import { LoggingService } from &#x27;@app/_services/logging.service&#x27;;
import {finalize, tap} from &#x27;rxjs/operators&#x27;; import { finalize, tap } from &#x27;rxjs/operators&#x27;;
@Injectable() @Injectable()
export class LoggingInterceptor implements HttpInterceptor { export class LoggingInterceptor implements HttpInterceptor {
constructor(private loggingService: LoggingService) {}
constructor(
private loggingService: LoggingService
) {}
intercept(request: HttpRequest&lt;unknown&gt;, next: HttpHandler): Observable&lt;HttpEvent&lt;unknown&gt;&gt; { intercept(request: HttpRequest&lt;unknown&gt;, next: HttpHandler): Observable&lt;HttpEvent&lt;unknown&gt;&gt; {
return next.handle(request); return next.handle(request);

File diff suppressed because it is too large Load Diff

View File

@ -460,24 +460,34 @@
products: string[]; products: string[];
category?: string; category?: string;
vcard: { vcard: {
email: [{ email: [
value: string; {
}]; value: string;
fn: [{ }
value: string; ];
}]; fn: [
n: [{ {
value: string[]; value: string;
}]; }
tel: [{ ];
meta: { n: [
TYP: string[]; {
}, value: string[];
value: string; }
}], ];
version: [{ tel: [
value: string; {
}]; meta: {
TYP: string[];
};
value: string;
}
];
version: [
{
value: string;
}
];
}; };
} }
@ -515,34 +525,38 @@ const defaultAccount: AccountDetails &#x3D; {
}, },
products: [], products: [],
vcard: { vcard: {
email: [{ email: [
value: &#x27;&#x27;, {
}], value: &#x27;&#x27;,
fn: [{
value: &#x27;Sarafu Contract&#x27;,
}],
n: [{
value: [&#x27;Sarafu&#x27;, &#x27;Contract&#x27;],
}],
tel: [{
meta: {
TYP: [],
}, },
value: &#x27;&#x27;, ],
}], fn: [
version: [{ {
value: &#x27;3.0&#x27;, value: &#x27;Sarafu Contract&#x27;,
}], },
],
n: [
{
value: [&#x27;Sarafu&#x27;, &#x27;Contract&#x27;],
},
],
tel: [
{
meta: {
TYP: [],
},
value: &#x27;&#x27;,
},
],
version: [
{
value: &#x27;3.0&#x27;,
},
],
}, },
}; };
export { export { AccountDetails, Signature, Meta, MetaResponse, defaultAccount };
AccountDetails,
Signature,
Meta,
MetaResponse,
defaultAccount
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -277,12 +277,7 @@ interface AreaType {
area: Array&lt;string&gt;; area: Array&lt;string&gt;;
} }
export { export { Action, Category, AreaName, AreaType };
Action,
Category,
AreaName,
AreaType
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -181,12 +181,7 @@ interface AreaType {
area: Array&lt;string&gt;; area: Array&lt;string&gt;;
} }
export { export { Action, Category, AreaName, AreaType };
Action,
Category,
AreaName,
AreaType
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -181,12 +181,7 @@ interface AreaType {
area: Array&lt;string&gt;; area: Array&lt;string&gt;;
} }
export { export { Action, Category, AreaName, AreaType };
Action,
Category,
AreaName,
AreaType
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -181,12 +181,7 @@ interface AreaType {
area: Array&lt;string&gt;; area: Array&lt;string&gt;;
} }
export { export { Action, Category, AreaName, AreaType };
Action,
Category,
AreaName,
AreaType
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -212,24 +212,34 @@
products: string[]; products: string[];
category?: string; category?: string;
vcard: { vcard: {
email: [{ email: [
value: string; {
}]; value: string;
fn: [{ }
value: string; ];
}]; fn: [
n: [{ {
value: string[]; value: string;
}]; }
tel: [{ ];
meta: { n: [
TYP: string[]; {
}, value: string[];
value: string; }
}], ];
version: [{ tel: [
value: string; {
}]; meta: {
TYP: string[];
};
value: string;
}
];
version: [
{
value: string;
}
];
}; };
} }
@ -267,34 +277,38 @@ const defaultAccount: AccountDetails &#x3D; {
}, },
products: [], products: [],
vcard: { vcard: {
email: [{ email: [
value: &#x27;&#x27;, {
}], value: &#x27;&#x27;,
fn: [{
value: &#x27;Sarafu Contract&#x27;,
}],
n: [{
value: [&#x27;Sarafu&#x27;, &#x27;Contract&#x27;],
}],
tel: [{
meta: {
TYP: [],
}, },
value: &#x27;&#x27;, ],
}], fn: [
version: [{ {
value: &#x27;3.0&#x27;, value: &#x27;Sarafu Contract&#x27;,
}], },
],
n: [
{
value: [&#x27;Sarafu&#x27;, &#x27;Contract&#x27;],
},
],
tel: [
{
meta: {
TYP: [],
},
value: &#x27;&#x27;,
},
],
version: [
{
value: &#x27;3.0&#x27;,
},
],
}, },
}; };
export { export { AccountDetails, Signature, Meta, MetaResponse, defaultAccount };
AccountDetails,
Signature,
Meta,
MetaResponse,
defaultAccount
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -180,24 +180,34 @@
products: string[]; products: string[];
category?: string; category?: string;
vcard: { vcard: {
email: [{ email: [
value: string; {
}]; value: string;
fn: [{ }
value: string; ];
}]; fn: [
n: [{ {
value: string[]; value: string;
}]; }
tel: [{ ];
meta: { n: [
TYP: string[]; {
}, value: string[];
value: string; }
}], ];
version: [{ tel: [
value: string; {
}]; meta: {
TYP: string[];
};
value: string;
}
];
version: [
{
value: string;
}
];
}; };
} }
@ -235,34 +245,38 @@ const defaultAccount: AccountDetails &#x3D; {
}, },
products: [], products: [],
vcard: { vcard: {
email: [{ email: [
value: &#x27;&#x27;, {
}], value: &#x27;&#x27;,
fn: [{
value: &#x27;Sarafu Contract&#x27;,
}],
n: [{
value: [&#x27;Sarafu&#x27;, &#x27;Contract&#x27;],
}],
tel: [{
meta: {
TYP: [],
}, },
value: &#x27;&#x27;, ],
}], fn: [
version: [{ {
value: &#x27;3.0&#x27;, value: &#x27;Sarafu Contract&#x27;,
}], },
],
n: [
{
value: [&#x27;Sarafu&#x27;, &#x27;Contract&#x27;],
},
],
tel: [
{
meta: {
TYP: [],
},
value: &#x27;&#x27;,
},
],
version: [
{
value: &#x27;3.0&#x27;,
},
],
}, },
}; };
export { export { AccountDetails, Signature, Meta, MetaResponse, defaultAccount };
AccountDetails,
Signature,
Meta,
MetaResponse,
defaultAccount
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -193,8 +193,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="33" <div class="io-line">Defined in <a href="" data-line="30"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:33</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:30</a></div>
</td> </td>
</tr> </tr>
@ -232,8 +232,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="17" <div class="io-line">Defined in <a href="" data-line="14"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:17</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:14</a></div>
</td> </td>
</tr> </tr>
@ -271,8 +271,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="22" <div class="io-line">Defined in <a href="" data-line="19"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:22</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:19</a></div>
</td> </td>
</tr> </tr>
@ -310,8 +310,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="23" <div class="io-line">Defined in <a href="" data-line="20"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:23</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:20</a></div>
</td> </td>
</tr> </tr>
@ -380,8 +380,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="25" <div class="io-line">Defined in <a href="" data-line="22"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:25</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:22</a></div>
</td> </td>
</tr> </tr>
@ -450,8 +450,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="19" <div class="io-line">Defined in <a href="" data-line="16"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:19</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:16</a></div>
</td> </td>
</tr> </tr>
@ -489,8 +489,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="27" <div class="io-line">Defined in <a href="" data-line="24"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:27</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:24</a></div>
</td> </td>
</tr> </tr>
@ -559,8 +559,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="24" <div class="io-line">Defined in <a href="" data-line="21"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:24</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:21</a></div>
</td> </td>
</tr> </tr>
@ -598,8 +598,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="18" <div class="io-line">Defined in <a href="" data-line="15"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:18</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:15</a></div>
</td> </td>
</tr> </tr>
@ -637,8 +637,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="26" <div class="io-line">Defined in <a href="" data-line="23"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:26</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:23</a></div>
</td> </td>
</tr> </tr>
@ -707,8 +707,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="28" <div class="io-line">Defined in <a href="" data-line="25"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:28</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:25</a></div>
</td> </td>
</tr> </tr>
@ -777,8 +777,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="14" <div class="io-line">Defined in <a href="" data-line="11"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:14</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:11</a></div>
</td> </td>
</tr> </tr>
@ -816,8 +816,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="29" <div class="io-line">Defined in <a href="" data-line="26"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:29</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:26</a></div>
</td> </td>
</tr> </tr>
@ -886,8 +886,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="16" <div class="io-line">Defined in <a href="" data-line="13"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:16</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:13</a></div>
</td> </td>
</tr> </tr>
@ -925,8 +925,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="15" <div class="io-line">Defined in <a href="" data-line="12"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:15</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:12</a></div>
</td> </td>
</tr> </tr>
@ -964,8 +964,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="11" <div class="io-line">Defined in <a href="" data-line="8"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:11</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:8</a></div>
</td> </td>
</tr> </tr>
@ -1046,8 +1046,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="13" <div class="io-line">Defined in <a href="" data-line="10"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:13</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:10</a></div>
</td> </td>
</tr> </tr>
@ -1116,8 +1116,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="12" <div class="io-line">Defined in <a href="" data-line="9"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:12</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:9</a></div>
</td> </td>
</tr> </tr>
@ -1186,8 +1186,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="21" <div class="io-line">Defined in <a href="" data-line="18"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:21</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:18</a></div>
</td> </td>
</tr> </tr>
@ -1256,8 +1256,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="20" <div class="io-line">Defined in <a href="" data-line="17"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:20</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:17</a></div>
</td> </td>
</tr> </tr>
@ -1326,8 +1326,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="10" <div class="io-line">Defined in <a href="" data-line="7"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:10</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:7</a></div>
</td> </td>
</tr> </tr>
@ -1365,8 +1365,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="30" <div class="io-line">Defined in <a href="" data-line="27"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:30</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:27</a></div>
</td> </td>
</tr> </tr>
@ -1435,8 +1435,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="32" <div class="io-line">Defined in <a href="" data-line="29"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:32</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:29</a></div>
</td> </td>
</tr> </tr>
@ -1505,8 +1505,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="31" <div class="io-line">Defined in <a href="" data-line="28"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:31</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:28</a></div>
</td> </td>
</tr> </tr>
@ -1575,8 +1575,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="34" <div class="io-line">Defined in <a href="" data-line="31"
class="link-to-prism">src/app/_pgp/pgp-key-store.ts:34</a></div> class="link-to-prism">src/app/_pgp/pgp-key-store.ts:31</a></div>
</td> </td>
</tr> </tr>
@ -1634,9 +1634,6 @@
import * as openpgp from &#x27;openpgp&#x27;; import * as openpgp from &#x27;openpgp&#x27;;
const keyring &#x3D; new openpgp.Keyring(); const keyring &#x3D; new openpgp.Keyring();
/**
* @extends
*/
interface MutableKeyStore extends KeyStore { interface MutableKeyStore extends KeyStore {
loadKeyring(): void; loadKeyring(): void;
importKeyPair(publicKey: any, privateKey: any): Promise&lt;void&gt;; importKeyPair(publicKey: any, privateKey: any): Promise&lt;void&gt;;
@ -1665,11 +1662,7 @@ interface MutableKeyStore extends KeyStore {
sign(plainText: string): Promise&lt;any&gt;; sign(plainText: string): Promise&lt;any&gt;;
} }
/** class MutablePgpKeyStore implements MutableKeyStore {
* @implements
*/
class MutablePgpKeyStore implements MutableKeyStore{
async loadKeyring(): Promise&lt;void&gt; { async loadKeyring(): Promise&lt;void&gt; {
await keyring.load(); await keyring.load();
await keyring.store(); await keyring.store();
@ -1714,8 +1707,8 @@ class MutablePgpKeyStore implements MutableKeyStore{
async isValidKey(key): Promise&lt;boolean&gt; { async isValidKey(key): Promise&lt;boolean&gt; {
// There is supposed to be an openpgp.readKey() method but I can&#x27;t find it? // There is supposed to be an openpgp.readKey() method but I can&#x27;t find it?
const _key &#x3D; await openpgp.key.readArmored(key); const testKey &#x3D; await openpgp.key.readArmored(key);
return !_key.err; return !testKey.err;
} }
async isEncryptedPrivateKey(privateKey: any): Promise&lt;boolean&gt; { async isEncryptedPrivateKey(privateKey: any): Promise&lt;boolean&gt; {
@ -1730,8 +1723,12 @@ class MutablePgpKeyStore implements MutableKeyStore{
getFingerprint(): string { getFingerprint(): string {
// TODO Handle multiple keys // TODO Handle multiple keys
return keyring.privateKeys &amp;&amp; keyring.privateKeys.keys[0] &amp;&amp; keyring.privateKeys.keys[0].keyPacket &amp;&amp; return (
keyring.privateKeys.keys[0].keyPacket.fingerprint; keyring.privateKeys &amp;&amp;
keyring.privateKeys.keys[0] &amp;&amp;
keyring.privateKeys.keys[0].keyPacket &amp;&amp;
keyring.privateKeys.keys[0].keyPacket.fingerprint
);
} }
getKeyId(key: any): string { getKeyId(key: any): string {
@ -1740,7 +1737,11 @@ class MutablePgpKeyStore implements MutableKeyStore{
getPrivateKeyId(): string { getPrivateKeyId(): string {
// TODO is there a library that comes with angular for doing this? // TODO is there a library that comes with angular for doing this?
return keyring.privateKeys &amp;&amp; keyring.privateKeys.keys[0] &amp;&amp; keyring.privateKeys.keys[0].getKeyId().toHex(); return (
keyring.privateKeys &amp;&amp;
keyring.privateKeys.keys[0] &amp;&amp;
keyring.privateKeys.keys[0].getKeyId().toHex()
);
} }
getKeysForId(keyId: string): Array&lt;any&gt; { getKeysForId(keyId: string): Array&lt;any&gt; {
@ -1772,7 +1773,7 @@ class MutablePgpKeyStore implements MutableKeyStore{
} }
removePublicKey(publicKey: any): any { removePublicKey(publicKey: any): any {
const keyId &#x3D; publicKey.getKeyId().toHex(); const keyId &#x3D; publicKey.getKeyId().toHex();
return keyring.publicKeys.removeForId(keyId); return keyring.publicKeys.removeForId(keyId);
} }
@ -1796,10 +1797,7 @@ class MutablePgpKeyStore implements MutableKeyStore{
} }
} }
export { export { MutablePgpKeyStore, MutableKeyStore };
MutablePgpKeyStore,
MutableKeyStore
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -138,8 +138,8 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {MutableKeyStore} from &#x27;@app/_pgp/pgp-key-store&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { MutableKeyStore } from &#x27;@app/_pgp/pgp-key-store&#x27;;
import {LoggingService} from &#x27;@app/_services/logging.service&#x27;; import { LoggingService } from &#x27;@app/_services/logging.service&#x27;;
const openpgp &#x3D; require(&#x27;openpgp&#x27;); const openpgp &#x3D; require(&#x27;openpgp&#x27;);
@ -147,12 +147,12 @@ interface Signable {
digest(): string; digest(): string;
} }
type Signature &#x3D; { interface Signature {
engine: string engine: string;
algo: string algo: string;
data: string data: string;
digest: string; digest: string;
}; }
interface Signer { interface Signer {
onsign(signature: Signature): void; onsign(signature: Signature): void;
@ -164,7 +164,6 @@ interface Signer {
} }
class PGPSigner implements Signer { class PGPSigner implements Signer {
engine &#x3D; &#x27;pgp&#x27;; engine &#x3D; &#x27;pgp&#x27;;
algo &#x3D; &#x27;sha256&#x27;; algo &#x3D; &#x27;sha256&#x27;;
dgst: string; dgst: string;
@ -190,28 +189,35 @@ class PGPSigner implements Signer {
} }
public verify(digest: string, signature: Signature): void { public verify(digest: string, signature: Signature): void {
openpgp.signature.readArmored(signature.data).then((sig) &#x3D;&gt; { openpgp.signature
const opts &#x3D; { .readArmored(signature.data)
message: openpgp.cleartext.fromText(digest), .then((sig) &#x3D;&gt; {
publicKeys: this.keyStore.getTrustedKeys(), const opts &#x3D; {
signature: sig, message: openpgp.cleartext.fromText(digest),
}; publicKeys: this.keyStore.getTrustedKeys(),
openpgp.verify(opts).then((v) &#x3D;&gt; { signature: sig,
let i &#x3D; 0; };
for (i &#x3D; 0; i &lt; v.signatures.length; i++) { openpgp.verify(opts).then((v) &#x3D;&gt; {
const s &#x3D; v.signatures[i]; let i &#x3D; 0;
if (s.valid) { for (i &#x3D; 0; i &lt; v.signatures.length; i++) {
this.onverify(s); const s &#x3D; v.signatures[i];
return; if (s.valid) {
this.onverify(s);
return;
}
} }
} this.loggingService.sendErrorLevelMessage(
this.loggingService.sendErrorLevelMessage(&#x60;Checked ${i} signature(s) but none valid&#x60;, this, {error: &#x27;404 Not found!&#x27;}); &#x60;Checked ${i} signature(s) but none valid&#x60;,
this,
{ error: &#x27;404 Not found!&#x27; }
);
this.onverify(false);
});
})
.catch((e) &#x3D;&gt; {
this.loggingService.sendErrorLevelMessage(e.message, this, { error: e });
this.onverify(false); this.onverify(false);
}); });
}).catch((e) &#x3D;&gt; {
this.loggingService.sendErrorLevelMessage(e.message, this, {error: e});
this.onverify(false);
});
} }
public async sign(digest: string): Promise&lt;void&gt; { public async sign(digest: string): Promise&lt;void&gt; {
@ -226,28 +232,26 @@ class PGPSigner implements Signer {
privateKeys: [pk], privateKeys: [pk],
detached: true, detached: true,
}; };
openpgp.sign(opts).then((s) &#x3D;&gt; { openpgp
this.signature &#x3D; { .sign(opts)
engine: this.engine, .then((s) &#x3D;&gt; {
algo: this.algo, this.signature &#x3D; {
data: s.signature, engine: this.engine,
// TODO: fix for browser later algo: this.algo,
digest, data: s.signature,
}; // TODO: fix for browser later
this.onsign(this.signature); digest,
}).catch((e) &#x3D;&gt; { };
this.loggingService.sendErrorLevelMessage(e.message, this, {error: e}); this.onsign(this.signature);
this.onsign(undefined); })
}); .catch((e) &#x3D;&gt; {
this.loggingService.sendErrorLevelMessage(e.message, this, { error: e });
this.onsign(undefined);
});
} }
} }
export { export { Signable, Signature, Signer, PGPSigner };
Signable,
Signature,
Signer,
PGPSigner
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -0,0 +1,398 @@
<!doctype html>
<html class="no-js" lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>CICADA</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="../images/favicon.ico">
<link rel="stylesheet" href="../styles/style.css">
</head>
<body>
<div class="navbar navbar-default navbar-fixed-top visible-xs">
<a href="../" class="navbar-brand">CICADA</a>
<button type="button" class="btn btn-default btn-menu ion-ios-menu" id="btn-menu"></button>
</div>
<div class="xs-menu menu" id="mobile-menu">
<div id="book-search-input" role="search"><input type="text" placeholder="Type to search"></div> <compodoc-menu></compodoc-menu>
</div>
<div class="container-fluid main">
<div class="row main">
<div class="hidden-xs menu">
<compodoc-menu mode="normal"></compodoc-menu>
</div>
<!-- START CONTENT -->
<div class="content interface">
<div class="content-data">
<ol class="breadcrumb">
<li>Interfaces</li>
<li>Signature</li>
</ol>
<ul class="nav nav-tabs" role="tablist">
<li class="active">
<a href="#info" role="tab" id="info-tab" data-toggle="tab" data-link="info">Info</a>
</li>
<li >
<a href="#source" role="tab" id="source-tab" data-toggle="tab" data-link="source">Source</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane fade active in" id="c-info">
<p class="comment">
<h3>File</h3>
</p>
<p class="comment">
<code>src/app/_pgp/pgp-signer.ts</code>
</p>
<section>
<h3 id="index">Index</h3>
<table class="table table-sm table-bordered index-table">
<tbody>
<tr>
<td class="col-md-4">
<h6><b>Properties</b></h6>
</td>
</tr>
<tr>
<td class="col-md-4">
<ul class="index-list">
<li>
<a href="#algo">algo</a>
</li>
<li>
<a href="#data">data</a>
</li>
<li>
<a href="#digest">digest</a>
</li>
<li>
<a href="#engine">engine</a>
</li>
</ul>
</td>
</tr>
</tbody>
</table>
</section>
<section>
<h3 id="inputs">Properties</h3>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="algo"></a>
<span class="name"><b>algo</b><a href="#algo"><span class="icon ion-ios-link"></span></a></span>
</td>
</tr>
<tr>
<td class="col-md-4">
<code>algo: <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="data"></a>
<span class="name"><b>data</b><a href="#data"><span class="icon ion-ios-link"></span></a></span>
</td>
</tr>
<tr>
<td class="col-md-4">
<code>data: <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="digest"></a>
<span class="name"><b>digest</b><a href="#digest"><span class="icon ion-ios-link"></span></a></span>
</td>
</tr>
<tr>
<td class="col-md-4">
<code>digest: <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="engine"></a>
<span class="name"><b>engine</b><a href="#engine"><span class="icon ion-ios-link"></span></a></span>
</td>
</tr>
<tr>
<td class="col-md-4">
<code>engine: <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</td>
</tr>
</tbody>
</table>
</section>
</div>
<div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { MutableKeyStore } from &#x27;@app/_pgp/pgp-key-store&#x27;;
import { LoggingService } from &#x27;@app/_services/logging.service&#x27;;
const openpgp &#x3D; require(&#x27;openpgp&#x27;);
interface Signable {
digest(): string;
}
interface Signature {
engine: string;
algo: string;
data: string;
digest: string;
}
interface Signer {
onsign(signature: Signature): void;
onverify(flag: boolean): void;
fingerprint(): string;
prepare(material: Signable): boolean;
verify(digest: string, signature: Signature): void;
sign(digest: string): Promise&lt;void&gt;;
}
class PGPSigner implements Signer {
engine &#x3D; &#x27;pgp&#x27;;
algo &#x3D; &#x27;sha256&#x27;;
dgst: string;
signature: Signature;
keyStore: MutableKeyStore;
onsign: (signature: Signature) &#x3D;&gt; void;
onverify: (flag: boolean) &#x3D;&gt; void;
loggingService: LoggingService;
constructor(keyStore: MutableKeyStore) {
this.keyStore &#x3D; keyStore;
this.onsign &#x3D; (signature: Signature) &#x3D;&gt; {};
this.onverify &#x3D; (flag: boolean) &#x3D;&gt; {};
}
public fingerprint(): string {
return this.keyStore.getFingerprint();
}
public prepare(material: Signable): boolean {
this.dgst &#x3D; material.digest();
return true;
}
public verify(digest: string, signature: Signature): void {
openpgp.signature
.readArmored(signature.data)
.then((sig) &#x3D;&gt; {
const opts &#x3D; {
message: openpgp.cleartext.fromText(digest),
publicKeys: this.keyStore.getTrustedKeys(),
signature: sig,
};
openpgp.verify(opts).then((v) &#x3D;&gt; {
let i &#x3D; 0;
for (i &#x3D; 0; i &lt; v.signatures.length; i++) {
const s &#x3D; v.signatures[i];
if (s.valid) {
this.onverify(s);
return;
}
}
this.loggingService.sendErrorLevelMessage(
&#x60;Checked ${i} signature(s) but none valid&#x60;,
this,
{ error: &#x27;404 Not found!&#x27; }
);
this.onverify(false);
});
})
.catch((e) &#x3D;&gt; {
this.loggingService.sendErrorLevelMessage(e.message, this, { error: e });
this.onverify(false);
});
}
public async sign(digest: string): Promise&lt;void&gt; {
const m &#x3D; openpgp.cleartext.fromText(digest);
const pk &#x3D; this.keyStore.getPrivateKey();
if (!pk.isDecrypted()) {
const password &#x3D; window.prompt(&#x27;password&#x27;);
await pk.decrypt(password);
}
const opts &#x3D; {
message: m,
privateKeys: [pk],
detached: true,
};
openpgp
.sign(opts)
.then((s) &#x3D;&gt; {
this.signature &#x3D; {
engine: this.engine,
algo: this.algo,
data: s.signature,
// TODO: fix for browser later
digest,
};
this.onsign(this.signature);
})
.catch((e) &#x3D;&gt; {
this.loggingService.sendErrorLevelMessage(e.message, this, { error: e });
this.onsign(undefined);
});
}
}
export { Signable, Signature, Signer, PGPSigner };
</code></pre>
</div>
</div>
</div><div class="search-results">
<div class="has-results">
<h1 class="search-results-title"><span class='search-results-count'></span> result-matching "<span class='search-query'></span>"</h1>
<ul class="search-results-list"></ul>
</div>
<div class="no-results">
<h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
</div>
</div>
</div>
<!-- END CONTENT -->
</div>
</div>
<script>
var COMPODOC_CURRENT_PAGE_DEPTH = 1;
var COMPODOC_CURRENT_PAGE_CONTEXT = 'interface';
var COMPODOC_CURRENT_PAGE_URL = 'Signature-1.html';
var MAX_SEARCH_RESULTS = 15;
</script>
<script src="../js/libs/custom-elements.min.js"></script>
<script src="../js/libs/lit-html.js"></script>
<!-- Required to polyfill modern browsers as code is ES5 for IE... -->
<script src="../js/libs/custom-elements-es5-adapter.js" charset="utf-8" defer></script>
<script src="../js/menu-wc.js" defer></script>
<script src="../js/libs/bootstrap-native.js"></script>
<script src="../js/libs/es6-shim.min.js"></script>
<script src="../js/libs/EventDispatcher.js"></script>
<script src="../js/libs/promise.min.js"></script>
<script src="../js/libs/zepto.min.js"></script>
<script src="../js/compodoc.js"></script>
<script src="../js/tabs.js"></script>
<script src="../js/menu.js"></script>
<script src="../js/libs/clipboard.min.js"></script>
<script src="../js/libs/prism.js"></script>
<script src="../js/sourceCode.js"></script>
<script src="../js/search/search.js"></script>
<script src="../js/search/lunr.min.js"></script>
<script src="../js/search/search-lunr.js"></script>
<script src="../js/search/search_index.js"></script>
<script src="../js/lazy-load-graphs.js"></script>
</body>
</html>

View File

@ -244,24 +244,34 @@
products: string[]; products: string[];
category?: string; category?: string;
vcard: { vcard: {
email: [{ email: [
value: string; {
}]; value: string;
fn: [{ }
value: string; ];
}]; fn: [
n: [{ {
value: string[]; value: string;
}]; }
tel: [{ ];
meta: { n: [
TYP: string[]; {
}, value: string[];
value: string; }
}], ];
version: [{ tel: [
value: string; {
}]; meta: {
TYP: string[];
};
value: string;
}
];
version: [
{
value: string;
}
];
}; };
} }
@ -299,34 +309,38 @@ const defaultAccount: AccountDetails &#x3D; {
}, },
products: [], products: [],
vcard: { vcard: {
email: [{ email: [
value: &#x27;&#x27;, {
}], value: &#x27;&#x27;,
fn: [{
value: &#x27;Sarafu Contract&#x27;,
}],
n: [{
value: [&#x27;Sarafu&#x27;, &#x27;Contract&#x27;],
}],
tel: [{
meta: {
TYP: [],
}, },
value: &#x27;&#x27;, ],
}], fn: [
version: [{ {
value: &#x27;3.0&#x27;, value: &#x27;Sarafu Contract&#x27;,
}], },
],
n: [
{
value: [&#x27;Sarafu&#x27;, &#x27;Contract&#x27;],
},
],
tel: [
{
meta: {
TYP: [],
},
value: &#x27;&#x27;,
},
],
version: [
{
value: &#x27;3.0&#x27;,
},
],
}, },
}; };
export { export { AccountDetails, Signature, Meta, MetaResponse, defaultAccount };
AccountDetails,
Signature,
Meta,
MetaResponse,
defaultAccount
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -515,8 +515,8 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {MutableKeyStore} from &#x27;@app/_pgp/pgp-key-store&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { MutableKeyStore } from &#x27;@app/_pgp/pgp-key-store&#x27;;
import {LoggingService} from &#x27;@app/_services/logging.service&#x27;; import { LoggingService } from &#x27;@app/_services/logging.service&#x27;;
const openpgp &#x3D; require(&#x27;openpgp&#x27;); const openpgp &#x3D; require(&#x27;openpgp&#x27;);
@ -524,12 +524,12 @@ interface Signable {
digest(): string; digest(): string;
} }
type Signature &#x3D; { interface Signature {
engine: string engine: string;
algo: string algo: string;
data: string data: string;
digest: string; digest: string;
}; }
interface Signer { interface Signer {
onsign(signature: Signature): void; onsign(signature: Signature): void;
@ -541,7 +541,6 @@ interface Signer {
} }
class PGPSigner implements Signer { class PGPSigner implements Signer {
engine &#x3D; &#x27;pgp&#x27;; engine &#x3D; &#x27;pgp&#x27;;
algo &#x3D; &#x27;sha256&#x27;; algo &#x3D; &#x27;sha256&#x27;;
dgst: string; dgst: string;
@ -567,28 +566,35 @@ class PGPSigner implements Signer {
} }
public verify(digest: string, signature: Signature): void { public verify(digest: string, signature: Signature): void {
openpgp.signature.readArmored(signature.data).then((sig) &#x3D;&gt; { openpgp.signature
const opts &#x3D; { .readArmored(signature.data)
message: openpgp.cleartext.fromText(digest), .then((sig) &#x3D;&gt; {
publicKeys: this.keyStore.getTrustedKeys(), const opts &#x3D; {
signature: sig, message: openpgp.cleartext.fromText(digest),
}; publicKeys: this.keyStore.getTrustedKeys(),
openpgp.verify(opts).then((v) &#x3D;&gt; { signature: sig,
let i &#x3D; 0; };
for (i &#x3D; 0; i &lt; v.signatures.length; i++) { openpgp.verify(opts).then((v) &#x3D;&gt; {
const s &#x3D; v.signatures[i]; let i &#x3D; 0;
if (s.valid) { for (i &#x3D; 0; i &lt; v.signatures.length; i++) {
this.onverify(s); const s &#x3D; v.signatures[i];
return; if (s.valid) {
this.onverify(s);
return;
}
} }
} this.loggingService.sendErrorLevelMessage(
this.loggingService.sendErrorLevelMessage(&#x60;Checked ${i} signature(s) but none valid&#x60;, this, {error: &#x27;404 Not found!&#x27;}); &#x60;Checked ${i} signature(s) but none valid&#x60;,
this,
{ error: &#x27;404 Not found!&#x27; }
);
this.onverify(false);
});
})
.catch((e) &#x3D;&gt; {
this.loggingService.sendErrorLevelMessage(e.message, this, { error: e });
this.onverify(false); this.onverify(false);
}); });
}).catch((e) &#x3D;&gt; {
this.loggingService.sendErrorLevelMessage(e.message, this, {error: e});
this.onverify(false);
});
} }
public async sign(digest: string): Promise&lt;void&gt; { public async sign(digest: string): Promise&lt;void&gt; {
@ -603,28 +609,26 @@ class PGPSigner implements Signer {
privateKeys: [pk], privateKeys: [pk],
detached: true, detached: true,
}; };
openpgp.sign(opts).then((s) &#x3D;&gt; { openpgp
this.signature &#x3D; { .sign(opts)
engine: this.engine, .then((s) &#x3D;&gt; {
algo: this.algo, this.signature &#x3D; {
data: s.signature, engine: this.engine,
// TODO: fix for browser later algo: this.algo,
digest, data: s.signature,
}; // TODO: fix for browser later
this.onsign(this.signature); digest,
}).catch((e) &#x3D;&gt; { };
this.loggingService.sendErrorLevelMessage(e.message, this, {error: e}); this.onsign(this.signature);
this.onsign(undefined); })
}); .catch((e) &#x3D;&gt; {
this.loggingService.sendErrorLevelMessage(e.message, this, { error: e });
this.onsign(undefined);
});
} }
} }
export { export { Signable, Signature, Signer, PGPSigner };
Signable,
Signature,
Signer,
PGPSigner
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -262,9 +262,7 @@
userid: string; userid: string;
} }
export { export { Staff };
Staff
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -372,15 +372,13 @@
&#x27;0xa686005CE37Dce7738436256982C3903f2E4ea8E&#x27;?: { &#x27;0xa686005CE37Dce7738436256982C3903f2E4ea8E&#x27;?: {
weight: string; weight: string;
balance: string; balance: string;
} };
}; };
reserveRatio?: string; reserveRatio?: string;
owner?: string; owner?: string;
} }
export { export { Token };
Token
};
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -60,13 +60,13 @@ customElements.define('compodoc-menu', class extends HTMLElement {
<a href="modules/AccountsModule.html" data-type="entity-link">AccountsModule</a> <a href="modules/AccountsModule.html" data-type="entity-link">AccountsModule</a>
<li class="chapter inner"> <li class="chapter inner">
<div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ? <div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ?
'data-target="#components-links-module-AccountsModule-45760fba474326d5521352e2712129ac"' : 'data-target="#xs-components-links-module-AccountsModule-45760fba474326d5521352e2712129ac"' }> 'data-target="#components-links-module-AccountsModule-8588711b13ba93ba249fa8b7f0554baf"' : 'data-target="#xs-components-links-module-AccountsModule-8588711b13ba93ba249fa8b7f0554baf"' }>
<span class="icon ion-md-cog"></span> <span class="icon ion-md-cog"></span>
<span>Components</span> <span>Components</span>
<span class="icon ion-ios-arrow-down"></span> <span class="icon ion-ios-arrow-down"></span>
</div> </div>
<ul class="links collapse" ${ isNormalMode ? 'id="components-links-module-AccountsModule-45760fba474326d5521352e2712129ac"' : <ul class="links collapse" ${ isNormalMode ? 'id="components-links-module-AccountsModule-8588711b13ba93ba249fa8b7f0554baf"' :
'id="xs-components-links-module-AccountsModule-45760fba474326d5521352e2712129ac"' }> 'id="xs-components-links-module-AccountsModule-8588711b13ba93ba249fa8b7f0554baf"' }>
<li class="link"> <li class="link">
<a href="components/AccountDetailsComponent.html" <a href="components/AccountDetailsComponent.html"
data-type="entity-link" data-context="sub-entity" data-context-id="modules">AccountDetailsComponent</a> data-type="entity-link" data-context="sub-entity" data-context-id="modules">AccountDetailsComponent</a>
@ -93,13 +93,13 @@ customElements.define('compodoc-menu', class extends HTMLElement {
<a href="modules/AdminModule.html" data-type="entity-link">AdminModule</a> <a href="modules/AdminModule.html" data-type="entity-link">AdminModule</a>
<li class="chapter inner"> <li class="chapter inner">
<div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ? <div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ?
'data-target="#components-links-module-AdminModule-1049b9d2b708fc7303766bdae62a866e"' : 'data-target="#xs-components-links-module-AdminModule-1049b9d2b708fc7303766bdae62a866e"' }> 'data-target="#components-links-module-AdminModule-bf625bdb8aefe13672d7b39813a7c308"' : 'data-target="#xs-components-links-module-AdminModule-bf625bdb8aefe13672d7b39813a7c308"' }>
<span class="icon ion-md-cog"></span> <span class="icon ion-md-cog"></span>
<span>Components</span> <span>Components</span>
<span class="icon ion-ios-arrow-down"></span> <span class="icon ion-ios-arrow-down"></span>
</div> </div>
<ul class="links collapse" ${ isNormalMode ? 'id="components-links-module-AdminModule-1049b9d2b708fc7303766bdae62a866e"' : <ul class="links collapse" ${ isNormalMode ? 'id="components-links-module-AdminModule-bf625bdb8aefe13672d7b39813a7c308"' :
'id="xs-components-links-module-AdminModule-1049b9d2b708fc7303766bdae62a866e"' }> 'id="xs-components-links-module-AdminModule-bf625bdb8aefe13672d7b39813a7c308"' }>
<li class="link"> <li class="link">
<a href="components/AdminComponent.html" <a href="components/AdminComponent.html"
data-type="entity-link" data-context="sub-entity" data-context-id="modules">AdminComponent</a> data-type="entity-link" data-context="sub-entity" data-context-id="modules">AdminComponent</a>
@ -114,13 +114,13 @@ customElements.define('compodoc-menu', class extends HTMLElement {
<a href="modules/AppModule.html" data-type="entity-link">AppModule</a> <a href="modules/AppModule.html" data-type="entity-link">AppModule</a>
<li class="chapter inner"> <li class="chapter inner">
<div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ? <div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ?
'data-target="#components-links-module-AppModule-00f3205ba171faa0214391d59f93a7b8"' : 'data-target="#xs-components-links-module-AppModule-00f3205ba171faa0214391d59f93a7b8"' }> 'data-target="#components-links-module-AppModule-ad6958c1ed7640c2c9a8275aee8859c9"' : 'data-target="#xs-components-links-module-AppModule-ad6958c1ed7640c2c9a8275aee8859c9"' }>
<span class="icon ion-md-cog"></span> <span class="icon ion-md-cog"></span>
<span>Components</span> <span>Components</span>
<span class="icon ion-ios-arrow-down"></span> <span class="icon ion-ios-arrow-down"></span>
</div> </div>
<ul class="links collapse" ${ isNormalMode ? 'id="components-links-module-AppModule-00f3205ba171faa0214391d59f93a7b8"' : <ul class="links collapse" ${ isNormalMode ? 'id="components-links-module-AppModule-ad6958c1ed7640c2c9a8275aee8859c9"' :
'id="xs-components-links-module-AppModule-00f3205ba171faa0214391d59f93a7b8"' }> 'id="xs-components-links-module-AppModule-ad6958c1ed7640c2c9a8275aee8859c9"' }>
<li class="link"> <li class="link">
<a href="components/AppComponent.html" <a href="components/AppComponent.html"
data-type="entity-link" data-context="sub-entity" data-context-id="modules">AppComponent</a> data-type="entity-link" data-context="sub-entity" data-context-id="modules">AppComponent</a>
@ -129,13 +129,13 @@ customElements.define('compodoc-menu', class extends HTMLElement {
</li> </li>
<li class="chapter inner"> <li class="chapter inner">
<div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ? <div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ?
'data-target="#injectables-links-module-AppModule-00f3205ba171faa0214391d59f93a7b8"' : 'data-target="#xs-injectables-links-module-AppModule-00f3205ba171faa0214391d59f93a7b8"' }> 'data-target="#injectables-links-module-AppModule-ad6958c1ed7640c2c9a8275aee8859c9"' : 'data-target="#xs-injectables-links-module-AppModule-ad6958c1ed7640c2c9a8275aee8859c9"' }>
<span class="icon ion-md-arrow-round-down"></span> <span class="icon ion-md-arrow-round-down"></span>
<span>Injectables</span> <span>Injectables</span>
<span class="icon ion-ios-arrow-down"></span> <span class="icon ion-ios-arrow-down"></span>
</div> </div>
<ul class="links collapse" ${ isNormalMode ? 'id="injectables-links-module-AppModule-00f3205ba171faa0214391d59f93a7b8"' : <ul class="links collapse" ${ isNormalMode ? 'id="injectables-links-module-AppModule-ad6958c1ed7640c2c9a8275aee8859c9"' :
'id="xs-injectables-links-module-AppModule-00f3205ba171faa0214391d59f93a7b8"' }> 'id="xs-injectables-links-module-AppModule-ad6958c1ed7640c2c9a8275aee8859c9"' }>
<li class="link"> <li class="link">
<a href="injectables/GlobalErrorHandler.html" <a href="injectables/GlobalErrorHandler.html"
data-type="entity-link" data-context="sub-entity" data-context-id="modules" }>GlobalErrorHandler</a> data-type="entity-link" data-context="sub-entity" data-context-id="modules" }>GlobalErrorHandler</a>
@ -150,13 +150,13 @@ customElements.define('compodoc-menu', class extends HTMLElement {
<a href="modules/AuthModule.html" data-type="entity-link">AuthModule</a> <a href="modules/AuthModule.html" data-type="entity-link">AuthModule</a>
<li class="chapter inner"> <li class="chapter inner">
<div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ? <div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ?
'data-target="#components-links-module-AuthModule-51afce135e51cfb3d2eee2a5e6b989a0"' : 'data-target="#xs-components-links-module-AuthModule-51afce135e51cfb3d2eee2a5e6b989a0"' }> 'data-target="#components-links-module-AuthModule-c60cb8693b592b6298d78359f6d5720f"' : 'data-target="#xs-components-links-module-AuthModule-c60cb8693b592b6298d78359f6d5720f"' }>
<span class="icon ion-md-cog"></span> <span class="icon ion-md-cog"></span>
<span>Components</span> <span>Components</span>
<span class="icon ion-ios-arrow-down"></span> <span class="icon ion-ios-arrow-down"></span>
</div> </div>
<ul class="links collapse" ${ isNormalMode ? 'id="components-links-module-AuthModule-51afce135e51cfb3d2eee2a5e6b989a0"' : <ul class="links collapse" ${ isNormalMode ? 'id="components-links-module-AuthModule-c60cb8693b592b6298d78359f6d5720f"' :
'id="xs-components-links-module-AuthModule-51afce135e51cfb3d2eee2a5e6b989a0"' }> 'id="xs-components-links-module-AuthModule-c60cb8693b592b6298d78359f6d5720f"' }>
<li class="link"> <li class="link">
<a href="components/AuthComponent.html" <a href="components/AuthComponent.html"
data-type="entity-link" data-context="sub-entity" data-context-id="modules">AuthComponent</a> data-type="entity-link" data-context="sub-entity" data-context-id="modules">AuthComponent</a>
@ -165,13 +165,13 @@ customElements.define('compodoc-menu', class extends HTMLElement {
</li> </li>
<li class="chapter inner"> <li class="chapter inner">
<div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ? <div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ?
'data-target="#directives-links-module-AuthModule-51afce135e51cfb3d2eee2a5e6b989a0"' : 'data-target="#xs-directives-links-module-AuthModule-51afce135e51cfb3d2eee2a5e6b989a0"' }> 'data-target="#directives-links-module-AuthModule-c60cb8693b592b6298d78359f6d5720f"' : 'data-target="#xs-directives-links-module-AuthModule-c60cb8693b592b6298d78359f6d5720f"' }>
<span class="icon ion-md-code-working"></span> <span class="icon ion-md-code-working"></span>
<span>Directives</span> <span>Directives</span>
<span class="icon ion-ios-arrow-down"></span> <span class="icon ion-ios-arrow-down"></span>
</div> </div>
<ul class="links collapse" ${ isNormalMode ? 'id="directives-links-module-AuthModule-51afce135e51cfb3d2eee2a5e6b989a0"' : <ul class="links collapse" ${ isNormalMode ? 'id="directives-links-module-AuthModule-c60cb8693b592b6298d78359f6d5720f"' :
'id="xs-directives-links-module-AuthModule-51afce135e51cfb3d2eee2a5e6b989a0"' }> 'id="xs-directives-links-module-AuthModule-c60cb8693b592b6298d78359f6d5720f"' }>
<li class="link"> <li class="link">
<a href="directives/PasswordToggleDirective.html" <a href="directives/PasswordToggleDirective.html"
data-type="entity-link" data-context="sub-entity" data-context-id="modules">PasswordToggleDirective</a> data-type="entity-link" data-context="sub-entity" data-context-id="modules">PasswordToggleDirective</a>
@ -186,13 +186,13 @@ customElements.define('compodoc-menu', class extends HTMLElement {
<a href="modules/PagesModule.html" data-type="entity-link">PagesModule</a> <a href="modules/PagesModule.html" data-type="entity-link">PagesModule</a>
<li class="chapter inner"> <li class="chapter inner">
<div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ? <div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ?
'data-target="#components-links-module-PagesModule-26f707f809d2db7c8ef6afb9fd24d5c9"' : 'data-target="#xs-components-links-module-PagesModule-26f707f809d2db7c8ef6afb9fd24d5c9"' }> 'data-target="#components-links-module-PagesModule-3b673c3ba54b2864fa16cdc1ac39f0dc"' : 'data-target="#xs-components-links-module-PagesModule-3b673c3ba54b2864fa16cdc1ac39f0dc"' }>
<span class="icon ion-md-cog"></span> <span class="icon ion-md-cog"></span>
<span>Components</span> <span>Components</span>
<span class="icon ion-ios-arrow-down"></span> <span class="icon ion-ios-arrow-down"></span>
</div> </div>
<ul class="links collapse" ${ isNormalMode ? 'id="components-links-module-PagesModule-26f707f809d2db7c8ef6afb9fd24d5c9"' : <ul class="links collapse" ${ isNormalMode ? 'id="components-links-module-PagesModule-3b673c3ba54b2864fa16cdc1ac39f0dc"' :
'id="xs-components-links-module-PagesModule-26f707f809d2db7c8ef6afb9fd24d5c9"' }> 'id="xs-components-links-module-PagesModule-3b673c3ba54b2864fa16cdc1ac39f0dc"' }>
<li class="link"> <li class="link">
<a href="components/PagesComponent.html" <a href="components/PagesComponent.html"
data-type="entity-link" data-context="sub-entity" data-context-id="modules">PagesComponent</a> data-type="entity-link" data-context="sub-entity" data-context-id="modules">PagesComponent</a>
@ -207,13 +207,13 @@ customElements.define('compodoc-menu', class extends HTMLElement {
<a href="modules/SettingsModule.html" data-type="entity-link">SettingsModule</a> <a href="modules/SettingsModule.html" data-type="entity-link">SettingsModule</a>
<li class="chapter inner"> <li class="chapter inner">
<div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ? <div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ?
'data-target="#components-links-module-SettingsModule-dbce3e7715ae15a497262f700409397f"' : 'data-target="#xs-components-links-module-SettingsModule-dbce3e7715ae15a497262f700409397f"' }> 'data-target="#components-links-module-SettingsModule-5044f5da70b3cb7481119034e269a4c0"' : 'data-target="#xs-components-links-module-SettingsModule-5044f5da70b3cb7481119034e269a4c0"' }>
<span class="icon ion-md-cog"></span> <span class="icon ion-md-cog"></span>
<span>Components</span> <span>Components</span>
<span class="icon ion-ios-arrow-down"></span> <span class="icon ion-ios-arrow-down"></span>
</div> </div>
<ul class="links collapse" ${ isNormalMode ? 'id="components-links-module-SettingsModule-dbce3e7715ae15a497262f700409397f"' : <ul class="links collapse" ${ isNormalMode ? 'id="components-links-module-SettingsModule-5044f5da70b3cb7481119034e269a4c0"' :
'id="xs-components-links-module-SettingsModule-dbce3e7715ae15a497262f700409397f"' }> 'id="xs-components-links-module-SettingsModule-5044f5da70b3cb7481119034e269a4c0"' }>
<li class="link"> <li class="link">
<a href="components/OrganizationComponent.html" <a href="components/OrganizationComponent.html"
data-type="entity-link" data-context="sub-entity" data-context-id="modules">OrganizationComponent</a> data-type="entity-link" data-context="sub-entity" data-context-id="modules">OrganizationComponent</a>
@ -232,13 +232,13 @@ customElements.define('compodoc-menu', class extends HTMLElement {
<a href="modules/SharedModule.html" data-type="entity-link">SharedModule</a> <a href="modules/SharedModule.html" data-type="entity-link">SharedModule</a>
<li class="chapter inner"> <li class="chapter inner">
<div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ? <div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ?
'data-target="#components-links-module-SharedModule-ca561e70f717fbc52f38b610efa4768a"' : 'data-target="#xs-components-links-module-SharedModule-ca561e70f717fbc52f38b610efa4768a"' }> 'data-target="#components-links-module-SharedModule-6e967b258111d40cdd4503883383ab4f"' : 'data-target="#xs-components-links-module-SharedModule-6e967b258111d40cdd4503883383ab4f"' }>
<span class="icon ion-md-cog"></span> <span class="icon ion-md-cog"></span>
<span>Components</span> <span>Components</span>
<span class="icon ion-ios-arrow-down"></span> <span class="icon ion-ios-arrow-down"></span>
</div> </div>
<ul class="links collapse" ${ isNormalMode ? 'id="components-links-module-SharedModule-ca561e70f717fbc52f38b610efa4768a"' : <ul class="links collapse" ${ isNormalMode ? 'id="components-links-module-SharedModule-6e967b258111d40cdd4503883383ab4f"' :
'id="xs-components-links-module-SharedModule-ca561e70f717fbc52f38b610efa4768a"' }> 'id="xs-components-links-module-SharedModule-6e967b258111d40cdd4503883383ab4f"' }>
<li class="link"> <li class="link">
<a href="components/ErrorDialogComponent.html" <a href="components/ErrorDialogComponent.html"
data-type="entity-link" data-context="sub-entity" data-context-id="modules">ErrorDialogComponent</a> data-type="entity-link" data-context="sub-entity" data-context-id="modules">ErrorDialogComponent</a>
@ -247,6 +247,10 @@ customElements.define('compodoc-menu', class extends HTMLElement {
<a href="components/FooterComponent.html" <a href="components/FooterComponent.html"
data-type="entity-link" data-context="sub-entity" data-context-id="modules">FooterComponent</a> data-type="entity-link" data-context="sub-entity" data-context-id="modules">FooterComponent</a>
</li> </li>
<li class="link">
<a href="components/NetworkStatusComponent.html"
data-type="entity-link" data-context="sub-entity" data-context-id="modules">NetworkStatusComponent</a>
</li>
<li class="link"> <li class="link">
<a href="components/SidebarComponent.html" <a href="components/SidebarComponent.html"
data-type="entity-link" data-context="sub-entity" data-context-id="modules">SidebarComponent</a> data-type="entity-link" data-context="sub-entity" data-context-id="modules">SidebarComponent</a>
@ -259,13 +263,13 @@ customElements.define('compodoc-menu', class extends HTMLElement {
</li> </li>
<li class="chapter inner"> <li class="chapter inner">
<div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ? <div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ?
'data-target="#directives-links-module-SharedModule-ca561e70f717fbc52f38b610efa4768a"' : 'data-target="#xs-directives-links-module-SharedModule-ca561e70f717fbc52f38b610efa4768a"' }> 'data-target="#directives-links-module-SharedModule-6e967b258111d40cdd4503883383ab4f"' : 'data-target="#xs-directives-links-module-SharedModule-6e967b258111d40cdd4503883383ab4f"' }>
<span class="icon ion-md-code-working"></span> <span class="icon ion-md-code-working"></span>
<span>Directives</span> <span>Directives</span>
<span class="icon ion-ios-arrow-down"></span> <span class="icon ion-ios-arrow-down"></span>
</div> </div>
<ul class="links collapse" ${ isNormalMode ? 'id="directives-links-module-SharedModule-ca561e70f717fbc52f38b610efa4768a"' : <ul class="links collapse" ${ isNormalMode ? 'id="directives-links-module-SharedModule-6e967b258111d40cdd4503883383ab4f"' :
'id="xs-directives-links-module-SharedModule-ca561e70f717fbc52f38b610efa4768a"' }> 'id="xs-directives-links-module-SharedModule-6e967b258111d40cdd4503883383ab4f"' }>
<li class="link"> <li class="link">
<a href="directives/MenuSelectionDirective.html" <a href="directives/MenuSelectionDirective.html"
data-type="entity-link" data-context="sub-entity" data-context-id="modules">MenuSelectionDirective</a> data-type="entity-link" data-context="sub-entity" data-context-id="modules">MenuSelectionDirective</a>
@ -278,13 +282,13 @@ customElements.define('compodoc-menu', class extends HTMLElement {
</li> </li>
<li class="chapter inner"> <li class="chapter inner">
<div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ? <div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ?
'data-target="#pipes-links-module-SharedModule-ca561e70f717fbc52f38b610efa4768a"' : 'data-target="#xs-pipes-links-module-SharedModule-ca561e70f717fbc52f38b610efa4768a"' }> 'data-target="#pipes-links-module-SharedModule-6e967b258111d40cdd4503883383ab4f"' : 'data-target="#xs-pipes-links-module-SharedModule-6e967b258111d40cdd4503883383ab4f"' }>
<span class="icon ion-md-add"></span> <span class="icon ion-md-add"></span>
<span>Pipes</span> <span>Pipes</span>
<span class="icon ion-ios-arrow-down"></span> <span class="icon ion-ios-arrow-down"></span>
</div> </div>
<ul class="links collapse" ${ isNormalMode ? 'id="pipes-links-module-SharedModule-ca561e70f717fbc52f38b610efa4768a"' : <ul class="links collapse" ${ isNormalMode ? 'id="pipes-links-module-SharedModule-6e967b258111d40cdd4503883383ab4f"' :
'id="xs-pipes-links-module-SharedModule-ca561e70f717fbc52f38b610efa4768a"' }> 'id="xs-pipes-links-module-SharedModule-6e967b258111d40cdd4503883383ab4f"' }>
<li class="link"> <li class="link">
<a href="pipes/SafePipe.html" <a href="pipes/SafePipe.html"
data-type="entity-link" data-context="sub-entity" data-context-id="modules">SafePipe</a> data-type="entity-link" data-context="sub-entity" data-context-id="modules">SafePipe</a>
@ -300,13 +304,13 @@ customElements.define('compodoc-menu', class extends HTMLElement {
<a href="modules/TokensModule.html" data-type="entity-link">TokensModule</a> <a href="modules/TokensModule.html" data-type="entity-link">TokensModule</a>
<li class="chapter inner"> <li class="chapter inner">
<div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ? <div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ?
'data-target="#components-links-module-TokensModule-a45a5b3f3b140d88b66ea06de73f431e"' : 'data-target="#xs-components-links-module-TokensModule-a45a5b3f3b140d88b66ea06de73f431e"' }> 'data-target="#components-links-module-TokensModule-4cd6c9f8281377a062841d33114ab4d6"' : 'data-target="#xs-components-links-module-TokensModule-4cd6c9f8281377a062841d33114ab4d6"' }>
<span class="icon ion-md-cog"></span> <span class="icon ion-md-cog"></span>
<span>Components</span> <span>Components</span>
<span class="icon ion-ios-arrow-down"></span> <span class="icon ion-ios-arrow-down"></span>
</div> </div>
<ul class="links collapse" ${ isNormalMode ? 'id="components-links-module-TokensModule-a45a5b3f3b140d88b66ea06de73f431e"' : <ul class="links collapse" ${ isNormalMode ? 'id="components-links-module-TokensModule-4cd6c9f8281377a062841d33114ab4d6"' :
'id="xs-components-links-module-TokensModule-a45a5b3f3b140d88b66ea06de73f431e"' }> 'id="xs-components-links-module-TokensModule-4cd6c9f8281377a062841d33114ab4d6"' }>
<li class="link"> <li class="link">
<a href="components/TokenDetailsComponent.html" <a href="components/TokenDetailsComponent.html"
data-type="entity-link" data-context="sub-entity" data-context-id="modules">TokenDetailsComponent</a> data-type="entity-link" data-context="sub-entity" data-context-id="modules">TokenDetailsComponent</a>
@ -325,13 +329,13 @@ customElements.define('compodoc-menu', class extends HTMLElement {
<a href="modules/TransactionsModule.html" data-type="entity-link">TransactionsModule</a> <a href="modules/TransactionsModule.html" data-type="entity-link">TransactionsModule</a>
<li class="chapter inner"> <li class="chapter inner">
<div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ? <div class="simple menu-toggler" data-toggle="collapse" ${ isNormalMode ?
'data-target="#components-links-module-TransactionsModule-2c02b9a08ea27c3060c77cecca26daba"' : 'data-target="#xs-components-links-module-TransactionsModule-2c02b9a08ea27c3060c77cecca26daba"' }> 'data-target="#components-links-module-TransactionsModule-333298a3f9373ac3e8084800783c3acc"' : 'data-target="#xs-components-links-module-TransactionsModule-333298a3f9373ac3e8084800783c3acc"' }>
<span class="icon ion-md-cog"></span> <span class="icon ion-md-cog"></span>
<span>Components</span> <span>Components</span>
<span class="icon ion-ios-arrow-down"></span> <span class="icon ion-ios-arrow-down"></span>
</div> </div>
<ul class="links collapse" ${ isNormalMode ? 'id="components-links-module-TransactionsModule-2c02b9a08ea27c3060c77cecca26daba"' : <ul class="links collapse" ${ isNormalMode ? 'id="components-links-module-TransactionsModule-333298a3f9373ac3e8084800783c3acc"' :
'id="xs-components-links-module-TransactionsModule-2c02b9a08ea27c3060c77cecca26daba"' }> 'id="xs-components-links-module-TransactionsModule-333298a3f9373ac3e8084800783c3acc"' }>
<li class="link"> <li class="link">
<a href="components/TransactionDetailsComponent.html" <a href="components/TransactionDetailsComponent.html"
data-type="entity-link" data-context="sub-entity" data-context-id="modules">TransactionDetailsComponent</a> data-type="entity-link" data-context="sub-entity" data-context-id="modules">TransactionDetailsComponent</a>
@ -596,6 +600,9 @@ customElements.define('compodoc-menu', class extends HTMLElement {
<li class="link"> <li class="link">
<a href="interfaces/Signature.html" data-type="entity-link">Signature</a> <a href="interfaces/Signature.html" data-type="entity-link">Signature</a>
</li> </li>
<li class="link">
<a href="interfaces/Signature-1.html" data-type="entity-link">Signature</a>
</li>
<li class="link"> <li class="link">
<a href="interfaces/Signer.html" data-type="entity-link">Signer</a> <a href="interfaces/Signer.html" data-type="entity-link">Signer</a>
</li> </li>
@ -634,9 +641,6 @@ customElements.define('compodoc-menu', class extends HTMLElement {
<li class="link"> <li class="link">
<a href="miscellaneous/functions.html" data-type="entity-link">Functions</a> <a href="miscellaneous/functions.html" data-type="entity-link">Functions</a>
</li> </li>
<li class="link">
<a href="miscellaneous/typealiases.html" data-type="entity-link">Type aliases</a>
</li>
<li class="link"> <li class="link">
<a href="miscellaneous/variables.html" data-type="entity-link">Variables</a> <a href="miscellaneous/variables.html" data-type="entity-link">Variables</a>
</li> </li>

View File

@ -1 +1 @@
var ROUTES_INDEX = {"name":"<root>","kind":"module","className":"AppModule","children":[{"name":"routes","filename":"src/app/app-routing.module.ts","module":"AppRoutingModule","children":[{"path":"auth","loadChildren":"@app/auth/auth.module#AuthModule","children":[{"kind":"module","children":[{"name":"routes","filename":"src/app/auth/auth-routing.module.ts","module":"AuthRoutingModule","children":[{"path":"","component":"AuthComponent"},{"path":"**","redirectTo":"","pathMatch":"full"}],"kind":"module"}],"module":"AuthModule"}]},{"path":"","loadChildren":"@pages/pages.module#PagesModule","canActivate":["AuthGuard"],"children":[{"kind":"module","children":[{"name":"routes","filename":"src/app/pages/pages-routing.module.ts","module":"PagesRoutingModule","children":[{"path":"home","component":"PagesComponent"},{"path":"tx","loadChildren":"@pages/transactions/transactions.module#TransactionsModule"},{"path":"settings","loadChildren":"@pages/settings/settings.module#SettingsModule","children":[{"kind":"module","children":[{"name":"routes","filename":"src/app/pages/settings/settings-routing.module.ts","module":"SettingsRoutingModule","children":[{"path":"","component":"SettingsComponent"},{"path":"organization","component":"OrganizationComponent"},{"path":"**","redirectTo":"","pathMatch":"full"}],"kind":"module"}],"module":"SettingsModule"}]},{"path":"accounts","loadChildren":"@pages/accounts/accounts.module#AccountsModule","children":[{"kind":"module","children":[{"name":"routes","filename":"src/app/pages/accounts/accounts-routing.module.ts","module":"AccountsRoutingModule","children":[{"path":"","component":"AccountsComponent"},{"path":"search","component":"AccountSearchComponent"},{"path":":id","component":"AccountDetailsComponent"},{"path":"**","redirectTo":"","pathMatch":"full"}],"kind":"module"}],"module":"AccountsModule"}]},{"path":"tokens","loadChildren":"@pages/tokens/tokens.module#TokensModule","children":[{"kind":"module","children":[{"name":"routes","filename":"src/app/pages/tokens/tokens-routing.module.ts","module":"TokensRoutingModule","children":[{"path":"","component":"TokensComponent"},{"path":":id","component":"TokenDetailsComponent"}],"kind":"module"}],"module":"TokensModule"}]},{"path":"admin","loadChildren":"@pages/admin/admin.module#AdminModule","children":[{"kind":"module","children":[{"name":"routes","filename":"src/app/pages/admin/admin-routing.module.ts","module":"AdminRoutingModule","children":[{"path":"","component":"AdminComponent"}],"kind":"module"}],"module":"AdminModule"}]},{"path":"**","redirectTo":"home","pathMatch":"full"}],"kind":"module"}],"module":"PagesModule"}]},{"path":"**","redirectTo":"","pathMatch":"full"}],"kind":"module"}]} var ROUTES_INDEX = {"name":"<root>","kind":"module","className":"AppModule","children":[{"name":"routes","filename":"src/app/app-routing.module.ts","module":"AppRoutingModule","kind":"module"}]}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -247,35 +247,34 @@ import { CommonModule } from &#x27;@angular/common&#x27;;
import { AccountsRoutingModule } from &#x27;@pages/accounts/accounts-routing.module&#x27;; import { AccountsRoutingModule } from &#x27;@pages/accounts/accounts-routing.module&#x27;;
import { AccountsComponent } from &#x27;@pages/accounts/accounts.component&#x27;; import { AccountsComponent } from &#x27;@pages/accounts/accounts.component&#x27;;
import {SharedModule} from &#x27;@app/shared/shared.module&#x27;; import { SharedModule } from &#x27;@app/shared/shared.module&#x27;;
import { AccountDetailsComponent } from &#x27;@pages/accounts/account-details/account-details.component&#x27;; import { AccountDetailsComponent } from &#x27;@pages/accounts/account-details/account-details.component&#x27;;
import {DataTablesModule} from &#x27;angular-datatables&#x27;; import { DataTablesModule } from &#x27;angular-datatables&#x27;;
import { CreateAccountComponent } from &#x27;@pages/accounts/create-account/create-account.component&#x27;; import { CreateAccountComponent } from &#x27;@pages/accounts/create-account/create-account.component&#x27;;
import {MatTableModule} from &#x27;@angular/material/table&#x27;; import { MatTableModule } from &#x27;@angular/material/table&#x27;;
import {MatSortModule} from &#x27;@angular/material/sort&#x27;; import { MatSortModule } from &#x27;@angular/material/sort&#x27;;
import {MatCheckboxModule} from &#x27;@angular/material/checkbox&#x27;; import { MatCheckboxModule } from &#x27;@angular/material/checkbox&#x27;;
import {MatPaginatorModule} from &#x27;@angular/material/paginator&#x27;; import { MatPaginatorModule } from &#x27;@angular/material/paginator&#x27;;
import {MatInputModule} from &#x27;@angular/material/input&#x27;; import { MatInputModule } from &#x27;@angular/material/input&#x27;;
import {MatFormFieldModule} from &#x27;@angular/material/form-field&#x27;; import { MatFormFieldModule } from &#x27;@angular/material/form-field&#x27;;
import {MatButtonModule} from &#x27;@angular/material/button&#x27;; import { MatButtonModule } from &#x27;@angular/material/button&#x27;;
import {MatCardModule} from &#x27;@angular/material/card&#x27;; import { MatCardModule } from &#x27;@angular/material/card&#x27;;
import {MatIconModule} from &#x27;@angular/material/icon&#x27;; import { MatIconModule } from &#x27;@angular/material/icon&#x27;;
import {MatSelectModule} from &#x27;@angular/material/select&#x27;; import { MatSelectModule } from &#x27;@angular/material/select&#x27;;
import {TransactionsModule} from &#x27;@pages/transactions/transactions.module&#x27;; import { TransactionsModule } from &#x27;@pages/transactions/transactions.module&#x27;;
import {MatTabsModule} from &#x27;@angular/material/tabs&#x27;; import { MatTabsModule } from &#x27;@angular/material/tabs&#x27;;
import {MatRippleModule} from &#x27;@angular/material/core&#x27;; import { MatRippleModule } from &#x27;@angular/material/core&#x27;;
import {MatProgressSpinnerModule} from &#x27;@angular/material/progress-spinner&#x27;; import { MatProgressSpinnerModule } from &#x27;@angular/material/progress-spinner&#x27;;
import {ReactiveFormsModule} from &#x27;@angular/forms&#x27;; import { ReactiveFormsModule } from &#x27;@angular/forms&#x27;;
import { AccountSearchComponent } from &#x27;./account-search/account-search.component&#x27;; import { AccountSearchComponent } from &#x27;./account-search/account-search.component&#x27;;
import {MatSnackBarModule} from &#x27;@angular/material/snack-bar&#x27;; import { MatSnackBarModule } from &#x27;@angular/material/snack-bar&#x27;;
@NgModule({ @NgModule({
declarations: [ declarations: [
AccountsComponent, AccountsComponent,
AccountDetailsComponent, AccountDetailsComponent,
CreateAccountComponent, CreateAccountComponent,
AccountSearchComponent AccountSearchComponent,
], ],
imports: [ imports: [
CommonModule, CommonModule,
@ -298,9 +297,9 @@ import {MatSnackBarModule} from &#x27;@angular/material/snack-bar&#x27;;
MatProgressSpinnerModule, MatProgressSpinnerModule,
ReactiveFormsModule, ReactiveFormsModule,
MatSnackBarModule, MatSnackBarModule,
] ],
}) })
export class AccountsModule { } export class AccountsModule {}
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -74,23 +74,23 @@
import { Routes, RouterModule } from &#x27;@angular/router&#x27;; import { Routes, RouterModule } from &#x27;@angular/router&#x27;;
import { AccountsComponent } from &#x27;@pages/accounts/accounts.component&#x27;; import { AccountsComponent } from &#x27;@pages/accounts/accounts.component&#x27;;
import {CreateAccountComponent} from &#x27;@pages/accounts/create-account/create-account.component&#x27;; import { CreateAccountComponent } from &#x27;@pages/accounts/create-account/create-account.component&#x27;;
import {AccountDetailsComponent} from &#x27;@pages/accounts/account-details/account-details.component&#x27;; import { AccountDetailsComponent } from &#x27;@pages/accounts/account-details/account-details.component&#x27;;
import {AccountSearchComponent} from &#x27;@pages/accounts/account-search/account-search.component&#x27;; import { AccountSearchComponent } from &#x27;@pages/accounts/account-search/account-search.component&#x27;;
const routes: Routes &#x3D; [ const routes: Routes &#x3D; [
{ path: &#x27;&#x27;, component: AccountsComponent }, { path: &#x27;&#x27;, component: AccountsComponent },
{ path: &#x27;search&#x27;, component: AccountSearchComponent }, { path: &#x27;search&#x27;, component: AccountSearchComponent },
// { path: &#x27;create&#x27;, component: CreateAccountComponent }, // { path: &#x27;create&#x27;, component: CreateAccountComponent },
{ path: &#x27;:id&#x27;, component: AccountDetailsComponent }, { path: &#x27;:id&#x27;, component: AccountDetailsComponent },
{ path: &#x27;**&#x27;, redirectTo: &#x27;&#x27;, pathMatch: &#x27;full&#x27; } { path: &#x27;**&#x27;, redirectTo: &#x27;&#x27;, pathMatch: &#x27;full&#x27; },
]; ];
@NgModule({ @NgModule({
imports: [RouterModule.forChild(routes)], imports: [RouterModule.forChild(routes)],
exports: [RouterModule] exports: [RouterModule],
}) })
export class AccountsRoutingModule { } export class AccountsRoutingModule {}
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -187,36 +187,35 @@ import { CommonModule } from &#x27;@angular/common&#x27;;
import { AdminRoutingModule } from &#x27;@pages/admin/admin-routing.module&#x27;; import { AdminRoutingModule } from &#x27;@pages/admin/admin-routing.module&#x27;;
import { AdminComponent } from &#x27;@pages/admin/admin.component&#x27;; import { AdminComponent } from &#x27;@pages/admin/admin.component&#x27;;
import {SharedModule} from &#x27;@app/shared/shared.module&#x27;; import { SharedModule } from &#x27;@app/shared/shared.module&#x27;;
import {MatCardModule} from &#x27;@angular/material/card&#x27;; import { MatCardModule } from &#x27;@angular/material/card&#x27;;
import {MatFormFieldModule} from &#x27;@angular/material/form-field&#x27;; import { MatFormFieldModule } from &#x27;@angular/material/form-field&#x27;;
import {MatInputModule} from &#x27;@angular/material/input&#x27;; import { MatInputModule } from &#x27;@angular/material/input&#x27;;
import {MatIconModule} from &#x27;@angular/material/icon&#x27;; import { MatIconModule } from &#x27;@angular/material/icon&#x27;;
import {MatTableModule} from &#x27;@angular/material/table&#x27;; import { MatTableModule } from &#x27;@angular/material/table&#x27;;
import {MatSortModule} from &#x27;@angular/material/sort&#x27;; import { MatSortModule } from &#x27;@angular/material/sort&#x27;;
import {MatPaginatorModule} from &#x27;@angular/material/paginator&#x27;; import { MatPaginatorModule } from &#x27;@angular/material/paginator&#x27;;
import {MatButtonModule} from &#x27;@angular/material/button&#x27;; import { MatButtonModule } from &#x27;@angular/material/button&#x27;;
import {MatRippleModule} from &#x27;@angular/material/core&#x27;; import { MatRippleModule } from &#x27;@angular/material/core&#x27;;
@NgModule({ @NgModule({
declarations: [AdminComponent], declarations: [AdminComponent],
imports: [ imports: [
CommonModule, CommonModule,
AdminRoutingModule, AdminRoutingModule,
SharedModule, SharedModule,
MatCardModule, MatCardModule,
MatFormFieldModule, MatFormFieldModule,
MatInputModule, MatInputModule,
MatIconModule, MatIconModule,
MatTableModule, MatTableModule,
MatSortModule, MatSortModule,
MatPaginatorModule, MatPaginatorModule,
MatButtonModule, MatButtonModule,
MatRippleModule MatRippleModule,
] ],
}) })
export class AdminModule { } export class AdminModule {}
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -79,9 +79,9 @@ const routes: Routes &#x3D; [{ path: &#x27;&#x27;, component: AdminComponent }];
@NgModule({ @NgModule({
imports: [RouterModule.forChild(routes)], imports: [RouterModule.forChild(routes)],
exports: [RouterModule] exports: [RouterModule],
}) })
export class AdminRoutingModule { } export class AdminRoutingModule {}
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -65,6 +65,10 @@
<title>cluster_AppModule</title> <title>cluster_AppModule</title>
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 1186,-268 1186,-70 8,-70"/> <polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 1186,-268 1186,-70 8,-70"/>
</g> </g>
<g id="clust6" class="cluster">
<title>cluster_AppModule_bootstrap</title>
<polygon fill="none" stroke="black" points="584,-208 584,-260 708,-260 708,-208 584,-208"/>
</g>
<g id="clust4" class="cluster"> <g id="clust4" class="cluster">
<title>cluster_AppModule_imports</title> <title>cluster_AppModule_imports</title>
<polygon fill="none" stroke="black" points="917,-78 917,-130 1178,-130 1178,-78 917,-78"/> <polygon fill="none" stroke="black" points="917,-78 917,-130 1178,-130 1178,-78 917,-78"/>
@ -77,10 +81,6 @@
<title>cluster_AppModule_declarations</title> <title>cluster_AppModule_declarations</title>
<polygon fill="none" stroke="black" points="16,-78 16,-130 138,-130 138,-78 16,-78"/> <polygon fill="none" stroke="black" points="16,-78 16,-130 138,-130 138,-78 16,-78"/>
</g> </g>
<g id="clust6" class="cluster">
<title>cluster_AppModule_bootstrap</title>
<polygon fill="none" stroke="black" points="584,-208 584,-260 708,-260 708,-208 584,-208"/>
</g>
<!-- AppComponent --> <!-- AppComponent -->
<g id="node1" class="node"> <g id="node1" class="node">
<title>AppComponent</title> <title>AppComponent</title>
@ -277,30 +277,26 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {BrowserModule} from &#x27;@angular/platform-browser&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { BrowserModule } from &#x27;@angular/platform-browser&#x27;;
import {ErrorHandler, NgModule} from &#x27;@angular/core&#x27;; import { ErrorHandler, NgModule } from &#x27;@angular/core&#x27;;
import {AppRoutingModule} from &#x27;@app/app-routing.module&#x27;; import { AppRoutingModule } from &#x27;@app/app-routing.module&#x27;;
import {AppComponent} from &#x27;@app/app.component&#x27;; import { AppComponent } from &#x27;@app/app.component&#x27;;
import {BrowserAnimationsModule} from &#x27;@angular/platform-browser/animations&#x27;; import { BrowserAnimationsModule } from &#x27;@angular/platform-browser/animations&#x27;;
import {HTTP_INTERCEPTORS, HttpClientModule} from &#x27;@angular/common/http&#x27;; import { HTTP_INTERCEPTORS, HttpClientModule } from &#x27;@angular/common/http&#x27;;
import { import { GlobalErrorHandler, MockBackendProvider } from &#x27;@app/_helpers&#x27;;
GlobalErrorHandler, import { DataTablesModule } from &#x27;angular-datatables&#x27;;
MockBackendProvider, import { SharedModule } from &#x27;@app/shared/shared.module&#x27;;
} from &#x27;@app/_helpers&#x27;; import { MatTableModule } from &#x27;@angular/material/table&#x27;;
import {DataTablesModule} from &#x27;angular-datatables&#x27;; import { AuthGuard } from &#x27;@app/_guards&#x27;;
import {SharedModule} from &#x27;@app/shared/shared.module&#x27;; import { LoggerModule } from &#x27;ngx-logger&#x27;;
import {MatTableModule} from &#x27;@angular/material/table&#x27;; import { environment } from &#x27;@src/environments/environment&#x27;;
import {AuthGuard} from &#x27;@app/_guards&#x27;; import { ErrorInterceptor, HttpConfigInterceptor, LoggingInterceptor } from &#x27;@app/_interceptors&#x27;;
import {LoggerModule} from &#x27;ngx-logger&#x27;; import { MutablePgpKeyStore } from &#x27;@app/_pgp&#x27;;
import {environment} from &#x27;@src/environments/environment&#x27;; import { ServiceWorkerModule } from &#x27;@angular/service-worker&#x27;;
import {ErrorInterceptor, HttpConfigInterceptor, LoggingInterceptor} from &#x27;@app/_interceptors&#x27;;
import {MutablePgpKeyStore} from &#x27;@app/_pgp&#x27;;
@NgModule({ @NgModule({
declarations: [ declarations: [AppComponent],
AppComponent
],
imports: [ imports: [
BrowserModule, BrowserModule,
AppRoutingModule, AppRoutingModule,
@ -313,8 +309,9 @@ import {MutablePgpKeyStore} from &#x27;@app/_pgp&#x27;;
level: environment.logLevel, level: environment.logLevel,
serverLogLevel: environment.serverLogLevel, serverLogLevel: environment.serverLogLevel,
serverLoggingUrl: &#x60;${environment.loggingUrl}/api/logs/&#x60;, serverLoggingUrl: &#x60;${environment.loggingUrl}/api/logs/&#x60;,
disableConsoleLogging: false disableConsoleLogging: false,
}) }),
ServiceWorkerModule.register(&#x27;ngsw-worker.js&#x27;, { enabled: environment.production }),
], ],
providers: [ providers: [
AuthGuard, AuthGuard,
@ -326,9 +323,9 @@ import {MutablePgpKeyStore} from &#x27;@app/_pgp&#x27;;
{ provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true }, { provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true },
{ provide: HTTP_INTERCEPTORS, useClass: LoggingInterceptor, multi: true }, { provide: HTTP_INTERCEPTORS, useClass: LoggingInterceptor, multi: true },
], ],
bootstrap: [AppComponent] bootstrap: [AppComponent],
}) })
export class AppModule { } export class AppModule {}
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -24,6 +24,10 @@
<title>cluster_AppModule</title> <title>cluster_AppModule</title>
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 1186,-268 1186,-70 8,-70"/> <polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 1186,-268 1186,-70 8,-70"/>
</g> </g>
<g id="clust6" class="cluster">
<title>cluster_AppModule_bootstrap</title>
<polygon fill="none" stroke="black" points="584,-208 584,-260 708,-260 708,-208 584,-208"/>
</g>
<g id="clust4" class="cluster"> <g id="clust4" class="cluster">
<title>cluster_AppModule_imports</title> <title>cluster_AppModule_imports</title>
<polygon fill="none" stroke="black" points="917,-78 917,-130 1178,-130 1178,-78 917,-78"/> <polygon fill="none" stroke="black" points="917,-78 917,-130 1178,-130 1178,-78 917,-78"/>
@ -36,10 +40,6 @@
<title>cluster_AppModule_declarations</title> <title>cluster_AppModule_declarations</title>
<polygon fill="none" stroke="black" points="16,-78 16,-130 138,-130 138,-78 16,-78"/> <polygon fill="none" stroke="black" points="16,-78 16,-130 138,-130 138,-78 16,-78"/>
</g> </g>
<g id="clust6" class="cluster">
<title>cluster_AppModule_bootstrap</title>
<polygon fill="none" stroke="black" points="584,-208 584,-260 708,-260 708,-208 584,-208"/>
</g>
<!-- AppComponent --> <!-- AppComponent -->
<g id="node1" class="node"> <g id="node1" class="node">
<title>AppComponent</title> <title>AppComponent</title>

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@ -71,22 +71,28 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { NgModule } from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { NgModule } from &#x27;@angular/core&#x27;;
import {Routes, RouterModule, PreloadAllModules} from &#x27;@angular/router&#x27;; import { Routes, RouterModule, PreloadAllModules } from &#x27;@angular/router&#x27;;
import {AuthGuard} from &#x27;@app/_guards&#x27;; import { AuthGuard } from &#x27;@app/_guards&#x27;;
const routes: Routes &#x3D; [ const routes: Routes &#x3D; [
{ path: &#x27;auth&#x27;, loadChildren: () &#x3D;&gt; &quot;import(&#x27;@app/auth/auth.module&#x27;).then(m &#x3D;&gt; m.AuthModule)&quot; }, { path: &#x27;auth&#x27;, loadChildren: () &#x3D;&gt; &quot;import(&#x27;@app/auth/auth.module&#x27;).then((m) &#x3D;&gt; m.AuthModule)&quot; },
{ path: &#x27;&#x27;, loadChildren: () &#x3D;&gt; &quot;import(&#x27;@pages/pages.module&#x27;).then(m &#x3D;&gt; m.PagesModule)&quot;, canActivate: [AuthGuard] }, {
{ path: &#x27;**&#x27;, redirectTo: &#x27;&#x27;, pathMatch: &#x27;full&#x27; } path: &#x27;&#x27;,
loadChildren: () &#x3D;&gt; &quot;import(&#x27;@pages/pages.module&#x27;).then((m) &#x3D;&gt; m.PagesModule)&quot;,
canActivate: [AuthGuard],
},
{ path: &#x27;**&#x27;, redirectTo: &#x27;&#x27;, pathMatch: &#x27;full&#x27; },
]; ];
@NgModule({ @NgModule({
imports: [RouterModule.forRoot(routes, { imports: [
preloadingStrategy: PreloadAllModules RouterModule.forRoot(routes, {
})], preloadingStrategy: PreloadAllModules,
exports: [RouterModule] }),
],
exports: [RouterModule],
}) })
export class AppRoutingModule { } export class AppRoutingModule {}
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -187,14 +187,13 @@ import { CommonModule } from &#x27;@angular/common&#x27;;
import { AuthRoutingModule } from &#x27;@app/auth/auth-routing.module&#x27;; import { AuthRoutingModule } from &#x27;@app/auth/auth-routing.module&#x27;;
import { AuthComponent } from &#x27;@app/auth/auth.component&#x27;; import { AuthComponent } from &#x27;@app/auth/auth.component&#x27;;
import {ReactiveFormsModule} from &#x27;@angular/forms&#x27;; import { ReactiveFormsModule } from &#x27;@angular/forms&#x27;;
import {PasswordToggleDirective} from &#x27;@app/auth/_directives/password-toggle.directive&#x27;; import { PasswordToggleDirective } from &#x27;@app/auth/_directives/password-toggle.directive&#x27;;
import {MatCardModule} from &#x27;@angular/material/card&#x27;; import { MatCardModule } from &#x27;@angular/material/card&#x27;;
import {MatSelectModule} from &#x27;@angular/material/select&#x27;; import { MatSelectModule } from &#x27;@angular/material/select&#x27;;
import {MatInputModule} from &#x27;@angular/material/input&#x27;; import { MatInputModule } from &#x27;@angular/material/input&#x27;;
import {MatButtonModule} from &#x27;@angular/material/button&#x27;; import { MatButtonModule } from &#x27;@angular/material/button&#x27;;
import {MatRippleModule} from &#x27;@angular/material/core&#x27;; import { MatRippleModule } from &#x27;@angular/material/core&#x27;;
@NgModule({ @NgModule({
declarations: [AuthComponent, PasswordToggleDirective], declarations: [AuthComponent, PasswordToggleDirective],
@ -207,9 +206,9 @@ import {MatRippleModule} from &#x27;@angular/material/core&#x27;;
MatInputModule, MatInputModule,
MatButtonModule, MatButtonModule,
MatRippleModule, MatRippleModule,
] ],
}) })
export class AuthModule { } export class AuthModule {}
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -77,14 +77,14 @@ import { AuthComponent } from &#x27;@app/auth/auth.component&#x27;;
const routes: Routes &#x3D; [ const routes: Routes &#x3D; [
{ path: &#x27;&#x27;, component: AuthComponent }, { path: &#x27;&#x27;, component: AuthComponent },
{ path: &#x27;**&#x27;, redirectTo: &#x27;&#x27;, pathMatch: &#x27;full&#x27;}, { path: &#x27;**&#x27;, redirectTo: &#x27;&#x27;, pathMatch: &#x27;full&#x27; },
]; ];
@NgModule({ @NgModule({
imports: [RouterModule.forChild(routes)], imports: [RouterModule.forChild(routes)],
exports: [RouterModule] exports: [RouterModule],
}) })
export class AuthRoutingModule { } export class AuthRoutingModule {}
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -187,30 +187,29 @@ import { CommonModule } from &#x27;@angular/common&#x27;;
import { PagesRoutingModule } from &#x27;@pages/pages-routing.module&#x27;; import { PagesRoutingModule } from &#x27;@pages/pages-routing.module&#x27;;
import { PagesComponent } from &#x27;@pages/pages.component&#x27;; import { PagesComponent } from &#x27;@pages/pages.component&#x27;;
import {SharedModule} from &#x27;@app/shared/shared.module&#x27;; import { SharedModule } from &#x27;@app/shared/shared.module&#x27;;
import {ChartsModule} from &#x27;ng2-charts&#x27;; import { ChartsModule } from &#x27;ng2-charts&#x27;;
import {MatButtonModule} from &#x27;@angular/material/button&#x27;; import { MatButtonModule } from &#x27;@angular/material/button&#x27;;
import {MatFormFieldModule} from &#x27;@angular/material/form-field&#x27;; import { MatFormFieldModule } from &#x27;@angular/material/form-field&#x27;;
import {MatSelectModule} from &#x27;@angular/material/select&#x27;; import { MatSelectModule } from &#x27;@angular/material/select&#x27;;
import {MatInputModule} from &#x27;@angular/material/input&#x27;; import { MatInputModule } from &#x27;@angular/material/input&#x27;;
import {MatCardModule} from &#x27;@angular/material/card&#x27;; import { MatCardModule } from &#x27;@angular/material/card&#x27;;
@NgModule({ @NgModule({
declarations: [PagesComponent], declarations: [PagesComponent],
imports: [ imports: [
CommonModule, CommonModule,
PagesRoutingModule, PagesRoutingModule,
SharedModule, SharedModule,
ChartsModule, ChartsModule,
MatButtonModule, MatButtonModule,
MatFormFieldModule, MatFormFieldModule,
MatSelectModule, MatSelectModule,
MatInputModule, MatInputModule,
MatCardModule MatCardModule,
] ],
}) })
export class PagesModule { } export class PagesModule {}
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -77,19 +77,35 @@ import { PagesComponent } from &#x27;./pages.component&#x27;;
const routes: Routes &#x3D; [ const routes: Routes &#x3D; [
{ path: &#x27;home&#x27;, component: PagesComponent }, { path: &#x27;home&#x27;, component: PagesComponent },
{ path: &#x27;tx&#x27;, loadChildren: () &#x3D;&gt; &quot;import(&#x27;@pages/transactions/transactions.module&#x27;).then(m &#x3D;&gt; m.TransactionsModule)&quot; }, {
{ path: &#x27;settings&#x27;, loadChildren: () &#x3D;&gt; &quot;import(&#x27;@pages/settings/settings.module&#x27;).then(m &#x3D;&gt; m.SettingsModule)&quot; }, path: &#x27;tx&#x27;,
{ path: &#x27;accounts&#x27;, loadChildren: () &#x3D;&gt; &quot;import(&#x27;@pages/accounts/accounts.module&#x27;).then(m &#x3D;&gt; m.AccountsModule)&quot; }, loadChildren: () &#x3D;&gt;
{ path: &#x27;tokens&#x27;, loadChildren: () &#x3D;&gt; &quot;import(&#x27;@pages/tokens/tokens.module&#x27;).then(m &#x3D;&gt; m.TokensModule)&quot; }, &quot;import(&#x27;@pages/transactions/transactions.module&#x27;).then((m) &#x3D;&gt; m.TransactionsModule)&quot;,
{ path: &#x27;admin&#x27;, loadChildren: () &#x3D;&gt; &quot;import(&#x27;@pages/admin/admin.module&#x27;).then(m &#x3D;&gt; m.AdminModule)&quot; }, },
{ path: &#x27;**&#x27;, redirectTo: &#x27;home&#x27;, pathMatch: &#x27;full&#x27;} {
path: &#x27;settings&#x27;,
loadChildren: () &#x3D;&gt; &quot;import(&#x27;@pages/settings/settings.module&#x27;).then((m) &#x3D;&gt; m.SettingsModule)&quot;,
},
{
path: &#x27;accounts&#x27;,
loadChildren: () &#x3D;&gt; &quot;import(&#x27;@pages/accounts/accounts.module&#x27;).then((m) &#x3D;&gt; m.AccountsModule)&quot;,
},
{
path: &#x27;tokens&#x27;,
loadChildren: () &#x3D;&gt; &quot;import(&#x27;@pages/tokens/tokens.module&#x27;).then((m) &#x3D;&gt; m.TokensModule)&quot;,
},
{
path: &#x27;admin&#x27;,
loadChildren: () &#x3D;&gt; &quot;import(&#x27;@pages/admin/admin.module&#x27;).then((m) &#x3D;&gt; m.AdminModule)&quot;,
},
{ path: &#x27;**&#x27;, redirectTo: &#x27;home&#x27;, pathMatch: &#x27;full&#x27; },
]; ];
@NgModule({ @NgModule({
imports: [RouterModule.forChild(routes)], imports: [RouterModule.forChild(routes)],
exports: [RouterModule] exports: [RouterModule],
}) })
export class PagesRoutingModule { } export class PagesRoutingModule {}
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -65,67 +65,67 @@
<title>cluster_SettingsModule</title> <title>cluster_SettingsModule</title>
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-195 628,-195 628,-70 8,-70"/> <polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-195 628,-195 628,-70 8,-70"/>
</g> </g>
<g id="clust5" class="cluster">
<title>cluster_SettingsModule_imports</title>
<polygon fill="none" stroke="black" points="338,-78 338,-130 620,-130 620,-78 338,-78"/>
</g>
<g id="clust2" class="cluster"> <g id="clust2" class="cluster">
<title>cluster_SettingsModule_declarations</title> <title>cluster_SettingsModule_declarations</title>
<polygon fill="none" stroke="black" points="16,-78 16,-130 330,-130 330,-78 16,-78"/> <polygon fill="none" stroke="black" points="306,-78 306,-130 620,-130 620,-78 306,-78"/>
</g>
<g id="clust5" class="cluster">
<title>cluster_SettingsModule_imports</title>
<polygon fill="none" stroke="black" points="16,-78 16,-130 298,-130 298,-78 16,-78"/>
</g> </g>
<!-- OrganizationComponent --> <!-- OrganizationComponent -->
<g id="node1" class="node"> <g id="node1" class="node">
<title>OrganizationComponent</title> <title>OrganizationComponent</title>
<polygon fill="#ffffb3" stroke="black" points="322.42,-122 167.58,-122 167.58,-86 322.42,-86 322.42,-122"/> <polygon fill="#ffffb3" stroke="black" points="612.42,-122 457.58,-122 457.58,-86 612.42,-86 612.42,-122"/>
<text text-anchor="middle" x="245" y="-99.8" font-family="Times,serif" font-size="14.00">OrganizationComponent</text> <text text-anchor="middle" x="535" y="-99.8" font-family="Times,serif" font-size="14.00">OrganizationComponent</text>
</g> </g>
<!-- SettingsModule --> <!-- SettingsModule -->
<g id="node3" class="node"> <g id="node3" class="node">
<title>SettingsModule</title> <title>SettingsModule</title>
<polygon fill="#8dd3c7" stroke="black" points="372.16,-187 369.16,-191 348.16,-191 345.16,-187 267.84,-187 267.84,-151 372.16,-151 372.16,-187"/> <polygon fill="#8dd3c7" stroke="black" points="348.16,-187 345.16,-191 324.16,-191 321.16,-187 243.84,-187 243.84,-151 348.16,-151 348.16,-187"/>
<text text-anchor="middle" x="320" y="-164.8" font-family="Times,serif" font-size="14.00">SettingsModule</text> <text text-anchor="middle" x="296" y="-164.8" font-family="Times,serif" font-size="14.00">SettingsModule</text>
</g> </g>
<!-- OrganizationComponent&#45;&gt;SettingsModule --> <!-- OrganizationComponent&#45;&gt;SettingsModule -->
<g id="edge1" class="edge"> <g id="edge1" class="edge">
<title>OrganizationComponent&#45;&gt;SettingsModule</title> <title>OrganizationComponent&#45;&gt;SettingsModule</title>
<path fill="none" stroke="black" d="M294.94,-122.11C294.94,-122.11 294.94,-140.99 294.94,-140.99"/> <path fill="none" stroke="black" d="M535,-122.11C535,-141.34 535,-169 535,-169 535,-169 358.45,-169 358.45,-169"/>
<polygon fill="black" stroke="black" points="291.44,-140.99 294.94,-150.99 298.44,-140.99 291.44,-140.99"/> <polygon fill="black" stroke="black" points="358.45,-165.5 348.45,-169 358.45,-172.5 358.45,-165.5"/>
</g> </g>
<!-- SettingsComponent --> <!-- SettingsComponent -->
<g id="node2" class="node"> <g id="node2" class="node">
<title>SettingsComponent</title> <title>SettingsComponent</title>
<polygon fill="#ffffb3" stroke="black" points="150.45,-122 23.55,-122 23.55,-86 150.45,-86 150.45,-122"/> <polygon fill="#ffffb3" stroke="black" points="440.45,-122 313.55,-122 313.55,-86 440.45,-86 440.45,-122"/>
<text text-anchor="middle" x="87" y="-99.8" font-family="Times,serif" font-size="14.00">SettingsComponent</text> <text text-anchor="middle" x="377" y="-99.8" font-family="Times,serif" font-size="14.00">SettingsComponent</text>
</g> </g>
<!-- SettingsComponent&#45;&gt;SettingsModule --> <!-- SettingsComponent&#45;&gt;SettingsModule -->
<g id="edge2" class="edge"> <g id="edge2" class="edge">
<title>SettingsComponent&#45;&gt;SettingsModule</title> <title>SettingsComponent&#45;&gt;SettingsModule</title>
<path fill="none" stroke="black" d="M87,-122.11C87,-141.34 87,-169 87,-169 87,-169 257.71,-169 257.71,-169"/> <path fill="none" stroke="black" d="M331.05,-122.11C331.05,-122.11 331.05,-140.99 331.05,-140.99"/>
<polygon fill="black" stroke="black" points="257.71,-172.5 267.71,-169 257.71,-165.5 257.71,-172.5"/> <polygon fill="black" stroke="black" points="327.55,-140.99 331.05,-150.99 334.55,-140.99 327.55,-140.99"/>
</g> </g>
<!-- SettingsRoutingModule --> <!-- SettingsRoutingModule -->
<g id="node4" class="node"> <g id="node4" class="node">
<title>SettingsRoutingModule</title> <title>SettingsRoutingModule</title>
<polygon fill="#8dd3c7" stroke="black" points="611.78,-122 608.78,-126 587.78,-126 584.78,-122 462.22,-122 462.22,-86 611.78,-86 611.78,-122"/> <polygon fill="#8dd3c7" stroke="black" points="289.78,-122 286.78,-126 265.78,-126 262.78,-122 140.22,-122 140.22,-86 289.78,-86 289.78,-122"/>
<text text-anchor="middle" x="537" y="-99.8" font-family="Times,serif" font-size="14.00">SettingsRoutingModule</text> <text text-anchor="middle" x="215" y="-99.8" font-family="Times,serif" font-size="14.00">SettingsRoutingModule</text>
</g> </g>
<!-- SettingsRoutingModule&#45;&gt;SettingsModule --> <!-- SettingsRoutingModule&#45;&gt;SettingsModule -->
<g id="edge3" class="edge"> <g id="edge3" class="edge">
<title>SettingsRoutingModule&#45;&gt;SettingsModule</title> <title>SettingsRoutingModule&#45;&gt;SettingsModule</title>
<path fill="none" stroke="black" d="M537,-122.11C537,-141.34 537,-169 537,-169 537,-169 382.25,-169 382.25,-169"/> <path fill="none" stroke="black" d="M266.78,-122.11C266.78,-122.11 266.78,-140.99 266.78,-140.99"/>
<polygon fill="black" stroke="black" points="382.25,-165.5 372.25,-169 382.25,-172.5 382.25,-165.5"/> <polygon fill="black" stroke="black" points="263.28,-140.99 266.78,-150.99 270.28,-140.99 263.28,-140.99"/>
</g> </g>
<!-- SharedModule --> <!-- SharedModule -->
<g id="node5" class="node"> <g id="node5" class="node">
<title>SharedModule</title> <title>SharedModule</title>
<polygon fill="#8dd3c7" stroke="black" points="444.42,-122 441.42,-126 420.42,-126 417.42,-122 345.58,-122 345.58,-86 444.42,-86 444.42,-122"/> <polygon fill="#8dd3c7" stroke="black" points="122.42,-122 119.42,-126 98.42,-126 95.42,-122 23.58,-122 23.58,-86 122.42,-86 122.42,-122"/>
<text text-anchor="middle" x="395" y="-99.8" font-family="Times,serif" font-size="14.00">SharedModule</text> <text text-anchor="middle" x="73" y="-99.8" font-family="Times,serif" font-size="14.00">SharedModule</text>
</g> </g>
<!-- SharedModule&#45;&gt;SettingsModule --> <!-- SharedModule&#45;&gt;SettingsModule -->
<g id="edge4" class="edge"> <g id="edge4" class="edge">
<title>SharedModule&#45;&gt;SettingsModule</title> <title>SharedModule&#45;&gt;SettingsModule</title>
<path fill="none" stroke="black" d="M359.06,-122.11C359.06,-122.11 359.06,-140.99 359.06,-140.99"/> <path fill="none" stroke="black" d="M73,-122.11C73,-141.34 73,-169 73,-169 73,-169 233.72,-169 233.72,-169"/>
<polygon fill="black" stroke="black" points="355.56,-140.99 359.06,-150.99 362.56,-140.99 355.56,-140.99"/> <polygon fill="black" stroke="black" points="233.72,-172.5 243.72,-169 233.72,-165.5 233.72,-172.5"/>
</g> </g>
</g> </g>
</svg> </svg>
@ -202,22 +202,21 @@ import { CommonModule } from &#x27;@angular/common&#x27;;
import { SettingsRoutingModule } from &#x27;@pages/settings/settings-routing.module&#x27;; import { SettingsRoutingModule } from &#x27;@pages/settings/settings-routing.module&#x27;;
import { SettingsComponent } from &#x27;@pages/settings/settings.component&#x27;; import { SettingsComponent } from &#x27;@pages/settings/settings.component&#x27;;
import {SharedModule} from &#x27;@app/shared/shared.module&#x27;; import { SharedModule } from &#x27;@app/shared/shared.module&#x27;;
import { OrganizationComponent } from &#x27;@pages/settings/organization/organization.component&#x27;; import { OrganizationComponent } from &#x27;@pages/settings/organization/organization.component&#x27;;
import {MatTableModule} from &#x27;@angular/material/table&#x27;; import { MatTableModule } from &#x27;@angular/material/table&#x27;;
import {MatSortModule} from &#x27;@angular/material/sort&#x27;; import { MatSortModule } from &#x27;@angular/material/sort&#x27;;
import {MatPaginatorModule} from &#x27;@angular/material/paginator&#x27;; import { MatPaginatorModule } from &#x27;@angular/material/paginator&#x27;;
import {MatInputModule} from &#x27;@angular/material/input&#x27;; import { MatInputModule } from &#x27;@angular/material/input&#x27;;
import {MatFormFieldModule} from &#x27;@angular/material/form-field&#x27;; import { MatFormFieldModule } from &#x27;@angular/material/form-field&#x27;;
import {MatButtonModule} from &#x27;@angular/material/button&#x27;; import { MatButtonModule } from &#x27;@angular/material/button&#x27;;
import {MatIconModule} from &#x27;@angular/material/icon&#x27;; import { MatIconModule } from &#x27;@angular/material/icon&#x27;;
import {MatCardModule} from &#x27;@angular/material/card&#x27;; import { MatCardModule } from &#x27;@angular/material/card&#x27;;
import {MatRadioModule} from &#x27;@angular/material/radio&#x27;; import { MatRadioModule } from &#x27;@angular/material/radio&#x27;;
import {MatCheckboxModule} from &#x27;@angular/material/checkbox&#x27;; import { MatCheckboxModule } from &#x27;@angular/material/checkbox&#x27;;
import {MatSelectModule} from &#x27;@angular/material/select&#x27;; import { MatSelectModule } from &#x27;@angular/material/select&#x27;;
import {MatMenuModule} from &#x27;@angular/material/menu&#x27;; import { MatMenuModule } from &#x27;@angular/material/menu&#x27;;
import {ReactiveFormsModule} from &#x27;@angular/forms&#x27;; import { ReactiveFormsModule } from &#x27;@angular/forms&#x27;;
@NgModule({ @NgModule({
declarations: [SettingsComponent, OrganizationComponent], declarations: [SettingsComponent, OrganizationComponent],
@ -237,10 +236,10 @@ import {ReactiveFormsModule} from &#x27;@angular/forms&#x27;;
MatCheckboxModule, MatCheckboxModule,
MatSelectModule, MatSelectModule,
MatMenuModule, MatMenuModule,
ReactiveFormsModule ReactiveFormsModule,
] ],
}) })
export class SettingsModule { } export class SettingsModule {}
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -24,67 +24,67 @@
<title>cluster_SettingsModule</title> <title>cluster_SettingsModule</title>
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-195 628,-195 628,-70 8,-70"/> <polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-195 628,-195 628,-70 8,-70"/>
</g> </g>
<g id="clust5" class="cluster">
<title>cluster_SettingsModule_imports</title>
<polygon fill="none" stroke="black" points="338,-78 338,-130 620,-130 620,-78 338,-78"/>
</g>
<g id="clust2" class="cluster"> <g id="clust2" class="cluster">
<title>cluster_SettingsModule_declarations</title> <title>cluster_SettingsModule_declarations</title>
<polygon fill="none" stroke="black" points="16,-78 16,-130 330,-130 330,-78 16,-78"/> <polygon fill="none" stroke="black" points="306,-78 306,-130 620,-130 620,-78 306,-78"/>
</g>
<g id="clust5" class="cluster">
<title>cluster_SettingsModule_imports</title>
<polygon fill="none" stroke="black" points="16,-78 16,-130 298,-130 298,-78 16,-78"/>
</g> </g>
<!-- OrganizationComponent --> <!-- OrganizationComponent -->
<g id="node1" class="node"> <g id="node1" class="node">
<title>OrganizationComponent</title> <title>OrganizationComponent</title>
<polygon fill="#ffffb3" stroke="black" points="322.42,-122 167.58,-122 167.58,-86 322.42,-86 322.42,-122"/> <polygon fill="#ffffb3" stroke="black" points="612.42,-122 457.58,-122 457.58,-86 612.42,-86 612.42,-122"/>
<text text-anchor="middle" x="245" y="-99.8" font-family="Times,serif" font-size="14.00">OrganizationComponent</text> <text text-anchor="middle" x="535" y="-99.8" font-family="Times,serif" font-size="14.00">OrganizationComponent</text>
</g> </g>
<!-- SettingsModule --> <!-- SettingsModule -->
<g id="node3" class="node"> <g id="node3" class="node">
<title>SettingsModule</title> <title>SettingsModule</title>
<polygon fill="#8dd3c7" stroke="black" points="372.16,-187 369.16,-191 348.16,-191 345.16,-187 267.84,-187 267.84,-151 372.16,-151 372.16,-187"/> <polygon fill="#8dd3c7" stroke="black" points="348.16,-187 345.16,-191 324.16,-191 321.16,-187 243.84,-187 243.84,-151 348.16,-151 348.16,-187"/>
<text text-anchor="middle" x="320" y="-164.8" font-family="Times,serif" font-size="14.00">SettingsModule</text> <text text-anchor="middle" x="296" y="-164.8" font-family="Times,serif" font-size="14.00">SettingsModule</text>
</g> </g>
<!-- OrganizationComponent&#45;&gt;SettingsModule --> <!-- OrganizationComponent&#45;&gt;SettingsModule -->
<g id="edge1" class="edge"> <g id="edge1" class="edge">
<title>OrganizationComponent&#45;&gt;SettingsModule</title> <title>OrganizationComponent&#45;&gt;SettingsModule</title>
<path fill="none" stroke="black" d="M294.94,-122.11C294.94,-122.11 294.94,-140.99 294.94,-140.99"/> <path fill="none" stroke="black" d="M535,-122.11C535,-141.34 535,-169 535,-169 535,-169 358.45,-169 358.45,-169"/>
<polygon fill="black" stroke="black" points="291.44,-140.99 294.94,-150.99 298.44,-140.99 291.44,-140.99"/> <polygon fill="black" stroke="black" points="358.45,-165.5 348.45,-169 358.45,-172.5 358.45,-165.5"/>
</g> </g>
<!-- SettingsComponent --> <!-- SettingsComponent -->
<g id="node2" class="node"> <g id="node2" class="node">
<title>SettingsComponent</title> <title>SettingsComponent</title>
<polygon fill="#ffffb3" stroke="black" points="150.45,-122 23.55,-122 23.55,-86 150.45,-86 150.45,-122"/> <polygon fill="#ffffb3" stroke="black" points="440.45,-122 313.55,-122 313.55,-86 440.45,-86 440.45,-122"/>
<text text-anchor="middle" x="87" y="-99.8" font-family="Times,serif" font-size="14.00">SettingsComponent</text> <text text-anchor="middle" x="377" y="-99.8" font-family="Times,serif" font-size="14.00">SettingsComponent</text>
</g> </g>
<!-- SettingsComponent&#45;&gt;SettingsModule --> <!-- SettingsComponent&#45;&gt;SettingsModule -->
<g id="edge2" class="edge"> <g id="edge2" class="edge">
<title>SettingsComponent&#45;&gt;SettingsModule</title> <title>SettingsComponent&#45;&gt;SettingsModule</title>
<path fill="none" stroke="black" d="M87,-122.11C87,-141.34 87,-169 87,-169 87,-169 257.71,-169 257.71,-169"/> <path fill="none" stroke="black" d="M331.05,-122.11C331.05,-122.11 331.05,-140.99 331.05,-140.99"/>
<polygon fill="black" stroke="black" points="257.71,-172.5 267.71,-169 257.71,-165.5 257.71,-172.5"/> <polygon fill="black" stroke="black" points="327.55,-140.99 331.05,-150.99 334.55,-140.99 327.55,-140.99"/>
</g> </g>
<!-- SettingsRoutingModule --> <!-- SettingsRoutingModule -->
<g id="node4" class="node"> <g id="node4" class="node">
<title>SettingsRoutingModule</title> <title>SettingsRoutingModule</title>
<polygon fill="#8dd3c7" stroke="black" points="611.78,-122 608.78,-126 587.78,-126 584.78,-122 462.22,-122 462.22,-86 611.78,-86 611.78,-122"/> <polygon fill="#8dd3c7" stroke="black" points="289.78,-122 286.78,-126 265.78,-126 262.78,-122 140.22,-122 140.22,-86 289.78,-86 289.78,-122"/>
<text text-anchor="middle" x="537" y="-99.8" font-family="Times,serif" font-size="14.00">SettingsRoutingModule</text> <text text-anchor="middle" x="215" y="-99.8" font-family="Times,serif" font-size="14.00">SettingsRoutingModule</text>
</g> </g>
<!-- SettingsRoutingModule&#45;&gt;SettingsModule --> <!-- SettingsRoutingModule&#45;&gt;SettingsModule -->
<g id="edge3" class="edge"> <g id="edge3" class="edge">
<title>SettingsRoutingModule&#45;&gt;SettingsModule</title> <title>SettingsRoutingModule&#45;&gt;SettingsModule</title>
<path fill="none" stroke="black" d="M537,-122.11C537,-141.34 537,-169 537,-169 537,-169 382.25,-169 382.25,-169"/> <path fill="none" stroke="black" d="M266.78,-122.11C266.78,-122.11 266.78,-140.99 266.78,-140.99"/>
<polygon fill="black" stroke="black" points="382.25,-165.5 372.25,-169 382.25,-172.5 382.25,-165.5"/> <polygon fill="black" stroke="black" points="263.28,-140.99 266.78,-150.99 270.28,-140.99 263.28,-140.99"/>
</g> </g>
<!-- SharedModule --> <!-- SharedModule -->
<g id="node5" class="node"> <g id="node5" class="node">
<title>SharedModule</title> <title>SharedModule</title>
<polygon fill="#8dd3c7" stroke="black" points="444.42,-122 441.42,-126 420.42,-126 417.42,-122 345.58,-122 345.58,-86 444.42,-86 444.42,-122"/> <polygon fill="#8dd3c7" stroke="black" points="122.42,-122 119.42,-126 98.42,-126 95.42,-122 23.58,-122 23.58,-86 122.42,-86 122.42,-122"/>
<text text-anchor="middle" x="395" y="-99.8" font-family="Times,serif" font-size="14.00">SharedModule</text> <text text-anchor="middle" x="73" y="-99.8" font-family="Times,serif" font-size="14.00">SharedModule</text>
</g> </g>
<!-- SharedModule&#45;&gt;SettingsModule --> <!-- SharedModule&#45;&gt;SettingsModule -->
<g id="edge4" class="edge"> <g id="edge4" class="edge">
<title>SharedModule&#45;&gt;SettingsModule</title> <title>SharedModule&#45;&gt;SettingsModule</title>
<path fill="none" stroke="black" d="M359.06,-122.11C359.06,-122.11 359.06,-140.99 359.06,-140.99"/> <path fill="none" stroke="black" d="M73,-122.11C73,-141.34 73,-169 73,-169 73,-169 233.72,-169 233.72,-169"/>
<polygon fill="black" stroke="black" points="355.56,-140.99 359.06,-150.99 362.56,-140.99 355.56,-140.99"/> <polygon fill="black" stroke="black" points="233.72,-172.5 243.72,-169 233.72,-165.5 233.72,-172.5"/>
</g> </g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -74,19 +74,19 @@
import { Routes, RouterModule } from &#x27;@angular/router&#x27;; import { Routes, RouterModule } from &#x27;@angular/router&#x27;;
import { SettingsComponent } from &#x27;@pages/settings/settings.component&#x27;; import { SettingsComponent } from &#x27;@pages/settings/settings.component&#x27;;
import {OrganizationComponent} from &#x27;@pages/settings/organization/organization.component&#x27;; import { OrganizationComponent } from &#x27;@pages/settings/organization/organization.component&#x27;;
const routes: Routes &#x3D; [ const routes: Routes &#x3D; [
{ path: &#x27;&#x27;, component: SettingsComponent }, { path: &#x27;&#x27;, component: SettingsComponent },
{ path: &#x27;organization&#x27;, component: OrganizationComponent }, { path: &#x27;organization&#x27;, component: OrganizationComponent },
{ path: &#x27;**&#x27;, redirectTo: &#x27;&#x27;, pathMatch: &#x27;full&#x27; } { path: &#x27;**&#x27;, redirectTo: &#x27;&#x27;, pathMatch: &#x27;full&#x27; },
]; ];
@NgModule({ @NgModule({
imports: [RouterModule.forChild(routes)], imports: [RouterModule.forChild(routes)],
exports: [RouterModule] exports: [RouterModule],
}) })
export class SettingsRoutingModule { } export class SettingsRoutingModule {}
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -45,207 +45,231 @@
<!-- Generated by graphviz version 2.47.0 (20210316.0004) <!-- Generated by graphviz version 2.47.0 (20210316.0004)
--> -->
<!-- Title: dependencies Pages: 1 --> <!-- Title: dependencies Pages: 1 -->
<svg width="1160pt" height="284pt" <svg width="1342pt" height="284pt"
viewBox="0.00 0.00 1160.00 284.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> viewBox="0.00 0.00 1342.00 284.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 280)"> <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 280)">
<title>dependencies</title> <title>dependencies</title>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-280 1156,-280 1156,4 -4,4"/> <polygon fill="white" stroke="transparent" points="-4,4 -4,-280 1338,-280 1338,4 -4,4"/>
<text text-anchor="start" x="555.01" y="-42.4" font-family="sans-serif" font-weight="bold" font-size="14.00">Legend</text> <text text-anchor="start" x="646.01" y="-42.4" font-family="sans-serif" font-weight="bold" font-size="14.00">Legend</text>
<polygon fill="#ffffb3" stroke="transparent" points="342,-10 342,-30 362,-30 362,-10 342,-10"/> <polygon fill="#ffffb3" stroke="transparent" points="433,-10 433,-30 453,-30 453,-10 433,-10"/>
<text text-anchor="start" x="365.63" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Declarations</text> <text text-anchor="start" x="456.63" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Declarations</text>
<polygon fill="#8dd3c7" stroke="transparent" points="455,-10 455,-30 475,-30 475,-10 455,-10"/> <polygon fill="#8dd3c7" stroke="transparent" points="546,-10 546,-30 566,-30 566,-10 546,-10"/>
<text text-anchor="start" x="478.73" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Module</text> <text text-anchor="start" x="569.73" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Module</text>
<polygon fill="#80b1d3" stroke="transparent" points="541,-10 541,-30 561,-30 561,-10 541,-10"/> <polygon fill="#80b1d3" stroke="transparent" points="632,-10 632,-30 652,-30 652,-10 632,-10"/>
<text text-anchor="start" x="564.78" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Bootstrap</text> <text text-anchor="start" x="655.78" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Bootstrap</text>
<polygon fill="#fdb462" stroke="transparent" points="638,-10 638,-30 658,-30 658,-10 638,-10"/> <polygon fill="#fdb462" stroke="transparent" points="729,-10 729,-30 749,-30 749,-10 729,-10"/>
<text text-anchor="start" x="661.67" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Providers</text> <text text-anchor="start" x="752.67" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Providers</text>
<polygon fill="#fb8072" stroke="transparent" points="734,-10 734,-30 754,-30 754,-10 734,-10"/> <polygon fill="#fb8072" stroke="transparent" points="825,-10 825,-30 845,-30 845,-10 825,-10"/>
<text text-anchor="start" x="757.73" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Exports</text> <text text-anchor="start" x="848.73" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Exports</text>
<g id="clust1" class="cluster"> <g id="clust1" class="cluster">
<title>cluster_SharedModule</title> <title>cluster_SharedModule</title>
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 1144,-268 1144,-70 8,-70"/> <polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 1326,-268 1326,-70 8,-70"/>
</g> </g>
<g id="clust12" class="cluster"> <g id="clust13" class="cluster">
<title>cluster_SharedModule_exports</title> <title>cluster_SharedModule_exports</title>
<polygon fill="none" stroke="black" points="122,-208 122,-260 939,-260 939,-208 122,-208"/> <polygon fill="none" stroke="black" points="137,-208 137,-260 1140,-260 1140,-208 137,-208"/>
</g> </g>
<g id="clust2" class="cluster"> <g id="clust2" class="cluster">
<title>cluster_SharedModule_declarations</title> <title>cluster_SharedModule_declarations</title>
<polygon fill="none" stroke="black" points="16,-78 16,-130 1136,-130 1136,-78 16,-78"/> <polygon fill="none" stroke="black" points="16,-78 16,-130 1318,-130 1318,-78 16,-78"/>
</g> </g>
<!-- ErrorDialogComponent --> <!-- ErrorDialogComponent -->
<g id="node1" class="node"> <g id="node1" class="node">
<title>ErrorDialogComponent</title> <title>ErrorDialogComponent</title>
<polygon fill="#ffffb3" stroke="black" points="1128.47,-122 979.53,-122 979.53,-86 1128.47,-86 1128.47,-122"/> <polygon fill="#ffffb3" stroke="black" points="1310.47,-122 1161.53,-122 1161.53,-86 1310.47,-86 1310.47,-122"/>
<text text-anchor="middle" x="1054" y="-99.8" font-family="Times,serif" font-size="14.00">ErrorDialogComponent</text> <text text-anchor="middle" x="1236" y="-99.8" font-family="Times,serif" font-size="14.00">ErrorDialogComponent</text>
</g> </g>
<!-- SharedModule --> <!-- SharedModule -->
<g id="node9" class="node"> <g id="node10" class="node">
<title>SharedModule</title> <title>SharedModule</title>
<polygon fill="#8dd3c7" stroke="black" points="573.42,-187 570.42,-191 549.42,-191 546.42,-187 474.58,-187 474.58,-151 573.42,-151 573.42,-187"/> <polygon fill="#8dd3c7" stroke="black" points="646.42,-187 643.42,-191 622.42,-191 619.42,-187 547.58,-187 547.58,-151 646.42,-151 646.42,-187"/>
<text text-anchor="middle" x="524" y="-164.8" font-family="Times,serif" font-size="14.00">SharedModule</text> <text text-anchor="middle" x="597" y="-164.8" font-family="Times,serif" font-size="14.00">SharedModule</text>
</g> </g>
<!-- ErrorDialogComponent&#45;&gt;SharedModule --> <!-- ErrorDialogComponent&#45;&gt;SharedModule -->
<g id="edge1" class="edge"> <g id="edge1" class="edge">
<title>ErrorDialogComponent&#45;&gt;SharedModule</title> <title>ErrorDialogComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M1054,-122.11C1054,-141.34 1054,-169 1054,-169 1054,-169 583.39,-169 583.39,-169"/> <path fill="none" stroke="black" d="M1236,-122.22C1236,-142.37 1236,-172 1236,-172 1236,-172 656.34,-172 656.34,-172"/>
<polygon fill="black" stroke="black" points="583.39,-165.5 573.39,-169 583.39,-172.5 583.39,-165.5"/> <polygon fill="black" stroke="black" points="656.34,-168.5 646.34,-172 656.34,-175.5 656.34,-168.5"/>
</g> </g>
<!-- FooterComponent --> <!-- FooterComponent -->
<g id="node2" class="node"> <g id="node2" class="node">
<title>FooterComponent</title> <title>FooterComponent</title>
<polygon fill="#ffffb3" stroke="black" points="961.88,-122 844.12,-122 844.12,-86 961.88,-86 961.88,-122"/> <polygon fill="#ffffb3" stroke="black" points="1143.88,-122 1026.12,-122 1026.12,-86 1143.88,-86 1143.88,-122"/>
<text text-anchor="middle" x="903" y="-99.8" font-family="Times,serif" font-size="14.00">FooterComponent</text> <text text-anchor="middle" x="1085" y="-99.8" font-family="Times,serif" font-size="14.00">FooterComponent</text>
</g> </g>
<!-- FooterComponent&#45;&gt;SharedModule --> <!-- FooterComponent&#45;&gt;SharedModule -->
<g id="edge2" class="edge"> <g id="edge2" class="edge">
<title>FooterComponent&#45;&gt;SharedModule</title> <title>FooterComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M887.38,-122.02C887.38,-139.37 887.38,-163 887.38,-163 887.38,-163 583.38,-163 583.38,-163"/> <path fill="none" stroke="black" d="M1078.88,-122.22C1078.88,-140.83 1078.88,-167 1078.88,-167 1078.88,-167 656.3,-167 656.3,-167"/>
<polygon fill="black" stroke="black" points="583.38,-159.5 573.38,-163 583.38,-166.5 583.38,-159.5"/> <polygon fill="black" stroke="black" points="656.3,-163.5 646.3,-167 656.3,-170.5 656.3,-163.5"/>
</g> </g>
<!-- MenuSelectionDirective --> <!-- MenuSelectionDirective -->
<g id="node3" class="node"> <g id="node3" class="node">
<title>MenuSelectionDirective</title> <title>MenuSelectionDirective</title>
<polygon fill="#ffffb3" stroke="black" points="826.34,-122 673.66,-122 673.66,-86 826.34,-86 826.34,-122"/> <polygon fill="#ffffb3" stroke="black" points="1008.34,-122 855.66,-122 855.66,-86 1008.34,-86 1008.34,-122"/>
<text text-anchor="middle" x="750" y="-99.8" font-family="Times,serif" font-size="14.00">MenuSelectionDirective</text> <text text-anchor="middle" x="932" y="-99.8" font-family="Times,serif" font-size="14.00">MenuSelectionDirective</text>
</g> </g>
<!-- MenuSelectionDirective&#45;&gt;SharedModule --> <!-- MenuSelectionDirective&#45;&gt;SharedModule -->
<g id="edge3" class="edge"> <g id="edge3" class="edge">
<title>MenuSelectionDirective&#45;&gt;SharedModule</title> <title>MenuSelectionDirective&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M732.38,-122.24C732.38,-137.57 732.38,-157 732.38,-157 732.38,-157 583.38,-157 583.38,-157"/> <path fill="none" stroke="black" d="M923.88,-122.03C923.88,-139.06 923.88,-162 923.88,-162 923.88,-162 656.29,-162 656.29,-162"/>
<polygon fill="black" stroke="black" points="583.38,-153.5 573.38,-157 583.38,-160.5 583.38,-153.5"/> <polygon fill="black" stroke="black" points="656.29,-158.5 646.29,-162 656.29,-165.5 656.29,-158.5"/>
</g> </g>
<!-- MenuToggleDirective --> <!-- MenuToggleDirective -->
<g id="node4" class="node"> <g id="node4" class="node">
<title>MenuToggleDirective</title> <title>MenuToggleDirective</title>
<polygon fill="#ffffb3" stroke="black" points="655.4,-122 514.6,-122 514.6,-86 655.4,-86 655.4,-122"/> <polygon fill="#ffffb3" stroke="black" points="837.4,-122 696.6,-122 696.6,-86 837.4,-86 837.4,-122"/>
<text text-anchor="middle" x="585" y="-99.8" font-family="Times,serif" font-size="14.00">MenuToggleDirective</text> <text text-anchor="middle" x="767" y="-99.8" font-family="Times,serif" font-size="14.00">MenuToggleDirective</text>
</g> </g>
<!-- MenuToggleDirective&#45;&gt;SharedModule --> <!-- MenuToggleDirective&#45;&gt;SharedModule -->
<g id="edge4" class="edge"> <g id="edge4" class="edge">
<title>MenuToggleDirective&#45;&gt;SharedModule</title> <title>MenuToggleDirective&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M544.01,-122.11C544.01,-122.11 544.01,-140.99 544.01,-140.99"/> <path fill="none" stroke="black" d="M757.41,-122.24C757.41,-137.57 757.41,-157 757.41,-157 757.41,-157 656.44,-157 656.44,-157"/>
<polygon fill="black" stroke="black" points="540.51,-140.99 544.01,-150.99 547.51,-140.99 540.51,-140.99"/> <polygon fill="black" stroke="black" points="656.44,-153.5 646.44,-157 656.44,-160.5 656.44,-153.5"/>
</g>
<!-- NetworkStatusComponent -->
<g id="node5" class="node">
<title>NetworkStatusComponent</title>
<polygon fill="#ffffb3" stroke="black" points="679.04,-122 514.96,-122 514.96,-86 679.04,-86 679.04,-122"/>
<text text-anchor="middle" x="597" y="-99.8" font-family="Times,serif" font-size="14.00">NetworkStatusComponent</text>
</g>
<!-- NetworkStatusComponent&#45;&gt;SharedModule -->
<g id="edge5" class="edge">
<title>NetworkStatusComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M597,-122.11C597,-122.11 597,-140.99 597,-140.99"/>
<polygon fill="black" stroke="black" points="593.5,-140.99 597,-150.99 600.5,-140.99 593.5,-140.99"/>
</g> </g>
<!-- SafePipe --> <!-- SafePipe -->
<g id="node5" class="node"> <g id="node6" class="node">
<title>SafePipe</title> <title>SafePipe</title>
<polygon fill="#ffffb3" stroke="black" points="496.76,-122 431.24,-122 431.24,-86 496.76,-86 496.76,-122"/> <polygon fill="#ffffb3" stroke="black" points="496.76,-122 431.24,-122 431.24,-86 496.76,-86 496.76,-122"/>
<text text-anchor="middle" x="464" y="-99.8" font-family="Times,serif" font-size="14.00">SafePipe</text> <text text-anchor="middle" x="464" y="-99.8" font-family="Times,serif" font-size="14.00">SafePipe</text>
</g> </g>
<!-- SafePipe&#45;&gt;SharedModule --> <!-- SafePipe&#45;&gt;SharedModule -->
<g id="edge5" class="edge"> <g id="edge6" class="edge">
<title>SafePipe&#45;&gt;SharedModule</title> <title>SafePipe&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M485.83,-122.11C485.83,-122.11 485.83,-140.99 485.83,-140.99"/> <path fill="none" stroke="black" d="M464,-122.24C464,-137.57 464,-157 464,-157 464,-157 537.48,-157 537.48,-157"/>
<polygon fill="black" stroke="black" points="482.33,-140.99 485.83,-150.99 489.33,-140.99 482.33,-140.99"/> <polygon fill="black" stroke="black" points="537.48,-160.5 547.48,-157 537.48,-153.5 537.48,-160.5"/>
</g> </g>
<!-- SidebarComponent --> <!-- SidebarComponent -->
<g id="node6" class="node"> <g id="node7" class="node">
<title>SidebarComponent</title> <title>SidebarComponent</title>
<polygon fill="#ffffb3" stroke="black" points="413.1,-122 288.9,-122 288.9,-86 413.1,-86 413.1,-122"/> <polygon fill="#ffffb3" stroke="black" points="413.1,-122 288.9,-122 288.9,-86 413.1,-86 413.1,-122"/>
<text text-anchor="middle" x="351" y="-99.8" font-family="Times,serif" font-size="14.00">SidebarComponent</text> <text text-anchor="middle" x="351" y="-99.8" font-family="Times,serif" font-size="14.00">SidebarComponent</text>
</g> </g>
<!-- SidebarComponent&#45;&gt;SharedModule --> <!-- SidebarComponent&#45;&gt;SharedModule -->
<g id="edge6" class="edge"> <g id="edge7" class="edge">
<title>SidebarComponent&#45;&gt;SharedModule</title> <title>SidebarComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M407.62,-122.24C407.62,-137.57 407.62,-157 407.62,-157 407.62,-157 464.65,-157 464.65,-157"/> <path fill="none" stroke="black" d="M406.15,-122.03C406.15,-139.06 406.15,-162 406.15,-162 406.15,-162 537.35,-162 537.35,-162"/>
<polygon fill="black" stroke="black" points="464.65,-160.5 474.65,-157 464.65,-153.5 464.65,-160.5"/> <polygon fill="black" stroke="black" points="537.35,-165.5 547.35,-162 537.35,-158.5 537.35,-165.5"/>
</g> </g>
<!-- TokenRatioPipe --> <!-- TokenRatioPipe -->
<g id="node7" class="node"> <g id="node8" class="node">
<title>TokenRatioPipe</title> <title>TokenRatioPipe</title>
<polygon fill="#ffffb3" stroke="black" points="270.49,-122 163.51,-122 163.51,-86 270.49,-86 270.49,-122"/> <polygon fill="#ffffb3" stroke="black" points="270.49,-122 163.51,-122 163.51,-86 270.49,-86 270.49,-122"/>
<text text-anchor="middle" x="217" y="-99.8" font-family="Times,serif" font-size="14.00">TokenRatioPipe</text> <text text-anchor="middle" x="217" y="-99.8" font-family="Times,serif" font-size="14.00">TokenRatioPipe</text>
</g> </g>
<!-- TokenRatioPipe&#45;&gt;SharedModule --> <!-- TokenRatioPipe&#45;&gt;SharedModule -->
<g id="edge7" class="edge"> <g id="edge8" class="edge">
<title>TokenRatioPipe&#45;&gt;SharedModule</title> <title>TokenRatioPipe&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M263.06,-122.02C263.06,-139.37 263.06,-163 263.06,-163 263.06,-163 464.61,-163 464.61,-163"/> <path fill="none" stroke="black" d="M234.83,-122.22C234.83,-140.83 234.83,-167 234.83,-167 234.83,-167 537.78,-167 537.78,-167"/>
<polygon fill="black" stroke="black" points="464.61,-166.5 474.61,-163 464.61,-159.5 464.61,-166.5"/> <polygon fill="black" stroke="black" points="537.78,-170.5 547.78,-167 537.78,-163.5 537.78,-170.5"/>
</g> </g>
<!-- TopbarComponent --> <!-- TopbarComponent -->
<g id="node8" class="node"> <g id="node9" class="node">
<title>TopbarComponent</title> <title>TopbarComponent</title>
<polygon fill="#ffffb3" stroke="black" points="145.76,-122 24.24,-122 24.24,-86 145.76,-86 145.76,-122"/> <polygon fill="#ffffb3" stroke="black" points="145.76,-122 24.24,-122 24.24,-86 145.76,-86 145.76,-122"/>
<text text-anchor="middle" x="85" y="-99.8" font-family="Times,serif" font-size="14.00">TopbarComponent</text> <text text-anchor="middle" x="85" y="-99.8" font-family="Times,serif" font-size="14.00">TopbarComponent</text>
</g> </g>
<!-- TopbarComponent&#45;&gt;SharedModule --> <!-- TopbarComponent&#45;&gt;SharedModule -->
<g id="edge8" class="edge"> <g id="edge9" class="edge">
<title>TopbarComponent&#45;&gt;SharedModule</title> <title>TopbarComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M138.12,-122.11C138.12,-141.34 138.12,-169 138.12,-169 138.12,-169 464.74,-169 464.74,-169"/> <path fill="none" stroke="black" d="M84.74,-122.22C84.74,-142.37 84.74,-172 84.74,-172 84.74,-172 537.42,-172 537.42,-172"/>
<polygon fill="black" stroke="black" points="464.74,-172.5 474.74,-169 464.74,-165.5 464.74,-172.5"/> <polygon fill="black" stroke="black" points="537.42,-175.5 547.42,-172 537.42,-168.5 537.42,-175.5"/>
</g> </g>
<!-- FooterComponent --> <!-- FooterComponent -->
<g id="node10" class="node"> <g id="node11" class="node">
<title>FooterComponent </title> <title>FooterComponent </title>
<polygon fill="#fb8072" stroke="black" points="930.88,-252 809.12,-252 809.12,-216 930.88,-216 930.88,-252"/> <polygon fill="#fb8072" stroke="black" points="1131.88,-252 1010.12,-252 1010.12,-216 1131.88,-216 1131.88,-252"/>
<text text-anchor="middle" x="870" y="-229.8" font-family="Times,serif" font-size="14.00">FooterComponent </text> <text text-anchor="middle" x="1071" y="-229.8" font-family="Times,serif" font-size="14.00">FooterComponent </text>
</g> </g>
<!-- SharedModule&#45;&gt;FooterComponent --> <!-- SharedModule&#45;&gt;FooterComponent -->
<g id="edge9" class="edge"> <g id="edge10" class="edge">
<title>SharedModule&#45;&gt;FooterComponent </title> <title>SharedModule&#45;&gt;FooterComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M573.52,-175C657.27,-175 817.86,-175 817.86,-175 817.86,-175 817.86,-205.98 817.86,-205.98"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M646.55,-177C757.89,-177 1018.18,-177 1018.18,-177 1018.18,-177 1018.18,-205.96 1018.18,-205.96"/>
<polygon fill="black" stroke="black" points="814.36,-205.98 817.86,-215.98 821.36,-205.98 814.36,-205.98"/> <polygon fill="black" stroke="black" points="1014.68,-205.96 1018.18,-215.96 1021.68,-205.96 1014.68,-205.96"/>
</g> </g>
<!-- MenuSelectionDirective --> <!-- MenuSelectionDirective -->
<g id="node11" class="node"> <g id="node12" class="node">
<title>MenuSelectionDirective </title> <title>MenuSelectionDirective </title>
<polygon fill="#fb8072" stroke="black" points="791.34,-252 634.66,-252 634.66,-216 791.34,-216 791.34,-252"/> <polygon fill="#fb8072" stroke="black" points="992.34,-252 835.66,-252 835.66,-216 992.34,-216 992.34,-252"/>
<text text-anchor="middle" x="713" y="-229.8" font-family="Times,serif" font-size="14.00">MenuSelectionDirective </text> <text text-anchor="middle" x="914" y="-229.8" font-family="Times,serif" font-size="14.00">MenuSelectionDirective </text>
</g> </g>
<!-- SharedModule&#45;&gt;MenuSelectionDirective --> <!-- SharedModule&#45;&gt;MenuSelectionDirective -->
<g id="edge10" class="edge"> <g id="edge11" class="edge">
<title>SharedModule&#45;&gt;MenuSelectionDirective </title> <title>SharedModule&#45;&gt;MenuSelectionDirective </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M573.22,-181C606.73,-181 645.01,-181 645.01,-181 645.01,-181 645.01,-205.76 645.01,-205.76"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M646.27,-182C718.95,-182 846.39,-182 846.39,-182 846.39,-182 846.39,-205.81 846.39,-205.81"/>
<polygon fill="black" stroke="black" points="641.51,-205.76 645.01,-215.76 648.51,-205.76 641.51,-205.76"/> <polygon fill="black" stroke="black" points="842.89,-205.81 846.39,-215.81 849.89,-205.81 842.89,-205.81"/>
</g>
<!-- NetworkStatusComponent -->
<g id="node13" class="node">
<title>NetworkStatusComponent </title>
<polygon fill="#fb8072" stroke="black" points="818.03,-252 649.97,-252 649.97,-216 818.03,-216 818.03,-252"/>
<text text-anchor="middle" x="734" y="-229.8" font-family="Times,serif" font-size="14.00">NetworkStatusComponent </text>
</g>
<!-- SharedModule&#45;&gt;NetworkStatusComponent -->
<g id="edge12" class="edge">
<title>SharedModule&#45;&gt;NetworkStatusComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M638.92,-187.11C638.92,-206.34 638.92,-234 638.92,-234 638.92,-234 640.01,-234 640.01,-234"/>
<polygon fill="black" stroke="black" points="639.83,-237.5 649.83,-234 639.83,-230.5 639.83,-237.5"/>
</g> </g>
<!-- SafePipe --> <!-- SafePipe -->
<g id="node12" class="node"> <g id="node14" class="node">
<title>SafePipe </title> <title>SafePipe </title>
<polygon fill="#fb8072" stroke="black" points="616.76,-252 547.24,-252 547.24,-216 616.76,-216 616.76,-252"/> <polygon fill="#fb8072" stroke="black" points="631.76,-252 562.24,-252 562.24,-216 631.76,-216 631.76,-252"/>
<text text-anchor="middle" x="582" y="-229.8" font-family="Times,serif" font-size="14.00">SafePipe </text> <text text-anchor="middle" x="597" y="-229.8" font-family="Times,serif" font-size="14.00">SafePipe </text>
</g> </g>
<!-- SharedModule&#45;&gt;SafePipe --> <!-- SharedModule&#45;&gt;SafePipe -->
<g id="edge11" class="edge"> <g id="edge13" class="edge">
<title>SharedModule&#45;&gt;SafePipe </title> <title>SharedModule&#45;&gt;SafePipe </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M560.29,-187.11C560.29,-187.11 560.29,-205.99 560.29,-205.99"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M597,-187.11C597,-187.11 597,-205.99 597,-205.99"/>
<polygon fill="black" stroke="black" points="556.79,-205.99 560.29,-215.99 563.79,-205.99 556.79,-205.99"/> <polygon fill="black" stroke="black" points="593.5,-205.99 597,-215.99 600.5,-205.99 593.5,-205.99"/>
</g> </g>
<!-- SidebarComponent --> <!-- SidebarComponent -->
<g id="node13" class="node"> <g id="node15" class="node">
<title>SidebarComponent </title> <title>SidebarComponent </title>
<polygon fill="#fb8072" stroke="black" points="529.6,-252 402.4,-252 402.4,-216 529.6,-216 529.6,-252"/> <polygon fill="#fb8072" stroke="black" points="544.6,-252 417.4,-252 417.4,-216 544.6,-216 544.6,-252"/>
<text text-anchor="middle" x="466" y="-229.8" font-family="Times,serif" font-size="14.00">SidebarComponent </text> <text text-anchor="middle" x="481" y="-229.8" font-family="Times,serif" font-size="14.00">SidebarComponent </text>
</g> </g>
<!-- SharedModule&#45;&gt;SidebarComponent --> <!-- SharedModule&#45;&gt;SidebarComponent -->
<g id="edge12" class="edge"> <g id="edge14" class="edge">
<title>SharedModule&#45;&gt;SidebarComponent </title> <title>SharedModule&#45;&gt;SidebarComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M502.29,-187.11C502.29,-187.11 502.29,-205.99 502.29,-205.99"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M555.08,-187.11C555.08,-206.34 555.08,-234 555.08,-234 555.08,-234 554.05,-234 554.05,-234"/>
<polygon fill="black" stroke="black" points="498.79,-205.99 502.29,-215.99 505.79,-205.99 498.79,-205.99"/> <polygon fill="black" stroke="black" points="554.78,-230.5 544.78,-234 554.78,-237.5 554.78,-230.5"/>
</g> </g>
<!-- TokenRatioPipe --> <!-- TokenRatioPipe -->
<g id="node14" class="node"> <g id="node16" class="node">
<title>TokenRatioPipe </title> <title>TokenRatioPipe </title>
<polygon fill="#fb8072" stroke="black" points="384.49,-252 273.51,-252 273.51,-216 384.49,-216 384.49,-252"/> <polygon fill="#fb8072" stroke="black" points="399.49,-252 288.51,-252 288.51,-216 399.49,-216 399.49,-252"/>
<text text-anchor="middle" x="329" y="-229.8" font-family="Times,serif" font-size="14.00">TokenRatioPipe </text> <text text-anchor="middle" x="344" y="-229.8" font-family="Times,serif" font-size="14.00">TokenRatioPipe </text>
</g> </g>
<!-- SharedModule&#45;&gt;TokenRatioPipe --> <!-- SharedModule&#45;&gt;TokenRatioPipe -->
<g id="edge13" class="edge"> <g id="edge15" class="edge">
<title>SharedModule&#45;&gt;TokenRatioPipe </title> <title>SharedModule&#45;&gt;TokenRatioPipe </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M474.76,-181C419.24,-181 336.6,-181 336.6,-181 336.6,-181 336.6,-205.76 336.6,-205.76"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M547.64,-182C474.04,-182 344.1,-182 344.1,-182 344.1,-182 344.1,-205.81 344.1,-205.81"/>
<polygon fill="black" stroke="black" points="333.1,-205.76 336.6,-215.76 340.1,-205.76 333.1,-205.76"/> <polygon fill="black" stroke="black" points="340.6,-205.81 344.1,-215.81 347.6,-205.81 340.6,-205.81"/>
</g> </g>
<!-- TopbarComponent --> <!-- TopbarComponent -->
<g id="node15" class="node"> <g id="node17" class="node">
<title>TopbarComponent </title> <title>TopbarComponent </title>
<polygon fill="#fb8072" stroke="black" points="255.76,-252 130.24,-252 130.24,-216 255.76,-216 255.76,-252"/> <polygon fill="#fb8072" stroke="black" points="270.76,-252 145.24,-252 145.24,-216 270.76,-216 270.76,-252"/>
<text text-anchor="middle" x="193" y="-229.8" font-family="Times,serif" font-size="14.00">TopbarComponent </text> <text text-anchor="middle" x="208" y="-229.8" font-family="Times,serif" font-size="14.00">TopbarComponent </text>
</g> </g>
<!-- SharedModule&#45;&gt;TopbarComponent --> <!-- SharedModule&#45;&gt;TopbarComponent -->
<g id="edge14" class="edge"> <g id="edge16" class="edge">
<title>SharedModule&#45;&gt;TopbarComponent </title> <title>SharedModule&#45;&gt;TopbarComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M474.52,-175C385.98,-175 209.57,-175 209.57,-175 209.57,-175 209.57,-205.98 209.57,-205.98"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M547.42,-177C440.77,-177 199.17,-177 199.17,-177 199.17,-177 199.17,-205.96 199.17,-205.96"/>
<polygon fill="black" stroke="black" points="206.07,-205.98 209.57,-215.98 213.07,-205.98 206.07,-205.98"/> <polygon fill="black" stroke="black" points="195.67,-205.96 199.17,-215.96 202.67,-205.96 195.67,-205.96"/>
</g> </g>
</g> </g>
</svg> </svg>
@ -301,6 +325,9 @@
<li class="list-group-item"> <li class="list-group-item">
<a href="../directives/MenuToggleDirective.html">MenuToggleDirective</a> <a href="../directives/MenuToggleDirective.html">MenuToggleDirective</a>
</li> </li>
<li class="list-group-item">
<a href="../components/NetworkStatusComponent.html">NetworkStatusComponent</a>
</li>
<li class="list-group-item"> <li class="list-group-item">
<a href="../pipes/SafePipe.html">SafePipe</a> <a href="../pipes/SafePipe.html">SafePipe</a>
</li> </li>
@ -325,6 +352,9 @@
<li class="list-group-item"> <li class="list-group-item">
<a href="../directives/MenuSelectionDirective.html">MenuSelectionDirective</a> <a href="../directives/MenuSelectionDirective.html">MenuSelectionDirective</a>
</li> </li>
<li class="list-group-item">
<a href="../components/NetworkStatusComponent.html">NetworkStatusComponent</a>
</li>
<li class="list-group-item"> <li class="list-group-item">
<a href="../pipes/SafePipe.html">SafePipe</a> <a href="../pipes/SafePipe.html">SafePipe</a>
</li> </li>
@ -354,14 +384,13 @@ import { FooterComponent } from &#x27;@app/shared/footer/footer.component&#x27;;
import { SidebarComponent } from &#x27;@app/shared/sidebar/sidebar.component&#x27;; import { SidebarComponent } from &#x27;@app/shared/sidebar/sidebar.component&#x27;;
import { MenuSelectionDirective } from &#x27;@app/shared/_directives/menu-selection.directive&#x27;; import { MenuSelectionDirective } from &#x27;@app/shared/_directives/menu-selection.directive&#x27;;
import { MenuToggleDirective } from &#x27;@app/shared/_directives/menu-toggle.directive&#x27;; import { MenuToggleDirective } from &#x27;@app/shared/_directives/menu-toggle.directive&#x27;;
import {RouterModule} from &#x27;@angular/router&#x27;; import { RouterModule } from &#x27;@angular/router&#x27;;
import {MatIconModule} from &#x27;@angular/material/icon&#x27;; import { MatIconModule } from &#x27;@angular/material/icon&#x27;;
import {TokenRatioPipe} from &#x27;@app/shared/_pipes/token-ratio.pipe&#x27;; import { TokenRatioPipe } from &#x27;@app/shared/_pipes/token-ratio.pipe&#x27;;
import { ErrorDialogComponent } from &#x27;@app/shared/error-dialog/error-dialog.component&#x27;; import { ErrorDialogComponent } from &#x27;@app/shared/error-dialog/error-dialog.component&#x27;;
import {MatDialogModule} from &#x27;@angular/material/dialog&#x27;; import { MatDialogModule } from &#x27;@angular/material/dialog&#x27;;
import { SafePipe } from &#x27;@app/shared/_pipes/safe.pipe&#x27;; import { SafePipe } from &#x27;@app/shared/_pipes/safe.pipe&#x27;;
import { NetworkStatusComponent } from &#x27;./network-status/network-status.component&#x27;;
@NgModule({ @NgModule({
declarations: [ declarations: [
@ -372,7 +401,8 @@ import { SafePipe } from &#x27;@app/shared/_pipes/safe.pipe&#x27;;
MenuToggleDirective, MenuToggleDirective,
TokenRatioPipe, TokenRatioPipe,
ErrorDialogComponent, ErrorDialogComponent,
SafePipe SafePipe,
NetworkStatusComponent,
], ],
exports: [ exports: [
TopbarComponent, TopbarComponent,
@ -380,16 +410,12 @@ import { SafePipe } from &#x27;@app/shared/_pipes/safe.pipe&#x27;;
SidebarComponent, SidebarComponent,
MenuSelectionDirective, MenuSelectionDirective,
TokenRatioPipe, TokenRatioPipe,
SafePipe SafePipe,
NetworkStatusComponent,
], ],
imports: [ imports: [CommonModule, RouterModule, MatIconModule, MatDialogModule],
CommonModule,
RouterModule,
MatIconModule,
MatDialogModule,
]
}) })
export class SharedModule { } export class SharedModule {}
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -4,207 +4,231 @@
<!-- Generated by graphviz version 2.47.0 (20210316.0004) <!-- Generated by graphviz version 2.47.0 (20210316.0004)
--> -->
<!-- Title: dependencies Pages: 1 --> <!-- Title: dependencies Pages: 1 -->
<svg width="1160pt" height="284pt" <svg width="1342pt" height="284pt"
viewBox="0.00 0.00 1160.00 284.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> viewBox="0.00 0.00 1342.00 284.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 280)"> <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 280)">
<title>dependencies</title> <title>dependencies</title>
<polygon fill="white" stroke="transparent" points="-4,4 -4,-280 1156,-280 1156,4 -4,4"/> <polygon fill="white" stroke="transparent" points="-4,4 -4,-280 1338,-280 1338,4 -4,4"/>
<text text-anchor="start" x="555.01" y="-42.4" font-family="sans-serif" font-weight="bold" font-size="14.00">Legend</text> <text text-anchor="start" x="646.01" y="-42.4" font-family="sans-serif" font-weight="bold" font-size="14.00">Legend</text>
<polygon fill="#ffffb3" stroke="transparent" points="342,-10 342,-30 362,-30 362,-10 342,-10"/> <polygon fill="#ffffb3" stroke="transparent" points="433,-10 433,-30 453,-30 453,-10 433,-10"/>
<text text-anchor="start" x="365.63" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Declarations</text> <text text-anchor="start" x="456.63" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Declarations</text>
<polygon fill="#8dd3c7" stroke="transparent" points="455,-10 455,-30 475,-30 475,-10 455,-10"/> <polygon fill="#8dd3c7" stroke="transparent" points="546,-10 546,-30 566,-30 566,-10 546,-10"/>
<text text-anchor="start" x="478.73" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Module</text> <text text-anchor="start" x="569.73" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Module</text>
<polygon fill="#80b1d3" stroke="transparent" points="541,-10 541,-30 561,-30 561,-10 541,-10"/> <polygon fill="#80b1d3" stroke="transparent" points="632,-10 632,-30 652,-30 652,-10 632,-10"/>
<text text-anchor="start" x="564.78" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Bootstrap</text> <text text-anchor="start" x="655.78" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Bootstrap</text>
<polygon fill="#fdb462" stroke="transparent" points="638,-10 638,-30 658,-30 658,-10 638,-10"/> <polygon fill="#fdb462" stroke="transparent" points="729,-10 729,-30 749,-30 749,-10 729,-10"/>
<text text-anchor="start" x="661.67" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Providers</text> <text text-anchor="start" x="752.67" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Providers</text>
<polygon fill="#fb8072" stroke="transparent" points="734,-10 734,-30 754,-30 754,-10 734,-10"/> <polygon fill="#fb8072" stroke="transparent" points="825,-10 825,-30 845,-30 845,-10 825,-10"/>
<text text-anchor="start" x="757.73" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Exports</text> <text text-anchor="start" x="848.73" y="-15.4" font-family="sans-serif" font-size="14.00"> &#160;Exports</text>
<g id="clust1" class="cluster"> <g id="clust1" class="cluster">
<title>cluster_SharedModule</title> <title>cluster_SharedModule</title>
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 1144,-268 1144,-70 8,-70"/> <polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 1326,-268 1326,-70 8,-70"/>
</g> </g>
<g id="clust12" class="cluster"> <g id="clust13" class="cluster">
<title>cluster_SharedModule_exports</title> <title>cluster_SharedModule_exports</title>
<polygon fill="none" stroke="black" points="122,-208 122,-260 939,-260 939,-208 122,-208"/> <polygon fill="none" stroke="black" points="137,-208 137,-260 1140,-260 1140,-208 137,-208"/>
</g> </g>
<g id="clust2" class="cluster"> <g id="clust2" class="cluster">
<title>cluster_SharedModule_declarations</title> <title>cluster_SharedModule_declarations</title>
<polygon fill="none" stroke="black" points="16,-78 16,-130 1136,-130 1136,-78 16,-78"/> <polygon fill="none" stroke="black" points="16,-78 16,-130 1318,-130 1318,-78 16,-78"/>
</g> </g>
<!-- ErrorDialogComponent --> <!-- ErrorDialogComponent -->
<g id="node1" class="node"> <g id="node1" class="node">
<title>ErrorDialogComponent</title> <title>ErrorDialogComponent</title>
<polygon fill="#ffffb3" stroke="black" points="1128.47,-122 979.53,-122 979.53,-86 1128.47,-86 1128.47,-122"/> <polygon fill="#ffffb3" stroke="black" points="1310.47,-122 1161.53,-122 1161.53,-86 1310.47,-86 1310.47,-122"/>
<text text-anchor="middle" x="1054" y="-99.8" font-family="Times,serif" font-size="14.00">ErrorDialogComponent</text> <text text-anchor="middle" x="1236" y="-99.8" font-family="Times,serif" font-size="14.00">ErrorDialogComponent</text>
</g> </g>
<!-- SharedModule --> <!-- SharedModule -->
<g id="node9" class="node"> <g id="node10" class="node">
<title>SharedModule</title> <title>SharedModule</title>
<polygon fill="#8dd3c7" stroke="black" points="573.42,-187 570.42,-191 549.42,-191 546.42,-187 474.58,-187 474.58,-151 573.42,-151 573.42,-187"/> <polygon fill="#8dd3c7" stroke="black" points="646.42,-187 643.42,-191 622.42,-191 619.42,-187 547.58,-187 547.58,-151 646.42,-151 646.42,-187"/>
<text text-anchor="middle" x="524" y="-164.8" font-family="Times,serif" font-size="14.00">SharedModule</text> <text text-anchor="middle" x="597" y="-164.8" font-family="Times,serif" font-size="14.00">SharedModule</text>
</g> </g>
<!-- ErrorDialogComponent&#45;&gt;SharedModule --> <!-- ErrorDialogComponent&#45;&gt;SharedModule -->
<g id="edge1" class="edge"> <g id="edge1" class="edge">
<title>ErrorDialogComponent&#45;&gt;SharedModule</title> <title>ErrorDialogComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M1054,-122.11C1054,-141.34 1054,-169 1054,-169 1054,-169 583.39,-169 583.39,-169"/> <path fill="none" stroke="black" d="M1236,-122.22C1236,-142.37 1236,-172 1236,-172 1236,-172 656.34,-172 656.34,-172"/>
<polygon fill="black" stroke="black" points="583.39,-165.5 573.39,-169 583.39,-172.5 583.39,-165.5"/> <polygon fill="black" stroke="black" points="656.34,-168.5 646.34,-172 656.34,-175.5 656.34,-168.5"/>
</g> </g>
<!-- FooterComponent --> <!-- FooterComponent -->
<g id="node2" class="node"> <g id="node2" class="node">
<title>FooterComponent</title> <title>FooterComponent</title>
<polygon fill="#ffffb3" stroke="black" points="961.88,-122 844.12,-122 844.12,-86 961.88,-86 961.88,-122"/> <polygon fill="#ffffb3" stroke="black" points="1143.88,-122 1026.12,-122 1026.12,-86 1143.88,-86 1143.88,-122"/>
<text text-anchor="middle" x="903" y="-99.8" font-family="Times,serif" font-size="14.00">FooterComponent</text> <text text-anchor="middle" x="1085" y="-99.8" font-family="Times,serif" font-size="14.00">FooterComponent</text>
</g> </g>
<!-- FooterComponent&#45;&gt;SharedModule --> <!-- FooterComponent&#45;&gt;SharedModule -->
<g id="edge2" class="edge"> <g id="edge2" class="edge">
<title>FooterComponent&#45;&gt;SharedModule</title> <title>FooterComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M887.38,-122.02C887.38,-139.37 887.38,-163 887.38,-163 887.38,-163 583.38,-163 583.38,-163"/> <path fill="none" stroke="black" d="M1078.88,-122.22C1078.88,-140.83 1078.88,-167 1078.88,-167 1078.88,-167 656.3,-167 656.3,-167"/>
<polygon fill="black" stroke="black" points="583.38,-159.5 573.38,-163 583.38,-166.5 583.38,-159.5"/> <polygon fill="black" stroke="black" points="656.3,-163.5 646.3,-167 656.3,-170.5 656.3,-163.5"/>
</g> </g>
<!-- MenuSelectionDirective --> <!-- MenuSelectionDirective -->
<g id="node3" class="node"> <g id="node3" class="node">
<title>MenuSelectionDirective</title> <title>MenuSelectionDirective</title>
<polygon fill="#ffffb3" stroke="black" points="826.34,-122 673.66,-122 673.66,-86 826.34,-86 826.34,-122"/> <polygon fill="#ffffb3" stroke="black" points="1008.34,-122 855.66,-122 855.66,-86 1008.34,-86 1008.34,-122"/>
<text text-anchor="middle" x="750" y="-99.8" font-family="Times,serif" font-size="14.00">MenuSelectionDirective</text> <text text-anchor="middle" x="932" y="-99.8" font-family="Times,serif" font-size="14.00">MenuSelectionDirective</text>
</g> </g>
<!-- MenuSelectionDirective&#45;&gt;SharedModule --> <!-- MenuSelectionDirective&#45;&gt;SharedModule -->
<g id="edge3" class="edge"> <g id="edge3" class="edge">
<title>MenuSelectionDirective&#45;&gt;SharedModule</title> <title>MenuSelectionDirective&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M732.38,-122.24C732.38,-137.57 732.38,-157 732.38,-157 732.38,-157 583.38,-157 583.38,-157"/> <path fill="none" stroke="black" d="M923.88,-122.03C923.88,-139.06 923.88,-162 923.88,-162 923.88,-162 656.29,-162 656.29,-162"/>
<polygon fill="black" stroke="black" points="583.38,-153.5 573.38,-157 583.38,-160.5 583.38,-153.5"/> <polygon fill="black" stroke="black" points="656.29,-158.5 646.29,-162 656.29,-165.5 656.29,-158.5"/>
</g> </g>
<!-- MenuToggleDirective --> <!-- MenuToggleDirective -->
<g id="node4" class="node"> <g id="node4" class="node">
<title>MenuToggleDirective</title> <title>MenuToggleDirective</title>
<polygon fill="#ffffb3" stroke="black" points="655.4,-122 514.6,-122 514.6,-86 655.4,-86 655.4,-122"/> <polygon fill="#ffffb3" stroke="black" points="837.4,-122 696.6,-122 696.6,-86 837.4,-86 837.4,-122"/>
<text text-anchor="middle" x="585" y="-99.8" font-family="Times,serif" font-size="14.00">MenuToggleDirective</text> <text text-anchor="middle" x="767" y="-99.8" font-family="Times,serif" font-size="14.00">MenuToggleDirective</text>
</g> </g>
<!-- MenuToggleDirective&#45;&gt;SharedModule --> <!-- MenuToggleDirective&#45;&gt;SharedModule -->
<g id="edge4" class="edge"> <g id="edge4" class="edge">
<title>MenuToggleDirective&#45;&gt;SharedModule</title> <title>MenuToggleDirective&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M544.01,-122.11C544.01,-122.11 544.01,-140.99 544.01,-140.99"/> <path fill="none" stroke="black" d="M757.41,-122.24C757.41,-137.57 757.41,-157 757.41,-157 757.41,-157 656.44,-157 656.44,-157"/>
<polygon fill="black" stroke="black" points="540.51,-140.99 544.01,-150.99 547.51,-140.99 540.51,-140.99"/> <polygon fill="black" stroke="black" points="656.44,-153.5 646.44,-157 656.44,-160.5 656.44,-153.5"/>
</g>
<!-- NetworkStatusComponent -->
<g id="node5" class="node">
<title>NetworkStatusComponent</title>
<polygon fill="#ffffb3" stroke="black" points="679.04,-122 514.96,-122 514.96,-86 679.04,-86 679.04,-122"/>
<text text-anchor="middle" x="597" y="-99.8" font-family="Times,serif" font-size="14.00">NetworkStatusComponent</text>
</g>
<!-- NetworkStatusComponent&#45;&gt;SharedModule -->
<g id="edge5" class="edge">
<title>NetworkStatusComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M597,-122.11C597,-122.11 597,-140.99 597,-140.99"/>
<polygon fill="black" stroke="black" points="593.5,-140.99 597,-150.99 600.5,-140.99 593.5,-140.99"/>
</g> </g>
<!-- SafePipe --> <!-- SafePipe -->
<g id="node5" class="node"> <g id="node6" class="node">
<title>SafePipe</title> <title>SafePipe</title>
<polygon fill="#ffffb3" stroke="black" points="496.76,-122 431.24,-122 431.24,-86 496.76,-86 496.76,-122"/> <polygon fill="#ffffb3" stroke="black" points="496.76,-122 431.24,-122 431.24,-86 496.76,-86 496.76,-122"/>
<text text-anchor="middle" x="464" y="-99.8" font-family="Times,serif" font-size="14.00">SafePipe</text> <text text-anchor="middle" x="464" y="-99.8" font-family="Times,serif" font-size="14.00">SafePipe</text>
</g> </g>
<!-- SafePipe&#45;&gt;SharedModule --> <!-- SafePipe&#45;&gt;SharedModule -->
<g id="edge5" class="edge"> <g id="edge6" class="edge">
<title>SafePipe&#45;&gt;SharedModule</title> <title>SafePipe&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M485.83,-122.11C485.83,-122.11 485.83,-140.99 485.83,-140.99"/> <path fill="none" stroke="black" d="M464,-122.24C464,-137.57 464,-157 464,-157 464,-157 537.48,-157 537.48,-157"/>
<polygon fill="black" stroke="black" points="482.33,-140.99 485.83,-150.99 489.33,-140.99 482.33,-140.99"/> <polygon fill="black" stroke="black" points="537.48,-160.5 547.48,-157 537.48,-153.5 537.48,-160.5"/>
</g> </g>
<!-- SidebarComponent --> <!-- SidebarComponent -->
<g id="node6" class="node"> <g id="node7" class="node">
<title>SidebarComponent</title> <title>SidebarComponent</title>
<polygon fill="#ffffb3" stroke="black" points="413.1,-122 288.9,-122 288.9,-86 413.1,-86 413.1,-122"/> <polygon fill="#ffffb3" stroke="black" points="413.1,-122 288.9,-122 288.9,-86 413.1,-86 413.1,-122"/>
<text text-anchor="middle" x="351" y="-99.8" font-family="Times,serif" font-size="14.00">SidebarComponent</text> <text text-anchor="middle" x="351" y="-99.8" font-family="Times,serif" font-size="14.00">SidebarComponent</text>
</g> </g>
<!-- SidebarComponent&#45;&gt;SharedModule --> <!-- SidebarComponent&#45;&gt;SharedModule -->
<g id="edge6" class="edge"> <g id="edge7" class="edge">
<title>SidebarComponent&#45;&gt;SharedModule</title> <title>SidebarComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M407.62,-122.24C407.62,-137.57 407.62,-157 407.62,-157 407.62,-157 464.65,-157 464.65,-157"/> <path fill="none" stroke="black" d="M406.15,-122.03C406.15,-139.06 406.15,-162 406.15,-162 406.15,-162 537.35,-162 537.35,-162"/>
<polygon fill="black" stroke="black" points="464.65,-160.5 474.65,-157 464.65,-153.5 464.65,-160.5"/> <polygon fill="black" stroke="black" points="537.35,-165.5 547.35,-162 537.35,-158.5 537.35,-165.5"/>
</g> </g>
<!-- TokenRatioPipe --> <!-- TokenRatioPipe -->
<g id="node7" class="node"> <g id="node8" class="node">
<title>TokenRatioPipe</title> <title>TokenRatioPipe</title>
<polygon fill="#ffffb3" stroke="black" points="270.49,-122 163.51,-122 163.51,-86 270.49,-86 270.49,-122"/> <polygon fill="#ffffb3" stroke="black" points="270.49,-122 163.51,-122 163.51,-86 270.49,-86 270.49,-122"/>
<text text-anchor="middle" x="217" y="-99.8" font-family="Times,serif" font-size="14.00">TokenRatioPipe</text> <text text-anchor="middle" x="217" y="-99.8" font-family="Times,serif" font-size="14.00">TokenRatioPipe</text>
</g> </g>
<!-- TokenRatioPipe&#45;&gt;SharedModule --> <!-- TokenRatioPipe&#45;&gt;SharedModule -->
<g id="edge7" class="edge"> <g id="edge8" class="edge">
<title>TokenRatioPipe&#45;&gt;SharedModule</title> <title>TokenRatioPipe&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M263.06,-122.02C263.06,-139.37 263.06,-163 263.06,-163 263.06,-163 464.61,-163 464.61,-163"/> <path fill="none" stroke="black" d="M234.83,-122.22C234.83,-140.83 234.83,-167 234.83,-167 234.83,-167 537.78,-167 537.78,-167"/>
<polygon fill="black" stroke="black" points="464.61,-166.5 474.61,-163 464.61,-159.5 464.61,-166.5"/> <polygon fill="black" stroke="black" points="537.78,-170.5 547.78,-167 537.78,-163.5 537.78,-170.5"/>
</g> </g>
<!-- TopbarComponent --> <!-- TopbarComponent -->
<g id="node8" class="node"> <g id="node9" class="node">
<title>TopbarComponent</title> <title>TopbarComponent</title>
<polygon fill="#ffffb3" stroke="black" points="145.76,-122 24.24,-122 24.24,-86 145.76,-86 145.76,-122"/> <polygon fill="#ffffb3" stroke="black" points="145.76,-122 24.24,-122 24.24,-86 145.76,-86 145.76,-122"/>
<text text-anchor="middle" x="85" y="-99.8" font-family="Times,serif" font-size="14.00">TopbarComponent</text> <text text-anchor="middle" x="85" y="-99.8" font-family="Times,serif" font-size="14.00">TopbarComponent</text>
</g> </g>
<!-- TopbarComponent&#45;&gt;SharedModule --> <!-- TopbarComponent&#45;&gt;SharedModule -->
<g id="edge8" class="edge"> <g id="edge9" class="edge">
<title>TopbarComponent&#45;&gt;SharedModule</title> <title>TopbarComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M138.12,-122.11C138.12,-141.34 138.12,-169 138.12,-169 138.12,-169 464.74,-169 464.74,-169"/> <path fill="none" stroke="black" d="M84.74,-122.22C84.74,-142.37 84.74,-172 84.74,-172 84.74,-172 537.42,-172 537.42,-172"/>
<polygon fill="black" stroke="black" points="464.74,-172.5 474.74,-169 464.74,-165.5 464.74,-172.5"/> <polygon fill="black" stroke="black" points="537.42,-175.5 547.42,-172 537.42,-168.5 537.42,-175.5"/>
</g> </g>
<!-- FooterComponent --> <!-- FooterComponent -->
<g id="node10" class="node"> <g id="node11" class="node">
<title>FooterComponent </title> <title>FooterComponent </title>
<polygon fill="#fb8072" stroke="black" points="930.88,-252 809.12,-252 809.12,-216 930.88,-216 930.88,-252"/> <polygon fill="#fb8072" stroke="black" points="1131.88,-252 1010.12,-252 1010.12,-216 1131.88,-216 1131.88,-252"/>
<text text-anchor="middle" x="870" y="-229.8" font-family="Times,serif" font-size="14.00">FooterComponent </text> <text text-anchor="middle" x="1071" y="-229.8" font-family="Times,serif" font-size="14.00">FooterComponent </text>
</g> </g>
<!-- SharedModule&#45;&gt;FooterComponent --> <!-- SharedModule&#45;&gt;FooterComponent -->
<g id="edge9" class="edge"> <g id="edge10" class="edge">
<title>SharedModule&#45;&gt;FooterComponent </title> <title>SharedModule&#45;&gt;FooterComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M573.52,-175C657.27,-175 817.86,-175 817.86,-175 817.86,-175 817.86,-205.98 817.86,-205.98"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M646.55,-177C757.89,-177 1018.18,-177 1018.18,-177 1018.18,-177 1018.18,-205.96 1018.18,-205.96"/>
<polygon fill="black" stroke="black" points="814.36,-205.98 817.86,-215.98 821.36,-205.98 814.36,-205.98"/> <polygon fill="black" stroke="black" points="1014.68,-205.96 1018.18,-215.96 1021.68,-205.96 1014.68,-205.96"/>
</g> </g>
<!-- MenuSelectionDirective --> <!-- MenuSelectionDirective -->
<g id="node11" class="node"> <g id="node12" class="node">
<title>MenuSelectionDirective </title> <title>MenuSelectionDirective </title>
<polygon fill="#fb8072" stroke="black" points="791.34,-252 634.66,-252 634.66,-216 791.34,-216 791.34,-252"/> <polygon fill="#fb8072" stroke="black" points="992.34,-252 835.66,-252 835.66,-216 992.34,-216 992.34,-252"/>
<text text-anchor="middle" x="713" y="-229.8" font-family="Times,serif" font-size="14.00">MenuSelectionDirective </text> <text text-anchor="middle" x="914" y="-229.8" font-family="Times,serif" font-size="14.00">MenuSelectionDirective </text>
</g> </g>
<!-- SharedModule&#45;&gt;MenuSelectionDirective --> <!-- SharedModule&#45;&gt;MenuSelectionDirective -->
<g id="edge10" class="edge"> <g id="edge11" class="edge">
<title>SharedModule&#45;&gt;MenuSelectionDirective </title> <title>SharedModule&#45;&gt;MenuSelectionDirective </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M573.22,-181C606.73,-181 645.01,-181 645.01,-181 645.01,-181 645.01,-205.76 645.01,-205.76"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M646.27,-182C718.95,-182 846.39,-182 846.39,-182 846.39,-182 846.39,-205.81 846.39,-205.81"/>
<polygon fill="black" stroke="black" points="641.51,-205.76 645.01,-215.76 648.51,-205.76 641.51,-205.76"/> <polygon fill="black" stroke="black" points="842.89,-205.81 846.39,-215.81 849.89,-205.81 842.89,-205.81"/>
</g>
<!-- NetworkStatusComponent -->
<g id="node13" class="node">
<title>NetworkStatusComponent </title>
<polygon fill="#fb8072" stroke="black" points="818.03,-252 649.97,-252 649.97,-216 818.03,-216 818.03,-252"/>
<text text-anchor="middle" x="734" y="-229.8" font-family="Times,serif" font-size="14.00">NetworkStatusComponent </text>
</g>
<!-- SharedModule&#45;&gt;NetworkStatusComponent -->
<g id="edge12" class="edge">
<title>SharedModule&#45;&gt;NetworkStatusComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M638.92,-187.11C638.92,-206.34 638.92,-234 638.92,-234 638.92,-234 640.01,-234 640.01,-234"/>
<polygon fill="black" stroke="black" points="639.83,-237.5 649.83,-234 639.83,-230.5 639.83,-237.5"/>
</g> </g>
<!-- SafePipe --> <!-- SafePipe -->
<g id="node12" class="node"> <g id="node14" class="node">
<title>SafePipe </title> <title>SafePipe </title>
<polygon fill="#fb8072" stroke="black" points="616.76,-252 547.24,-252 547.24,-216 616.76,-216 616.76,-252"/> <polygon fill="#fb8072" stroke="black" points="631.76,-252 562.24,-252 562.24,-216 631.76,-216 631.76,-252"/>
<text text-anchor="middle" x="582" y="-229.8" font-family="Times,serif" font-size="14.00">SafePipe </text> <text text-anchor="middle" x="597" y="-229.8" font-family="Times,serif" font-size="14.00">SafePipe </text>
</g> </g>
<!-- SharedModule&#45;&gt;SafePipe --> <!-- SharedModule&#45;&gt;SafePipe -->
<g id="edge11" class="edge"> <g id="edge13" class="edge">
<title>SharedModule&#45;&gt;SafePipe </title> <title>SharedModule&#45;&gt;SafePipe </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M560.29,-187.11C560.29,-187.11 560.29,-205.99 560.29,-205.99"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M597,-187.11C597,-187.11 597,-205.99 597,-205.99"/>
<polygon fill="black" stroke="black" points="556.79,-205.99 560.29,-215.99 563.79,-205.99 556.79,-205.99"/> <polygon fill="black" stroke="black" points="593.5,-205.99 597,-215.99 600.5,-205.99 593.5,-205.99"/>
</g> </g>
<!-- SidebarComponent --> <!-- SidebarComponent -->
<g id="node13" class="node"> <g id="node15" class="node">
<title>SidebarComponent </title> <title>SidebarComponent </title>
<polygon fill="#fb8072" stroke="black" points="529.6,-252 402.4,-252 402.4,-216 529.6,-216 529.6,-252"/> <polygon fill="#fb8072" stroke="black" points="544.6,-252 417.4,-252 417.4,-216 544.6,-216 544.6,-252"/>
<text text-anchor="middle" x="466" y="-229.8" font-family="Times,serif" font-size="14.00">SidebarComponent </text> <text text-anchor="middle" x="481" y="-229.8" font-family="Times,serif" font-size="14.00">SidebarComponent </text>
</g> </g>
<!-- SharedModule&#45;&gt;SidebarComponent --> <!-- SharedModule&#45;&gt;SidebarComponent -->
<g id="edge12" class="edge"> <g id="edge14" class="edge">
<title>SharedModule&#45;&gt;SidebarComponent </title> <title>SharedModule&#45;&gt;SidebarComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M502.29,-187.11C502.29,-187.11 502.29,-205.99 502.29,-205.99"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M555.08,-187.11C555.08,-206.34 555.08,-234 555.08,-234 555.08,-234 554.05,-234 554.05,-234"/>
<polygon fill="black" stroke="black" points="498.79,-205.99 502.29,-215.99 505.79,-205.99 498.79,-205.99"/> <polygon fill="black" stroke="black" points="554.78,-230.5 544.78,-234 554.78,-237.5 554.78,-230.5"/>
</g> </g>
<!-- TokenRatioPipe --> <!-- TokenRatioPipe -->
<g id="node14" class="node"> <g id="node16" class="node">
<title>TokenRatioPipe </title> <title>TokenRatioPipe </title>
<polygon fill="#fb8072" stroke="black" points="384.49,-252 273.51,-252 273.51,-216 384.49,-216 384.49,-252"/> <polygon fill="#fb8072" stroke="black" points="399.49,-252 288.51,-252 288.51,-216 399.49,-216 399.49,-252"/>
<text text-anchor="middle" x="329" y="-229.8" font-family="Times,serif" font-size="14.00">TokenRatioPipe </text> <text text-anchor="middle" x="344" y="-229.8" font-family="Times,serif" font-size="14.00">TokenRatioPipe </text>
</g> </g>
<!-- SharedModule&#45;&gt;TokenRatioPipe --> <!-- SharedModule&#45;&gt;TokenRatioPipe -->
<g id="edge13" class="edge"> <g id="edge15" class="edge">
<title>SharedModule&#45;&gt;TokenRatioPipe </title> <title>SharedModule&#45;&gt;TokenRatioPipe </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M474.76,-181C419.24,-181 336.6,-181 336.6,-181 336.6,-181 336.6,-205.76 336.6,-205.76"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M547.64,-182C474.04,-182 344.1,-182 344.1,-182 344.1,-182 344.1,-205.81 344.1,-205.81"/>
<polygon fill="black" stroke="black" points="333.1,-205.76 336.6,-215.76 340.1,-205.76 333.1,-205.76"/> <polygon fill="black" stroke="black" points="340.6,-205.81 344.1,-215.81 347.6,-205.81 340.6,-205.81"/>
</g> </g>
<!-- TopbarComponent --> <!-- TopbarComponent -->
<g id="node15" class="node"> <g id="node17" class="node">
<title>TopbarComponent </title> <title>TopbarComponent </title>
<polygon fill="#fb8072" stroke="black" points="255.76,-252 130.24,-252 130.24,-216 255.76,-216 255.76,-252"/> <polygon fill="#fb8072" stroke="black" points="270.76,-252 145.24,-252 145.24,-216 270.76,-216 270.76,-252"/>
<text text-anchor="middle" x="193" y="-229.8" font-family="Times,serif" font-size="14.00">TopbarComponent </text> <text text-anchor="middle" x="208" y="-229.8" font-family="Times,serif" font-size="14.00">TopbarComponent </text>
</g> </g>
<!-- SharedModule&#45;&gt;TopbarComponent --> <!-- SharedModule&#45;&gt;TopbarComponent -->
<g id="edge14" class="edge"> <g id="edge16" class="edge">
<title>SharedModule&#45;&gt;TopbarComponent </title> <title>SharedModule&#45;&gt;TopbarComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M474.52,-175C385.98,-175 209.57,-175 209.57,-175 209.57,-175 209.57,-205.98 209.57,-205.98"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M547.42,-177C440.77,-177 199.17,-177 199.17,-177 199.17,-177 199.17,-205.96 199.17,-205.96"/>
<polygon fill="black" stroke="black" points="206.07,-205.98 209.57,-215.98 213.07,-205.98 206.07,-205.98"/> <polygon fill="black" stroke="black" points="195.67,-205.96 199.17,-215.96 202.67,-205.96 195.67,-205.96"/>
</g> </g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -203,43 +203,42 @@ import { CommonModule } from &#x27;@angular/common&#x27;;
import { TokensRoutingModule } from &#x27;@pages/tokens/tokens-routing.module&#x27;; import { TokensRoutingModule } from &#x27;@pages/tokens/tokens-routing.module&#x27;;
import { TokensComponent } from &#x27;@pages/tokens/tokens.component&#x27;; import { TokensComponent } from &#x27;@pages/tokens/tokens.component&#x27;;
import { TokenDetailsComponent } from &#x27;@pages/tokens/token-details/token-details.component&#x27;; import { TokenDetailsComponent } from &#x27;@pages/tokens/token-details/token-details.component&#x27;;
import {SharedModule} from &#x27;@app/shared/shared.module&#x27;; import { SharedModule } from &#x27;@app/shared/shared.module&#x27;;
import {MatTableModule} from &#x27;@angular/material/table&#x27;; import { MatTableModule } from &#x27;@angular/material/table&#x27;;
import {MatPaginatorModule} from &#x27;@angular/material/paginator&#x27;; import { MatPaginatorModule } from &#x27;@angular/material/paginator&#x27;;
import {MatSortModule} from &#x27;@angular/material/sort&#x27;; import { MatSortModule } from &#x27;@angular/material/sort&#x27;;
import {MatPseudoCheckboxModule, MatRippleModule} from &#x27;@angular/material/core&#x27;; import { MatPseudoCheckboxModule, MatRippleModule } from &#x27;@angular/material/core&#x27;;
import {MatCheckboxModule} from &#x27;@angular/material/checkbox&#x27;; import { MatCheckboxModule } from &#x27;@angular/material/checkbox&#x27;;
import {MatInputModule} from &#x27;@angular/material/input&#x27;; import { MatInputModule } from &#x27;@angular/material/input&#x27;;
import {MatFormFieldModule} from &#x27;@angular/material/form-field&#x27;; import { MatFormFieldModule } from &#x27;@angular/material/form-field&#x27;;
import {MatIconModule} from &#x27;@angular/material/icon&#x27;; import { MatIconModule } from &#x27;@angular/material/icon&#x27;;
import {MatSidenavModule} from &#x27;@angular/material/sidenav&#x27;; import { MatSidenavModule } from &#x27;@angular/material/sidenav&#x27;;
import {MatButtonModule} from &#x27;@angular/material/button&#x27;; import { MatButtonModule } from &#x27;@angular/material/button&#x27;;
import {MatToolbarModule} from &#x27;@angular/material/toolbar&#x27;; import { MatToolbarModule } from &#x27;@angular/material/toolbar&#x27;;
import {MatCardModule} from &#x27;@angular/material/card&#x27;; import { MatCardModule } from &#x27;@angular/material/card&#x27;;
@NgModule({ @NgModule({
declarations: [TokensComponent, TokenDetailsComponent], declarations: [TokensComponent, TokenDetailsComponent],
imports: [ imports: [
CommonModule, CommonModule,
TokensRoutingModule, TokensRoutingModule,
SharedModule, SharedModule,
MatTableModule, MatTableModule,
MatPaginatorModule, MatPaginatorModule,
MatSortModule, MatSortModule,
MatPseudoCheckboxModule, MatPseudoCheckboxModule,
MatCheckboxModule, MatCheckboxModule,
MatInputModule, MatInputModule,
MatFormFieldModule, MatFormFieldModule,
MatIconModule, MatIconModule,
MatSidenavModule, MatSidenavModule,
MatButtonModule, MatButtonModule,
MatToolbarModule, MatToolbarModule,
MatCardModule, MatCardModule,
MatRippleModule MatRippleModule,
] ],
}) })
export class TokensModule { } export class TokensModule {}
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -74,7 +74,7 @@
import { Routes, RouterModule } from &#x27;@angular/router&#x27;; import { Routes, RouterModule } from &#x27;@angular/router&#x27;;
import { TokensComponent } from &#x27;@pages/tokens/tokens.component&#x27;; import { TokensComponent } from &#x27;@pages/tokens/tokens.component&#x27;;
import {TokenDetailsComponent} from &#x27;@pages/tokens/token-details/token-details.component&#x27;; import { TokenDetailsComponent } from &#x27;@pages/tokens/token-details/token-details.component&#x27;;
const routes: Routes &#x3D; [ const routes: Routes &#x3D; [
{ path: &#x27;&#x27;, component: TokensComponent }, { path: &#x27;&#x27;, component: TokensComponent },
@ -83,9 +83,9 @@ const routes: Routes &#x3D; [
@NgModule({ @NgModule({
imports: [RouterModule.forChild(routes)], imports: [RouterModule.forChild(routes)],
exports: [RouterModule] exports: [RouterModule],
}) })
export class TokensRoutingModule { } export class TokensRoutingModule {}
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -228,47 +228,44 @@ import { CommonModule } from &#x27;@angular/common&#x27;;
import { TransactionsRoutingModule } from &#x27;@pages/transactions/transactions-routing.module&#x27;; import { TransactionsRoutingModule } from &#x27;@pages/transactions/transactions-routing.module&#x27;;
import { TransactionsComponent } from &#x27;@pages/transactions/transactions.component&#x27;; import { TransactionsComponent } from &#x27;@pages/transactions/transactions.component&#x27;;
import { TransactionDetailsComponent } from &#x27;@pages/transactions/transaction-details/transaction-details.component&#x27;; import { TransactionDetailsComponent } from &#x27;@pages/transactions/transaction-details/transaction-details.component&#x27;;
import {DataTablesModule} from &#x27;angular-datatables&#x27;; import { DataTablesModule } from &#x27;angular-datatables&#x27;;
import {SharedModule} from &#x27;@app/shared/shared.module&#x27;; import { SharedModule } from &#x27;@app/shared/shared.module&#x27;;
import {MatTableModule} from &#x27;@angular/material/table&#x27;; import { MatTableModule } from &#x27;@angular/material/table&#x27;;
import {MatCheckboxModule} from &#x27;@angular/material/checkbox&#x27;; import { MatCheckboxModule } from &#x27;@angular/material/checkbox&#x27;;
import {MatPaginatorModule} from &#x27;@angular/material/paginator&#x27;; import { MatPaginatorModule } from &#x27;@angular/material/paginator&#x27;;
import {MatSortModule} from &#x27;@angular/material/sort&#x27;; import { MatSortModule } from &#x27;@angular/material/sort&#x27;;
import {MatFormFieldModule} from &#x27;@angular/material/form-field&#x27;; import { MatFormFieldModule } from &#x27;@angular/material/form-field&#x27;;
import {MatInputModule} from &#x27;@angular/material/input&#x27;; import { MatInputModule } from &#x27;@angular/material/input&#x27;;
import {MatButtonModule} from &#x27;@angular/material/button&#x27;; import { MatButtonModule } from &#x27;@angular/material/button&#x27;;
import {MatIconModule} from &#x27;@angular/material/icon&#x27;; import { MatIconModule } from &#x27;@angular/material/icon&#x27;;
import {MatSelectModule} from &#x27;@angular/material/select&#x27;; import { MatSelectModule } from &#x27;@angular/material/select&#x27;;
import {MatCardModule} from &#x27;@angular/material/card&#x27;; import { MatCardModule } from &#x27;@angular/material/card&#x27;;
import {MatRippleModule} from &#x27;@angular/material/core&#x27;; import { MatRippleModule } from &#x27;@angular/material/core&#x27;;
import {MatSnackBarModule} from &#x27;@angular/material/snack-bar&#x27;; import { MatSnackBarModule } from &#x27;@angular/material/snack-bar&#x27;;
@NgModule({ @NgModule({
declarations: [TransactionsComponent, TransactionDetailsComponent], declarations: [TransactionsComponent, TransactionDetailsComponent],
exports: [ exports: [TransactionDetailsComponent],
TransactionDetailsComponent imports: [
CommonModule,
TransactionsRoutingModule,
DataTablesModule,
SharedModule,
MatTableModule,
MatCheckboxModule,
MatPaginatorModule,
MatSortModule,
MatFormFieldModule,
MatInputModule,
MatButtonModule,
MatIconModule,
MatSelectModule,
MatCardModule,
MatRippleModule,
MatSnackBarModule,
], ],
imports: [
CommonModule,
TransactionsRoutingModule,
DataTablesModule,
SharedModule,
MatTableModule,
MatCheckboxModule,
MatPaginatorModule,
MatSortModule,
MatFormFieldModule,
MatInputModule,
MatButtonModule,
MatIconModule,
MatSelectModule,
MatCardModule,
MatRippleModule,
MatSnackBarModule,
]
}) })
export class TransactionsModule { } export class TransactionsModule {}
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -79,9 +79,9 @@ const routes: Routes &#x3D; [{ path: &#x27;&#x27;, component: TransactionsCompon
@NgModule({ @NgModule({
imports: [RouterModule.forChild(routes)], imports: [RouterModule.forChild(routes)],
exports: [RouterModule] exports: [RouterModule],
}) })
export class TransactionsRoutingModule { } export class TransactionsRoutingModule {}
</code></pre> </code></pre>
</div> </div>
</div> </div>

View File

@ -141,41 +141,41 @@
</g> </g>
<g id="clust84" class="cluster"> <g id="clust84" class="cluster">
<title>cluster_SharedModule</title> <title>cluster_SharedModule</title>
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="430,-70 430,-138 2389,-138 2389,-70 430,-70"/> <polygon fill="none" stroke="black" stroke-dasharray="1,5" points="243,-70 243,-138 2571,-138 2571,-70 243,-70"/>
</g> </g>
<g id="clust85" class="cluster"> <g id="clust85" class="cluster">
<title>cluster_SharedModule_declarations</title> <title>cluster_SharedModule_declarations</title>
<polygon fill="none" stroke="black" points="1262,-78 1262,-130 2381,-130 2381,-78 1262,-78"/> <polygon fill="none" stroke="black" points="1262,-78 1262,-130 2563,-130 2563,-78 1262,-78"/>
</g> </g>
<g id="clust95" class="cluster"> <g id="clust96" class="cluster">
<title>cluster_SharedModule_exports</title> <title>cluster_SharedModule_exports</title>
<polygon fill="none" stroke="black" points="438,-78 438,-130 1254,-130 1254,-78 438,-78"/> <polygon fill="none" stroke="black" points="251,-78 251,-130 1254,-130 1254,-78 251,-78"/>
</g> </g>
<g id="clust98" class="cluster"> <g id="clust99" class="cluster">
<title>cluster_TokensModule</title> <title>cluster_TokensModule</title>
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="4073,-146 4073,-274 4572,-274 4572,-146 4073,-146"/> <polygon fill="none" stroke="black" stroke-dasharray="1,5" points="4073,-146 4073,-274 4572,-274 4572,-146 4073,-146"/>
</g> </g>
<g id="clust99" class="cluster"> <g id="clust100" class="cluster">
<title>cluster_TokensModule_declarations</title> <title>cluster_TokensModule_declarations</title>
<polygon fill="none" stroke="black" points="4251,-154 4251,-206 4564,-206 4564,-154 4251,-154"/> <polygon fill="none" stroke="black" points="4251,-154 4251,-206 4564,-206 4564,-154 4251,-154"/>
</g> </g>
<g id="clust102" class="cluster"> <g id="clust103" class="cluster">
<title>cluster_TokensModule_imports</title> <title>cluster_TokensModule_imports</title>
<polygon fill="none" stroke="black" points="4081,-154 4081,-206 4243,-206 4243,-154 4081,-154"/> <polygon fill="none" stroke="black" points="4081,-154 4081,-206 4243,-206 4243,-154 4081,-154"/>
</g> </g>
<g id="clust112" class="cluster"> <g id="clust113" class="cluster">
<title>cluster_TransactionsModule</title> <title>cluster_TransactionsModule</title>
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="336,-146 336,-214 1140,-214 1140,-146 336,-146"/> <polygon fill="none" stroke="black" stroke-dasharray="1,5" points="336,-146 336,-214 1140,-214 1140,-146 336,-146"/>
</g> </g>
<g id="clust113" class="cluster"> <g id="clust114" class="cluster">
<title>cluster_TransactionsModule_declarations</title> <title>cluster_TransactionsModule_declarations</title>
<polygon fill="none" stroke="black" points="758,-154 758,-206 1132,-206 1132,-154 758,-154"/> <polygon fill="none" stroke="black" points="758,-154 758,-206 1132,-206 1132,-154 758,-154"/>
</g> </g>
<g id="clust116" class="cluster"> <g id="clust117" class="cluster">
<title>cluster_TransactionsModule_imports</title> <title>cluster_TransactionsModule_imports</title>
<polygon fill="none" stroke="black" points="558,-154 558,-206 750,-206 750,-154 558,-154"/> <polygon fill="none" stroke="black" points="558,-154 558,-206 750,-206 750,-154 558,-154"/>
</g> </g>
<g id="clust117" class="cluster"> <g id="clust118" class="cluster">
<title>cluster_TransactionsModule_exports</title> <title>cluster_TransactionsModule_exports</title>
<polygon fill="none" stroke="black" points="344,-154 344,-206 550,-206 550,-154 344,-154"/> <polygon fill="none" stroke="black" points="344,-154 344,-206 550,-206 550,-154 344,-154"/>
</g> </g>
@ -264,7 +264,7 @@
<text text-anchor="middle" x="1230" y="-243.8" font-family="Times,serif" font-size="14.00">TransactionsModule</text> <text text-anchor="middle" x="1230" y="-243.8" font-family="Times,serif" font-size="14.00">TransactionsModule</text>
</g> </g>
<!-- SharedModule&#45;&gt;TransactionsModule --> <!-- SharedModule&#45;&gt;TransactionsModule -->
<g id="edge49" class="edge"> <g id="edge51" class="edge">
<title>SharedModule&#45;&gt;TransactionsModule</title> <title>SharedModule&#45;&gt;TransactionsModule</title>
<path fill="none" stroke="black" d="M1410.09,-198.22C1410.09,-218.37 1410.09,-248 1410.09,-248 1410.09,-248 1305.78,-248 1305.78,-248"/> <path fill="none" stroke="black" d="M1410.09,-198.22C1410.09,-218.37 1410.09,-248 1410.09,-248 1410.09,-248 1305.78,-248 1305.78,-248"/>
<polygon fill="black" stroke="black" points="1305.78,-244.5 1295.78,-248 1305.78,-251.5 1305.78,-244.5"/> <polygon fill="black" stroke="black" points="1305.78,-244.5 1295.78,-248 1305.78,-251.5 1305.78,-244.5"/>
@ -318,85 +318,97 @@
<polygon fill="black" stroke="black" points="3692.58,-219.93 3696.08,-229.93 3699.58,-219.93 3692.58,-219.93"/> <polygon fill="black" stroke="black" points="3692.58,-219.93 3696.08,-229.93 3699.58,-219.93 3692.58,-219.93"/>
</g> </g>
<!-- FooterComponent --> <!-- FooterComponent -->
<g id="node39" class="node"> <g id="node40" class="node">
<title>FooterComponent </title> <title>FooterComponent </title>
<polygon fill="#fb8072" stroke="black" points="741.88,-122 620.12,-122 620.12,-86 741.88,-86 741.88,-122"/> <polygon fill="#fb8072" stroke="black" points="828.88,-122 707.12,-122 707.12,-86 828.88,-86 828.88,-122"/>
<text text-anchor="middle" x="681" y="-99.8" font-family="Times,serif" font-size="14.00">FooterComponent </text> <text text-anchor="middle" x="768" y="-99.8" font-family="Times,serif" font-size="14.00">FooterComponent </text>
</g> </g>
<!-- SharedModule&#45;&gt;FooterComponent --> <!-- SharedModule&#45;&gt;FooterComponent -->
<g id="edge37" class="edge"> <g id="edge38" class="edge">
<title>SharedModule&#45;&gt;FooterComponent </title> <title>SharedModule&#45;&gt;FooterComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1353.35,-161.79C1353.35,-156.45 1353.35,-152 1353.35,-152 1353.35,-152 681,-152 681,-152 681,-152 681,-132.15 681,-132.15"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M1363.9,-161.81C1363.9,-153.72 1363.9,-146 1363.9,-146 1363.9,-146 797.13,-146 797.13,-146 797.13,-146 797.13,-132.06 797.13,-132.06"/>
<polygon fill="black" stroke="black" points="684.5,-132.15 681,-122.15 677.5,-132.15 684.5,-132.15"/> <polygon fill="black" stroke="black" points="800.63,-132.06 797.13,-122.06 793.63,-132.06 800.63,-132.06"/>
</g> </g>
<!-- MenuSelectionDirective --> <!-- MenuSelectionDirective -->
<g id="node40" class="node"> <g id="node41" class="node">
<title>MenuSelectionDirective </title> <title>MenuSelectionDirective </title>
<polygon fill="#fb8072" stroke="black" points="602.34,-122 445.66,-122 445.66,-86 602.34,-86 602.34,-122"/> <polygon fill="#fb8072" stroke="black" points="689.34,-122 532.66,-122 532.66,-86 689.34,-86 689.34,-122"/>
<text text-anchor="middle" x="524" y="-99.8" font-family="Times,serif" font-size="14.00">MenuSelectionDirective </text> <text text-anchor="middle" x="611" y="-99.8" font-family="Times,serif" font-size="14.00">MenuSelectionDirective </text>
</g> </g>
<!-- SharedModule&#45;&gt;MenuSelectionDirective --> <!-- SharedModule&#45;&gt;MenuSelectionDirective -->
<g id="edge38" class="edge"> <g id="edge39" class="edge">
<title>SharedModule&#45;&gt;MenuSelectionDirective </title> <title>SharedModule&#45;&gt;MenuSelectionDirective </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1346.57,-161.88C1346.57,-159.03 1346.57,-157 1346.57,-157 1346.57,-157 584.04,-157 584.04,-157 584.04,-157 584.04,-132.24 584.04,-132.24"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M1357.88,-161.86C1357.88,-155.54 1357.88,-150 1357.88,-150 1357.88,-150 627.54,-150 627.54,-150 627.54,-150 627.54,-132.18 627.54,-132.18"/>
<polygon fill="black" stroke="black" points="587.54,-132.24 584.04,-122.24 580.54,-132.24 587.54,-132.24"/> <polygon fill="black" stroke="black" points="631.04,-132.18 627.54,-122.18 624.04,-132.18 631.04,-132.18"/>
</g>
<!-- NetworkStatusComponent -->
<g id="node42" class="node">
<title>NetworkStatusComponent </title>
<polygon fill="#fb8072" stroke="black" points="515.03,-122 346.97,-122 346.97,-86 515.03,-86 515.03,-122"/>
<text text-anchor="middle" x="431" y="-99.8" font-family="Times,serif" font-size="14.00">NetworkStatusComponent </text>
</g>
<!-- SharedModule&#45;&gt;NetworkStatusComponent -->
<g id="edge40" class="edge">
<title>SharedModule&#45;&gt;NetworkStatusComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1351.85,-161.94C1351.85,-157.51 1351.85,-154 1351.85,-154 1351.85,-154 433.37,-154 433.37,-154 433.37,-154 433.37,-132.05 433.37,-132.05"/>
<polygon fill="black" stroke="black" points="436.87,-132.05 433.37,-122.05 429.87,-132.05 436.87,-132.05"/>
</g> </g>
<!-- SafePipe --> <!-- SafePipe -->
<g id="node41" class="node"> <g id="node43" class="node">
<title>SafePipe </title> <title>SafePipe </title>
<polygon fill="#fb8072" stroke="black" points="1245.76,-122 1176.24,-122 1176.24,-86 1245.76,-86 1245.76,-122"/> <polygon fill="#fb8072" stroke="black" points="328.76,-122 259.24,-122 259.24,-86 328.76,-86 328.76,-122"/>
<text text-anchor="middle" x="1211" y="-99.8" font-family="Times,serif" font-size="14.00">SafePipe </text> <text text-anchor="middle" x="294" y="-99.8" font-family="Times,serif" font-size="14.00">SafePipe </text>
</g> </g>
<!-- SharedModule&#45;&gt;SafePipe --> <!-- SharedModule&#45;&gt;SafePipe -->
<g id="edge39" class="edge"> <g id="edge41" class="edge">
<title>SharedModule&#45;&gt;SafePipe </title> <title>SharedModule&#45;&gt;SafePipe </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1380.48,-161.85C1380.48,-148.26 1380.48,-132 1380.48,-132 1380.48,-132 1211,-132 1211,-132 1211,-132 1211,-131.02 1211,-131.02"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M1345.82,-161.83C1345.82,-159.55 1345.82,-158 1345.82,-158 1345.82,-158 320.37,-158 320.37,-158 320.37,-158 320.37,-132.28 320.37,-132.28"/>
<polygon fill="black" stroke="black" points="1214.5,-132.21 1211,-122.21 1207.5,-132.21 1214.5,-132.21"/> <polygon fill="black" stroke="black" points="323.87,-132.28 320.37,-122.28 316.87,-132.28 323.87,-132.28"/>
</g> </g>
<!-- SidebarComponent --> <!-- SidebarComponent -->
<g id="node42" class="node"> <g id="node44" class="node">
<title>SidebarComponent </title> <title>SidebarComponent </title>
<polygon fill="#fb8072" stroke="black" points="1158.6,-122 1031.4,-122 1031.4,-86 1158.6,-86 1158.6,-122"/> <polygon fill="#fb8072" stroke="black" points="1245.6,-122 1118.4,-122 1118.4,-86 1245.6,-86 1245.6,-122"/>
<text text-anchor="middle" x="1095" y="-99.8" font-family="Times,serif" font-size="14.00">SidebarComponent </text> <text text-anchor="middle" x="1182" y="-99.8" font-family="Times,serif" font-size="14.00">SidebarComponent </text>
</g> </g>
<!-- SharedModule&#45;&gt;SidebarComponent --> <!-- SharedModule&#45;&gt;SidebarComponent -->
<g id="edge40" class="edge"> <g id="edge42" class="edge">
<title>SharedModule&#45;&gt;SidebarComponent </title> <title>SharedModule&#45;&gt;SidebarComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1373.7,-161.51C1373.7,-149.86 1373.7,-137 1373.7,-137 1373.7,-137 1141.17,-137 1141.17,-137 1141.17,-137 1141.17,-132.04 1141.17,-132.04"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M1381.99,-161.82C1381.99,-148.96 1381.99,-134 1381.99,-134 1381.99,-134 1205.01,-134 1205.01,-134 1205.01,-134 1205.01,-132.14 1205.01,-132.14"/>
<polygon fill="black" stroke="black" points="1144.67,-132.04 1141.17,-122.04 1137.67,-132.04 1144.67,-132.04"/> <polygon fill="black" stroke="black" points="1208.51,-132.14 1205.01,-122.14 1201.51,-132.14 1208.51,-132.14"/>
</g> </g>
<!-- TokenRatioPipe --> <!-- TokenRatioPipe -->
<g id="node43" class="node"> <g id="node45" class="node">
<title>TokenRatioPipe </title> <title>TokenRatioPipe </title>
<polygon fill="#fb8072" stroke="black" points="1013.49,-122 902.51,-122 902.51,-86 1013.49,-86 1013.49,-122"/> <polygon fill="#fb8072" stroke="black" points="1100.49,-122 989.51,-122 989.51,-86 1100.49,-86 1100.49,-122"/>
<text text-anchor="middle" x="958" y="-99.8" font-family="Times,serif" font-size="14.00">TokenRatioPipe </text> <text text-anchor="middle" x="1045" y="-99.8" font-family="Times,serif" font-size="14.00">TokenRatioPipe </text>
</g> </g>
<!-- SharedModule&#45;&gt;TokenRatioPipe --> <!-- SharedModule&#45;&gt;TokenRatioPipe -->
<g id="edge41" class="edge"> <g id="edge43" class="edge">
<title>SharedModule&#45;&gt;TokenRatioPipe </title> <title>SharedModule&#45;&gt;TokenRatioPipe </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1366.92,-161.89C1366.92,-152.1 1366.92,-142 1366.92,-142 1366.92,-142 974.86,-142 974.86,-142 974.86,-142 974.86,-132.11 974.86,-132.11"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M1375.96,-161.94C1375.96,-150.56 1375.96,-138 1375.96,-138 1375.96,-138 1045,-138 1045,-138 1045,-138 1045,-132.19 1045,-132.19"/>
<polygon fill="black" stroke="black" points="978.36,-132.11 974.86,-122.11 971.36,-132.11 978.36,-132.11"/> <polygon fill="black" stroke="black" points="1048.5,-132.19 1045,-122.19 1041.5,-132.19 1048.5,-132.19"/>
</g> </g>
<!-- TopbarComponent --> <!-- TopbarComponent -->
<g id="node44" class="node"> <g id="node46" class="node">
<title>TopbarComponent </title> <title>TopbarComponent </title>
<polygon fill="#fb8072" stroke="black" points="884.76,-122 759.24,-122 759.24,-86 884.76,-86 884.76,-122"/> <polygon fill="#fb8072" stroke="black" points="971.76,-122 846.24,-122 846.24,-86 971.76,-86 971.76,-122"/>
<text text-anchor="middle" x="822" y="-99.8" font-family="Times,serif" font-size="14.00">TopbarComponent </text> <text text-anchor="middle" x="909" y="-99.8" font-family="Times,serif" font-size="14.00">TopbarComponent </text>
</g> </g>
<!-- SharedModule&#45;&gt;TopbarComponent --> <!-- SharedModule&#45;&gt;TopbarComponent -->
<g id="edge42" class="edge"> <g id="edge44" class="edge">
<title>SharedModule&#45;&gt;TopbarComponent </title> <title>SharedModule&#45;&gt;TopbarComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1360.14,-161.96C1360.14,-154.25 1360.14,-147 1360.14,-147 1360.14,-147 825.1,-147 825.1,-147 825.1,-147 825.1,-132.49 825.1,-132.49"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M1369.93,-161.89C1369.93,-152.1 1369.93,-142 1369.93,-142 1369.93,-142 954.05,-142 954.05,-142 954.05,-142 954.05,-132.11 954.05,-132.11"/>
<polygon fill="black" stroke="black" points="828.6,-132.49 825.1,-122.49 821.6,-132.49 828.6,-132.49"/> <polygon fill="black" stroke="black" points="957.55,-132.11 954.05,-122.11 950.55,-132.11 957.55,-132.11"/>
</g> </g>
<!-- TokensModule --> <!-- TokensModule -->
<g id="node47" class="node"> <g id="node49" class="node">
<title>TokensModule</title> <title>TokensModule</title>
<polygon fill="#8dd3c7" stroke="black" points="4291.26,-266 4288.26,-270 4267.26,-270 4264.26,-266 4190.74,-266 4190.74,-230 4291.26,-230 4291.26,-266"/> <polygon fill="#8dd3c7" stroke="black" points="4291.26,-266 4288.26,-270 4267.26,-270 4264.26,-266 4190.74,-266 4190.74,-230 4291.26,-230 4291.26,-266"/>
<text text-anchor="middle" x="4241" y="-243.8" font-family="Times,serif" font-size="14.00">TokensModule</text> <text text-anchor="middle" x="4241" y="-243.8" font-family="Times,serif" font-size="14.00">TokensModule</text>
</g> </g>
<!-- SharedModule&#45;&gt;TokensModule --> <!-- SharedModule&#45;&gt;TokensModule -->
<g id="edge45" class="edge"> <g id="edge47" class="edge">
<title>SharedModule&#45;&gt;TokensModule</title> <title>SharedModule&#45;&gt;TokensModule</title>
<path fill="none" stroke="black" d="M1396.03,-198.17C1396.03,-202.05 1396.03,-205 1396.03,-205 1396.03,-205 4205.39,-205 4205.39,-205 4205.39,-205 4205.39,-219.51 4205.39,-219.51"/> <path fill="none" stroke="black" d="M1396.03,-198.17C1396.03,-202.05 1396.03,-205 1396.03,-205 1396.03,-205 4205.39,-205 4205.39,-205 4205.39,-205 4205.39,-219.51 4205.39,-219.51"/>
<polygon fill="black" stroke="black" points="4201.89,-219.51 4205.39,-229.51 4208.89,-219.51 4201.89,-219.51"/> <polygon fill="black" stroke="black" points="4201.89,-219.51 4205.39,-229.51 4208.89,-219.51 4201.89,-219.51"/>
@ -408,13 +420,13 @@
<polygon fill="black" stroke="black" points="1478.68,-325.5 1488.68,-322 1478.68,-318.5 1478.68,-325.5"/> <polygon fill="black" stroke="black" points="1478.68,-325.5 1488.68,-322 1478.68,-318.5 1478.68,-325.5"/>
</g> </g>
<!-- TransactionDetailsComponent --> <!-- TransactionDetailsComponent -->
<g id="node52" class="node"> <g id="node54" class="node">
<title>TransactionDetailsComponent </title> <title>TransactionDetailsComponent </title>
<polygon fill="#fb8072" stroke="black" points="542.07,-198 351.93,-198 351.93,-162 542.07,-162 542.07,-198"/> <polygon fill="#fb8072" stroke="black" points="542.07,-198 351.93,-198 351.93,-162 542.07,-162 542.07,-198"/>
<text text-anchor="middle" x="447" y="-175.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent </text> <text text-anchor="middle" x="447" y="-175.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent </text>
</g> </g>
<!-- TransactionsModule&#45;&gt;TransactionDetailsComponent --> <!-- TransactionsModule&#45;&gt;TransactionDetailsComponent -->
<g id="edge51" class="edge"> <g id="edge53" class="edge">
<title>TransactionsModule&#45;&gt;TransactionDetailsComponent </title> <title>TransactionsModule&#45;&gt;TransactionDetailsComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M1164.25,-259C975.77,-259 447,-259 447,-259 447,-259 447,-208.32 447,-208.32"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M1164.25,-259C975.77,-259 447,-259 447,-259 447,-259 447,-208.32 447,-208.32"/>
<polygon fill="black" stroke="black" points="450.5,-208.32 447,-198.32 443.5,-208.32 450.5,-208.32"/> <polygon fill="black" stroke="black" points="450.5,-208.32 447,-198.32 443.5,-208.32 450.5,-208.32"/>
@ -632,167 +644,179 @@
<!-- ErrorDialogComponent --> <!-- ErrorDialogComponent -->
<g id="node31" class="node"> <g id="node31" class="node">
<title>ErrorDialogComponent</title> <title>ErrorDialogComponent</title>
<polygon fill="#ffffb3" stroke="black" points="2109.47,-122 1960.53,-122 1960.53,-86 2109.47,-86 2109.47,-122"/> <polygon fill="#ffffb3" stroke="black" points="2291.47,-122 2142.53,-122 2142.53,-86 2291.47,-86 2291.47,-122"/>
<text text-anchor="middle" x="2035" y="-99.8" font-family="Times,serif" font-size="14.00">ErrorDialogComponent</text> <text text-anchor="middle" x="2217" y="-99.8" font-family="Times,serif" font-size="14.00">ErrorDialogComponent</text>
</g> </g>
<!-- ErrorDialogComponent&#45;&gt;SharedModule --> <!-- ErrorDialogComponent&#45;&gt;SharedModule -->
<g id="edge29" class="edge"> <g id="edge29" class="edge">
<title>ErrorDialogComponent&#45;&gt;SharedModule</title> <title>ErrorDialogComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M1974.61,-122.32C1974.61,-145.66 1974.61,-183 1974.61,-183 1974.61,-183 1448.42,-183 1448.42,-183"/> <path fill="none" stroke="black" d="M2147.36,-122.23C2147.36,-146.93 2147.36,-188 2147.36,-188 2147.36,-188 1448.47,-188 1448.47,-188"/>
<polygon fill="black" stroke="black" points="1448.42,-179.5 1438.42,-183 1448.42,-186.5 1448.42,-179.5"/> <polygon fill="black" stroke="black" points="1448.47,-184.5 1438.47,-188 1448.47,-191.5 1448.47,-184.5"/>
</g> </g>
<!-- FooterComponent --> <!-- FooterComponent -->
<g id="node32" class="node"> <g id="node32" class="node">
<title>FooterComponent</title> <title>FooterComponent</title>
<polygon fill="#ffffb3" stroke="black" points="1942.88,-122 1825.12,-122 1825.12,-86 1942.88,-86 1942.88,-122"/> <polygon fill="#ffffb3" stroke="black" points="2124.88,-122 2007.12,-122 2007.12,-86 2124.88,-86 2124.88,-122"/>
<text text-anchor="middle" x="1884" y="-99.8" font-family="Times,serif" font-size="14.00">FooterComponent</text> <text text-anchor="middle" x="2066" y="-99.8" font-family="Times,serif" font-size="14.00">FooterComponent</text>
</g> </g>
<!-- FooterComponent&#45;&gt;SharedModule --> <!-- FooterComponent&#45;&gt;SharedModule -->
<g id="edge30" class="edge"> <g id="edge30" class="edge">
<title>FooterComponent&#45;&gt;SharedModule</title> <title>FooterComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M1884,-122.29C1884,-144.21 1884,-178 1884,-178 1884,-178 1448.27,-178 1448.27,-178"/> <path fill="none" stroke="black" d="M2066,-122.32C2066,-145.66 2066,-183 2066,-183 2066,-183 1448.23,-183 1448.23,-183"/>
<polygon fill="black" stroke="black" points="1448.27,-174.5 1438.27,-178 1448.27,-181.5 1448.27,-174.5"/> <polygon fill="black" stroke="black" points="1448.23,-179.5 1438.23,-183 1448.23,-186.5 1448.23,-179.5"/>
</g> </g>
<!-- MenuSelectionDirective --> <!-- MenuSelectionDirective -->
<g id="node33" class="node"> <g id="node33" class="node">
<title>MenuSelectionDirective</title> <title>MenuSelectionDirective</title>
<polygon fill="#ffffb3" stroke="black" points="1807.34,-122 1654.66,-122 1654.66,-86 1807.34,-86 1807.34,-122"/> <polygon fill="#ffffb3" stroke="black" points="1989.34,-122 1836.66,-122 1836.66,-86 1989.34,-86 1989.34,-122"/>
<text text-anchor="middle" x="1731" y="-99.8" font-family="Times,serif" font-size="14.00">MenuSelectionDirective</text> <text text-anchor="middle" x="1913" y="-99.8" font-family="Times,serif" font-size="14.00">MenuSelectionDirective</text>
</g> </g>
<!-- MenuSelectionDirective&#45;&gt;SharedModule --> <!-- MenuSelectionDirective&#45;&gt;SharedModule -->
<g id="edge31" class="edge"> <g id="edge31" class="edge">
<title>MenuSelectionDirective&#45;&gt;SharedModule</title> <title>MenuSelectionDirective&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M1717.34,-122.13C1717.34,-142.57 1717.34,-173 1717.34,-173 1717.34,-173 1448.51,-173 1448.51,-173"/> <path fill="none" stroke="black" d="M1901,-122.29C1901,-144.21 1901,-178 1901,-178 1901,-178 1448.56,-178 1448.56,-178"/>
<polygon fill="black" stroke="black" points="1448.51,-169.5 1438.51,-173 1448.51,-176.5 1448.51,-169.5"/> <polygon fill="black" stroke="black" points="1448.56,-174.5 1438.56,-178 1448.56,-181.5 1448.56,-174.5"/>
</g> </g>
<!-- MenuToggleDirective --> <!-- MenuToggleDirective -->
<g id="node34" class="node"> <g id="node34" class="node">
<title>MenuToggleDirective</title> <title>MenuToggleDirective</title>
<polygon fill="#ffffb3" stroke="black" points="1636.4,-122 1495.6,-122 1495.6,-86 1636.4,-86 1636.4,-122"/> <polygon fill="#ffffb3" stroke="black" points="1818.4,-122 1677.6,-122 1677.6,-86 1818.4,-86 1818.4,-122"/>
<text text-anchor="middle" x="1566" y="-99.8" font-family="Times,serif" font-size="14.00">MenuToggleDirective</text> <text text-anchor="middle" x="1748" y="-99.8" font-family="Times,serif" font-size="14.00">MenuToggleDirective</text>
</g> </g>
<!-- MenuToggleDirective&#45;&gt;SharedModule --> <!-- MenuToggleDirective&#45;&gt;SharedModule -->
<g id="edge32" class="edge"> <g id="edge32" class="edge">
<title>MenuToggleDirective&#45;&gt;SharedModule</title> <title>MenuToggleDirective&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M1561.72,-122.17C1561.72,-141.09 1561.72,-168 1561.72,-168 1561.72,-168 1448.5,-168 1448.5,-168"/> <path fill="none" stroke="black" d="M1728.95,-122.13C1728.95,-142.57 1728.95,-173 1728.95,-173 1728.95,-173 1448.43,-173 1448.43,-173"/>
<polygon fill="black" stroke="black" points="1448.5,-164.5 1438.5,-168 1448.5,-171.5 1448.5,-164.5"/> <polygon fill="black" stroke="black" points="1448.43,-169.5 1438.43,-173 1448.43,-176.5 1448.43,-169.5"/>
</g>
<!-- NetworkStatusComponent -->
<g id="node35" class="node">
<title>NetworkStatusComponent</title>
<polygon fill="#ffffb3" stroke="black" points="1660.04,-122 1495.96,-122 1495.96,-86 1660.04,-86 1660.04,-122"/>
<text text-anchor="middle" x="1578" y="-99.8" font-family="Times,serif" font-size="14.00">NetworkStatusComponent</text>
</g>
<!-- NetworkStatusComponent&#45;&gt;SharedModule -->
<g id="edge33" class="edge">
<title>NetworkStatusComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M1561.69,-122.17C1561.69,-141.09 1561.69,-168 1561.69,-168 1561.69,-168 1448.49,-168 1448.49,-168"/>
<polygon fill="black" stroke="black" points="1448.49,-164.5 1438.49,-168 1448.49,-171.5 1448.49,-164.5"/>
</g> </g>
<!-- SafePipe --> <!-- SafePipe -->
<g id="node35" class="node"> <g id="node36" class="node">
<title>SafePipe</title> <title>SafePipe</title>
<polygon fill="#ffffb3" stroke="black" points="1477.76,-122 1412.24,-122 1412.24,-86 1477.76,-86 1477.76,-122"/> <polygon fill="#ffffb3" stroke="black" points="1477.76,-122 1412.24,-122 1412.24,-86 1477.76,-86 1477.76,-122"/>
<text text-anchor="middle" x="1445" y="-99.8" font-family="Times,serif" font-size="14.00">SafePipe</text> <text text-anchor="middle" x="1445" y="-99.8" font-family="Times,serif" font-size="14.00">SafePipe</text>
</g> </g>
<!-- SafePipe&#45;&gt;SharedModule --> <!-- SafePipe&#45;&gt;SharedModule -->
<g id="edge33" class="edge"> <g id="edge34" class="edge">
<title>SafePipe&#45;&gt;SharedModule</title> <title>SafePipe&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M1420.82,-122.01C1420.82,-122.01 1420.82,-151.85 1420.82,-151.85"/> <path fill="none" stroke="black" d="M1418.64,-122.01C1418.64,-122.01 1418.64,-151.85 1418.64,-151.85"/>
<polygon fill="black" stroke="black" points="1417.32,-151.85 1420.82,-161.85 1424.32,-151.85 1417.32,-151.85"/> <polygon fill="black" stroke="black" points="1415.14,-151.85 1418.64,-161.85 1422.14,-151.85 1415.14,-151.85"/>
</g> </g>
<!-- SidebarComponent --> <!-- SidebarComponent -->
<g id="node36" class="node"> <g id="node37" class="node">
<title>SidebarComponent</title> <title>SidebarComponent</title>
<polygon fill="#ffffb3" stroke="black" points="1394.1,-122 1269.9,-122 1269.9,-86 1394.1,-86 1394.1,-122"/> <polygon fill="#ffffb3" stroke="black" points="1394.1,-122 1269.9,-122 1269.9,-86 1394.1,-86 1394.1,-122"/>
<text text-anchor="middle" x="1332" y="-99.8" font-family="Times,serif" font-size="14.00">SidebarComponent</text> <text text-anchor="middle" x="1332" y="-99.8" font-family="Times,serif" font-size="14.00">SidebarComponent</text>
</g> </g>
<!-- SidebarComponent&#45;&gt;SharedModule --> <!-- SidebarComponent&#45;&gt;SharedModule -->
<g id="edge34" class="edge"> <g id="edge35" class="edge">
<title>SidebarComponent&#45;&gt;SharedModule</title> <title>SidebarComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M1387.27,-122.01C1387.27,-122.01 1387.27,-151.85 1387.27,-151.85"/> <path fill="none" stroke="black" d="M1388.02,-122.01C1388.02,-122.01 1388.02,-151.85 1388.02,-151.85"/>
<polygon fill="black" stroke="black" points="1383.77,-151.85 1387.27,-161.85 1390.77,-151.85 1383.77,-151.85"/> <polygon fill="black" stroke="black" points="1384.52,-151.85 1388.02,-161.85 1391.52,-151.85 1384.52,-151.85"/>
</g> </g>
<!-- TokenRatioPipe --> <!-- TokenRatioPipe -->
<g id="node37" class="node"> <g id="node38" class="node">
<title>TokenRatioPipe</title> <title>TokenRatioPipe</title>
<polygon fill="#ffffb3" stroke="black" points="2373.49,-122 2266.51,-122 2266.51,-86 2373.49,-86 2373.49,-122"/> <polygon fill="#ffffb3" stroke="black" points="2555.49,-122 2448.51,-122 2448.51,-86 2555.49,-86 2555.49,-122"/>
<text text-anchor="middle" x="2320" y="-99.8" font-family="Times,serif" font-size="14.00">TokenRatioPipe</text> <text text-anchor="middle" x="2502" y="-99.8" font-family="Times,serif" font-size="14.00">TokenRatioPipe</text>
</g> </g>
<!-- TokenRatioPipe&#45;&gt;SharedModule --> <!-- TokenRatioPipe&#45;&gt;SharedModule -->
<g id="edge35" class="edge"> <g id="edge36" class="edge">
<title>TokenRatioPipe&#45;&gt;SharedModule</title> <title>TokenRatioPipe&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M2318.15,-122.12C2318.15,-124.97 2318.15,-127 2318.15,-127 2318.15,-127 1429.51,-127 1429.51,-127 1429.51,-127 1429.51,-151.76 1429.51,-151.76"/> <path fill="none" stroke="black" d="M2492.14,-122.06C2492.14,-126.49 2492.14,-130 2492.14,-130 2492.14,-130 1431.69,-130 1431.69,-130 1431.69,-130 1431.69,-151.95 1431.69,-151.95"/>
<polygon fill="black" stroke="black" points="1426.01,-151.76 1429.51,-161.76 1433.01,-151.76 1426.01,-151.76"/> <polygon fill="black" stroke="black" points="1428.19,-151.95 1431.69,-161.95 1435.19,-151.95 1428.19,-151.95"/>
</g> </g>
<!-- TopbarComponent --> <!-- TopbarComponent -->
<g id="node38" class="node"> <g id="node39" class="node">
<title>TopbarComponent</title> <title>TopbarComponent</title>
<polygon fill="#ffffb3" stroke="black" points="2248.76,-122 2127.24,-122 2127.24,-86 2248.76,-86 2248.76,-122"/> <polygon fill="#ffffb3" stroke="black" points="2430.76,-122 2309.24,-122 2309.24,-86 2430.76,-86 2430.76,-122"/>
<text text-anchor="middle" x="2188" y="-99.8" font-family="Times,serif" font-size="14.00">TopbarComponent</text> <text text-anchor="middle" x="2370" y="-99.8" font-family="Times,serif" font-size="14.00">TopbarComponent</text>
</g> </g>
<!-- TopbarComponent&#45;&gt;SharedModule --> <!-- TopbarComponent&#45;&gt;SharedModule -->
<g id="edge36" class="edge"> <g id="edge37" class="edge">
<title>TopbarComponent&#45;&gt;SharedModule</title> <title>TopbarComponent&#45;&gt;SharedModule</title>
<path fill="none" stroke="black" d="M2139.66,-122.23C2139.66,-146.93 2139.66,-188 2139.66,-188 2139.66,-188 1448.25,-188 1448.25,-188"/> <path fill="none" stroke="black" d="M2339.46,-122.17C2339.46,-124.45 2339.46,-126 2339.46,-126 2339.46,-126 1425.17,-126 1425.17,-126 1425.17,-126 1425.17,-151.72 1425.17,-151.72"/>
<polygon fill="black" stroke="black" points="1448.25,-184.5 1438.25,-188 1448.25,-191.5 1448.25,-184.5"/> <polygon fill="black" stroke="black" points="1421.67,-151.72 1425.17,-161.72 1428.67,-151.72 1421.67,-151.72"/>
</g> </g>
<!-- TokenDetailsComponent --> <!-- TokenDetailsComponent -->
<g id="node45" class="node"> <g id="node47" class="node">
<title>TokenDetailsComponent</title> <title>TokenDetailsComponent</title>
<polygon fill="#ffffb3" stroke="black" points="4556.25,-198 4399.75,-198 4399.75,-162 4556.25,-162 4556.25,-198"/> <polygon fill="#ffffb3" stroke="black" points="4556.25,-198 4399.75,-198 4399.75,-162 4556.25,-162 4556.25,-198"/>
<text text-anchor="middle" x="4478" y="-175.8" font-family="Times,serif" font-size="14.00">TokenDetailsComponent</text> <text text-anchor="middle" x="4478" y="-175.8" font-family="Times,serif" font-size="14.00">TokenDetailsComponent</text>
</g> </g>
<!-- TokenDetailsComponent&#45;&gt;TokensModule --> <!-- TokenDetailsComponent&#45;&gt;TokensModule -->
<g id="edge43" class="edge"> <g id="edge45" class="edge">
<title>TokenDetailsComponent&#45;&gt;TokensModule</title> <title>TokenDetailsComponent&#45;&gt;TokensModule</title>
<path fill="none" stroke="black" d="M4478,-198.22C4478,-218.37 4478,-248 4478,-248 4478,-248 4301.55,-248 4301.55,-248"/> <path fill="none" stroke="black" d="M4478,-198.22C4478,-218.37 4478,-248 4478,-248 4478,-248 4301.55,-248 4301.55,-248"/>
<polygon fill="black" stroke="black" points="4301.55,-244.5 4291.55,-248 4301.55,-251.5 4301.55,-244.5"/> <polygon fill="black" stroke="black" points="4301.55,-244.5 4291.55,-248 4301.55,-251.5 4301.55,-244.5"/>
</g> </g>
<!-- TokensComponent --> <!-- TokensComponent -->
<g id="node46" class="node"> <g id="node48" class="node">
<title>TokensComponent</title> <title>TokensComponent</title>
<polygon fill="#ffffb3" stroke="black" points="4381.05,-198 4258.95,-198 4258.95,-162 4381.05,-162 4381.05,-198"/> <polygon fill="#ffffb3" stroke="black" points="4381.05,-198 4258.95,-198 4258.95,-162 4381.05,-162 4381.05,-198"/>
<text text-anchor="middle" x="4320" y="-175.8" font-family="Times,serif" font-size="14.00">TokensComponent</text> <text text-anchor="middle" x="4320" y="-175.8" font-family="Times,serif" font-size="14.00">TokensComponent</text>
</g> </g>
<!-- TokensComponent&#45;&gt;TokensModule --> <!-- TokensComponent&#45;&gt;TokensModule -->
<g id="edge44" class="edge"> <g id="edge46" class="edge">
<title>TokensComponent&#45;&gt;TokensModule</title> <title>TokensComponent&#45;&gt;TokensModule</title>
<path fill="none" stroke="black" d="M4275.05,-198.22C4275.05,-198.22 4275.05,-219.73 4275.05,-219.73"/> <path fill="none" stroke="black" d="M4275.05,-198.22C4275.05,-198.22 4275.05,-219.73 4275.05,-219.73"/>
<polygon fill="black" stroke="black" points="4271.55,-219.73 4275.05,-229.73 4278.55,-219.73 4271.55,-219.73"/> <polygon fill="black" stroke="black" points="4271.55,-219.73 4275.05,-229.73 4278.55,-219.73 4271.55,-219.73"/>
</g> </g>
<!-- TokensRoutingModule --> <!-- TokensRoutingModule -->
<g id="node48" class="node"> <g id="node50" class="node">
<title>TokensRoutingModule</title> <title>TokensRoutingModule</title>
<polygon fill="#8dd3c7" stroke="black" points="4234.88,-198 4231.88,-202 4210.88,-202 4207.88,-198 4089.12,-198 4089.12,-162 4234.88,-162 4234.88,-198"/> <polygon fill="#8dd3c7" stroke="black" points="4234.88,-198 4231.88,-202 4210.88,-202 4207.88,-198 4089.12,-198 4089.12,-162 4234.88,-162 4234.88,-198"/>
<text text-anchor="middle" x="4162" y="-175.8" font-family="Times,serif" font-size="14.00">TokensRoutingModule</text> <text text-anchor="middle" x="4162" y="-175.8" font-family="Times,serif" font-size="14.00">TokensRoutingModule</text>
</g> </g>
<!-- TokensRoutingModule&#45;&gt;TokensModule --> <!-- TokensRoutingModule&#45;&gt;TokensModule -->
<g id="edge46" class="edge"> <g id="edge48" class="edge">
<title>TokensRoutingModule&#45;&gt;TokensModule</title> <title>TokensRoutingModule&#45;&gt;TokensModule</title>
<path fill="none" stroke="black" d="M4220.17,-198.22C4220.17,-198.22 4220.17,-219.73 4220.17,-219.73"/> <path fill="none" stroke="black" d="M4220.17,-198.22C4220.17,-198.22 4220.17,-219.73 4220.17,-219.73"/>
<polygon fill="black" stroke="black" points="4216.67,-219.73 4220.17,-229.73 4223.67,-219.73 4216.67,-219.73"/> <polygon fill="black" stroke="black" points="4216.67,-219.73 4220.17,-229.73 4223.67,-219.73 4216.67,-219.73"/>
</g> </g>
<!-- TransactionDetailsComponent --> <!-- TransactionDetailsComponent -->
<g id="node49" class="node"> <g id="node51" class="node">
<title>TransactionDetailsComponent</title> <title>TransactionDetailsComponent</title>
<polygon fill="#ffffb3" stroke="black" points="1123.57,-198 936.43,-198 936.43,-162 1123.57,-162 1123.57,-198"/> <polygon fill="#ffffb3" stroke="black" points="1123.57,-198 936.43,-198 936.43,-162 1123.57,-162 1123.57,-198"/>
<text text-anchor="middle" x="1030" y="-175.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent</text> <text text-anchor="middle" x="1030" y="-175.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent</text>
</g> </g>
<!-- TransactionDetailsComponent&#45;&gt;TransactionsModule --> <!-- TransactionDetailsComponent&#45;&gt;TransactionsModule -->
<g id="edge47" class="edge"> <g id="edge49" class="edge">
<title>TransactionDetailsComponent&#45;&gt;TransactionsModule</title> <title>TransactionDetailsComponent&#45;&gt;TransactionsModule</title>
<path fill="none" stroke="black" d="M1030,-198.03C1030,-215.06 1030,-238 1030,-238 1030,-238 1154.24,-238 1154.24,-238"/> <path fill="none" stroke="black" d="M1030,-198.03C1030,-215.06 1030,-238 1030,-238 1030,-238 1154.24,-238 1154.24,-238"/>
<polygon fill="black" stroke="black" points="1154.24,-241.5 1164.24,-238 1154.24,-234.5 1154.24,-241.5"/> <polygon fill="black" stroke="black" points="1154.24,-241.5 1164.24,-238 1154.24,-234.5 1154.24,-241.5"/>
</g> </g>
<!-- TransactionsComponent --> <!-- TransactionsComponent -->
<g id="node50" class="node"> <g id="node52" class="node">
<title>TransactionsComponent</title> <title>TransactionsComponent</title>
<polygon fill="#ffffb3" stroke="black" points="918.36,-198 765.64,-198 765.64,-162 918.36,-162 918.36,-198"/> <polygon fill="#ffffb3" stroke="black" points="918.36,-198 765.64,-198 765.64,-162 918.36,-162 918.36,-198"/>
<text text-anchor="middle" x="842" y="-175.8" font-family="Times,serif" font-size="14.00">TransactionsComponent</text> <text text-anchor="middle" x="842" y="-175.8" font-family="Times,serif" font-size="14.00">TransactionsComponent</text>
</g> </g>
<!-- TransactionsComponent&#45;&gt;TransactionsModule --> <!-- TransactionsComponent&#45;&gt;TransactionsModule -->
<g id="edge48" class="edge"> <g id="edge50" class="edge">
<title>TransactionsComponent&#45;&gt;TransactionsModule</title> <title>TransactionsComponent&#45;&gt;TransactionsModule</title>
<path fill="none" stroke="black" d="M842,-198.11C842,-217.34 842,-245 842,-245 842,-245 1154.18,-245 1154.18,-245"/> <path fill="none" stroke="black" d="M842,-198.11C842,-217.34 842,-245 842,-245 842,-245 1154.18,-245 1154.18,-245"/>
<polygon fill="black" stroke="black" points="1154.18,-248.5 1164.18,-245 1154.18,-241.5 1154.18,-248.5"/> <polygon fill="black" stroke="black" points="1154.18,-248.5 1164.18,-245 1154.18,-241.5 1154.18,-248.5"/>
</g> </g>
<!-- TransactionsRoutingModule --> <!-- TransactionsRoutingModule -->
<g id="node51" class="node"> <g id="node53" class="node">
<title>TransactionsRoutingModule</title> <title>TransactionsRoutingModule</title>
<polygon fill="#8dd3c7" stroke="black" points="742.2,-198 739.2,-202 718.2,-202 715.2,-198 565.8,-198 565.8,-162 742.2,-162 742.2,-198"/> <polygon fill="#8dd3c7" stroke="black" points="742.2,-198 739.2,-202 718.2,-202 715.2,-198 565.8,-198 565.8,-162 742.2,-162 742.2,-198"/>
<text text-anchor="middle" x="654" y="-175.8" font-family="Times,serif" font-size="14.00">TransactionsRoutingModule</text> <text text-anchor="middle" x="654" y="-175.8" font-family="Times,serif" font-size="14.00">TransactionsRoutingModule</text>
</g> </g>
<!-- TransactionsRoutingModule&#45;&gt;TransactionsModule --> <!-- TransactionsRoutingModule&#45;&gt;TransactionsModule -->
<g id="edge50" class="edge"> <g id="edge52" class="edge">
<title>TransactionsRoutingModule&#45;&gt;TransactionsModule</title> <title>TransactionsRoutingModule&#45;&gt;TransactionsModule</title>
<path fill="none" stroke="black" d="M654,-198.17C654,-219.5 654,-252 654,-252 654,-252 1154.21,-252 1154.21,-252"/> <path fill="none" stroke="black" d="M654,-198.17C654,-219.5 654,-252 654,-252 654,-252 1154.21,-252 1154.21,-252"/>
<polygon fill="black" stroke="black" points="1154.21,-255.5 1164.21,-252 1154.21,-248.5 1154.21,-255.5"/> <polygon fill="black" stroke="black" points="1154.21,-255.5 1164.21,-252 1154.21,-248.5 1154.21,-255.5"/>
@ -825,7 +849,7 @@
<div class="card text-center"> <div class="card text-center">
<div class="card-block"> <div class="card-block">
<h4 class="card-title"><span class="icon ion-md-cog"></span></h4> <h4 class="card-title"><span class="icon ion-md-cog"></span></h4>
<p class="card-text">21 Components</p> <p class="card-text">22 Components</p>
</div> </div>
</div> </div>
</div> </div>
@ -873,7 +897,7 @@
<div class="card text-center"> <div class="card text-center">
<div class="card-block"> <div class="card-block">
<h4 class="card-title"><span class="icon ion-md-information-circle-outline"></span></h4> <h4 class="card-title"><span class="icon ion-md-information-circle-outline"></span></h4>
<p class="card-text">13 Interfaces</p> <p class="card-text">14 Interfaces</p>
</div> </div>
</div> </div>
</div> </div>
@ -882,7 +906,7 @@
<div class="card-block"> <div class="card-block">
<h4 class="card-title"><span class="icon ion-ios-git-branch"></span></h4> <h4 class="card-title"><span class="icon ion-ios-git-branch"></span></h4>
<p class="card-text"> <p class="card-text">
<a href="./routes.html">51 Routes</a> <a href="./routes.html">0 </a>
</p> </p>
</div> </div>
</div> </div>

View File

@ -104,8 +104,8 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="11" <div class="io-line">Defined in <a href="" data-line="10"
class="link-to-prism">src/app/shared/_pipes/safe.pipe.ts:11</a></div> class="link-to-prism">src/app/shared/_pipes/safe.pipe.ts:10</a></div>
</td> </td>
</tr> </tr>
@ -171,19 +171,17 @@
<div class="tab-pane fade tab-source-code" id="c-source"> <div class="tab-pane fade tab-source-code" id="c-source">
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Pipe, PipeTransform } from &#x27;@angular/core&#x27;; <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Pipe, PipeTransform } from &#x27;@angular/core&#x27;;
import {DomSanitizer} from &#x27;@angular/platform-browser&#x27;; import { DomSanitizer } from &#x27;@angular/platform-browser&#x27;;
@Pipe({ @Pipe({
name: &#x27;safe&#x27; name: &#x27;safe&#x27;,
}) })
export class SafePipe implements PipeTransform { export class SafePipe implements PipeTransform {
constructor(private sanitizer: DomSanitizer) {} constructor(private sanitizer: DomSanitizer) {}
transform(url: string, ...args: unknown[]): unknown { transform(url: string, ...args: unknown[]): unknown {
return this.sanitizer.bypassSecurityTrustResourceUrl(url); return this.sanitizer.bypassSecurityTrustResourceUrl(url);
} }
} }
</code></pre> </code></pre>
</div> </div>

Some files were not shown because too many files have changed in this diff Show More