diff --git a/app/components/AppNavigation.vue b/app/components/AppNavigation.vue index 24c7da8..3095f8b 100644 --- a/app/components/AppNavigation.vue +++ b/app/components/AppNavigation.vue @@ -34,8 +34,13 @@ :to="item.path" :class="{ active: isActive(item.path) }" @click="handleNavigate" - >{{ item.label }} + {{ item.label }} + {{ pendingCount }} + @@ -129,7 +134,21 @@ const emit = defineEmits(["navigate"]); const route = useRoute(); const { isAuthenticated, logout } = useAuth(); +const { getPendingCount } = useConnections(); const isDev = import.meta.dev; +const pendingCount = ref(0); + +// Fetch pending connection count for authenticated users +onMounted(async () => { + if (isAuthenticated.value) { + try { + const data = await getPendingCount(); + pendingCount.value = data.count || 0; + } catch { + // Silently ignore — badge is non-critical + } + } +}); const handleNavigate = () => { if (props.isMobile) { @@ -279,4 +298,19 @@ const exploreItems = [ .sidebar-meta a { color: var(--candle-dim); } + +.nav-badge { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 16px; + height: 16px; + padding: 0 4px; + margin-left: 6px; + font-size: 10px; + line-height: 1; + color: var(--bg); + background: var(--candle); + border-radius: 0; +} diff --git a/app/composables/useConnections.js b/app/composables/useConnections.js new file mode 100644 index 0000000..6bf3833 --- /dev/null +++ b/app/composables/useConnections.js @@ -0,0 +1,32 @@ +export const useConnections = () => { + const getSuggestions = (params = {}) => + $fetch('/api/connections/suggestions', { params }) + + const getMyConnections = () => + $fetch('/api/connections') + + const requestConnection = (recipientId) => + $fetch('/api/connections', { method: 'POST', body: { recipientId } }) + + const confirmConnection = (id) => + $fetch(`/api/connections/${id}/confirm`, { method: 'POST' }) + + const hideConnection = (id) => + $fetch(`/api/connections/${id}/hide`, { method: 'POST' }) + + const withdrawConnection = (id) => + $fetch(`/api/connections/${id}/withdraw`, { method: 'POST' }) + + const getPendingCount = () => + $fetch('/api/connections/pending-count') + + return { + getSuggestions, + getMyConnections, + requestConnection, + confirmConnection, + hideConnection, + withdrawConnection, + getPendingCount, + } +} diff --git a/app/pages/connections.vue b/app/pages/connections.vue new file mode 100644 index 0000000..833c324 --- /dev/null +++ b/app/pages/connections.vue @@ -0,0 +1,834 @@ + + + + + + + + Loading connections... + + + + + + + All topics + + {{ tag.label }} + + + + All states + Can help + Interested + Need help + + + + + + Suggested Connections + + + + + + + {{ getInitials(suggestion.member.name) }} + + + + + {{ suggestion.member.name }} + + + + + + + + + + + {{ craftTagLabel(tag) }} + + + + + + {{ cooperativeTagLabel(match.tagSlug) }} + + You: {{ stateLabel(match.yourState) }} + · + They: {{ stateLabel(match.theirState) }} + + + + + + + + Mark as connected + + + Hide + + + + + + + No suggestions right now + + Add cooperative topics to your + profile + to find members with shared interests + + + + + + + Your Connections + + + + Pending Incoming + + + + + + {{ getInitials(getOtherMember(conn).name) }} + + + + + {{ getOtherMember(conn).name }} + + + + + Wants to connect + + + + + + {{ cooperativeTagLabel(mt.tagSlug) }} + + + + + Confirm + + + + + + + + + Pending Outgoing + + + + + + {{ getInitials(getOtherMember(conn).name) }} + + + + + {{ getOtherMember(conn).name }} + + + + + Pending + + + + + + {{ cooperativeTagLabel(mt.tagSlug) }} + + + + + Withdraw + + + + + + + + + Connected + + + + + + {{ getInitials(getOtherMember(conn).name) }} + + + + + {{ getOtherMember(conn).name }} + + + + + @{{ getSlackHandle(conn) }} + + + + + + {{ cooperativeTagLabel(mt.tagSlug) }} + + + + + + + + + You don't have any connections yet. Use the suggestions above to get started. + + + + + + + + + Show {{ hiddenCount }} hidden suggestion{{ hiddenCount === 1 ? '' : 's' }} + + + + + + + Loading connections... + + + + + + + + + diff --git a/app/pages/peer-support.vue b/app/pages/peer-support.vue index 682319d..1e26164 100644 --- a/app/pages/peer-support.vue +++ b/app/pages/peer-support.vue @@ -3,10 +3,10 @@
Loading connections...
No suggestions right now
+ Add cooperative topics to your + profile + to find members with shared interests +
+ You don't have any connections yet. Use the suggestions above to get started. +