Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Signing modal consistency #9002

Merged
merged 44 commits into from
Jan 26, 2024
Merged
Show file tree
Hide file tree
Changes from 28 commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
756b416
add: create nft use new signing modal
hassnian Jan 15, 2024
416c40a
add: collection new signing modal
hassnian Jan 15, 2024
28ff2c8
add: signing modal buy nft
hassnian Jan 15, 2024
34e2f92
add: telport new sign modal
hassnian Jan 15, 2024
e13e97e
add: signing modal to trasnfer nft modal
hassnian Jan 15, 2024
f005bff
add: new signing modal listing cart modal
hassnian Jan 15, 2024
130502e
add: holder of generative use signing modal
hassnian Jan 15, 2024
17f5d5d
add: burn nft add new sign modal
hassnian Jan 15, 2024
055fa22
add: delete collection use signing modal
hassnian Jan 15, 2024
3c9fa85
add: burn all nfts of collection use signign modal
hassnian Jan 15, 2024
d5b1fca
Merge branch 'main' into issue-8904
hassnian Jan 15, 2024
24aa23a
add: solid color loading section
hassnian Jan 15, 2024
c0dbd50
ref: use signing modal body in paid mint
hassnian Jan 15, 2024
aac99ac
ref: drop email use signing modal body
hassnian Jan 15, 2024
dbcb549
add: show dots while loading transaction
hassnian Jan 15, 2024
5965324
Merge branch 'issue-8904' of https://github.com/hassnian/nft-gallery …
hassnian Jan 15, 2024
eb898c2
fix: loading step moving with dots
hassnian Jan 15, 2024
51c0719
ref: remove log
hassnian Jan 15, 2024
e78f138
add: pluralization listing nft
hassnian Jan 15, 2024
9554fc2
add: pluralization buy modal count
hassnian Jan 15, 2024
c126396
fix: set fixed width when subtitle greater than title
hassnian Jan 15, 2024
b517acf
ref: use tailwind width class
hassnian Jan 16, 2024
23e94a2
Merge branch 'main' into issue-8904
hassnian Jan 19, 2024
f856948
fix: modal body skeleton backdrop not showing
hassnian Jan 19, 2024
77dd0af
fix: eslint formatting
hassnian Jan 19, 2024
28b557f
ref: use with tailwind classes
hassnian Jan 19, 2024
26f638f
remove: unsued classes
hassnian Jan 19, 2024
2499874
Merge branch 'main' into issue-8904
hassnian Jan 20, 2024
e7d6df8
add: try again sigining modal item transfer
hassnian Jan 20, 2024
6be3395
add: try again sigining modal buy
hassnian Jan 20, 2024
06b2948
fix: close modal on transaction finalized
hassnian Jan 21, 2024
fa39f7a
add: retry signing modal create nft
hassnian Jan 21, 2024
e409867
add: retry signing modal create collection
hassnian Jan 21, 2024
324bfda
add: retry signing modal teleport
hassnian Jan 21, 2024
e8b91b6
add: retry signing modal list modal
hassnian Jan 21, 2024
5d21804
add: retry signing modal holder of generative
hassnian Jan 21, 2024
945db5b
add: generative holder of collection handle error
hassnian Jan 21, 2024
c33dad2
add: try again signing modal burn nft
hassnian Jan 21, 2024
bfe3cec
add: try again signing modal burn collection
hassnian Jan 21, 2024
c9c98e0
add: try again signing modal burn all nfts
hassnian Jan 21, 2024
fe7a20c
Merge branch 'main' into issue-8904
hassnian Jan 21, 2024
52f2d19
Merge branch 'main' into issue-8904
hassnian Jan 23, 2024
e9d3f62
Merge branch 'main' into issue-8904
yangwao Jan 23, 2024
c9df787
Merge branch 'main' into issue-8904
yangwao Jan 23, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions components/buy/Buy.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
<template>
<div>
<Loader v-if="!usingAutoTeleport" v-model="isLoading" :status="status" />
<SigningModal
v-if="!usingAutoTeleport"
v-model="isLoading"
:title="$t('buyModal.buyingNft', itemCount)"
:status="status" />

<ConfirmPurchaseModal
:loading="!hasSyncedPrices"
:action="autoteleportAction"
Expand All @@ -15,7 +20,6 @@ import { useShoppingCartStore } from '@/stores/shoppingCart'
import { usePreferencesStore } from '@/stores/preferences'
import { useFiatStore } from '@/stores/fiat'

import Loader from '@/components/shared/Loader.vue'
import ConfirmPurchaseModal from '@/components/common/confirmPurchaseModal/ConfirmPurchaseModal.vue'
import { Actions, TokenToBuy } from '@/composables/transaction/types'
import { ShoppingCartItem } from '@/components/common/shoppingCart/types'
Expand All @@ -41,6 +45,7 @@ const nftSubscription = reactive<{
const hasSyncedPrices = ref(false)
const usingAutoTeleport = ref(false)
const buyAction = ref<Actions>(emptyObject<Actions>())
const itemCount = ref(1)

const autoteleportAction = computed<AutoTeleportAction>(() => ({
action: buyAction.value,
Expand Down Expand Up @@ -91,6 +96,7 @@ const handleConfirm = async ({
autoteleport,
}: AutoTeleportActionButtonConfirmEvent) => {
usingAutoTeleport.value = autoteleport
itemCount.value = isShoppingCartMode.value ? items.value.length : 1

if (!isShoppingCartMode.value) {
shoppingCartStore.removeItemToBuy()
Expand Down
14 changes: 10 additions & 4 deletions components/collection/HeroButtonDeleteCollection.vue
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
<template>
<SigningModal
v-model="isLoading"
:title="$t('confirmDeleteCollection.deletingCollection')"
:status="status" />

<NeoDropdownItem @click="confirmDeleteModalActive = true">
{{ $i18n.t('moreActions.deleteCollection') }}
</NeoDropdownItem>
Expand All @@ -14,15 +19,16 @@ import { NeoDropdownItem } from '@kodadot1/brick'
import ConfirmDeleteCollectionModal from './ConfirmDeleteCollectionModal.vue'

const route = useRoute()
const { $i18n, $updateLoader } = useNuxtApp()
const { transaction } = useTransaction()
const { $i18n } = useNuxtApp()
const { transaction, status } = useTransaction()
const { urlPrefix } = usePrefix()
const { accountId } = useAuth()

const confirmDeleteModalActive = ref(false)
const isLoading = ref(false)

const deleteCollection = async () => {
$updateLoader(true)
isLoading.value = true
const id = route.params.id.toString()

await transaction({
Expand All @@ -40,7 +46,7 @@ const deleteCollection = async () => {
`,
onChange: ({ data }) => {
if (data.collectionEntity.burned) {
$updateLoader(false)
isLoading.value = false
navigateTo(`/${urlPrefix.value}/u/${accountId.value}?tab=collections`)
}
},
Expand Down
12 changes: 9 additions & 3 deletions components/collection/HeroButtonDeleteNfts.vue
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
<template>
<SigningModal
v-model="isLoading"
:status="status"
:title="$t('moreActions.deletingNfts')" />

<NeoDropdownItem @click="deleteNfts()">
{{ $i18n.t('moreActions.deleteNfts') }}
</NeoDropdownItem>
Expand All @@ -9,11 +14,12 @@ import { NFTs } from '@/composables/transaction/types'
import { NeoDropdownItem } from '@kodadot1/brick'

const route = useRoute()
const { $i18n, $updateLoader } = useNuxtApp()
const { $i18n } = useNuxtApp()
const { transaction, status } = useTransaction()
const { urlPrefix } = usePrefix()
const { accountId } = useAuth()

const isLoading = ref(false)
const id = route.params.id.toString()

type NftIds = {
Expand All @@ -31,7 +37,7 @@ const { data } = useGraphql({
})

const deleteNfts = async () => {
$updateLoader(true)
isLoading.value = true
const nfts = (data.value as NftIds).nfts
const ids = nfts?.map((nft) => nft.id)

Expand All @@ -54,7 +60,7 @@ const deleteNfts = async () => {
data.nftEntities.length === 0 ||
status.value === TransactionStatus.Finalized
) {
$updateLoader(false)
isLoading.value = false
}
},
})
Expand Down
10 changes: 6 additions & 4 deletions components/collection/drop/HolderOfGenerative.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
<template>
<Loader v-model="isLoading" :status="status" />
<SigningModal
v-model="isLoading"
:title="$t('mint.nft.minting')"
:status="status" />

<CollectionDropGenerativeLayout
:collection-id="collectionId"
Expand Down Expand Up @@ -36,7 +39,6 @@ import { useDropMinimumFunds, useDropStatus } from '@/components/drops/useDrops'
import { fetchNft } from '@/components/items/ItemsGrid/useNftActions'
import holderOfCollectionById from '@/queries/subsquid/general/holderOfCollectionById.graphql'
import unlockableCollectionById from '@/queries/subsquid/general/unlockableCollectionById.graphql'
import Loader from '@/components/shared/Loader.vue'
import useGenerativeDropMint, {
type UnlockableCollectionById,
} from '@/composables/drop/useGenerativeDropMint'
Expand Down Expand Up @@ -196,10 +198,10 @@ const mintButtonLabel = computed(() => {
: $i18n.t('mint.unlockable.notEligibility')
: $i18n.t('mint.unlockable.checkEligibility')
})
const mintButtonDisabled = computed(
const mintButtonDisabled = computed<boolean>(
() =>
!mintCountAvailable.value ||
disabledByBackend.value ||
Boolean(disabledByBackend.value) ||
(isLogIn.value &&
Boolean(
!selectedImage.value ||
Expand Down
5 changes: 2 additions & 3 deletions components/collection/drop/modal/DropConfirmModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,14 @@
@resend="handleConfirmationEmailResend"
@check="handleEmailSubscriptionCheck" />

<WaitingDrop
<SigningModalBody
v-else-if="isClaimingDropStep"
:title="$t('drops.preparingYourNft')"
:subtitle="est">
<p class="py-5 capitalize">
{{ $t('drops.stayTuned') }}
</p>
</WaitingDrop>
</SigningModalBody>

<SuccessfulDrop
v-else-if="isSuccessfulDropStep"
Expand All @@ -44,7 +44,6 @@ import { NeoModal } from '@kodadot1/brick'
import ModalBody from '@/components/shared/modals/ModalBody.vue'
import EmailSignup from './newsletter/EmailSignup.vue'
import ConfirmEmail from './newsletter/ConfirmEmail.vue'
import WaitingDrop from './shared/WaitingDrop.vue'
import SuccessfulDrop from './shared/SuccessfulDrop.vue'
import type { DropMintedNft } from '@/composables/drop/useGenerativeDropMint'
import {
Expand Down
14 changes: 3 additions & 11 deletions components/collection/drop/modal/PaidMint.vue
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,10 @@
@confirm="handleConfirm"
@close="handleModalClose" />

<WaitingDrop
<SigningModalBody
v-else-if="isSigningStep"
:title="$t('autoTeleport.steps.paid_drop.title')"
:subtitle="transactionStatus">
<div class="py-5 flex items-start">
<NeoIcon icon="lightbulb" size="small" class="mr-2 is-block" />
<p
v-dompurify-html="$t('autoTeleport.tip')"
class="text-xs capitalize" />
</div>
</WaitingDrop>
:subtitle="transactionStatus" />

<SuccessfulDrop
v-else-if="isSuccessfulDropStep"
Expand All @@ -44,13 +37,12 @@
</template>

<script setup lang="ts">
import { NeoIcon, NeoModal } from '@kodadot1/brick'
import { NeoModal } from '@kodadot1/brick'
import ModalBody from '@/components/shared/modals/ModalBody.vue'
import { AutoTeleportActionButtonConfirmEvent } from '@/components/common/autoTeleport/AutoTeleportActionButton.vue'
import type { ToMintNft } from '../PaidGenerative.vue'
import type { AutoTeleportAction } from '@/composables/autoTeleport/types'
import MintOverview from './paid/MintOverview.vue'
import WaitingDrop from './shared/WaitingDrop.vue'
import SuccessfulDrop from './shared/SuccessfulDrop.vue'
import type { DropMintedNft } from '@/composables/drop/useGenerativeDropMint'
import { usePreloadMintedNftCover } from './utils'
Expand Down
27 changes: 0 additions & 27 deletions components/collection/drop/modal/shared/WaitingDrop.vue

This file was deleted.

6 changes: 5 additions & 1 deletion components/common/itemTransfer/ItemTransferModal.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
<template>
<div>
<Loader v-model="isLoading" :status="status" />
<SigningModal
v-model="isLoading"
:title="$t('transaction.transferingNft')"
:status="status" />

<NeoModal :value="isModalActive" scroll="clip" @close="onClose">
<div class="modal-width">
<header
Expand Down
9 changes: 8 additions & 1 deletion components/common/listingCart/ListingCartModal.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
<template>
<div>
<Loader v-if="!autoTeleport" v-model="isLoading" :status="status" />
<SigningModal
v-if="!autoTeleport"
v-model="isLoading"
:title="$t('listingCart.listingNft', itemCount)"
:status="status" />

<NeoModal
:value="preferencesStore.listingCartModalOpen"
scroll="clip"
Expand Down Expand Up @@ -96,6 +101,7 @@ const fixedPrice = ref()
const floorPricePercentAdjustment = ref()
const autoTeleport = ref(false)
const autoteleportButton = ref()
const itemCount = ref(listingCartStore.count)

const loadingAutoTeleport = computed(() => !autoteleportButton.value?.isReady)

Expand Down Expand Up @@ -204,6 +210,7 @@ const getAction = (items: ListCartItem[]): Actions => {
async function confirm({ autoteleport }: AutoTeleportActionButtonConfirmEvent) {
try {
autoTeleport.value = autoteleport
itemCount.value = listingCartStore.count

if (!autoteleport) {
await transaction(getAction(listingCartStore.itemsInChain))
Expand Down
7 changes: 6 additions & 1 deletion components/create/CreateCollection.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
<template>
<div class="is-centered" :class="{ columns: classColumn }">
<Loader v-if="!autoTeleport" v-model="isLoading" :status="status" />
<SigningModal
v-if="!autoTeleport"
v-model="isLoading"
:title="$t('mint.collection.minting')"
:status="status" />

<MintConfirmModal
v-model="confirmModal"
:auto-teleport-actions="actions"
Expand Down
7 changes: 6 additions & 1 deletion components/create/CreateNft.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
<template>
<div class="is-centered columns">
<Loader v-if="!autoTeleport" v-model="isLoading" :status="status" />
<SigningModal
v-if="!autoTeleport"
v-model="isLoading"
:title="$t('mint.nft.minting')"
:status="status" />

<MintConfirmModal
v-model="modalShowStatus"
:auto-teleport-actions="autoTeleportActions"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
<template>
<div>
<Loader v-model="isLoading" :status="status" />
<SigningModal
v-model="isLoading"
:status="status"
:title="$t('mint.nft.burning')" />

<NeoDropdown position="bottom-left" :mobile-modal="false">
<template #trigger="{ active }">
<NeoButton
Expand Down Expand Up @@ -32,7 +36,6 @@ import { NeoButton, NeoDropdown, NeoDropdownItem } from '@kodadot1/brick'
import { Interaction } from '@kodadot1/minimark/v1'
import { downloadImage } from '@/utils/download'
import { toOriginalContentUrl } from '@/utils/ipfs'
import Loader from '@/components/shared/Loader.vue'
import { isMobileDevice } from '@/utils/extension'

const { $i18n, $consola } = useNuxtApp()
Expand Down
55 changes: 55 additions & 0 deletions components/shared/SigningModal/SigningModal.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
<template>
<NeoModal
:value="isModalActive"
:can-cancel="['outside', 'escape']"
scroll="clip"
@close="onClose">
<ModalBody :title="$t('drops.signTransaction')" @close="onClose">
<SigningModalBody
:title="title"
:subtitle="subtitle"
:show-subtitle-dots="isLoading" />
</ModalBody>
</NeoModal>
</template>
<script setup lang="ts">
import { NeoModal } from '@kodadot1/brick'
import ModalBody from '@/components/shared/modals/ModalBody.vue'
import { TransactionStatus } from '@/composables/useTransactionStatus'

const props = defineProps<{
modelValue: boolean
status: TransactionStatus
title: string
}>()

const { $i18n } = useNuxtApp()

const isModalActive = useVModel(props, 'modelValue')

const statusTransalationsKeys: Partial<Record<TransactionStatus, string>> = {
[TransactionStatus.Finalized]: 'transactionSteps.completed',
[TransactionStatus.IPFS]: 'transactionSteps.uploading',
}

const isLoading = computed(() =>
[
TransactionStatus.Block,
TransactionStatus.Casting,
TransactionStatus.Sign,
TransactionStatus.Broadcast,
].includes(props.status),
)

const subtitle = computed(() =>
isLoading.value
? $i18n.t('transactionSteps.loading')
: $i18n.t(
statusTransalationsKeys[props.status] || 'transactionSteps.waiting',
),
)

const onClose = () => {
isModalActive.value = false
}
</script>
Loading