From 33d3ce290cfd84c3f9b31eeb638a499500f2d23f Mon Sep 17 00:00:00 2001 From: bicochan Date: Tue, 1 Jul 2025 16:17:42 +0900 Subject: [PATCH] =?UTF-8?q?[common/features]=20feat:=20=EA=B2=8C=EC=8B=9C?= =?UTF-8?q?=EA=B8=80=20=EB=82=B4=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EB=B2=84=ED=8A=BC=20=EA=B6=8C=ED=95=9C=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/entities/menu-authority/index.ts | 1 + .../menu-authority/ui/authority-button.tsx | 26 +++++++++++ .../src/widgets/post/ui/post-action.tsx | 45 ++++++++++++------- .../features/src/widgets/post/ui/post.tsx | 2 +- 4 files changed, 58 insertions(+), 16 deletions(-) create mode 100644 apps/common/features/src/entities/menu-authority/ui/authority-button.tsx diff --git a/apps/common/features/src/entities/menu-authority/index.ts b/apps/common/features/src/entities/menu-authority/index.ts index baf6e6085..da36accae 100644 --- a/apps/common/features/src/entities/menu-authority/index.ts +++ b/apps/common/features/src/entities/menu-authority/index.ts @@ -1,3 +1,4 @@ export { MenuAuthorityApi } from "./api/menu-authority-service"; export { type PageMenuAuthority } from "./model/menu-authority-interface"; +export { AuthorityButton } from "./ui/authority-button"; export { ManagementAuthorityDialog } from "./ui/management-authority-dialog"; diff --git a/apps/common/features/src/entities/menu-authority/ui/authority-button.tsx b/apps/common/features/src/entities/menu-authority/ui/authority-button.tsx new file mode 100644 index 000000000..257ab6e5d --- /dev/null +++ b/apps/common/features/src/entities/menu-authority/ui/authority-button.tsx @@ -0,0 +1,26 @@ +import { useMenuStore } from "@/shared/lib"; +import { Button, cn, type ButtonProps } from "@common/components"; +import type { PageMenuAuthority } from "../model/menu-authority-interface"; + +type AuthorityButtonProps = { + authority: keyof PageMenuAuthority; +} & ButtonProps; + +function AuthorityButton({ + authority, + className, + children, + ...props +}: AuthorityButtonProps) { + const pageMenuAuthority = useMenuStore((state) => state.pageMenuAuthority); + + const isAuthority = pageMenuAuthority?.[authority] === "Y"; + + return ( + + ); +} + +export { AuthorityButton }; diff --git a/apps/common/features/src/widgets/post/ui/post-action.tsx b/apps/common/features/src/widgets/post/ui/post-action.tsx index 4eaa960cb..b063f7636 100644 --- a/apps/common/features/src/widgets/post/ui/post-action.tsx +++ b/apps/common/features/src/widgets/post/ui/post-action.tsx @@ -2,21 +2,24 @@ import { useRouter, usePathname } from "next/navigation"; import { useConfirm } from "@frontend-opensource/use-react-hooks"; import { Button } from "@common/components"; import { useMenuStore, useUserStore } from "@/shared/lib"; +import { AuthorityButton } from "@/entities/menu-authority"; type PostActionProps = { - bbsId: string; - pstNo: string; + registerId?: string; children: React.ReactNode; handleDelete: () => Promise; }; -function PostAction({ children, handleDelete }: PostActionProps) { +function PostAction({ registerId, children, handleDelete }: PostActionProps) { const router = useRouter(); const pathname = usePathname(); const { confirm } = useConfirm(); const bbsInfo = useMenuStore((state) => state.bbsInfo); const userInfo = useUserStore((state) => state.userInfo); + const actionButtonAuthrt = + userInfo?.adminRoleYn === "Y" || userInfo?.userUnqId === registerId; + const onDelete = async () => { if (await confirm("삭제하시겠습니까?")) handleDelete(); }; @@ -46,15 +49,19 @@ function PostAction({ children, handleDelete }: PostActionProps) { > 목록 - + {actionButtonAuthrt && ( + router.push(`${pathname}/modify`)} + > + 수정 + + )} {bbsInfo?.ansUseYn === "Y" && ( - + + )} + {actionButtonAuthrt && ( + + 삭제 + )} - ); diff --git a/apps/common/features/src/widgets/post/ui/post.tsx b/apps/common/features/src/widgets/post/ui/post.tsx index bd8db7c21..8033938cf 100644 --- a/apps/common/features/src/widgets/post/ui/post.tsx +++ b/apps/common/features/src/widgets/post/ui/post.tsx @@ -125,7 +125,7 @@ function Post({ bbsId, pstNo }: { bbsId: string; pstNo: string }) { return ( <> - +

{postData?.pstTtl}