Proje: Okul.com.tr CRM · Hub: Okul.com.tr CRM — Conventions
ActionConfirmationDialog Bileşeni
src/components/common/ActionConfirmationDialog.tsx
Kullanım Amacı
Geri alınamaz veya dış sistemlere etki eden aksiyonlar (CIO, email, bildirim) için onay dialog’u. Aksiyonun sistem etkilerini gösterir, countdown ile kasıtlılık sağlar.
Temel Props
interface ActionConfirmationDialogProps {
open: boolean;
onOpenChange: (open: boolean) => void;
title: string;
description?: string;
systemEffects: SystemEffect[]; // Liste görüntülenen etkiler
onConfirm: () => Promise<boolean>;
confirmButtonText?: string;
cancelButtonText?: string;
countdownSeconds?: number; // default: 10
variant?: 'approve' | 'reject' | 'warning';
children?: React.ReactNode; // Dialog içine ek içerik
}SystemEffect Tipi
interface SystemEffect {
icon?: React.ReactNode;
text: string;
type?: 'info' | 'warning' | 'success';
}Kullanım Örneği
const systemEffects: SystemEffect[] = [
{ icon: <Bell />, text: "Customer.io'ya event gönderilecek", type: 'info' },
{ icon: <Mail />, text: "Kullanıcıya e-posta gönderilecek", type: 'success' }
];
<ActionConfirmationDialog
open={isOpen}
onOpenChange={setIsOpen}
title="Yorumu Onayla"
description="Bu işlem geri alınamaz."
systemEffects={systemEffects}
onConfirm={handleConfirm}
countdownSeconds={10}
variant="approve"
/>Dialog Durumları
initial— Effects listesi gösterilir, “Devam Et” butonucountdown— Geri sayım + progress bar + “Hızlandır” seçeneğiexecuting— Spinner, onConfirm() çalışıyor
Collapsible Effects
3’ten fazla effect varsa (COLLAPSE_THRESHOLD = 3), ilk 2’si gösterilir, kalanlar collapsible’a alınır.
Effect Renkleri
type: 'info'→ mavi arka plantype: 'warning'→ sarı arka plantype: 'success'→ yeşil arka plan- tip yok → muted arka plan
Nerede Kullanılır
article-comments— makale yorum onay/retschool-comments— okul yorum onay/ret
Related
- okul-yorumlari-modeli — approve/reject akışı
- form-pattern — Dialog’larda form kullanımı