import { useState } from "react"; import { api } from "../../api/client"; import { t } from "../../i18n"; import { FormField } from "../../shared/form-controls"; import { Button, CopyButton } from "../../shared/ui-controls"; import { formatAllowedOrigins, invalidAllowedOrigin, parseAllowedOrigins, webWidgetSnippet, type Integration, } from "./model"; export function WebIntegrationBasics({ integration, onSaved }: { integration: Integration; onSaved: (updated: Integration) => void; }) { const [name, setName] = useState(integration.name); const [allowedOrigins, setAllowedOrigins] = useState(formatAllowedOrigins(integration.config.allowedOrigins)); const [busy, setBusy] = useState(false); const [error, setError] = useState(null); const origins = parseAllowedOrigins(allowedOrigins); const badOrigin = invalidAllowedOrigin(origins); const ready = Boolean(name.trim() && origins.length && !badOrigin); const snippet = integration.webChatWidget ? webWidgetSnippet(integration.webChatWidget.publicKey) : ""; async function save() { if (!ready) return; setBusy(true); setError(null); try { const response = await api<{ integration: Integration }>(`/api/v1/integrations/${integration.id}/`, { method: "PATCH", body: JSON.stringify({ name: name.trim(), config: { ...integration.config, allowedOrigins: origins } }), }); onSaved(response.integration); } catch (caught) { setError(caught instanceof Error ? caught.message : t("common.could_not_save")); } finally { setBusy(false); } } return (
{t("settings.sites_where_widget_may_open")}
{snippet &&
} {error &&
{error}
}
); }