feat(ui): expand real NIP-99 router listings view

This commit is contained in:
yaya
2026-10-09 13:37:00 +01:00
parent 70cd80c3e8
commit d4d6a655e7
2 changed files with 15 additions and 5 deletions
+12 -3
View File
@@ -1,6 +1,9 @@
<script setup lang="ts">
import { computed, onBeforeUnmount, ref, watch } from 'vue'
const props = withDefaults(defineProps<{ expanded?: boolean }>(), { expanded: false })
const emit = defineEmits<{ open: []; close: [] }>()
interface RouterListing {
id: string
pubkey: string
@@ -101,8 +104,13 @@ async function search() {
loading.value = false
if (!listings.value.length) error.value = 'No active OpenWrt router listings answered from the configured public relays.'
}
function openShop() { open.value = true; if (!listings.value.length) void search() }
function closeShop() { open.value = false; closeSockets() }
function openShop() {
open.value = true
query.value = 'openwrt'
emit('open')
if (!listings.value.length) void search()
}
function closeShop() { open.value = false; closeSockets(); emit('close') }
function formatPrice(item: RouterListing) {
if (!item.price) return 'Price on request'
return `${item.price.amount} ${item.price.currency.toUpperCase()}${item.price.frequency ? ` / ${item.price.frequency}` : ''}`
@@ -112,7 +120,7 @@ onBeforeUnmount(closeSockets)
</script>
<template>
<section class="router-marketplace lg:mt-0" aria-labelledby="router-marketplace-title">
<section class="router-marketplace lg:mt-0" :class="{ 'router-marketplace--expanded': props.expanded }" aria-labelledby="router-marketplace-title">
<div class="glass-card p-5 md:p-6">
<template v-if="!open">
<p class="text-xs uppercase tracking-[.18em] text-white/40">OpenWrt gateway</p>
@@ -162,6 +170,7 @@ onBeforeUnmount(closeSockets)
<style scoped>
.router-marketplace { margin-top: 16px; }
.router-marketplace--expanded { grid-column: 1 / -1; margin-top: 0; }
.router-marketplace__cta { display: inline-flex; align-items: center; gap: 10px; }
@media (max-width: 1023px) {
.router-marketplace__cta { width: 100%; justify-content: center; }
+3 -2
View File
@@ -115,6 +115,7 @@ const host = ref('')
const sshUser = ref('root')
const sshPassword = ref('')
const showConnectForm = ref(false)
const routerShopOpen = ref(false)
const connecting = ref(false)
const connectedParams = ref<Record<string, string> | null>(null)
@@ -535,8 +536,8 @@ onMounted(() => {
<div class="glass-card p-6 mb-6 overflow-hidden router-model-card">
<div class="grid grid-cols-1 lg:grid-cols-[minmax(0,1fr)_minmax(280px,360px)] gap-6 items-start">
<DeviceModel model="beryl-ax" label="Beryl AX (GL-MT3000) OpenWrt router" fill-viewport :controls="false" />
<RouterMarketplace />
<DeviceModel v-if="!routerShopOpen" model="beryl-ax" label="Beryl AX (GL-MT3000) OpenWrt router" fill-viewport :controls="false" />
<RouterMarketplace :expanded="routerShopOpen" @open="routerShopOpen = true" @close="routerShopOpen = false" />
</div>
</div>