Skip to content

Commit 65b3d76

Browse files
feat(ui): add versions modal permalink
1 parent 3d99592 commit 65b3d76

1 file changed

Lines changed: 25 additions & 0 deletions

File tree

app/components/Package/Versions.vue

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ const props = defineProps<{
2222
selectedVersion?: string
2323
}>()
2424
25+
const QUERY_MODAL_VALUE = 'versions'
2526
const chartModal = useModal('chart-modal')
2627
const hasDistributionModalTransitioned = shallowRef(false)
2728
const isDistributionModalOpen = shallowRef(false)
@@ -34,13 +35,23 @@ function clearDistributionModalFallbackTimer() {
3435
}
3536
}
3637
38+
const router = useRouter()
39+
const route = useRoute()
40+
3741
async function openDistributionModal() {
3842
isDistributionModalOpen.value = true
3943
hasDistributionModalTransitioned.value = false
4044
// ensure the component renders before opening the dialog
4145
await nextTick()
4246
chartModal.open()
4347
48+
await router.replace({
49+
query: {
50+
...route.query,
51+
modal: QUERY_MODAL_VALUE,
52+
},
53+
})
54+
4455
// Fallback: Force mount if transition event doesn't fire
4556
clearDistributionModalFallbackTimer()
4657
distributionModalFallbackTimer = setTimeout(() => {
@@ -52,10 +63,24 @@ async function openDistributionModal() {
5263
5364
function closeDistributionModal() {
5465
isDistributionModalOpen.value = false
66+
67+
router.replace({
68+
query: {
69+
...route.query,
70+
modal: undefined,
71+
},
72+
})
73+
5574
hasDistributionModalTransitioned.value = false
5675
clearDistributionModalFallbackTimer()
5776
}
5877
78+
onMounted(() => {
79+
if (route.query.modal === QUERY_MODAL_VALUE) {
80+
openDistributionModal()
81+
}
82+
})
83+
5984
function handleDistributionModalTransitioned() {
6085
hasDistributionModalTransitioned.value = true
6186
clearDistributionModalFallbackTimer()

0 commit comments

Comments
 (0)