diff --git a/src/login.ts b/src/login.ts index 704b99248af3d237f7d88e273315703896cbabe0..e550af17a753afe4b6f06f2f8a39c37758fb4d96 100644 --- a/src/login.ts +++ b/src/login.ts @@ -87,7 +87,7 @@ function fetchDetails( [ Option<PalletIdentityIdtyValue>, Option<SpMembershipMembershipData>, - Option<PalletCertificationIdtyCertMeta> + PalletCertificationIdtyCertMeta ] >( [ @@ -102,9 +102,7 @@ function fetchDetails( if (m.isSome) { loginMshipVal.value = m.unwrap() } - if (c.isSome) { - loginCertVal.value = c.unwrap() - } + loginCertVal.value = c } ) apollo diff --git a/src/views/AccountView.vue b/src/views/AccountView.vue index 750c9211cc45a8384f3e62fd62a0d633f30e1658..31e7914143eb5f1154e8dc9bb2ebb77290cb3120 100644 --- a/src/views/AccountView.vue +++ b/src/views/AccountView.vue @@ -11,7 +11,7 @@ import { TxReason, TxSource, type TxComment, type TxItem } from '@/types' import TransferLine from '@/components/TransferLine.vue' import { Keyring, type ApiPromise } from '@polkadot/api' import type { FrameSystemAccountInfo } from '@polkadot/types/lookup' -import { loginAccount, loginAccountInfo, loginIdtyVal } from '@/global' +import { currentBlockHeight, loginAccount, loginAccountInfo, loginIdtyVal } from '@/global' import { signAndSend } from '@/common' import { ProfileLight } from '@/datapod/profiles.gql' import type { ProfileLightQuery } from '@/generated/datapod' @@ -194,7 +194,12 @@ const createIdtyNotif = ref('') const displayCreateIDty = computed( () => loginIdtyVal.value?.status.isMember && theAccount && !itsYou.value ) -const canCreateIdty = computed(() => result.value?.accountByPk?.identity?.status == null) +// this address is not already used by an identity AND you are ready to create identity +const canCreateIdty = computed( + () => + result.value?.accountByPk?.identity?.status == null && + (loginIdtyVal.value?.nextCreatableIdentityOn.toNumber() ?? 0) < currentBlockHeight.value +) async function createIdty() { createIdtyNotif.value = 'creating identity ... ' signAndSend(api, api.tx.identity.createIdentity(theAccount.value!), createIdtyNotif, () => {}) @@ -298,7 +303,10 @@ async function createIdty() { /> </li> <li v-if="displayCreateIDty"> - <button :disabled="!canCreateIdty" @click="createIdty">create identity</button> + <button v-if="canCreateIdty" @click="createIdty">create identity</button> + <button v-else :disabled="true" title="not available to certify" @click="createIdty"> + create identity + </button> {{ createIdtyNotif }} </li> </ul> diff --git a/src/views/IdtyItem.vue b/src/views/IdtyItem.vue index 8c3274df8aa14558324daad3f16fc9750c513148..ddc94f397ffcd464722470baac5a543f8dd6520d 100644 --- a/src/views/IdtyItem.vue +++ b/src/views/IdtyItem.vue @@ -159,18 +159,16 @@ async function confirm() { }) } -const canCert = computed(() => true) +// ready to certify +const canCert = computed( + () => (loginCertVal.value?.nextIssuableOn.toNumber() ?? 0) < currentBlockHeight.value +) const certNotif = ref('') async function certify() { certNotif.value = 'certifying ... ' signAndSend(api, api.tx.certification.addCert(idty.value?.index!), certNotif, () => {}) } -const canRenew = computed( - () => - (loginIdtyVal.value?.nextCreatableIdentityOn.toNumber() ?? Infinity) < - currentBlockHeight.value && - (loginCertVal.value?.nextIssuableOn.toNumber() ?? Infinity) < currentBlockHeight.value -) +const canRenew = canCert // no additional requirement since only displayed when renewable const renewNotif = ref('') async function renew() { renewNotif.value = 'renewing cert ... ' @@ -347,7 +345,10 @@ async function requestDistEvalFor() { <button :disabled="!canCert" @click="certify">certify</button> {{ certNotif }} </li> <li v-if="displayRenew"> - <button :disabled="!canRenew" @click="renew">renew certification</button> + <button v-if="canRenew" @click="renew">renew certification</button> + <button v-else disabled="true" title="not available to certify" @click="renew"> + renew certification + </button> {{ renewNotif }} </li> <li v-if="displayRequestDistEval">