feat: contracts modal

This commit is contained in:
Alisa | Side.one 2023-05-16 12:31:53 +08:00
parent 5ae158db84
commit aa10275ee0
2 changed files with 75 additions and 50 deletions

View File

@ -4,6 +4,7 @@ import { select } from '@/components/dynamic/index';
import type { PaginatedProposals } from '@/types'; import type { PaginatedProposals } from '@/types';
import ProposalProcess from './ProposalProcess.vue'; import ProposalProcess from './ProposalProcess.vue';
import type { PropType } from 'vue'; import type { PropType } from 'vue';
import { ref } from 'vue';
defineProps({ defineProps({
proposals: { type: Object as PropType<PaginatedProposals> }, proposals: { type: Object as PropType<PaginatedProposals> },
@ -25,7 +26,7 @@ const statusMap: Record<string, string> = {
PROPOSAL_STATUS_REJECTED: 'REJECTED', PROPOSAL_STATUS_REJECTED: 'REJECTED',
}; };
const proposalInfo = ref() const proposalInfo = ref();
</script> </script>
<template> <template>
<div class="bg-white dark:bg-[#28334e] rounded text-sm"> <div class="bg-white dark:bg-[#28334e] rounded text-sm">
@ -181,9 +182,13 @@ const proposalInfo = ref()
</div> </div>
<input type="checkbox" id="proposal-detail-modal" class="modal-toggle" /> <input type="checkbox" id="proposal-detail-modal" class="modal-toggle" />
<label for="proposal-detail-modal" class="modal sm:modal-middle"> <label for="proposal-detail-modal" class="modal sm:modal-middle">
<label class="modal-box relative" for=""> <label class="modal-box relative" for="">
<label for="proposal-detail-modal" class="btn btn-sm btn-circle absolute right-2 top-2"></label> <label
for="proposal-detail-modal"
class="btn btn-sm btn-circle absolute right-2 top-2"
></label
>
<h3 class="font-bold text-lg">Description</h3> <h3 class="font-bold text-lg">Description</h3>
<p class="py-4"> <p class="py-4">
<Component <Component

View File

@ -29,17 +29,14 @@ const selected = ref('');
function showInfo(address: string) { function showInfo(address: string) {
wasmStore.wasmClient.getWasmContracts(address).then((x) => { wasmStore.wasmClient.getWasmContracts(address).then((x) => {
info.value = x.contract_info; info.value = x.contract_info;
// infoDialog.value = true;
}); });
} }
function showState(address: string) { function showState(address: string) {
wasmStore.wasmClient.getWasmContractStates(address).then((x) => { wasmStore.wasmClient.getWasmContractStates(address).then((x) => {
state.value = x; state.value = x;
stateDialog.value = true;
}); });
} }
function showQuery(address: string) { function showQuery(address: string) {
queryDialog.value = true;
selected.value = address; selected.value = address;
query.value = ''; query.value = '';
result.value = ''; result.value = '';
@ -114,18 +111,20 @@ const result = ref('');
>contract</label >contract</label
> >
<button <label
class="btn btn-primary btn-sm text-xs mr-2" class="btn btn-primary btn-sm text-xs mr-2"
for="modal-contract-states"
@click="showState(v)" @click="showState(v)"
> >
States States
</button> </label>
<button <label
for="modal-contract-query"
class="btn btn-primary btn-sm text-xs" class="btn btn-primary btn-sm text-xs"
@click="showQuery(v)" @click="showQuery(v)"
> >
Query Query
</button> </label>
</td> </td>
</tr> </tr>
</tbody> </tbody>
@ -153,47 +152,68 @@ const result = ref('');
</label> </label>
</label> </label>
<v-dialog v-model="stateDialog" width="auto"> <input type="checkbox" id="modal-contract-states" class="modal-toggle" />
<v-card> <label for="modal-contract-states" class="modal cursor-pointer">
<VCardTitle>Contract States</VCardTitle> <label class="modal-box relative p-2" for="">
<VList> <div>
<VListItem v-for="v in state.models"> <div class="flex items-center justify-between px-3 pt-2">
<VListItemTitle> <div class="text-lg">Contract States</div>
{{ format.hexToString(v.key) }} <label
</VListItemTitle> @click="infoDialog = false"
<VListItemSubtitle :title="format.base64ToString(v.value)"> for="modal-contract-detail"
{{ format.base64ToString(v.value) }} class="btn btn-sm btn-circle"
</VListItemSubtitle> ></label
</VListItem> >
</VList> </div>
<v-card-actions> <div>
<v-btn color="primary" block @click="stateDialog = false" <div v-for="(v, index) in state.models" :key="index" class="mb-2">
>Close Dialog</v-btn <div class="text-base mb-1">
> {{ format.hexToString(v.key) }}
</v-card-actions> </div>
</v-card> <div class="text-sm" :title="format.base64ToString(v.value)">
</v-dialog> {{ format.base64ToString(v.value) }}
</div>
</div>
</div>
</div>
</label>
</label>
<v-dialog v-model="queryDialog" width="auto"> <input type="checkbox" id="modal-contract-query" class="modal-toggle" />
<v-card> <label for="modal-contract-states" class="modal cursor-pointer">
<VCardTitle>Query Contract</VCardTitle> <label class="modal-box relative p-2" for="">
<v-card-text> <div>
<CustomRadios <div class="flex items-center justify-between px-3 pt-2">
v-model:selected-radio="selectedRadio" <div class="text-lg">Query Contract</div>
:radio-content="radioContent" <label
:grid-column="{ sm: '6', cols: '12' }" @click="infoDialog = false"
/> for="modal-contract-query"
class="btn btn-sm btn-circle"
></label
>
</div>
<div>
<div>
<CustomRadios
v-model:selected-radio="selectedRadio"
:radio-content="radioContent"
:grid-column="{ sm: '6', cols: '12' }"
/>
<VTextarea v-model="query" label="Query String" class="my-2" /> <VTextarea v-model="query" label="Query String" class="my-2" />
<VTextarea v-model="result" label="Result" /> <VTextarea v-model="result" label="Result" />
</v-card-text> </div>
<v-card-actions> <div>
<v-btn color="primary" @click="queryDialog = false" <button
>Close Dialog</v-btn class="btn btn-success btn-sm px-4"
> @click="queryContract()"
<v-btn color="success" @click="queryContract()">Query Contract</v-btn> >
</v-card-actions> Query Contract
</v-card> </button>
</v-dialog> </div>
</div>
</div>
</label>
</label>
</div> </div>
</template> </template>