Add precommit hooks

This commit is contained in:
Spencer Ofwiti 2021-06-15 16:37:33 +00:00
parent 5295e47cc1
commit 6a1ca3d4a0
72 changed files with 3365 additions and 23661 deletions

1
.gitignore vendored
View File

@ -40,6 +40,7 @@ npm-debug.log
yarn-error.log yarn-error.log
testem.log testem.log
/typings /typings
/.husky
# System Files # System Files
.DS_Store .DS_Store

1
.husky/.gitignore vendored
View File

@ -1 +0,0 @@
_

View File

@ -1,30 +0,0 @@
#!/bin/sh
if [ -z "$husky_skip_init" ]; then
debug () {
[ "$HUSKY_DEBUG" = "1" ] && echo "husky (debug) - $1"
}
readonly hook_name="$(basename "$0")"
debug "starting $hook_name..."
if [ "$HUSKY" = "0" ]; then
debug "HUSKY env variable is set to 0, skipping hook"
exit 0
fi
if [ -f ~/.huskyrc ]; then
debug "sourcing ~/.huskyrc"
. ~/.huskyrc
fi
export readonly husky_skip_init=1
sh -e "$0" "$@"
exitCode="$?"
if [ $exitCode != 0 ]; then
echo "husky - $hook_name hook exited with code $exitCode (error)"
exit $exitCode
fi
exit 0
fi

View File

@ -186,7 +186,7 @@
getBySymbol(symbol: string): any { getBySymbol(symbol: string): any {
return { return {
name: 'Reserve', name: 'Reserve',
symbol: 'RSV' symbol: 'RSV',
}; };
} }
} }

View File

@ -153,13 +153,19 @@
{ id: 3, user: 'Will', role: 'superadmin', action: 'Reclaim RSV 1000', approval: true }, { id: 3, user: 'Will', role: 'superadmin', action: 'Reclaim RSV 1000', approval: true },
{ id: 4, user: 'Vivian', role: 'enroller', action: 'Complete user profile', approval: true }, { id: 4, user: 'Vivian', role: 'enroller', action: 'Complete user profile', approval: true },
{ id: 5, user: 'Jack', role: 'enroller', action: 'Reclaim RSV 200', approval: false }, { id: 5, user: 'Jack', role: 'enroller', action: 'Reclaim RSV 200', approval: false },
{ id: 6, user: 'Patience', role: 'enroller', action: 'Change user information', approval: false } {
id: 6,
user: 'Patience',
role: 'enroller',
action: 'Change user information',
approval: false,
},
]</code> ]</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="12" class="link-to-prism">src/testing/user-service-stub.ts:12</a></div> <div class="io-line">Defined in <a href="" data-line="72" class="link-to-prism">src/testing/user-service-stub.ts:72</a></div>
</td> </td>
</tr> </tr>
@ -187,11 +193,71 @@
<tr> <tr>
<td class="col-md-4"> <td class="col-md-4">
<i>Default value : </i><code>[ <i>Default value : </i><code>[
{id: 1, name: &#x27;John Doe&#x27;, phone: &#x27;+25412345678&#x27;, address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;, type: &#x27;user&#x27;, created: &#x27;08/16/2020&#x27;, balance: &#x27;12987&#x27;, failedPinAttempts: 1, status: &#x27;approved&#x27;, bio: &#x27;Bodaboda&#x27;, gender: &#x27;male&#x27;}, {
{id: 2, name: &#x27;Jane Buck&#x27;, phone: &#x27;+25412341234&#x27;, address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;, type: &#x27;vendor&#x27;, created: &#x27;04/02/2020&#x27;, balance: &#x27;56281&#x27;, failedPinAttempts: 0, status: &#x27;approved&#x27;, bio: &#x27;Groceries&#x27;, gender: &#x27;female&#x27;}, id: 1,
{id: 3, name: &#x27;Mc Donald&#x27;, phone: &#x27;+25498765432&#x27;, address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;, type: &#x27;group&#x27;, created: &#x27;11/16/2020&#x27;, balance: &#x27;450&#x27;, failedPinAttempts: 2, status: &#x27;unapproved&#x27;, bio: &#x27;Food&#x27;, gender: &#x27;male&#x27;}, name: &#x27;John Doe&#x27;,
{id: 4, name: &#x27;Hera Cles&#x27;, phone: &#x27;+25498769876&#x27;, address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;, type: &#x27;user&#x27;, created: &#x27;05/28/2020&#x27;, balance: &#x27;5621&#x27;, failedPinAttempts: 3, status: &#x27;approved&#x27;, bio: &#x27;Shop&#x27;, gender: &#x27;female&#x27;}, phone: &#x27;+25412345678&#x27;,
{id: 5, name: &#x27;Silver Fia&#x27;, phone: &#x27;+25462518374&#x27;, address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;, type: &#x27;token agent&#x27;, created: &#x27;10/10/2020&#x27;, balance: &#x27;817&#x27;, failedPinAttempts: 0, status: &#x27;unapproved&#x27;, bio: &#x27;Electronics&#x27;, gender: &#x27;male&#x27;}, address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;,
type: &#x27;user&#x27;,
created: &#x27;08/16/2020&#x27;,
balance: &#x27;12987&#x27;,
failedPinAttempts: 1,
status: &#x27;approved&#x27;,
bio: &#x27;Bodaboda&#x27;,
gender: &#x27;male&#x27;,
},
{
id: 2,
name: &#x27;Jane Buck&#x27;,
phone: &#x27;+25412341234&#x27;,
address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;,
type: &#x27;vendor&#x27;,
created: &#x27;04/02/2020&#x27;,
balance: &#x27;56281&#x27;,
failedPinAttempts: 0,
status: &#x27;approved&#x27;,
bio: &#x27;Groceries&#x27;,
gender: &#x27;female&#x27;,
},
{
id: 3,
name: &#x27;Mc Donald&#x27;,
phone: &#x27;+25498765432&#x27;,
address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;,
type: &#x27;group&#x27;,
created: &#x27;11/16/2020&#x27;,
balance: &#x27;450&#x27;,
failedPinAttempts: 2,
status: &#x27;unapproved&#x27;,
bio: &#x27;Food&#x27;,
gender: &#x27;male&#x27;,
},
{
id: 4,
name: &#x27;Hera Cles&#x27;,
phone: &#x27;+25498769876&#x27;,
address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;,
type: &#x27;user&#x27;,
created: &#x27;05/28/2020&#x27;,
balance: &#x27;5621&#x27;,
failedPinAttempts: 3,
status: &#x27;approved&#x27;,
bio: &#x27;Shop&#x27;,
gender: &#x27;female&#x27;,
},
{
id: 5,
name: &#x27;Silver Fia&#x27;,
phone: &#x27;+25462518374&#x27;,
address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;,
type: &#x27;token agent&#x27;,
created: &#x27;10/10/2020&#x27;,
balance: &#x27;817&#x27;,
failedPinAttempts: 0,
status: &#x27;unapproved&#x27;,
bio: &#x27;Electronics&#x27;,
gender: &#x27;male&#x27;,
},
]</code> ]</code>
</td> </td>
</tr> </tr>
@ -233,8 +299,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="134"
class="link-to-prism">src/testing/user-service-stub.ts:71</a></div> class="link-to-prism">src/testing/user-service-stub.ts:134</a></div>
</td> </td>
</tr> </tr>
@ -303,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="61" <div class="io-line">Defined in <a href="" data-line="124"
class="link-to-prism">src/testing/user-service-stub.ts:61</a></div> class="link-to-prism">src/testing/user-service-stub.ts:124</a></div>
</td> </td>
</tr> </tr>
@ -373,8 +439,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="103"
class="link-to-prism">src/testing/user-service-stub.ts:37</a></div> class="link-to-prism">src/testing/user-service-stub.ts:103</a></div>
</td> </td>
</tr> </tr>
@ -443,8 +509,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="87"
class="link-to-prism">src/testing/user-service-stub.ts:21</a></div> class="link-to-prism">src/testing/user-service-stub.ts:87</a></div>
</td> </td>
</tr> </tr>
@ -505,11 +571,71 @@
export class UserServiceStub { export class UserServiceStub {
users &#x3D; [ users &#x3D; [
{id: 1, name: &#x27;John Doe&#x27;, phone: &#x27;+25412345678&#x27;, address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;, type: &#x27;user&#x27;, created: &#x27;08/16/2020&#x27;, balance: &#x27;12987&#x27;, failedPinAttempts: 1, status: &#x27;approved&#x27;, bio: &#x27;Bodaboda&#x27;, gender: &#x27;male&#x27;}, {
{id: 2, name: &#x27;Jane Buck&#x27;, phone: &#x27;+25412341234&#x27;, address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;, type: &#x27;vendor&#x27;, created: &#x27;04/02/2020&#x27;, balance: &#x27;56281&#x27;, failedPinAttempts: 0, status: &#x27;approved&#x27;, bio: &#x27;Groceries&#x27;, gender: &#x27;female&#x27;}, id: 1,
{id: 3, name: &#x27;Mc Donald&#x27;, phone: &#x27;+25498765432&#x27;, address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;, type: &#x27;group&#x27;, created: &#x27;11/16/2020&#x27;, balance: &#x27;450&#x27;, failedPinAttempts: 2, status: &#x27;unapproved&#x27;, bio: &#x27;Food&#x27;, gender: &#x27;male&#x27;}, name: &#x27;John Doe&#x27;,
{id: 4, name: &#x27;Hera Cles&#x27;, phone: &#x27;+25498769876&#x27;, address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;, type: &#x27;user&#x27;, created: &#x27;05/28/2020&#x27;, balance: &#x27;5621&#x27;, failedPinAttempts: 3, status: &#x27;approved&#x27;, bio: &#x27;Shop&#x27;, gender: &#x27;female&#x27;}, phone: &#x27;+25412345678&#x27;,
{id: 5, name: &#x27;Silver Fia&#x27;, phone: &#x27;+25462518374&#x27;, address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;, type: &#x27;token agent&#x27;, created: &#x27;10/10/2020&#x27;, balance: &#x27;817&#x27;, failedPinAttempts: 0, status: &#x27;unapproved&#x27;, bio: &#x27;Electronics&#x27;, gender: &#x27;male&#x27;}, address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;,
type: &#x27;user&#x27;,
created: &#x27;08/16/2020&#x27;,
balance: &#x27;12987&#x27;,
failedPinAttempts: 1,
status: &#x27;approved&#x27;,
bio: &#x27;Bodaboda&#x27;,
gender: &#x27;male&#x27;,
},
{
id: 2,
name: &#x27;Jane Buck&#x27;,
phone: &#x27;+25412341234&#x27;,
address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;,
type: &#x27;vendor&#x27;,
created: &#x27;04/02/2020&#x27;,
balance: &#x27;56281&#x27;,
failedPinAttempts: 0,
status: &#x27;approved&#x27;,
bio: &#x27;Groceries&#x27;,
gender: &#x27;female&#x27;,
},
{
id: 3,
name: &#x27;Mc Donald&#x27;,
phone: &#x27;+25498765432&#x27;,
address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;,
type: &#x27;group&#x27;,
created: &#x27;11/16/2020&#x27;,
balance: &#x27;450&#x27;,
failedPinAttempts: 2,
status: &#x27;unapproved&#x27;,
bio: &#x27;Food&#x27;,
gender: &#x27;male&#x27;,
},
{
id: 4,
name: &#x27;Hera Cles&#x27;,
phone: &#x27;+25498769876&#x27;,
address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;,
type: &#x27;user&#x27;,
created: &#x27;05/28/2020&#x27;,
balance: &#x27;5621&#x27;,
failedPinAttempts: 3,
status: &#x27;approved&#x27;,
bio: &#x27;Shop&#x27;,
gender: &#x27;female&#x27;,
},
{
id: 5,
name: &#x27;Silver Fia&#x27;,
phone: &#x27;+25462518374&#x27;,
address: &#x27;0xc86ff893ac40d3950b4d5f94a9b837258b0a9865&#x27;,
type: &#x27;token agent&#x27;,
created: &#x27;10/10/2020&#x27;,
balance: &#x27;817&#x27;,
failedPinAttempts: 0,
status: &#x27;unapproved&#x27;,
bio: &#x27;Electronics&#x27;,
gender: &#x27;male&#x27;,
},
]; ];
actions &#x3D; [ actions &#x3D; [
@ -518,7 +644,13 @@ export class UserServiceStub {
{ id: 3, user: &#x27;Will&#x27;, role: &#x27;superadmin&#x27;, action: &#x27;Reclaim RSV 1000&#x27;, approval: true }, { id: 3, user: &#x27;Will&#x27;, role: &#x27;superadmin&#x27;, action: &#x27;Reclaim RSV 1000&#x27;, approval: true },
{ id: 4, user: &#x27;Vivian&#x27;, role: &#x27;enroller&#x27;, action: &#x27;Complete user profile&#x27;, approval: true }, { id: 4, user: &#x27;Vivian&#x27;, role: &#x27;enroller&#x27;, action: &#x27;Complete user profile&#x27;, approval: true },
{ id: 5, user: &#x27;Jack&#x27;, role: &#x27;enroller&#x27;, action: &#x27;Reclaim RSV 200&#x27;, approval: false }, { id: 5, user: &#x27;Jack&#x27;, role: &#x27;enroller&#x27;, action: &#x27;Reclaim RSV 200&#x27;, approval: false },
{ id: 6, user: &#x27;Patience&#x27;, role: &#x27;enroller&#x27;, action: &#x27;Change user information&#x27;, approval: false } {
id: 6,
user: &#x27;Patience&#x27;,
role: &#x27;enroller&#x27;,
action: &#x27;Change user information&#x27;,
approval: false,
},
]; ];
getUserById(id: string): any { getUserById(id: string): any {
@ -533,7 +665,7 @@ export class UserServiceStub {
failedPinAttempts: 1, failedPinAttempts: 1,
status: &#x27;approved&#x27;, status: &#x27;approved&#x27;,
bio: &#x27;Bodaboda&#x27;, bio: &#x27;Bodaboda&#x27;,
gender: &#x27;male&#x27; gender: &#x27;male&#x27;,
}; };
} }
@ -544,20 +676,17 @@ export class UserServiceStub {
key: { key: {
ethereum: [ ethereum: [
&#x27;0x51d3c8e2e421604e2b644117a362d589c5434739&#x27;, &#x27;0x51d3c8e2e421604e2b644117a362d589c5434739&#x27;,
&#x27;0x9D7c284907acbd4a0cE2dDD0AA69147A921a573D&#x27; &#x27;0x9D7c284907acbd4a0cE2dDD0AA69147A921a573D&#x27;,
] ],
}, },
location: { location: {
external: {}, external: {},
latitude: &#x27;22.430670&#x27;, latitude: &#x27;22.430670&#x27;,
longitude: &#x27;151.002995&#x27; longitude: &#x27;151.002995&#x27;,
}, },
selling: [ selling: [&#x27;environment&#x27;, &#x27;health&#x27;, &#x27;transport&#x27;],
&#x27;environment&#x27;, vcard:
&#x27;health&#x27;, &#x27;QkVHSU46VkNBUkQNClZFUlNJT046My4wDQpFTUFJTDphYXJuZXNlbkBob3RtYWlsLmNvbQ0KRk46S3VydMKgS3JhbmpjDQpOOktyYW5qYztLdXJ0Ozs7DQpURUw7VFlQPUNFTEw6NjkyNTAzMzQ5ODE5Ng0KRU5EOlZDQVJEDQo&#x3D;&#x27;,
&#x27;transport&#x27;
],
vcard: &#x27;QkVHSU46VkNBUkQNClZFUlNJT046My4wDQpFTUFJTDphYXJuZXNlbkBob3RtYWlsLmNvbQ0KRk46S3VydMKgS3JhbmpjDQpOOktyYW5qYztLdXJ0Ozs7DQpURUw7VFlQPUNFTEw6NjkyNTAzMzQ5ODE5Ng0KRU5EOlZDQVJEDQo&#x3D;&#x27;
}); });
} }
@ -567,7 +696,7 @@ export class UserServiceStub {
user: &#x27;Tom&#x27;, user: &#x27;Tom&#x27;,
role: &#x27;enroller&#x27;, role: &#x27;enroller&#x27;,
action: &#x27;Disburse RSV 100&#x27;, action: &#x27;Disburse RSV 100&#x27;,
approval: false approval: false,
}; };
} }
@ -577,7 +706,7 @@ export class UserServiceStub {
user: &#x27;Tom&#x27;, user: &#x27;Tom&#x27;,
role: &#x27;enroller&#x27;, role: &#x27;enroller&#x27;,
action: &#x27;Disburse RSV 100&#x27;, action: &#x27;Disburse RSV 100&#x27;,
approval: true approval: true,
}; };
} }
} }

File diff suppressed because one or more lines are too long

View File

@ -983,33 +983,61 @@ export class AccountSearchComponent implements OnInit {
&lt;/ol&gt; &lt;/ol&gt;
&lt;/nav&gt; &lt;/nav&gt;
&lt;div class&#x3D;&quot;card&quot;&gt; &lt;div class&#x3D;&quot;card&quot;&gt;
&lt;mat-card-title class&#x3D;&quot;card-header&quot;&gt; &lt;mat-card-title class&#x3D;&quot;card-header&quot;&gt; Accounts &lt;/mat-card-title&gt;
Accounts
&lt;/mat-card-title&gt;
&lt;div class&#x3D;&quot;card-body&quot;&gt; &lt;div class&#x3D;&quot;card-body&quot;&gt;
&lt;mat-tab-group&gt; &lt;mat-tab-group&gt;
&lt;mat-tab label&#x3D;&quot;Phone Number&quot;&gt; &lt;mat-tab label&#x3D;&quot;Phone Number&quot;&gt;
&lt;form [formGroup]&#x3D;&quot;phoneSearchForm&quot; (ngSubmit)&#x3D;&quot;onPhoneSearch()&quot;&gt; &lt;form [formGroup]&#x3D;&quot;phoneSearchForm&quot; (ngSubmit)&#x3D;&quot;onPhoneSearch()&quot;&gt;
&lt;mat-form-field appearance&#x3D;&quot;outline&quot;&gt; &lt;mat-form-field appearance&#x3D;&quot;outline&quot;&gt;
&lt;mat-label&gt; Search &lt;/mat-label&gt; &lt;mat-label&gt; Search &lt;/mat-label&gt;
&lt;input matInput type&#x3D;&quot;text&quot; placeholder&#x3D;&quot;Search by phone number&quot; formControlName&#x3D;&quot;phoneNumber&quot; [errorStateMatcher]&#x3D;&quot;matcher&quot;&gt; &lt;input
&lt;mat-error *ngIf&#x3D;&quot;phoneSearchSubmitted &amp;&amp; phoneSearchFormStub.phoneNumber.errors&quot;&gt;Phone Number is required.&lt;/mat-error&gt; matInput
type&#x3D;&quot;text&quot;
placeholder&#x3D;&quot;Search by phone number&quot;
formControlName&#x3D;&quot;phoneNumber&quot;
[errorStateMatcher]&#x3D;&quot;matcher&quot;
/&gt;
&lt;mat-error *ngIf&#x3D;&quot;phoneSearchSubmitted &amp;&amp; phoneSearchFormStub.phoneNumber.errors&quot;
&gt;Phone Number is required.&lt;/mat-error
&gt;
&lt;mat-icon matSuffix&gt;phone&lt;/mat-icon&gt; &lt;mat-icon matSuffix&gt;phone&lt;/mat-icon&gt;
&lt;mat-hint&gt;Phone Number&lt;/mat-hint&gt; &lt;mat-hint&gt;Phone Number&lt;/mat-hint&gt;
&lt;/mat-form-field&gt; &lt;/mat-form-field&gt;
&lt;button mat-raised-button color&#x3D;&quot;primary&quot; type&#x3D;&quot;submit&quot; class&#x3D;&quot;btn btn-outline-primary ml-3&quot;&gt; SEARCH &lt;/button&gt; &lt;button
mat-raised-button
color&#x3D;&quot;primary&quot;
type&#x3D;&quot;submit&quot;
class&#x3D;&quot;btn btn-outline-primary ml-3&quot;
&gt;
SEARCH
&lt;/button&gt;
&lt;/form&gt; &lt;/form&gt;
&lt;/mat-tab&gt; &lt;/mat-tab&gt;
&lt;mat-tab label&#x3D;&quot;Account Address&quot;&gt; &lt;mat-tab label&#x3D;&quot;Account Address&quot;&gt;
&lt;form [formGroup]&#x3D;&quot;addressSearchForm&quot; (ngSubmit)&#x3D;&quot;onAddressSearch()&quot;&gt; &lt;form [formGroup]&#x3D;&quot;addressSearchForm&quot; (ngSubmit)&#x3D;&quot;onAddressSearch()&quot;&gt;
&lt;mat-form-field appearance&#x3D;&quot;outline&quot;&gt; &lt;mat-form-field appearance&#x3D;&quot;outline&quot;&gt;
&lt;mat-label&gt; Search &lt;/mat-label&gt; &lt;mat-label&gt; Search &lt;/mat-label&gt;
&lt;input matInput type&#x3D;&quot;text&quot; placeholder&#x3D;&quot;Search by account address&quot; formControlName&#x3D;&quot;address&quot; [errorStateMatcher]&#x3D;&quot;matcher&quot;&gt; &lt;input
&lt;mat-error *ngIf&#x3D;&quot;addressSearchSubmitted &amp;&amp; addressSearchFormStub.address.errors&quot;&gt;Account Address is required.&lt;/mat-error&gt; matInput
type&#x3D;&quot;text&quot;
placeholder&#x3D;&quot;Search by account address&quot;
formControlName&#x3D;&quot;address&quot;
[errorStateMatcher]&#x3D;&quot;matcher&quot;
/&gt;
&lt;mat-error *ngIf&#x3D;&quot;addressSearchSubmitted &amp;&amp; addressSearchFormStub.address.errors&quot;
&gt;Account Address is required.&lt;/mat-error
&gt;
&lt;mat-icon matSuffix&gt;view_in_ar&lt;/mat-icon&gt; &lt;mat-icon matSuffix&gt;view_in_ar&lt;/mat-icon&gt;
&lt;mat-hint&gt;Account Address&lt;/mat-hint&gt; &lt;mat-hint&gt;Account Address&lt;/mat-hint&gt;
&lt;/mat-form-field&gt; &lt;/mat-form-field&gt;
&lt;button mat-raised-button color&#x3D;&quot;primary&quot; type&#x3D;&quot;submit&quot; class&#x3D;&quot;btn btn-outline-primary ml-3&quot;&gt; SEARCH &lt;/button&gt; &lt;button
mat-raised-button
color&#x3D;&quot;primary&quot;
type&#x3D;&quot;submit&quot;
class&#x3D;&quot;btn btn-outline-primary ml-3&quot;
&gt;
SEARCH
&lt;/button&gt;
&lt;/form&gt; &lt;/form&gt;
&lt;/mat-tab&gt; &lt;/mat-tab&gt;
&lt;/mat-tab-group&gt; &lt;/mat-tab-group&gt;
@ -1057,7 +1085,7 @@ export class AccountSearchComponent implements OnInit {
<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><!-- 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': '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 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 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'};

View File

@ -992,33 +992,61 @@ export class AccountsComponent implements OnInit {
&lt;/ol&gt; &lt;/ol&gt;
&lt;/nav&gt; &lt;/nav&gt;
&lt;div class&#x3D;&quot;card&quot;&gt; &lt;div class&#x3D;&quot;card&quot;&gt;
&lt;mat-card-title class&#x3D;&quot;card-header&quot;&gt; &lt;mat-card-title class&#x3D;&quot;card-header&quot;&gt; Accounts &lt;/mat-card-title&gt;
Accounts
&lt;/mat-card-title&gt;
&lt;div class&#x3D;&quot;card-body&quot;&gt; &lt;div class&#x3D;&quot;card-body&quot;&gt;
&lt;div class&#x3D;&quot;row card-header&quot;&gt; &lt;div class&#x3D;&quot;row card-header&quot;&gt;
&lt;mat-form-field appearance&#x3D;&quot;outline&quot;&gt; &lt;mat-form-field appearance&#x3D;&quot;outline&quot;&gt;
&lt;mat-label&gt; ACCOUNT TYPE &lt;/mat-label&gt; &lt;mat-label&gt; ACCOUNT TYPE &lt;/mat-label&gt;
&lt;mat-select id&#x3D;&quot;typeSelect&quot; [(value)]&#x3D;&quot;accountsType&quot; (selectionChange)&#x3D;&quot;filterAccounts()&quot;&gt; &lt;mat-select
id&#x3D;&quot;typeSelect&quot;
[(value)]&#x3D;&quot;accountsType&quot;
(selectionChange)&#x3D;&quot;filterAccounts()&quot;
&gt;
&lt;mat-option value&#x3D;&quot;all&quot;&gt;ALL&lt;/mat-option&gt; &lt;mat-option value&#x3D;&quot;all&quot;&gt;ALL&lt;/mat-option&gt;
&lt;mat-option *ngFor&#x3D;&quot;let accountType of accountTypes&quot; [value]&#x3D;&quot;accountType&quot;&gt; &lt;mat-option *ngFor&#x3D;&quot;let accountType of accountTypes&quot; [value]&#x3D;&quot;accountType&quot;&gt;
{{ accountType | uppercase }} {{ accountType | uppercase }}
&lt;/mat-option&gt; &lt;/mat-option&gt;
&lt;/mat-select&gt; &lt;/mat-select&gt;
&lt;/mat-form-field&gt; &lt;/mat-form-field&gt;
&lt;button mat-raised-button color&#x3D;&quot;primary&quot; type&#x3D;&quot;button&quot; class&#x3D;&quot;btn btn-outline-primary ml-auto mr-2&quot; routerLink&#x3D;&quot;/accounts/search&quot;&gt; SEARCH &lt;/button&gt; &lt;button
&lt;button mat-raised-button color&#x3D;&quot;primary&quot; type&#x3D;&quot;button&quot; class&#x3D;&quot;btn btn-outline-primary mr-2&quot; (click)&#x3D;&quot;downloadCsv()&quot;&gt; EXPORT &lt;/button&gt; mat-raised-button
color&#x3D;&quot;primary&quot;
type&#x3D;&quot;button&quot;
class&#x3D;&quot;btn btn-outline-primary ml-auto mr-2&quot;
routerLink&#x3D;&quot;/accounts/search&quot;
&gt;
SEARCH
&lt;/button&gt;
&lt;button
mat-raised-button
color&#x3D;&quot;primary&quot;
type&#x3D;&quot;button&quot;
class&#x3D;&quot;btn btn-outline-primary mr-2&quot;
(click)&#x3D;&quot;downloadCsv()&quot;
&gt;
EXPORT
&lt;/button&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;mat-form-field appearance&#x3D;&quot;outline&quot;&gt; &lt;mat-form-field appearance&#x3D;&quot;outline&quot;&gt;
&lt;mat-label&gt; Filter &lt;/mat-label&gt; &lt;mat-label&gt; Filter &lt;/mat-label&gt;
&lt;input matInput type&#x3D;&quot;text&quot; (keyup)&#x3D;&quot;doFilter($event.target.value)&quot; placeholder&#x3D;&quot;Filter&quot;&gt; &lt;input
matInput
type&#x3D;&quot;text&quot;
(keyup)&#x3D;&quot;doFilter($event.target.value)&quot;
placeholder&#x3D;&quot;Filter&quot;
/&gt;
&lt;mat-icon matSuffix&gt;search&lt;/mat-icon&gt; &lt;mat-icon matSuffix&gt;search&lt;/mat-icon&gt;
&lt;/mat-form-field&gt; &lt;/mat-form-field&gt;
&lt;mat-table class&#x3D;&quot;mat-elevation-z10&quot; [dataSource]&#x3D;&quot;dataSource&quot; matSort matSortActive&#x3D;&quot;created&quot; &lt;mat-table
matSortDirection&#x3D;&quot;desc&quot; matSortDisableClear&gt; class&#x3D;&quot;mat-elevation-z10&quot;
[dataSource]&#x3D;&quot;dataSource&quot;
matSort
matSortActive&#x3D;&quot;created&quot;
matSortDirection&#x3D;&quot;desc&quot;
matSortDisableClear
&gt;
&lt;ng-container matColumnDef&#x3D;&quot;name&quot;&gt; &lt;ng-container matColumnDef&#x3D;&quot;name&quot;&gt;
&lt;mat-header-cell *matHeaderCellDef mat-sort-header&gt; NAME &lt;/mat-header-cell&gt; &lt;mat-header-cell *matHeaderCellDef mat-sort-header&gt; NAME &lt;/mat-header-cell&gt;
&lt;mat-cell *matCellDef&#x3D;&quot;let user&quot;&gt; {{ user?.vcard.fn[0].value }} &lt;/mat-cell&gt; &lt;mat-cell *matCellDef&#x3D;&quot;let user&quot;&gt; {{ user?.vcard.fn[0].value }} &lt;/mat-cell&gt;
@ -1045,10 +1073,18 @@ export class AccountsComponent implements OnInit {
&lt;/ng-container&gt; &lt;/ng-container&gt;
&lt;mat-header-row *matHeaderRowDef&#x3D;&quot;displayedColumns&quot;&gt;&lt;/mat-header-row&gt; &lt;mat-header-row *matHeaderRowDef&#x3D;&quot;displayedColumns&quot;&gt;&lt;/mat-header-row&gt;
&lt;mat-row *matRowDef&#x3D;&quot;let account; columns: displayedColumns&quot; (click)&#x3D;&quot;viewAccount(account)&quot; matRipple&gt;&lt;/mat-row&gt; &lt;mat-row
*matRowDef&#x3D;&quot;let account; columns: displayedColumns&quot;
(click)&#x3D;&quot;viewAccount(account)&quot;
matRipple
&gt;&lt;/mat-row&gt;
&lt;/mat-table&gt; &lt;/mat-table&gt;
&lt;mat-paginator [pageSize]&#x3D;&quot;defaultPageSize&quot; [pageSizeOptions]&#x3D;&quot;pageSizeOptions&quot; showFirstLastButtons&gt;&lt;/mat-paginator&gt; &lt;mat-paginator
[pageSize]&#x3D;&quot;defaultPageSize&quot;
[pageSizeOptions]&#x3D;&quot;pageSizeOptions&quot;
showFirstLastButtons
&gt;&lt;/mat-paginator&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;/div&gt; &lt;/div&gt;
@ -1093,7 +1129,7 @@ export class AccountsComponent implements OnInit {
<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><!-- 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 | unixDate}} </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 | unixDate }} </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': '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 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 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'};

File diff suppressed because one or more lines are too long

View File

@ -785,19 +785,24 @@ export class AuthComponent implements OnInit {
&lt;/a&gt; &lt;/a&gt;
&lt;/mat-card-title&gt; &lt;/mat-card-title&gt;
&lt;div id&#x3D;&quot;one&quot; style&#x3D;&quot;display: block&quot; class&#x3D;&quot;card-body p-4&quot;&gt; &lt;div id&#x3D;&quot;one&quot; style&#x3D;&quot;display: block&quot; class&#x3D;&quot;card-body p-4&quot;&gt;
&lt;div class&#x3D;&quot;text-center w-75 m-auto&quot;&gt; &lt;div class&#x3D;&quot;text-center w-75 m-auto&quot;&gt;
&lt;h4 class&#x3D;&quot;text-dark-50 text-center font-weight-bold&quot;&gt;Add Private Key&lt;/h4&gt; &lt;h4 class&#x3D;&quot;text-dark-50 text-center font-weight-bold&quot;&gt;Add Private Key&lt;/h4&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;form [formGroup]&#x3D;&quot;keyForm&quot; (ngSubmit)&#x3D;&quot;onSubmit()&quot;&gt; &lt;form [formGroup]&#x3D;&quot;keyForm&quot; (ngSubmit)&#x3D;&quot;onSubmit()&quot;&gt;
&lt;mat-form-field appearance&#x3D;&quot;outline&quot; class&#x3D;&quot;full-width&quot;&gt; &lt;mat-form-field appearance&#x3D;&quot;outline&quot; class&#x3D;&quot;full-width&quot;&gt;
&lt;mat-label&gt;Private Key&lt;/mat-label&gt; &lt;mat-label&gt;Private Key&lt;/mat-label&gt;
&lt;textarea matInput style&#x3D;&quot;height: 30rem&quot; formControlName&#x3D;&quot;key&quot; placeholder&#x3D;&quot;Enter your private key...&quot; &lt;textarea
[errorStateMatcher]&#x3D;&quot;matcher&quot;&gt;&lt;/textarea&gt; matInput
style&#x3D;&quot;height: 30rem&quot;
formControlName&#x3D;&quot;key&quot;
placeholder&#x3D;&quot;Enter your private key...&quot;
[errorStateMatcher]&#x3D;&quot;matcher&quot;
&gt;&lt;/textarea&gt;
&lt;div *ngIf&#x3D;&quot;submitted &amp;&amp; keyFormStub.key.errors&quot; class&#x3D;&quot;invalid-feedback&quot;&gt; &lt;div *ngIf&#x3D;&quot;submitted &amp;&amp; keyFormStub.key.errors&quot; class&#x3D;&quot;invalid-feedback&quot;&gt;
&lt;mat-error *ngIf&#x3D;&quot;keyFormStub.key.errors.required&quot;&gt;Private Key is required.&lt;/mat-error&gt; &lt;mat-error *ngIf&#x3D;&quot;keyFormStub.key.errors.required&quot;
&gt;Private Key is required.&lt;/mat-error
&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;/mat-form-field&gt; &lt;/mat-form-field&gt;
@ -805,20 +810,24 @@ export class AuthComponent implements OnInit {
&lt;span *ngIf&#x3D;&quot;loading&quot; class&#x3D;&quot;spinner-border spinner-border-sm mr-1&quot;&gt;&lt;/span&gt; &lt;span *ngIf&#x3D;&quot;loading&quot; class&#x3D;&quot;spinner-border spinner-border-sm mr-1&quot;&gt;&lt;/span&gt;
Add Key Add Key
&lt;/button&gt; &lt;/button&gt;
&lt;/form&gt; &lt;/form&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;div id&#x3D;&quot;two&quot; style&#x3D;&quot;display: none&quot; class&#x3D;&quot;card-body p-4 align-items-center&quot;&gt; &lt;div id&#x3D;&quot;two&quot; style&#x3D;&quot;display: none&quot; class&#x3D;&quot;card-body p-4 align-items-center&quot;&gt;
&lt;div class&#x3D;&quot;text-center w-75 m-auto&quot;&gt; &lt;div class&#x3D;&quot;text-center w-75 m-auto&quot;&gt;
&lt;h4 id&#x3D;&quot;state&quot; class&#x3D;&quot;text-dark-50 text-center font-weight-bold&quot;&gt;&lt;/h4&gt; &lt;h4 id&#x3D;&quot;state&quot; class&#x3D;&quot;text-dark-50 text-center font-weight-bold&quot;&gt;&lt;/h4&gt;
&lt;button mat-raised-button matRipple color&#x3D;&quot;primary&quot; type&#x3D;&quot;submit&quot; (click)&#x3D;&quot;login()&quot;&gt; Login &lt;/button&gt; &lt;button mat-raised-button matRipple color&#x3D;&quot;primary&quot; type&#x3D;&quot;submit&quot; (click)&#x3D;&quot;login()&quot;&gt;
Login
&lt;/button&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;div class&#x3D;&quot;row mt-3&quot;&gt; &lt;div class&#x3D;&quot;row mt-3&quot;&gt;
&lt;div class&#x3D;&quot;col-12 text-center&quot;&gt; &lt;div class&#x3D;&quot;col-12 text-center&quot;&gt;
&lt;p class&#x3D;&quot;text-muted&quot;&gt;Change private key? &lt;a (click)&#x3D;&quot;switchWindows()&quot; class&#x3D;&quot;text-muted ml-1&quot;&gt;&lt;b&gt;Enter private key&lt;/b&gt;&lt;/a&gt;&lt;/p&gt; &lt;p class&#x3D;&quot;text-muted&quot;&gt;
&lt;/div&gt; &lt;!-- end col--&gt; Change private key?
&lt;a (click)&#x3D;&quot;switchWindows()&quot; class&#x3D;&quot;text-muted ml-1&quot;&gt;&lt;b&gt;Enter private key&lt;/b&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;!-- end col--&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;!-- end row --&gt; &lt;!-- end row --&gt;
&lt;/div&gt; &lt;/div&gt;

File diff suppressed because one or more lines are too long

View File

@ -264,12 +264,8 @@ export class ErrorDialogComponent {
<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;div&gt; <pre class="line-numbers"><code class="language-html">&lt;div&gt;
&lt;div&gt; &lt;div&gt;
&lt;p&gt; &lt;p&gt;Message: {{ data.message }}&lt;/p&gt;
Message: {{ data.message }} &lt;p *ngIf&#x3D;&quot;data.status&quot;&gt;Status: {{ data?.status }}&lt;/p&gt;
&lt;/p&gt;
&lt;p *ngIf&#x3D;&quot;data.status&quot;&gt;
Status: {{ data?.status }}
&lt;/p&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;/div&gt; &lt;/div&gt;
</code></pre> </code></pre>

View File

@ -288,10 +288,12 @@ export class FooterComponent implements OnInit {
<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;!-- Footer Start --&gt; <pre class="line-numbers"><code class="language-html">&lt;!-- Footer Start --&gt;
&lt;footer class&#x3D;&quot;footer&quot;&gt; &lt;footer class&#x3D;&quot;footer&quot;&gt;
&lt;a target&#x3D;&quot;blank&quot; title&#x3D;&quot;GPL-3&quot; href&#x3D;&quot;https://www.gnu.org/licenses/gpl-3.0.en.html&quot;&gt; Copyleft &lt;/a&gt; 🄯. &lt;a target&#x3D;&quot;blank&quot; title&#x3D;&quot;GPL-3&quot; href&#x3D;&quot;https://www.gnu.org/licenses/gpl-3.0.en.html&quot;&gt; Copyleft &lt;/a&gt;
🄯.
{{ currentYear }} {{ currentYear }}
&lt;a target&#x3D;&quot;blank&quot; title&#x3D;&quot;Gitlab@GrassrootsEconomics&quot; href&#x3D;&quot;https://gitlab.com/grassrootseconomics&quot;&gt;&lt;u&gt; Grassroots Economics &lt;/u&gt;&lt;/a&gt; &lt;a target&#x3D;&quot;blank&quot; title&#x3D;&quot;Gitlab@GrassrootsEconomics&quot; href&#x3D;&quot;https://gitlab.com/grassrootseconomics&quot;
&gt;&lt;u&gt; Grassroots Economics &lt;/u&gt;&lt;/a
&gt;
&lt;/footer&gt; &lt;/footer&gt;
&lt;!-- end Footer --&gt; &lt;!-- end Footer --&gt;
</code></pre> </code></pre>

View File

@ -379,14 +379,14 @@ export class NetworkStatusComponent implements OnInit {
<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;nav class&#x3D;&quot;navbar navbar-dark background-dark&quot;&gt; <pre class="line-numbers"><code class="language-html">&lt;nav class&#x3D;&quot;navbar navbar-dark background-dark&quot;&gt;
&lt;h1 class&#x3D;&quot;navbar-brand&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;div *ngIf&#x3D;&quot;noInternetConnection; then offlineBlock; else onlineBlock&quot;&gt;&lt;/div&gt;
&lt;ng-template #offlineBlock&gt; &lt;ng-template #offlineBlock&gt;
&lt;strong style&#x3D;&quot;color: red;&quot;&gt;OFFLINE &lt;/strong&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;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&gt;
&lt;ng-template #onlineBlock&gt; &lt;ng-template #onlineBlock&gt;
&lt;strong style&#x3D;&quot;color: lawngreen;&quot;&gt;ONLINE &lt;/strong&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;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;/ng-template&gt;
&lt;/h1&gt; &lt;/h1&gt;
&lt;/nav&gt; &lt;/nav&gt;
@ -425,7 +425,7 @@ export class NetworkStatusComponent implements OnInit {
<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><nav class="navbar navbar-dark background-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 COMPONENT_TEMPLATE = '<div><nav class="navbar navbar-dark background-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 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 DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
var ACTUAL_COMPONENT = {'name': 'NetworkStatusComponent'}; var ACTUAL_COMPONENT = {'name': 'NetworkStatusComponent'};

View File

@ -521,19 +521,31 @@ export class OrganizationComponent implements OnInit {
&lt;form [formGroup]&#x3D;&quot;organizationForm&quot; (ngSubmit)&#x3D;&quot;onSubmit()&quot;&gt; &lt;form [formGroup]&#x3D;&quot;organizationForm&quot; (ngSubmit)&#x3D;&quot;onSubmit()&quot;&gt;
&lt;mat-form-field appearance&#x3D;&quot;outline&quot;&gt; &lt;mat-form-field appearance&#x3D;&quot;outline&quot;&gt;
&lt;mat-label&gt;Default Disbursement *&lt;/mat-label&gt; &lt;mat-label&gt;Default Disbursement *&lt;/mat-label&gt;
&lt;input matInput type&#x3D;&quot;text&quot; id&#x3D;&quot;amount&quot; placeholder&#x3D;&quot;Amount&quot; formControlName&#x3D;&quot;disbursement&quot; &lt;input
[errorStateMatcher]&#x3D;&quot;matcher&quot;&gt; matInput
type&#x3D;&quot;text&quot;
id&#x3D;&quot;amount&quot;
placeholder&#x3D;&quot;Amount&quot;
formControlName&#x3D;&quot;disbursement&quot;
[errorStateMatcher]&#x3D;&quot;matcher&quot;
/&gt;
&lt;span matSuffix&gt;RCU&lt;/span&gt; &lt;span matSuffix&gt;RCU&lt;/span&gt;
&lt;mat-error *ngIf&#x3D;&quot;submitted &amp;&amp; organizationFormStub.disbursement.errors&quot;&gt; &lt;mat-error *ngIf&#x3D;&quot;submitted &amp;&amp; organizationFormStub.disbursement.errors&quot;&gt;
Default Disbursement is required. Default Disbursement is required.
&lt;/mat-error&gt; &lt;/mat-error&gt;
&lt;/mat-form-field&gt; &lt;/mat-form-field&gt;
&lt;div class&#x3D;&quot;form-group form-check&quot;&gt; &lt;div class&#x3D;&quot;form-group form-check&quot;&gt;
&lt;mat-checkbox id&#x3D;&quot;transferCard&quot; formControlName&#x3D;&quot;transfer&quot;&gt;Require Transfer Card *&lt;/mat-checkbox&gt; &lt;mat-checkbox id&#x3D;&quot;transferCard&quot; formControlName&#x3D;&quot;transfer&quot;
&gt;Require Transfer Card *&lt;/mat-checkbox
&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;mat-form-field appearance&#x3D;&quot;outline&quot;&gt; &lt;mat-form-field appearance&#x3D;&quot;outline&quot;&gt;
&lt;mat-label&gt;Default Country Code *&lt;/mat-label&gt; &lt;mat-label&gt;Default Country Code *&lt;/mat-label&gt;
&lt;mat-select id&#x3D;&quot;countryCode&quot; formControlName&#x3D;&quot;countryCode&quot; [errorStateMatcher]&#x3D;&quot;matcher&quot;&gt; &lt;mat-select
id&#x3D;&quot;countryCode&quot;
formControlName&#x3D;&quot;countryCode&quot;
[errorStateMatcher]&#x3D;&quot;matcher&quot;
&gt;
&lt;mat-option value&#x3D;&quot;KE&quot;&gt;KE Kenya&lt;/mat-option&gt; &lt;mat-option value&#x3D;&quot;KE&quot;&gt;KE Kenya&lt;/mat-option&gt;
&lt;mat-option value&#x3D;&quot;US&quot;&gt;US United States&lt;/mat-option&gt; &lt;mat-option value&#x3D;&quot;US&quot;&gt;US United States&lt;/mat-option&gt;
&lt;mat-option value&#x3D;&quot;ETH&quot;&gt;ETH Ethiopia&lt;/mat-option&gt; &lt;mat-option value&#x3D;&quot;ETH&quot;&gt;ETH Ethiopia&lt;/mat-option&gt;
@ -542,9 +554,11 @@ export class OrganizationComponent implements OnInit {
&lt;/mat-select&gt; &lt;/mat-select&gt;
&lt;mat-error *ngIf&#x3D;&quot;submitted &amp;&amp; organizationFormStub.countryCode.errors&quot;&gt; &lt;mat-error *ngIf&#x3D;&quot;submitted &amp;&amp; organizationFormStub.countryCode.errors&quot;&gt;
Country Code is required. Country Code is required.
&lt;/mat-error&gt; &lt;/mat-error&gt; &lt;/mat-form-field
&lt;/mat-form-field&gt;&lt;br&gt; &gt;&lt;br /&gt;
&lt;button mat-raised-button color&#x3D;&quot;primary&quot; type&#x3D;&quot;submit&quot; class&#x3D;&quot;btn btn-primary&quot;&gt;Submit&lt;/button&gt; &lt;button mat-raised-button color&#x3D;&quot;primary&quot; type&#x3D;&quot;submit&quot; class&#x3D;&quot;btn btn-primary&quot;&gt;
Submit
&lt;/button&gt;
&lt;/form&gt; &lt;/form&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;/div&gt; &lt;/div&gt;
@ -591,7 +605,7 @@ export class OrganizationComponent implements OnInit {
<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><!-- 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': '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 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 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'};

View File

@ -245,8 +245,14 @@ export class PagesComponent {
&lt;/ol&gt; &lt;/ol&gt;
&lt;/nav&gt; &lt;/nav&gt;
&lt;div class&#x3D;&quot;embed-responsive embed-responsive-16by9&quot;&gt; &lt;div class&#x3D;&quot;embed-responsive embed-responsive-16by9&quot;&gt;
&lt;iframe class&#x3D;&quot;embed-responsive-item&quot; [src]&#x3D;&quot;url | safe&quot; allow&#x3D;&quot;fullscreen&quot; loading&#x3D;&quot;lazy&quot; &lt;iframe
title&#x3D;&quot;Community inclusion currencies dashboard&quot; referrerpolicy&#x3D;&quot;no-referrer&quot;&gt; class&#x3D;&quot;embed-responsive-item&quot;
[src]&#x3D;&quot;url | safe&quot;
allow&#x3D;&quot;fullscreen&quot;
loading&#x3D;&quot;lazy&quot;
title&#x3D;&quot;Community inclusion currencies dashboard&quot;
referrerpolicy&#x3D;&quot;no-referrer&quot;
&gt;
&lt;p&gt; &lt;p&gt;
&lt;a href&#x3D;&quot;{{ url }}&quot;&gt; Your browser does not support iframes. &lt;/a&gt; &lt;a href&#x3D;&quot;{{ url }}&quot;&gt; Your browser does not support iframes. &lt;/a&gt;
&lt;/p&gt; &lt;/p&gt;

View File

@ -736,16 +736,14 @@ export class SettingsComponent implements OnInit {
&lt;div class&#x3D;&quot;row&quot;&gt; &lt;div class&#x3D;&quot;row&quot;&gt;
&lt;div class&#x3D;&quot;col-md-6 mb-2&quot;&gt; &lt;div class&#x3D;&quot;col-md-6 mb-2&quot;&gt;
&lt;div class&#x3D;&quot;card&quot;&gt; &lt;div class&#x3D;&quot;card&quot;&gt;
&lt;mat-card-title class&#x3D;&quot;card-header text-center&quot;&gt; &lt;mat-card-title class&#x3D;&quot;card-header text-center&quot;&gt; SETTINGS &lt;/mat-card-title&gt;
SETTINGS
&lt;/mat-card-title&gt;
&lt;div class&#x3D;&quot;card-body&quot;&gt; &lt;div class&#x3D;&quot;card-body&quot;&gt;
&lt;h4&gt;CICADA Admin Credentials&lt;/h4&gt; &lt;h4&gt;CICADA Admin Credentials&lt;/h4&gt;
&lt;span&gt;&lt;strong&gt;UserId: &lt;/strong&gt; {{ userInfo?.userid }} &lt;/span&gt;&lt;br&gt; &lt;span&gt;&lt;strong&gt;UserId: &lt;/strong&gt; {{ userInfo?.userid }} &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;strong&gt;Username: &lt;/strong&gt; {{ userInfo?.name }} &lt;/span&gt;&lt;br&gt; &lt;span&gt;&lt;strong&gt;Username: &lt;/strong&gt; {{ userInfo?.name }} &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;strong&gt;Email: &lt;/strong&gt; {{ userInfo?.email }} &lt;/span&gt; &lt;span&gt;&lt;strong&gt;Email: &lt;/strong&gt; {{ userInfo?.email }} &lt;/span&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;hr&gt; &lt;hr /&gt;
&lt;div class&#x3D;&quot;card-body&quot;&gt; &lt;div class&#x3D;&quot;card-body&quot;&gt;
&lt;h4&gt;Organization Settings&lt;/h4&gt; &lt;h4&gt;Organization Settings&lt;/h4&gt;
&lt;a routerLink&#x3D;&quot;/settings/organization&quot;&gt;&lt;i&gt;Update your organization settings&lt;/i&gt;&lt;/a&gt; &lt;a routerLink&#x3D;&quot;/settings/organization&quot;&gt;&lt;i&gt;Update your organization settings&lt;/i&gt;&lt;/a&gt;
@ -754,21 +752,27 @@ export class SettingsComponent implements OnInit {
&lt;/div&gt; &lt;/div&gt;
&lt;div class&#x3D;&quot;col-md-6 mb-2&quot;&gt; &lt;div class&#x3D;&quot;col-md-6 mb-2&quot;&gt;
&lt;div class&#x3D;&quot;card&quot;&gt; &lt;div class&#x3D;&quot;card&quot;&gt;
&lt;mat-card-title class&#x3D;&quot;card-header text-center&quot;&gt; &lt;mat-card-title class&#x3D;&quot;card-header text-center&quot;&gt; ACCOUNT MANAGEMENT &lt;/mat-card-title&gt;
ACCOUNT MANAGEMENT
&lt;/mat-card-title&gt;
&lt;div class&#x3D;&quot;card-body&quot;&gt; &lt;div class&#x3D;&quot;card-body&quot;&gt;
&lt;h4&gt;Change Password&lt;/h4&gt; &lt;h4&gt;Change Password&lt;/h4&gt;
&lt;a routerLink&#x3D;&quot;/settings&quot;&gt;&lt;i&gt;Change your account password&lt;/i&gt;&lt;/a&gt; &lt;a routerLink&#x3D;&quot;/settings&quot;&gt;&lt;i&gt;Change your account password&lt;/i&gt;&lt;/a&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;hr&gt; &lt;hr /&gt;
&lt;div class&#x3D;&quot;card-body&quot;&gt; &lt;div class&#x3D;&quot;card-body&quot;&gt;
&lt;h4&gt;Two-step authentication&lt;/h4&gt; &lt;h4&gt;Two-step authentication&lt;/h4&gt;
&lt;a routerLink&#x3D;&quot;/settings&quot;&gt;&lt;i&gt;Secure your account with two step verification&lt;/i&gt;&lt;/a&gt; &lt;a routerLink&#x3D;&quot;/settings&quot;&gt;&lt;i&gt;Secure your account with two step verification&lt;/i&gt;&lt;/a&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;hr&gt; &lt;hr /&gt;
&lt;div class&#x3D;&quot;card-body&quot;&gt; &lt;div class&#x3D;&quot;card-body&quot;&gt;
&lt;button mat-raised-button color&#x3D;&quot;primary&quot; type&#x3D;&quot;button&quot; class&#x3D;&quot;btn btn-outline-primary&quot; (click)&#x3D;&quot;logout()&quot;&gt; LOGOUT ADMIN &lt;/button&gt; &lt;button
mat-raised-button
color&#x3D;&quot;primary&quot;
type&#x3D;&quot;button&quot;
class&#x3D;&quot;btn btn-outline-primary&quot;
(click)&#x3D;&quot;logout()&quot;
&gt;
LOGOUT ADMIN
&lt;/button&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;/div&gt; &lt;/div&gt;
@ -777,18 +781,36 @@ export class SettingsComponent implements OnInit {
&lt;mat-card-title class&#x3D;&quot;card-header&quot;&gt; &lt;mat-card-title class&#x3D;&quot;card-header&quot;&gt;
&lt;div class&#x3D;&quot;row&quot;&gt; &lt;div class&#x3D;&quot;row&quot;&gt;
TRUSTED USERS TRUSTED USERS
&lt;button mat-raised-button color&#x3D;&quot;primary&quot; type&#x3D;&quot;button&quot; class&#x3D;&quot;btn btn-outline-primary ml-auto mr-2&quot; (click)&#x3D;&quot;downloadCsv()&quot;&gt; EXPORT &lt;/button&gt; &lt;button
mat-raised-button
color&#x3D;&quot;primary&quot;
type&#x3D;&quot;button&quot;
class&#x3D;&quot;btn btn-outline-primary ml-auto mr-2&quot;
(click)&#x3D;&quot;downloadCsv()&quot;
&gt;
EXPORT
&lt;/button&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;/mat-card-title&gt; &lt;/mat-card-title&gt;
&lt;div class&#x3D;&quot;card-body&quot;&gt; &lt;div class&#x3D;&quot;card-body&quot;&gt;
&lt;mat-form-field appearance&#x3D;&quot;outline&quot;&gt; &lt;mat-form-field appearance&#x3D;&quot;outline&quot;&gt;
&lt;mat-label&gt; Filter &lt;/mat-label&gt; &lt;mat-label&gt; Filter &lt;/mat-label&gt;
&lt;input matInput type&#x3D;&quot;text&quot; (keyup)&#x3D;&quot;doFilter($event.target.value)&quot; placeholder&#x3D;&quot;Filter&quot;&gt; &lt;input
matInput
type&#x3D;&quot;text&quot;
(keyup)&#x3D;&quot;doFilter($event.target.value)&quot;
placeholder&#x3D;&quot;Filter&quot;
/&gt;
&lt;mat-icon matSuffix&gt;search&lt;/mat-icon&gt; &lt;mat-icon matSuffix&gt;search&lt;/mat-icon&gt;
&lt;/mat-form-field&gt; &lt;/mat-form-field&gt;
&lt;mat-table class&#x3D;&quot;mat-elevation-z10&quot; [dataSource]&#x3D;&quot;dataSource&quot; matSort matSortActive&#x3D;&quot;name&quot; &lt;mat-table
matSortDirection&#x3D;&quot;asc&quot; matSortDisableClear&gt; class&#x3D;&quot;mat-elevation-z10&quot;
[dataSource]&#x3D;&quot;dataSource&quot;
matSort
matSortActive&#x3D;&quot;name&quot;
matSortDirection&#x3D;&quot;asc&quot;
matSortDisableClear
&gt;
&lt;ng-container matColumnDef&#x3D;&quot;name&quot;&gt; &lt;ng-container matColumnDef&#x3D;&quot;name&quot;&gt;
&lt;mat-header-cell *matHeaderCellDef mat-sort-header&gt; NAME &lt;/mat-header-cell&gt; &lt;mat-header-cell *matHeaderCellDef mat-sort-header&gt; NAME &lt;/mat-header-cell&gt;
&lt;mat-cell *matCellDef&#x3D;&quot;let user&quot;&gt; {{ user.name }} &lt;/mat-cell&gt; &lt;mat-cell *matCellDef&#x3D;&quot;let user&quot;&gt; {{ user.name }} &lt;/mat-cell&gt;
@ -808,8 +830,11 @@ export class SettingsComponent implements OnInit {
&lt;mat-row *matRowDef&#x3D;&quot;let user; columns: displayedColumns&quot;&gt;&lt;/mat-row&gt; &lt;mat-row *matRowDef&#x3D;&quot;let user; columns: displayedColumns&quot;&gt;&lt;/mat-row&gt;
&lt;/mat-table&gt; &lt;/mat-table&gt;
&lt;mat-paginator [pageSize]&#x3D;&quot;5&quot; [pageSizeOptions]&#x3D;&quot;[5, 10, 20, 50, 100]&quot; showFirstLastButtons&gt;&lt;/mat-paginator&gt; &lt;mat-paginator
[pageSize]&#x3D;&quot;5&quot;
[pageSizeOptions]&#x3D;&quot;[5, 10, 20, 50, 100]&quot;
showFirstLastButtons
&gt;&lt;/mat-paginator&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;/div&gt; &lt;/div&gt;
@ -856,7 +881,7 @@ export class SettingsComponent implements OnInit {
<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><!-- 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>CICADA Admin Credentials</h4> <span><strong>UserId: </strong> {{ userInfo?.userid }} </span><br> <span><strong>Username: </strong> {{ userInfo?.name }} </span><br> <span><strong>Email: </strong> {{ userInfo?.email }} </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>CICADA Admin Credentials</h4> <span><strong>UserId: </strong> {{ userInfo?.userid }} </span><br /> <span><strong>Username: </strong> {{ userInfo?.name }} </span><br /> <span><strong>Email: </strong> {{ userInfo?.email }} </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': '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 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 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'};

View File

@ -243,10 +243,9 @@ export class SidebarComponent implements OnInit {
&lt;div id&#x3D;&quot;sidebar&quot;&gt; &lt;div id&#x3D;&quot;sidebar&quot;&gt;
&lt;app-network-status&gt;&lt;/app-network-status&gt; &lt;app-network-status&gt;&lt;/app-network-status&gt;
&lt;nav&gt; &lt;nav&gt;
&lt;div class&#x3D;&quot;sidebar-header&quot;&gt; &lt;div class&#x3D;&quot;sidebar-header&quot;&gt;
&lt;h3&gt; &lt;h3&gt;
&lt;img class&#x3D;&quot;full-width&quot; src&#x3D;&quot;assets/images/CIC-Logo-white.png&quot; alt&#x3D;&quot;CIC Admin Dashboard&quot;&gt; &lt;img class&#x3D;&quot;full-width&quot; src&#x3D;&quot;assets/images/CIC-Logo-white.png&quot; alt&#x3D;&quot;CIC Admin Dashboard&quot; /&gt;
&lt;/h3&gt; &lt;/h3&gt;
&lt;strong&gt;CICADA&lt;/strong&gt; &lt;strong&gt;CICADA&lt;/strong&gt;
&lt;/div&gt; &lt;/div&gt;
@ -327,7 +326,7 @@ export class SidebarComponent implements OnInit {
<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><!-- ========== Left Sidebar Start ========== --><div id="sidebar"> <app-network-status></app-network-status> <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"> <app-network-status></app-network-status> <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': '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 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 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'};

View File

@ -377,7 +377,14 @@ export class TokenDetailsComponent implements OnInit {
&lt;mat-card-title class&#x3D;&quot;card-header&quot;&gt; &lt;mat-card-title class&#x3D;&quot;card-header&quot;&gt;
&lt;div class&#x3D;&quot;row&quot;&gt; &lt;div class&#x3D;&quot;row&quot;&gt;
TOKEN DETAILS TOKEN DETAILS
&lt;button mat-raised-button type&#x3D;&quot;button&quot; class&#x3D;&quot;btn btn-outline-secondary ml-auto mr-2&quot; (click)&#x3D;&quot;close()&quot;&gt; CLOSE &lt;/button&gt; &lt;button
mat-raised-button
type&#x3D;&quot;button&quot;
class&#x3D;&quot;btn btn-outline-secondary ml-auto mr-2&quot;
(click)&#x3D;&quot;close()&quot;
&gt;
CLOSE
&lt;/button&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;/mat-card-title&gt; &lt;/mat-card-title&gt;
&lt;div class&#x3D;&quot;card-body&quot;&gt; &lt;div class&#x3D;&quot;card-body&quot;&gt;
@ -391,11 +398,15 @@ export class TokenDetailsComponent implements OnInit {
&lt;span&gt;&lt;strong&gt;Address:&lt;/strong&gt; {{ token?.address }}&lt;/span&gt; &lt;span&gt;&lt;strong&gt;Address:&lt;/strong&gt; {{ token?.address }}&lt;/span&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;div&gt; &lt;div&gt;
&lt;span&gt;&lt;strong&gt;Details:&lt;/strong&gt; A community inclusive currency for trading among lower to middle income societies.&lt;/span&gt; &lt;span
&gt;&lt;strong&gt;Details:&lt;/strong&gt; A community inclusive currency for trading among lower to
middle income societies.&lt;/span
&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;div&gt; &lt;div&gt;
&lt;span&gt;&lt;strong&gt;Supply:&lt;/strong&gt; {{ token?.supply | tokenRatio }}&lt;/span&gt; &lt;span&gt;&lt;strong&gt;Supply:&lt;/strong&gt; {{ token?.supply | tokenRatio }}&lt;/span&gt;
&lt;/div&gt;&lt;br&gt; &lt;/div&gt;
&lt;br /&gt;
&lt;div&gt; &lt;div&gt;
&lt;h2&gt;Reserve&lt;/h2&gt; &lt;h2&gt;Reserve&lt;/h2&gt;
&lt;div&gt; &lt;div&gt;
@ -443,7 +454,7 @@ export class TokenDetailsComponent implements OnInit {
<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><div *ngIf="token" class="mb-3 mt-1"> <div class="card text-center"> <mat-card-title class="card-header"> <div class="row"> TOKEN DETAILS <button mat-raised-button type="button" class="btn btn-outline-secondary ml-auto mr-2" (click)="close()"> CLOSE </button> </div> </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>' var COMPONENT_TEMPLATE = '<div><div *ngIf="token" class="mb-3 mt-1"> <div class="card text-center"> <mat-card-title class="card-header"> <div class="row"> TOKEN DETAILS <button mat-raised-button type="button" class="btn btn-outline-secondary ml-auto mr-2" (click)="close()" > CLOSE </button> </div> </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>'
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 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 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'};

View File

@ -766,20 +766,38 @@ export class TokensComponent implements OnInit {
&lt;mat-card-title class&#x3D;&quot;card-header&quot;&gt; &lt;mat-card-title class&#x3D;&quot;card-header&quot;&gt;
&lt;div class&#x3D;&quot;row&quot;&gt; &lt;div class&#x3D;&quot;row&quot;&gt;
Tokens Tokens
&lt;button mat-raised-button color&#x3D;&quot;primary&quot; type&#x3D;&quot;button&quot; class&#x3D;&quot;btn btn-outline-primary ml-auto mr-2&quot; (click)&#x3D;&quot;downloadCsv()&quot;&gt; EXPORT &lt;/button&gt; &lt;button
mat-raised-button
color&#x3D;&quot;primary&quot;
type&#x3D;&quot;button&quot;
class&#x3D;&quot;btn btn-outline-primary ml-auto mr-2&quot;
(click)&#x3D;&quot;downloadCsv()&quot;
&gt;
EXPORT
&lt;/button&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;/mat-card-title&gt; &lt;/mat-card-title&gt;
&lt;div class&#x3D;&quot;card-body&quot;&gt; &lt;div class&#x3D;&quot;card-body&quot;&gt;
&lt;app-token-details [token]&#x3D;&quot;token&quot; (closeWindow)&#x3D;&quot;token &#x3D; $event&quot;&gt;&lt;/app-token-details&gt; &lt;app-token-details [token]&#x3D;&quot;token&quot; (closeWindow)&#x3D;&quot;token &#x3D; $event&quot;&gt;&lt;/app-token-details&gt;
&lt;mat-form-field appearance&#x3D;&quot;outline&quot;&gt; &lt;mat-form-field appearance&#x3D;&quot;outline&quot;&gt;
&lt;mat-label&gt; Filter &lt;/mat-label&gt; &lt;mat-label&gt; Filter &lt;/mat-label&gt;
&lt;input matInput type&#x3D;&quot;text&quot; (keyup)&#x3D;&quot;doFilter($event.target.value)&quot; placeholder&#x3D;&quot;Filter&quot;&gt; &lt;input
matInput
type&#x3D;&quot;text&quot;
(keyup)&#x3D;&quot;doFilter($event.target.value)&quot;
placeholder&#x3D;&quot;Filter&quot;
/&gt;
&lt;mat-icon matSuffix&gt;search&lt;/mat-icon&gt; &lt;mat-icon matSuffix&gt;search&lt;/mat-icon&gt;
&lt;/mat-form-field&gt; &lt;/mat-form-field&gt;
&lt;mat-table class&#x3D;&quot;mat-elevation-z10 table-responsive&quot; [dataSource]&#x3D;&quot;dataSource&quot; matSort matSortDirection&#x3D;&quot;asc&quot; matSortDisableClear&gt; &lt;mat-table
class&#x3D;&quot;mat-elevation-z10 table-responsive&quot;
[dataSource]&#x3D;&quot;dataSource&quot;
matSort
matSortDirection&#x3D;&quot;asc&quot;
matSortDisableClear
&gt;
&lt;ng-container matColumnDef&#x3D;&quot;name&quot;&gt; &lt;ng-container matColumnDef&#x3D;&quot;name&quot;&gt;
&lt;mat-header-cell *matHeaderCellDef mat-sort-header&gt; Name &lt;/mat-header-cell&gt; &lt;mat-header-cell *matHeaderCellDef mat-sort-header&gt; Name &lt;/mat-header-cell&gt;
&lt;mat-cell *matCellDef&#x3D;&quot;let token&quot;&gt; {{ token.name }} &lt;/mat-cell&gt; &lt;mat-cell *matCellDef&#x3D;&quot;let token&quot;&gt; {{ token.name }} &lt;/mat-cell&gt;
@ -801,10 +819,18 @@ export class TokensComponent implements OnInit {
&lt;/ng-container&gt; &lt;/ng-container&gt;
&lt;mat-header-row *matHeaderRowDef&#x3D;&quot;columnsToDisplay&quot;&gt;&lt;/mat-header-row&gt; &lt;mat-header-row *matHeaderRowDef&#x3D;&quot;columnsToDisplay&quot;&gt;&lt;/mat-header-row&gt;
&lt;mat-row *matRowDef&#x3D;&quot;let token; columns: columnsToDisplay&quot; (click)&#x3D;&quot;viewToken(token)&quot; matRipple&gt;&lt;/mat-row&gt; &lt;mat-row
*matRowDef&#x3D;&quot;let token; columns: columnsToDisplay&quot;
(click)&#x3D;&quot;viewToken(token)&quot;
matRipple
&gt;&lt;/mat-row&gt;
&lt;/mat-table&gt; &lt;/mat-table&gt;
&lt;mat-paginator [pageSize]&#x3D;&quot;5&quot; [pageSizeOptions]&#x3D;&quot;[5, 10, 25, 100]&quot; showFirstLastButtons&gt;&lt;/mat-paginator&gt; &lt;mat-paginator
[pageSize]&#x3D;&quot;5&quot;
[pageSizeOptions]&#x3D;&quot;[5, 10, 25, 100]&quot;
showFirstLastButtons
&gt;&lt;/mat-paginator&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;/div&gt; &lt;/div&gt;
@ -814,7 +840,6 @@ export class TokensComponent implements OnInit {
&lt;!-- End Page content --&gt; &lt;!-- End Page content --&gt;
&lt;!-- &#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D; --&gt; &lt;!-- &#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D; --&gt;
&lt;/div&gt; &lt;/div&gt;
</code></pre> </code></pre>
</div> </div>
@ -850,7 +875,7 @@ export class TokensComponent implements OnInit {
<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><!-- 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"> <app-token-details [token]="token" (closeWindow)="token = $event"></app-token-details> <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"> <app-token-details [token]="token" (closeWindow)="token = $event"></app-token-details> <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': '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 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 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'};

View File

@ -242,7 +242,13 @@ export class TopbarComponent implements OnInit {
<pre class="line-numbers"><code class="language-html">&lt;!-- Topbar Start --&gt; <pre class="line-numbers"><code class="language-html">&lt;!-- Topbar Start --&gt;
&lt;nav class&#x3D;&quot;navbar navbar-expand-lg navbar-light bg-light sticky-top&quot;&gt; &lt;nav class&#x3D;&quot;navbar navbar-expand-lg navbar-light bg-light sticky-top&quot;&gt;
&lt;div class&#x3D;&quot;container-fluid&quot;&gt; &lt;div class&#x3D;&quot;container-fluid&quot;&gt;
&lt;button type&#x3D;&quot;button&quot; id&#x3D;&quot;sidebarCollapse&quot; class&#x3D;&quot;navbar-btn menutoggle&quot; aria-label&#x3D;&quot;Sidebar toggle&quot; appMenuToggle&gt; &lt;button
type&#x3D;&quot;button&quot;
id&#x3D;&quot;sidebarCollapse&quot;
class&#x3D;&quot;navbar-btn menutoggle&quot;
aria-label&#x3D;&quot;Sidebar toggle&quot;
appMenuToggle
&gt;
&lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt; &lt;span&gt;&lt;/span&gt;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -238,7 +238,7 @@
<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;[appRouterLink]&#x27; selector: &#x27;[appRouterLink]&#x27;,
}) })
// tslint:disable-next-line:directive-class-suffix // tslint:disable-next-line:directive-class-suffix
export class RouterLinkDirectiveStub { export class RouterLinkDirectiveStub {

File diff suppressed because one or more lines are too long

View File

@ -1719,11 +1719,10 @@
logLevel: NgxLoggerLevel.ERROR, logLevel: NgxLoggerLevel.ERROR,
serverLogLevel: NgxLoggerLevel.OFF, serverLogLevel: NgxLoggerLevel.OFF,
loggingUrl: &#x27;&#x27;, loggingUrl: &#x27;&#x27;,
cicAuthUrl: &#x27;https://meta-auth.dev.grassrootseconomics.net&#x27;, cicMetaUrl: &#x27;https://meta.dev.grassrootseconomics.net&#x27;,
cicMetaUrl: &#x27;https://meta-auth.dev.grassrootseconomics.net&#x27;,
publicKeysUrl: &#x27;https://dev.grassrootseconomics.net/.well-known/publickeys/&#x27;, publicKeysUrl: &#x27;https://dev.grassrootseconomics.net/.well-known/publickeys/&#x27;,
cicCacheUrl: &#x27;http://localhost:63313&#x27;, cicCacheUrl: &#x27;https://cache.dev.grassrootseconomics.net&#x27;,
web3Provider: &#x27;ws://localhost:63546&#x27;, web3Provider: &#x27;wss://bloxberg-ws.dev.grassrootseconomics.net&#x27;,
cicUssdUrl: &#x27;https://user.dev.grassrootseconomics.net&#x27;, cicUssdUrl: &#x27;https://user.dev.grassrootseconomics.net&#x27;,
registryAddress: &#x27;0xea6225212005e86a4490018ded4bf37f3e772161&#x27;, registryAddress: &#x27;0xea6225212005e86a4490018ded4bf37f3e772161&#x27;,
trustedDeclaratorAddress: &#x27;0xEb3907eCad74a0013c259D5874AE7f22DcBcC95C&#x27;, trustedDeclaratorAddress: &#x27;0xEb3907eCad74a0013c259D5874AE7f22DcBcC95C&#x27;,
@ -1763,7 +1762,6 @@
logLevel: NgxLoggerLevel.ERROR, logLevel: NgxLoggerLevel.ERROR,
serverLogLevel: NgxLoggerLevel.OFF, serverLogLevel: NgxLoggerLevel.OFF,
loggingUrl: &#x27;&#x27;, loggingUrl: &#x27;&#x27;,
cicAuthUrl: &#x27;https://meta-auth.dev.grassrootseconomics.net&#x27;,
cicMetaUrl: &#x27;https://meta.dev.grassrootseconomics.net&#x27;, cicMetaUrl: &#x27;https://meta.dev.grassrootseconomics.net&#x27;,
publicKeysUrl: &#x27;https://dev.grassrootseconomics.net/.well-known/publickeys/&#x27;, publicKeysUrl: &#x27;https://dev.grassrootseconomics.net/.well-known/publickeys/&#x27;,
cicCacheUrl: &#x27;https://cache.dev.grassrootseconomics.net&#x27;, cicCacheUrl: &#x27;https://cache.dev.grassrootseconomics.net&#x27;,

View File

@ -65,14 +65,14 @@
<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="447,-208 447,-260 571,-260 571,-208 447,-208"/>
</g>
<g id="clust7" class="cluster"> <g id="clust7" class="cluster">
<title>cluster_AppModule_providers</title> <title>cluster_AppModule_providers</title>
<polygon fill="none" stroke="black" points="415,-78 415,-130 1178,-130 1178,-78 415,-78"/> <polygon fill="none" stroke="black" points="415,-78 415,-130 1178,-130 1178,-78 415,-78"/>
</g> </g>
<g id="clust6" class="cluster">
<title>cluster_AppModule_bootstrap</title>
<polygon fill="none" stroke="black" points="447,-208 447,-260 571,-260 571,-208 447,-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="146,-78 146,-130 407,-130 407,-78 146,-78"/> <polygon fill="none" stroke="black" points="146,-78 146,-130 407,-130 407,-78 146,-78"/>

View File

@ -24,14 +24,14 @@
<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="447,-208 447,-260 571,-260 571,-208 447,-208"/>
</g>
<g id="clust7" class="cluster"> <g id="clust7" class="cluster">
<title>cluster_AppModule_providers</title> <title>cluster_AppModule_providers</title>
<polygon fill="none" stroke="black" points="415,-78 415,-130 1178,-130 1178,-78 415,-78"/> <polygon fill="none" stroke="black" points="415,-78 415,-130 1178,-130 1178,-78 415,-78"/>
</g> </g>
<g id="clust6" class="cluster">
<title>cluster_AppModule_bootstrap</title>
<polygon fill="none" stroke="black" points="447,-208 447,-260 571,-260 571,-208 447,-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="146,-78 146,-130 407,-130 407,-78 146,-78"/> <polygon fill="none" stroke="black" points="146,-78 146,-130 407,-130 407,-78 146,-78"/>

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

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>

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

@ -65,14 +65,14 @@
<title>cluster_SharedModule</title> <title>cluster_SharedModule</title>
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 1440,-268 1440,-70 8,-70"/> <polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 1440,-268 1440,-70 8,-70"/>
</g> </g>
<g id="clust2" class="cluster">
<title>cluster_SharedModule_declarations</title>
<polygon fill="none" stroke="black" points="16,-78 16,-130 1432,-130 1432,-78 16,-78"/>
</g>
<g id="clust14" class="cluster"> <g id="clust14" class="cluster">
<title>cluster_SharedModule_exports</title> <title>cluster_SharedModule_exports</title>
<polygon fill="none" stroke="black" points="126,-208 126,-260 1245,-260 1245,-208 126,-208"/> <polygon fill="none" stroke="black" points="126,-208 126,-260 1245,-260 1245,-208 126,-208"/>
</g> </g>
<g id="clust2" class="cluster">
<title>cluster_SharedModule_declarations</title>
<polygon fill="none" stroke="black" points="16,-78 16,-130 1432,-130 1432,-78 16,-78"/>
</g>
<!-- ErrorDialogComponent --> <!-- ErrorDialogComponent -->
<g id="node1" class="node"> <g id="node1" class="node">
<title>ErrorDialogComponent</title> <title>ErrorDialogComponent</title>

View File

@ -24,14 +24,14 @@
<title>cluster_SharedModule</title> <title>cluster_SharedModule</title>
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 1440,-268 1440,-70 8,-70"/> <polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 1440,-268 1440,-70 8,-70"/>
</g> </g>
<g id="clust2" class="cluster">
<title>cluster_SharedModule_declarations</title>
<polygon fill="none" stroke="black" points="16,-78 16,-130 1432,-130 1432,-78 16,-78"/>
</g>
<g id="clust14" class="cluster"> <g id="clust14" class="cluster">
<title>cluster_SharedModule_exports</title> <title>cluster_SharedModule_exports</title>
<polygon fill="none" stroke="black" points="126,-208 126,-260 1245,-260 1245,-208 126,-208"/> <polygon fill="none" stroke="black" points="126,-208 126,-260 1245,-260 1245,-208 126,-208"/>
</g> </g>
<g id="clust2" class="cluster">
<title>cluster_SharedModule_declarations</title>
<polygon fill="none" stroke="black" points="16,-78 16,-130 1432,-130 1432,-78 16,-78"/>
</g>
<!-- ErrorDialogComponent --> <!-- ErrorDialogComponent -->
<g id="node1" class="node"> <g id="node1" class="node">
<title>ErrorDialogComponent</title> <title>ErrorDialogComponent</title>

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -65,83 +65,83 @@
<title>cluster_TransactionsModule</title> <title>cluster_TransactionsModule</title>
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 714,-268 714,-70 8,-70"/> <polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 714,-268 714,-70 8,-70"/>
</g> </g>
<g id="clust5" class="cluster">
<title>cluster_TransactionsModule_imports</title>
<polygon fill="none" stroke="black" points="398,-78 398,-130 706,-130 706,-78 398,-78"/>
</g>
<g id="clust6" class="cluster"> <g id="clust6" class="cluster">
<title>cluster_TransactionsModule_exports</title> <title>cluster_TransactionsModule_exports</title>
<polygon fill="none" stroke="black" points="238,-208 238,-260 444,-260 444,-208 238,-208"/> <polygon fill="none" stroke="black" points="288,-208 288,-260 494,-260 494,-208 288,-208"/>
</g> </g>
<g id="clust2" class="cluster"> <g id="clust2" class="cluster">
<title>cluster_TransactionsModule_declarations</title> <title>cluster_TransactionsModule_declarations</title>
<polygon fill="none" stroke="black" points="332,-78 332,-130 706,-130 706,-78 332,-78"/> <polygon fill="none" stroke="black" points="16,-78 16,-130 390,-130 390,-78 16,-78"/>
</g>
<g id="clust5" class="cluster">
<title>cluster_TransactionsModule_imports</title>
<polygon fill="none" stroke="black" points="16,-78 16,-130 324,-130 324,-78 16,-78"/>
</g> </g>
<!-- TransactionDetailsComponent --> <!-- TransactionDetailsComponent -->
<g id="node1" class="node"> <g id="node1" class="node">
<title>TransactionDetailsComponent</title> <title>TransactionDetailsComponent</title>
<polygon fill="#ffffb3" stroke="black" points="697.57,-122 510.43,-122 510.43,-86 697.57,-86 697.57,-122"/> <polygon fill="#ffffb3" stroke="black" points="381.57,-122 194.43,-122 194.43,-86 381.57,-86 381.57,-122"/>
<text text-anchor="middle" x="604" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent</text> <text text-anchor="middle" x="288" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent</text>
</g> </g>
<!-- TransactionsModule --> <!-- TransactionsModule -->
<g id="node3" class="node"> <g id="node3" class="node">
<title>TransactionsModule</title> <title>TransactionsModule</title>
<polygon fill="#8dd3c7" stroke="black" points="406.58,-187 403.58,-191 382.58,-191 379.58,-187 275.42,-187 275.42,-151 406.58,-151 406.58,-187"/> <polygon fill="#8dd3c7" stroke="black" points="456.58,-187 453.58,-191 432.58,-191 429.58,-187 325.42,-187 325.42,-151 456.58,-151 456.58,-187"/>
<text text-anchor="middle" x="341" y="-164.8" font-family="Times,serif" font-size="14.00">TransactionsModule</text> <text text-anchor="middle" x="391" y="-164.8" font-family="Times,serif" font-size="14.00">TransactionsModule</text>
</g> </g>
<!-- TransactionDetailsComponent&#45;&gt;TransactionsModule --> <!-- TransactionDetailsComponent&#45;&gt;TransactionsModule -->
<g id="edge1" class="edge"> <g id="edge1" class="edge">
<title>TransactionDetailsComponent&#45;&gt;TransactionsModule</title> <title>TransactionDetailsComponent&#45;&gt;TransactionsModule</title>
<path fill="none" stroke="black" d="M604,-122.11C604,-141.34 604,-169 604,-169 604,-169 416.69,-169 416.69,-169"/> <path fill="none" stroke="black" d="M353.5,-122.11C353.5,-122.11 353.5,-140.99 353.5,-140.99"/>
<polygon fill="black" stroke="black" points="416.69,-165.5 406.69,-169 416.69,-172.5 416.69,-165.5"/> <polygon fill="black" stroke="black" points="350,-140.99 353.5,-150.99 357,-140.99 350,-140.99"/>
</g> </g>
<!-- TransactionsComponent --> <!-- TransactionsComponent -->
<g id="node2" class="node"> <g id="node2" class="node">
<title>TransactionsComponent</title> <title>TransactionsComponent</title>
<polygon fill="#ffffb3" stroke="black" points="492.36,-122 339.64,-122 339.64,-86 492.36,-86 492.36,-122"/> <polygon fill="#ffffb3" stroke="black" points="176.36,-122 23.64,-122 23.64,-86 176.36,-86 176.36,-122"/>
<text text-anchor="middle" x="416" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionsComponent</text> <text text-anchor="middle" x="100" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionsComponent</text>
</g> </g>
<!-- TransactionsComponent&#45;&gt;TransactionsModule --> <!-- TransactionsComponent&#45;&gt;TransactionsModule -->
<g id="edge2" class="edge"> <g id="edge2" class="edge">
<title>TransactionsComponent&#45;&gt;TransactionsModule</title> <title>TransactionsComponent&#45;&gt;TransactionsModule</title>
<path fill="none" stroke="black" d="M373.05,-122.11C373.05,-122.11 373.05,-140.99 373.05,-140.99"/> <path fill="none" stroke="black" d="M100,-122.11C100,-141.34 100,-169 100,-169 100,-169 315.33,-169 315.33,-169"/>
<polygon fill="black" stroke="black" points="369.55,-140.99 373.05,-150.99 376.55,-140.99 369.55,-140.99"/> <polygon fill="black" stroke="black" points="315.33,-172.5 325.33,-169 315.33,-165.5 315.33,-172.5"/>
</g> </g>
<!-- TransactionDetailsComponent --> <!-- TransactionDetailsComponent -->
<g id="node6" class="node"> <g id="node6" class="node">
<title>TransactionDetailsComponent </title> <title>TransactionDetailsComponent </title>
<polygon fill="#fb8072" stroke="black" points="436.07,-252 245.93,-252 245.93,-216 436.07,-216 436.07,-252"/> <polygon fill="#fb8072" stroke="black" points="486.07,-252 295.93,-252 295.93,-216 486.07,-216 486.07,-252"/>
<text text-anchor="middle" x="341" y="-229.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent </text> <text text-anchor="middle" x="391" y="-229.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent </text>
</g> </g>
<!-- TransactionsModule&#45;&gt;TransactionDetailsComponent --> <!-- TransactionsModule&#45;&gt;TransactionDetailsComponent -->
<g id="edge5" class="edge"> <g id="edge5" class="edge">
<title>TransactionsModule&#45;&gt;TransactionDetailsComponent </title> <title>TransactionsModule&#45;&gt;TransactionDetailsComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M341,-187.11C341,-187.11 341,-205.99 341,-205.99"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M391,-187.11C391,-187.11 391,-205.99 391,-205.99"/>
<polygon fill="black" stroke="black" points="337.5,-205.99 341,-215.99 344.5,-205.99 337.5,-205.99"/> <polygon fill="black" stroke="black" points="387.5,-205.99 391,-215.99 394.5,-205.99 387.5,-205.99"/>
</g> </g>
<!-- SharedModule --> <!-- SharedModule -->
<g id="node4" class="node"> <g id="node4" class="node">
<title>SharedModule</title> <title>SharedModule</title>
<polygon fill="#8dd3c7" stroke="black" points="316.42,-122 313.42,-126 292.42,-126 289.42,-122 217.58,-122 217.58,-86 316.42,-86 316.42,-122"/> <polygon fill="#8dd3c7" stroke="black" points="698.42,-122 695.42,-126 674.42,-126 671.42,-122 599.58,-122 599.58,-86 698.42,-86 698.42,-122"/>
<text text-anchor="middle" x="267" y="-99.8" font-family="Times,serif" font-size="14.00">SharedModule</text> <text text-anchor="middle" x="649" y="-99.8" font-family="Times,serif" font-size="14.00">SharedModule</text>
</g> </g>
<!-- SharedModule&#45;&gt;TransactionsModule --> <!-- SharedModule&#45;&gt;TransactionsModule -->
<g id="edge3" class="edge"> <g id="edge3" class="edge">
<title>SharedModule&#45;&gt;TransactionsModule</title> <title>SharedModule&#45;&gt;TransactionsModule</title>
<path fill="none" stroke="black" d="M295.84,-122.11C295.84,-122.11 295.84,-140.99 295.84,-140.99"/> <path fill="none" stroke="black" d="M649,-122.11C649,-141.34 649,-169 649,-169 649,-169 466.77,-169 466.77,-169"/>
<polygon fill="black" stroke="black" points="292.34,-140.99 295.84,-150.99 299.34,-140.99 292.34,-140.99"/> <polygon fill="black" stroke="black" points="466.77,-165.5 456.77,-169 466.77,-172.5 466.77,-165.5"/>
</g> </g>
<!-- TransactionsRoutingModule --> <!-- TransactionsRoutingModule -->
<g id="node5" class="node"> <g id="node5" class="node">
<title>TransactionsRoutingModule</title> <title>TransactionsRoutingModule</title>
<polygon fill="#8dd3c7" stroke="black" points="200.2,-122 197.2,-126 176.2,-126 173.2,-122 23.8,-122 23.8,-86 200.2,-86 200.2,-122"/> <polygon fill="#8dd3c7" stroke="black" points="582.2,-122 579.2,-126 558.2,-126 555.2,-122 405.8,-122 405.8,-86 582.2,-86 582.2,-122"/>
<text text-anchor="middle" x="112" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionsRoutingModule</text> <text text-anchor="middle" x="494" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionsRoutingModule</text>
</g> </g>
<!-- TransactionsRoutingModule&#45;&gt;TransactionsModule --> <!-- TransactionsRoutingModule&#45;&gt;TransactionsModule -->
<g id="edge4" class="edge"> <g id="edge4" class="edge">
<title>TransactionsRoutingModule&#45;&gt;TransactionsModule</title> <title>TransactionsRoutingModule&#45;&gt;TransactionsModule</title>
<path fill="none" stroke="black" d="M112,-122.11C112,-141.34 112,-169 112,-169 112,-169 265.38,-169 265.38,-169"/> <path fill="none" stroke="black" d="M431.22,-122.11C431.22,-122.11 431.22,-140.99 431.22,-140.99"/>
<polygon fill="black" stroke="black" points="265.38,-172.5 275.38,-169 265.38,-165.5 265.38,-172.5"/> <polygon fill="black" stroke="black" points="427.72,-140.99 431.22,-150.99 434.72,-140.99 427.72,-140.99"/>
</g> </g>
</g> </g>
</svg> </svg>

View File

@ -24,83 +24,83 @@
<title>cluster_TransactionsModule</title> <title>cluster_TransactionsModule</title>
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 714,-268 714,-70 8,-70"/> <polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 714,-268 714,-70 8,-70"/>
</g> </g>
<g id="clust5" class="cluster">
<title>cluster_TransactionsModule_imports</title>
<polygon fill="none" stroke="black" points="398,-78 398,-130 706,-130 706,-78 398,-78"/>
</g>
<g id="clust6" class="cluster"> <g id="clust6" class="cluster">
<title>cluster_TransactionsModule_exports</title> <title>cluster_TransactionsModule_exports</title>
<polygon fill="none" stroke="black" points="238,-208 238,-260 444,-260 444,-208 238,-208"/> <polygon fill="none" stroke="black" points="288,-208 288,-260 494,-260 494,-208 288,-208"/>
</g> </g>
<g id="clust2" class="cluster"> <g id="clust2" class="cluster">
<title>cluster_TransactionsModule_declarations</title> <title>cluster_TransactionsModule_declarations</title>
<polygon fill="none" stroke="black" points="332,-78 332,-130 706,-130 706,-78 332,-78"/> <polygon fill="none" stroke="black" points="16,-78 16,-130 390,-130 390,-78 16,-78"/>
</g>
<g id="clust5" class="cluster">
<title>cluster_TransactionsModule_imports</title>
<polygon fill="none" stroke="black" points="16,-78 16,-130 324,-130 324,-78 16,-78"/>
</g> </g>
<!-- TransactionDetailsComponent --> <!-- TransactionDetailsComponent -->
<g id="node1" class="node"> <g id="node1" class="node">
<title>TransactionDetailsComponent</title> <title>TransactionDetailsComponent</title>
<polygon fill="#ffffb3" stroke="black" points="697.57,-122 510.43,-122 510.43,-86 697.57,-86 697.57,-122"/> <polygon fill="#ffffb3" stroke="black" points="381.57,-122 194.43,-122 194.43,-86 381.57,-86 381.57,-122"/>
<text text-anchor="middle" x="604" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent</text> <text text-anchor="middle" x="288" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent</text>
</g> </g>
<!-- TransactionsModule --> <!-- TransactionsModule -->
<g id="node3" class="node"> <g id="node3" class="node">
<title>TransactionsModule</title> <title>TransactionsModule</title>
<polygon fill="#8dd3c7" stroke="black" points="406.58,-187 403.58,-191 382.58,-191 379.58,-187 275.42,-187 275.42,-151 406.58,-151 406.58,-187"/> <polygon fill="#8dd3c7" stroke="black" points="456.58,-187 453.58,-191 432.58,-191 429.58,-187 325.42,-187 325.42,-151 456.58,-151 456.58,-187"/>
<text text-anchor="middle" x="341" y="-164.8" font-family="Times,serif" font-size="14.00">TransactionsModule</text> <text text-anchor="middle" x="391" y="-164.8" font-family="Times,serif" font-size="14.00">TransactionsModule</text>
</g> </g>
<!-- TransactionDetailsComponent&#45;&gt;TransactionsModule --> <!-- TransactionDetailsComponent&#45;&gt;TransactionsModule -->
<g id="edge1" class="edge"> <g id="edge1" class="edge">
<title>TransactionDetailsComponent&#45;&gt;TransactionsModule</title> <title>TransactionDetailsComponent&#45;&gt;TransactionsModule</title>
<path fill="none" stroke="black" d="M604,-122.11C604,-141.34 604,-169 604,-169 604,-169 416.69,-169 416.69,-169"/> <path fill="none" stroke="black" d="M353.5,-122.11C353.5,-122.11 353.5,-140.99 353.5,-140.99"/>
<polygon fill="black" stroke="black" points="416.69,-165.5 406.69,-169 416.69,-172.5 416.69,-165.5"/> <polygon fill="black" stroke="black" points="350,-140.99 353.5,-150.99 357,-140.99 350,-140.99"/>
</g> </g>
<!-- TransactionsComponent --> <!-- TransactionsComponent -->
<g id="node2" class="node"> <g id="node2" class="node">
<title>TransactionsComponent</title> <title>TransactionsComponent</title>
<polygon fill="#ffffb3" stroke="black" points="492.36,-122 339.64,-122 339.64,-86 492.36,-86 492.36,-122"/> <polygon fill="#ffffb3" stroke="black" points="176.36,-122 23.64,-122 23.64,-86 176.36,-86 176.36,-122"/>
<text text-anchor="middle" x="416" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionsComponent</text> <text text-anchor="middle" x="100" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionsComponent</text>
</g> </g>
<!-- TransactionsComponent&#45;&gt;TransactionsModule --> <!-- TransactionsComponent&#45;&gt;TransactionsModule -->
<g id="edge2" class="edge"> <g id="edge2" class="edge">
<title>TransactionsComponent&#45;&gt;TransactionsModule</title> <title>TransactionsComponent&#45;&gt;TransactionsModule</title>
<path fill="none" stroke="black" d="M373.05,-122.11C373.05,-122.11 373.05,-140.99 373.05,-140.99"/> <path fill="none" stroke="black" d="M100,-122.11C100,-141.34 100,-169 100,-169 100,-169 315.33,-169 315.33,-169"/>
<polygon fill="black" stroke="black" points="369.55,-140.99 373.05,-150.99 376.55,-140.99 369.55,-140.99"/> <polygon fill="black" stroke="black" points="315.33,-172.5 325.33,-169 315.33,-165.5 315.33,-172.5"/>
</g> </g>
<!-- TransactionDetailsComponent --> <!-- TransactionDetailsComponent -->
<g id="node6" class="node"> <g id="node6" class="node">
<title>TransactionDetailsComponent </title> <title>TransactionDetailsComponent </title>
<polygon fill="#fb8072" stroke="black" points="436.07,-252 245.93,-252 245.93,-216 436.07,-216 436.07,-252"/> <polygon fill="#fb8072" stroke="black" points="486.07,-252 295.93,-252 295.93,-216 486.07,-216 486.07,-252"/>
<text text-anchor="middle" x="341" y="-229.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent </text> <text text-anchor="middle" x="391" y="-229.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent </text>
</g> </g>
<!-- TransactionsModule&#45;&gt;TransactionDetailsComponent --> <!-- TransactionsModule&#45;&gt;TransactionDetailsComponent -->
<g id="edge5" class="edge"> <g id="edge5" class="edge">
<title>TransactionsModule&#45;&gt;TransactionDetailsComponent </title> <title>TransactionsModule&#45;&gt;TransactionDetailsComponent </title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M341,-187.11C341,-187.11 341,-205.99 341,-205.99"/> <path fill="none" stroke="black" stroke-dasharray="5,2" d="M391,-187.11C391,-187.11 391,-205.99 391,-205.99"/>
<polygon fill="black" stroke="black" points="337.5,-205.99 341,-215.99 344.5,-205.99 337.5,-205.99"/> <polygon fill="black" stroke="black" points="387.5,-205.99 391,-215.99 394.5,-205.99 387.5,-205.99"/>
</g> </g>
<!-- SharedModule --> <!-- SharedModule -->
<g id="node4" class="node"> <g id="node4" class="node">
<title>SharedModule</title> <title>SharedModule</title>
<polygon fill="#8dd3c7" stroke="black" points="316.42,-122 313.42,-126 292.42,-126 289.42,-122 217.58,-122 217.58,-86 316.42,-86 316.42,-122"/> <polygon fill="#8dd3c7" stroke="black" points="698.42,-122 695.42,-126 674.42,-126 671.42,-122 599.58,-122 599.58,-86 698.42,-86 698.42,-122"/>
<text text-anchor="middle" x="267" y="-99.8" font-family="Times,serif" font-size="14.00">SharedModule</text> <text text-anchor="middle" x="649" y="-99.8" font-family="Times,serif" font-size="14.00">SharedModule</text>
</g> </g>
<!-- SharedModule&#45;&gt;TransactionsModule --> <!-- SharedModule&#45;&gt;TransactionsModule -->
<g id="edge3" class="edge"> <g id="edge3" class="edge">
<title>SharedModule&#45;&gt;TransactionsModule</title> <title>SharedModule&#45;&gt;TransactionsModule</title>
<path fill="none" stroke="black" d="M295.84,-122.11C295.84,-122.11 295.84,-140.99 295.84,-140.99"/> <path fill="none" stroke="black" d="M649,-122.11C649,-141.34 649,-169 649,-169 649,-169 466.77,-169 466.77,-169"/>
<polygon fill="black" stroke="black" points="292.34,-140.99 295.84,-150.99 299.34,-140.99 292.34,-140.99"/> <polygon fill="black" stroke="black" points="466.77,-165.5 456.77,-169 466.77,-172.5 466.77,-165.5"/>
</g> </g>
<!-- TransactionsRoutingModule --> <!-- TransactionsRoutingModule -->
<g id="node5" class="node"> <g id="node5" class="node">
<title>TransactionsRoutingModule</title> <title>TransactionsRoutingModule</title>
<polygon fill="#8dd3c7" stroke="black" points="200.2,-122 197.2,-126 176.2,-126 173.2,-122 23.8,-122 23.8,-86 200.2,-86 200.2,-122"/> <polygon fill="#8dd3c7" stroke="black" points="582.2,-122 579.2,-126 558.2,-126 555.2,-122 405.8,-122 405.8,-86 582.2,-86 582.2,-122"/>
<text text-anchor="middle" x="112" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionsRoutingModule</text> <text text-anchor="middle" x="494" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionsRoutingModule</text>
</g> </g>
<!-- TransactionsRoutingModule&#45;&gt;TransactionsModule --> <!-- TransactionsRoutingModule&#45;&gt;TransactionsModule -->
<g id="edge4" class="edge"> <g id="edge4" class="edge">
<title>TransactionsRoutingModule&#45;&gt;TransactionsModule</title> <title>TransactionsRoutingModule&#45;&gt;TransactionsModule</title>
<path fill="none" stroke="black" d="M112,-122.11C112,-141.34 112,-169 112,-169 112,-169 265.38,-169 265.38,-169"/> <path fill="none" stroke="black" d="M431.22,-122.11C431.22,-122.11 431.22,-140.99 431.22,-140.99"/>
<polygon fill="black" stroke="black" points="265.38,-172.5 275.38,-169 265.38,-165.5 265.38,-172.5"/> <polygon fill="black" stroke="black" points="427.72,-140.99 431.22,-150.99 434.72,-140.99 427.72,-140.99"/>
</g> </g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

File diff suppressed because one or more lines are too long

View File

@ -130,7 +130,7 @@
<div class="tsd-signature tsd-kind-icon">actions<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>action<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>approval<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">; </span>id<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>role<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>user<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> = ...</span></div> <div class="tsd-signature tsd-kind-icon">actions<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>action<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>approval<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">; </span>id<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>role<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>user<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol"> = ...</span></div>
<aside class="tsd-sources"> <aside class="tsd-sources">
<ul> <ul>
<li>Defined in src/testing/user-service-stub.ts:12</li> <li>Defined in src/testing/user-service-stub.ts:72</li>
</ul> </ul>
</aside> </aside>
</section> </section>
@ -157,7 +157,7 @@
<li class="tsd-description"> <li class="tsd-description">
<aside class="tsd-sources"> <aside class="tsd-sources">
<ul> <ul>
<li>Defined in src/testing/user-service-stub.ts:71</li> <li>Defined in src/testing/user-service-stub.ts:134</li>
</ul> </ul>
</aside> </aside>
<h4 class="tsd-parameters-title">Parameters</h4> <h4 class="tsd-parameters-title">Parameters</h4>
@ -180,7 +180,7 @@
<li class="tsd-description"> <li class="tsd-description">
<aside class="tsd-sources"> <aside class="tsd-sources">
<ul> <ul>
<li>Defined in src/testing/user-service-stub.ts:61</li> <li>Defined in src/testing/user-service-stub.ts:124</li>
</ul> </ul>
</aside> </aside>
<h4 class="tsd-parameters-title">Parameters</h4> <h4 class="tsd-parameters-title">Parameters</h4>
@ -203,7 +203,7 @@
<li class="tsd-description"> <li class="tsd-description">
<aside class="tsd-sources"> <aside class="tsd-sources">
<ul> <ul>
<li>Defined in src/testing/user-service-stub.ts:37</li> <li>Defined in src/testing/user-service-stub.ts:103</li>
</ul> </ul>
</aside> </aside>
<h4 class="tsd-parameters-title">Parameters</h4> <h4 class="tsd-parameters-title">Parameters</h4>
@ -226,7 +226,7 @@
<li class="tsd-description"> <li class="tsd-description">
<aside class="tsd-sources"> <aside class="tsd-sources">
<ul> <ul>
<li>Defined in src/testing/user-service-stub.ts:21</li> <li>Defined in src/testing/user-service-stub.ts:87</li>
</ul> </ul>
</aside> </aside>
<h4 class="tsd-parameters-title">Parameters</h4> <h4 class="tsd-parameters-title">Parameters</h4>

View File

@ -83,7 +83,7 @@
<section class="tsd-panel tsd-member tsd-kind-variable tsd-parent-kind-module"> <section class="tsd-panel tsd-member tsd-kind-variable tsd-parent-kind-module">
<a name="environment" class="tsd-anchor"></a> <a name="environment" class="tsd-anchor"></a>
<h3><span class="tsd-flag ts-flagConst">Const</span> environment</h3> <h3><span class="tsd-flag ts-flagConst">Const</span> environment</h3>
<div class="tsd-signature tsd-kind-icon">environment<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>bloxbergChainId<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>cicAuthUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>cicCacheUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>cicMetaUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>cicUssdUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>logLevel<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">NgxLoggerLevel</span><span class="tsd-signature-symbol">; </span>loggingUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>production<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">; </span>publicKeysUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>registryAddress<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>serverLogLevel<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">NgxLoggerLevel</span><span class="tsd-signature-symbol">; </span>trustedDeclaratorAddress<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>web3Provider<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol"> = ...</span></div> <div class="tsd-signature tsd-kind-icon">environment<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>bloxbergChainId<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>cicCacheUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>cicMetaUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>cicUssdUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>logLevel<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">NgxLoggerLevel</span><span class="tsd-signature-symbol">; </span>loggingUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>production<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">; </span>publicKeysUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>registryAddress<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>serverLogLevel<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">NgxLoggerLevel</span><span class="tsd-signature-symbol">; </span>trustedDeclaratorAddress<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>web3Provider<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol"> = ...</span></div>
<aside class="tsd-sources"> <aside class="tsd-sources">
<ul> <ul>
<li>Defined in src/environments/environment.dev.ts:3</li> <li>Defined in src/environments/environment.dev.ts:3</li>
@ -95,9 +95,6 @@
<li class="tsd-parameter"> <li class="tsd-parameter">
<h5>bloxberg<wbr>Chain<wbr>Id<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></h5> <h5>bloxberg<wbr>Chain<wbr>Id<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></h5>
</li> </li>
<li class="tsd-parameter">
<h5>cic<wbr>Auth<wbr>Url<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5>
</li>
<li class="tsd-parameter"> <li class="tsd-parameter">
<h5>cic<wbr>Cache<wbr>Url<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5> <h5>cic<wbr>Cache<wbr>Url<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5>
</li> </li>

View File

@ -83,7 +83,7 @@
<section class="tsd-panel tsd-member tsd-kind-variable tsd-parent-kind-module"> <section class="tsd-panel tsd-member tsd-kind-variable tsd-parent-kind-module">
<a name="environment" class="tsd-anchor"></a> <a name="environment" class="tsd-anchor"></a>
<h3><span class="tsd-flag ts-flagConst">Const</span> environment</h3> <h3><span class="tsd-flag ts-flagConst">Const</span> environment</h3>
<div class="tsd-signature tsd-kind-icon">environment<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>bloxbergChainId<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>cicAuthUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>cicCacheUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>cicMetaUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>cicUssdUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>logLevel<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">NgxLoggerLevel</span><span class="tsd-signature-symbol">; </span>loggingUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>production<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">; </span>publicKeysUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>registryAddress<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>serverLogLevel<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">NgxLoggerLevel</span><span class="tsd-signature-symbol">; </span>trustedDeclaratorAddress<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>web3Provider<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol"> = ...</span></div> <div class="tsd-signature tsd-kind-icon">environment<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{ </span>bloxbergChainId<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">; </span>cicCacheUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>cicMetaUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>cicUssdUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>logLevel<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">NgxLoggerLevel</span><span class="tsd-signature-symbol">; </span>loggingUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>production<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">; </span>publicKeysUrl<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>registryAddress<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>serverLogLevel<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">NgxLoggerLevel</span><span class="tsd-signature-symbol">; </span>trustedDeclaratorAddress<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>web3Provider<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span><span class="tsd-signature-symbol"> = ...</span></div>
<aside class="tsd-sources"> <aside class="tsd-sources">
<ul> <ul>
<li>Defined in src/environments/environment.prod.ts:3</li> <li>Defined in src/environments/environment.prod.ts:3</li>
@ -95,9 +95,6 @@
<li class="tsd-parameter"> <li class="tsd-parameter">
<h5>bloxberg<wbr>Chain<wbr>Id<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></h5> <h5>bloxberg<wbr>Chain<wbr>Id<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></h5>
</li> </li>
<li class="tsd-parameter">
<h5>cic<wbr>Auth<wbr>Url<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5>
</li>
<li class="tsd-parameter"> <li class="tsd-parameter">
<h5>cic<wbr>Cache<wbr>Url<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5> <h5>cic<wbr>Cache<wbr>Url<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5>
</li> </li>

23332
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -10,8 +10,8 @@
"build:prod": "ng build --prod", "build:prod": "ng build --prod",
"start:pwa": "npm run build:prod && http-server -p 4200 dist/cic-staff-client", "start:pwa": "npm run build:prod && http-server -p 4200 dist/cic-staff-client",
"test": "ng test", "test": "ng test",
"format:check": "prettier --config ./.prettierrc --list-different \"src/{app,environments,assets}/**/*.{ts,js,json,css,scss}\"", "format:check": "prettier --config ./.prettierrc --list-different src/**/*.{ts,js,json,css,scss,html}",
"format:refactor": "prettier --config ./.prettierrc --write \"src/{app,environments,assets}/**/*.{ts,js,json,css,scss}\"", "format:refactor": "prettier --config ./.prettierrc --write src/**/*.{ts,js,json,css,scss,html}",
"format:fix": "pretty-quick --staged", "format:fix": "pretty-quick --staged",
"format:lint": "npm run format:refactor && npm run lint", "format:lint": "npm run format:refactor && npm run lint",
"lint": "ng lint", "lint": "ng lint",
@ -73,7 +73,8 @@
"karma-jasmine": "~4.0.0", "karma-jasmine": "~4.0.0",
"karma-jasmine-html-reporter": "^1.5.0", "karma-jasmine-html-reporter": "^1.5.0",
"karma-junit-reporter": "^2.0.1", "karma-junit-reporter": "^2.0.1",
"prettier": "^2.3.0", "lint-staged": "^11.0.0",
"prettier": "^2.3.1",
"pretty-quick": "^3.1.0", "pretty-quick": "^3.1.0",
"protractor": "~7.0.0", "protractor": "~7.0.0",
"secp256k1": "^4.0.2", "secp256k1": "^4.0.2",
@ -86,9 +87,18 @@
"typescript": "~4.0.2", "typescript": "~4.0.2",
"yargs": "^13.3.2" "yargs": "^13.3.2"
}, },
"lint-staged": {
"src/**/*.{js,ts,scss,md,html,json}": [
"prettier --write",
"git add"
],
"*.scss": [
"stylelint src/**/*.scss"
]
},
"husky": { "husky": {
"hooks": { "hooks": {
"pre-commit": "pretty-quick --staged & ng lint" "pre-commit": "npx pretty-quick --staged && npm run format:lint && npx lint-staged"
} }
} }
} }

View File

@ -9,19 +9,24 @@
</a> </a>
</mat-card-title> </mat-card-title>
<div id="one" style="display: block" class="card-body p-4"> <div id="one" style="display: block" class="card-body p-4">
<div class="text-center w-75 m-auto"> <div class="text-center w-75 m-auto">
<h4 class="text-dark-50 text-center font-weight-bold">Add Private Key</h4> <h4 class="text-dark-50 text-center font-weight-bold">Add Private Key</h4>
</div> </div>
<form [formGroup]="keyForm" (ngSubmit)="onSubmit()"> <form [formGroup]="keyForm" (ngSubmit)="onSubmit()">
<mat-form-field appearance="outline" class="full-width"> <mat-form-field appearance="outline" class="full-width">
<mat-label>Private Key</mat-label> <mat-label>Private Key</mat-label>
<textarea matInput style="height: 30rem" formControlName="key" placeholder="Enter your private key..." <textarea
[errorStateMatcher]="matcher"></textarea> matInput
style="height: 30rem"
formControlName="key"
placeholder="Enter your private key..."
[errorStateMatcher]="matcher"
></textarea>
<div *ngIf="submitted && keyFormStub.key.errors" class="invalid-feedback"> <div *ngIf="submitted && keyFormStub.key.errors" class="invalid-feedback">
<mat-error *ngIf="keyFormStub.key.errors.required">Private Key is required.</mat-error> <mat-error *ngIf="keyFormStub.key.errors.required"
>Private Key is required.</mat-error
>
</div> </div>
</mat-form-field> </mat-form-field>
@ -29,20 +34,24 @@
<span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span> <span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span>
Add Key Add Key
</button> </button>
</form> </form>
</div> </div>
<div id="two" style="display: none" class="card-body p-4 align-items-center"> <div id="two" style="display: none" class="card-body p-4 align-items-center">
<div class="text-center w-75 m-auto"> <div class="text-center w-75 m-auto">
<h4 id="state" class="text-dark-50 text-center font-weight-bold"></h4> <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> <button mat-raised-button matRipple color="primary" type="submit" (click)="login()">
Login
</button>
</div> </div>
<div class="row mt-3"> <div class="row mt-3">
<div class="col-12 text-center"> <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> <p class="text-muted">
</div> <!-- end col--> Change private key?
<a (click)="switchWindows()" class="text-muted ml-1"><b>Enter private key</b></a>
</p>
</div>
<!-- end col-->
</div> </div>
<!-- end row --> <!-- end row -->
</div> </div>

View File

@ -14,17 +14,19 @@
<ol class="breadcrumb"> <ol class="breadcrumb">
<li class="breadcrumb-item"><a routerLink="/home">Home</a></li> <li class="breadcrumb-item"><a routerLink="/home">Home</a></li>
<li class="breadcrumb-item"><a routerLink="/accounts">Accounts</a></li> <li class="breadcrumb-item"><a routerLink="/accounts">Accounts</a></li>
<li *ngIf="account" class="breadcrumb-item active" aria-current="page">{{account?.vcard?.fn[0].value}}</li> <li *ngIf="account" class="breadcrumb-item active" aria-current="page">
{{ account?.vcard?.fn[0].value }}
</li>
</ol> </ol>
</nav> </nav>
<div *ngIf="!account" class="text-center"> <div *ngIf="!account" class="text-center">
<div class="spinner-grow text-primary m-1" role="status" style="width: 3rem; height: 3rem;"> <div class="spinner-grow text-primary m-1" role="status" style="width: 3rem; height: 3rem">
<span class="sr-only">Loading...</span> <span class="sr-only">Loading...</span>
</div> </div>
<div class="spinner-grow text-primary m-1" role="status" style="width: 3rem; height: 3rem;"> <div class="spinner-grow text-primary m-1" role="status" style="width: 3rem; height: 3rem">
<span class="sr-only">Loading...</span> <span class="sr-only">Loading...</span>
</div> </div>
<div class="spinner-grow text-primary m-1" role="status" style="width: 3rem; height: 3rem;"> <div class="spinner-grow text-primary m-1" role="status" style="width: 3rem; height: 3rem">
<span class="sr-only">Loading...</span> <span class="sr-only">Loading...</span>
</div> </div>
</div> </div>
@ -33,11 +35,23 @@
<h3> <h3>
<strong> {{ account?.vcard?.fn[0].value }} </strong> <strong> {{ account?.vcard?.fn[0].value }} </strong>
</h3> </h3>
<span class="ml-auto"><strong>Balance:</strong> {{account?.balance | tokenRatio}} {{ tokenSymbol | uppercase }}</span> <span class="ml-auto"
<span class="ml-2"><strong>Created:</strong> {{account?.date_registered | unixDate}}</span> ><strong>Balance:</strong> {{ account?.balance | tokenRatio }}
<span class="ml-2"><strong>Address:</strong> {{ tokenSymbol | uppercase }}</span
>
<span class="ml-2"
><strong>Created:</strong> {{ account?.date_registered | unixDate }}</span
>
<span class="ml-2"
><strong>Address:</strong>
<a href="{{ bloxbergLink }}" target="_blank"> {{ accountAddress }} </a> <a href="{{ bloxbergLink }}" target="_blank"> {{ accountAddress }} </a>
<img src="assets/images/checklist.svg" class="ml-2" height="20rem" (click)="copyAddress()" alt="Copy"> <img
src="assets/images/checklist.svg"
class="ml-2"
height="20rem"
(click)="copyAddress()"
alt="Copy"
/>
</span> </span>
</div> </div>
</div> </div>
@ -45,83 +59,143 @@
<div class="card-body"> <div class="card-body">
<form [formGroup]="accountInfoForm" (ngSubmit)="saveInfo()"> <form [formGroup]="accountInfoForm" (ngSubmit)="saveInfo()">
<div class="row form-inline"> <div class="row form-inline">
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label>First Name: *</mat-label> <mat-label>First Name: *</mat-label>
<input matInput type="text" id="firstName" placeholder="{{account?.vcard?.fn[0].value.split(' ')[0]}}" <input
value="{{account?.vcard?.fn[0].value.split(' ')[0]}}" formControlName="firstName" [errorStateMatcher]="matcher"> matInput
<mat-error *ngIf="submitted && accountInfoFormStub.firstName.errors">First Name is required.</mat-error> type="text"
id="firstName"
placeholder="{{ account?.vcard?.fn[0].value.split(' ')[0] }}"
value="{{ account?.vcard?.fn[0].value.split(' ')[0] }}"
formControlName="firstName"
[errorStateMatcher]="matcher"
/>
<mat-error *ngIf="submitted && accountInfoFormStub.firstName.errors"
>First Name is required.</mat-error
>
</mat-form-field> </mat-form-field>
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label>Last Name(s): *</mat-label> <mat-label>Last Name(s): *</mat-label>
<input matInput type="text" id="lastName" placeholder="{{account?.vcard?.fn[0].value.split(' ').slice(1).join(' ')}}" <input
value="{{account?.vcard?.fn[0].value.split(' ').slice(1).join(' ')}}" formControlName="lastName" [errorStateMatcher]="matcher"> matInput
<mat-error *ngIf="submitted && accountInfoFormStub.lastName.errors">Last Name is required.</mat-error> type="text"
id="lastName"
placeholder="{{ account?.vcard?.fn[0].value.split(' ').slice(1).join(' ') }}"
value="{{ account?.vcard?.fn[0].value.split(' ').slice(1).join(' ') }}"
formControlName="lastName"
[errorStateMatcher]="matcher"
/>
<mat-error *ngIf="submitted && accountInfoFormStub.lastName.errors"
>Last Name is required.</mat-error
>
</mat-form-field> </mat-form-field>
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label>Phone Number: </mat-label> <mat-label>Phone Number: </mat-label>
<input matInput type="text" id="phoneNumber" placeholder="{{account?.vcard?.tel[0].value}}" <input
value="{{account?.vcard?.tel[0].value}}" formControlName="phoneNumber" [errorStateMatcher]="matcher"> matInput
<mat-error *ngIf="submitted && accountInfoFormStub.phoneNumber.errors">Phone Number is required.</mat-error> type="text"
id="phoneNumber"
placeholder="{{ account?.vcard?.tel[0].value }}"
value="{{ account?.vcard?.tel[0].value }}"
formControlName="phoneNumber"
[errorStateMatcher]="matcher"
/>
<mat-error *ngIf="submitted && accountInfoFormStub.phoneNumber.errors"
>Phone Number is required.</mat-error
>
</mat-form-field> </mat-form-field>
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label>Age: </mat-label> <mat-label>Age: </mat-label>
<input matInput type="text" id="age" placeholder="{{account?.age}}" <input
value="{{account?.age}}" formControlName="age" [errorStateMatcher]="matcher"> matInput
<mat-error *ngIf="submitted && accountInfoFormStub.age.errors">Age is required.</mat-error> type="text"
id="age"
placeholder="{{ account?.age }}"
value="{{ account?.age }}"
formControlName="age"
[errorStateMatcher]="matcher"
/>
<mat-error *ngIf="submitted && accountInfoFormStub.age.errors"
>Age is required.</mat-error
>
</mat-form-field> </mat-form-field>
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label> ACCOUNT TYPE: </mat-label> <mat-label> ACCOUNT TYPE: </mat-label>
<mat-select id="accountType" [(value)]="account.type" formControlName="type" <mat-select
[errorStateMatcher]="matcher"> id="accountType"
[(value)]="account.type"
formControlName="type"
[errorStateMatcher]="matcher"
>
<mat-option *ngFor="let accountType of accountTypes" [value]="accountType"> <mat-option *ngFor="let accountType of accountTypes" [value]="accountType">
{{ accountType | uppercase }} {{ accountType | uppercase }}
</mat-option> </mat-option>
</mat-select> </mat-select>
<mat-error *ngIf="submitted && accountInfoFormStub.type.errors">Type is required.</mat-error> <mat-error *ngIf="submitted && accountInfoFormStub.type.errors"
>Type is required.</mat-error
>
</mat-form-field> </mat-form-field>
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label>Bio: </mat-label> <mat-label>Bio: </mat-label>
<input matInput type="text" id="bio" placeholder="{{account?.products}}" value="{{account?.products}}" <input
formControlName="bio" [errorStateMatcher]="matcher"> matInput
<mat-error *ngIf="submitted && accountInfoFormStub.bio.errors">Bio is required.</mat-error> type="text"
id="bio"
placeholder="{{ account?.products }}"
value="{{ account?.products }}"
formControlName="bio"
[errorStateMatcher]="matcher"
/>
<mat-error *ngIf="submitted && accountInfoFormStub.bio.errors"
>Bio is required.</mat-error
>
</mat-form-field> </mat-form-field>
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label> GENDER: </mat-label> <mat-label> GENDER: </mat-label>
<mat-select id="gender" [(value)]="account.gender" formControlName="gender" <mat-select
[errorStateMatcher]="matcher"> id="gender"
[(value)]="account.gender"
formControlName="gender"
[errorStateMatcher]="matcher"
>
<mat-option *ngFor="let gender of genders" [value]="gender"> <mat-option *ngFor="let gender of genders" [value]="gender">
{{ gender | uppercase }} {{ gender | uppercase }}
</mat-option> </mat-option>
</mat-select> </mat-select>
<mat-error *ngIf="submitted && accountInfoFormStub.gender.errors">Gender is required.</mat-error> <mat-error *ngIf="submitted && accountInfoFormStub.gender.errors"
>Gender is required.</mat-error
>
</mat-form-field> </mat-form-field>
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label> BUSINESS CATEGORY: </mat-label> <mat-label> BUSINESS CATEGORY: </mat-label>
<mat-select id="businessCategory" [(value)]="account.category" formControlName="businessCategory" <mat-select
[errorStateMatcher]="matcher"> id="businessCategory"
[(value)]="account.category"
formControlName="businessCategory"
[errorStateMatcher]="matcher"
>
<mat-option *ngFor="let category of categories" [value]="category"> <mat-option *ngFor="let category of categories" [value]="category">
{{ category | titlecase }} {{ category | titlecase }}
</mat-option> </mat-option>
@ -135,9 +209,15 @@
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label>User Location: </mat-label> <mat-label>User Location: </mat-label>
<input matInput type="text" id="userLocation" placeholder="{{account?.location.area_name}}" <input
value="{{account?.location.area_name}}" formControlName="userLocation" matInput
[errorStateMatcher]="matcher"> type="text"
id="userLocation"
placeholder="{{ account?.location.area_name }}"
value="{{ account?.location.area_name }}"
formControlName="userLocation"
[errorStateMatcher]="matcher"
/>
<mat-error *ngIf="submitted && accountInfoFormStub.userLocation.errors"> <mat-error *ngIf="submitted && accountInfoFormStub.userLocation.errors">
User Location is required. User Location is required.
</mat-error> </mat-error>
@ -147,50 +227,82 @@
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label> LOCATION: </mat-label> <mat-label> LOCATION: </mat-label>
<mat-select id="location" [(value)]="account.location.area" formControlName="location" <mat-select
[errorStateMatcher]="matcher"> id="location"
[(value)]="account.location.area"
formControlName="location"
[errorStateMatcher]="matcher"
>
<mat-option *ngFor="let area of areaNames" [value]="area"> <mat-option *ngFor="let area of areaNames" [value]="area">
{{ area | uppercase }} {{ area | uppercase }}
</mat-option> </mat-option>
</mat-select> </mat-select>
<mat-error *ngIf="submitted && accountInfoFormStub.location.errors">Location is required.</mat-error> <mat-error *ngIf="submitted && accountInfoFormStub.location.errors"
>Location is required.</mat-error
>
</mat-form-field> </mat-form-field>
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label> LOCATION TYPE: </mat-label> <mat-label> LOCATION TYPE: </mat-label>
<mat-select id="locationType" [(value)]="account.location.area_type" formControlName="locationType" <mat-select
[errorStateMatcher]="matcher"> id="locationType"
[(value)]="account.location.area_type"
formControlName="locationType"
[errorStateMatcher]="matcher"
>
<mat-option *ngFor="let type of areaTypes" [value]="type"> <mat-option *ngFor="let type of areaTypes" [value]="type">
{{ type | uppercase }} {{ type | uppercase }}
</mat-option> </mat-option>
</mat-select> </mat-select>
<mat-error *ngIf="submitted && accountInfoFormStub.locationType.errors">Location Type is required.</mat-error> <mat-error *ngIf="submitted && accountInfoFormStub.locationType.errors"
>Location Type is required.</mat-error
>
</mat-form-field> </mat-form-field>
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<button mat-raised-button color="primary" type="button" class="btn btn-outline-primary mb-3"> <button
mat-raised-button
color="primary"
type="button"
class="btn btn-outline-primary mb-3"
>
Add User KYC Add User KYC
</button> </button>
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<button mat-raised-button color="primary" type="button" class="btn btn-outline-success mb-3" <button
(click)="resetPin()"> mat-raised-button
color="primary"
type="button"
class="btn btn-outline-success mb-3"
(click)="resetPin()"
>
Reset Pin Reset Pin
</button> </button>
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<button mat-raised-button color="warn" type="button" class="btn btn-outline-danger mb-3"> <button
mat-raised-button
color="warn"
type="button"
class="btn btn-outline-danger mb-3"
>
Delete User Delete User
</button> </button>
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<button mat-raised-button color="primary" type="submit" class="btn btn-outline-primary"> <button
mat-raised-button
color="primary"
type="submit"
class="btn btn-outline-primary"
>
SAVE DETAILS SAVE DETAILS
</button> </button>
</div> </div>
@ -200,13 +312,13 @@
</div> </div>
<div class="card mb-3"> <div class="card mb-3">
<mat-card-title class="card-header"> <mat-card-title class="card-header"> USER </mat-card-title>
USER
</mat-card-title>
<div class="card-body"> <div class="card-body">
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-striped table-bordered table-hover"> <table class="table table-striped table-bordered table-hover">
<caption> 1 user </caption> <caption>
1 user
</caption>
<thead class="thead-dark"> <thead class="thead-dark">
<tr> <tr>
<th scope="col">NAME</th> <th scope="col">NAME</th>
@ -234,54 +346,94 @@
<mat-tab-group *ngIf="account" dynamicHeight mat-align-tabs="start"> <mat-tab-group *ngIf="account" dynamicHeight mat-align-tabs="start">
<mat-tab label="Transactions"> <mat-tab label="Transactions">
<app-transaction-details [transaction]="transaction" (closeWindow)="transaction = $event"></app-transaction-details> <app-transaction-details
[transaction]="transaction"
(closeWindow)="transaction = $event"
></app-transaction-details>
<div class="card mt-1"> <div class="card mt-1">
<div class="card-header"> <div class="card-header">
<div class="row"> <div class="row">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label> TRANSACTION TYPE </mat-label> <mat-label> TRANSACTION TYPE </mat-label>
<mat-select id="transferSelect" [(value)]="transactionsType" (selectionChange)="filterTransactions()"> <mat-select
id="transferSelect"
[(value)]="transactionsType"
(selectionChange)="filterTransactions()"
>
<mat-option value="all">ALL TRANSFERS</mat-option> <mat-option value="all">ALL TRANSFERS</mat-option>
<mat-option *ngFor="let transactionType of transactionsTypes" [value]="transactionType"> <mat-option
*ngFor="let transactionType of transactionsTypes"
[value]="transactionType"
>
{{ transactionType | uppercase }} {{ transactionType | uppercase }}
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto mr-2" (click)="downloadCsv(transactions, 'transactions')"> EXPORT </button> <button
mat-raised-button
color="primary"
type="button"
class="btn btn-outline-primary ml-auto mr-2"
(click)="downloadCsv(transactions, 'transactions')"
>
EXPORT
</button>
</div> </div>
</div> </div>
<div class="card-body"> <div class="card-body">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label> Filter </mat-label> <mat-label> Filter </mat-label>
<input matInput type="text" (keyup)="doTransactionFilter($event.target.value)" placeholder="Filter"> <input
matInput
type="text"
(keyup)="doTransactionFilter($event.target.value)"
placeholder="Filter"
/>
<mat-icon matSuffix>search</mat-icon> <mat-icon matSuffix>search</mat-icon>
</mat-form-field> </mat-form-field>
<table mat-table class="mat-elevation-z10" [dataSource]="transactionsDataSource" matSort matSortActive="created" <table
#TransactionTableSort="matSort" matSortDirection="asc" matSortDisableClear> mat-table
class="mat-elevation-z10"
[dataSource]="transactionsDataSource"
matSort
matSortActive="created"
#TransactionTableSort="matSort"
matSortDirection="asc"
matSortDisableClear
>
<ng-container matColumnDef="sender"> <ng-container matColumnDef="sender">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Sender</th> <th mat-header-cell *matHeaderCellDef mat-sort-header>Sender</th>
<td mat-cell *matCellDef="let transaction"> {{transaction?.sender?.vcard.fn[0].value || transaction.from}} </td> <td mat-cell *matCellDef="let transaction">
{{ transaction?.sender?.vcard.fn[0].value || transaction.from }}
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="recipient"> <ng-container matColumnDef="recipient">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Recipient</th> <th mat-header-cell *matHeaderCellDef mat-sort-header>Recipient</th>
<td mat-cell *matCellDef="let transaction"> {{transaction?.recipient?.vcard.fn[0].value || transaction.to}} </td> <td mat-cell *matCellDef="let transaction">
{{ transaction?.recipient?.vcard.fn[0].value || transaction.to }}
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="value"> <ng-container matColumnDef="value">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Value</th> <th mat-header-cell *matHeaderCellDef mat-sort-header>Value</th>
<td mat-cell *matCellDef="let transaction"> <td mat-cell *matCellDef="let transaction">
<span *ngIf="transaction.type == 'transaction'">{{transaction?.value | tokenRatio}} {{ tokenSymbol | uppercase }}</span> <span *ngIf="transaction.type == 'transaction'"
<span *ngIf="transaction.type == 'conversion'">{{transaction?.toValue | tokenRatio}} {{ tokenSymbol | uppercase }}</span> >{{ transaction?.value | tokenRatio }} {{ tokenSymbol | uppercase }}</span
>
<span *ngIf="transaction.type == 'conversion'"
>{{ transaction?.toValue | tokenRatio }} {{ tokenSymbol | uppercase }}</span
>
</td> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="created"> <ng-container matColumnDef="created">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Created</th> <th mat-header-cell *matHeaderCellDef mat-sort-header>Created</th>
<td mat-cell *matCellDef="let transaction"> {{transaction?.tx.timestamp | unixDate}} </td> <td mat-cell *matCellDef="let transaction">
{{ transaction?.tx.timestamp | unixDate }}
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="type"> <ng-container matColumnDef="type">
@ -292,63 +444,97 @@
</ng-container> </ng-container>
<tr mat-header-row *matHeaderRowDef="transactionsDisplayedColumns"></tr> <tr mat-header-row *matHeaderRowDef="transactionsDisplayedColumns"></tr>
<tr mat-row *matRowDef="let transaction; columns: transactionsDisplayedColumns" matRipple <tr
(click)="viewTransaction(transaction)"></tr> mat-row
*matRowDef="let transaction; columns: transactionsDisplayedColumns"
matRipple
(click)="viewTransaction(transaction)"
></tr>
</table> </table>
<mat-paginator #TransactionTablePaginator="matPaginator" [pageSize]="transactionsDefaultPageSize" <mat-paginator
[pageSizeOptions]="transactionsPageSizeOptions" showFirstLastButtons></mat-paginator> #TransactionTablePaginator="matPaginator"
[pageSize]="transactionsDefaultPageSize"
[pageSizeOptions]="transactionsPageSizeOptions"
showFirstLastButtons
></mat-paginator>
</div> </div>
</div> </div>
</mat-tab> </mat-tab>
<mat-tab label="Users"> <mat-tab label="Users">
<div class="card mt-1"> <div class="card mt-1">
<mat-card-title class="card-header"> <mat-card-title class="card-header"> Accounts </mat-card-title>
Accounts
</mat-card-title>
<div class="card-body"> <div class="card-body">
<div class="row card-header"> <div class="row card-header">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label> ACCOUNT TYPE </mat-label> <mat-label> ACCOUNT TYPE </mat-label>
<mat-select id="typeSelect" [(value)]="accountsType" (selectionChange)="filterAccounts()"> <mat-select
id="typeSelect"
[(value)]="accountsType"
(selectionChange)="filterAccounts()"
>
<mat-option value="all">ALL</mat-option> <mat-option value="all">ALL</mat-option>
<mat-option *ngFor="let accountType of accountTypes" [value]="accountType"> <mat-option *ngFor="let accountType of accountTypes" [value]="accountType">
{{ accountType | uppercase }} {{ accountType | uppercase }}
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto mr-2" (click)="downloadCsv(accounts, 'accounts')"> EXPORT </button> <button
mat-raised-button
color="primary"
type="button"
class="btn btn-outline-primary ml-auto mr-2"
(click)="downloadCsv(accounts, 'accounts')"
>
EXPORT
</button>
</div> </div>
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label> Filter </mat-label> <mat-label> Filter </mat-label>
<input matInput type="text" (keyup)="doUserFilter($event.target.value)" placeholder="Filter"> <input
matInput
type="text"
(keyup)="doUserFilter($event.target.value)"
placeholder="Filter"
/>
<mat-icon matSuffix>search</mat-icon> <mat-icon matSuffix>search</mat-icon>
</mat-form-field> </mat-form-field>
<mat-table class="mat-elevation-z10" [dataSource]="userDataSource" matSort #UserTableSort="matSort" <mat-table
matSortActive="created" matSortDirection="desc" matSortDisableClear> class="mat-elevation-z10"
[dataSource]="userDataSource"
matSort
#UserTableSort="matSort"
matSortActive="created"
matSortDirection="desc"
matSortDisableClear
>
<ng-container matColumnDef="name"> <ng-container matColumnDef="name">
<mat-header-cell *matHeaderCellDef mat-sort-header> NAME </mat-header-cell> <mat-header-cell *matHeaderCellDef mat-sort-header> NAME </mat-header-cell>
<mat-cell *matCellDef="let user"> {{ user?.vcard.fn[0].value }} </mat-cell> <mat-cell *matCellDef="let user"> {{ user?.vcard.fn[0].value }} </mat-cell>
</ng-container> </ng-container>
<ng-container matColumnDef="phone"> <ng-container matColumnDef="phone">
<mat-header-cell *matHeaderCellDef mat-sort-header> PHONE NUMBER </mat-header-cell> <mat-header-cell *matHeaderCellDef mat-sort-header>
PHONE NUMBER
</mat-header-cell>
<mat-cell *matCellDef="let user"> {{ user?.vcard.tel[0].value }} </mat-cell> <mat-cell *matCellDef="let user"> {{ user?.vcard.tel[0].value }} </mat-cell>
</ng-container> </ng-container>
<ng-container matColumnDef="created"> <ng-container matColumnDef="created">
<mat-header-cell *matHeaderCellDef mat-sort-header> CREATED </mat-header-cell> <mat-header-cell *matHeaderCellDef mat-sort-header> CREATED </mat-header-cell>
<mat-cell *matCellDef="let user"> {{user?.date_registered | unixDate}} </mat-cell> <mat-cell *matCellDef="let user">
{{ user?.date_registered | unixDate }}
</mat-cell>
</ng-container> </ng-container>
<ng-container matColumnDef="balance"> <ng-container matColumnDef="balance">
<mat-header-cell *matHeaderCellDef mat-sort-header> BALANCE </mat-header-cell> <mat-header-cell *matHeaderCellDef mat-sort-header> BALANCE </mat-header-cell>
<mat-cell *matCellDef="let user"> {{user?.balance | tokenRatio}} {{tokenSymbol | uppercase}} </mat-cell> <mat-cell *matCellDef="let user">
{{ user?.balance | tokenRatio }} {{ tokenSymbol | uppercase }}
</mat-cell>
</ng-container> </ng-container>
<ng-container matColumnDef="location"> <ng-container matColumnDef="location">
@ -356,13 +542,20 @@
<mat-cell *matCellDef="let user"> {{ user?.location.area_name }} </mat-cell> <mat-cell *matCellDef="let user"> {{ user?.location.area_name }} </mat-cell>
</ng-container> </ng-container>
<mat-header-row *matHeaderRowDef=userDisplayedColumns></mat-header-row> <mat-header-row *matHeaderRowDef="userDisplayedColumns"></mat-header-row>
<mat-row *matRowDef="let account; columns: userDisplayedColumns" (click)="viewAccount(account)" <mat-row
matRipple></mat-row> *matRowDef="let account; columns: userDisplayedColumns"
(click)="viewAccount(account)"
matRipple
></mat-row>
</mat-table> </mat-table>
<mat-paginator #UserTablePaginator="matPaginator" [pageSize]="usersDefaultPageSize" <mat-paginator
[pageSizeOptions]="usersPageSizeOptions" showFirstLastButtons></mat-paginator> #UserTablePaginator="matPaginator"
[pageSize]="usersDefaultPageSize"
[pageSizeOptions]="usersPageSizeOptions"
showFirstLastButtons
></mat-paginator>
</div> </div>
</div> </div>
</mat-tab> </mat-tab>

View File

@ -18,33 +18,61 @@
</ol> </ol>
</nav> </nav>
<div class="card"> <div class="card">
<mat-card-title class="card-header"> <mat-card-title class="card-header"> Accounts </mat-card-title>
Accounts
</mat-card-title>
<div class="card-body"> <div class="card-body">
<mat-tab-group> <mat-tab-group>
<mat-tab label="Phone Number"> <mat-tab label="Phone Number">
<form [formGroup]="phoneSearchForm" (ngSubmit)="onPhoneSearch()"> <form [formGroup]="phoneSearchForm" (ngSubmit)="onPhoneSearch()">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label> Search </mat-label> <mat-label> Search </mat-label>
<input matInput type="text" placeholder="Search by phone number" formControlName="phoneNumber" [errorStateMatcher]="matcher"> <input
<mat-error *ngIf="phoneSearchSubmitted && phoneSearchFormStub.phoneNumber.errors">Phone Number is required.</mat-error> 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-icon matSuffix>phone</mat-icon>
<mat-hint>Phone Number</mat-hint> <mat-hint>Phone Number</mat-hint>
</mat-form-field> </mat-form-field>
<button mat-raised-button color="primary" type="submit" class="btn btn-outline-primary ml-3"> SEARCH </button> <button
mat-raised-button
color="primary"
type="submit"
class="btn btn-outline-primary ml-3"
>
SEARCH
</button>
</form> </form>
</mat-tab> </mat-tab>
<mat-tab label="Account Address"> <mat-tab label="Account Address">
<form [formGroup]="addressSearchForm" (ngSubmit)="onAddressSearch()"> <form [formGroup]="addressSearchForm" (ngSubmit)="onAddressSearch()">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label> Search </mat-label> <mat-label> Search </mat-label>
<input matInput type="text" placeholder="Search by account address" formControlName="address" [errorStateMatcher]="matcher"> <input
<mat-error *ngIf="addressSearchSubmitted && addressSearchFormStub.address.errors">Account Address is required.</mat-error> 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-icon matSuffix>view_in_ar</mat-icon>
<mat-hint>Account Address</mat-hint> <mat-hint>Account Address</mat-hint>
</mat-form-field> </mat-form-field>
<button mat-raised-button color="primary" type="submit" class="btn btn-outline-primary ml-3"> SEARCH </button> <button
mat-raised-button
color="primary"
type="submit"
class="btn btn-outline-primary ml-3"
>
SEARCH
</button>
</form> </form>
</mat-tab> </mat-tab>
</mat-tab-group> </mat-tab-group>

View File

@ -17,33 +17,61 @@
</ol> </ol>
</nav> </nav>
<div class="card"> <div class="card">
<mat-card-title class="card-header"> <mat-card-title class="card-header"> Accounts </mat-card-title>
Accounts
</mat-card-title>
<div class="card-body"> <div class="card-body">
<div class="row card-header"> <div class="row card-header">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label> ACCOUNT TYPE </mat-label> <mat-label> ACCOUNT TYPE </mat-label>
<mat-select id="typeSelect" [(value)]="accountsType" (selectionChange)="filterAccounts()"> <mat-select
id="typeSelect"
[(value)]="accountsType"
(selectionChange)="filterAccounts()"
>
<mat-option value="all">ALL</mat-option> <mat-option value="all">ALL</mat-option>
<mat-option *ngFor="let accountType of accountTypes" [value]="accountType"> <mat-option *ngFor="let accountType of accountTypes" [value]="accountType">
{{ accountType | uppercase }} {{ accountType | uppercase }}
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </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
<button mat-raised-button color="primary" type="button" class="btn btn-outline-primary mr-2" (click)="downloadCsv()"> EXPORT </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> </div>
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label> Filter </mat-label> <mat-label> Filter </mat-label>
<input matInput type="text" (keyup)="doFilter($event.target.value)" placeholder="Filter"> <input
matInput
type="text"
(keyup)="doFilter($event.target.value)"
placeholder="Filter"
/>
<mat-icon matSuffix>search</mat-icon> <mat-icon matSuffix>search</mat-icon>
</mat-form-field> </mat-form-field>
<mat-table class="mat-elevation-z10" [dataSource]="dataSource" matSort matSortActive="created" <mat-table
matSortDirection="desc" matSortDisableClear> class="mat-elevation-z10"
[dataSource]="dataSource"
matSort
matSortActive="created"
matSortDirection="desc"
matSortDisableClear
>
<ng-container matColumnDef="name"> <ng-container matColumnDef="name">
<mat-header-cell *matHeaderCellDef mat-sort-header> NAME </mat-header-cell> <mat-header-cell *matHeaderCellDef mat-sort-header> NAME </mat-header-cell>
<mat-cell *matCellDef="let user"> {{ user?.vcard.fn[0].value }} </mat-cell> <mat-cell *matCellDef="let user"> {{ user?.vcard.fn[0].value }} </mat-cell>
@ -70,10 +98,18 @@
</ng-container> </ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row> <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let account; columns: displayedColumns" (click)="viewAccount(account)" matRipple></mat-row> <mat-row
*matRowDef="let account; columns: displayedColumns"
(click)="viewAccount(account)"
matRipple
></mat-row>
</mat-table> </mat-table>
<mat-paginator [pageSize]="defaultPageSize" [pageSizeOptions]="pageSizeOptions" showFirstLastButtons></mat-paginator> <mat-paginator
[pageSize]="defaultPageSize"
[pageSizeOptions]="pageSizeOptions"
showFirstLastButtons
></mat-paginator>
</div> </div>
</div> </div>
</div> </div>

View File

@ -18,61 +18,110 @@
</ol> </ol>
</nav> </nav>
<div class="card"> <div class="card">
<mat-card-title class="card-header text-center"> <mat-card-title class="card-header text-center"> CREATE A USER ACCOUNT </mat-card-title>
CREATE A USER ACCOUNT
</mat-card-title>
<div class="card-body"> <div class="card-body">
<form class="row form-inline" [formGroup]="createForm" (ngSubmit)="onSubmit()"> <form class="row form-inline" [formGroup]="createForm" (ngSubmit)="onSubmit()">
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label>Account Type: </mat-label> <mat-label>Account Type: </mat-label>
<mat-select id="accountType" formControlName="accountType" [errorStateMatcher]="matcher"> <mat-select
id="accountType"
formControlName="accountType"
[errorStateMatcher]="matcher"
>
<mat-option *ngFor="let accountType of accountTypes" [value]="accountType"> <mat-option *ngFor="let accountType of accountTypes" [value]="accountType">
{{ accountType | uppercase }} {{ accountType | uppercase }}
</mat-option> </mat-option>
</mat-select> </mat-select>
<mat-error *ngIf="submitted && createFormStub.accountType.errors">Account type is required.</mat-error> <mat-error *ngIf="submitted && createFormStub.accountType.errors"
</mat-form-field><br> >Account type is required.</mat-error
> </mat-form-field
><br />
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label>ID Number: </mat-label> <mat-label>ID Number: </mat-label>
<input matInput type="text" id="idNumber" placeholder="ID Number" formControlName="idNumber" [errorStateMatcher]="matcher"> <input
<mat-error *ngIf="submitted && createFormStub.idNumber.errors">ID Number is required.</mat-error> matInput
type="text"
id="idNumber"
placeholder="ID Number"
formControlName="idNumber"
[errorStateMatcher]="matcher"
/>
<mat-error *ngIf="submitted && createFormStub.idNumber.errors"
>ID Number is required.</mat-error
>
</mat-form-field> </mat-form-field>
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label>Phone Number: </mat-label> <mat-label>Phone Number: </mat-label>
<input matInput type="text" id="phoneNumber" placeholder="Phone Number" formControlName="phoneNumber" [errorStateMatcher]="matcher"> <input
<mat-error *ngIf="submitted && createFormStub.phoneNumber.errors">Phone Number is required.</mat-error> matInput
</mat-form-field><br> type="text"
id="phoneNumber"
placeholder="Phone Number"
formControlName="phoneNumber"
[errorStateMatcher]="matcher"
/>
<mat-error *ngIf="submitted && createFormStub.phoneNumber.errors"
>Phone Number is required.</mat-error
> </mat-form-field
><br />
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label>Given Name(s):* </mat-label> <mat-label>Given Name(s):* </mat-label>
<input matInput type="text" id="givenNames" placeholder="Given Names" formControlName="givenName" [errorStateMatcher]="matcher"> <input
<mat-error *ngIf="submitted && createFormStub.givenName.errors">Given Names are required.</mat-error> matInput
</mat-form-field><br> type="text"
id="givenNames"
placeholder="Given Names"
formControlName="givenName"
[errorStateMatcher]="matcher"
/>
<mat-error *ngIf="submitted && createFormStub.givenName.errors"
>Given Names are required.</mat-error
> </mat-form-field
><br />
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label>Family/Surname: </mat-label> <mat-label>Family/Surname: </mat-label>
<input matInput type="text" id="surname" placeholder="Surname" formControlName="surname" [errorStateMatcher]="matcher"> <input
<mat-error *ngIf="submitted && createFormStub.surname.errors">Surname is required.</mat-error> matInput
</mat-form-field><br> type="text"
id="surname"
placeholder="Surname"
formControlName="surname"
[errorStateMatcher]="matcher"
/>
<mat-error *ngIf="submitted && createFormStub.surname.errors"
>Surname is required.</mat-error
> </mat-form-field
><br />
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label>Directory Entry: </mat-label> <mat-label>Directory Entry: </mat-label>
<input matInput type="text" id="directoryEntry" placeholder="Directory Entry" formControlName="directoryEntry" [errorStateMatcher]="matcher"> <input
<mat-error *ngIf="submitted && createFormStub.directoryEntry.errors">Directory Entry is required.</mat-error> matInput
</mat-form-field><br> type="text"
id="directoryEntry"
placeholder="Directory Entry"
formControlName="directoryEntry"
[errorStateMatcher]="matcher"
/>
<mat-error *ngIf="submitted && createFormStub.directoryEntry.errors"
>Directory Entry is required.</mat-error
> </mat-form-field
><br />
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
@ -83,8 +132,10 @@
{{ area | uppercase }} {{ area | uppercase }}
</mat-option> </mat-option>
</mat-select> </mat-select>
<mat-error *ngIf="submitted && createFormStub.location.errors">Location is required.</mat-error> <mat-error *ngIf="submitted && createFormStub.location.errors"
</mat-form-field><br> >Location is required.</mat-error
> </mat-form-field
><br />
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
@ -95,31 +146,56 @@
{{ gender | uppercase }} {{ gender | uppercase }}
</mat-option> </mat-option>
</mat-select> </mat-select>
<mat-error *ngIf="submitted && createFormStub.gender.errors">Gender is required.</mat-error> <mat-error *ngIf="submitted && createFormStub.gender.errors"
</mat-form-field><br> >Gender is required.</mat-error
> </mat-form-field
><br />
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label>Referrer Phone Number: </mat-label> <mat-label>Referrer Phone Number: </mat-label>
<input matInput type="text" id="referredBy" placeholder="Reffered By" formControlName="referrer" [errorStateMatcher]="matcher"> <input
<mat-error *ngIf="submitted && createFormStub.referrer.errors">Referrer is required.</mat-error> matInput
</mat-form-field><br> type="text"
id="referredBy"
placeholder="Reffered By"
formControlName="referrer"
[errorStateMatcher]="matcher"
/>
<mat-error *ngIf="submitted && createFormStub.referrer.errors"
>Referrer is required.</mat-error
> </mat-form-field
><br />
</div> </div>
<div class="col-md-6 col-lg-4"> <div class="col-md-6 col-lg-4">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label>Business Category: </mat-label> <mat-label>Business Category: </mat-label>
<mat-select id="businessCategory" formControlName="businessCategory" [errorStateMatcher]="matcher"> <mat-select
id="businessCategory"
formControlName="businessCategory"
[errorStateMatcher]="matcher"
>
<mat-option *ngFor="let category of categories" [value]="category"> <mat-option *ngFor="let category of categories" [value]="category">
{{ category | titlecase }} {{ category | titlecase }}
</mat-option> </mat-option>
</mat-select> </mat-select>
<mat-error *ngIf="submitted && createFormStub.businessCategory.errors">Business Category is required.</mat-error> <mat-error *ngIf="submitted && createFormStub.businessCategory.errors"
>Business Category is required.</mat-error
>
</mat-form-field> </mat-form-field>
</div> </div>
<button mat-raised-button color="primary" type="submit" class="btn btn-outline-primary ml-3" (click)="onSubmit()">Submit</button> <button
mat-raised-button
color="primary"
type="submit"
class="btn btn-outline-primary ml-3"
(click)="onSubmit()"
>
Submit
</button>
</form> </form>
</div> </div>
</div> </div>

View File

@ -20,19 +20,30 @@
<mat-card-title class="card-header"> <mat-card-title class="card-header">
<div class="row"> <div class="row">
Actions Actions
<button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto mr-2" (click)="downloadCsv()"> EXPORT </button> <button
mat-raised-button
color="primary"
type="button"
class="btn btn-outline-primary ml-auto mr-2"
(click)="downloadCsv()"
>
EXPORT
</button>
</div> </div>
</mat-card-title> </mat-card-title>
<div class="card-body"> <div class="card-body">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label> Filter </mat-label> <mat-label> Filter </mat-label>
<input matInput type="text" (keyup)="doFilter($event.target.value)" placeholder="Filter"> <input
matInput
type="text"
(keyup)="doFilter($event.target.value)"
placeholder="Filter"
/>
<mat-icon matSuffix>search</mat-icon> <mat-icon matSuffix>search</mat-icon>
</mat-form-field> </mat-form-field>
<mat-table class="mat-elevation-z10" [dataSource]="dataSource" multiTemplateDataRows> <mat-table class="mat-elevation-z10" [dataSource]="dataSource" multiTemplateDataRows>
<!-- Expand Column --> <!-- Expand Column -->
<ng-container matColumnDef="expand"> <ng-container matColumnDef="expand">
<mat-header-cell *matHeaderCellDef> Expand </mat-header-cell> <mat-header-cell *matHeaderCellDef> Expand </mat-header-cell>
@ -60,16 +71,36 @@
<ng-container matColumnDef="status"> <ng-container matColumnDef="status">
<mat-header-cell *matHeaderCellDef> STATUS </mat-header-cell> <mat-header-cell *matHeaderCellDef> STATUS </mat-header-cell>
<mat-cell *matCellDef="let action"> <mat-cell *matCellDef="let action">
<span *ngIf="action.approval == true" class="badge badge-success badge-pill"> {{approvalStatus(action.approval)}} </span> <span *ngIf="action.approval == true" class="badge badge-success badge-pill">
<span *ngIf="action.approval == false" class="badge badge-danger badge-pill"> {{approvalStatus(action.approval)}} </span> {{ approvalStatus(action.approval) }}
</span>
<span *ngIf="action.approval == false" class="badge badge-danger badge-pill">
{{ approvalStatus(action.approval) }}
</span>
</mat-cell> </mat-cell>
</ng-container> </ng-container>
<ng-container matColumnDef="approve"> <ng-container matColumnDef="approve">
<mat-header-cell *matHeaderCellDef> APPROVE </mat-header-cell> <mat-header-cell *matHeaderCellDef> APPROVE </mat-header-cell>
<mat-cell *matCellDef="let action"> <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
<button mat-raised-button color="warn" *ngIf="action.approval" class="btn btn-outline-danger" (click)="disapproveAction(action)"> Disapprove </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> </mat-cell>
</ng-container> </ng-container>
@ -77,22 +108,37 @@
<ng-container matColumnDef="expandedDetail"> <ng-container matColumnDef="expandedDetail">
<mat-cell *matCellDef="let action"> <mat-cell *matCellDef="let action">
<div> <div>
<span><strong>Staff Name:</strong> {{action.user}}</span><br> <span><strong>Staff Name:</strong> {{ action.user }}</span
<span><strong>Role:</strong> {{action.role}}</span><br> ><br />
<span><strong>Action Details:</strong> {{action.action}}</span><br> <span><strong>Role:</strong> {{ action.role }}</span
<span><strong>Approval Status:</strong> {{action.approval}}</span><br> ><br />
<span><strong>Action Details:</strong> {{ action.action }}</span
><br />
<span><strong>Approval Status:</strong> {{ action.approval }}</span
><br />
</div> </div>
</mat-cell> </mat-cell>
</ng-container> </ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row> <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns;" matRipple class="element-row" <mat-row
[class.expanded]="row.isExpanded"></mat-row> *matRowDef="let row; columns: displayedColumns"
<mat-row *matRowDef="let row; columns: ['expandedDetail'];" matRipple
[@detailExpand]="row.isExpanded == true ? 'expanded': 'collapsed'" style="overflow: hidden"></mat-row> 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-table>
<mat-paginator [pageSize]="10" [pageSizeOptions]="[10, 20, 50, 100]" showFirstLastButtons></mat-paginator> <mat-paginator
[pageSize]="10"
[pageSizeOptions]="[10, 20, 50, 100]"
showFirstLastButtons
></mat-paginator>
</div> </div>
</div> </div>
</div> </div>
@ -102,4 +148,3 @@
<!-- End Page content --> <!-- End Page content -->
<!-- ============================================================== --> <!-- ============================================================== -->
</div> </div>

View File

@ -16,8 +16,14 @@
</ol> </ol>
</nav> </nav>
<div class="embed-responsive embed-responsive-16by9"> <div class="embed-responsive embed-responsive-16by9">
<iframe class="embed-responsive-item" [src]="url | safe" allow="fullscreen" loading="lazy" <iframe
title="Community inclusion currencies dashboard" referrerpolicy="no-referrer"> class="embed-responsive-item"
[src]="url | safe"
allow="fullscreen"
loading="lazy"
title="Community inclusion currencies dashboard"
referrerpolicy="no-referrer"
>
<p> <p>
<a href="{{ url }}"> Your browser does not support iframes. </a> <a href="{{ url }}"> Your browser does not support iframes. </a>
</p> </p>

View File

@ -26,19 +26,31 @@
<form [formGroup]="organizationForm" (ngSubmit)="onSubmit()"> <form [formGroup]="organizationForm" (ngSubmit)="onSubmit()">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label>Default Disbursement *</mat-label> <mat-label>Default Disbursement *</mat-label>
<input matInput type="text" id="amount" placeholder="Amount" formControlName="disbursement" <input
[errorStateMatcher]="matcher"> matInput
type="text"
id="amount"
placeholder="Amount"
formControlName="disbursement"
[errorStateMatcher]="matcher"
/>
<span matSuffix>RCU</span> <span matSuffix>RCU</span>
<mat-error *ngIf="submitted && organizationFormStub.disbursement.errors"> <mat-error *ngIf="submitted && organizationFormStub.disbursement.errors">
Default Disbursement is required. Default Disbursement is required.
</mat-error> </mat-error>
</mat-form-field> </mat-form-field>
<div class="form-group form-check"> <div class="form-group form-check">
<mat-checkbox id="transferCard" formControlName="transfer">Require Transfer Card *</mat-checkbox> <mat-checkbox id="transferCard" formControlName="transfer"
>Require Transfer Card *</mat-checkbox
>
</div> </div>
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label>Default Country Code *</mat-label> <mat-label>Default Country Code *</mat-label>
<mat-select id="countryCode" formControlName="countryCode" [errorStateMatcher]="matcher"> <mat-select
id="countryCode"
formControlName="countryCode"
[errorStateMatcher]="matcher"
>
<mat-option value="KE">KE Kenya</mat-option> <mat-option value="KE">KE Kenya</mat-option>
<mat-option value="US">US United States</mat-option> <mat-option value="US">US United States</mat-option>
<mat-option value="ETH">ETH Ethiopia</mat-option> <mat-option value="ETH">ETH Ethiopia</mat-option>
@ -47,9 +59,11 @@
</mat-select> </mat-select>
<mat-error *ngIf="submitted && organizationFormStub.countryCode.errors"> <mat-error *ngIf="submitted && organizationFormStub.countryCode.errors">
Country Code is required. Country Code is required.
</mat-error> </mat-error> </mat-form-field
</mat-form-field><br> ><br />
<button mat-raised-button color="primary" type="submit" class="btn btn-primary">Submit</button> <button mat-raised-button color="primary" type="submit" class="btn btn-primary">
Submit
</button>
</form> </form>
</div> </div>
</div> </div>

View File

@ -19,16 +19,14 @@
<div class="row"> <div class="row">
<div class="col-md-6 mb-2"> <div class="col-md-6 mb-2">
<div class="card"> <div class="card">
<mat-card-title class="card-header text-center"> <mat-card-title class="card-header text-center"> SETTINGS </mat-card-title>
SETTINGS
</mat-card-title>
<div class="card-body"> <div class="card-body">
<h4>CICADA Admin Credentials</h4> <h4>CICADA Admin Credentials</h4>
<span><strong>UserId: </strong> {{ userInfo?.userid }} </span><br> <span><strong>UserId: </strong> {{ userInfo?.userid }} </span><br />
<span><strong>Username: </strong> {{ userInfo?.name }} </span><br> <span><strong>Username: </strong> {{ userInfo?.name }} </span><br />
<span><strong>Email: </strong> {{ userInfo?.email }} </span> <span><strong>Email: </strong> {{ userInfo?.email }} </span>
</div> </div>
<hr> <hr />
<div class="card-body"> <div class="card-body">
<h4>Organization Settings</h4> <h4>Organization Settings</h4>
<a routerLink="/settings/organization"><i>Update your organization settings</i></a> <a routerLink="/settings/organization"><i>Update your organization settings</i></a>
@ -37,21 +35,27 @@
</div> </div>
<div class="col-md-6 mb-2"> <div class="col-md-6 mb-2">
<div class="card"> <div class="card">
<mat-card-title class="card-header text-center"> <mat-card-title class="card-header text-center"> ACCOUNT MANAGEMENT </mat-card-title>
ACCOUNT MANAGEMENT
</mat-card-title>
<div class="card-body"> <div class="card-body">
<h4>Change Password</h4> <h4>Change Password</h4>
<a routerLink="/settings"><i>Change your account password</i></a> <a routerLink="/settings"><i>Change your account password</i></a>
</div> </div>
<hr> <hr />
<div class="card-body"> <div class="card-body">
<h4>Two-step authentication</h4> <h4>Two-step authentication</h4>
<a routerLink="/settings"><i>Secure your account with two step verification</i></a> <a routerLink="/settings"><i>Secure your account with two step verification</i></a>
</div> </div>
<hr> <hr />
<div class="card-body"> <div class="card-body">
<button mat-raised-button color="primary" type="button" class="btn btn-outline-primary" (click)="logout()"> LOGOUT ADMIN </button> <button
mat-raised-button
color="primary"
type="button"
class="btn btn-outline-primary"
(click)="logout()"
>
LOGOUT ADMIN
</button>
</div> </div>
</div> </div>
</div> </div>
@ -60,18 +64,36 @@
<mat-card-title class="card-header"> <mat-card-title class="card-header">
<div class="row"> <div class="row">
TRUSTED USERS TRUSTED USERS
<button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto mr-2" (click)="downloadCsv()"> EXPORT </button> <button
mat-raised-button
color="primary"
type="button"
class="btn btn-outline-primary ml-auto mr-2"
(click)="downloadCsv()"
>
EXPORT
</button>
</div> </div>
</mat-card-title> </mat-card-title>
<div class="card-body"> <div class="card-body">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label> Filter </mat-label> <mat-label> Filter </mat-label>
<input matInput type="text" (keyup)="doFilter($event.target.value)" placeholder="Filter"> <input
matInput
type="text"
(keyup)="doFilter($event.target.value)"
placeholder="Filter"
/>
<mat-icon matSuffix>search</mat-icon> <mat-icon matSuffix>search</mat-icon>
</mat-form-field> </mat-form-field>
<mat-table class="mat-elevation-z10" [dataSource]="dataSource" matSort matSortActive="name" <mat-table
matSortDirection="asc" matSortDisableClear> class="mat-elevation-z10"
[dataSource]="dataSource"
matSort
matSortActive="name"
matSortDirection="asc"
matSortDisableClear
>
<ng-container matColumnDef="name"> <ng-container matColumnDef="name">
<mat-header-cell *matHeaderCellDef mat-sort-header> NAME </mat-header-cell> <mat-header-cell *matHeaderCellDef mat-sort-header> NAME </mat-header-cell>
<mat-cell *matCellDef="let user"> {{ user.name }} </mat-cell> <mat-cell *matCellDef="let user"> {{ user.name }} </mat-cell>
@ -91,8 +113,11 @@
<mat-row *matRowDef="let user; columns: displayedColumns"></mat-row> <mat-row *matRowDef="let user; columns: displayedColumns"></mat-row>
</mat-table> </mat-table>
<mat-paginator [pageSize]="5" [pageSizeOptions]="[5, 10, 20, 50, 100]" showFirstLastButtons></mat-paginator> <mat-paginator
[pageSize]="5"
[pageSizeOptions]="[5, 10, 20, 50, 100]"
showFirstLastButtons
></mat-paginator>
</div> </div>
</div> </div>
</div> </div>

View File

@ -3,7 +3,14 @@
<mat-card-title class="card-header"> <mat-card-title class="card-header">
<div class="row"> <div class="row">
TOKEN DETAILS TOKEN DETAILS
<button mat-raised-button type="button" class="btn btn-outline-secondary ml-auto mr-2" (click)="close()"> CLOSE </button> <button
mat-raised-button
type="button"
class="btn btn-outline-secondary ml-auto mr-2"
(click)="close()"
>
CLOSE
</button>
</div> </div>
</mat-card-title> </mat-card-title>
<div class="card-body"> <div class="card-body">
@ -17,11 +24,15 @@
<span><strong>Address:</strong> {{ token?.address }}</span> <span><strong>Address:</strong> {{ token?.address }}</span>
</div> </div>
<div> <div>
<span><strong>Details:</strong> A community inclusive currency for trading among lower to middle income societies.</span> <span
><strong>Details:</strong> A community inclusive currency for trading among lower to
middle income societies.</span
>
</div> </div>
<div> <div>
<span><strong>Supply:</strong> {{ token?.supply | tokenRatio }}</span> <span><strong>Supply:</strong> {{ token?.supply | tokenRatio }}</span>
</div><br> </div>
<br />
<div> <div>
<h2>Reserve</h2> <h2>Reserve</h2>
<div> <div>

View File

@ -20,20 +20,38 @@
<mat-card-title class="card-header"> <mat-card-title class="card-header">
<div class="row"> <div class="row">
Tokens Tokens
<button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto mr-2" (click)="downloadCsv()"> EXPORT </button> <button
mat-raised-button
color="primary"
type="button"
class="btn btn-outline-primary ml-auto mr-2"
(click)="downloadCsv()"
>
EXPORT
</button>
</div> </div>
</mat-card-title> </mat-card-title>
<div class="card-body"> <div class="card-body">
<app-token-details [token]="token" (closeWindow)="token = $event"></app-token-details> <app-token-details [token]="token" (closeWindow)="token = $event"></app-token-details>
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label> Filter </mat-label> <mat-label> Filter </mat-label>
<input matInput type="text" (keyup)="doFilter($event.target.value)" placeholder="Filter"> <input
matInput
type="text"
(keyup)="doFilter($event.target.value)"
placeholder="Filter"
/>
<mat-icon matSuffix>search</mat-icon> <mat-icon matSuffix>search</mat-icon>
</mat-form-field> </mat-form-field>
<mat-table class="mat-elevation-z10 table-responsive" [dataSource]="dataSource" matSort matSortDirection="asc" matSortDisableClear> <mat-table
class="mat-elevation-z10 table-responsive"
[dataSource]="dataSource"
matSort
matSortDirection="asc"
matSortDisableClear
>
<ng-container matColumnDef="name"> <ng-container matColumnDef="name">
<mat-header-cell *matHeaderCellDef mat-sort-header> Name </mat-header-cell> <mat-header-cell *matHeaderCellDef mat-sort-header> Name </mat-header-cell>
<mat-cell *matCellDef="let token"> {{ token.name }} </mat-cell> <mat-cell *matCellDef="let token"> {{ token.name }} </mat-cell>
@ -55,10 +73,18 @@
</ng-container> </ng-container>
<mat-header-row *matHeaderRowDef="columnsToDisplay"></mat-header-row> <mat-header-row *matHeaderRowDef="columnsToDisplay"></mat-header-row>
<mat-row *matRowDef="let token; columns: columnsToDisplay" (click)="viewToken(token)" matRipple></mat-row> <mat-row
*matRowDef="let token; columns: columnsToDisplay"
(click)="viewToken(token)"
matRipple
></mat-row>
</mat-table> </mat-table>
<mat-paginator [pageSize]="5" [pageSizeOptions]="[5, 10, 25, 100]" showFirstLastButtons></mat-paginator> <mat-paginator
[pageSize]="5"
[pageSizeOptions]="[5, 10, 25, 100]"
showFirstLastButtons
></mat-paginator>
</div> </div>
</div> </div>
</div> </div>
@ -68,4 +94,3 @@
<!-- End Page content --> <!-- End Page content -->
<!-- ============================================================== --> <!-- ============================================================== -->
</div> </div>

View File

@ -3,7 +3,14 @@
<mat-card-title class="card-header"> <mat-card-title class="card-header">
<div class="row"> <div class="row">
TRANSACTION DETAILS TRANSACTION DETAILS
<button mat-raised-button type="button" class="btn btn-outline-secondary ml-auto mr-2" (click)="close()"> CLOSE </button> <button
mat-raised-button
type="button"
class="btn btn-outline-secondary ml-auto mr-2"
(click)="close()"
>
CLOSE
</button>
</div> </div>
</mat-card-title> </mat-card-title>
<div *ngIf="transaction.type == 'transaction'" class="card-body"> <div *ngIf="transaction.type == 'transaction'" class="card-body">
@ -12,25 +19,55 @@
<h4>Exchange:</h4> <h4>Exchange:</h4>
<ul class="list-group list-group-flush"> <ul class="list-group list-group-flush">
<li class="list-group-item"> <li class="list-group-item">
<span>Sender: {{transaction.sender?.vcard.fn[0].value}}</span><br><br> <span>Sender: {{ transaction.sender?.vcard.fn[0].value }}</span
><br /><br />
<span> <span>
Sender Address: Sender Address:
<a href="{{ senderBloxbergLink }}" target="_blank"> {{ transaction.from }} </a> <a href="{{ senderBloxbergLink }}" target="_blank"> {{ transaction.from }} </a>
<img src="assets/images/checklist.svg" class="ml-2" height="20rem" (click)="copyAddress(transaction.from)" alt="Copy"> <img
</span><br><br> src="assets/images/checklist.svg"
<button mat-raised-button color="primary" class="btn btn-outline-info" (click)="viewSender()">View Sender</button> class="ml-2"
height="20rem"
(click)="copyAddress(transaction.from)"
alt="Copy"
/> </span
><br /><br />
<button
mat-raised-button
color="primary"
class="btn btn-outline-info"
(click)="viewSender()"
>
View Sender
</button>
</li> </li>
<li class="list-group-item"> <li class="list-group-item">
<span>Recipient: {{transaction.recipient?.vcard.fn[0].value}}</span><br><br> <span>Recipient: {{ transaction.recipient?.vcard.fn[0].value }}</span
><br /><br />
<span> <span>
Recipient Address: Recipient Address:
<a href="{{ recipientBloxbergLink }}" target="_blank"> {{ transaction.to }} </a> <a href="{{ recipientBloxbergLink }}" target="_blank"> {{ transaction.to }} </a>
<img src="assets/images/checklist.svg" class="ml-2" height="20rem" (click)="copyAddress(transaction.to)" alt="Copy"> <img
</span><br><br> src="assets/images/checklist.svg"
<button mat-raised-button color="primary" class="btn btn-outline-info" (click)="viewRecipient()">View Recipient</button> class="ml-2"
height="20rem"
(click)="copyAddress(transaction.to)"
alt="Copy"
/> </span
><br /><br />
<button
mat-raised-button
color="primary"
class="btn btn-outline-info"
(click)="viewRecipient()"
>
View Recipient
</button>
</li> </li>
<li class="list-group-item"> <li class="list-group-item">
<span>Amount: {{transaction.value | tokenRatio}} {{ tokenSymbol | uppercase }}</span> <span
>Amount: {{ transaction.value | tokenRatio }} {{ tokenSymbol | uppercase }}</span
>
</li> </li>
</ul> </ul>
<h4 class="mt-2">Token:</h4> <h4 class="mt-2">Token:</h4>
@ -39,7 +76,13 @@
<span> <span>
Address: Address:
{{ transaction.token._address }} {{ transaction.token._address }}
<img src="assets/images/checklist.svg" class="ml-2" height="20rem" (click)="copyAddress(transaction.token._address)" alt="Copy"> <img
src="assets/images/checklist.svg"
class="ml-2"
height="20rem"
(click)="copyAddress(transaction.token._address)"
alt="Copy"
/>
</span> </span>
</li> </li>
<li class="list-group-item"> <li class="list-group-item">
@ -68,12 +111,17 @@
<li class="list-group-item"> <li class="list-group-item">
<span>Timestamp: {{ transaction.tx.timestamp | unixDate }}</span> <span>Timestamp: {{ transaction.tx.timestamp | unixDate }}</span>
</li> </li>
</ul><br> </ul>
<br />
<div class="mb-3"> <div class="mb-3">
<button mat-raised-button color="primary" type="button" class="btn btn-outline-success">Resend SMS</button> <button mat-raised-button color="primary" type="button" class="btn btn-outline-success">
Resend SMS
</button>
</div> </div>
<div> <div>
<button mat-raised-button color="warn" type="button" class="btn btn-outline-danger">Reverse Transaction</button> <button mat-raised-button color="warn" type="button" class="btn btn-outline-danger">
Reverse Transaction
</button>
</div> </div>
</div> </div>
</div> </div>
@ -82,18 +130,28 @@
<h3>Exchange:</h3> <h3>Exchange:</h3>
<ul class="list-group list-group-flush"> <ul class="list-group list-group-flush">
<li class="list-group-item"> <li class="list-group-item">
<span><strong>Trader: {{transaction.sender?.vcard.fn[0].value}}</strong></span> <span
><strong>Trader: {{ transaction.sender?.vcard.fn[0].value }}</strong></span
>
</li> </li>
<li class="list-group-item"> <li class="list-group-item">
<span> <span>
Trader Address: Trader Address:
<a href="{{ traderBloxbergLink }}" target="_blank"> {{ transaction.trader }} </a> <a href="{{ traderBloxbergLink }}" target="_blank"> {{ transaction.trader }} </a>
<img src="assets/images/checklist.svg" class="ml-2" height="20rem" (click)="copyAddress(transaction.trader)" alt="Copy"> <img
src="assets/images/checklist.svg"
class="ml-2"
height="20rem"
(click)="copyAddress(transaction.trader)"
alt="Copy"
/>
</span> </span>
</li> </li>
</ul> </ul>
<button mat-raised-button color="primary" class="btn btn-outline-info" (click)="viewTrader()">View Trader</button> <button mat-raised-button color="primary" class="btn btn-outline-info" (click)="viewTrader()">
<br><br> View Trader
</button>
<br /><br />
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
<h4>Source Token:</h4> <h4>Source Token:</h4>
@ -102,7 +160,13 @@
<span> <span>
Address: Address:
{{ transaction.sourceToken.address }} {{ transaction.sourceToken.address }}
<img src="assets/images/checklist.svg" class="ml-2" height="20rem" (click)="copyAddress(transaction.sourceToken.address)" alt="Copy"> <img
src="assets/images/checklist.svg"
class="ml-2"
height="20rem"
(click)="copyAddress(transaction.sourceToken.address)"
alt="Copy"
/>
</span> </span>
</li> </li>
<li class="list-group-item"> <li class="list-group-item">
@ -112,7 +176,10 @@
<span>Symbol: {{ transaction.sourceToken.symbol | uppercase }}</span> <span>Symbol: {{ transaction.sourceToken.symbol | uppercase }}</span>
</li> </li>
<li class="list-group-item"> <li class="list-group-item">
<span>Amount: {{transaction.fromValue}} {{transaction.sourceToken.symbol | uppercase}}</span> <span
>Amount: {{ transaction.fromValue }}
{{ transaction.sourceToken.symbol | uppercase }}</span
>
</li> </li>
</ul> </ul>
</div> </div>
@ -123,7 +190,13 @@
<span> <span>
Address: Address:
{{ transaction.destinationToken.address }} {{ transaction.destinationToken.address }}
<img src="assets/images/checklist.svg" class="ml-2" height="20rem" (click)="copyAddress(transaction.destinationToken.address)" alt="Copy"> <img
src="assets/images/checklist.svg"
class="ml-2"
height="20rem"
(click)="copyAddress(transaction.destinationToken.address)"
alt="Copy"
/>
</span> </span>
</li> </li>
<li class="list-group-item"> <li class="list-group-item">
@ -133,15 +206,28 @@
<span>Symbol: {{ transaction.destinationToken.symbol | uppercase }}</span> <span>Symbol: {{ transaction.destinationToken.symbol | uppercase }}</span>
</li> </li>
<li class="list-group-item"> <li class="list-group-item">
<span>Amount: {{transaction.toValue}} {{transaction.destinationToken.symbol | uppercase}}</span> <span
>Amount: {{ transaction.toValue }}
{{ transaction.destinationToken.symbol | uppercase }}</span
>
</li> </li>
</ul> </ul>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<button mat-raised-button color="primary" type="button" class="btn btn-outline-success">Resend SMS</button> <button mat-raised-button color="primary" type="button" class="btn btn-outline-success">
Resend SMS
</button>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<button mat-raised-button color="warn" type="button" class="btn btn-outline-danger ml-2" (click)="reverseTransaction()">Reverse Transaction</button> <button
mat-raised-button
color="warn"
type="button"
class="btn btn-outline-danger ml-2"
(click)="reverseTransaction()"
>
Reverse Transaction
</button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -17,56 +17,92 @@
</ol> </ol>
</nav> </nav>
<div class="card"> <div class="card">
<mat-card-title class="card-header"> <mat-card-title class="card-header"> Transfers </mat-card-title>
Transfers
</mat-card-title>
<div class="card-body"> <div class="card-body">
<app-transaction-details
<app-transaction-details [transaction]="transaction" (closeWindow)="transaction = $event"></app-transaction-details> [transaction]="transaction"
(closeWindow)="transaction = $event"
></app-transaction-details>
<div class="row card-header"> <div class="row card-header">
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label> TRANSFER TYPE </mat-label> <mat-label> TRANSFER TYPE </mat-label>
<mat-select id="typeSelect" [(value)]="transactionsType" (selectionChange)="filterTransactions()"> <mat-select
id="typeSelect"
[(value)]="transactionsType"
(selectionChange)="filterTransactions()"
>
<mat-option value="all">ALL TRANSFERS</mat-option> <mat-option value="all">ALL TRANSFERS</mat-option>
<mat-option *ngFor="let transactionType of transactionsTypes" [value]="transactionType"> <mat-option
*ngFor="let transactionType of transactionsTypes"
[value]="transactionType"
>
{{ transactionType | uppercase }} {{ transactionType | uppercase }}
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto mr-2" (click)="downloadCsv()"> EXPORT </button> <button
mat-raised-button
color="primary"
type="button"
class="btn btn-outline-primary ml-auto mr-2"
(click)="downloadCsv()"
>
EXPORT
</button>
</div> </div>
<mat-form-field appearance="outline"> <mat-form-field appearance="outline">
<mat-label> Filter </mat-label> <mat-label> Filter </mat-label>
<input matInput type="text" (keyup)="doFilter($event.target.value, transactionDataSource)" placeholder="Filter"> <input
matInput
type="text"
(keyup)="doFilter($event.target.value, transactionDataSource)"
placeholder="Filter"
/>
<mat-icon matSuffix>search</mat-icon> <mat-icon matSuffix>search</mat-icon>
</mat-form-field> </mat-form-field>
<table mat-table class="mat-elevation-z10" [dataSource]="transactionDataSource" matSort matSortActive="created" <table
matSortDirection="desc" matSortDisableClear> mat-table
class="mat-elevation-z10"
[dataSource]="transactionDataSource"
matSort
matSortActive="created"
matSortDirection="desc"
matSortDisableClear
>
<ng-container matColumnDef="sender"> <ng-container matColumnDef="sender">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Sender</th> <th mat-header-cell *matHeaderCellDef mat-sort-header>Sender</th>
<td mat-cell *matCellDef="let transaction"> {{transaction?.sender?.vcard.fn[0].value || transaction.from}} </td> <td mat-cell *matCellDef="let transaction">
{{ transaction?.sender?.vcard.fn[0].value || transaction.from }}
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="recipient"> <ng-container matColumnDef="recipient">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Recipient</th> <th mat-header-cell *matHeaderCellDef mat-sort-header>Recipient</th>
<td mat-cell *matCellDef="let transaction"> {{transaction?.recipient?.vcard.fn[0].value || transaction.to}} </td> <td mat-cell *matCellDef="let transaction">
{{ transaction?.recipient?.vcard.fn[0].value || transaction.to }}
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="value"> <ng-container matColumnDef="value">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Value</th> <th mat-header-cell *matHeaderCellDef mat-sort-header>Value</th>
<td mat-cell *matCellDef="let transaction"> <td mat-cell *matCellDef="let transaction">
<span *ngIf="transaction.type == 'transaction'">{{transaction?.value | tokenRatio}} {{ tokenSymbol | uppercase }}</span> <span *ngIf="transaction.type == 'transaction'"
<span *ngIf="transaction.type == 'conversion'">{{transaction?.toValue | tokenRatio}} {{ tokenSymbol | uppercase }}</span> >{{ transaction?.value | tokenRatio }} {{ tokenSymbol | uppercase }}</span
>
<span *ngIf="transaction.type == 'conversion'"
>{{ transaction?.toValue | tokenRatio }} {{ tokenSymbol | uppercase }}</span
>
</td> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="created"> <ng-container matColumnDef="created">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Created</th> <th mat-header-cell *matHeaderCellDef mat-sort-header>Created</th>
<td mat-cell *matCellDef="let transaction"> {{transaction?.tx.timestamp | unixDate}} </td> <td mat-cell *matCellDef="let transaction">
{{ transaction?.tx.timestamp | unixDate }}
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="type"> <ng-container matColumnDef="type">
@ -77,11 +113,18 @@
</ng-container> </ng-container>
<tr mat-header-row *matHeaderRowDef="transactionDisplayedColumns"></tr> <tr mat-header-row *matHeaderRowDef="transactionDisplayedColumns"></tr>
<tr mat-row *matRowDef="let transaction; columns: transactionDisplayedColumns;" (click)="viewTransaction(transaction)"></tr> <tr
mat-row
*matRowDef="let transaction; columns: transactionDisplayedColumns"
(click)="viewTransaction(transaction)"
></tr>
</table> </table>
<mat-paginator [pageSize]="defaultPageSize" [pageSizeOptions]="pageSizeOptions" showFirstLastButtons></mat-paginator> <mat-paginator
[pageSize]="defaultPageSize"
[pageSizeOptions]="pageSizeOptions"
showFirstLastButtons
></mat-paginator>
</div> </div>
</div> </div>
</div> </div>
@ -91,5 +134,3 @@
<!-- End Page content --> <!-- End Page content -->
<!-- ============================================================== --> <!-- ============================================================== -->
</div> </div>

View File

@ -1,10 +1,6 @@
<div> <div>
<div> <div>
<p> <p>Message: {{ data.message }}</p>
Message: {{ data.message }} <p *ngIf="data.status">Status: {{ data?.status }}</p>
</p>
<p *ngIf="data.status">
Status: {{ data?.status }}
</p>
</div> </div>
</div> </div>

View File

@ -1,8 +1,10 @@
<!-- Footer Start --> <!-- Footer Start -->
<footer class="footer"> <footer class="footer">
<a target="blank" title="GPL-3" href="https://www.gnu.org/licenses/gpl-3.0.en.html"> Copyleft </a> 🄯. <a target="blank" title="GPL-3" href="https://www.gnu.org/licenses/gpl-3.0.en.html"> Copyleft </a>
🄯.
{{ currentYear }} {{ currentYear }}
<a target="blank" title="Gitlab@GrassrootsEconomics" href="https://gitlab.com/grassrootseconomics"><u> Grassroots Economics </u></a> <a target="blank" title="Gitlab@GrassrootsEconomics" href="https://gitlab.com/grassrootseconomics"
><u> Grassroots Economics </u></a
>
</footer> </footer>
<!-- end Footer --> <!-- end Footer -->

View File

@ -1,13 +1,13 @@
<nav class="navbar navbar-dark background-dark"> <nav class="navbar navbar-dark background-dark">
<h1 class="navbar-brand"> <h1 class="navbar-brand">
<div *ngIf="noInternetConnection; then offlineBlock else onlineBlock"></div> <div *ngIf="noInternetConnection; then offlineBlock; else onlineBlock"></div>
<ng-template #offlineBlock> <ng-template #offlineBlock>
<strong style="color: red;">OFFLINE </strong> <strong style="color: red">OFFLINE </strong>
<img width="20rem" src="assets/images/no-wifi.svg" alt="Internet Disconnected"> <img width="20rem" src="assets/images/no-wifi.svg" alt="Internet Disconnected" />
</ng-template> </ng-template>
<ng-template #onlineBlock> <ng-template #onlineBlock>
<strong style="color: lawngreen;">ONLINE </strong> <strong style="color: lawngreen">ONLINE </strong>
<img width="20rem" src="assets/images/wifi.svg" alt="Internet Connected"> <img width="20rem" src="assets/images/wifi.svg" alt="Internet Connected" />
</ng-template> </ng-template>
</h1> </h1>
</nav> </nav>

View File

@ -2,10 +2,9 @@
<div id="sidebar"> <div id="sidebar">
<app-network-status></app-network-status> <app-network-status></app-network-status>
<nav> <nav>
<div class="sidebar-header"> <div class="sidebar-header">
<h3> <h3>
<img class="full-width" src="assets/images/CIC-Logo-white.png" alt="CIC Admin Dashboard"> <img class="full-width" src="assets/images/CIC-Logo-white.png" alt="CIC Admin Dashboard" />
</h3> </h3>
<strong>CICADA</strong> <strong>CICADA</strong>
</div> </div>

View File

@ -1,7 +1,13 @@
<!-- Topbar Start --> <!-- Topbar Start -->
<nav class="navbar navbar-expand-lg navbar-light bg-light sticky-top"> <nav class="navbar navbar-expand-lg navbar-light bg-light sticky-top">
<div class="container-fluid"> <div class="container-fluid">
<button type="button" id="sidebarCollapse" class="navbar-btn menutoggle" aria-label="Sidebar toggle" appMenuToggle> <button
type="button"
id="sidebarCollapse"
class="navbar-btn menutoggle"
aria-label="Sidebar toggle"
appMenuToggle
>
<span></span> <span></span>
<span></span> <span></span>
<span></span> <span></span>

View File

@ -1,52 +1,187 @@
<!doctype html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8" />
<title>CICADA</title> <title>CICADA</title>
<base href="/"> <base href="/" />
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1" />
<meta content="A fully featured admin client for managing users and transactions in the CIC network." name="description"/> <meta
content="A fully featured admin client for managing users and transactions in the CIC network."
name="description"
/>
<meta content="Spencer Ofwiti" name="author" /> <meta content="Spencer Ofwiti" name="author" />
<link rel="icon" type="image/x-icon" href="assets/icons/manifest-icon-512.png"> <link rel="icon" type="image/x-icon" href="assets/icons/manifest-icon-512.png" />
<link rel="apple-touch-icon" href="assets/icons/apple-icon-180.png"> <link rel="apple-touch-icon" href="assets/icons/apple-icon-180.png" />
<meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-capable" content="yes" />
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-2048-2732.jpg" media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"> <link
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-2732-2048.jpg" media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"> rel="apple-touch-startup-image"
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-1668-2388.jpg" media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"> href="assets/icons/apple-splash-2048-2732.jpg"
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-2388-1668.jpg" media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"> media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-1536-2048.jpg" media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"> />
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-2048-1536.jpg" media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"> <link
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-1668-2224.jpg" media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"> rel="apple-touch-startup-image"
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-2224-1668.jpg" media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"> href="assets/icons/apple-splash-2732-2048.jpg"
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-1620-2160.jpg" media="(device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"> media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-2160-1620.jpg" media="(device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"> />
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-1284-2778.jpg" media="(device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"> <link
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-2778-1284.jpg" media="(device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"> rel="apple-touch-startup-image"
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-1170-2532.jpg" media="(device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"> href="assets/icons/apple-splash-1668-2388.jpg"
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-2532-1170.jpg" media="(device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"> media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-1125-2436.jpg" media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"> />
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-2436-1125.jpg" media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"> <link
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-1242-2688.jpg" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"> rel="apple-touch-startup-image"
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-2688-1242.jpg" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"> href="assets/icons/apple-splash-2388-1668.jpg"
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-828-1792.jpg" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"> media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-1792-828.jpg" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"> />
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-1242-2208.jpg" media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"> <link
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-2208-1242.jpg" media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"> rel="apple-touch-startup-image"
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-750-1334.jpg" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"> href="assets/icons/apple-splash-1536-2048.jpg"
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-1334-750.jpg" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"> media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-640-1136.jpg" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"> />
<link rel="apple-touch-startup-image" href="assets/icons/apple-splash-1136-640.jpg" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"> <link
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous"> rel="apple-touch-startup-image"
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous"> href="assets/icons/apple-splash-2048-1536.jpg"
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500&amp;display=swap" rel="stylesheet"> media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> />
<link rel="manifest" href="manifest.webmanifest"> <link
<meta name="theme-color" content="#313a46"> rel="apple-touch-startup-image"
href="assets/icons/apple-splash-1668-2224.jpg"
media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
/>
<link
rel="apple-touch-startup-image"
href="assets/icons/apple-splash-2224-1668.jpg"
media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
/>
<link
rel="apple-touch-startup-image"
href="assets/icons/apple-splash-1620-2160.jpg"
media="(device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
/>
<link
rel="apple-touch-startup-image"
href="assets/icons/apple-splash-2160-1620.jpg"
media="(device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
/>
<link
rel="apple-touch-startup-image"
href="assets/icons/apple-splash-1284-2778.jpg"
media="(device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
/>
<link
rel="apple-touch-startup-image"
href="assets/icons/apple-splash-2778-1284.jpg"
media="(device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
/>
<link
rel="apple-touch-startup-image"
href="assets/icons/apple-splash-1170-2532.jpg"
media="(device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
/>
<link
rel="apple-touch-startup-image"
href="assets/icons/apple-splash-2532-1170.jpg"
media="(device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
/>
<link
rel="apple-touch-startup-image"
href="assets/icons/apple-splash-1125-2436.jpg"
media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
/>
<link
rel="apple-touch-startup-image"
href="assets/icons/apple-splash-2436-1125.jpg"
media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
/>
<link
rel="apple-touch-startup-image"
href="assets/icons/apple-splash-1242-2688.jpg"
media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
/>
<link
rel="apple-touch-startup-image"
href="assets/icons/apple-splash-2688-1242.jpg"
media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
/>
<link
rel="apple-touch-startup-image"
href="assets/icons/apple-splash-828-1792.jpg"
media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
/>
<link
rel="apple-touch-startup-image"
href="assets/icons/apple-splash-1792-828.jpg"
media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
/>
<link
rel="apple-touch-startup-image"
href="assets/icons/apple-splash-1242-2208.jpg"
media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
/>
<link
rel="apple-touch-startup-image"
href="assets/icons/apple-splash-2208-1242.jpg"
media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
/>
<link
rel="apple-touch-startup-image"
href="assets/icons/apple-splash-750-1334.jpg"
media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
/>
<link
rel="apple-touch-startup-image"
href="assets/icons/apple-splash-1334-750.jpg"
media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
/>
<link
rel="apple-touch-startup-image"
href="assets/icons/apple-splash-640-1136.jpg"
media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
/>
<link
rel="apple-touch-startup-image"
href="assets/icons/apple-splash-1136-640.jpg"
media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
/>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css"
integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2"
crossorigin="anonymous"
/>
<link
rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"
integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN"
crossorigin="anonymous"
/>
<link
href="https://fonts.googleapis.com/css?family=Roboto:300,400,500&amp;display=swap"
rel="stylesheet"
/>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" />
<link rel="manifest" href="manifest.webmanifest" />
<meta name="theme-color" content="#313a46" />
</head> </head>
<body class="mat-typography"> <body class="mat-typography">
<app-root></app-root> <app-root></app-root>
<script async src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> <script
<script async src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script> async
<script async src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.min.js" integrity="sha384-w1Q4orYjBQndcko6MimVbzY0tgp4pWB4lZ7lr30WKz0vr/aWKhXdBNmNb5D92v7s" crossorigin="anonymous"></script> src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
crossorigin="anonymous"
></script>
<script
async
src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"
integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN"
crossorigin="anonymous"
></script>
<script
async
src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.min.js"
integrity="sha384-w1Q4orYjBQndcko6MimVbzY0tgp4pWB4lZ7lr30WKz0vr/aWKhXdBNmNb5D92v7s"
crossorigin="anonymous"
></script>
</body> </body>
</html> </html>

View File

@ -8,5 +8,6 @@ if (environment.production) {
enableProdMode(); enableProdMode();
} }
platformBrowserDynamic().bootstrapModule(AppModule) platformBrowserDynamic()
.catch(err => console.error(err)); .bootstrapModule(AppModule)
.catch((err) => console.error(err));

View File

@ -57,7 +57,6 @@
*/ */
import 'zone.js/dist/zone'; // Included with Angular CLI. import 'zone.js/dist/zone'; // Included with Angular CLI.
/*************************************************************************************************** /***************************************************************************************************
* APPLICATION IMPORTS * APPLICATION IMPORTS
*/ */

View File

@ -6,11 +6,13 @@
/* Visual */ /* Visual */
/* Misc */ /* Misc */
} }
@import "~bootstrap/dist/css/bootstrap.css"; @import '~bootstrap/dist/css/bootstrap.css';
@import "https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"; @import 'https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap';
html, html,
body { height: 100%; } body {
height: 100%;
}
body { body {
margin: 0; margin: 0;
@ -35,7 +37,7 @@ a:hover,
a:focus { a:focus {
text-decoration: none; text-decoration: none;
color: inherit; color: inherit;
transition: all .3s; transition: all 0.3s;
} }
.wrapper { .wrapper {
@ -50,15 +52,19 @@ a:focus {
ul ul a { ul ul a {
padding-left: 30px; padding-left: 30px;
font-size: .9em; font-size: 0.9em;
background: #6d7fcc; background: #6d7fcc;
} }
.full-width, .full-width,
table { width: 100%; } table {
width: 100%;
}
li.breadcrumb-item.active, li.breadcrumb-item.active,
footer.footer { color: black; } footer.footer {
color: black;
}
.clipboard { .clipboard {
position: absolute; position: absolute;
@ -91,9 +97,13 @@ footer.footer { color: black; }
} }
#sidebar .sidebar-header strong, #sidebar .sidebar-header strong,
#sidebar.active .sidebar-header h3 { display: none; } #sidebar.active .sidebar-header h3 {
display: none;
}
#sidebar.active .sidebar-header strong { display: block; } #sidebar.active .sidebar-header strong {
display: block;
}
#sidebar ul li a { #sidebar ul li a {
display: block; display: block;
@ -104,11 +114,13 @@ footer.footer { color: black; }
} }
#sidebar ul li a.active, #sidebar ul li a.active,
#sidebar.active ul li a.active { background: #000; } #sidebar.active ul li a.active {
background: #000;
}
#sidebar.active ul li a { #sidebar.active ul li a {
padding: 20px 10px; padding: 20px 10px;
font-size: .85em; font-size: 0.85em;
text-align: center; text-align: center;
} }
@ -119,7 +131,9 @@ footer.footer { color: black; }
font-size: 1.8em; font-size: 1.8em;
} }
#sidebar.active ul li a { padding: 10px; } #sidebar.active ul li a {
padding: 10px;
}
#sidebar.active .dropdown-toggle::after { #sidebar.active .dropdown-toggle::after {
top: auto; top: auto;
@ -146,12 +160,14 @@ footer.footer { color: black; }
} }
#sidebar ul li.active > a, #sidebar ul li.active > a,
a[aria-expanded="true"] { a[aria-expanded='true'] {
color: #fff; color: #fff;
background: #313a46; background: #313a46;
} }
a[data-toggle="collapse"] { position: relative; } a[data-toggle='collapse'] {
position: relative;
}
.dropdown-toggle::after { .dropdown-toggle::after {
position: absolute; position: absolute;
@ -170,7 +186,9 @@ a[data-toggle="collapse"] { position: relative; }
#sidebar, #sidebar,
#sidebar.active, #sidebar.active,
#content, #content,
#content.active { transition: all .3s cubic-bezier(.945, .020, .270, .665); } #content.active {
transition: all 0.3s cubic-bezier(0.945, 0.02, 0.27, 0.665);
}
#sidebarCollapse { #sidebarCollapse {
width: 40px; width: 40px;
@ -184,14 +202,20 @@ a[data-toggle="collapse"] { position: relative; }
height: 2px; height: 2px;
margin: 0 auto; margin: 0 auto;
background: #555; background: #555;
transition: all .8s cubic-bezier(.810, -.330, .345, 1.375); transition: all 0.8s cubic-bezier(0.81, -0.33, 0.345, 1.375);
} }
#sidebarCollapse span:first-of-type { transform: rotate(45deg) translate(2px, 2px); } #sidebarCollapse span:first-of-type {
transform: rotate(45deg) translate(2px, 2px);
}
#sidebarCollapse span:nth-of-type(2) { opacity: 0; } #sidebarCollapse span:nth-of-type(2) {
opacity: 0;
}
#sidebarCollapse span:last-of-type { transform: rotate(-45deg) translate(1px, -1px); } #sidebarCollapse span:last-of-type {
transform: rotate(-45deg) translate(1px, -1px);
}
#sidebarCollapse.active span { #sidebarCollapse.active span {
margin: 5px auto; margin: 5px auto;
@ -205,11 +229,17 @@ a[data-toggle="collapse"] { position: relative; }
color: #98a6ad; color: #98a6ad;
} }
.mat-column-select { overflow: initial; } .mat-column-select {
overflow: initial;
}
button { height: 2.5rem; } button {
height: 2.5rem;
}
.badge-pill { width: 5rem; } .badge-pill {
width: 5rem;
}
.mat-column { .mat-column {
word-wrap: break-word; word-wrap: break-word;
@ -246,14 +276,18 @@ button { height: 2.5rem; }
} }
#sidebar .sidebar-header strong, #sidebar .sidebar-header strong,
#sidebar.active .sidebar-header h3 { display: none; } #sidebar.active .sidebar-header h3 {
display: none;
}
#sidebar.active .sidebar-header strong, #sidebar.active .sidebar-header strong,
#sidebar.active ul li a i { display: block; } #sidebar.active ul li a i {
display: block;
}
#sidebar.active ul li a { #sidebar.active ul li a {
padding: 20px 10px; padding: 20px 10px;
font-size: .85em; font-size: 0.85em;
} }
#sidebar.active ul li a i { #sidebar.active ul li a i {
@ -262,7 +296,9 @@ button { height: 2.5rem; }
font-size: 1.8em; font-size: 1.8em;
} }
#sidebar.active ul ul a { padding: 10px; } #sidebar.active ul ul a {
padding: 10px;
}
.dropdown-toggle::after { .dropdown-toggle::after {
top: auto; top: auto;
@ -279,15 +315,21 @@ button { height: 2.5rem; }
height: 100vh; height: 100vh;
} }
#content .menutoggle { margin-left: 250px; } #content .menutoggle {
margin-left: 250px;
}
#sidebar, #sidebar,
#content, #content,
#content.active, #content.active,
#content.active .menutoggle { margin-left: 0; } #content.active .menutoggle {
margin-left: 0;
}
#content .menutoggle, #content .menutoggle,
#content.active .menutoggle { transition: all .3s cubic-bezier(.945, .020, .270, .665); } #content.active .menutoggle {
transition: all 0.3s cubic-bezier(0.945, 0.02, 0.27, 0.665);
}
#sidebarCollapse span:first-of-type, #sidebarCollapse span:first-of-type,
#sidebarCollapse span:nth-of-type(2), #sidebarCollapse span:nth-of-type(2),
@ -297,11 +339,19 @@ button { height: 2.5rem; }
opacity: 1; opacity: 1;
} }
#sidebarCollapse.active span { margin: 0 auto; } #sidebarCollapse.active span {
margin: 0 auto;
#sidebarCollapse.active span:first-of-type { transform: rotate(45deg) translate(2px, 2px); } }
#sidebarCollapse.active span:nth-of-type(2) { opacity: 0; } #sidebarCollapse.active span:first-of-type {
transform: rotate(45deg) translate(2px, 2px);
#sidebarCollapse.active span:last-of-type { transform: rotate(-45deg) translate(1px, -1px); } }
#sidebarCollapse.active span:nth-of-type(2) {
opacity: 0;
}
#sidebarCollapse.active span:last-of-type {
transform: rotate(-45deg) translate(1px, -1px);
}
} }

View File

@ -4,21 +4,22 @@ import 'zone.js/dist/zone-testing';
import { getTestBed } from '@angular/core/testing'; import { getTestBed } from '@angular/core/testing';
import { import {
BrowserDynamicTestingModule, BrowserDynamicTestingModule,
platformBrowserDynamicTesting platformBrowserDynamicTesting,
} from '@angular/platform-browser-dynamic/testing'; } from '@angular/platform-browser-dynamic/testing';
declare const require: { declare const require: {
context(path: string, deep?: boolean, filter?: RegExp): { context(
path: string,
deep?: boolean,
filter?: RegExp
): {
keys(): string[]; keys(): string[];
<T>(id: string): T; <T>(id: string): T;
}; };
}; };
// First, initialize the Angular testing environment. // First, initialize the Angular testing environment.
getTestBed().initTestEnvironment( getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
BrowserDynamicTestingModule,
platformBrowserDynamicTesting()
);
// Then we find all the tests. // Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/); const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules. // And load the modules.

View File

@ -1,7 +1,7 @@
import { Directive, HostListener, Input } from '@angular/core'; import { Directive, HostListener, Input } from '@angular/core';
@Directive({ @Directive({
selector: '[appRouterLink]' selector: '[appRouterLink]',
}) })
// tslint:disable-next-line:directive-class-suffix // tslint:disable-next-line:directive-class-suffix
export class RouterLinkDirectiveStub { export class RouterLinkDirectiveStub {

View File

@ -2,7 +2,7 @@ export class TokenServiceStub {
getBySymbol(symbol: string): any { getBySymbol(symbol: string): any {
return { return {
name: 'Reserve', name: 'Reserve',
symbol: 'RSV' symbol: 'RSV',
}; };
} }
} }

View File

@ -2,11 +2,71 @@ import {Observable, of} from 'rxjs';
export class UserServiceStub { export class UserServiceStub {
users = [ users = [
{id: 1, name: 'John Doe', phone: '+25412345678', address: '0xc86ff893ac40d3950b4d5f94a9b837258b0a9865', type: 'user', created: '08/16/2020', balance: '12987', failedPinAttempts: 1, status: 'approved', bio: 'Bodaboda', gender: 'male'}, {
{id: 2, name: 'Jane Buck', phone: '+25412341234', address: '0xc86ff893ac40d3950b4d5f94a9b837258b0a9865', type: 'vendor', created: '04/02/2020', balance: '56281', failedPinAttempts: 0, status: 'approved', bio: 'Groceries', gender: 'female'}, id: 1,
{id: 3, name: 'Mc Donald', phone: '+25498765432', address: '0xc86ff893ac40d3950b4d5f94a9b837258b0a9865', type: 'group', created: '11/16/2020', balance: '450', failedPinAttempts: 2, status: 'unapproved', bio: 'Food', gender: 'male'}, name: 'John Doe',
{id: 4, name: 'Hera Cles', phone: '+25498769876', address: '0xc86ff893ac40d3950b4d5f94a9b837258b0a9865', type: 'user', created: '05/28/2020', balance: '5621', failedPinAttempts: 3, status: 'approved', bio: 'Shop', gender: 'female'}, phone: '+25412345678',
{id: 5, name: 'Silver Fia', phone: '+25462518374', address: '0xc86ff893ac40d3950b4d5f94a9b837258b0a9865', type: 'token agent', created: '10/10/2020', balance: '817', failedPinAttempts: 0, status: 'unapproved', bio: 'Electronics', gender: 'male'}, address: '0xc86ff893ac40d3950b4d5f94a9b837258b0a9865',
type: 'user',
created: '08/16/2020',
balance: '12987',
failedPinAttempts: 1,
status: 'approved',
bio: 'Bodaboda',
gender: 'male',
},
{
id: 2,
name: 'Jane Buck',
phone: '+25412341234',
address: '0xc86ff893ac40d3950b4d5f94a9b837258b0a9865',
type: 'vendor',
created: '04/02/2020',
balance: '56281',
failedPinAttempts: 0,
status: 'approved',
bio: 'Groceries',
gender: 'female',
},
{
id: 3,
name: 'Mc Donald',
phone: '+25498765432',
address: '0xc86ff893ac40d3950b4d5f94a9b837258b0a9865',
type: 'group',
created: '11/16/2020',
balance: '450',
failedPinAttempts: 2,
status: 'unapproved',
bio: 'Food',
gender: 'male',
},
{
id: 4,
name: 'Hera Cles',
phone: '+25498769876',
address: '0xc86ff893ac40d3950b4d5f94a9b837258b0a9865',
type: 'user',
created: '05/28/2020',
balance: '5621',
failedPinAttempts: 3,
status: 'approved',
bio: 'Shop',
gender: 'female',
},
{
id: 5,
name: 'Silver Fia',
phone: '+25462518374',
address: '0xc86ff893ac40d3950b4d5f94a9b837258b0a9865',
type: 'token agent',
created: '10/10/2020',
balance: '817',
failedPinAttempts: 0,
status: 'unapproved',
bio: 'Electronics',
gender: 'male',
},
]; ];
actions = [ actions = [
@ -15,7 +75,13 @@ export class UserServiceStub {
{ id: 3, user: 'Will', role: 'superadmin', action: 'Reclaim RSV 1000', approval: true }, { id: 3, user: 'Will', role: 'superadmin', action: 'Reclaim RSV 1000', approval: true },
{ id: 4, user: 'Vivian', role: 'enroller', action: 'Complete user profile', approval: true }, { id: 4, user: 'Vivian', role: 'enroller', action: 'Complete user profile', approval: true },
{ id: 5, user: 'Jack', role: 'enroller', action: 'Reclaim RSV 200', approval: false }, { id: 5, user: 'Jack', role: 'enroller', action: 'Reclaim RSV 200', approval: false },
{ id: 6, user: 'Patience', role: 'enroller', action: 'Change user information', approval: false } {
id: 6,
user: 'Patience',
role: 'enroller',
action: 'Change user information',
approval: false,
},
]; ];
getUserById(id: string): any { getUserById(id: string): any {
@ -30,7 +96,7 @@ export class UserServiceStub {
failedPinAttempts: 1, failedPinAttempts: 1,
status: 'approved', status: 'approved',
bio: 'Bodaboda', bio: 'Bodaboda',
gender: 'male' gender: 'male',
}; };
} }
@ -41,20 +107,17 @@ export class UserServiceStub {
key: { key: {
ethereum: [ ethereum: [
'0x51d3c8e2e421604e2b644117a362d589c5434739', '0x51d3c8e2e421604e2b644117a362d589c5434739',
'0x9D7c284907acbd4a0cE2dDD0AA69147A921a573D' '0x9D7c284907acbd4a0cE2dDD0AA69147A921a573D',
] ],
}, },
location: { location: {
external: {}, external: {},
latitude: '22.430670', latitude: '22.430670',
longitude: '151.002995' longitude: '151.002995',
}, },
selling: [ selling: ['environment', 'health', 'transport'],
'environment', vcard:
'health', 'QkVHSU46VkNBUkQNClZFUlNJT046My4wDQpFTUFJTDphYXJuZXNlbkBob3RtYWlsLmNvbQ0KRk46S3VydMKgS3JhbmpjDQpOOktyYW5qYztLdXJ0Ozs7DQpURUw7VFlQPUNFTEw6NjkyNTAzMzQ5ODE5Ng0KRU5EOlZDQVJEDQo=',
'transport'
],
vcard: 'QkVHSU46VkNBUkQNClZFUlNJT046My4wDQpFTUFJTDphYXJuZXNlbkBob3RtYWlsLmNvbQ0KRk46S3VydMKgS3JhbmpjDQpOOktyYW5qYztLdXJ0Ozs7DQpURUw7VFlQPUNFTEw6NjkyNTAzMzQ5ODE5Ng0KRU5EOlZDQVJEDQo='
}); });
} }
@ -64,7 +127,7 @@ export class UserServiceStub {
user: 'Tom', user: 'Tom',
role: 'enroller', role: 'enroller',
action: 'Disburse RSV 100', action: 'Disburse RSV 100',
approval: false approval: false,
}; };
} }
@ -74,7 +137,7 @@ export class UserServiceStub {
user: 'Tom', user: 'Tom',
role: 'enroller', role: 'enroller',
action: 'Disburse RSV 100', action: 'Disburse RSV 100',
approval: true approval: true,
}; };
} }
} }