diff --git a/entrypoint.sh b/entrypoint.sh index 57a3d62..841b6e0 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -23,4 +23,83 @@ if [ -d "$SEED_DIR" ]; then done fi +# Merge newly added seeded platform links into existing admin content on upgrades +# without overwriting user-edited values already present in the live volume. +merge_seed_platform_links() { + target_file="$1" + seed_file="$2" + + [ -f "$target_file" ] || return 0 + [ -f "$seed_file" ] || return 0 + + node - "$target_file" "$seed_file" <<'NODE' +const fs = require('fs') + +const [targetFile, seedFile] = process.argv.slice(2) + +function readJson(file) { + return JSON.parse(fs.readFileSync(file, 'utf8')) +} + +function normalizeLinks(value) { + return Array.isArray(value) ? value.filter(item => item && typeof item === 'object') : [] +} + +const target = readJson(targetFile) +const seed = readJson(seedFile) + +if (!target.siteContent || !seed.siteContent) process.exit(0) + +const targetLinks = normalizeLinks(target.siteContent.customLinks) +const seedLinks = normalizeLinks(seed.siteContent.customLinks) + +let changed = false + +for (const seedLink of seedLinks) { + if (seedLink.placement !== 'platforms' || !seedLink.id || !seedLink.label || !seedLink.url) continue + + const existingIndex = targetLinks.findIndex(link => link.id === seedLink.id) + if (existingIndex === -1) { + targetLinks.push(seedLink) + changed = true + continue + } + + const existing = targetLinks[existingIndex] + const merged = { ...existing } + + if (!merged.imageUrl && seedLink.imageUrl) { + merged.imageUrl = seedLink.imageUrl + changed = true + } + + if (!merged.placement && seedLink.placement) { + merged.placement = seedLink.placement + changed = true + } + + if (!merged.label && seedLink.label) { + merged.label = seedLink.label + changed = true + } + + if (!merged.url && seedLink.url) { + merged.url = seedLink.url + changed = true + } + + targetLinks[existingIndex] = merged +} + +if (!changed) process.exit(0) + +target.siteContent.customLinks = targetLinks +fs.writeFileSync(targetFile, `${JSON.stringify(target, null, 2)}\n`) +console.log(`[siteforge] Merged seeded platform links into ${targetFile}`) +NODE +} + +merge_seed_platform_links "$DATA_DIR/admin-content.json" "$SEED_DIR/admin-content.json" +merge_seed_platform_links "$DATA_DIR/admin-content-draft.json" "$SEED_DIR/admin-content-draft.json" + exec node server.js diff --git a/public/images/follow-on-facebook.svg b/public/images/follow-on-facebook.svg new file mode 100644 index 0000000..1076da4 --- /dev/null +++ b/public/images/follow-on-facebook.svg @@ -0,0 +1,9 @@ + + + + + + + Follow on + Facebook + diff --git a/src/App.tsx b/src/App.tsx index 23e7150..2724420 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -3,7 +3,6 @@ import { Link, NavLink, Routes, Route, useLocation, useNavigate, useParams } fro import AdminPage from './AdminPage' import QASection from './components/QASection' import ContactForm from './components/ContactForm' -import { FacebookIcon, SpotifyIcon } from './icons' import type { SiteContent, ArchivedSeries } from './content' import { DEFAULTS } from './content' import './App.css' @@ -496,9 +495,8 @@ function PlatformButtons({ content }: { content: SiteContent }) { Listen on Amazon Music - - - Facebook + + Follow on Facebook {(content.customLinks ?? []).filter(l => l.placement === 'platforms').map(l => (