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

refactor: programmatic modal #6714

Merged
merged 12 commits into from
Aug 16, 2023
13 changes: 4 additions & 9 deletions components/Navbar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,6 @@

<script lang="ts" setup>
import { NeoIcon } from '@kodadot1/brick'
import { BModalConfig } from 'buefy/types/components'

import { ConnectWalletModalConfig } from '@/components/common/ConnectWallet/useConnectWallet'
import ChainSelectDropdown from '@/components/navbar/ChainSelectDropdown.vue'
Expand All @@ -210,7 +209,7 @@ import { getChainNameByPrefix } from '@/utils/chain'
import { createVisible, explorerVisible } from '@/utils/config/permision.config'
import ShoppingCartButton from './navbar/ShoppingCartButton.vue'

const { $buefy, $nextTick } = useNuxtApp()
const { $nextTick, $neoModal } = useNuxtApp()
preschian marked this conversation as resolved.
Show resolved Hide resolved
const instance = getCurrentInstance()
const showTopNavbar = ref(true)
const openMobileSearchBar = ref(false)
Expand Down Expand Up @@ -248,15 +247,11 @@ const handleMobileChainSelect = () => {
const openWalletConnectModal = (): void => {
showMobileNavbar()

$buefy.modal.open({
$neoModal.closeAll()

$neoModal.open({
parent: instance?.proxy,
...ConnectWalletModalConfig,
} as unknown as BModalConfig)

// close all modal
document.querySelectorAll('.modal').forEach((modal) => {
modal.__vue__?.$vnode?.context?.close()
modal.remove()
})
preschian marked this conversation as resolved.
Show resolved Hide resolved
}

Expand Down
4 changes: 2 additions & 2 deletions components/collection/drop/DropContainer.vue
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ const Money = defineAsyncComponent(
const TokenImportButton = defineAsyncComponent(
() => import('@/components/collection/drop/TokenImportButton.vue')
)
const { $buefy, $i18n } = useNuxtApp()
const { $neoModal, $i18n } = useNuxtApp()
const root = ref<Vue>()

const { toast } = useToast()
Expand Down Expand Up @@ -300,7 +300,7 @@ const handleBuy = async () => {
}

if (!isLogIn.value) {
$buefy.modal.open({
$neoModal.open({
parent: root?.value,
...ConnectWalletModalConfig,
})
Expand Down
4 changes: 2 additions & 2 deletions components/collection/drop/TokenImportButton.vue
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ const { urlPrefix } = usePrefix()
const { accountId, isLogIn } = useAuth()
const isLoading = ref(false)

const { $buefy } = useNuxtApp()
const { $neoModal } = useNuxtApp()
const root = ref<Vue>()

const Money = defineAsyncComponent(
Expand All @@ -46,7 +46,7 @@ const getApi = () => {

const handleTokenImport = async () => {
if (!isLogIn.value) {
$buefy.modal.open({
$neoModal.open({
parent: root?.value,
...ConnectWalletModalConfig,
})
Expand Down
4 changes: 2 additions & 2 deletions components/collection/unlockable/UnlockableContainer.vue
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ import { useCountDown } from './utils/useCountDown'
const Loader = defineAsyncComponent(
() => import('@/components/collection/unlockable/UnlockableLoader.vue')
)
const { $buefy } = useNuxtApp()
const { $neoModal } = useNuxtApp()
const root = ref<Vue<Record<string, string>>>()

const { toast } = useToast()
Expand Down Expand Up @@ -271,7 +271,7 @@ const description = unlockableDesc(40)

const handleSubmitMint = async () => {
if (!isLogIn.value) {
$buefy.modal.open({
$neoModal.open({
parent: root?.value,
...ConnectWalletModalConfig,
})
Expand Down
3 changes: 1 addition & 2 deletions components/common/ConnectWallet/ConnectWalletModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,8 @@
<script setup lang="ts">
import { SupportedWallets } from '@/utils/config/wallets'
import { BaseDotsamaWallet } from '@/utils/config/wallets/BaseDotsamaWallet'
import { NeoButton, NeoIcon } from '@kodadot1/brick'
import { NeoButton, NeoField, NeoIcon } from '@kodadot1/brick'
import { Auth, useIdentityStore } from '@/stores/identity'
import { NeoField } from '@kodadot1/brick'
import WalletMenuItem from '@/components/common/ConnectWallet/WalletMenuItem.vue'
import WalletAsset from '@/components/common/ConnectWallet/WalletAsset.vue'

Expand Down
13 changes: 7 additions & 6 deletions components/common/ConnectWallet/useConnectWallet.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import ConnectWalletModal from './ConnectWalletModal.vue'
import { ModalProgrammatic as Modal } from 'buefy'
import { BModalComponent, BModalConfig } from 'buefy/types/components'

export const ConnectWalletModalConfig = {
component: ConnectWalletModal,
canCancel: ['escape', 'outside'],
customClass: 'connect-wallet-modal',
rootClass: 'connect-wallet-modal',
autoFocus: false,
}

Expand All @@ -18,13 +17,15 @@ export const openConnectWalletModal = (
instance,
{ onConnect, closeAfterConnect, onCancel }: OpenWalletModalConfig = {}
) => {
const modal = ref<BModalComponent | null>()
const { $neoModal } = useNuxtApp()

const modal = ref()

const closeModal = () => {
modal.value?.close()
}

modal.value = Modal.open({
modal.value = $neoModal.open({
parent: instance?.proxy,
onCancel: () => {
if (onCancel) {
Expand All @@ -49,5 +50,5 @@ export const openConnectWalletModal = (
},
},
...ConnectWalletModalConfig,
} as unknown as BModalConfig)
})
}
2 changes: 1 addition & 1 deletion components/common/NotificationBox/useNotificationBox.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ import NotificationBoxModal from './NotificationBoxModal.vue'
export const NotificationBoxModalConfig = {
component: NotificationBoxModal,
canCancel: ['outside'],
customClass: 'notification-box-modal',
rootClass: 'notification-box-modal',
autoFocus: false,
}
2 changes: 1 addition & 1 deletion components/common/shoppingCart/ShoppingCartModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<div
class="shopping-cart-modal-container theme-background-color border-left is-flex is-flex-direction-column">
<header
class="py-5 px-6 is-flex is-justify-content-space-between border-bottom">
class="py-4 px-6 is-flex is-justify-content-space-between border-bottom">
<span class="modal-card-title is-size-6 has-text-weight-bold">
{{ $t('shoppingCart.title') }}
</span>
Expand Down
12 changes: 7 additions & 5 deletions components/common/shoppingCart/ShoppingCartModalConfig.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import ShoppingCartModal from './ShoppingCartModal.vue'
import { ModalProgrammatic as Modal } from 'buefy'
import { BModalConfig } from 'buefy/types/components'
import { usePreferencesStore } from '@/stores/preferences'

export const ShoppingCartModalConfig = {
component: ShoppingCartModal,
canCancel: ['outside'],
customClass: 'shopping-cart-modal',
rootClass: 'shopping-cart-modal',
autoFocus: false,
}

Expand All @@ -15,13 +13,17 @@ export const isShoppingCartOpen = () =>

export const openShoppingCart = (instance) => {
const preferencesStore = usePreferencesStore()
const { $neoModal } = useNuxtApp()

preferencesStore.setShoppingCartCollapse(true)
Modal.open({

$neoModal.closeAll()

$neoModal.open({
parent: instance?.proxy,
onCancel: () => {
preferencesStore.setShoppingCartCollapse(false)
},
...ShoppingCartModalConfig,
} as unknown as BModalConfig)
})
}
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ const props = defineProps<{

const { apiInstance } = useApi()
const { urlPrefix, tokenId } = usePrefix()
const { $route, $i18n, $buefy } = useNuxtApp()
const { $route, $i18n, $neoModal } = useNuxtApp()
const { transaction, status, isLoading } = useTransaction()
const { accountId } = useAuth()
const { decimals } = useChain()
Expand Down Expand Up @@ -160,7 +160,7 @@ const disabledConfirmBtn = computed(

function toggleActive() {
if (!connected.value) {
$buefy.modal.open({
$neoModal.open({
parent: root?.value,
...ConnectWalletModalConfig,
})
Expand Down
17 changes: 7 additions & 10 deletions components/navbar/NotificationBoxButton.vue
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@

<script setup lang="ts">
import { NeoIcon } from '@kodadot1/brick'
import { ModalProgrammatic as Modal } from 'buefy'
import { BModalConfig } from 'buefy/types/components'
import { NotificationBoxModalConfig } from '@/components/common/NotificationBox/useNotificationBox'
import { usePreferencesStore } from '@/stores/preferences'

Expand All @@ -20,26 +18,25 @@ const instance = getCurrentInstance()
const emit = defineEmits(['closeBurgerMenu'])
const isMobile = ref(window.innerWidth < 1024)

const { $neoModal } = useNuxtApp()

function toggleNotificationModal() {
if (isMobile.value) {
emit('closeBurgerMenu')
}

$neoModal.closeAll()

if (!document.querySelector('.notification-box-modal')) {
preferencesStore.setNotificationBoxCollapse(true)
Modal.open({

$neoModal.open({
parent: instance?.proxy,
onCancel: () => {
preferencesStore.setNotificationBoxCollapse(false)
},
...NotificationBoxModalConfig,
} as unknown as BModalConfig)
})
}

// close all modal
document.querySelectorAll('.modal').forEach((modal) => {
modal.__vue__?.$vnode?.context?.close()
modal.remove()
})
}
</script>
16 changes: 5 additions & 11 deletions components/navbar/ProfileDropdown.vue
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
class="button-connect-wallet px-4"
variant="k-accent"
no-shadow
:modal-toggle-disabled="true"
@toggleConnectModal="toggleWalletConnectModal" />
</div>
</div>
Expand Down Expand Up @@ -72,13 +71,12 @@ import { useIdentityStore } from '@/stores/identity'
import { useLangStore } from '@/stores/lang'
import { langsFlags as langsFlagsList } from '@/utils/config/i18n'
import { ConnectWalletModalConfig } from '@/components/common/ConnectWallet/useConnectWallet'
import type { BModalConfig } from 'buefy/types/components'
import { ModalProgrammatic as Modal } from 'buefy'

const identityStore = useIdentityStore()
const langStore = useLangStore()
const instance = getCurrentInstance()
const { isDarkMode } = useTheme()
const { $neoModal } = useNuxtApp()

const languageDropdown = ref(null)
const modal = ref<{ close: () => void; isActive?: boolean } | null>(null)
Expand All @@ -95,18 +93,14 @@ const setUserLang = (value: string) => {
}

const toggleWalletConnectModal = () => {
$neoModal.closeAll()

if (!document.querySelector('.connect-wallet-modal')) {
modal.value = Modal.open({
modal.value = $neoModal.open({
parent: instance?.proxy,
...ConnectWalletModalConfig,
} as unknown as BModalConfig)
})
}

// close all modal
document.querySelectorAll('.modal').forEach((modal) => {
modal.__vue__?.$vnode?.context?.close()
modal.remove()
})
}

const toggleLanguageMenu = () => {
Expand Down
9 changes: 3 additions & 6 deletions components/navbar/ShoppingCartButton.vue
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import ActiveCount from '../explore/ActiveCount.vue'
import { useShoppingCartStore } from '@/stores/shoppingCart'
const { urlPrefix } = usePrefix()

const { $neoModal } = useNuxtApp()
const shoppingCartStore = useShoppingCartStore()
const numberOfItems = computed(
() => shoppingCartStore.getItemsByPrefix(urlPrefix.value).length
Expand All @@ -43,16 +44,12 @@ function toggleShoppingCartModal() {
emit('closeBurgerMenu')
}

$neoModal.closeAll()

// can use the function in ShoppingCartModalConfig
if (!isShoppingCartOpen()) {
openShoppingCart(instance)
}

// close all modal
document.querySelectorAll('.modal').forEach((modal) => {
modal.__vue__?.$vnode?.context?.close()
modal.remove()
})
}
</script>

Expand Down
14 changes: 6 additions & 8 deletions components/redirect/useRedirectModal.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import RedirectModal from './RedirectModal.vue'
import { EXTERNAL_LINK_WHITELIST } from '@/utils/constants'
import { ModalProgrammatic as Modal } from 'buefy'
import { BModalConfig } from 'buefy/types/components'
import VueI18n from 'vue-i18n/types'
import {
convertSingularCollectionUrlToKodadotUrl,
Expand All @@ -26,20 +24,20 @@ function isWhiteList(url: string) {
})
}

const showModal = (url: string, i18n: VueI18n) => {
Modal.open({
const showModal = (url: string, i18n: VueI18n, modal) => {
modal.open({
component: RedirectModal,
canCancel: ['outside', 'escape'],
customClass: 'redirect-modal',
rootClass: 'redirect-modal',
props: {
url,
i18n,
},
} as unknown as BModalConfig)
})
}

export const useRedirectModal = (target: string) => {
const { $i18n } = useNuxtApp()
const { $i18n, $neoModal } = useNuxtApp()
const _dom = computed(() => document.querySelector(target) || document.body)

const handleLink = (event: Event) => {
Expand All @@ -51,7 +49,7 @@ export const useRedirectModal = (target: string) => {
const href = convertSingularCollectionUrlToKodadotUrl(ele.href)

if (href && isExternal(href) && !isWhiteList(href)) {
showModal(href, $i18n)
showModal(href, $i18n, $neoModal)
} else if (href) {
window.open(href, '_blank')
}
Expand Down
4 changes: 2 additions & 2 deletions components/rmrk/Gallery/EmotionList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ import Identity from '@/components/identity/IdentityIndex.vue'

const issuerId = (emotion: Emotion) => emotion.caller
const DISPLAYED_EMOJI = 5
const { $buefy } = useNuxtApp()
const { $neoModal } = useNuxtApp()
const instance = getCurrentInstance()

const props = defineProps<{
Expand All @@ -60,7 +60,7 @@ const parseEmoji = (codepoint): string => {
}

const openEmotionModal = () => {
$buefy.modal.open({
$neoModal.open({
parent: instance?.proxy,
component: EmotionModal,
canCancel: ['escape', 'outside'],
Expand Down
Loading