doxa-maps/plugin-designs/wall-of-people-groups/wall-of-people-groups.vue
Doxa Maps 192c652ad4 Wall of People Groups, Social: comments say "coming soon", and the heart links to the group's prayer sign-up
- COMMENT (and "View prayers") showed an empty comments board; it now says "Comments are coming soon."
  The unreachable CommentsDialog is removed.
- HEART: "Yes, I'm praying" still stores the prayer in this browser (localStorage, wall-pg:prayers), and the
  dialog now links "Sign up to pray for <group>" to the group's sign-up on pray.doxa.life
  (https://pray.doxa.life/<slug>#signup-section, the page's own sign-up section), in a new tab.
- The prayer dialog scrolls when it is taller than the window: it clipped at 90vh with overflow hidden,
  so on a laptop everything under the photo could not be reached. The photo now gives way (at most 38vh),
  so the question, "Yes, I'm praying" and the sign-up link all show at 1440 x 900.
- SHARE already shares the group's pray.doxa.life page (unchanged).

The two sentences live in a NEW area, wallSocial (11 locales), which only this bundle names (0 other
bundles carry it). Exercised at 1440 in en and ar: the toast and the link (href, new tab, noopener).
2026-10-01 05:44:40 +00:00

57 lines
2.5 KiB
Vue

<script>
/**
* wall-of-people-groups.vue — Wall of People Groups: every Doxa people group on one zoomable wall.
*
* @description Every Doxa people group as a card on one zoomable prayer wall
* @profile wall-of-people-groups
* @bundle wall-of-people-groups
* @element wall-of-people-groups
*
* MOVED 2026-09-25 from the wall-of-people-groups no-build SPA (far-fast-tools, read-only). Its
* components were plain objects with template strings compiled in the browser; they are now SFCs
* in src/components. This file is the app container from its main.js, without the router (the
* only other route was an API developer panel, which does not ship).
*
* Data: the live pray.doxa.life people-group list (2,107 groups, with photos and prayer counts).
* Prayers and comments stay in this browser's localStorage, under a 'wall-pg:' prefix.
* d3 is loaded on first mount, pinned and integrity-checked, and kept off the host's window.d3
* (src/wallD3.js). Font Awesome is no longer used: the canvas draws its own icons.
*/
import PeopleGroupsWall from './src/components/PeopleGroupsWall.vue'
import PrayerDialog from './src/components/PrayerDialog.vue'
import { ensureD3 } from './src/wallD3.js'
export default {
name: 'WallOfPeopleGroups',
components: { PeopleGroupsWall, PrayerDialog },
data() {
return { ready: false, error: null, prayerDialogVisible: false, selectedGroup: null }
},
mounted() {
ensureD3().then(() => { this.ready = true }, (e) => { this.error = e.message })
},
methods: {
openPrayerDialog(group) { this.selectedGroup = group; this.prayerDialogVisible = true },
closePrayerDialog() {
this.prayerDialogVisible = false
setTimeout(() => { this.selectedGroup = null }, 300)
},
handlePrayerConfirmed() { /* PrayerDialog already updated the store */ },
},
}
</script>
<template>
<div class="app-container">
<people-groups-wall v-if="ready" @open-prayer="openPrayerDialog" />
<div v-else-if="error" class="wall-error">{{ $t('wall.drawLibError') }} {{ error }}</div>
<prayer-dialog :is-open="prayerDialogVisible" :group="selectedGroup" @close="closePrayerDialog" @prayer-confirmed="handlePrayerConfirmed" />
</div>
</template>
<style src="./src/wall.css"></style>
<style>
:host { display: block; position: relative; min-height: 600px; }
.app-container { position: relative; width: 100%; height: 100%; }
.wall-error { padding: 24px; color: #3b463d; font: 14px/1.5 -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; }
</style>