"use client"; /** * 메일 수신자 선택 컴포넌트 설정 패널 * 화면관리에서 컴포넌트 설정 시 사용 */ import React, { useEffect, useState, useCallback } from "react"; import { Label } from "@/components/ui/label"; import { Input } from "@/components/ui/input"; import { Switch } from "@/components/ui/switch"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import type { MailRecipientSelectorConfig } from "./types"; interface MailRecipientSelectorConfigPanelProps { config: MailRecipientSelectorConfig; onConfigChange: (config: MailRecipientSelectorConfig) => void; } export const MailRecipientSelectorConfigPanel: React.FC< MailRecipientSelectorConfigPanelProps > = ({ config, onConfigChange }) => { // 로컬 상태 const [localConfig, setLocalConfig] = useState({ toFieldName: "mailTo", ccFieldName: "mailCc", showCc: true, showInternalSelector: true, showExternalInput: true, toLabel: "수신자", ccLabel: "참조(CC)", required: true, ...config, }); // config prop 변경 시 로컬 상태 동기화 useEffect(() => { setLocalConfig({ toFieldName: "mailTo", ccFieldName: "mailCc", showCc: true, showInternalSelector: true, showExternalInput: true, toLabel: "수신자", ccLabel: "참조(CC)", required: true, ...config, }); }, [config]); // 설정 업데이트 함수 const updateConfig = useCallback( (key: keyof MailRecipientSelectorConfig, value: any) => { const newConfig = { ...localConfig, [key]: value }; setLocalConfig(newConfig); onConfigChange(newConfig); }, [localConfig, onConfigChange] ); return (
{/* 필드명 설정 */} 필드명 설정
updateConfig("toFieldName", e.target.value)} placeholder="mailTo" className="h-8 text-sm" />

formData에 저장될 수신자 필드명 (제어에서 {`{{mailTo}}`}로 사용)

updateConfig("ccFieldName", e.target.value)} placeholder="mailCc" className="h-8 text-sm" />

formData에 저장될 참조 필드명 (제어에서 {`{{mailCc}}`}로 사용)

{/* 표시 옵션 */} 표시 옵션

참조 수신자 입력 필드 표시

updateConfig("showCc", checked)} />

회사 내부 사용자 선택 기능

updateConfig("showInternalSelector", checked) } />

외부 이메일 직접 입력 기능

updateConfig("showExternalInput", checked) } />

수신자 필수 입력 여부

updateConfig("required", checked)} />
{/* 라벨 설정 */} 라벨 설정
updateConfig("toLabel", e.target.value)} placeholder="수신자" className="h-8 text-sm" />
updateConfig("ccLabel", e.target.value)} placeholder="참조(CC)" className="h-8 text-sm" />
{/* 제한 설정 */} 제한 설정
updateConfig( "maxRecipients", e.target.value ? parseInt(e.target.value) : undefined ) } placeholder="무제한" className="h-8 text-sm" />
updateConfig( "maxCcRecipients", e.target.value ? parseInt(e.target.value) : undefined ) } placeholder="무제한" className="h-8 text-sm" />
{/* 사용 안내 */}

사용 방법

  1. 이 컴포넌트를 모달 화면에 배치합니다.
  2. 제어관리의 메일 발송 노드에서 수신자를{" "} {`{{mailTo}}`}로 설정합니다.
  3. 참조는{" "} {`{{mailCc}}`}로 설정합니다.
  4. 부모 화면에서 선택한 데이터는 별도 변수로 접근 가능합니다.
); }; export default MailRecipientSelectorConfigPanel;