feat: configureerbare itemnamen per vragenlijst

Voeg item_label en item_label_plural toe aan questionnaires (migratie),
beheerformulier en dynamische teksten in UI en API-fouten. Standaard
blijft Activiteit/Activiteiten.

Negeer tsbuildinfo en geëmitteerde vite.config.js/.d.ts in .gitignore.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-10 15:29:44 +02:00
parent 6871126788
commit 93aedf319b
9 changed files with 234 additions and 42 deletions

View File

@@ -6,7 +6,7 @@ import path from 'path';
import fs from 'fs';
import { fileURLToPath } from 'url';
import { initializeDatabase, questionnaireOps, participantOps } from './database.js';
import { initializeDatabase, questionnaireOps, participantOps, resolveItemLabels } from './database.js';
import authRoutes from './routes/auth.js';
import adminRoutes from './routes/admin.js';
import questionnaireRoutes from './routes/questionnaire.js';
@@ -108,7 +108,9 @@ if (isProduction) {
const baseUrl = `${req.protocol}://${req.get('host')}`;
const pageUrl = `${baseUrl}/q/${questionnaire.slug}`;
const title = questionnaire.title;
const description = questionnaire.description || 'Activiteiten Inventaris - Voeg activiteiten toe en stem!';
const { plural } = resolveItemLabels(questionnaire);
const description =
questionnaire.description || `Voeg ${plural.toLowerCase()} toe en stem!`;
// Make image URL absolute if it's a relative path
let ogImageUrl = questionnaire.og_image;
@@ -122,7 +124,7 @@ if (isProduction) {
html = html.replace('</head>', `${ogTags}</head>`);
// Update title
html = html.replace(/<title>.*?<\/title>/, `<title>${title} - Activiteiten Inventaris</title>`);
html = html.replace(/<title>.*?<\/title>/, `<title>${title}</title>`);
res.send(html);
});
@@ -153,8 +155,10 @@ if (isProduction) {
// Get first name from participant name
const firstName = participant.name.trim().split(/\s+/)[0] || participant.name;
const description = questionnaire.description
|| `Hoi ${firstName}! Voeg je ideeën toe en stem op activiteiten.`;
const { plural } = resolveItemLabels(questionnaire);
const description =
questionnaire.description ||
`Hoi ${firstName}! Voeg je ideeën toe en stem op ${plural.toLowerCase()}.`;
// Make image URL absolute if it's a relative path
let ogImageUrl = questionnaire.og_image;