feat: add inquiry notification settings to admin settings UI
Some checks failed
Build & Push Docker Images / lint (push) Successful in 58s
Build & Push Docker Images / build-and-push (push) Failing after 3m57s

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-14 13:16:20 -04:00
parent d0c12d74e4
commit 4552187b9f

View File

@@ -27,7 +27,7 @@ const KNOWN_SETTINGS: Array<{
key: string;
label: string;
description: string;
type: 'boolean' | 'number' | 'json';
type: 'boolean' | 'number' | 'json' | 'string';
defaultValue: unknown;
}> = [
{
@@ -73,6 +73,22 @@ const KNOWN_SETTINGS: Array<{
type: 'json',
defaultValue: [],
},
{
key: 'inquiry_contact_email',
label: 'Inquiry Contact Email',
description:
'Reply-to email shown in client confirmation emails when a new interest is registered',
type: 'string',
defaultValue: 'sales@portnimara.com',
},
{
key: 'inquiry_notification_recipients',
label: 'External Notification Recipients',
description:
'Additional email addresses that receive sales notifications for new interests (JSON array)',
type: 'json',
defaultValue: [],
},
];
export function SettingsManager() {
@@ -187,6 +203,49 @@ export function SettingsManager() {
</CardContent>
</Card>
{/* String Settings */}
{KNOWN_SETTINGS.some((s) => s.type === 'string') && (
<Card>
<CardHeader>
<CardTitle>Inquiry Settings</CardTitle>
<CardDescription>Configure inquiry notification behavior</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
{KNOWN_SETTINGS.filter((s) => s.type === 'string').map((setting) => (
<div key={setting.key} className="flex items-center justify-between gap-4">
<div className="flex-1">
<Label>{setting.label}</Label>
<p className="text-xs text-muted-foreground">{setting.description}</p>
</div>
<div className="flex items-center gap-2">
<Input
type="text"
className="w-64"
value={String(getEffectiveValue(setting.key, setting.defaultValue) ?? '')}
onChange={(e) =>
setValues((prev) => ({
...prev,
[setting.key]: e.target.value,
}))
}
/>
<Button
size="sm"
variant="outline"
disabled={saving === setting.key}
onClick={() =>
saveSetting(setting.key, values[setting.key] ?? setting.defaultValue)
}
>
<Save className="h-3.5 w-3.5" />
</Button>
</div>
</div>
))}
</CardContent>
</Card>
)}
{/* Numeric Settings */}
<Card>
<CardHeader>