Merge branch 'ping-pub:master' into master

This commit is contained in:
hexskrt authored and GitHub committed 2023-05-28 04:27:12 +07:00
commit e81a458fb9
18 files changed
+79 -74

No files matched your search

+1 -1
View File
@@ -41,7 +41,7 @@
"md-editor-v3": "^2.8.1",
"numeral": "^2.0.6",
"osmojs": "^14.0.0-rc.0",
"ping-widget": "^0.0.21",
"ping-widget": "^0.0.24",
"pinia": "^2.0.28",
"postcss": "^8.4.23",
"prismjs": "^1.29.0",
+10
View File
@@ -0,0 +1,10 @@
<svg width="88" height="88" viewBox="0 0 88 88" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<rect width="88" height="88" rx="20" fill="url(#pattern0)"/>
<path d="M35.7552 68V47.6263L55.1899 68H66V67.4713L43.6484 44.2762L64.276 22.2644V22H53.3962L35.7552 41.4505V22H27V68H35.7552Z" fill="white"/>
<defs>
<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1">
<use xlink:href="#image0_382_776" transform="scale(0.001)"/>
</pattern>
<image id="image0_382_776" width="1000" height="1000" xlink:href="data:image/png;base64,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 truncated
</defs>
</svg>

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

+1 -1
View File
@@ -32,7 +32,7 @@ const addFavor = (e: Event) => {
<div class="w-8 h-8 rounded-full overflow-hidden">
<img :src="conf.logo" />
</div>
<div class="font-semibold ml-4 text-base flex-1 truncate">
<div class="font-semibold ml-4 text-base flex-1 truncate capitalize">
{{ conf?.prettyName || props.name }}
</div>
<div
+5 -13
View File
@@ -110,24 +110,16 @@ const proposalInfo = ref();
</td>
<td v-if="statusMap?.[item?.status] === 'VOTING'" class="w-40">
<div class="" v-show="item?.voterStatus === 'No With Veto'">
<div class="">
<label
for="vote"
class="btn btn-xs btn-primary rounded-sm"
@click="dialog.open('vote', { proposal_id: item?.proposal_id })"
>Vote</label
>
<span v-if="item?.voterStatus">{{ item?.voterStatus.replace("VOTE_OPTION_", "")}}</span>
<span v-else>Vote</span>
</label
>
<div
class="text-xs truncate relative py-1 px-3 rounded-full w-fit"
:class="`text-${voterStatusMap?.[item?.voterStatus]}`"
v-show="item?.voterStatus !== 'No With Veto'"
>
<span
class="inset-x-0 inset-y-0 opacity-10 absolute"
:class="`bg-${voterStatusMap?.[item?.voterStatus]}`"
></span>
{{ item?.voterStatus }}
</div>
</div>
</td>
</tr>
+1 -1
View File
@@ -44,7 +44,7 @@ function changeEndpoint(item: Endpoint) {
</label>
<div
tabindex="0"
class="dropdown-content w-80 menu shadow bg-base-200 rounded-box max-h-[300px] overflow-auto"
class="dropdown-content w-80 menu shadow bg-base-200 rounded-box overflow-auto"
>
<!-- rest -->
<div
+1 -1
View File
@@ -128,7 +128,7 @@ const showDiscord = window.location.host.search('ping.pub') > -1;
class="w-6 h-6 rounded-full mr-3 ml-4"
/>
<div
class="text-base text-gray-500 dark:text-gray-300"
class="text-base capitalize text-gray-500 dark:text-gray-300"
:class="{
'text-white':
$route.path === el?.to?.path &&
+1 -1
View File
@@ -84,7 +84,7 @@ const tipMsg = computed(() => {
v-if="walletStore.currentAddress"
class="block py-2 px-2 hover:bg-gray-100 dark:hover:bg-[#353f5a] rounded cursor-pointer"
@click="walletStore.disconnect()"
>Disconnected</a
>Disconnect</a
>
</div>
</div>
+1 -1
View File
@@ -66,7 +66,7 @@ export const DEFAULT: RequestRegistry = {
adapter,
},
gov_proposals_votes: {
url: '/cosmos/gov/v1beta1/proposals/{proposal_id}/votes?pagination.key={next_key}',
url: '/cosmos/gov/v1beta1/proposals/{proposal_id}/votes',
adapter,
},
gov_proposals_votes_voter: {
+5 -5
View File
@@ -116,11 +116,11 @@ export class CosmosRestClient extends BaseRestClient<RequestRegistry> {
async getGovProposalTally(proposal_id: string) {
return this.request(this.registry.gov_proposals_tally, { proposal_id });
}
async getGovProposalVotes(proposal_id: string, next_key?: string) {
return this.request(this.registry.gov_proposals_votes, {
proposal_id,
next_key,
});
async getGovProposalVotes(proposal_id: string, page?: PageRequest) {
if(!page) page = new PageRequest()
page.reverse = true
const query =`?proposal_status={status}&${page.toQueryString()}`;
return this.request(this.registry.gov_proposals_votes, { proposal_id }, query);
}
async getGovProposalVotesVoter(proposal_id: string, voter: string) {
return this.request(this.registry.gov_proposals_votes_voter, {
+34 -34
View File
@@ -1,4 +1,5 @@
<script lang="ts" setup>
import { computed } from '@vue/reactivity';
import ObjectElement from '@/components/dynamic/ObjectElement.vue';
import {
useBaseStore,
@@ -7,21 +8,24 @@ import {
useStakingStore,
useTxDialog,
} from '@/stores';
import type {
GovProposal,
GovVote,
PaginatedProposalDeposit,
Pagination,
import {
PageRequest,
type GovProposal,
type GovVote,
type PaginatedProposalDeposit,
type Pagination,
} from '@/types';
import { ref, reactive } from 'vue';
import Countdown from '@/components/Countdown.vue';
import { computed } from '@vue/reactivity';
import PaginationBar from '@/components/PaginationBar.vue'
import { fromBech32, toHex } from '@cosmjs/encoding';
const props = defineProps(['proposal_id', 'chain']);
const proposal = ref({} as GovProposal);
const format = useFormatter();
const store = useGovStore();
const dialog = useTxDialog();
const stakingStore = useStakingStore();
store.fetchProposal(props.proposal_id).then((res) => {
const proposalDetail = reactive(res.proposal);
@@ -53,27 +57,14 @@ const deposit = ref({} as PaginatedProposalDeposit);
store.fetchProposalDeposits(props.proposal_id).then((x) => (deposit.value = x));
const votes = ref({} as GovVote[]);
const votePage = ref({} as Pagination);
const loading = ref(false);
const pageRequest = ref(new PageRequest())
const pageResponse = ref({} as Pagination)
store.fetchProposalVotes(props.proposal_id).then((x) => {
votes.value = x.votes;
votePage.value = x.pagination;
pageResponse.value = x.pagination;
});
function loadMore() {
if (votePage.value.next_key) {
loading.value = true;
store
.fetchProposalVotes(props.proposal_id, votePage.value.next_key)
.then((x) => {
votes.value = votes.value.concat(x.votes);
votePage.value = x.pagination;
loading.value = false;
});
}
}
function shortTime(v: string) {
if (v) {
return format.toDay(v, 'from');
@@ -113,7 +104,7 @@ const total = computed(() => {
const turnout = computed(() => {
if (total.value > 0) {
const bonded = useStakingStore().pool?.bonded_tokens || '1';
const bonded = stakingStore.pool?.bonded_tokens || '1';
return format.percent(total.value / Number(bonded));
}
return 0;
@@ -159,6 +150,23 @@ const processList = computed(() => {
{ name: 'Abstain', value: abstain.value, class: 'bg-warning' },
];
});
function showValidatorName(voter: string) {
const {data} = fromBech32(voter)
const hex = toHex(data)
const v = stakingStore.validators.find( x => toHex(fromBech32(x.operator_address).data) === hex)
return v? v.description.moniker : voter
}
function pageload(p: number) {
pageRequest.value.setPage(p)
store
.fetchProposalVotes(props.proposal_id, pageRequest.value)
.then((x) => {
votes.value = x.votes;
pageResponse.value = x.pagination;
});
}
</script>
<template>
@@ -325,7 +333,7 @@ const processList = computed(() => {
<table class="table w-full table-zebra">
<tbody>
<tr v-for="(item, index) of votes" :key="index">
<td class="py-2 text-sm">{{ item.voter }}</td>
<td class="py-2 text-sm">{{ showValidatorName(item.voter) }}</td>
<td
class="py-2 text-sm"
:class="{
@@ -333,20 +341,12 @@ const processList = computed(() => {
'text-gray-400': item.option === 'VOTE_OPTION_ABSTAIN',
}"
>
{{ item.option }}
{{ String(item.option).replace("VOTE_OPTION_", "") }}
</td>
</tr>
</tbody>
</table>
<button
@click="loadMore()"
v-if="votePage.next_key"
:disabled="loading"
class="btn btn-outline btn-primary w-full mt-4"
>
Load more
</button>
<PaginationBar :limit="pageRequest.limit" :total="pageResponse.total" :callback="pageload"/>
</div>
</div>
</div>
+3 -4
View File
@@ -267,9 +267,7 @@ const color = computed(() => {
{{ format.formatToken(walletStore.balanceOfStakingToken) }}
</div>
<div class="text-sm" :class="color">
<span class="ml-1">
${{ format.tokenValue(walletStore.balanceOfStakingToken) }}
</span>
${{ format.tokenValue(walletStore.balanceOfStakingToken) }}
</div>
</div>
<div class="bg-gray-100 dark:bg-[#373f59] rounded-sm px-4 py-3">
@@ -355,7 +353,8 @@ const color = computed(() => {
<div class="grid grid-cols-3 gap-4 px-4 pb-6 mt-4">
<label for="PingTokenConvert" class="btn btn-primary text-white">Swap</label>
<label for="send" class="btn !bg-yes !border-yes text-white" @click="dialog.open('send', {})">Send</label>
<RouterLink to="/wallet/receive" class="btn !bg-info !border-info text-white">Receive</RouterLink>
<label for="delegate" class="btn !bg-info !border-info text-white" @click="dialog.open('delegate', {})">Delegate</label>
<RouterLink to="/wallet/receive" class="btn !bg-info !border-info text-white hidden">Receive</RouterLink>
</div>
<Teleport to="body">
<ping-token-convert
+1 -1
View File
@@ -1,5 +1,5 @@
<script lang="ts" setup>
import { ref, onMounted, computed, watchEffect } from 'vue';
import { ref, onMounted, computed, onUnmounted } from 'vue';
import { fromHex, toBase64 } from '@cosmjs/encoding';
import {
useFormatter,
+1 -1
View File
@@ -265,7 +265,7 @@ export const useDashboard = defineStore('dashboard', {
favorite: fav as string[],
favoriteMap: favMap as Record<string, boolean>,
chains: {} as Record<string, ChainConfig>,
prices: {},
prices: {} as Record<string, any>,
coingecko: {} as Record<string, {coinId: string, exponent: number, symbol: string}>,
};
},
+6 -3
View File
@@ -69,7 +69,7 @@ export const useFormatter = defineStore('formatter', {
return trace;
},
priceInfo(denom: string) {
const id = this.dashboard.coingecko[denom]?.coinId;
const id = this.dashboard.coingecko[denom]?.coinId || "";
const prices = this.dashboard.prices[id];
return prices;
},
@@ -96,7 +96,10 @@ export const useFormatter = defineStore('formatter', {
return v!==0 ? numeral(v).format("+0,0.[00]"): ""
},
tokenValue(token?: Coin) {
return token ? numeral(this.formatTokenAmount(token)).format('0,0.[00]') : ""
if(token) {
return numeral(this.tokenValueNumber(token)).format("0,0.[00]")
}
return ""
},
tokenValueNumber(token?: Coin) {
if(!token) return 0
@@ -129,7 +132,7 @@ export const useFormatter = defineStore('formatter', {
formatToken(
token?: { denom: string; amount: string },
withDenom = true,
fmt = '0.0a',
fmt = '0,0.[0]',
mode = 'local'
): string {
if (token && token.amount && token?.denom) {
+2 -2
View File
@@ -75,8 +75,8 @@ export const useGovStore = defineStore('govStore', {
async fetchProposalDeposits(proposalId: string) {
return this.blockchain.rpc.getGovProposalDeposits(proposalId);
},
async fetchProposalVotes(proposalId: string, next_key?: string) {
return this.blockchain.rpc.getGovProposalVotes(proposalId, next_key);
async fetchProposalVotes(proposalId: string, page?: PageRequest) {
return this.blockchain.rpc.getGovProposalVotes(proposalId, page);
},
async fetchProposalVotesVoter(proposalId: string, voter: string) {
return this.blockchain.rpc.getGovProposalVotesVoter(proposalId, voter);
+2 -1
View File
@@ -42,8 +42,9 @@ export const useWalletStore = defineStore('walletStore', {
);
},
stakingAmount() {
const stakingStore = useStakingStore();
let amt = 0;
let denom = '';
let denom = stakingStore.params.bond_denom;
this.delegations.forEach((i) => {
amt += Number(i.balance.amount);
denom = i.balance.denom;
+4 -4
View File
@@ -6955,10 +6955,10 @@ pify@^3.0.0:
resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz"
integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==
ping-widget@^0.0.21:
version "0.0.21"
resolved "https://registry.yarnpkg.com/ping-widget/-/ping-widget-0.0.21.tgz#7143c9702a1ad0cfaf2efccfbfe773c9e0ed940a"
integrity sha512-4+Xprk1wYn9ww9FsbFY4j4HEpD9CUFlrlWl8AP5iO02RTiUMCpOHSvyKALUlDYL1LYC6bhuRUFepJ5KpMZIO8Q==
ping-widget@^0.0.24:
version "0.0.24"
resolved "https://registry.yarnpkg.com/ping-widget/-/ping-widget-0.0.24.tgz#fc17532d486af65836a1765918569dba99e615f0"
integrity sha512-TVRj1FctAaZRy3kWlttVa3KUmqjBwb9kh2u6zpSvVIaKAp3M+B+hyGf0lARVeSyNd3pbYPJKo3vZL1tu4DHqCw==
dependencies:
"@cosmjs/amino" "^0.30.1"
"@cosmjs/cosmwasm-stargate" "^0.30.1"