1import React, { useState } from 'react';
3function SlackCard({ config, status, loading, onConfigure, tenantId }) {
4 const [webhookUrl, setWebhookUrl] = useState(config?.slack?.webhookUrl || '');
5 const [channel, setChannel] = useState(config?.slack?.channel || '');
6 const [saving, setSaving] = useState(false);
7 const [saveStatus, setSaveStatus] = useState('');
9 const handleSave = async () => {
13 const res = await fetch(`/api/slack/settings/${tenantId}`, {
15 headers: { 'Content-Type': 'application/json' },
16 body: JSON.stringify({
17 slack: { webhookUrl, channel }
21 setSaveStatus('Connected to Slack');
23 setSaveStatus('Failed to save Slack settings');
26 setSaveStatus('Error saving Slack settings');
32 <div className="config-card">
33 <h3>Slack Integration</h3>
34 <p>Send notifications and ticket updates to Slack channels.</p>
35 <div className="form-row">
38 <input type="text" value={webhookUrl} onChange={e => setWebhookUrl(e.target.value)} style={{ width: '320px' }} />
41 <div className="form-row">
44 <input type="text" value={channel} onChange={e => setChannel(e.target.value)} style={{ width: '180px' }} />
47 <button onClick={handleSave} disabled={saving || loading} className="btn-primary">
48 {saving || loading ? 'Saving...' : 'Save Slack Settings'}
50 {(status || saveStatus) && (
51 <div className={`status-message ${(status || saveStatus).startsWith('Connected') ? 'success' : 'error'}`}>
52 {status || saveStatus}
56 <div className="current-config">
57 <b>Current config:</b> {JSON.stringify(config)}
64export default SlackCard;