From 18dbb368c67584c58187efb56b0332b9799653a7 Mon Sep 17 00:00:00 2001 From: bicochan Date: Fri, 9 May 2025 10:48:10 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EA=B2=8C=EC=8B=9C=ED=8C=90=20=ED=85=9C?= =?UTF-8?q?=ED=94=8C=EB=A6=BF=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../board/api/board-template-service.ts | 17 ++++ apps/cs/src/entities/board/index.ts | 1 + .../board/model/board-template-interface.ts | 24 +++++ apps/cs/src/pages/bbs/ui/bbs-form.tsx | 96 ++++++++++++++++--- apps/cs/src/shared/config/api.ts | 1 + 5 files changed, 124 insertions(+), 15 deletions(-) create mode 100644 apps/cs/src/entities/board/api/board-template-service.ts create mode 100644 apps/cs/src/entities/board/model/board-template-interface.ts diff --git a/apps/cs/src/entities/board/api/board-template-service.ts b/apps/cs/src/entities/board/api/board-template-service.ts new file mode 100644 index 000000000..be3efde75 --- /dev/null +++ b/apps/cs/src/entities/board/api/board-template-service.ts @@ -0,0 +1,17 @@ +import { client } from "@/shared/api"; +import { ENDPOINT } from "@/shared/config"; +import type { + BoardTemplate, + BoardTemplateService, +} from "../model/board-template-interface"; + +export class BoardTemplateApiService implements BoardTemplateService { + public async getBoardTemplate(bbsTypeCd: string): Promise { + const response = await client.get( + `${ENDPOINT.BOARD_SERVICE.BBS_TEMPLATES}/${bbsTypeCd}`, + ); + return response.data; + } +} + +export const BoardTemplateApi = new BoardTemplateApiService(); diff --git a/apps/cs/src/entities/board/index.ts b/apps/cs/src/entities/board/index.ts index f9ef1b610..a4be9eb12 100644 --- a/apps/cs/src/entities/board/index.ts +++ b/apps/cs/src/entities/board/index.ts @@ -6,3 +6,4 @@ export { type BoardParams, type BoardPopup, } from "./model/board-interface"; +export { BoardTemplateApi } from "./api/board-template-service"; diff --git a/apps/cs/src/entities/board/model/board-template-interface.ts b/apps/cs/src/entities/board/model/board-template-interface.ts new file mode 100644 index 000000000..6a7f84fef --- /dev/null +++ b/apps/cs/src/entities/board/model/board-template-interface.ts @@ -0,0 +1,24 @@ +export interface BoardTemplate { + bbsTypeCd: string; + rfrncUseYn: string; + atflUseYn: string; + atflMaxCnt: number; + atflMaxFileSz: number; + ansUseYn: string; + cmntUseYn: string; + dgstfnEvlUseYn: string; + smsUseYn: string; + upndFixUseYn: string; + pstgPrdUseYn: string; + popupUseYn: string; + regDt: string; + rgtr: string; + mdfcnDt: string; + mdfr: string; + rgtrNm: string; + mdfrNm: string; +} + +export interface BoardTemplateService { + getBoardTemplate: (bbsTypeCd: string) => Promise; +} diff --git a/apps/cs/src/pages/bbs/ui/bbs-form.tsx b/apps/cs/src/pages/bbs/ui/bbs-form.tsx index af8ed4f91..f56f46622 100644 --- a/apps/cs/src/pages/bbs/ui/bbs-form.tsx +++ b/apps/cs/src/pages/bbs/ui/bbs-form.tsx @@ -1,5 +1,6 @@ "use client"; +import { useQuery } from "@tanstack/react-query"; import type { UseFormReturn } from "react-hook-form"; import { Input, @@ -19,7 +20,12 @@ import { } from "@common/components"; import { FormWrapper } from "@/widgets/form-wrapper"; import { CodeSelect } from "@/entities/code"; -import type { Board, BoardFormData } from "@/entities/board"; +import { + BoardTemplateApi, + type Board, + type BoardFormData, +} from "@/entities/board"; +import { ENDPOINT } from "@/shared/config"; import { FormControl, FormField, FormItem } from "@/shared/ui/form"; type BbsFormProps = { @@ -29,6 +35,15 @@ type BbsFormProps = { }; function BbsForm({ form, bbsId, ...props }: BbsFormProps) { + const bbsTypeCd = form.watch("bbsTypeCd"); + const formDisabled = !!bbsTypeCd && bbsTypeCd !== "BBSNORMAL"; + + const { data: boardTemplate } = useQuery({ + queryKey: [ENDPOINT.BOARD_SERVICE.BBS_TEMPLATES, bbsTypeCd], + queryFn: () => BoardTemplateApi.getBoardTemplate(bbsTypeCd), + enabled: !formDisabled, + }); + return (
@@ -109,7 +124,12 @@ function BbsForm({ form, bbsId, ...props }: BbsFormProps) { render={({ field }) => ( - +
@@ -134,7 +154,12 @@ function BbsForm({ form, bbsId, ...props }: BbsFormProps) { render={({ field }) => ( - +
@@ -163,7 +188,7 @@ function BbsForm({ form, bbsId, ...props }: BbsFormProps) { {...field} type="number" min={0} - value={field.value ?? ""} + value={boardTemplate?.atflMaxCnt ?? field.value ?? ""} onChange={(e) => { const value = e.target.value; if (isNaN(parseInt(value))) return; @@ -173,7 +198,9 @@ function BbsForm({ form, bbsId, ...props }: BbsFormProps) { }} className="w-[12rem] !text-[1.3rem]" placeholder="최대 개수 입력" - disabled={form.watch("atflUseYn") === "N"} + disabled={ + form.getValues("atflUseYn") === "N" || formDisabled + } /> @@ -194,7 +221,9 @@ function BbsForm({ form, bbsId, ...props }: BbsFormProps) { {...field} type="number" min={0} - value={field.value ?? ""} + value={ + boardTemplate?.atflMaxFileSz ?? field.value ?? "" + } onChange={(e) => { const value = e.target.value; if (isNaN(parseInt(value))) return; @@ -204,7 +233,9 @@ function BbsForm({ form, bbsId, ...props }: BbsFormProps) { }} className="w-[12rem] !text-[1.3rem]" placeholder="최대 크기 입력" - disabled={form.watch("atflUseYn") === "N"} + disabled={ + form.getValues("atflUseYn") === "N" || formDisabled + } /> @@ -221,7 +252,12 @@ function BbsForm({ form, bbsId, ...props }: BbsFormProps) { render={({ field }) => ( - +
@@ -249,7 +285,7 @@ function BbsForm({ form, bbsId, ...props }: BbsFormProps) {