Rename communityEcology → board across frontend, add Board nav, update redirects

- Add Board to exploreItems in AppNavigation
- Update ecology.vue + connections.vue redirects to /board
- Rename all communityEcology refs to board in member profiles, dashboard, admin, onboarding
- Update API path /api/members/me/community-ecology → /api/members/me/board
This commit is contained in:
Jennie Robinson Faber 2026-04-14 12:15:51 +01:00
parent 3e5cedb1a6
commit cdef868256
9 changed files with 75 additions and 76 deletions

View file

@ -120,16 +120,16 @@
<div class="content-block">
<div class="section-label">Quick Actions</div>
<NuxtLink
to="/ecology"
to="/board"
class="quick-action"
:class="{ disabled: !canPeerSupport }"
:title="
!canPeerSupport
? 'Complete your membership to access community ecology'
? 'Complete your membership to access the board'
: ''
"
>
Community ecology<span class="arrow">&rarr;</span>
Board<span class="arrow">&rarr;</span>
</NuxtLink>
<NuxtLink to="/member/profile" class="quick-action">
Update your profile<span class="arrow">&rarr;</span>
@ -198,8 +198,8 @@
Connect with other members through shared interests and
cooperative topics.
</p>
<NuxtLink to="/ecology" class="section-link">
Browse community ecology &rarr;
<NuxtLink to="/board" class="section-link">
Browse the board &rarr;
</NuxtLink>
</DashedBox>
</div>

View file

@ -162,34 +162,34 @@
<template #right>
<PageSection>
<div class="section-label">Community Ecology</div>
<div class="section-label">Board</div>
<div class="field">
<label>Topics</label>
<CooperativeTagSelector
v-model="formData.communityEcologyTopics"
v-model="formData.boardTopics"
:tags="cooperativeTags"
@suggest="openTagSuggest('cooperative')"
/>
<PrivacyToggle v-model="formData.communityEcologyPrivacy" />
<PrivacyToggle v-model="formData.boardPrivacy" />
</div>
<div class="field">
<label>Details</label>
<textarea
v-model="formData.communityEcologyDetails"
v-model="formData.boardDetails"
rows="3"
placeholder="What are you hoping to connect about?"
maxlength="300"
></textarea>
<div class="char-count">
{{ formData.communityEcologyDetails?.length || 0 }} / 300
{{ formData.boardDetails?.length || 0 }} / 300
</div>
</div>
<div class="toggle-field">
<USwitch
v-model="formData.communityEcologyOfferPeerSupport"
v-model="formData.boardOfferPeerSupport"
aria-label="Offer Peer Support"
/>
<div class="toggle-label">
@ -200,11 +200,11 @@
</div>
</div>
<div v-if="formData.communityEcologyOfferPeerSupport" class="connections-panel">
<div v-if="formData.boardOfferPeerSupport" class="connections-panel">
<div class="field">
<label>Availability</label>
<textarea
v-model="formData.communityEcologyAvailability"
v-model="formData.boardAvailability"
rows="3"
placeholder="e.g. Weekday afternoons ET"
></textarea>
@ -213,7 +213,7 @@
<div class="field">
<label>Slack Handle</label>
<input
v-model="formData.communityEcologySlackHandle"
v-model="formData.boardSlackHandle"
type="text"
placeholder="@yourslackname"
/>
@ -222,13 +222,13 @@
<div class="field">
<label>Personal Message</label>
<textarea
v-model="formData.communityEcologyPersonalMessage"
v-model="formData.boardPersonalMessage"
rows="3"
maxlength="200"
placeholder="Brief note shown alongside your Slack handle"
></textarea>
<div class="char-count">
{{ formData.communityEcologyPersonalMessage?.length || 0 }} / 200
{{ formData.boardPersonalMessage?.length || 0 }} / 200
</div>
</div>
</div>
@ -339,13 +339,13 @@ const formData = reactive({
showInDirectory: true,
craftTags: [],
craftTagsPrivacy: "members",
communityEcologyTopics: [],
communityEcologyPrivacy: "members",
communityEcologyDetails: "",
communityEcologyOfferPeerSupport: false,
communityEcologyAvailability: "",
communityEcologySlackHandle: "",
communityEcologyPersonalMessage: "",
boardTopics: [],
boardPrivacy: "members",
boardDetails: "",
boardOfferPeerSupport: false,
boardAvailability: "",
boardSlackHandle: "",
boardPersonalMessage: "",
pronounsPrivacy: "members",
timeZonePrivacy: "members",
avatarPrivacy: "members",
@ -387,13 +387,13 @@ const loadProfile = () => {
? [...memberData.value.craftTags]
: [];
const ecology = memberData.value.communityEcology || {};
formData.communityEcologyTopics = Array.isArray(ecology.topics) ? [...ecology.topics] : [];
formData.communityEcologyOfferPeerSupport = ecology.offerPeerSupport ?? false;
formData.communityEcologyAvailability = ecology.availability || "";
formData.communityEcologySlackHandle = ecology.slackHandle || "";
formData.communityEcologyPersonalMessage = ecology.personalMessage || "";
formData.communityEcologyDetails = ecology.details || "";
const board = memberData.value.board || {};
formData.boardTopics = Array.isArray(board.topics) ? [...board.topics] : [];
formData.boardOfferPeerSupport = board.offerPeerSupport ?? false;
formData.boardAvailability = board.availability || "";
formData.boardSlackHandle = board.slackHandle || "";
formData.boardPersonalMessage = board.personalMessage || "";
formData.boardDetails = board.details || "";
const privacy = memberData.value.privacy || {};
formData.pronounsPrivacy = privacy.pronouns || "members";
@ -403,7 +403,7 @@ const loadProfile = () => {
formData.bioPrivacy = privacy.bio || "members";
formData.locationPrivacy = privacy.location || "members";
formData.craftTagsPrivacy = privacy.craftTags || "members";
formData.communityEcologyPrivacy = privacy.communityEcology || "members";
formData.boardPrivacy = privacy.board || "members";
const notifs = memberData.value.notifications || {};
formData.notifications.events = notifs.events ?? true;
@ -423,15 +423,15 @@ const handleSubmit = async () => {
method: "PATCH",
body: { ...formData },
}),
$fetch("/api/members/me/community-ecology", {
$fetch("/api/members/me/board", {
method: "PATCH",
body: {
topics: formData.communityEcologyTopics,
offerPeerSupport: formData.communityEcologyOfferPeerSupport,
availability: formData.communityEcologyAvailability,
slackHandle: formData.communityEcologySlackHandle,
personalMessage: formData.communityEcologyPersonalMessage,
details: formData.communityEcologyDetails,
topics: formData.boardTopics,
offerPeerSupport: formData.boardOfferPeerSupport,
availability: formData.boardAvailability,
slackHandle: formData.boardSlackHandle,
personalMessage: formData.boardPersonalMessage,
details: formData.boardDetails,
},
}),
]);