Skip to content
25 changes: 25 additions & 0 deletions app/components/Package/Versions.vue
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ const props = defineProps<{
selectedVersion?: string
}>()

const QUERY_MODAL_VALUE = 'versions'
const chartModal = useModal('chart-modal')
const hasDistributionModalTransitioned = shallowRef(false)
const isDistributionModalOpen = shallowRef(false)
Expand All @@ -34,13 +35,23 @@ function clearDistributionModalFallbackTimer() {
}
}

const router = useRouter()
const route = useRoute()

async function openDistributionModal() {
isDistributionModalOpen.value = true
hasDistributionModalTransitioned.value = false
// ensure the component renders before opening the dialog
await nextTick()
chartModal.open()

await router.replace({
query: {
...route.query,
modal: QUERY_MODAL_VALUE,
},
})

// Fallback: Force mount if transition event doesn't fire
clearDistributionModalFallbackTimer()
distributionModalFallbackTimer = setTimeout(() => {
Expand All @@ -52,10 +63,24 @@ async function openDistributionModal() {

function closeDistributionModal() {
isDistributionModalOpen.value = false

router.replace({
query: {
...route.query,
modal: undefined,
},
})

hasDistributionModalTransitioned.value = false
clearDistributionModalFallbackTimer()
}

onMounted(() => {
if (route.query.modal === QUERY_MODAL_VALUE) {
openDistributionModal()
}
})

function handleDistributionModalTransitioned() {
hasDistributionModalTransitioned.value = true
clearDistributionModalFallbackTimer()
Expand Down
Loading