"use client"; import React, { useState } from "react"; import { ComponentRendererProps } from "@/types/component"; import { CheckboxBasicConfig } from "./types"; import { cn } from "@/lib/registry/components/common/inputStyles"; import { filterDOMProps } from "@/lib/utils/domPropsFilter"; export interface CheckboxBasicComponentProps extends ComponentRendererProps { config?: CheckboxBasicConfig; } /** * CheckboxBasic 컴포넌트 * checkbox-basic 컴포넌트입니다 */ export const CheckboxBasicComponent: React.FC = ({ component, isDesignMode = false, isSelected = false, isInteractive = false, onClick, onDragStart, onDragEnd, config, className, style, formData, onFormDataChange, ...props }) => { // 컴포넌트 설정 const componentConfig = { ...config, ...component.config, } as CheckboxBasicConfig; // webType에 따른 세부 타입 결정 (TextInputComponent와 동일한 방식) const webType = component.componentConfig?.webType || "checkbox"; // 상태 관리 const [isChecked, setIsChecked] = useState(component.value === true || component.value === "true"); const [checkedValues, setCheckedValues] = useState([]); // 스타일 계산 (위치는 RealtimePreviewDynamic에서 처리하므로 제외) const componentStyle: React.CSSProperties = { width: "100%", height: "100%", ...component.style, ...style, }; // 디자인 모드 스타일 if (isDesignMode) { componentStyle.border = "1px dashed #cbd5e1"; componentStyle.borderColor = isSelected ? "#3b82f6" : "#cbd5e1"; } // 이벤트 핸들러 const handleClick = (e: React.MouseEvent) => { e.stopPropagation(); onClick?.(); }; const handleCheckboxChange = (checked: boolean) => { setIsChecked(checked); if (component.onChange) { component.onChange(checked); } if (isInteractive && onFormDataChange && component.columnName) { onFormDataChange(component.columnName, checked); } }; const handleGroupChange = (value: string, checked: boolean) => { const newValues = checked ? [...checkedValues, value] : checkedValues.filter((v) => v !== value); setCheckedValues(newValues); if (isInteractive && onFormDataChange && component.columnName) { onFormDataChange(component.columnName, newValues.join(",")); } }; // DOM 안전한 props만 필터링 const safeDomProps = filterDOMProps(props); // 세부 타입별 렌더링 const renderCheckboxByWebType = () => { // boolean: On/Off 스위치 if (webType === "boolean") { return (