11'use client' ;
22
3- import { ColumnForm , columnFormSchema } from '@/apis/columns/types' ;
3+ import { ColumnForm , columnFormSchema , ColumnsResponse } from '@/apis/columns/types' ;
44import DashboardButton from '@/components/ui/Button/DashboardButton' ;
55import { zodResolver } from '@hookform/resolvers/zod' ;
66import { useForm } from 'react-hook-form' ;
@@ -13,20 +13,28 @@ import { useColumnMutation } from '@/apis/columns/queries';
1313import { getErrorMessage } from '@/utils/errorMessage' ;
1414import xIcon from '@/assets/icons/x.svg' ;
1515import Image from 'next/image' ;
16+ import { some } from 'es-toolkit/compat' ;
1617
17- export default function AddColumnBtn ( { dashboardId } : { dashboardId : number } ) {
18+ interface AddColumnBtnProps {
19+ dashboardId : number ;
20+ columns : ColumnsResponse [ 'data' ] | void ;
21+ }
22+
23+ export default function AddColumnBtn ( { dashboardId, columns } : AddColumnBtnProps ) {
1824 const {
1925 handleSubmit,
2026 register,
2127 reset,
2228 formState : { errors, isValid, isSubmitting, isDirty } ,
29+ setError,
2330 } = useForm < ColumnForm > ( {
2431 resolver : zodResolver ( columnFormSchema ) ,
2532 mode : 'onChange' ,
2633 defaultValues : {
2734 title : '' ,
2835 } ,
2936 } ) ;
37+
3038 const modalRef = useRef < ModalHandle > ( null ) ;
3139 const { create } = useColumnMutation ( dashboardId ) ;
3240 const alert = useAlert ( ) ;
@@ -38,6 +46,14 @@ export default function AddColumnBtn({ dashboardId }: { dashboardId: number }) {
3846
3947 const onSubmit = async ( formData : ColumnForm ) => {
4048 try {
49+ if ( columns ) {
50+ const isExist = some ( columns , { title : formData . title } ) ;
51+ if ( isExist ) {
52+ setError ( 'title' , { message : '중복된 컬럼 이름입니다.' } ) ;
53+ return ;
54+ }
55+ }
56+
4157 await create ( formData ) ;
4258 handleReset ( ) ;
4359 alert ( '컬럼이 생성되었습니다!' ) ;
0 commit comments