Add precommit hooks
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@ -40,6 +40,7 @@ npm-debug.log
 | 
			
		||||
yarn-error.log
 | 
			
		||||
testem.log
 | 
			
		||||
/typings
 | 
			
		||||
/.husky
 | 
			
		||||
 | 
			
		||||
# System Files
 | 
			
		||||
.DS_Store
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								.husky/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@ -1 +0,0 @@
 | 
			
		||||
_
 | 
			
		||||
@ -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
 | 
			
		||||
@ -186,7 +186,7 @@
 | 
			
		||||
  getBySymbol(symbol: string): any {
 | 
			
		||||
    return {
 | 
			
		||||
      name: 'Reserve',
 | 
			
		||||
      symbol: 'RSV'
 | 
			
		||||
      symbol: 'RSV',
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -352,7 +352,7 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <div class="tab-pane fade  tab-source-code" id="c-source">
 | 
			
		||||
        <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {Observable, of} from 'rxjs';
 | 
			
		||||
        <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Observable, of } from 'rxjs';
 | 
			
		||||
 | 
			
		||||
export class TransactionServiceStub {
 | 
			
		||||
  setTransaction(transaction: any, cacheSize: number): void {}
 | 
			
		||||
 | 
			
		||||
@ -153,13 +153,19 @@
 | 
			
		||||
    { 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: 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>
 | 
			
		||||
                        </td>
 | 
			
		||||
                    </tr>
 | 
			
		||||
                        <tr>
 | 
			
		||||
                            <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>
 | 
			
		||||
                        </tr>
 | 
			
		||||
 | 
			
		||||
@ -187,11 +193,71 @@
 | 
			
		||||
                    <tr>
 | 
			
		||||
                        <td class="col-md-4">
 | 
			
		||||
                            <i>Default value : </i><code>[
 | 
			
		||||
    {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: 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'},
 | 
			
		||||
    {
 | 
			
		||||
      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: 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',
 | 
			
		||||
    },
 | 
			
		||||
  ]</code>
 | 
			
		||||
                        </td>
 | 
			
		||||
                    </tr>
 | 
			
		||||
@ -233,8 +299,8 @@
 | 
			
		||||
 | 
			
		||||
            <tr>
 | 
			
		||||
                <td class="col-md-4">
 | 
			
		||||
                    <div class="io-line">Defined in <a href="" data-line="71"
 | 
			
		||||
                            class="link-to-prism">src/testing/user-service-stub.ts:71</a></div>
 | 
			
		||||
                    <div class="io-line">Defined in <a href="" data-line="134"
 | 
			
		||||
                            class="link-to-prism">src/testing/user-service-stub.ts:134</a></div>
 | 
			
		||||
                </td>
 | 
			
		||||
            </tr>
 | 
			
		||||
 | 
			
		||||
@ -303,8 +369,8 @@
 | 
			
		||||
 | 
			
		||||
            <tr>
 | 
			
		||||
                <td class="col-md-4">
 | 
			
		||||
                    <div class="io-line">Defined in <a href="" data-line="61"
 | 
			
		||||
                            class="link-to-prism">src/testing/user-service-stub.ts:61</a></div>
 | 
			
		||||
                    <div class="io-line">Defined in <a href="" data-line="124"
 | 
			
		||||
                            class="link-to-prism">src/testing/user-service-stub.ts:124</a></div>
 | 
			
		||||
                </td>
 | 
			
		||||
            </tr>
 | 
			
		||||
 | 
			
		||||
@ -373,8 +439,8 @@
 | 
			
		||||
 | 
			
		||||
            <tr>
 | 
			
		||||
                <td class="col-md-4">
 | 
			
		||||
                    <div class="io-line">Defined in <a href="" data-line="37"
 | 
			
		||||
                            class="link-to-prism">src/testing/user-service-stub.ts:37</a></div>
 | 
			
		||||
                    <div class="io-line">Defined in <a href="" data-line="103"
 | 
			
		||||
                            class="link-to-prism">src/testing/user-service-stub.ts:103</a></div>
 | 
			
		||||
                </td>
 | 
			
		||||
            </tr>
 | 
			
		||||
 | 
			
		||||
@ -443,8 +509,8 @@
 | 
			
		||||
 | 
			
		||||
            <tr>
 | 
			
		||||
                <td class="col-md-4">
 | 
			
		||||
                    <div class="io-line">Defined in <a href="" data-line="21"
 | 
			
		||||
                            class="link-to-prism">src/testing/user-service-stub.ts:21</a></div>
 | 
			
		||||
                    <div class="io-line">Defined in <a href="" data-line="87"
 | 
			
		||||
                            class="link-to-prism">src/testing/user-service-stub.ts:87</a></div>
 | 
			
		||||
                </td>
 | 
			
		||||
            </tr>
 | 
			
		||||
 | 
			
		||||
@ -501,15 +567,75 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <div class="tab-pane fade  tab-source-code" id="c-source">
 | 
			
		||||
        <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {Observable, of} from 'rxjs';
 | 
			
		||||
        <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Observable, of } from 'rxjs';
 | 
			
		||||
 | 
			
		||||
export class UserServiceStub {
 | 
			
		||||
  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: 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'},
 | 
			
		||||
    {
 | 
			
		||||
      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: 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 = [
 | 
			
		||||
@ -518,7 +644,13 @@ export class UserServiceStub {
 | 
			
		||||
    { 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: 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 {
 | 
			
		||||
@ -533,7 +665,7 @@ export class UserServiceStub {
 | 
			
		||||
      failedPinAttempts: 1,
 | 
			
		||||
      status: 'approved',
 | 
			
		||||
      bio: 'Bodaboda',
 | 
			
		||||
      gender: 'male'
 | 
			
		||||
      gender: 'male',
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -544,20 +676,17 @@ export class UserServiceStub {
 | 
			
		||||
      key: {
 | 
			
		||||
        ethereum: [
 | 
			
		||||
          '0x51d3c8e2e421604e2b644117a362d589c5434739',
 | 
			
		||||
          '0x9D7c284907acbd4a0cE2dDD0AA69147A921a573D'
 | 
			
		||||
        ]
 | 
			
		||||
          '0x9D7c284907acbd4a0cE2dDD0AA69147A921a573D',
 | 
			
		||||
        ],
 | 
			
		||||
      },
 | 
			
		||||
      location: {
 | 
			
		||||
        external: {},
 | 
			
		||||
        latitude: '22.430670',
 | 
			
		||||
        longitude: '151.002995'
 | 
			
		||||
        longitude: '151.002995',
 | 
			
		||||
      },
 | 
			
		||||
      selling: [
 | 
			
		||||
        'environment',
 | 
			
		||||
        'health',
 | 
			
		||||
        'transport'
 | 
			
		||||
      ],
 | 
			
		||||
      vcard: 'QkVHSU46VkNBUkQNClZFUlNJT046My4wDQpFTUFJTDphYXJuZXNlbkBob3RtYWlsLmNvbQ0KRk46S3VydMKgS3JhbmpjDQpOOktyYW5qYztLdXJ0Ozs7DQpURUw7VFlQPUNFTEw6NjkyNTAzMzQ5ODE5Ng0KRU5EOlZDQVJEDQo='
 | 
			
		||||
      selling: ['environment', 'health', 'transport'],
 | 
			
		||||
      vcard:
 | 
			
		||||
        'QkVHSU46VkNBUkQNClZFUlNJT046My4wDQpFTUFJTDphYXJuZXNlbkBob3RtYWlsLmNvbQ0KRk46S3VydMKgS3JhbmpjDQpOOktyYW5qYztLdXJ0Ozs7DQpURUw7VFlQPUNFTEw6NjkyNTAzMzQ5ODE5Ng0KRU5EOlZDQVJEDQo=',
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -567,7 +696,7 @@ export class UserServiceStub {
 | 
			
		||||
      user: 'Tom',
 | 
			
		||||
      role: 'enroller',
 | 
			
		||||
      action: 'Disburse RSV 100',
 | 
			
		||||
      approval: false
 | 
			
		||||
      approval: false,
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -577,7 +706,7 @@ export class UserServiceStub {
 | 
			
		||||
      user: 'Tom',
 | 
			
		||||
      role: 'enroller',
 | 
			
		||||
      action: 'Disburse RSV 100',
 | 
			
		||||
      approval: true
 | 
			
		||||
      approval: true,
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -983,33 +983,61 @@ export class AccountSearchComponent implements OnInit {
 | 
			
		||||
        </ol>
 | 
			
		||||
      </nav>
 | 
			
		||||
      <div class="card">
 | 
			
		||||
        <mat-card-title class="card-header">
 | 
			
		||||
          Accounts
 | 
			
		||||
        </mat-card-title>
 | 
			
		||||
        <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>
 | 
			
		||||
                  <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>
 | 
			
		||||
                <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>
 | 
			
		||||
                  <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>
 | 
			
		||||
                <button
 | 
			
		||||
                  mat-raised-button
 | 
			
		||||
                  color="primary"
 | 
			
		||||
                  type="submit"
 | 
			
		||||
                  class="btn btn-outline-primary ml-3"
 | 
			
		||||
                >
 | 
			
		||||
                  SEARCH
 | 
			
		||||
                </button>
 | 
			
		||||
              </form>
 | 
			
		||||
            </mat-tab>
 | 
			
		||||
          </mat-tab-group>
 | 
			
		||||
@ -1057,7 +1085,7 @@ export class AccountSearchComponent implements OnInit {
 | 
			
		||||
<script src="../js/libs/htmlparser.js"></script>
 | 
			
		||||
<script src="../js/libs/deep-iterator.js"></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 DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
 | 
			
		||||
    var ACTUAL_COMPONENT = {'name': 'AccountSearchComponent'};
 | 
			
		||||
 | 
			
		||||
@ -992,63 +992,99 @@ export class AccountsComponent implements OnInit {
 | 
			
		||||
        </ol>
 | 
			
		||||
      </nav>
 | 
			
		||||
      <div class="card">
 | 
			
		||||
        <mat-card-title class="card-header">
 | 
			
		||||
          Accounts
 | 
			
		||||
        </mat-card-title>
 | 
			
		||||
        <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-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}}
 | 
			
		||||
                  {{ 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>
 | 
			
		||||
            <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">
 | 
			
		||||
            <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>
 | 
			
		||||
 | 
			
		||||
          <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>
 | 
			
		||||
              <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>
 | 
			
		||||
              <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>
 | 
			
		||||
              <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>
 | 
			
		||||
              <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>
 | 
			
		||||
              <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-row
 | 
			
		||||
              *matRowDef="let account; columns: displayedColumns"
 | 
			
		||||
              (click)="viewAccount(account)"
 | 
			
		||||
              matRipple
 | 
			
		||||
            ></mat-row>
 | 
			
		||||
          </mat-table>
 | 
			
		||||
 | 
			
		||||
          <mat-paginator [pageSize]="defaultPageSize" [pageSizeOptions]="pageSizeOptions" showFirstLastButtons></mat-paginator>
 | 
			
		||||
          <mat-paginator
 | 
			
		||||
            [pageSize]="defaultPageSize"
 | 
			
		||||
            [pageSizeOptions]="pageSizeOptions"
 | 
			
		||||
            showFirstLastButtons
 | 
			
		||||
          ></mat-paginator>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
@ -1093,7 +1129,7 @@ export class AccountsComponent implements OnInit {
 | 
			
		||||
<script src="../js/libs/htmlparser.js"></script>
 | 
			
		||||
<script src="../js/libs/deep-iterator.js"></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 DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
 | 
			
		||||
    var ACTUAL_COMPONENT = {'name': 'AccountsComponent'};
 | 
			
		||||
 | 
			
		||||
@ -784,20 +784,25 @@ export class AuthComponent implements OnInit {
 | 
			
		||||
            <h1 class="text-white">CICADA</h1>
 | 
			
		||||
          </a>
 | 
			
		||||
        </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">
 | 
			
		||||
            <h4 class="text-dark-50 text-center font-weight-bold">Add Private Key</h4>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <form [formGroup]="keyForm" (ngSubmit)="onSubmit()">
 | 
			
		||||
 | 
			
		||||
            <mat-form-field appearance="outline" class="full-width">
 | 
			
		||||
              <mat-label>Private Key</mat-label>
 | 
			
		||||
              <textarea matInput style="height: 30rem" formControlName="key" placeholder="Enter your private key..."
 | 
			
		||||
                        [errorStateMatcher]="matcher"></textarea>
 | 
			
		||||
              <textarea
 | 
			
		||||
                matInput
 | 
			
		||||
                style="height: 30rem"
 | 
			
		||||
                formControlName="key"
 | 
			
		||||
                placeholder="Enter your private key..."
 | 
			
		||||
                [errorStateMatcher]="matcher"
 | 
			
		||||
              ></textarea>
 | 
			
		||||
              <div *ngIf="submitted && keyFormStub.key.errors" class="invalid-feedback">
 | 
			
		||||
                <mat-error *ngIf="keyFormStub.key.errors.required">Private Key is required.</mat-error>
 | 
			
		||||
                <mat-error *ngIf="keyFormStub.key.errors.required"
 | 
			
		||||
                  >Private Key is required.</mat-error
 | 
			
		||||
                >
 | 
			
		||||
              </div>
 | 
			
		||||
            </mat-form-field>
 | 
			
		||||
 | 
			
		||||
@ -805,20 +810,24 @@ export class AuthComponent implements OnInit {
 | 
			
		||||
              <span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span>
 | 
			
		||||
              Add Key
 | 
			
		||||
            </button>
 | 
			
		||||
 | 
			
		||||
          </form>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div  id="two" style="display: none" class="card-body p-4 align-items-center">
 | 
			
		||||
 | 
			
		||||
        <div id="two" style="display: none" class="card-body p-4 align-items-center">
 | 
			
		||||
          <div class="text-center w-75 m-auto">
 | 
			
		||||
            <h4 id="state" class="text-dark-50 text-center font-weight-bold"></h4>
 | 
			
		||||
            <button mat-raised-button matRipple color="primary" type="submit" (click)="login()"> Login </button>
 | 
			
		||||
            <button mat-raised-button matRipple color="primary" type="submit" (click)="login()">
 | 
			
		||||
              Login
 | 
			
		||||
            </button>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <div class="row mt-3">
 | 
			
		||||
            <div class="col-12 text-center">
 | 
			
		||||
              <p class="text-muted">Change private key? <a (click)="switchWindows()" class="text-muted ml-1"><b>Enter private key</b></a></p>
 | 
			
		||||
            </div> <!-- end col-->
 | 
			
		||||
              <p class="text-muted">
 | 
			
		||||
                Change private key?
 | 
			
		||||
                <a (click)="switchWindows()" class="text-muted ml-1"><b>Enter private key</b></a>
 | 
			
		||||
              </p>
 | 
			
		||||
            </div>
 | 
			
		||||
            <!-- end col-->
 | 
			
		||||
          </div>
 | 
			
		||||
          <!-- end row -->
 | 
			
		||||
        </div>
 | 
			
		||||
@ -861,7 +870,7 @@ export class AuthComponent implements OnInit {
 | 
			
		||||
<script src="../js/libs/htmlparser.js"></script>
 | 
			
		||||
<script src="../js/libs/deep-iterator.js"></script>
 | 
			
		||||
<script>
 | 
			
		||||
        var COMPONENT_TEMPLATE = '<div><app-network-status></app-network-status><div class="container">  <div class="row justify-content-center mt-5 mb-5">    <div class="col-lg-6 col-md-8 col-sm-10">      <div class="card">        <mat-card-title class="card-header pt-4 pb-4 text-center background-dark">          <a routerLink="/">            <h1 class="text-white">CICADA</h1>          </a>        </mat-card-title>        <div  id="one" style="display: block" class="card-body p-4">          <div class="text-center w-75 m-auto">            <h4 class="text-dark-50 text-center font-weight-bold">Add Private Key</h4>          </div>          <form [formGroup]="keyForm" (ngSubmit)="onSubmit()">            <mat-form-field appearance="outline" class="full-width">              <mat-label>Private Key</mat-label>              <textarea matInput style="height: 30rem" formControlName="key" placeholder="Enter your private key..."                        [errorStateMatcher]="matcher"></textarea>              <div *ngIf="submitted && keyFormStub.key.errors" class="invalid-feedback">                <mat-error *ngIf="keyFormStub.key.errors.required">Private Key is required.</mat-error>              </div>            </mat-form-field>            <button mat-raised-button matRipple color="primary" type="submit" [disabled]="loading">              <span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span>              Add Key            </button>          </form>        </div>        <div  id="two" style="display: none" class="card-body p-4 align-items-center">          <div class="text-center w-75 m-auto">            <h4 id="state" class="text-dark-50 text-center font-weight-bold"></h4>            <button mat-raised-button matRipple color="primary" type="submit" (click)="login()"> Login </button>          </div>          <div class="row mt-3">            <div class="col-12 text-center">              <p class="text-muted">Change private key? <a (click)="switchWindows()" class="text-muted ml-1"><b>Enter private key</b></a></p>            </div> <!-- end col-->          </div>          <!-- end row -->        </div>      </div>    </div>  </div></div></div>'
 | 
			
		||||
        var COMPONENT_TEMPLATE = '<div><app-network-status></app-network-status><div class="container">  <div class="row justify-content-center mt-5 mb-5">    <div class="col-lg-6 col-md-8 col-sm-10">      <div class="card">        <mat-card-title class="card-header pt-4 pb-4 text-center background-dark">          <a routerLink="/">            <h1 class="text-white">CICADA</h1>          </a>        </mat-card-title>        <div id="one" style="display: block" class="card-body p-4">          <div class="text-center w-75 m-auto">            <h4 class="text-dark-50 text-center font-weight-bold">Add Private Key</h4>          </div>          <form [formGroup]="keyForm" (ngSubmit)="onSubmit()">            <mat-form-field appearance="outline" class="full-width">              <mat-label>Private Key</mat-label>              <textarea                matInput                style="height: 30rem"                formControlName="key"                placeholder="Enter your private key..."                [errorStateMatcher]="matcher"              ></textarea>              <div *ngIf="submitted && keyFormStub.key.errors" class="invalid-feedback">                <mat-error *ngIf="keyFormStub.key.errors.required"                  >Private Key is required.</mat-error                >              </div>            </mat-form-field>            <button mat-raised-button matRipple color="primary" type="submit" [disabled]="loading">              <span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span>              Add Key            </button>          </form>        </div>        <div id="two" style="display: none" class="card-body p-4 align-items-center">          <div class="text-center w-75 m-auto">            <h4 id="state" class="text-dark-50 text-center font-weight-bold"></h4>            <button mat-raised-button matRipple color="primary" type="submit" (click)="login()">              Login            </button>          </div>          <div class="row mt-3">            <div class="col-12 text-center">              <p class="text-muted">                Change private key?                <a (click)="switchWindows()" class="text-muted ml-1"><b>Enter private key</b></a>              </p>            </div>            <!-- end col-->          </div>          <!-- end row -->        </div>      </div>    </div>  </div></div></div>'
 | 
			
		||||
    var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
 | 
			
		||||
    var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
 | 
			
		||||
    var ACTUAL_COMPONENT = {'name': 'AuthComponent'};
 | 
			
		||||
 | 
			
		||||
@ -264,12 +264,8 @@ export class ErrorDialogComponent {
 | 
			
		||||
    <div class="tab-pane fade " id="c-templateData">
 | 
			
		||||
        <pre class="line-numbers"><code class="language-html"><div>
 | 
			
		||||
  <div>
 | 
			
		||||
    <p>
 | 
			
		||||
      Message: {{ data.message }}
 | 
			
		||||
    </p>
 | 
			
		||||
    <p *ngIf="data.status">
 | 
			
		||||
      Status: {{ data?.status }}
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>Message: {{ data.message }}</p>
 | 
			
		||||
    <p *ngIf="data.status">Status: {{ data?.status }}</p>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
</code></pre>
 | 
			
		||||
@ -307,7 +303,7 @@ export class ErrorDialogComponent {
 | 
			
		||||
<script src="../js/libs/htmlparser.js"></script>
 | 
			
		||||
<script src="../js/libs/deep-iterator.js"></script>
 | 
			
		||||
<script>
 | 
			
		||||
        var COMPONENT_TEMPLATE = '<div><div>  <div>    <p>      Message: {{ data.message }}    </p>    <p *ngIf="data.status">      Status: {{ data?.status }}    </p>  </div></div></div>'
 | 
			
		||||
        var COMPONENT_TEMPLATE = '<div><div>  <div>    <p>Message: {{ data.message }}</p>    <p *ngIf="data.status">Status: {{ data?.status }}</p>  </div></div></div>'
 | 
			
		||||
    var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
 | 
			
		||||
    var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
 | 
			
		||||
    var ACTUAL_COMPONENT = {'name': 'ErrorDialogComponent'};
 | 
			
		||||
 | 
			
		||||
@ -288,10 +288,12 @@ export class FooterComponent implements OnInit {
 | 
			
		||||
    <div class="tab-pane fade " id="c-templateData">
 | 
			
		||||
        <pre class="line-numbers"><code class="language-html"><!-- Footer Start -->
 | 
			
		||||
<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 }}
 | 
			
		||||
  <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>
 | 
			
		||||
<!-- end Footer -->
 | 
			
		||||
</code></pre>
 | 
			
		||||
@ -329,7 +331,7 @@ export class FooterComponent implements OnInit {
 | 
			
		||||
<script src="../js/libs/htmlparser.js"></script>
 | 
			
		||||
<script src="../js/libs/deep-iterator.js"></script>
 | 
			
		||||
<script>
 | 
			
		||||
        var COMPONENT_TEMPLATE = '<div><!-- Footer Start --><footer class="footer">  <a target="blank" title="GPL-3" href="https://www.gnu.org/licenses/gpl-3.0.en.html"> Copyleft </a> 🄯.  {{ currentYear }}  <a target="blank" title="Gitlab@GrassrootsEconomics" href="https://gitlab.com/grassrootseconomics"><u> Grassroots Economics </u></a></footer><!-- end Footer --></div>'
 | 
			
		||||
        var COMPONENT_TEMPLATE = '<div><!-- Footer Start --><footer class="footer">  <a target="blank" title="GPL-3" href="https://www.gnu.org/licenses/gpl-3.0.en.html"> Copyleft </a>  🄯.  {{ currentYear }}  <a target="blank" title="Gitlab@GrassrootsEconomics" href="https://gitlab.com/grassrootseconomics"    ><u> Grassroots Economics </u></a  ></footer><!-- end Footer --></div>'
 | 
			
		||||
    var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
 | 
			
		||||
    var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
 | 
			
		||||
    var ACTUAL_COMPONENT = {'name': 'FooterComponent'};
 | 
			
		||||
 | 
			
		||||
@ -109,15 +109,15 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <div class="tab-pane fade  tab-source-code" id="c-source">
 | 
			
		||||
        <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {Component} from '@angular/core';
 | 
			
		||||
        <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Component } from '@angular/core';
 | 
			
		||||
 | 
			
		||||
@Component({selector: 'app-sidebar', template: ''})
 | 
			
		||||
@Component({ selector: 'app-sidebar', template: '' })
 | 
			
		||||
export class SidebarStubComponent {}
 | 
			
		||||
 | 
			
		||||
@Component({selector: 'app-topbar', template: ''})
 | 
			
		||||
@Component({ selector: 'app-topbar', template: '' })
 | 
			
		||||
export class TopbarStubComponent {}
 | 
			
		||||
 | 
			
		||||
@Component({selector: 'app-footer', template: ''})
 | 
			
		||||
@Component({ selector: 'app-footer', template: '' })
 | 
			
		||||
export class FooterStubComponent {}
 | 
			
		||||
</code></pre>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
@ -379,14 +379,14 @@ export class NetworkStatusComponent implements OnInit {
 | 
			
		||||
    <div class="tab-pane fade " id="c-templateData">
 | 
			
		||||
        <pre class="line-numbers"><code class="language-html"><nav class="navbar navbar-dark background-dark">
 | 
			
		||||
  <h1 class="navbar-brand">
 | 
			
		||||
    <div *ngIf="noInternetConnection; then offlineBlock else onlineBlock"></div>
 | 
			
		||||
    <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">
 | 
			
		||||
      <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">
 | 
			
		||||
      <strong style="color: lawngreen">ONLINE </strong>
 | 
			
		||||
      <img width="20rem" src="assets/images/wifi.svg" alt="Internet Connected" />
 | 
			
		||||
    </ng-template>
 | 
			
		||||
  </h1>
 | 
			
		||||
</nav>
 | 
			
		||||
@ -425,7 +425,7 @@ export class NetworkStatusComponent implements OnInit {
 | 
			
		||||
<script src="../js/libs/htmlparser.js"></script>
 | 
			
		||||
<script src="../js/libs/deep-iterator.js"></script>
 | 
			
		||||
<script>
 | 
			
		||||
        var COMPONENT_TEMPLATE = '<div><nav class="navbar navbar-dark 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 DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
 | 
			
		||||
    var ACTUAL_COMPONENT = {'name': 'NetworkStatusComponent'};
 | 
			
		||||
 | 
			
		||||
@ -521,19 +521,31 @@ export class OrganizationComponent implements OnInit {
 | 
			
		||||
            <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">
 | 
			
		||||
                <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>
 | 
			
		||||
                <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-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>
 | 
			
		||||
@ -542,9 +554,11 @@ export class OrganizationComponent implements OnInit {
 | 
			
		||||
                </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>
 | 
			
		||||
                </mat-error> </mat-form-field
 | 
			
		||||
              ><br />
 | 
			
		||||
              <button mat-raised-button color="primary" type="submit" class="btn btn-primary">
 | 
			
		||||
                Submit
 | 
			
		||||
              </button>
 | 
			
		||||
            </form>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
@ -591,7 +605,7 @@ export class OrganizationComponent implements OnInit {
 | 
			
		||||
<script src="../js/libs/htmlparser.js"></script>
 | 
			
		||||
<script src="../js/libs/deep-iterator.js"></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 DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
 | 
			
		||||
    var ACTUAL_COMPONENT = {'name': 'OrganizationComponent'};
 | 
			
		||||
 | 
			
		||||
@ -245,10 +245,16 @@ export class PagesComponent {
 | 
			
		||||
        </ol>
 | 
			
		||||
      </nav>
 | 
			
		||||
      <div class="embed-responsive embed-responsive-16by9">
 | 
			
		||||
        <iframe class="embed-responsive-item" [src]="url | safe" allow="fullscreen" loading="lazy"
 | 
			
		||||
                title="Community inclusion currencies dashboard" referrerpolicy="no-referrer">
 | 
			
		||||
        <iframe
 | 
			
		||||
          class="embed-responsive-item"
 | 
			
		||||
          [src]="url | safe"
 | 
			
		||||
          allow="fullscreen"
 | 
			
		||||
          loading="lazy"
 | 
			
		||||
          title="Community inclusion currencies dashboard"
 | 
			
		||||
          referrerpolicy="no-referrer"
 | 
			
		||||
        >
 | 
			
		||||
          <p>
 | 
			
		||||
            <a href="{{url}}"> Your browser does not support iframes. </a>
 | 
			
		||||
            <a href="{{ url }}"> Your browser does not support iframes. </a>
 | 
			
		||||
          </p>
 | 
			
		||||
        </iframe>
 | 
			
		||||
      </div>
 | 
			
		||||
@ -294,7 +300,7 @@ export class PagesComponent {
 | 
			
		||||
<script src="../js/libs/htmlparser.js"></script>
 | 
			
		||||
<script src="../js/libs/deep-iterator.js"></script>
 | 
			
		||||
<script>
 | 
			
		||||
        var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper">  <app-sidebar></app-sidebar>  <!-- ============================================================== -->  <!-- Start Page Content here -->  <!-- ============================================================== -->  <div id="content">    <app-topbar></app-topbar>    <!-- Start Content-->    <div class="container-fluid" appMenuSelection>      <nav aria-label="breadcrumb">        <ol class="breadcrumb">          <li class="breadcrumb-item active" aria-current="page">Home</li>        </ol>      </nav>      <div class="embed-responsive embed-responsive-16by9">        <iframe class="embed-responsive-item" [src]="url | safe" allow="fullscreen" loading="lazy"                title="Community inclusion currencies dashboard" referrerpolicy="no-referrer">          <p>            <a href="{{url}}"> Your browser does not support iframes. </a>          </p>        </iframe>      </div>    </div>    <app-footer appMenuSelection></app-footer>  </div>  <!-- ============================================================== -->  <!-- End Page content -->  <!-- ============================================================== --></div></div>'
 | 
			
		||||
        var COMPONENT_TEMPLATE = '<div><!-- Begin page --><div class="wrapper">  <app-sidebar></app-sidebar>  <!-- ============================================================== -->  <!-- Start Page Content here -->  <!-- ============================================================== -->  <div id="content">    <app-topbar></app-topbar>    <!-- Start Content-->    <div class="container-fluid" appMenuSelection>      <nav aria-label="breadcrumb">        <ol class="breadcrumb">          <li class="breadcrumb-item active" aria-current="page">Home</li>        </ol>      </nav>      <div class="embed-responsive embed-responsive-16by9">        <iframe          class="embed-responsive-item"          [src]="url | safe"          allow="fullscreen"          loading="lazy"          title="Community inclusion currencies dashboard"          referrerpolicy="no-referrer"        >          <p>            <a href="{{ url }}"> Your browser does not support iframes. </a>          </p>        </iframe>      </div>    </div>    <app-footer appMenuSelection></app-footer>  </div>  <!-- ============================================================== -->  <!-- End Page content -->  <!-- ============================================================== --></div></div>'
 | 
			
		||||
    var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
 | 
			
		||||
    var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
 | 
			
		||||
    var ACTUAL_COMPONENT = {'name': 'PagesComponent'};
 | 
			
		||||
 | 
			
		||||
@ -736,16 +736,14 @@ export class SettingsComponent implements OnInit {
 | 
			
		||||
      <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>
 | 
			
		||||
            <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>UserId: </strong> {{ userInfo?.userid }} </span><br />
 | 
			
		||||
              <span><strong>Username: </strong> {{ userInfo?.name }} </span><br />
 | 
			
		||||
              <span><strong>Email: </strong> {{ userInfo?.email }} </span>
 | 
			
		||||
            </div>
 | 
			
		||||
            <hr>
 | 
			
		||||
            <hr />
 | 
			
		||||
            <div class="card-body">
 | 
			
		||||
              <h4>Organization Settings</h4>
 | 
			
		||||
              <a routerLink="/settings/organization"><i>Update your organization settings</i></a>
 | 
			
		||||
@ -754,21 +752,27 @@ export class SettingsComponent implements OnInit {
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="col-md-6 mb-2">
 | 
			
		||||
          <div class="card">
 | 
			
		||||
            <mat-card-title class="card-header text-center">
 | 
			
		||||
              ACCOUNT MANAGEMENT
 | 
			
		||||
            </mat-card-title>
 | 
			
		||||
            <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>
 | 
			
		||||
            <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>
 | 
			
		||||
            <hr />
 | 
			
		||||
            <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>
 | 
			
		||||
@ -777,39 +781,60 @@ export class SettingsComponent implements OnInit {
 | 
			
		||||
            <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>
 | 
			
		||||
                <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">
 | 
			
		||||
                <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>
 | 
			
		||||
 | 
			
		||||
              <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>
 | 
			
		||||
                  <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>
 | 
			
		||||
                  <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>
 | 
			
		||||
                  <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>
 | 
			
		||||
 | 
			
		||||
              <mat-paginator
 | 
			
		||||
                [pageSize]="5"
 | 
			
		||||
                [pageSizeOptions]="[5, 10, 20, 50, 100]"
 | 
			
		||||
                showFirstLastButtons
 | 
			
		||||
              ></mat-paginator>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
@ -856,7 +881,7 @@ export class SettingsComponent implements OnInit {
 | 
			
		||||
<script src="../js/libs/htmlparser.js"></script>
 | 
			
		||||
<script src="../js/libs/deep-iterator.js"></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 DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
 | 
			
		||||
    var ACTUAL_COMPONENT = {'name': 'SettingsComponent'};
 | 
			
		||||
 | 
			
		||||
@ -243,10 +243,9 @@ export class SidebarComponent implements OnInit {
 | 
			
		||||
<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">
 | 
			
		||||
        <img class="full-width" src="assets/images/CIC-Logo-white.png" alt="CIC Admin Dashboard" />
 | 
			
		||||
      </h3>
 | 
			
		||||
      <strong>CICADA</strong>
 | 
			
		||||
    </div>
 | 
			
		||||
@ -327,7 +326,7 @@ export class SidebarComponent implements OnInit {
 | 
			
		||||
<script src="../js/libs/htmlparser.js"></script>
 | 
			
		||||
<script src="../js/libs/deep-iterator.js"></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 DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
 | 
			
		||||
    var ACTUAL_COMPONENT = {'name': 'SidebarComponent'};
 | 
			
		||||
 | 
			
		||||
@ -109,15 +109,15 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <div class="tab-pane fade  tab-source-code" id="c-source">
 | 
			
		||||
        <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {Component} from '@angular/core';
 | 
			
		||||
        <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Component } from '@angular/core';
 | 
			
		||||
 | 
			
		||||
@Component({selector: 'app-sidebar', template: ''})
 | 
			
		||||
@Component({ selector: 'app-sidebar', template: '' })
 | 
			
		||||
export class SidebarStubComponent {}
 | 
			
		||||
 | 
			
		||||
@Component({selector: 'app-topbar', template: ''})
 | 
			
		||||
@Component({ selector: 'app-topbar', template: '' })
 | 
			
		||||
export class TopbarStubComponent {}
 | 
			
		||||
 | 
			
		||||
@Component({selector: 'app-footer', template: ''})
 | 
			
		||||
@Component({ selector: 'app-footer', template: '' })
 | 
			
		||||
export class FooterStubComponent {}
 | 
			
		||||
</code></pre>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
@ -377,32 +377,43 @@ export class TokenDetailsComponent implements OnInit {
 | 
			
		||||
    <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>
 | 
			
		||||
        <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>
 | 
			
		||||
        <span><strong>Name:</strong> {{ token?.name }}</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div>
 | 
			
		||||
        <span><strong>Symbol:</strong> {{token?.symbol}}</span>
 | 
			
		||||
        <span><strong>Symbol:</strong> {{ token?.symbol }}</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div>
 | 
			
		||||
        <span><strong>Address:</strong> {{token?.address}}</span>
 | 
			
		||||
        <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>
 | 
			
		||||
        <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>
 | 
			
		||||
        <span><strong>Supply:</strong> {{ token?.supply | tokenRatio }}</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <br />
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Reserve</h2>
 | 
			
		||||
        <div>
 | 
			
		||||
          <span><strong>Weight:</strong> {{token?.reserveRatio}}</span>
 | 
			
		||||
          <span><strong>Weight:</strong> {{ token?.reserveRatio }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div>
 | 
			
		||||
          <span><strong>Owner:</strong> {{token?.owner}}</span>
 | 
			
		||||
          <span><strong>Owner:</strong> {{ token?.owner }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
@ -443,7 +454,7 @@ export class TokenDetailsComponent implements OnInit {
 | 
			
		||||
<script src="../js/libs/htmlparser.js"></script>
 | 
			
		||||
<script src="../js/libs/deep-iterator.js"></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 DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
 | 
			
		||||
    var ACTUAL_COMPONENT = {'name': 'TokenDetailsComponent'};
 | 
			
		||||
 | 
			
		||||
@ -766,45 +766,71 @@ export class TokensComponent implements OnInit {
 | 
			
		||||
        <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>
 | 
			
		||||
            <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">
 | 
			
		||||
            <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>
 | 
			
		||||
          <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>
 | 
			
		||||
              <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>
 | 
			
		||||
              <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>
 | 
			
		||||
              <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>
 | 
			
		||||
              <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-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>
 | 
			
		||||
          <mat-paginator
 | 
			
		||||
            [pageSize]="5"
 | 
			
		||||
            [pageSizeOptions]="[5, 10, 25, 100]"
 | 
			
		||||
            showFirstLastButtons
 | 
			
		||||
          ></mat-paginator>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
@ -814,7 +840,6 @@ export class TokensComponent implements OnInit {
 | 
			
		||||
  <!-- End Page content -->
 | 
			
		||||
  <!-- ============================================================== -->
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
</code></pre>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
@ -850,7 +875,7 @@ export class TokensComponent implements OnInit {
 | 
			
		||||
<script src="../js/libs/htmlparser.js"></script>
 | 
			
		||||
<script src="../js/libs/deep-iterator.js"></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 DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
 | 
			
		||||
    var ACTUAL_COMPONENT = {'name': 'TokensComponent'};
 | 
			
		||||
 | 
			
		||||
@ -242,7 +242,13 @@ export class TopbarComponent implements OnInit {
 | 
			
		||||
        <pre class="line-numbers"><code class="language-html"><!-- Topbar Start -->
 | 
			
		||||
<nav class="navbar navbar-expand-lg navbar-light bg-light sticky-top">
 | 
			
		||||
  <div class="container-fluid">
 | 
			
		||||
    <button type="button" id="sidebarCollapse" class="navbar-btn menutoggle" aria-label="Sidebar toggle" appMenuToggle>
 | 
			
		||||
    <button
 | 
			
		||||
      type="button"
 | 
			
		||||
      id="sidebarCollapse"
 | 
			
		||||
      class="navbar-btn menutoggle"
 | 
			
		||||
      aria-label="Sidebar toggle"
 | 
			
		||||
      appMenuToggle
 | 
			
		||||
    >
 | 
			
		||||
      <span></span>
 | 
			
		||||
      <span></span>
 | 
			
		||||
      <span></span>
 | 
			
		||||
@ -285,7 +291,7 @@ export class TopbarComponent implements OnInit {
 | 
			
		||||
<script src="../js/libs/htmlparser.js"></script>
 | 
			
		||||
<script src="../js/libs/deep-iterator.js"></script>
 | 
			
		||||
<script>
 | 
			
		||||
        var COMPONENT_TEMPLATE = '<div><!-- Topbar Start --><nav class="navbar navbar-expand-lg navbar-light bg-light sticky-top">  <div class="container-fluid">    <button type="button" id="sidebarCollapse" class="navbar-btn menutoggle" aria-label="Sidebar toggle" appMenuToggle>      <span></span>      <span></span>      <span></span>    </button>  </div></nav><!-- end Topbar --></div>'
 | 
			
		||||
        var COMPONENT_TEMPLATE = '<div><!-- Topbar Start --><nav class="navbar navbar-expand-lg navbar-light bg-light sticky-top">  <div class="container-fluid">    <button      type="button"      id="sidebarCollapse"      class="navbar-btn menutoggle"      aria-label="Sidebar toggle"      appMenuToggle    >      <span></span>      <span></span>      <span></span>    </button>  </div></nav><!-- end Topbar --></div>'
 | 
			
		||||
    var COMPONENTS = [{'name': 'AccountDetailsComponent', 'selector': 'app-account-details'},{'name': 'AccountsComponent', 'selector': 'app-accounts'},{'name': 'AccountSearchComponent', 'selector': 'app-account-search'},{'name': 'AdminComponent', 'selector': 'app-admin'},{'name': 'AppComponent', 'selector': 'app-root'},{'name': 'AuthComponent', 'selector': 'app-auth'},{'name': 'CreateAccountComponent', 'selector': 'app-create-account'},{'name': 'ErrorDialogComponent', 'selector': 'app-error-dialog'},{'name': 'FooterComponent', 'selector': 'app-footer'},{'name': 'FooterStubComponent', 'selector': 'app-footer'},{'name': 'NetworkStatusComponent', 'selector': 'app-network-status'},{'name': 'OrganizationComponent', 'selector': 'app-organization'},{'name': 'PagesComponent', 'selector': 'app-pages'},{'name': 'SettingsComponent', 'selector': 'app-settings'},{'name': 'SidebarComponent', 'selector': 'app-sidebar'},{'name': 'SidebarStubComponent', 'selector': 'app-sidebar'},{'name': 'TokenDetailsComponent', 'selector': 'app-token-details'},{'name': 'TokensComponent', 'selector': 'app-tokens'},{'name': 'TopbarComponent', 'selector': 'app-topbar'},{'name': 'TopbarStubComponent', 'selector': 'app-topbar'},{'name': 'TransactionDetailsComponent', 'selector': 'app-transaction-details'},{'name': 'TransactionsComponent', 'selector': 'app-transactions'}];
 | 
			
		||||
    var DIRECTIVES = [{'name': 'MenuSelectionDirective', 'selector': '[appMenuSelection]'},{'name': 'MenuToggleDirective', 'selector': '[appMenuToggle]'},{'name': 'PasswordToggleDirective', 'selector': '[appPasswordToggle]'},{'name': 'RouterLinkDirectiveStub', 'selector': '[appRouterLink]'}];
 | 
			
		||||
    var ACTUAL_COMPONENT = {'name': 'TopbarComponent'};
 | 
			
		||||
 | 
			
		||||
@ -109,15 +109,15 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <div class="tab-pane fade  tab-source-code" id="c-source">
 | 
			
		||||
        <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {Component} from '@angular/core';
 | 
			
		||||
        <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Component } from '@angular/core';
 | 
			
		||||
 | 
			
		||||
@Component({selector: 'app-sidebar', template: ''})
 | 
			
		||||
@Component({ selector: 'app-sidebar', template: '' })
 | 
			
		||||
export class SidebarStubComponent {}
 | 
			
		||||
 | 
			
		||||
@Component({selector: 'app-topbar', template: ''})
 | 
			
		||||
@Component({ selector: 'app-topbar', template: '' })
 | 
			
		||||
export class TopbarStubComponent {}
 | 
			
		||||
 | 
			
		||||
@Component({selector: 'app-footer', template: ''})
 | 
			
		||||
@Component({ selector: 'app-footer', template: '' })
 | 
			
		||||
export class FooterStubComponent {}
 | 
			
		||||
</code></pre>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
@ -235,10 +235,10 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <div class="tab-pane fade  tab-source-code" id="c-source">
 | 
			
		||||
        <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import {Directive, HostListener, Input} from '@angular/core';
 | 
			
		||||
        <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Directive, HostListener, Input } from '@angular/core';
 | 
			
		||||
 | 
			
		||||
@Directive({
 | 
			
		||||
  selector: '[appRouterLink]'
 | 
			
		||||
  selector: '[appRouterLink]',
 | 
			
		||||
})
 | 
			
		||||
// tslint:disable-next-line:directive-class-suffix
 | 
			
		||||
export class RouterLinkDirectiveStub {
 | 
			
		||||
 | 
			
		||||
@ -1719,11 +1719,10 @@
 | 
			
		||||
  logLevel: NgxLoggerLevel.ERROR,
 | 
			
		||||
  serverLogLevel: NgxLoggerLevel.OFF,
 | 
			
		||||
  loggingUrl: '',
 | 
			
		||||
  cicAuthUrl: 'https://meta-auth.dev.grassrootseconomics.net',
 | 
			
		||||
  cicMetaUrl: 'https://meta-auth.dev.grassrootseconomics.net',
 | 
			
		||||
  cicMetaUrl: 'https://meta.dev.grassrootseconomics.net',
 | 
			
		||||
  publicKeysUrl: 'https://dev.grassrootseconomics.net/.well-known/publickeys/',
 | 
			
		||||
  cicCacheUrl: 'http://localhost:63313',
 | 
			
		||||
  web3Provider: 'ws://localhost:63546',
 | 
			
		||||
  cicCacheUrl: 'https://cache.dev.grassrootseconomics.net',
 | 
			
		||||
  web3Provider: 'wss://bloxberg-ws.dev.grassrootseconomics.net',
 | 
			
		||||
  cicUssdUrl: 'https://user.dev.grassrootseconomics.net',
 | 
			
		||||
  registryAddress: '0xea6225212005e86a4490018ded4bf37f3e772161',
 | 
			
		||||
  trustedDeclaratorAddress: '0xEb3907eCad74a0013c259D5874AE7f22DcBcC95C',
 | 
			
		||||
@ -1763,7 +1762,6 @@
 | 
			
		||||
  logLevel: NgxLoggerLevel.ERROR,
 | 
			
		||||
  serverLogLevel: NgxLoggerLevel.OFF,
 | 
			
		||||
  loggingUrl: '',
 | 
			
		||||
  cicAuthUrl: 'https://meta-auth.dev.grassrootseconomics.net',
 | 
			
		||||
  cicMetaUrl: 'https://meta.dev.grassrootseconomics.net',
 | 
			
		||||
  publicKeysUrl: 'https://dev.grassrootseconomics.net/.well-known/publickeys/',
 | 
			
		||||
  cicCacheUrl: 'https://cache.dev.grassrootseconomics.net',
 | 
			
		||||
 | 
			
		||||
@ -65,14 +65,14 @@
 | 
			
		||||
<title>cluster_AppModule</title>
 | 
			
		||||
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 1186,-268 1186,-70 8,-70"/>
 | 
			
		||||
</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">
 | 
			
		||||
<title>cluster_AppModule_providers</title>
 | 
			
		||||
<polygon fill="none" stroke="black" points="415,-78 415,-130 1178,-130 1178,-78 415,-78"/>
 | 
			
		||||
</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">
 | 
			
		||||
<title>cluster_AppModule_imports</title>
 | 
			
		||||
<polygon fill="none" stroke="black" points="146,-78 146,-130 407,-130 407,-78 146,-78"/>
 | 
			
		||||
 | 
			
		||||
@ -24,14 +24,14 @@
 | 
			
		||||
<title>cluster_AppModule</title>
 | 
			
		||||
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 1186,-268 1186,-70 8,-70"/>
 | 
			
		||||
</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">
 | 
			
		||||
<title>cluster_AppModule_providers</title>
 | 
			
		||||
<polygon fill="none" stroke="black" points="415,-78 415,-130 1178,-130 1178,-78 415,-78"/>
 | 
			
		||||
</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">
 | 
			
		||||
<title>cluster_AppModule_imports</title>
 | 
			
		||||
<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  | 
@ -65,67 +65,67 @@
 | 
			
		||||
<title>cluster_SettingsModule</title>
 | 
			
		||||
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-195 628,-195 628,-70 8,-70"/>
 | 
			
		||||
</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">
 | 
			
		||||
<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>
 | 
			
		||||
<!-- OrganizationComponent -->
 | 
			
		||||
<g id="node1" class="node">
 | 
			
		||||
<title>OrganizationComponent</title>
 | 
			
		||||
<polygon fill="#ffffb3" stroke="black" points="322.42,-122 167.58,-122 167.58,-86 322.42,-86 322.42,-122"/>
 | 
			
		||||
<text text-anchor="middle" x="245" y="-99.8" font-family="Times,serif" font-size="14.00">OrganizationComponent</text>
 | 
			
		||||
<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="535" y="-99.8" font-family="Times,serif" font-size="14.00">OrganizationComponent</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- SettingsModule -->
 | 
			
		||||
<g id="node3" class="node">
 | 
			
		||||
<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"/>
 | 
			
		||||
<text text-anchor="middle" x="320" y="-164.8" font-family="Times,serif" font-size="14.00">SettingsModule</text>
 | 
			
		||||
<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="296" y="-164.8" font-family="Times,serif" font-size="14.00">SettingsModule</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- OrganizationComponent->SettingsModule -->
 | 
			
		||||
<g id="edge1" class="edge">
 | 
			
		||||
<title>OrganizationComponent->SettingsModule</title>
 | 
			
		||||
<path fill="none" stroke="black" d="M294.94,-122.11C294.94,-122.11 294.94,-140.99 294.94,-140.99"/>
 | 
			
		||||
<polygon fill="black" stroke="black" points="291.44,-140.99 294.94,-150.99 298.44,-140.99 291.44,-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="358.45,-165.5 348.45,-169 358.45,-172.5 358.45,-165.5"/>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- SettingsComponent -->
 | 
			
		||||
<g id="node2" class="node">
 | 
			
		||||
<title>SettingsComponent</title>
 | 
			
		||||
<polygon fill="#ffffb3" stroke="black" points="150.45,-122 23.55,-122 23.55,-86 150.45,-86 150.45,-122"/>
 | 
			
		||||
<text text-anchor="middle" x="87" y="-99.8" font-family="Times,serif" font-size="14.00">SettingsComponent</text>
 | 
			
		||||
<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="377" y="-99.8" font-family="Times,serif" font-size="14.00">SettingsComponent</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- SettingsComponent->SettingsModule -->
 | 
			
		||||
<g id="edge2" class="edge">
 | 
			
		||||
<title>SettingsComponent->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"/>
 | 
			
		||||
<polygon fill="black" stroke="black" points="257.71,-172.5 267.71,-169 257.71,-165.5 257.71,-172.5"/>
 | 
			
		||||
<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="327.55,-140.99 331.05,-150.99 334.55,-140.99 327.55,-140.99"/>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- SettingsRoutingModule -->
 | 
			
		||||
<g id="node4" class="node">
 | 
			
		||||
<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"/>
 | 
			
		||||
<text text-anchor="middle" x="537" y="-99.8" font-family="Times,serif" font-size="14.00">SettingsRoutingModule</text>
 | 
			
		||||
<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="215" y="-99.8" font-family="Times,serif" font-size="14.00">SettingsRoutingModule</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- SettingsRoutingModule->SettingsModule -->
 | 
			
		||||
<g id="edge3" class="edge">
 | 
			
		||||
<title>SettingsRoutingModule->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"/>
 | 
			
		||||
<polygon fill="black" stroke="black" points="382.25,-165.5 372.25,-169 382.25,-172.5 382.25,-165.5"/>
 | 
			
		||||
<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="263.28,-140.99 266.78,-150.99 270.28,-140.99 263.28,-140.99"/>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- SharedModule -->
 | 
			
		||||
<g id="node5" class="node">
 | 
			
		||||
<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"/>
 | 
			
		||||
<text text-anchor="middle" x="395" y="-99.8" font-family="Times,serif" font-size="14.00">SharedModule</text>
 | 
			
		||||
<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="73" y="-99.8" font-family="Times,serif" font-size="14.00">SharedModule</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- SharedModule->SettingsModule -->
 | 
			
		||||
<g id="edge4" class="edge">
 | 
			
		||||
<title>SharedModule->SettingsModule</title>
 | 
			
		||||
<path fill="none" stroke="black" d="M359.06,-122.11C359.06,-122.11 359.06,-140.99 359.06,-140.99"/>
 | 
			
		||||
<polygon fill="black" stroke="black" points="355.56,-140.99 359.06,-150.99 362.56,-140.99 355.56,-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="233.72,-172.5 243.72,-169 233.72,-165.5 233.72,-172.5"/>
 | 
			
		||||
</g>
 | 
			
		||||
</g>
 | 
			
		||||
</svg>
 | 
			
		||||
 | 
			
		||||
@ -24,67 +24,67 @@
 | 
			
		||||
<title>cluster_SettingsModule</title>
 | 
			
		||||
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-195 628,-195 628,-70 8,-70"/>
 | 
			
		||||
</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">
 | 
			
		||||
<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>
 | 
			
		||||
<!-- OrganizationComponent -->
 | 
			
		||||
<g id="node1" class="node">
 | 
			
		||||
<title>OrganizationComponent</title>
 | 
			
		||||
<polygon fill="#ffffb3" stroke="black" points="322.42,-122 167.58,-122 167.58,-86 322.42,-86 322.42,-122"/>
 | 
			
		||||
<text text-anchor="middle" x="245" y="-99.8" font-family="Times,serif" font-size="14.00">OrganizationComponent</text>
 | 
			
		||||
<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="535" y="-99.8" font-family="Times,serif" font-size="14.00">OrganizationComponent</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- SettingsModule -->
 | 
			
		||||
<g id="node3" class="node">
 | 
			
		||||
<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"/>
 | 
			
		||||
<text text-anchor="middle" x="320" y="-164.8" font-family="Times,serif" font-size="14.00">SettingsModule</text>
 | 
			
		||||
<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="296" y="-164.8" font-family="Times,serif" font-size="14.00">SettingsModule</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- OrganizationComponent->SettingsModule -->
 | 
			
		||||
<g id="edge1" class="edge">
 | 
			
		||||
<title>OrganizationComponent->SettingsModule</title>
 | 
			
		||||
<path fill="none" stroke="black" d="M294.94,-122.11C294.94,-122.11 294.94,-140.99 294.94,-140.99"/>
 | 
			
		||||
<polygon fill="black" stroke="black" points="291.44,-140.99 294.94,-150.99 298.44,-140.99 291.44,-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="358.45,-165.5 348.45,-169 358.45,-172.5 358.45,-165.5"/>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- SettingsComponent -->
 | 
			
		||||
<g id="node2" class="node">
 | 
			
		||||
<title>SettingsComponent</title>
 | 
			
		||||
<polygon fill="#ffffb3" stroke="black" points="150.45,-122 23.55,-122 23.55,-86 150.45,-86 150.45,-122"/>
 | 
			
		||||
<text text-anchor="middle" x="87" y="-99.8" font-family="Times,serif" font-size="14.00">SettingsComponent</text>
 | 
			
		||||
<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="377" y="-99.8" font-family="Times,serif" font-size="14.00">SettingsComponent</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- SettingsComponent->SettingsModule -->
 | 
			
		||||
<g id="edge2" class="edge">
 | 
			
		||||
<title>SettingsComponent->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"/>
 | 
			
		||||
<polygon fill="black" stroke="black" points="257.71,-172.5 267.71,-169 257.71,-165.5 257.71,-172.5"/>
 | 
			
		||||
<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="327.55,-140.99 331.05,-150.99 334.55,-140.99 327.55,-140.99"/>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- SettingsRoutingModule -->
 | 
			
		||||
<g id="node4" class="node">
 | 
			
		||||
<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"/>
 | 
			
		||||
<text text-anchor="middle" x="537" y="-99.8" font-family="Times,serif" font-size="14.00">SettingsRoutingModule</text>
 | 
			
		||||
<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="215" y="-99.8" font-family="Times,serif" font-size="14.00">SettingsRoutingModule</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- SettingsRoutingModule->SettingsModule -->
 | 
			
		||||
<g id="edge3" class="edge">
 | 
			
		||||
<title>SettingsRoutingModule->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"/>
 | 
			
		||||
<polygon fill="black" stroke="black" points="382.25,-165.5 372.25,-169 382.25,-172.5 382.25,-165.5"/>
 | 
			
		||||
<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="263.28,-140.99 266.78,-150.99 270.28,-140.99 263.28,-140.99"/>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- SharedModule -->
 | 
			
		||||
<g id="node5" class="node">
 | 
			
		||||
<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"/>
 | 
			
		||||
<text text-anchor="middle" x="395" y="-99.8" font-family="Times,serif" font-size="14.00">SharedModule</text>
 | 
			
		||||
<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="73" y="-99.8" font-family="Times,serif" font-size="14.00">SharedModule</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- SharedModule->SettingsModule -->
 | 
			
		||||
<g id="edge4" class="edge">
 | 
			
		||||
<title>SharedModule->SettingsModule</title>
 | 
			
		||||
<path fill="none" stroke="black" d="M359.06,-122.11C359.06,-122.11 359.06,-140.99 359.06,-140.99"/>
 | 
			
		||||
<polygon fill="black" stroke="black" points="355.56,-140.99 359.06,-150.99 362.56,-140.99 355.56,-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="233.72,-172.5 243.72,-169 233.72,-165.5 233.72,-172.5"/>
 | 
			
		||||
</g>
 | 
			
		||||
</g>
 | 
			
		||||
</svg>
 | 
			
		||||
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB  | 
@ -65,14 +65,14 @@
 | 
			
		||||
<title>cluster_SharedModule</title>
 | 
			
		||||
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 1440,-268 1440,-70 8,-70"/>
 | 
			
		||||
</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">
 | 
			
		||||
<title>cluster_SharedModule_exports</title>
 | 
			
		||||
<polygon fill="none" stroke="black" points="126,-208 126,-260 1245,-260 1245,-208 126,-208"/>
 | 
			
		||||
</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 -->
 | 
			
		||||
<g id="node1" class="node">
 | 
			
		||||
<title>ErrorDialogComponent</title>
 | 
			
		||||
 | 
			
		||||
@ -24,14 +24,14 @@
 | 
			
		||||
<title>cluster_SharedModule</title>
 | 
			
		||||
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 1440,-268 1440,-70 8,-70"/>
 | 
			
		||||
</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">
 | 
			
		||||
<title>cluster_SharedModule_exports</title>
 | 
			
		||||
<polygon fill="none" stroke="black" points="126,-208 126,-260 1245,-260 1245,-208 126,-208"/>
 | 
			
		||||
</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 -->
 | 
			
		||||
<g id="node1" class="node">
 | 
			
		||||
<title>ErrorDialogComponent</title>
 | 
			
		||||
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB  | 
@ -65,83 +65,83 @@
 | 
			
		||||
<title>cluster_TransactionsModule</title>
 | 
			
		||||
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 714,-268 714,-70 8,-70"/>
 | 
			
		||||
</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">
 | 
			
		||||
<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 id="clust2" class="cluster">
 | 
			
		||||
<title>cluster_TransactionsModule_declarations</title>
 | 
			
		||||
<polygon fill="none" stroke="black" points="332,-78 332,-130 706,-130 706,-78 332,-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"/>
 | 
			
		||||
<polygon fill="none" stroke="black" points="16,-78 16,-130 390,-130 390,-78 16,-78"/>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- TransactionDetailsComponent -->
 | 
			
		||||
<g id="node1" class="node">
 | 
			
		||||
<title>TransactionDetailsComponent</title>
 | 
			
		||||
<polygon fill="#ffffb3" stroke="black" points="697.57,-122 510.43,-122 510.43,-86 697.57,-86 697.57,-122"/>
 | 
			
		||||
<text text-anchor="middle" x="604" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent</text>
 | 
			
		||||
<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="288" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- TransactionsModule -->
 | 
			
		||||
<g id="node3" class="node">
 | 
			
		||||
<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"/>
 | 
			
		||||
<text text-anchor="middle" x="341" y="-164.8" font-family="Times,serif" font-size="14.00">TransactionsModule</text>
 | 
			
		||||
<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="391" y="-164.8" font-family="Times,serif" font-size="14.00">TransactionsModule</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- TransactionDetailsComponent->TransactionsModule -->
 | 
			
		||||
<g id="edge1" class="edge">
 | 
			
		||||
<title>TransactionDetailsComponent->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"/>
 | 
			
		||||
<polygon fill="black" stroke="black" points="416.69,-165.5 406.69,-169 416.69,-172.5 416.69,-165.5"/>
 | 
			
		||||
<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="350,-140.99 353.5,-150.99 357,-140.99 350,-140.99"/>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- TransactionsComponent -->
 | 
			
		||||
<g id="node2" class="node">
 | 
			
		||||
<title>TransactionsComponent</title>
 | 
			
		||||
<polygon fill="#ffffb3" stroke="black" points="492.36,-122 339.64,-122 339.64,-86 492.36,-86 492.36,-122"/>
 | 
			
		||||
<text text-anchor="middle" x="416" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionsComponent</text>
 | 
			
		||||
<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="100" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionsComponent</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- TransactionsComponent->TransactionsModule -->
 | 
			
		||||
<g id="edge2" class="edge">
 | 
			
		||||
<title>TransactionsComponent->TransactionsModule</title>
 | 
			
		||||
<path fill="none" stroke="black" d="M373.05,-122.11C373.05,-122.11 373.05,-140.99 373.05,-140.99"/>
 | 
			
		||||
<polygon fill="black" stroke="black" points="369.55,-140.99 373.05,-150.99 376.55,-140.99 369.55,-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="315.33,-172.5 325.33,-169 315.33,-165.5 315.33,-172.5"/>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- TransactionDetailsComponent  -->
 | 
			
		||||
<g id="node6" class="node">
 | 
			
		||||
<title>TransactionDetailsComponent </title>
 | 
			
		||||
<polygon fill="#fb8072" stroke="black" points="436.07,-252 245.93,-252 245.93,-216 436.07,-216 436.07,-252"/>
 | 
			
		||||
<text text-anchor="middle" x="341" y="-229.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent </text>
 | 
			
		||||
<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="391" y="-229.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent </text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- TransactionsModule->TransactionDetailsComponent  -->
 | 
			
		||||
<g id="edge5" class="edge">
 | 
			
		||||
<title>TransactionsModule->TransactionDetailsComponent </title>
 | 
			
		||||
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M341,-187.11C341,-187.11 341,-205.99 341,-205.99"/>
 | 
			
		||||
<polygon fill="black" stroke="black" points="337.5,-205.99 341,-215.99 344.5,-205.99 337.5,-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="387.5,-205.99 391,-215.99 394.5,-205.99 387.5,-205.99"/>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- SharedModule -->
 | 
			
		||||
<g id="node4" class="node">
 | 
			
		||||
<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"/>
 | 
			
		||||
<text text-anchor="middle" x="267" y="-99.8" font-family="Times,serif" font-size="14.00">SharedModule</text>
 | 
			
		||||
<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="649" y="-99.8" font-family="Times,serif" font-size="14.00">SharedModule</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- SharedModule->TransactionsModule -->
 | 
			
		||||
<g id="edge3" class="edge">
 | 
			
		||||
<title>SharedModule->TransactionsModule</title>
 | 
			
		||||
<path fill="none" stroke="black" d="M295.84,-122.11C295.84,-122.11 295.84,-140.99 295.84,-140.99"/>
 | 
			
		||||
<polygon fill="black" stroke="black" points="292.34,-140.99 295.84,-150.99 299.34,-140.99 292.34,-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="466.77,-165.5 456.77,-169 466.77,-172.5 466.77,-165.5"/>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- TransactionsRoutingModule -->
 | 
			
		||||
<g id="node5" class="node">
 | 
			
		||||
<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"/>
 | 
			
		||||
<text text-anchor="middle" x="112" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionsRoutingModule</text>
 | 
			
		||||
<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="494" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionsRoutingModule</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- TransactionsRoutingModule->TransactionsModule -->
 | 
			
		||||
<g id="edge4" class="edge">
 | 
			
		||||
<title>TransactionsRoutingModule->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"/>
 | 
			
		||||
<polygon fill="black" stroke="black" points="265.38,-172.5 275.38,-169 265.38,-165.5 265.38,-172.5"/>
 | 
			
		||||
<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="427.72,-140.99 431.22,-150.99 434.72,-140.99 427.72,-140.99"/>
 | 
			
		||||
</g>
 | 
			
		||||
</g>
 | 
			
		||||
</svg>
 | 
			
		||||
 | 
			
		||||
@ -24,83 +24,83 @@
 | 
			
		||||
<title>cluster_TransactionsModule</title>
 | 
			
		||||
<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-70 8,-268 714,-268 714,-70 8,-70"/>
 | 
			
		||||
</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">
 | 
			
		||||
<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 id="clust2" class="cluster">
 | 
			
		||||
<title>cluster_TransactionsModule_declarations</title>
 | 
			
		||||
<polygon fill="none" stroke="black" points="332,-78 332,-130 706,-130 706,-78 332,-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"/>
 | 
			
		||||
<polygon fill="none" stroke="black" points="16,-78 16,-130 390,-130 390,-78 16,-78"/>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- TransactionDetailsComponent -->
 | 
			
		||||
<g id="node1" class="node">
 | 
			
		||||
<title>TransactionDetailsComponent</title>
 | 
			
		||||
<polygon fill="#ffffb3" stroke="black" points="697.57,-122 510.43,-122 510.43,-86 697.57,-86 697.57,-122"/>
 | 
			
		||||
<text text-anchor="middle" x="604" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent</text>
 | 
			
		||||
<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="288" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- TransactionsModule -->
 | 
			
		||||
<g id="node3" class="node">
 | 
			
		||||
<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"/>
 | 
			
		||||
<text text-anchor="middle" x="341" y="-164.8" font-family="Times,serif" font-size="14.00">TransactionsModule</text>
 | 
			
		||||
<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="391" y="-164.8" font-family="Times,serif" font-size="14.00">TransactionsModule</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- TransactionDetailsComponent->TransactionsModule -->
 | 
			
		||||
<g id="edge1" class="edge">
 | 
			
		||||
<title>TransactionDetailsComponent->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"/>
 | 
			
		||||
<polygon fill="black" stroke="black" points="416.69,-165.5 406.69,-169 416.69,-172.5 416.69,-165.5"/>
 | 
			
		||||
<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="350,-140.99 353.5,-150.99 357,-140.99 350,-140.99"/>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- TransactionsComponent -->
 | 
			
		||||
<g id="node2" class="node">
 | 
			
		||||
<title>TransactionsComponent</title>
 | 
			
		||||
<polygon fill="#ffffb3" stroke="black" points="492.36,-122 339.64,-122 339.64,-86 492.36,-86 492.36,-122"/>
 | 
			
		||||
<text text-anchor="middle" x="416" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionsComponent</text>
 | 
			
		||||
<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="100" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionsComponent</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- TransactionsComponent->TransactionsModule -->
 | 
			
		||||
<g id="edge2" class="edge">
 | 
			
		||||
<title>TransactionsComponent->TransactionsModule</title>
 | 
			
		||||
<path fill="none" stroke="black" d="M373.05,-122.11C373.05,-122.11 373.05,-140.99 373.05,-140.99"/>
 | 
			
		||||
<polygon fill="black" stroke="black" points="369.55,-140.99 373.05,-150.99 376.55,-140.99 369.55,-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="315.33,-172.5 325.33,-169 315.33,-165.5 315.33,-172.5"/>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- TransactionDetailsComponent  -->
 | 
			
		||||
<g id="node6" class="node">
 | 
			
		||||
<title>TransactionDetailsComponent </title>
 | 
			
		||||
<polygon fill="#fb8072" stroke="black" points="436.07,-252 245.93,-252 245.93,-216 436.07,-216 436.07,-252"/>
 | 
			
		||||
<text text-anchor="middle" x="341" y="-229.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent </text>
 | 
			
		||||
<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="391" y="-229.8" font-family="Times,serif" font-size="14.00">TransactionDetailsComponent </text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- TransactionsModule->TransactionDetailsComponent  -->
 | 
			
		||||
<g id="edge5" class="edge">
 | 
			
		||||
<title>TransactionsModule->TransactionDetailsComponent </title>
 | 
			
		||||
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M341,-187.11C341,-187.11 341,-205.99 341,-205.99"/>
 | 
			
		||||
<polygon fill="black" stroke="black" points="337.5,-205.99 341,-215.99 344.5,-205.99 337.5,-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="387.5,-205.99 391,-215.99 394.5,-205.99 387.5,-205.99"/>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- SharedModule -->
 | 
			
		||||
<g id="node4" class="node">
 | 
			
		||||
<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"/>
 | 
			
		||||
<text text-anchor="middle" x="267" y="-99.8" font-family="Times,serif" font-size="14.00">SharedModule</text>
 | 
			
		||||
<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="649" y="-99.8" font-family="Times,serif" font-size="14.00">SharedModule</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- SharedModule->TransactionsModule -->
 | 
			
		||||
<g id="edge3" class="edge">
 | 
			
		||||
<title>SharedModule->TransactionsModule</title>
 | 
			
		||||
<path fill="none" stroke="black" d="M295.84,-122.11C295.84,-122.11 295.84,-140.99 295.84,-140.99"/>
 | 
			
		||||
<polygon fill="black" stroke="black" points="292.34,-140.99 295.84,-150.99 299.34,-140.99 292.34,-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="466.77,-165.5 456.77,-169 466.77,-172.5 466.77,-165.5"/>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- TransactionsRoutingModule -->
 | 
			
		||||
<g id="node5" class="node">
 | 
			
		||||
<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"/>
 | 
			
		||||
<text text-anchor="middle" x="112" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionsRoutingModule</text>
 | 
			
		||||
<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="494" y="-99.8" font-family="Times,serif" font-size="14.00">TransactionsRoutingModule</text>
 | 
			
		||||
</g>
 | 
			
		||||
<!-- TransactionsRoutingModule->TransactionsModule -->
 | 
			
		||||
<g id="edge4" class="edge">
 | 
			
		||||
<title>TransactionsRoutingModule->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"/>
 | 
			
		||||
<polygon fill="black" stroke="black" points="265.38,-172.5 275.38,-169 265.38,-165.5 265.38,-172.5"/>
 | 
			
		||||
<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="427.72,-140.99 431.22,-150.99 434.72,-140.99 427.72,-140.99"/>
 | 
			
		||||
</g>
 | 
			
		||||
</g>
 | 
			
		||||
</svg>
 | 
			
		||||
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.3 KiB  | 
@ -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>
 | 
			
		||||
					<aside class="tsd-sources">
 | 
			
		||||
						<ul>
 | 
			
		||||
							<li>Defined in src/testing/user-service-stub.ts:12</li>
 | 
			
		||||
							<li>Defined in src/testing/user-service-stub.ts:72</li>
 | 
			
		||||
						</ul>
 | 
			
		||||
					</aside>
 | 
			
		||||
				</section>
 | 
			
		||||
@ -157,7 +157,7 @@
 | 
			
		||||
						<li class="tsd-description">
 | 
			
		||||
							<aside class="tsd-sources">
 | 
			
		||||
								<ul>
 | 
			
		||||
									<li>Defined in src/testing/user-service-stub.ts:71</li>
 | 
			
		||||
									<li>Defined in src/testing/user-service-stub.ts:134</li>
 | 
			
		||||
								</ul>
 | 
			
		||||
							</aside>
 | 
			
		||||
							<h4 class="tsd-parameters-title">Parameters</h4>
 | 
			
		||||
@ -180,7 +180,7 @@
 | 
			
		||||
						<li class="tsd-description">
 | 
			
		||||
							<aside class="tsd-sources">
 | 
			
		||||
								<ul>
 | 
			
		||||
									<li>Defined in src/testing/user-service-stub.ts:61</li>
 | 
			
		||||
									<li>Defined in src/testing/user-service-stub.ts:124</li>
 | 
			
		||||
								</ul>
 | 
			
		||||
							</aside>
 | 
			
		||||
							<h4 class="tsd-parameters-title">Parameters</h4>
 | 
			
		||||
@ -203,7 +203,7 @@
 | 
			
		||||
						<li class="tsd-description">
 | 
			
		||||
							<aside class="tsd-sources">
 | 
			
		||||
								<ul>
 | 
			
		||||
									<li>Defined in src/testing/user-service-stub.ts:37</li>
 | 
			
		||||
									<li>Defined in src/testing/user-service-stub.ts:103</li>
 | 
			
		||||
								</ul>
 | 
			
		||||
							</aside>
 | 
			
		||||
							<h4 class="tsd-parameters-title">Parameters</h4>
 | 
			
		||||
@ -226,7 +226,7 @@
 | 
			
		||||
						<li class="tsd-description">
 | 
			
		||||
							<aside class="tsd-sources">
 | 
			
		||||
								<ul>
 | 
			
		||||
									<li>Defined in src/testing/user-service-stub.ts:21</li>
 | 
			
		||||
									<li>Defined in src/testing/user-service-stub.ts:87</li>
 | 
			
		||||
								</ul>
 | 
			
		||||
							</aside>
 | 
			
		||||
							<h4 class="tsd-parameters-title">Parameters</h4>
 | 
			
		||||
 | 
			
		||||
@ -83,7 +83,7 @@
 | 
			
		||||
				<section class="tsd-panel tsd-member tsd-kind-variable tsd-parent-kind-module">
 | 
			
		||||
					<a name="environment" class="tsd-anchor"></a>
 | 
			
		||||
					<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">
 | 
			
		||||
						<ul>
 | 
			
		||||
							<li>Defined in src/environments/environment.dev.ts:3</li>
 | 
			
		||||
@ -95,9 +95,6 @@
 | 
			
		||||
							<li class="tsd-parameter">
 | 
			
		||||
								<h5>bloxberg<wbr>Chain<wbr>Id<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></h5>
 | 
			
		||||
							</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">
 | 
			
		||||
								<h5>cic<wbr>Cache<wbr>Url<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5>
 | 
			
		||||
							</li>
 | 
			
		||||
 | 
			
		||||
@ -83,7 +83,7 @@
 | 
			
		||||
				<section class="tsd-panel tsd-member tsd-kind-variable tsd-parent-kind-module">
 | 
			
		||||
					<a name="environment" class="tsd-anchor"></a>
 | 
			
		||||
					<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">
 | 
			
		||||
						<ul>
 | 
			
		||||
							<li>Defined in src/environments/environment.prod.ts:3</li>
 | 
			
		||||
@ -95,9 +95,6 @@
 | 
			
		||||
							<li class="tsd-parameter">
 | 
			
		||||
								<h5>bloxberg<wbr>Chain<wbr>Id<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></h5>
 | 
			
		||||
							</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">
 | 
			
		||||
								<h5>cic<wbr>Cache<wbr>Url<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5>
 | 
			
		||||
							</li>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										23332
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
							
								
								
									
										18
									
								
								package.json
									
									
									
									
									
								
							
							
						
						@ -10,8 +10,8 @@
 | 
			
		||||
    "build:prod": "ng build --prod",
 | 
			
		||||
    "start:pwa": "npm run build:prod && http-server -p 4200 dist/cic-staff-client",
 | 
			
		||||
    "test": "ng test",
 | 
			
		||||
    "format:check": "prettier --config ./.prettierrc --list-different \"src/{app,environments,assets}/**/*.{ts,js,json,css,scss}\"",
 | 
			
		||||
    "format:refactor": "prettier --config ./.prettierrc --write \"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/**/*.{ts,js,json,css,scss,html}",
 | 
			
		||||
    "format:fix": "pretty-quick --staged",
 | 
			
		||||
    "format:lint": "npm run format:refactor && npm run lint",
 | 
			
		||||
    "lint": "ng lint",
 | 
			
		||||
@ -73,7 +73,8 @@
 | 
			
		||||
    "karma-jasmine": "~4.0.0",
 | 
			
		||||
    "karma-jasmine-html-reporter": "^1.5.0",
 | 
			
		||||
    "karma-junit-reporter": "^2.0.1",
 | 
			
		||||
    "prettier": "^2.3.0",
 | 
			
		||||
    "lint-staged": "^11.0.0",
 | 
			
		||||
    "prettier": "^2.3.1",
 | 
			
		||||
    "pretty-quick": "^3.1.0",
 | 
			
		||||
    "protractor": "~7.0.0",
 | 
			
		||||
    "secp256k1": "^4.0.2",
 | 
			
		||||
@ -86,9 +87,18 @@
 | 
			
		||||
    "typescript": "~4.0.2",
 | 
			
		||||
    "yargs": "^13.3.2"
 | 
			
		||||
  },
 | 
			
		||||
  "lint-staged": {
 | 
			
		||||
    "src/**/*.{js,ts,scss,md,html,json}": [
 | 
			
		||||
      "prettier --write",
 | 
			
		||||
      "git add"
 | 
			
		||||
    ],
 | 
			
		||||
    "*.scss": [
 | 
			
		||||
      "stylelint src/**/*.scss"
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "husky": {
 | 
			
		||||
    "hooks": {
 | 
			
		||||
      "pre-commit": "pretty-quick --staged & ng lint"
 | 
			
		||||
      "pre-commit": "npx pretty-quick --staged && npm run format:lint && npx lint-staged"
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -8,20 +8,25 @@
 | 
			
		||||
            <h1 class="text-white">CICADA</h1>
 | 
			
		||||
          </a>
 | 
			
		||||
        </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">
 | 
			
		||||
            <h4 class="text-dark-50 text-center font-weight-bold">Add Private Key</h4>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <form [formGroup]="keyForm" (ngSubmit)="onSubmit()">
 | 
			
		||||
 | 
			
		||||
            <mat-form-field appearance="outline" class="full-width">
 | 
			
		||||
              <mat-label>Private Key</mat-label>
 | 
			
		||||
              <textarea matInput style="height: 30rem" formControlName="key" placeholder="Enter your private key..."
 | 
			
		||||
                        [errorStateMatcher]="matcher"></textarea>
 | 
			
		||||
              <textarea
 | 
			
		||||
                matInput
 | 
			
		||||
                style="height: 30rem"
 | 
			
		||||
                formControlName="key"
 | 
			
		||||
                placeholder="Enter your private key..."
 | 
			
		||||
                [errorStateMatcher]="matcher"
 | 
			
		||||
              ></textarea>
 | 
			
		||||
              <div *ngIf="submitted && keyFormStub.key.errors" class="invalid-feedback">
 | 
			
		||||
                <mat-error *ngIf="keyFormStub.key.errors.required">Private Key is required.</mat-error>
 | 
			
		||||
                <mat-error *ngIf="keyFormStub.key.errors.required"
 | 
			
		||||
                  >Private Key is required.</mat-error
 | 
			
		||||
                >
 | 
			
		||||
              </div>
 | 
			
		||||
            </mat-form-field>
 | 
			
		||||
 | 
			
		||||
@ -29,20 +34,24 @@
 | 
			
		||||
              <span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span>
 | 
			
		||||
              Add Key
 | 
			
		||||
            </button>
 | 
			
		||||
 | 
			
		||||
          </form>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div  id="two" style="display: none" class="card-body p-4 align-items-center">
 | 
			
		||||
 | 
			
		||||
        <div id="two" style="display: none" class="card-body p-4 align-items-center">
 | 
			
		||||
          <div class="text-center w-75 m-auto">
 | 
			
		||||
            <h4 id="state" class="text-dark-50 text-center font-weight-bold"></h4>
 | 
			
		||||
            <button mat-raised-button matRipple color="primary" type="submit" (click)="login()"> Login </button>
 | 
			
		||||
            <button mat-raised-button matRipple color="primary" type="submit" (click)="login()">
 | 
			
		||||
              Login
 | 
			
		||||
            </button>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <div class="row mt-3">
 | 
			
		||||
            <div class="col-12 text-center">
 | 
			
		||||
              <p class="text-muted">Change private key? <a (click)="switchWindows()" class="text-muted ml-1"><b>Enter private key</b></a></p>
 | 
			
		||||
            </div> <!-- end col-->
 | 
			
		||||
              <p class="text-muted">
 | 
			
		||||
                Change private key?
 | 
			
		||||
                <a (click)="switchWindows()" class="text-muted ml-1"><b>Enter private key</b></a>
 | 
			
		||||
              </p>
 | 
			
		||||
            </div>
 | 
			
		||||
            <!-- end col-->
 | 
			
		||||
          </div>
 | 
			
		||||
          <!-- end row -->
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
@ -14,30 +14,44 @@
 | 
			
		||||
        <ol class="breadcrumb">
 | 
			
		||||
          <li class="breadcrumb-item"><a routerLink="/home">Home</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>
 | 
			
		||||
      </nav>
 | 
			
		||||
      <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>
 | 
			
		||||
        </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>
 | 
			
		||||
        </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>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div *ngIf="account" class="card mb-3">
 | 
			
		||||
        <div class="row card-body">
 | 
			
		||||
          <h3>
 | 
			
		||||
            <strong> {{account?.vcard?.fn[0].value}} </strong>
 | 
			
		||||
            <strong> {{ account?.vcard?.fn[0].value }} </strong>
 | 
			
		||||
          </h3>
 | 
			
		||||
          <span class="ml-auto"><strong>Balance:</strong> {{account?.balance | tokenRatio}} {{ 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>
 | 
			
		||||
            <img src="assets/images/checklist.svg" class="ml-2" height="20rem" (click)="copyAddress()" alt="Copy">
 | 
			
		||||
          <span class="ml-auto"
 | 
			
		||||
            ><strong>Balance:</strong> {{ account?.balance | tokenRatio }}
 | 
			
		||||
            {{ 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>
 | 
			
		||||
            <img
 | 
			
		||||
              src="assets/images/checklist.svg"
 | 
			
		||||
              class="ml-2"
 | 
			
		||||
              height="20rem"
 | 
			
		||||
              (click)="copyAddress()"
 | 
			
		||||
              alt="Copy"
 | 
			
		||||
            />
 | 
			
		||||
          </span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
@ -45,85 +59,145 @@
 | 
			
		||||
        <div class="card-body">
 | 
			
		||||
          <form [formGroup]="accountInfoForm" (ngSubmit)="saveInfo()">
 | 
			
		||||
            <div class="row form-inline">
 | 
			
		||||
 | 
			
		||||
              <div class="col-md-6 col-lg-4">
 | 
			
		||||
                <mat-form-field appearance="outline">
 | 
			
		||||
                  <mat-label>First Name: *</mat-label>
 | 
			
		||||
                  <input matInput 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>
 | 
			
		||||
                  <input
 | 
			
		||||
                    matInput
 | 
			
		||||
                    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>
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
              <div class="col-md-6 col-lg-4">
 | 
			
		||||
                <mat-form-field appearance="outline">
 | 
			
		||||
                  <mat-label>Last Name(s): *</mat-label>
 | 
			
		||||
                  <input matInput 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>
 | 
			
		||||
                  <input
 | 
			
		||||
                    matInput
 | 
			
		||||
                    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>
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
              <div class="col-md-6 col-lg-4">
 | 
			
		||||
                <mat-form-field appearance="outline">
 | 
			
		||||
                  <mat-label>Phone Number: </mat-label>
 | 
			
		||||
                  <input matInput 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>
 | 
			
		||||
                  <input
 | 
			
		||||
                    matInput
 | 
			
		||||
                    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>
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
              <div class="col-md-6 col-lg-4">
 | 
			
		||||
                <mat-form-field appearance="outline">
 | 
			
		||||
                  <mat-label>Age: </mat-label>
 | 
			
		||||
                  <input matInput 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>
 | 
			
		||||
                  <input
 | 
			
		||||
                    matInput
 | 
			
		||||
                    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>
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
              <div class="col-md-6 col-lg-4">
 | 
			
		||||
                <mat-form-field appearance="outline">
 | 
			
		||||
                  <mat-label> ACCOUNT TYPE: </mat-label>
 | 
			
		||||
                  <mat-select id="accountType" [(value)]="account.type" formControlName="type"
 | 
			
		||||
                              [errorStateMatcher]="matcher">
 | 
			
		||||
                  <mat-select
 | 
			
		||||
                    id="accountType"
 | 
			
		||||
                    [(value)]="account.type"
 | 
			
		||||
                    formControlName="type"
 | 
			
		||||
                    [errorStateMatcher]="matcher"
 | 
			
		||||
                  >
 | 
			
		||||
                    <mat-option *ngFor="let accountType of accountTypes" [value]="accountType">
 | 
			
		||||
                      {{accountType | uppercase}}
 | 
			
		||||
                      {{ accountType | uppercase }}
 | 
			
		||||
                    </mat-option>
 | 
			
		||||
                  </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>
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
              <div class="col-md-6 col-lg-4">
 | 
			
		||||
                <mat-form-field appearance="outline">
 | 
			
		||||
                  <mat-label>Bio: </mat-label>
 | 
			
		||||
                  <input matInput 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>
 | 
			
		||||
                  <input
 | 
			
		||||
                    matInput
 | 
			
		||||
                    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>
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
              <div class="col-md-6 col-lg-4">
 | 
			
		||||
                <mat-form-field appearance="outline">
 | 
			
		||||
                  <mat-label> GENDER: </mat-label>
 | 
			
		||||
                  <mat-select id="gender" [(value)]="account.gender" formControlName="gender"
 | 
			
		||||
                              [errorStateMatcher]="matcher">
 | 
			
		||||
                  <mat-select
 | 
			
		||||
                    id="gender"
 | 
			
		||||
                    [(value)]="account.gender"
 | 
			
		||||
                    formControlName="gender"
 | 
			
		||||
                    [errorStateMatcher]="matcher"
 | 
			
		||||
                  >
 | 
			
		||||
                    <mat-option *ngFor="let gender of genders" [value]="gender">
 | 
			
		||||
                      {{gender | uppercase}}
 | 
			
		||||
                      {{ gender | uppercase }}
 | 
			
		||||
                    </mat-option>
 | 
			
		||||
                  </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>
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
              <div class="col-md-6 col-lg-4">
 | 
			
		||||
                <mat-form-field appearance="outline">
 | 
			
		||||
                  <mat-label> BUSINESS CATEGORY: </mat-label>
 | 
			
		||||
                  <mat-select id="businessCategory" [(value)]="account.category" formControlName="businessCategory"
 | 
			
		||||
                              [errorStateMatcher]="matcher">
 | 
			
		||||
                  <mat-select
 | 
			
		||||
                    id="businessCategory"
 | 
			
		||||
                    [(value)]="account.category"
 | 
			
		||||
                    formControlName="businessCategory"
 | 
			
		||||
                    [errorStateMatcher]="matcher"
 | 
			
		||||
                  >
 | 
			
		||||
                    <mat-option *ngFor="let category of categories" [value]="category">
 | 
			
		||||
                      {{category | titlecase}}
 | 
			
		||||
                      {{ category | titlecase }}
 | 
			
		||||
                    </mat-option>
 | 
			
		||||
                  </mat-select>
 | 
			
		||||
                  <mat-error *ngIf="submitted && accountInfoFormStub.businessCategory.errors">
 | 
			
		||||
@ -135,9 +209,15 @@
 | 
			
		||||
              <div class="col-md-6 col-lg-4">
 | 
			
		||||
                <mat-form-field appearance="outline">
 | 
			
		||||
                  <mat-label>User Location: </mat-label>
 | 
			
		||||
                  <input matInput type="text" id="userLocation" placeholder="{{account?.location.area_name}}"
 | 
			
		||||
                         value="{{account?.location.area_name}}" formControlName="userLocation"
 | 
			
		||||
                         [errorStateMatcher]="matcher">
 | 
			
		||||
                  <input
 | 
			
		||||
                    matInput
 | 
			
		||||
                    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">
 | 
			
		||||
                    User Location is required.
 | 
			
		||||
                  </mat-error>
 | 
			
		||||
@ -147,50 +227,82 @@
 | 
			
		||||
              <div class="col-md-6 col-lg-4">
 | 
			
		||||
                <mat-form-field appearance="outline">
 | 
			
		||||
                  <mat-label> LOCATION: </mat-label>
 | 
			
		||||
                  <mat-select id="location" [(value)]="account.location.area" formControlName="location"
 | 
			
		||||
                              [errorStateMatcher]="matcher">
 | 
			
		||||
                  <mat-select
 | 
			
		||||
                    id="location"
 | 
			
		||||
                    [(value)]="account.location.area"
 | 
			
		||||
                    formControlName="location"
 | 
			
		||||
                    [errorStateMatcher]="matcher"
 | 
			
		||||
                  >
 | 
			
		||||
                    <mat-option *ngFor="let area of areaNames" [value]="area">
 | 
			
		||||
                      {{area | uppercase}}
 | 
			
		||||
                      {{ area | uppercase }}
 | 
			
		||||
                    </mat-option>
 | 
			
		||||
                  </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>
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
              <div class="col-md-6 col-lg-4">
 | 
			
		||||
                <mat-form-field appearance="outline">
 | 
			
		||||
                  <mat-label> LOCATION TYPE: </mat-label>
 | 
			
		||||
                  <mat-select id="locationType" [(value)]="account.location.area_type" formControlName="locationType"
 | 
			
		||||
                              [errorStateMatcher]="matcher">
 | 
			
		||||
                  <mat-select
 | 
			
		||||
                    id="locationType"
 | 
			
		||||
                    [(value)]="account.location.area_type"
 | 
			
		||||
                    formControlName="locationType"
 | 
			
		||||
                    [errorStateMatcher]="matcher"
 | 
			
		||||
                  >
 | 
			
		||||
                    <mat-option *ngFor="let type of areaTypes" [value]="type">
 | 
			
		||||
                      {{type | uppercase}}
 | 
			
		||||
                      {{ type | uppercase }}
 | 
			
		||||
                    </mat-option>
 | 
			
		||||
                  </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>
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
              <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
 | 
			
		||||
                </button>
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
              <div class="col-md-6 col-lg-4">
 | 
			
		||||
                <button mat-raised-button color="primary" type="button" class="btn btn-outline-success mb-3"
 | 
			
		||||
                        (click)="resetPin()">
 | 
			
		||||
                <button
 | 
			
		||||
                  mat-raised-button
 | 
			
		||||
                  color="primary"
 | 
			
		||||
                  type="button"
 | 
			
		||||
                  class="btn btn-outline-success mb-3"
 | 
			
		||||
                  (click)="resetPin()"
 | 
			
		||||
                >
 | 
			
		||||
                  Reset Pin
 | 
			
		||||
                </button>
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
              <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
 | 
			
		||||
                </button>
 | 
			
		||||
              </div>
 | 
			
		||||
 | 
			
		||||
              <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
 | 
			
		||||
                </button>
 | 
			
		||||
              </div>
 | 
			
		||||
@ -200,32 +312,32 @@
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <div class="card mb-3">
 | 
			
		||||
        <mat-card-title class="card-header">
 | 
			
		||||
          USER
 | 
			
		||||
        </mat-card-title>
 | 
			
		||||
        <mat-card-title class="card-header"> USER </mat-card-title>
 | 
			
		||||
        <div class="card-body">
 | 
			
		||||
          <div class="table-responsive">
 | 
			
		||||
            <table class="table table-striped table-bordered table-hover">
 | 
			
		||||
              <caption> 1 user </caption>
 | 
			
		||||
              <caption>
 | 
			
		||||
                1 user
 | 
			
		||||
              </caption>
 | 
			
		||||
              <thead class="thead-dark">
 | 
			
		||||
              <tr>
 | 
			
		||||
                <th scope="col">NAME</th>
 | 
			
		||||
                <th scope="col">BALANCE</th>
 | 
			
		||||
                <th scope="col">CREATED</th>
 | 
			
		||||
                <th scope="col">STATUS</th>
 | 
			
		||||
              </tr>
 | 
			
		||||
                <tr>
 | 
			
		||||
                  <th scope="col">NAME</th>
 | 
			
		||||
                  <th scope="col">BALANCE</th>
 | 
			
		||||
                  <th scope="col">CREATED</th>
 | 
			
		||||
                  <th scope="col">STATUS</th>
 | 
			
		||||
                </tr>
 | 
			
		||||
              </thead>
 | 
			
		||||
              <tbody>
 | 
			
		||||
              <tr>
 | 
			
		||||
                <td>{{account?.vcard?.fn[0].value}}</td>
 | 
			
		||||
                <td>{{account?.balance | tokenRatio}} {{ tokenSymbol | uppercase }}</td>
 | 
			
		||||
                <td>{{account?.date_registered | unixDate}}</td>
 | 
			
		||||
                <td>
 | 
			
		||||
                  <span class="badge badge-success badge-pill">
 | 
			
		||||
                    {{accountStatus}}
 | 
			
		||||
                  </span>
 | 
			
		||||
                </td>
 | 
			
		||||
              </tr>
 | 
			
		||||
                <tr>
 | 
			
		||||
                  <td>{{ account?.vcard?.fn[0].value }}</td>
 | 
			
		||||
                  <td>{{ account?.balance | tokenRatio }} {{ tokenSymbol | uppercase }}</td>
 | 
			
		||||
                  <td>{{ account?.date_registered | unixDate }}</td>
 | 
			
		||||
                  <td>
 | 
			
		||||
                    <span class="badge badge-success badge-pill">
 | 
			
		||||
                      {{ accountStatus }}
 | 
			
		||||
                    </span>
 | 
			
		||||
                  </td>
 | 
			
		||||
                </tr>
 | 
			
		||||
              </tbody>
 | 
			
		||||
            </table>
 | 
			
		||||
          </div>
 | 
			
		||||
@ -234,135 +346,216 @@
 | 
			
		||||
 | 
			
		||||
      <mat-tab-group *ngIf="account" dynamicHeight mat-align-tabs="start">
 | 
			
		||||
        <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-header">
 | 
			
		||||
              <div class="row">
 | 
			
		||||
                <mat-form-field appearance="outline">
 | 
			
		||||
                  <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 *ngFor="let transactionType of transactionsTypes" [value]="transactionType">
 | 
			
		||||
                      {{transactionType | uppercase}}
 | 
			
		||||
                    <mat-option
 | 
			
		||||
                      *ngFor="let transactionType of transactionsTypes"
 | 
			
		||||
                      [value]="transactionType"
 | 
			
		||||
                    >
 | 
			
		||||
                      {{ transactionType | uppercase }}
 | 
			
		||||
                    </mat-option>
 | 
			
		||||
                  </mat-select>
 | 
			
		||||
                </mat-form-field>
 | 
			
		||||
                <button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto mr-2" (click)="downloadCsv(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 class="card-body">
 | 
			
		||||
              <mat-form-field appearance="outline">
 | 
			
		||||
                <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-form-field>
 | 
			
		||||
 | 
			
		||||
              <table mat-table class="mat-elevation-z10" [dataSource]="transactionsDataSource" matSort matSortActive="created"
 | 
			
		||||
                         #TransactionTableSort="matSort" matSortDirection="asc" matSortDisableClear>
 | 
			
		||||
 | 
			
		||||
              <table
 | 
			
		||||
                mat-table
 | 
			
		||||
                class="mat-elevation-z10"
 | 
			
		||||
                [dataSource]="transactionsDataSource"
 | 
			
		||||
                matSort
 | 
			
		||||
                matSortActive="created"
 | 
			
		||||
                #TransactionTableSort="matSort"
 | 
			
		||||
                matSortDirection="asc"
 | 
			
		||||
                matSortDisableClear
 | 
			
		||||
              >
 | 
			
		||||
                <ng-container matColumnDef="sender">
 | 
			
		||||
                  <th mat-header-cell *matHeaderCellDef mat-sort-header> Sender </th>
 | 
			
		||||
                  <td mat-cell *matCellDef="let transaction"> {{transaction?.sender?.vcard.fn[0].value || transaction.from}} </td>
 | 
			
		||||
                  <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>
 | 
			
		||||
                </ng-container>
 | 
			
		||||
 | 
			
		||||
                <ng-container matColumnDef="recipient">
 | 
			
		||||
                  <th mat-header-cell *matHeaderCellDef mat-sort-header> Recipient </th>
 | 
			
		||||
                  <td mat-cell *matCellDef="let transaction"> {{transaction?.recipient?.vcard.fn[0].value || transaction.to}} </td>
 | 
			
		||||
                  <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>
 | 
			
		||||
                </ng-container>
 | 
			
		||||
 | 
			
		||||
                <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">
 | 
			
		||||
                    <span *ngIf="transaction.type == 'transaction'">{{transaction?.value | tokenRatio}} {{ tokenSymbol | uppercase }}</span>
 | 
			
		||||
                    <span *ngIf="transaction.type == 'conversion'">{{transaction?.toValue | tokenRatio}} {{ tokenSymbol | uppercase }}</span>
 | 
			
		||||
                    <span *ngIf="transaction.type == 'transaction'"
 | 
			
		||||
                      >{{ transaction?.value | tokenRatio }} {{ tokenSymbol | uppercase }}</span
 | 
			
		||||
                    >
 | 
			
		||||
                    <span *ngIf="transaction.type == 'conversion'"
 | 
			
		||||
                      >{{ transaction?.toValue | tokenRatio }} {{ tokenSymbol | uppercase }}</span
 | 
			
		||||
                    >
 | 
			
		||||
                  </td>
 | 
			
		||||
                </ng-container>
 | 
			
		||||
 | 
			
		||||
                <ng-container matColumnDef="created">
 | 
			
		||||
                  <th mat-header-cell *matHeaderCellDef mat-sort-header> Created </th>
 | 
			
		||||
                  <td mat-cell *matCellDef="let transaction"> {{transaction?.tx.timestamp | unixDate}} </td>
 | 
			
		||||
                  <th mat-header-cell *matHeaderCellDef mat-sort-header>Created</th>
 | 
			
		||||
                  <td mat-cell *matCellDef="let transaction">
 | 
			
		||||
                    {{ transaction?.tx.timestamp | unixDate }}
 | 
			
		||||
                  </td>
 | 
			
		||||
                </ng-container>
 | 
			
		||||
 | 
			
		||||
                <ng-container matColumnDef="type">
 | 
			
		||||
                  <th mat-header-cell *matHeaderCellDef mat-sort-header> TYPE </th>
 | 
			
		||||
                  <th mat-header-cell *matHeaderCellDef mat-sort-header>TYPE</th>
 | 
			
		||||
                  <td mat-cell *matCellDef="let transaction">
 | 
			
		||||
                    <span class="badge badge-success badge-pill"> {{transaction?.type}} </span>
 | 
			
		||||
                    <span class="badge badge-success badge-pill"> {{ transaction?.type }} </span>
 | 
			
		||||
                  </td>
 | 
			
		||||
                </ng-container>
 | 
			
		||||
 | 
			
		||||
                <tr mat-header-row *matHeaderRowDef="transactionsDisplayedColumns"></tr>
 | 
			
		||||
                <tr mat-row *matRowDef="let transaction; columns: transactionsDisplayedColumns" matRipple
 | 
			
		||||
                         (click)="viewTransaction(transaction)"></tr>
 | 
			
		||||
                <tr
 | 
			
		||||
                  mat-row
 | 
			
		||||
                  *matRowDef="let transaction; columns: transactionsDisplayedColumns"
 | 
			
		||||
                  matRipple
 | 
			
		||||
                  (click)="viewTransaction(transaction)"
 | 
			
		||||
                ></tr>
 | 
			
		||||
              </table>
 | 
			
		||||
 | 
			
		||||
              <mat-paginator #TransactionTablePaginator="matPaginator" [pageSize]="transactionsDefaultPageSize"
 | 
			
		||||
                             [pageSizeOptions]="transactionsPageSizeOptions" showFirstLastButtons></mat-paginator>
 | 
			
		||||
 | 
			
		||||
              <mat-paginator
 | 
			
		||||
                #TransactionTablePaginator="matPaginator"
 | 
			
		||||
                [pageSize]="transactionsDefaultPageSize"
 | 
			
		||||
                [pageSizeOptions]="transactionsPageSizeOptions"
 | 
			
		||||
                showFirstLastButtons
 | 
			
		||||
              ></mat-paginator>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </mat-tab>
 | 
			
		||||
 | 
			
		||||
        <mat-tab label="Users">
 | 
			
		||||
          <div class="card mt-1">
 | 
			
		||||
            <mat-card-title class="card-header">
 | 
			
		||||
              Accounts
 | 
			
		||||
            </mat-card-title>
 | 
			
		||||
            <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-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}}
 | 
			
		||||
                      {{ 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" (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>
 | 
			
		||||
 | 
			
		||||
              <mat-form-field appearance="outline">
 | 
			
		||||
                <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-form-field>
 | 
			
		||||
 | 
			
		||||
              <mat-table class="mat-elevation-z10" [dataSource]="userDataSource" matSort #UserTableSort="matSort"
 | 
			
		||||
                         matSortActive="created" matSortDirection="desc" matSortDisableClear>
 | 
			
		||||
 | 
			
		||||
              <mat-table
 | 
			
		||||
                class="mat-elevation-z10"
 | 
			
		||||
                [dataSource]="userDataSource"
 | 
			
		||||
                matSort
 | 
			
		||||
                #UserTableSort="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>
 | 
			
		||||
                  <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>
 | 
			
		||||
                  <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>
 | 
			
		||||
                  <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}} {{tokenSymbol | uppercase}} </mat-cell>
 | 
			
		||||
                  <mat-cell *matCellDef="let user">
 | 
			
		||||
                    {{ user?.balance | tokenRatio }} {{ tokenSymbol | uppercase }}
 | 
			
		||||
                  </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>
 | 
			
		||||
                  <mat-cell *matCellDef="let user"> {{ user?.location.area_name }} </mat-cell>
 | 
			
		||||
                </ng-container>
 | 
			
		||||
 | 
			
		||||
                <mat-header-row *matHeaderRowDef=userDisplayedColumns></mat-header-row>
 | 
			
		||||
                <mat-row *matRowDef="let account; columns: userDisplayedColumns" (click)="viewAccount(account)"
 | 
			
		||||
                         matRipple></mat-row>
 | 
			
		||||
                <mat-header-row *matHeaderRowDef="userDisplayedColumns"></mat-header-row>
 | 
			
		||||
                <mat-row
 | 
			
		||||
                  *matRowDef="let account; columns: userDisplayedColumns"
 | 
			
		||||
                  (click)="viewAccount(account)"
 | 
			
		||||
                  matRipple
 | 
			
		||||
                ></mat-row>
 | 
			
		||||
              </mat-table>
 | 
			
		||||
 | 
			
		||||
              <mat-paginator #UserTablePaginator="matPaginator" [pageSize]="usersDefaultPageSize"
 | 
			
		||||
                             [pageSizeOptions]="usersPageSizeOptions" showFirstLastButtons></mat-paginator>
 | 
			
		||||
              <mat-paginator
 | 
			
		||||
                #UserTablePaginator="matPaginator"
 | 
			
		||||
                [pageSize]="usersDefaultPageSize"
 | 
			
		||||
                [pageSizeOptions]="usersPageSizeOptions"
 | 
			
		||||
                showFirstLastButtons
 | 
			
		||||
              ></mat-paginator>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </mat-tab>
 | 
			
		||||
 | 
			
		||||
@ -18,33 +18,61 @@
 | 
			
		||||
        </ol>
 | 
			
		||||
      </nav>
 | 
			
		||||
      <div class="card">
 | 
			
		||||
        <mat-card-title class="card-header">
 | 
			
		||||
          Accounts
 | 
			
		||||
        </mat-card-title>
 | 
			
		||||
        <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>
 | 
			
		||||
                  <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>
 | 
			
		||||
                <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>
 | 
			
		||||
                  <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>
 | 
			
		||||
                <button
 | 
			
		||||
                  mat-raised-button
 | 
			
		||||
                  color="primary"
 | 
			
		||||
                  type="submit"
 | 
			
		||||
                  class="btn btn-outline-primary ml-3"
 | 
			
		||||
                >
 | 
			
		||||
                  SEARCH
 | 
			
		||||
                </button>
 | 
			
		||||
              </form>
 | 
			
		||||
            </mat-tab>
 | 
			
		||||
          </mat-tab-group>
 | 
			
		||||
 | 
			
		||||
@ -17,63 +17,99 @@
 | 
			
		||||
        </ol>
 | 
			
		||||
      </nav>
 | 
			
		||||
      <div class="card">
 | 
			
		||||
        <mat-card-title class="card-header">
 | 
			
		||||
          Accounts
 | 
			
		||||
        </mat-card-title>
 | 
			
		||||
        <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-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}}
 | 
			
		||||
                  {{ 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>
 | 
			
		||||
            <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">
 | 
			
		||||
            <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>
 | 
			
		||||
 | 
			
		||||
          <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>
 | 
			
		||||
              <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>
 | 
			
		||||
              <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>
 | 
			
		||||
              <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>
 | 
			
		||||
              <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>
 | 
			
		||||
              <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-row
 | 
			
		||||
              *matRowDef="let account; columns: displayedColumns"
 | 
			
		||||
              (click)="viewAccount(account)"
 | 
			
		||||
              matRipple
 | 
			
		||||
            ></mat-row>
 | 
			
		||||
          </mat-table>
 | 
			
		||||
 | 
			
		||||
          <mat-paginator [pageSize]="defaultPageSize" [pageSizeOptions]="pageSizeOptions" showFirstLastButtons></mat-paginator>
 | 
			
		||||
          <mat-paginator
 | 
			
		||||
            [pageSize]="defaultPageSize"
 | 
			
		||||
            [pageSizeOptions]="pageSizeOptions"
 | 
			
		||||
            showFirstLastButtons
 | 
			
		||||
          ></mat-paginator>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
@ -18,61 +18,110 @@
 | 
			
		||||
        </ol>
 | 
			
		||||
      </nav>
 | 
			
		||||
      <div class="card">
 | 
			
		||||
        <mat-card-title class="card-header text-center">
 | 
			
		||||
          CREATE A USER ACCOUNT
 | 
			
		||||
        </mat-card-title>
 | 
			
		||||
        <mat-card-title class="card-header text-center"> CREATE A USER ACCOUNT </mat-card-title>
 | 
			
		||||
        <div class="card-body">
 | 
			
		||||
          <form class="row form-inline" [formGroup]="createForm" (ngSubmit)="onSubmit()">
 | 
			
		||||
            <div class="col-md-6 col-lg-4">
 | 
			
		||||
              <mat-form-field appearance="outline">
 | 
			
		||||
                <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">
 | 
			
		||||
                    {{accountType | uppercase}}
 | 
			
		||||
                    {{ accountType | uppercase }}
 | 
			
		||||
                  </mat-option>
 | 
			
		||||
                </mat-select>
 | 
			
		||||
                <mat-error *ngIf="submitted && createFormStub.accountType.errors">Account type is required.</mat-error>
 | 
			
		||||
              </mat-form-field><br>
 | 
			
		||||
                <mat-error *ngIf="submitted && createFormStub.accountType.errors"
 | 
			
		||||
                  >Account type is required.</mat-error
 | 
			
		||||
                > </mat-form-field
 | 
			
		||||
              ><br />
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <div class="col-md-6 col-lg-4">
 | 
			
		||||
              <mat-form-field appearance="outline">
 | 
			
		||||
                <mat-label>ID Number: </mat-label>
 | 
			
		||||
                <input 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>
 | 
			
		||||
                <input
 | 
			
		||||
                  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>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <div class="col-md-6 col-lg-4">
 | 
			
		||||
              <mat-form-field appearance="outline">
 | 
			
		||||
                <mat-label>Phone Number: </mat-label>
 | 
			
		||||
                <input matInput 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>
 | 
			
		||||
                <input
 | 
			
		||||
                  matInput
 | 
			
		||||
                  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 class="col-md-6 col-lg-4">
 | 
			
		||||
              <mat-form-field appearance="outline">
 | 
			
		||||
                <mat-label>Given Name(s):* </mat-label>
 | 
			
		||||
                <input matInput 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>
 | 
			
		||||
                <input
 | 
			
		||||
                  matInput
 | 
			
		||||
                  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 class="col-md-6 col-lg-4">
 | 
			
		||||
              <mat-form-field appearance="outline">
 | 
			
		||||
                <mat-label>Family/Surname: </mat-label>
 | 
			
		||||
                <input matInput 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>
 | 
			
		||||
                <input
 | 
			
		||||
                  matInput
 | 
			
		||||
                  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 class="col-md-6 col-lg-4">
 | 
			
		||||
              <mat-form-field appearance="outline">
 | 
			
		||||
                <mat-label>Directory Entry: </mat-label>
 | 
			
		||||
                <input matInput 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>
 | 
			
		||||
                <input
 | 
			
		||||
                  matInput
 | 
			
		||||
                  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 class="col-md-6 col-lg-4">
 | 
			
		||||
@ -80,11 +129,13 @@
 | 
			
		||||
                <mat-label>Location: </mat-label>
 | 
			
		||||
                <mat-select id="location" formControlName="location" [errorStateMatcher]="matcher">
 | 
			
		||||
                  <mat-option *ngFor="let area of areaNames" [value]="area">
 | 
			
		||||
                    {{area | uppercase}}
 | 
			
		||||
                    {{ area | uppercase }}
 | 
			
		||||
                  </mat-option>
 | 
			
		||||
                </mat-select>
 | 
			
		||||
                <mat-error *ngIf="submitted && createFormStub.location.errors">Location is required.</mat-error>
 | 
			
		||||
              </mat-form-field><br>
 | 
			
		||||
                <mat-error *ngIf="submitted && createFormStub.location.errors"
 | 
			
		||||
                  >Location is required.</mat-error
 | 
			
		||||
                > </mat-form-field
 | 
			
		||||
              ><br />
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <div class="col-md-6 col-lg-4">
 | 
			
		||||
@ -92,34 +143,59 @@
 | 
			
		||||
                <mat-label>Gender: </mat-label>
 | 
			
		||||
                <mat-select id="gender" formControlName="gender" [errorStateMatcher]="matcher">
 | 
			
		||||
                  <mat-option *ngFor="let gender of genders" [value]="gender">
 | 
			
		||||
                    {{gender | uppercase}}
 | 
			
		||||
                    {{ gender | uppercase }}
 | 
			
		||||
                  </mat-option>
 | 
			
		||||
                </mat-select>
 | 
			
		||||
                <mat-error *ngIf="submitted && createFormStub.gender.errors">Gender is required.</mat-error>
 | 
			
		||||
              </mat-form-field><br>
 | 
			
		||||
                <mat-error *ngIf="submitted && createFormStub.gender.errors"
 | 
			
		||||
                  >Gender is required.</mat-error
 | 
			
		||||
                > </mat-form-field
 | 
			
		||||
              ><br />
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <div class="col-md-6 col-lg-4">
 | 
			
		||||
              <mat-form-field appearance="outline">
 | 
			
		||||
                <mat-label>Referrer Phone Number: </mat-label>
 | 
			
		||||
                <input matInput 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>
 | 
			
		||||
                <input
 | 
			
		||||
                  matInput
 | 
			
		||||
                  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 class="col-md-6 col-lg-4">
 | 
			
		||||
              <mat-form-field appearance="outline">
 | 
			
		||||
                <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">
 | 
			
		||||
                    {{category | titlecase}}
 | 
			
		||||
                    {{ category | titlecase }}
 | 
			
		||||
                  </mat-option>
 | 
			
		||||
                </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>
 | 
			
		||||
            </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>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@ -20,19 +20,30 @@
 | 
			
		||||
        <mat-card-title class="card-header">
 | 
			
		||||
          <div class="row">
 | 
			
		||||
            Actions
 | 
			
		||||
            <button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto mr-2" (click)="downloadCsv()"> EXPORT </button>
 | 
			
		||||
            <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">
 | 
			
		||||
            <input
 | 
			
		||||
              matInput
 | 
			
		||||
              type="text"
 | 
			
		||||
              (keyup)="doFilter($event.target.value)"
 | 
			
		||||
              placeholder="Filter"
 | 
			
		||||
            />
 | 
			
		||||
            <mat-icon matSuffix>search</mat-icon>
 | 
			
		||||
          </mat-form-field>
 | 
			
		||||
 | 
			
		||||
          <mat-table class="mat-elevation-z10" [dataSource]="dataSource" multiTemplateDataRows>
 | 
			
		||||
 | 
			
		||||
            <!-- Expand Column -->
 | 
			
		||||
            <ng-container matColumnDef="expand">
 | 
			
		||||
              <mat-header-cell *matHeaderCellDef> Expand </mat-header-cell>
 | 
			
		||||
@ -44,32 +55,52 @@
 | 
			
		||||
 | 
			
		||||
            <ng-container matColumnDef="user">
 | 
			
		||||
              <mat-header-cell *matHeaderCellDef> NAME </mat-header-cell>
 | 
			
		||||
              <mat-cell *matCellDef="let action"> {{action.user}} </mat-cell>
 | 
			
		||||
              <mat-cell *matCellDef="let action"> {{ action.user }} </mat-cell>
 | 
			
		||||
            </ng-container>
 | 
			
		||||
 | 
			
		||||
            <ng-container matColumnDef="role">
 | 
			
		||||
              <mat-header-cell *matHeaderCellDef> ROLE </mat-header-cell>
 | 
			
		||||
              <mat-cell *matCellDef="let action"> {{action.role}} </mat-cell>
 | 
			
		||||
              <mat-cell *matCellDef="let action"> {{ action.role }} </mat-cell>
 | 
			
		||||
            </ng-container>
 | 
			
		||||
 | 
			
		||||
            <ng-container matColumnDef="action">
 | 
			
		||||
              <mat-header-cell *matHeaderCellDef> ACTION </mat-header-cell>
 | 
			
		||||
              <mat-cell *matCellDef="let action"> {{action.action}} </mat-cell>
 | 
			
		||||
              <mat-cell *matCellDef="let action"> {{ action.action }} </mat-cell>
 | 
			
		||||
            </ng-container>
 | 
			
		||||
 | 
			
		||||
            <ng-container matColumnDef="status">
 | 
			
		||||
              <mat-header-cell *matHeaderCellDef> STATUS </mat-header-cell>
 | 
			
		||||
              <mat-cell *matCellDef="let action">
 | 
			
		||||
                <span *ngIf="action.approval == true" class="badge badge-success badge-pill"> {{approvalStatus(action.approval)}} </span>
 | 
			
		||||
                <span *ngIf="action.approval == false" class="badge badge-danger badge-pill"> {{approvalStatus(action.approval)}} </span>
 | 
			
		||||
                <span *ngIf="action.approval == true" class="badge badge-success badge-pill">
 | 
			
		||||
                  {{ approvalStatus(action.approval) }}
 | 
			
		||||
                </span>
 | 
			
		||||
                <span *ngIf="action.approval == false" class="badge badge-danger badge-pill">
 | 
			
		||||
                  {{ approvalStatus(action.approval) }}
 | 
			
		||||
                </span>
 | 
			
		||||
              </mat-cell>
 | 
			
		||||
            </ng-container>
 | 
			
		||||
 | 
			
		||||
            <ng-container matColumnDef="approve">
 | 
			
		||||
              <mat-header-cell *matHeaderCellDef> APPROVE </mat-header-cell>
 | 
			
		||||
              <mat-cell *matCellDef="let action">
 | 
			
		||||
                <button mat-raised-button color="primary" *ngIf="!action.approval" class="btn btn-outline-success" (click)="approveAction(action)"> Approve </button>
 | 
			
		||||
                <button mat-raised-button color="warn" *ngIf="action.approval" class="btn btn-outline-danger" (click)="disapproveAction(action)"> Disapprove </button>
 | 
			
		||||
                <button
 | 
			
		||||
                  mat-raised-button
 | 
			
		||||
                  color="primary"
 | 
			
		||||
                  *ngIf="!action.approval"
 | 
			
		||||
                  class="btn btn-outline-success"
 | 
			
		||||
                  (click)="approveAction(action)"
 | 
			
		||||
                >
 | 
			
		||||
                  Approve
 | 
			
		||||
                </button>
 | 
			
		||||
                <button
 | 
			
		||||
                  mat-raised-button
 | 
			
		||||
                  color="warn"
 | 
			
		||||
                  *ngIf="action.approval"
 | 
			
		||||
                  class="btn btn-outline-danger"
 | 
			
		||||
                  (click)="disapproveAction(action)"
 | 
			
		||||
                >
 | 
			
		||||
                  Disapprove
 | 
			
		||||
                </button>
 | 
			
		||||
              </mat-cell>
 | 
			
		||||
            </ng-container>
 | 
			
		||||
 | 
			
		||||
@ -77,22 +108,37 @@
 | 
			
		||||
            <ng-container matColumnDef="expandedDetail">
 | 
			
		||||
              <mat-cell *matCellDef="let action">
 | 
			
		||||
                <div>
 | 
			
		||||
                  <span><strong>Staff Name:</strong> {{action.user}}</span><br>
 | 
			
		||||
                  <span><strong>Role:</strong> {{action.role}}</span><br>
 | 
			
		||||
                  <span><strong>Action Details:</strong> {{action.action}}</span><br>
 | 
			
		||||
                  <span><strong>Approval Status:</strong> {{action.approval}}</span><br>
 | 
			
		||||
                  <span><strong>Staff Name:</strong> {{ action.user }}</span
 | 
			
		||||
                  ><br />
 | 
			
		||||
                  <span><strong>Role:</strong> {{ action.role }}</span
 | 
			
		||||
                  ><br />
 | 
			
		||||
                  <span><strong>Action Details:</strong> {{ action.action }}</span
 | 
			
		||||
                  ><br />
 | 
			
		||||
                  <span><strong>Approval Status:</strong> {{ action.approval }}</span
 | 
			
		||||
                  ><br />
 | 
			
		||||
                </div>
 | 
			
		||||
              </mat-cell>
 | 
			
		||||
            </ng-container>
 | 
			
		||||
 | 
			
		||||
            <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
 | 
			
		||||
            <mat-row *matRowDef="let row; columns: displayedColumns;" matRipple class="element-row"
 | 
			
		||||
                     [class.expanded]="row.isExpanded"></mat-row>
 | 
			
		||||
            <mat-row *matRowDef="let row; columns: ['expandedDetail'];"
 | 
			
		||||
                     [@detailExpand]="row.isExpanded == true ? 'expanded': 'collapsed'" style="overflow: hidden"></mat-row>
 | 
			
		||||
            <mat-row
 | 
			
		||||
              *matRowDef="let row; columns: displayedColumns"
 | 
			
		||||
              matRipple
 | 
			
		||||
              class="element-row"
 | 
			
		||||
              [class.expanded]="row.isExpanded"
 | 
			
		||||
            ></mat-row>
 | 
			
		||||
            <mat-row
 | 
			
		||||
              *matRowDef="let row; columns: ['expandedDetail']"
 | 
			
		||||
              [@detailExpand]="row.isExpanded == true ? 'expanded' : 'collapsed'"
 | 
			
		||||
              style="overflow: hidden"
 | 
			
		||||
            ></mat-row>
 | 
			
		||||
          </mat-table>
 | 
			
		||||
 | 
			
		||||
          <mat-paginator [pageSize]="10" [pageSizeOptions]="[10, 20, 50, 100]" showFirstLastButtons></mat-paginator>
 | 
			
		||||
          <mat-paginator
 | 
			
		||||
            [pageSize]="10"
 | 
			
		||||
            [pageSizeOptions]="[10, 20, 50, 100]"
 | 
			
		||||
            showFirstLastButtons
 | 
			
		||||
          ></mat-paginator>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
@ -102,4 +148,3 @@
 | 
			
		||||
  <!-- End Page content -->
 | 
			
		||||
  <!-- ============================================================== -->
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -16,10 +16,16 @@
 | 
			
		||||
        </ol>
 | 
			
		||||
      </nav>
 | 
			
		||||
      <div class="embed-responsive embed-responsive-16by9">
 | 
			
		||||
        <iframe class="embed-responsive-item" [src]="url | safe" allow="fullscreen" loading="lazy"
 | 
			
		||||
                title="Community inclusion currencies dashboard" referrerpolicy="no-referrer">
 | 
			
		||||
        <iframe
 | 
			
		||||
          class="embed-responsive-item"
 | 
			
		||||
          [src]="url | safe"
 | 
			
		||||
          allow="fullscreen"
 | 
			
		||||
          loading="lazy"
 | 
			
		||||
          title="Community inclusion currencies dashboard"
 | 
			
		||||
          referrerpolicy="no-referrer"
 | 
			
		||||
        >
 | 
			
		||||
          <p>
 | 
			
		||||
            <a href="{{url}}"> Your browser does not support iframes. </a>
 | 
			
		||||
            <a href="{{ url }}"> Your browser does not support iframes. </a>
 | 
			
		||||
          </p>
 | 
			
		||||
        </iframe>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@ -26,19 +26,31 @@
 | 
			
		||||
            <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">
 | 
			
		||||
                <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>
 | 
			
		||||
                <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-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>
 | 
			
		||||
@ -47,9 +59,11 @@
 | 
			
		||||
                </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>
 | 
			
		||||
                </mat-error> </mat-form-field
 | 
			
		||||
              ><br />
 | 
			
		||||
              <button mat-raised-button color="primary" type="submit" class="btn btn-primary">
 | 
			
		||||
                Submit
 | 
			
		||||
              </button>
 | 
			
		||||
            </form>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
@ -19,16 +19,14 @@
 | 
			
		||||
      <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>
 | 
			
		||||
            <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>UserId: </strong> {{ userInfo?.userid }} </span><br />
 | 
			
		||||
              <span><strong>Username: </strong> {{ userInfo?.name }} </span><br />
 | 
			
		||||
              <span><strong>Email: </strong> {{ userInfo?.email }} </span>
 | 
			
		||||
            </div>
 | 
			
		||||
            <hr>
 | 
			
		||||
            <hr />
 | 
			
		||||
            <div class="card-body">
 | 
			
		||||
              <h4>Organization Settings</h4>
 | 
			
		||||
              <a routerLink="/settings/organization"><i>Update your organization settings</i></a>
 | 
			
		||||
@ -37,21 +35,27 @@
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="col-md-6 mb-2">
 | 
			
		||||
          <div class="card">
 | 
			
		||||
            <mat-card-title class="card-header text-center">
 | 
			
		||||
              ACCOUNT MANAGEMENT
 | 
			
		||||
            </mat-card-title>
 | 
			
		||||
            <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>
 | 
			
		||||
            <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>
 | 
			
		||||
            <hr />
 | 
			
		||||
            <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>
 | 
			
		||||
@ -60,39 +64,60 @@
 | 
			
		||||
            <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>
 | 
			
		||||
                <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">
 | 
			
		||||
                <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>
 | 
			
		||||
 | 
			
		||||
              <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>
 | 
			
		||||
                  <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>
 | 
			
		||||
                  <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>
 | 
			
		||||
                  <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>
 | 
			
		||||
 | 
			
		||||
              <mat-paginator
 | 
			
		||||
                [pageSize]="5"
 | 
			
		||||
                [pageSizeOptions]="[5, 10, 20, 50, 100]"
 | 
			
		||||
                showFirstLastButtons
 | 
			
		||||
              ></mat-paginator>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
@ -3,32 +3,43 @@
 | 
			
		||||
    <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>
 | 
			
		||||
        <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>
 | 
			
		||||
        <span><strong>Name:</strong> {{ token?.name }}</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div>
 | 
			
		||||
        <span><strong>Symbol:</strong> {{token?.symbol}}</span>
 | 
			
		||||
        <span><strong>Symbol:</strong> {{ token?.symbol }}</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div>
 | 
			
		||||
        <span><strong>Address:</strong> {{token?.address}}</span>
 | 
			
		||||
        <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>
 | 
			
		||||
        <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>
 | 
			
		||||
        <span><strong>Supply:</strong> {{ token?.supply | tokenRatio }}</span>
 | 
			
		||||
      </div>
 | 
			
		||||
      <br />
 | 
			
		||||
      <div>
 | 
			
		||||
        <h2>Reserve</h2>
 | 
			
		||||
        <div>
 | 
			
		||||
          <span><strong>Weight:</strong> {{token?.reserveRatio}}</span>
 | 
			
		||||
          <span><strong>Weight:</strong> {{ token?.reserveRatio }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div>
 | 
			
		||||
          <span><strong>Owner:</strong> {{token?.owner}}</span>
 | 
			
		||||
          <span><strong>Owner:</strong> {{ token?.owner }}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
@ -20,45 +20,71 @@
 | 
			
		||||
        <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>
 | 
			
		||||
            <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">
 | 
			
		||||
            <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>
 | 
			
		||||
          <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>
 | 
			
		||||
              <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>
 | 
			
		||||
              <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>
 | 
			
		||||
              <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>
 | 
			
		||||
              <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-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>
 | 
			
		||||
          <mat-paginator
 | 
			
		||||
            [pageSize]="5"
 | 
			
		||||
            [pageSizeOptions]="[5, 10, 25, 100]"
 | 
			
		||||
            showFirstLastButtons
 | 
			
		||||
          ></mat-paginator>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
@ -68,4 +94,3 @@
 | 
			
		||||
  <!-- End Page content -->
 | 
			
		||||
  <!-- ============================================================== -->
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -3,43 +3,86 @@
 | 
			
		||||
    <mat-card-title class="card-header">
 | 
			
		||||
      <div class="row">
 | 
			
		||||
        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>
 | 
			
		||||
    </mat-card-title>
 | 
			
		||||
    <div *ngIf="transaction.type == 'transaction'" class="card-body">
 | 
			
		||||
      <div class="row">
 | 
			
		||||
        <div class="col-md-6">
 | 
			
		||||
          <h4>Exchange: </h4>
 | 
			
		||||
          <h4>Exchange:</h4>
 | 
			
		||||
          <ul class="list-group list-group-flush">
 | 
			
		||||
            <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>
 | 
			
		||||
                Sender Address:
 | 
			
		||||
                <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">
 | 
			
		||||
              </span><br><br>
 | 
			
		||||
              <button mat-raised-button color="primary" class="btn btn-outline-info" (click)="viewSender()">View Sender</button>
 | 
			
		||||
                <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"
 | 
			
		||||
                /> </span
 | 
			
		||||
              ><br /><br />
 | 
			
		||||
              <button
 | 
			
		||||
                mat-raised-button
 | 
			
		||||
                color="primary"
 | 
			
		||||
                class="btn btn-outline-info"
 | 
			
		||||
                (click)="viewSender()"
 | 
			
		||||
              >
 | 
			
		||||
                View Sender
 | 
			
		||||
              </button>
 | 
			
		||||
            </li>
 | 
			
		||||
            <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>
 | 
			
		||||
                Recipient Address:
 | 
			
		||||
                <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">
 | 
			
		||||
              </span><br><br>
 | 
			
		||||
              <button mat-raised-button color="primary" class="btn btn-outline-info" (click)="viewRecipient()">View Recipient</button>
 | 
			
		||||
                <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"
 | 
			
		||||
                /> </span
 | 
			
		||||
              ><br /><br />
 | 
			
		||||
              <button
 | 
			
		||||
                mat-raised-button
 | 
			
		||||
                color="primary"
 | 
			
		||||
                class="btn btn-outline-info"
 | 
			
		||||
                (click)="viewRecipient()"
 | 
			
		||||
              >
 | 
			
		||||
                View Recipient
 | 
			
		||||
              </button>
 | 
			
		||||
            </li>
 | 
			
		||||
            <li class="list-group-item">
 | 
			
		||||
              <span>Amount: {{transaction.value | tokenRatio}} {{ tokenSymbol | uppercase }}</span>
 | 
			
		||||
              <span
 | 
			
		||||
                >Amount: {{ transaction.value | tokenRatio }} {{ tokenSymbol | uppercase }}</span
 | 
			
		||||
              >
 | 
			
		||||
            </li>
 | 
			
		||||
          </ul>
 | 
			
		||||
          <h4 class="mt-2">Token: </h4>
 | 
			
		||||
          <h4 class="mt-2">Token:</h4>
 | 
			
		||||
          <ul class="list-group list-group-flush">
 | 
			
		||||
            <li class="list-group-item">
 | 
			
		||||
              <span>
 | 
			
		||||
                Address:
 | 
			
		||||
                {{transaction.token._address}}
 | 
			
		||||
                <img src="assets/images/checklist.svg" class="ml-2" height="20rem" (click)="copyAddress(transaction.token._address)" alt="Copy">
 | 
			
		||||
                {{ transaction.token._address }}
 | 
			
		||||
                <img
 | 
			
		||||
                  src="assets/images/checklist.svg"
 | 
			
		||||
                  class="ml-2"
 | 
			
		||||
                  height="20rem"
 | 
			
		||||
                  (click)="copyAddress(transaction.token._address)"
 | 
			
		||||
                  alt="Copy"
 | 
			
		||||
                />
 | 
			
		||||
              </span>
 | 
			
		||||
            </li>
 | 
			
		||||
            <li class="list-group-item">
 | 
			
		||||
@ -51,97 +94,140 @@
 | 
			
		||||
          </ul>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="col-md-6">
 | 
			
		||||
          <h4>Transaction: </h4>
 | 
			
		||||
          <h4>Transaction:</h4>
 | 
			
		||||
          <ul class="list-group list-group-flush">
 | 
			
		||||
            <li class="list-group-item">
 | 
			
		||||
              <span>Block: {{transaction.tx.block}}</span>
 | 
			
		||||
              <span>Block: {{ transaction.tx.block }}</span>
 | 
			
		||||
            </li>
 | 
			
		||||
            <li class="list-group-item">
 | 
			
		||||
              <span>Index: {{transaction.tx.txIndex}}</span>
 | 
			
		||||
              <span>Index: {{ transaction.tx.txIndex }}</span>
 | 
			
		||||
            </li>
 | 
			
		||||
            <li class="list-group-item">
 | 
			
		||||
              <span>Hash: {{transaction.tx.txHash}}</span>
 | 
			
		||||
              <span>Hash: {{ transaction.tx.txHash }}</span>
 | 
			
		||||
            </li>
 | 
			
		||||
            <li class="list-group-item">
 | 
			
		||||
              <span>Success: {{transaction.tx.success}}</span>
 | 
			
		||||
              <span>Success: {{ transaction.tx.success }}</span>
 | 
			
		||||
            </li>
 | 
			
		||||
            <li class="list-group-item">
 | 
			
		||||
              <span>Timestamp: {{transaction.tx.timestamp | unixDate}}</span>
 | 
			
		||||
              <span>Timestamp: {{ transaction.tx.timestamp | unixDate }}</span>
 | 
			
		||||
            </li>
 | 
			
		||||
          </ul><br>
 | 
			
		||||
          </ul>
 | 
			
		||||
          <br />
 | 
			
		||||
          <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>
 | 
			
		||||
            <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 *ngIf="transaction.type == 'conversion'" class="card-body">
 | 
			
		||||
      <h3>Exchange: </h3>
 | 
			
		||||
      <h3>Exchange:</h3>
 | 
			
		||||
      <ul class="list-group list-group-flush">
 | 
			
		||||
        <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 class="list-group-item">
 | 
			
		||||
          <span>
 | 
			
		||||
            Trader Address:
 | 
			
		||||
            <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">
 | 
			
		||||
            <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"
 | 
			
		||||
            />
 | 
			
		||||
          </span>
 | 
			
		||||
        </li>
 | 
			
		||||
      </ul>
 | 
			
		||||
      <button mat-raised-button color="primary" class="btn btn-outline-info" (click)="viewTrader()">View Trader</button>
 | 
			
		||||
      <br><br>
 | 
			
		||||
      <button mat-raised-button color="primary" class="btn btn-outline-info" (click)="viewTrader()">
 | 
			
		||||
        View Trader
 | 
			
		||||
      </button>
 | 
			
		||||
      <br /><br />
 | 
			
		||||
      <div class="row">
 | 
			
		||||
        <div class="col-md-6">
 | 
			
		||||
          <h4>Source Token: </h4>
 | 
			
		||||
          <h4>Source Token:</h4>
 | 
			
		||||
          <ul class="list-group list-group-flush">
 | 
			
		||||
            <li class="list-group-item">
 | 
			
		||||
              <span>
 | 
			
		||||
                Address:
 | 
			
		||||
                {{transaction.sourceToken.address}}
 | 
			
		||||
                <img src="assets/images/checklist.svg" class="ml-2" height="20rem" (click)="copyAddress(transaction.sourceToken.address)" alt="Copy">
 | 
			
		||||
                {{ transaction.sourceToken.address }}
 | 
			
		||||
                <img
 | 
			
		||||
                  src="assets/images/checklist.svg"
 | 
			
		||||
                  class="ml-2"
 | 
			
		||||
                  height="20rem"
 | 
			
		||||
                  (click)="copyAddress(transaction.sourceToken.address)"
 | 
			
		||||
                  alt="Copy"
 | 
			
		||||
                />
 | 
			
		||||
              </span>
 | 
			
		||||
            </li>
 | 
			
		||||
            <li class="list-group-item">
 | 
			
		||||
              <span>Name: {{transaction.sourceToken.name}}</span>
 | 
			
		||||
              <span>Name: {{ transaction.sourceToken.name }}</span>
 | 
			
		||||
            </li>
 | 
			
		||||
            <li class="list-group-item">
 | 
			
		||||
              <span>Symbol: {{transaction.sourceToken.symbol | uppercase}}</span>
 | 
			
		||||
              <span>Symbol: {{ transaction.sourceToken.symbol | uppercase }}</span>
 | 
			
		||||
            </li>
 | 
			
		||||
            <li class="list-group-item">
 | 
			
		||||
              <span>Amount: {{transaction.fromValue}} {{transaction.sourceToken.symbol | uppercase}}</span>
 | 
			
		||||
              <span
 | 
			
		||||
                >Amount: {{ transaction.fromValue }}
 | 
			
		||||
                {{ transaction.sourceToken.symbol | uppercase }}</span
 | 
			
		||||
              >
 | 
			
		||||
            </li>
 | 
			
		||||
          </ul>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="col-md-6">
 | 
			
		||||
          <h4>Destination Token: </h4>
 | 
			
		||||
          <h4>Destination Token:</h4>
 | 
			
		||||
          <ul class="list-group list-group-flush">
 | 
			
		||||
            <li class="list-group-item">
 | 
			
		||||
              <span>
 | 
			
		||||
                Address:
 | 
			
		||||
                {{transaction.destinationToken.address}}
 | 
			
		||||
                <img src="assets/images/checklist.svg" class="ml-2" height="20rem" (click)="copyAddress(transaction.destinationToken.address)" alt="Copy">
 | 
			
		||||
                {{ transaction.destinationToken.address }}
 | 
			
		||||
                <img
 | 
			
		||||
                  src="assets/images/checklist.svg"
 | 
			
		||||
                  class="ml-2"
 | 
			
		||||
                  height="20rem"
 | 
			
		||||
                  (click)="copyAddress(transaction.destinationToken.address)"
 | 
			
		||||
                  alt="Copy"
 | 
			
		||||
                />
 | 
			
		||||
              </span>
 | 
			
		||||
            </li>
 | 
			
		||||
            <li class="list-group-item">
 | 
			
		||||
              <span>Name: {{transaction.destinationToken.name}}</span>
 | 
			
		||||
              <span>Name: {{ transaction.destinationToken.name }}</span>
 | 
			
		||||
            </li>
 | 
			
		||||
            <li class="list-group-item">
 | 
			
		||||
              <span>Symbol: {{transaction.destinationToken.symbol | uppercase}}</span>
 | 
			
		||||
              <span>Symbol: {{ transaction.destinationToken.symbol | uppercase }}</span>
 | 
			
		||||
            </li>
 | 
			
		||||
            <li class="list-group-item">
 | 
			
		||||
              <span>Amount: {{transaction.toValue}} {{transaction.destinationToken.symbol | uppercase}}</span>
 | 
			
		||||
              <span
 | 
			
		||||
                >Amount: {{ transaction.toValue }}
 | 
			
		||||
                {{ transaction.destinationToken.symbol | uppercase }}</span
 | 
			
		||||
              >
 | 
			
		||||
            </li>
 | 
			
		||||
          </ul>
 | 
			
		||||
        </div>
 | 
			
		||||
        <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 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>
 | 
			
		||||
 | 
			
		||||
@ -17,71 +17,114 @@
 | 
			
		||||
        </ol>
 | 
			
		||||
      </nav>
 | 
			
		||||
      <div class="card">
 | 
			
		||||
        <mat-card-title class="card-header">
 | 
			
		||||
          Transfers
 | 
			
		||||
        </mat-card-title>
 | 
			
		||||
        <mat-card-title class="card-header"> Transfers </mat-card-title>
 | 
			
		||||
        <div class="card-body">
 | 
			
		||||
 | 
			
		||||
          <app-transaction-details [transaction]="transaction" (closeWindow)="transaction = $event"></app-transaction-details>
 | 
			
		||||
          <app-transaction-details
 | 
			
		||||
            [transaction]="transaction"
 | 
			
		||||
            (closeWindow)="transaction = $event"
 | 
			
		||||
          ></app-transaction-details>
 | 
			
		||||
 | 
			
		||||
          <div class="row card-header">
 | 
			
		||||
            <mat-form-field appearance="outline">
 | 
			
		||||
              <mat-label> TRANSFER TYPE </mat-label>
 | 
			
		||||
              <mat-select id="typeSelect" [(value)]="transactionsType" (selectionChange)="filterTransactions()">
 | 
			
		||||
              <mat-select
 | 
			
		||||
                id="typeSelect"
 | 
			
		||||
                [(value)]="transactionsType"
 | 
			
		||||
                (selectionChange)="filterTransactions()"
 | 
			
		||||
              >
 | 
			
		||||
                <mat-option value="all">ALL TRANSFERS</mat-option>
 | 
			
		||||
                <mat-option *ngFor="let transactionType of transactionsTypes" [value]="transactionType">
 | 
			
		||||
                  {{transactionType | uppercase}}
 | 
			
		||||
                <mat-option
 | 
			
		||||
                  *ngFor="let transactionType of transactionsTypes"
 | 
			
		||||
                  [value]="transactionType"
 | 
			
		||||
                >
 | 
			
		||||
                  {{ transactionType | uppercase }}
 | 
			
		||||
                </mat-option>
 | 
			
		||||
              </mat-select>
 | 
			
		||||
            </mat-form-field>
 | 
			
		||||
            <button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto mr-2" (click)="downloadCsv()"> EXPORT </button>
 | 
			
		||||
            <button
 | 
			
		||||
              mat-raised-button
 | 
			
		||||
              color="primary"
 | 
			
		||||
              type="button"
 | 
			
		||||
              class="btn btn-outline-primary ml-auto mr-2"
 | 
			
		||||
              (click)="downloadCsv()"
 | 
			
		||||
            >
 | 
			
		||||
              EXPORT
 | 
			
		||||
            </button>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <mat-form-field appearance="outline">
 | 
			
		||||
            <mat-label> Filter </mat-label>
 | 
			
		||||
            <input matInput type="text" (keyup)="doFilter($event.target.value, transactionDataSource)" placeholder="Filter">
 | 
			
		||||
            <input
 | 
			
		||||
              matInput
 | 
			
		||||
              type="text"
 | 
			
		||||
              (keyup)="doFilter($event.target.value, transactionDataSource)"
 | 
			
		||||
              placeholder="Filter"
 | 
			
		||||
            />
 | 
			
		||||
            <mat-icon matSuffix>search</mat-icon>
 | 
			
		||||
          </mat-form-field>
 | 
			
		||||
 | 
			
		||||
          <table mat-table class="mat-elevation-z10" [dataSource]="transactionDataSource" matSort matSortActive="created"
 | 
			
		||||
                     matSortDirection="desc" matSortDisableClear>
 | 
			
		||||
 | 
			
		||||
          <table
 | 
			
		||||
            mat-table
 | 
			
		||||
            class="mat-elevation-z10"
 | 
			
		||||
            [dataSource]="transactionDataSource"
 | 
			
		||||
            matSort
 | 
			
		||||
            matSortActive="created"
 | 
			
		||||
            matSortDirection="desc"
 | 
			
		||||
            matSortDisableClear
 | 
			
		||||
          >
 | 
			
		||||
            <ng-container matColumnDef="sender">
 | 
			
		||||
              <th mat-header-cell *matHeaderCellDef mat-sort-header> Sender </th>
 | 
			
		||||
              <td mat-cell *matCellDef="let transaction"> {{transaction?.sender?.vcard.fn[0].value || transaction.from}} </td>
 | 
			
		||||
              <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>
 | 
			
		||||
            </ng-container>
 | 
			
		||||
 | 
			
		||||
            <ng-container matColumnDef="recipient">
 | 
			
		||||
              <th mat-header-cell *matHeaderCellDef mat-sort-header> Recipient </th>
 | 
			
		||||
              <td mat-cell *matCellDef="let transaction"> {{transaction?.recipient?.vcard.fn[0].value || transaction.to}} </td>
 | 
			
		||||
              <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>
 | 
			
		||||
            </ng-container>
 | 
			
		||||
 | 
			
		||||
            <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">
 | 
			
		||||
                <span *ngIf="transaction.type == 'transaction'">{{transaction?.value | tokenRatio}} {{ tokenSymbol | uppercase }}</span>
 | 
			
		||||
                <span *ngIf="transaction.type == 'conversion'">{{transaction?.toValue | tokenRatio}} {{ tokenSymbol | uppercase }}</span>
 | 
			
		||||
                <span *ngIf="transaction.type == 'transaction'"
 | 
			
		||||
                  >{{ transaction?.value | tokenRatio }} {{ tokenSymbol | uppercase }}</span
 | 
			
		||||
                >
 | 
			
		||||
                <span *ngIf="transaction.type == 'conversion'"
 | 
			
		||||
                  >{{ transaction?.toValue | tokenRatio }} {{ tokenSymbol | uppercase }}</span
 | 
			
		||||
                >
 | 
			
		||||
              </td>
 | 
			
		||||
            </ng-container>
 | 
			
		||||
 | 
			
		||||
            <ng-container matColumnDef="created">
 | 
			
		||||
              <th mat-header-cell *matHeaderCellDef mat-sort-header> Created </th>
 | 
			
		||||
              <td mat-cell *matCellDef="let transaction"> {{transaction?.tx.timestamp | unixDate}} </td>
 | 
			
		||||
              <th mat-header-cell *matHeaderCellDef mat-sort-header>Created</th>
 | 
			
		||||
              <td mat-cell *matCellDef="let transaction">
 | 
			
		||||
                {{ transaction?.tx.timestamp | unixDate }}
 | 
			
		||||
              </td>
 | 
			
		||||
            </ng-container>
 | 
			
		||||
 | 
			
		||||
            <ng-container matColumnDef="type">
 | 
			
		||||
              <th mat-header-cell *matHeaderCellDef mat-sort-header> TYPE </th>
 | 
			
		||||
              <th mat-header-cell *matHeaderCellDef mat-sort-header>TYPE</th>
 | 
			
		||||
              <td mat-cell *matCellDef="let transaction">
 | 
			
		||||
                <span class="badge badge-success badge-pill"> {{transaction?.type}} </span>
 | 
			
		||||
                <span class="badge badge-success badge-pill"> {{ transaction?.type }} </span>
 | 
			
		||||
              </td>
 | 
			
		||||
            </ng-container>
 | 
			
		||||
 | 
			
		||||
            <tr mat-header-row *matHeaderRowDef="transactionDisplayedColumns"></tr>
 | 
			
		||||
            <tr mat-row *matRowDef="let transaction; columns: transactionDisplayedColumns;" (click)="viewTransaction(transaction)"></tr>
 | 
			
		||||
            <tr
 | 
			
		||||
              mat-row
 | 
			
		||||
              *matRowDef="let transaction; columns: transactionDisplayedColumns"
 | 
			
		||||
              (click)="viewTransaction(transaction)"
 | 
			
		||||
            ></tr>
 | 
			
		||||
          </table>
 | 
			
		||||
 | 
			
		||||
          <mat-paginator [pageSize]="defaultPageSize" [pageSizeOptions]="pageSizeOptions" showFirstLastButtons></mat-paginator>
 | 
			
		||||
 | 
			
		||||
          <mat-paginator
 | 
			
		||||
            [pageSize]="defaultPageSize"
 | 
			
		||||
            [pageSizeOptions]="pageSizeOptions"
 | 
			
		||||
            showFirstLastButtons
 | 
			
		||||
          ></mat-paginator>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
@ -91,5 +134,3 @@
 | 
			
		||||
  <!-- End Page content -->
 | 
			
		||||
  <!-- ============================================================== -->
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,6 @@
 | 
			
		||||
<div>
 | 
			
		||||
  <div>
 | 
			
		||||
    <p>
 | 
			
		||||
      Message: {{ data.message }}
 | 
			
		||||
    </p>
 | 
			
		||||
    <p *ngIf="data.status">
 | 
			
		||||
      Status: {{ data?.status }}
 | 
			
		||||
    </p>
 | 
			
		||||
    <p>Message: {{ data.message }}</p>
 | 
			
		||||
    <p *ngIf="data.status">Status: {{ data?.status }}</p>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,10 @@
 | 
			
		||||
<!-- Footer Start -->
 | 
			
		||||
<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 }}
 | 
			
		||||
  <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>
 | 
			
		||||
<!-- end Footer -->
 | 
			
		||||
 | 
			
		||||
@ -1,13 +1,13 @@
 | 
			
		||||
<nav class="navbar navbar-dark background-dark">
 | 
			
		||||
  <h1 class="navbar-brand">
 | 
			
		||||
    <div *ngIf="noInternetConnection; then offlineBlock else onlineBlock"></div>
 | 
			
		||||
    <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">
 | 
			
		||||
      <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">
 | 
			
		||||
      <strong style="color: lawngreen">ONLINE </strong>
 | 
			
		||||
      <img width="20rem" src="assets/images/wifi.svg" alt="Internet Connected" />
 | 
			
		||||
    </ng-template>
 | 
			
		||||
  </h1>
 | 
			
		||||
</nav>
 | 
			
		||||
 | 
			
		||||
@ -2,10 +2,9 @@
 | 
			
		||||
<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">
 | 
			
		||||
        <img class="full-width" src="assets/images/CIC-Logo-white.png" alt="CIC Admin Dashboard" />
 | 
			
		||||
      </h3>
 | 
			
		||||
      <strong>CICADA</strong>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,13 @@
 | 
			
		||||
<!-- Topbar Start -->
 | 
			
		||||
<nav class="navbar navbar-expand-lg navbar-light bg-light sticky-top">
 | 
			
		||||
  <div class="container-fluid">
 | 
			
		||||
    <button type="button" id="sidebarCollapse" class="navbar-btn menutoggle" aria-label="Sidebar toggle" appMenuToggle>
 | 
			
		||||
    <button
 | 
			
		||||
      type="button"
 | 
			
		||||
      id="sidebarCollapse"
 | 
			
		||||
      class="navbar-btn menutoggle"
 | 
			
		||||
      aria-label="Sidebar toggle"
 | 
			
		||||
      appMenuToggle
 | 
			
		||||
    >
 | 
			
		||||
      <span></span>
 | 
			
		||||
      <span></span>
 | 
			
		||||
      <span></span>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										235
									
								
								src/index.html
									
									
									
									
									
								
							
							
						
						@ -1,52 +1,187 @@
 | 
			
		||||
<!doctype html>
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
  <meta charset="utf-8">
 | 
			
		||||
  <title>CICADA</title>
 | 
			
		||||
  <base href="/">
 | 
			
		||||
  <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="Spencer Ofwiti" name="author"/>
 | 
			
		||||
  <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">
 | 
			
		||||
  <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 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)">
 | 
			
		||||
  <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)">
 | 
			
		||||
  <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)">
 | 
			
		||||
  <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 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&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>
 | 
			
		||||
<body class="mat-typography">
 | 
			
		||||
  <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 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>
 | 
			
		||||
  <head>
 | 
			
		||||
    <meta charset="utf-8" />
 | 
			
		||||
    <title>CICADA</title>
 | 
			
		||||
    <base href="/" />
 | 
			
		||||
    <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="Spencer Ofwiti" name="author" />
 | 
			
		||||
    <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" />
 | 
			
		||||
    <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
 | 
			
		||||
      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)"
 | 
			
		||||
    />
 | 
			
		||||
    <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)"
 | 
			
		||||
    />
 | 
			
		||||
    <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)"
 | 
			
		||||
    />
 | 
			
		||||
    <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
 | 
			
		||||
      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&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>
 | 
			
		||||
  <body class="mat-typography">
 | 
			
		||||
    <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
 | 
			
		||||
      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>
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
@ -8,5 +8,6 @@ if (environment.production) {
 | 
			
		||||
  enableProdMode();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
platformBrowserDynamic().bootstrapModule(AppModule)
 | 
			
		||||
  .catch(err => console.error(err));
 | 
			
		||||
platformBrowserDynamic()
 | 
			
		||||
  .bootstrapModule(AppModule)
 | 
			
		||||
  .catch((err) => console.error(err));
 | 
			
		||||
 | 
			
		||||
@ -55,8 +55,7 @@
 | 
			
		||||
/***************************************************************************************************
 | 
			
		||||
 * Zone JS is required by default for Angular itself.
 | 
			
		||||
 */
 | 
			
		||||
import 'zone.js/dist/zone';  // Included with Angular CLI.
 | 
			
		||||
 | 
			
		||||
import 'zone.js/dist/zone'; // Included with Angular CLI.
 | 
			
		||||
 | 
			
		||||
/***************************************************************************************************
 | 
			
		||||
 * APPLICATION IMPORTS
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										116
									
								
								src/styles.scss
									
									
									
									
									
								
							
							
						
						@ -6,11 +6,13 @@
 | 
			
		||||
  /* Visual */
 | 
			
		||||
  /* Misc */
 | 
			
		||||
}
 | 
			
		||||
@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 '~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';
 | 
			
		||||
 | 
			
		||||
html,
 | 
			
		||||
body { height: 100%; }
 | 
			
		||||
body {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
body {
 | 
			
		||||
  margin: 0;
 | 
			
		||||
@ -35,7 +37,7 @@ a:hover,
 | 
			
		||||
a:focus {
 | 
			
		||||
  text-decoration: none;
 | 
			
		||||
  color: inherit;
 | 
			
		||||
  transition: all .3s;
 | 
			
		||||
  transition: all 0.3s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.wrapper {
 | 
			
		||||
@ -50,15 +52,19 @@ a:focus {
 | 
			
		||||
 | 
			
		||||
ul ul a {
 | 
			
		||||
  padding-left: 30px;
 | 
			
		||||
  font-size: .9em;
 | 
			
		||||
  font-size: 0.9em;
 | 
			
		||||
  background: #6d7fcc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.full-width,
 | 
			
		||||
table { width: 100%; }
 | 
			
		||||
table {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
li.breadcrumb-item.active,
 | 
			
		||||
footer.footer { color: black; }
 | 
			
		||||
footer.footer {
 | 
			
		||||
  color: black;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.clipboard {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
@ -91,9 +97,13 @@ footer.footer { color: black; }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#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 {
 | 
			
		||||
  display: block;
 | 
			
		||||
@ -104,11 +114,13 @@ footer.footer { color: black; }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#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 {
 | 
			
		||||
  padding: 20px 10px;
 | 
			
		||||
  font-size: .85em;
 | 
			
		||||
  font-size: 0.85em;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -119,7 +131,9 @@ footer.footer { color: black; }
 | 
			
		||||
  font-size: 1.8em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#sidebar.active ul li a { padding: 10px; }
 | 
			
		||||
#sidebar.active ul li a {
 | 
			
		||||
  padding: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#sidebar.active .dropdown-toggle::after {
 | 
			
		||||
  top: auto;
 | 
			
		||||
@ -146,12 +160,14 @@ footer.footer { color: black; }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#sidebar ul li.active > a,
 | 
			
		||||
a[aria-expanded="true"] {
 | 
			
		||||
a[aria-expanded='true'] {
 | 
			
		||||
  color: #fff;
 | 
			
		||||
  background: #313a46;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
a[data-toggle="collapse"] { position: relative; }
 | 
			
		||||
a[data-toggle='collapse'] {
 | 
			
		||||
  position: relative;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dropdown-toggle::after {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
@ -170,7 +186,9 @@ a[data-toggle="collapse"] { position: relative; }
 | 
			
		||||
#sidebar,
 | 
			
		||||
#sidebar.active,
 | 
			
		||||
#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 {
 | 
			
		||||
  width: 40px;
 | 
			
		||||
@ -184,14 +202,20 @@ a[data-toggle="collapse"] { position: relative; }
 | 
			
		||||
  height: 2px;
 | 
			
		||||
  margin: 0 auto;
 | 
			
		||||
  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 {
 | 
			
		||||
  margin: 5px auto;
 | 
			
		||||
@ -205,11 +229,17 @@ a[data-toggle="collapse"] { position: relative; }
 | 
			
		||||
  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 {
 | 
			
		||||
  word-wrap: break-word;
 | 
			
		||||
@ -246,14 +276,18 @@ button { height: 2.5rem; }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #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 ul li a i { display: block; }
 | 
			
		||||
  #sidebar.active ul li a i {
 | 
			
		||||
    display: block;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #sidebar.active ul li a {
 | 
			
		||||
    padding: 20px 10px;
 | 
			
		||||
    font-size: .85em;
 | 
			
		||||
    font-size: 0.85em;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #sidebar.active ul li a i {
 | 
			
		||||
@ -262,7 +296,9 @@ button { height: 2.5rem; }
 | 
			
		||||
    font-size: 1.8em;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #sidebar.active ul ul a { padding: 10px; }
 | 
			
		||||
  #sidebar.active ul ul a {
 | 
			
		||||
    padding: 10px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .dropdown-toggle::after {
 | 
			
		||||
    top: auto;
 | 
			
		||||
@ -279,15 +315,21 @@ button { height: 2.5rem; }
 | 
			
		||||
    height: 100vh;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #content .menutoggle { margin-left: 250px; }
 | 
			
		||||
  #content .menutoggle {
 | 
			
		||||
    margin-left: 250px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #sidebar,
 | 
			
		||||
  #content,
 | 
			
		||||
  #content.active,
 | 
			
		||||
  #content.active .menutoggle { margin-left: 0; }
 | 
			
		||||
  #content.active .menutoggle {
 | 
			
		||||
    margin-left: 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #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:nth-of-type(2),
 | 
			
		||||
@ -297,11 +339,19 @@ button { height: 2.5rem; }
 | 
			
		||||
    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:first-of-type {
 | 
			
		||||
    transform: rotate(45deg) translate(2px, 2px);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #sidebarCollapse.active span:nth-of-type(2) { opacity: 0; }
 | 
			
		||||
  #sidebarCollapse.active span:nth-of-type(2) {
 | 
			
		||||
    opacity: 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #sidebarCollapse.active span:last-of-type { transform: rotate(-45deg) translate(1px, -1px); }
 | 
			
		||||
  #sidebarCollapse.active span:last-of-type {
 | 
			
		||||
    transform: rotate(-45deg) translate(1px, -1px);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										13
									
								
								src/test.ts
									
									
									
									
									
								
							
							
						
						@ -4,21 +4,22 @@ import 'zone.js/dist/zone-testing';
 | 
			
		||||
import { getTestBed } from '@angular/core/testing';
 | 
			
		||||
import {
 | 
			
		||||
  BrowserDynamicTestingModule,
 | 
			
		||||
  platformBrowserDynamicTesting
 | 
			
		||||
  platformBrowserDynamicTesting,
 | 
			
		||||
} from '@angular/platform-browser-dynamic/testing';
 | 
			
		||||
 | 
			
		||||
declare const require: {
 | 
			
		||||
  context(path: string, deep?: boolean, filter?: RegExp): {
 | 
			
		||||
  context(
 | 
			
		||||
    path: string,
 | 
			
		||||
    deep?: boolean,
 | 
			
		||||
    filter?: RegExp
 | 
			
		||||
  ): {
 | 
			
		||||
    keys(): string[];
 | 
			
		||||
    <T>(id: string): T;
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// First, initialize the Angular testing environment.
 | 
			
		||||
getTestBed().initTestEnvironment(
 | 
			
		||||
  BrowserDynamicTestingModule,
 | 
			
		||||
  platformBrowserDynamicTesting()
 | 
			
		||||
);
 | 
			
		||||
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
 | 
			
		||||
// Then we find all the tests.
 | 
			
		||||
const context = require.context('./', true, /\.spec\.ts$/);
 | 
			
		||||
// And load the modules.
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
import {Directive, HostListener, Input} from '@angular/core';
 | 
			
		||||
import { Directive, HostListener, Input } from '@angular/core';
 | 
			
		||||
 | 
			
		||||
@Directive({
 | 
			
		||||
  selector: '[appRouterLink]'
 | 
			
		||||
  selector: '[appRouterLink]',
 | 
			
		||||
})
 | 
			
		||||
// tslint:disable-next-line:directive-class-suffix
 | 
			
		||||
export class RouterLinkDirectiveStub {
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,10 @@
 | 
			
		||||
import {Component} from '@angular/core';
 | 
			
		||||
import { Component } from '@angular/core';
 | 
			
		||||
 | 
			
		||||
@Component({selector: 'app-sidebar', template: ''})
 | 
			
		||||
@Component({ selector: 'app-sidebar', template: '' })
 | 
			
		||||
export class SidebarStubComponent {}
 | 
			
		||||
 | 
			
		||||
@Component({selector: 'app-topbar', template: ''})
 | 
			
		||||
@Component({ selector: 'app-topbar', template: '' })
 | 
			
		||||
export class TopbarStubComponent {}
 | 
			
		||||
 | 
			
		||||
@Component({selector: 'app-footer', template: ''})
 | 
			
		||||
@Component({ selector: 'app-footer', template: '' })
 | 
			
		||||
export class FooterStubComponent {}
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@ export class TokenServiceStub {
 | 
			
		||||
  getBySymbol(symbol: string): any {
 | 
			
		||||
    return {
 | 
			
		||||
      name: 'Reserve',
 | 
			
		||||
      symbol: 'RSV'
 | 
			
		||||
      symbol: 'RSV',
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
import {Observable, of} from 'rxjs';
 | 
			
		||||
import { Observable, of } from 'rxjs';
 | 
			
		||||
 | 
			
		||||
export class TransactionServiceStub {
 | 
			
		||||
  setTransaction(transaction: any, cacheSize: number): void {}
 | 
			
		||||
 | 
			
		||||
@ -1,12 +1,72 @@
 | 
			
		||||
import {Observable, of} from 'rxjs';
 | 
			
		||||
import { Observable, of } from 'rxjs';
 | 
			
		||||
 | 
			
		||||
export class UserServiceStub {
 | 
			
		||||
  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: 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'},
 | 
			
		||||
    {
 | 
			
		||||
      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: 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 = [
 | 
			
		||||
@ -15,7 +75,13 @@ export class UserServiceStub {
 | 
			
		||||
    { 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: 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 {
 | 
			
		||||
@ -30,7 +96,7 @@ export class UserServiceStub {
 | 
			
		||||
      failedPinAttempts: 1,
 | 
			
		||||
      status: 'approved',
 | 
			
		||||
      bio: 'Bodaboda',
 | 
			
		||||
      gender: 'male'
 | 
			
		||||
      gender: 'male',
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -41,20 +107,17 @@ export class UserServiceStub {
 | 
			
		||||
      key: {
 | 
			
		||||
        ethereum: [
 | 
			
		||||
          '0x51d3c8e2e421604e2b644117a362d589c5434739',
 | 
			
		||||
          '0x9D7c284907acbd4a0cE2dDD0AA69147A921a573D'
 | 
			
		||||
        ]
 | 
			
		||||
          '0x9D7c284907acbd4a0cE2dDD0AA69147A921a573D',
 | 
			
		||||
        ],
 | 
			
		||||
      },
 | 
			
		||||
      location: {
 | 
			
		||||
        external: {},
 | 
			
		||||
        latitude: '22.430670',
 | 
			
		||||
        longitude: '151.002995'
 | 
			
		||||
        longitude: '151.002995',
 | 
			
		||||
      },
 | 
			
		||||
      selling: [
 | 
			
		||||
        'environment',
 | 
			
		||||
        'health',
 | 
			
		||||
        'transport'
 | 
			
		||||
      ],
 | 
			
		||||
      vcard: 'QkVHSU46VkNBUkQNClZFUlNJT046My4wDQpFTUFJTDphYXJuZXNlbkBob3RtYWlsLmNvbQ0KRk46S3VydMKgS3JhbmpjDQpOOktyYW5qYztLdXJ0Ozs7DQpURUw7VFlQPUNFTEw6NjkyNTAzMzQ5ODE5Ng0KRU5EOlZDQVJEDQo='
 | 
			
		||||
      selling: ['environment', 'health', 'transport'],
 | 
			
		||||
      vcard:
 | 
			
		||||
        'QkVHSU46VkNBUkQNClZFUlNJT046My4wDQpFTUFJTDphYXJuZXNlbkBob3RtYWlsLmNvbQ0KRk46S3VydMKgS3JhbmpjDQpOOktyYW5qYztLdXJ0Ozs7DQpURUw7VFlQPUNFTEw6NjkyNTAzMzQ5ODE5Ng0KRU5EOlZDQVJEDQo=',
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -64,7 +127,7 @@ export class UserServiceStub {
 | 
			
		||||
      user: 'Tom',
 | 
			
		||||
      role: 'enroller',
 | 
			
		||||
      action: 'Disburse RSV 100',
 | 
			
		||||
      approval: false
 | 
			
		||||
      approval: false,
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -74,7 +137,7 @@ export class UserServiceStub {
 | 
			
		||||
      user: 'Tom',
 | 
			
		||||
      role: 'enroller',
 | 
			
		||||
      action: 'Disburse RSV 100',
 | 
			
		||||
      approval: true
 | 
			
		||||
      approval: true,
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||