Statistics.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <template>
  2. <div class="column is-half">
  3. <div class="box-stats">
  4. <div class="tab-with-corner is-left-top">
  5. {{ $t('statistics') }}
  6. <span class="selected"
  7. ><NumberFormat :value="selectedStatistic.amount" /> {{ selectedStatisticCurrency }}</span
  8. >
  9. </div>
  10. <div class="box">
  11. <div class="label">
  12. {{ $t('anonymitySet') }}
  13. <b-tooltip :label="$t('anonymitySetTooltip')" size="is-medium" position="is-top" multilined>
  14. <button class="button is-primary has-icon">
  15. <span class="icon icon-info"></span>
  16. </button>
  17. </b-tooltip>
  18. </div>
  19. <div class="field">
  20. <i18n v-if="anonimitySet" path="equalUserDeposit">
  21. <span v-if="anonimitySet > 1 && anonimitySet < 5" slot="only">{{ $t('only') }}</span>
  22. <b v-if="anonimitySet > 1" slot="n">{{ Number(anonimitySet) }}</b>
  23. <span slot="equalUserDepositText">{{ $tc('equalUserDepositPlural', Number(anonimitySet)) }}</span>
  24. </i18n>
  25. <b-skeleton size="is-large" :active="!anonimitySet" width="200"></b-skeleton>
  26. </div>
  27. <template v-if="anonimitySet != 0">
  28. <div class="label">{{ $t('latestDeposits') }}</div>
  29. <div v-if="latestDeposits && latestDeposits.length" class="columns is-small is-multiline">
  30. <div class="column is-half-small">
  31. <div class="deposits">
  32. <div v-for="{ index, depositTime } in latestDeposits.slice(0, 5)" :key="index" class="row">
  33. <div class="value">{{ Number(index) + 1 }}.</div>
  34. <div class="data">{{ depositTime }}</div>
  35. </div>
  36. </div>
  37. </div>
  38. <div class="column is-half-small">
  39. <div class="deposits">
  40. <div v-for="{ index, depositTime } in latestDeposits.slice(5, 10)" :key="index" class="row">
  41. <div class="value">{{ Number(index) + 1 }}.</div>
  42. <div class="data">{{ depositTime }}</div>
  43. </div>
  44. </div>
  45. </div>
  46. </div>
  47. <div v-else class="columns is-small is-multiline">
  48. <div class="column is-half-small">
  49. <div class="deposits">
  50. <b-skeleton size="is-large"></b-skeleton>
  51. <b-skeleton size="is-large"></b-skeleton>
  52. <b-skeleton size="is-large"></b-skeleton>
  53. <b-skeleton size="is-large"></b-skeleton>
  54. <b-skeleton size="is-large"></b-skeleton>
  55. </div>
  56. </div>
  57. <div class="column is-half-small">
  58. <div class="deposits">
  59. <b-skeleton size="is-large"></b-skeleton>
  60. <b-skeleton size="is-large"></b-skeleton>
  61. <b-skeleton size="is-large"></b-skeleton>
  62. <b-skeleton size="is-large"></b-skeleton>
  63. <b-skeleton size="is-large"></b-skeleton>
  64. </div>
  65. </div>
  66. </div>
  67. </template>
  68. </div>
  69. </div>
  70. </div>
  71. </template>
  72. <script>
  73. /* eslint-disable no-console */
  74. import { mapState, mapGetters } from 'vuex'
  75. import NumberFormat from '@/components/NumberFormat'
  76. export default {
  77. components: {
  78. NumberFormat
  79. },
  80. data() {
  81. return {
  82. timer: null
  83. }
  84. },
  85. computed: {
  86. ...mapState('application', ['ip', 'statistic', 'selectedStatistic']),
  87. ...mapGetters('metamask', ['networkConfig']),
  88. ...mapGetters('application', ['selectedStatisticCurrency', 'latestDeposits']),
  89. anonimitySet() {
  90. const currency = this.selectedStatistic.currency.toLowerCase()
  91. return this.statistic[currency][this.selectedStatistic.amount].anonymitySet
  92. }
  93. },
  94. mounted() {
  95. if (!this.timer) {
  96. this.updateEvents()
  97. }
  98. },
  99. beforeDestroy() {
  100. clearTimeout(this.timer)
  101. },
  102. methods: {
  103. updateEvents() {
  104. this.$store.dispatch('application/updateSelectEvents')
  105. this.timer = setTimeout(() => {
  106. this.updateEvents()
  107. }, 60 * 1000)
  108. }
  109. }
  110. }
  111. </script>