'use client'; import type { WelcomeConfigDashboard, WelcomeEmbed } from '@nexumi/shared'; import { FieldAnchor } from '@/components/layout/field-anchor'; import { useTranslations } from '@/components/locale-provider'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { DiscordChannelSelect } from '@/components/ui/discord-channel-select'; import { DiscordEmbedBuilder, embedFromUnknown, normalizeEmbed } from '@/components/ui/discord-embed-builder'; import { DiscordRoleMultiSelect } from '@/components/ui/discord-role-select'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { PlaceholderHelp } from '@/components/ui/placeholder-help'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Switch } from '@/components/ui/switch'; import { Textarea } from '@/components/ui/textarea'; import type { SettingsSaveResult } from '@/components/settings/settings-form'; import { SettingsForm } from '@/components/settings/settings-form'; const WELCOME_PREVIEW_VARS = { user: '@Alex', 'user.name': 'Alex', 'user.tag': 'Alex', 'user.id': '123456789012345678', server: 'Nexumi', memberCount: '128' }; interface LocalWelcomeValue extends Omit { welcomeEmbed: WelcomeEmbed | null; leaveEmbed: WelcomeEmbed | null; } function toLocal(config: WelcomeConfigDashboard): LocalWelcomeValue { return { ...config, welcomeEmbed: embedFromUnknown(config.welcomeEmbed), leaveEmbed: embedFromUnknown(config.leaveEmbed) }; } async function saveWelcome(guildId: string, value: LocalWelcomeValue): Promise { const payload: WelcomeConfigDashboard = { ...value, welcomeEmbed: normalizeEmbed(value.welcomeEmbed), leaveEmbed: normalizeEmbed(value.leaveEmbed) }; try { const response = await fetch(`/api/guilds/${guildId}/welcome`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); if (!response.ok) { const body = (await response.json().catch(() => null)) as { error?: string } | null; return { ok: false, error: body?.error ?? `Request failed with status ${response.status}` }; } return { ok: true }; } catch { return { ok: false, error: 'Network error' }; } } interface WelcomeFormProps { guildId: string; initialValue: WelcomeConfigDashboard; } export function WelcomeForm({ guildId, initialValue }: WelcomeFormProps) { const t = useTranslations(); return ( initialValue={toLocal(initialValue)} onSave={(value) => saveWelcome(guildId, value)}> {({ value, setValue }) => (
{t('modulePages.welcome.welcomeTitle')} {t('modulePages.welcome.welcomeDescription')}
setValue((prev) => ({ ...prev, welcomeEnabled: checked }))} />
setValue((prev) => ({ ...prev, welcomeChannelId }))} />