diff --git a/src/components/columns/AddColumnBtn.tsx b/src/components/columns/AddColumnBtn.tsx index 801ffaa..a402628 100644 --- a/src/components/columns/AddColumnBtn.tsx +++ b/src/components/columns/AddColumnBtn.tsx @@ -1,6 +1,6 @@ 'use client'; -import { ColumnForm, columnFormSchema } from '@/apis/columns/types'; +import { ColumnForm, columnFormSchema, ColumnsResponse } from '@/apis/columns/types'; import DashboardButton from '@/components/ui/Button/DashboardButton'; import { zodResolver } from '@hookform/resolvers/zod'; import { useForm } from 'react-hook-form'; @@ -13,13 +13,20 @@ import { useColumnMutation } from '@/apis/columns/queries'; import { getErrorMessage } from '@/utils/errorMessage'; import xIcon from '@/assets/icons/x.svg'; import Image from 'next/image'; +import { some } from 'es-toolkit/compat'; -export default function AddColumnBtn({ dashboardId }: { dashboardId: number }) { +interface AddColumnBtnProps { + dashboardId: number; + columns: ColumnsResponse['data'] | void; +} + +export default function AddColumnBtn({ dashboardId, columns }: AddColumnBtnProps) { const { handleSubmit, register, reset, formState: { errors, isValid, isSubmitting, isDirty }, + setError, } = useForm({ resolver: zodResolver(columnFormSchema), mode: 'onChange', @@ -27,6 +34,7 @@ export default function AddColumnBtn({ dashboardId }: { dashboardId: number }) { title: '', }, }); + const modalRef = useRef(null); const { create } = useColumnMutation(dashboardId); const alert = useAlert(); @@ -38,6 +46,14 @@ export default function AddColumnBtn({ dashboardId }: { dashboardId: number }) { const onSubmit = async (formData: ColumnForm) => { try { + if (columns) { + const isExist = some(columns, { title: formData.title }); + if (isExist) { + setError('title', { message: '중복된 컬럼 이름입니다.' }); + return; + } + } + await create(formData); handleReset(); alert('컬럼이 생성되었습니다!'); diff --git a/src/components/columns/ColumnList.tsx b/src/components/columns/ColumnList.tsx index fb13264..15a552d 100644 --- a/src/components/columns/ColumnList.tsx +++ b/src/components/columns/ColumnList.tsx @@ -4,6 +4,7 @@ import { useColumnsQuery } from '@/apis/columns/queries'; import { useParams } from 'next/navigation'; import ColumnItem from './ColumnItem'; import AddColumnBtn from './AddColumnBtn'; +import { isEmpty } from 'es-toolkit/compat'; export default function ColumnList() { const params = useParams(); @@ -13,12 +14,17 @@ export default function ColumnList() { return ( ); } @@ -40,3 +46,14 @@ export function SkeletionItem() { ); } + +function EmptyList() { + return ( +
  • +

    컬럼이 비어있습니다.

    +
    +
    +
    +
  • + ); +}