diff --git a/apps/cs/src/entities/menu-authority/ui/management-authority-dialog.tsx b/apps/cs/src/entities/menu-authority/ui/management-authority-dialog.tsx index 20485cbdd..a9ba18333 100644 --- a/apps/cs/src/entities/menu-authority/ui/management-authority-dialog.tsx +++ b/apps/cs/src/entities/menu-authority/ui/management-authority-dialog.tsx @@ -1,3 +1,4 @@ +import { useState } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { useQuery } from "@tanstack/react-query"; @@ -27,12 +28,10 @@ type ManagementAuthorityDialogProps = { menuCd?: number; } & React.ComponentProps; -function ManagementAuthorityDialog({ - menuCd, - ...props -}: ManagementAuthorityDialogProps) { +function ManagementAuthorityDialog({ menuCd }: ManagementAuthorityDialogProps) { const { confirm } = useConfirm(); const alert = useAlertStore((state) => state.setMessage); + const [open, setOpen] = useState(false); const query = useQuery({ queryKey: [ENDPOINT.CMS_SERVICE.MENU_AUTHRTS, menuCd], @@ -44,7 +43,7 @@ function ManagementAuthorityDialog({ mutationFn: (data: MenuAuthorityPayload[]) => MenuAuthorityApi.saveMenuAuthority(data), onSuccess: () => { - alert("저장되었습니다."); + alert("저장되었습니다.", () => setOpen(false)); }, }); @@ -72,7 +71,7 @@ function ManagementAuthorityDialog({ }; return ( - + + diff --git a/apps/cs/src/pages/module/ui/modify-page.tsx b/apps/cs/src/pages/module/ui/modify-page.tsx index e26dfca4b..b2a49b861 100644 --- a/apps/cs/src/pages/module/ui/modify-page.tsx +++ b/apps/cs/src/pages/module/ui/modify-page.tsx @@ -1,5 +1,6 @@ "use client"; +import { useRouter } from "next/navigation"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { useQuery } from "@tanstack/react-query"; @@ -13,6 +14,7 @@ import { import { ModuleForm } from "./module-form"; function ModifyPage({ sequential }: { sequential: string }) { + const router = useRouter(); const alert = useAlertStore((state) => state.setMessage); const { data: authorizationInfo } = useQuery({ @@ -24,7 +26,7 @@ function ModifyPage({ sequential }: { sequential: string }) { mutationFn: (data: AuthorizationFormData) => AuthorizationsApi.updateAuthorization(sequential, data), onSuccess: () => { - alert("수정되었습니다."); + alert("수정되었습니다.", router.back); }, }); diff --git a/apps/cs/src/pages/popup/ui/popup-page.tsx b/apps/cs/src/pages/popup/ui/popup-page.tsx index b542d39a3..c7b2585db 100644 --- a/apps/cs/src/pages/popup/ui/popup-page.tsx +++ b/apps/cs/src/pages/popup/ui/popup-page.tsx @@ -116,6 +116,7 @@ function PopupPage() { table.setRowSelection({})} /> +

diff --git a/apps/cs/src/pages/recent/ui/move-post-dialog.tsx b/apps/cs/src/pages/recent/ui/move-post-dialog.tsx index 0afa6b75c..09707ceef 100644 --- a/apps/cs/src/pages/recent/ui/move-post-dialog.tsx +++ b/apps/cs/src/pages/recent/ui/move-post-dialog.tsx @@ -1,4 +1,5 @@ -import React, { useRef } from "react"; +import React, { useRef, useState } from "react"; +import { useQueryClient } from "@tanstack/react-query"; import { Button, Dialog, @@ -11,22 +12,41 @@ import { SelectValue, } from "@common/components"; import type { Board } from "@/entities/board"; -import type { MovePost } from "@/entities/post"; +import { PostApi, type MovePost } from "@/entities/post"; import { AuthorityButton } from "@/entities/menu-authority"; +import { useAlertStore, useMutationWrapper } from "@/shared/lib"; +import { ENDPOINT } from "@/shared/config"; type MovePostDialogProps = { selectedPosts: MovePost[]; boardList: Board[]; - onMovePost: (data: MovePost[]) => void; + resetSelectedPost: () => void; }; function MovePostDialog({ selectedPosts, boardList, - onMovePost, + resetSelectedPost, }: MovePostDialogProps) { + const queryClient = useQueryClient(); + const alert = useAlertStore((state) => state.setMessage); const selectedPostsRef = useRef(selectedPosts); + const [open, setOpen] = useState(false); + + const { mutate: movePost } = useMutationWrapper({ + mutationFn: (data: MovePost[]) => PostApi.movePost(data), + onSuccess: () => { + alert("이동이 완료되었습니다.", () => { + queryClient.invalidateQueries({ + queryKey: [ENDPOINT.BOARD_SERVICE.POSTS], + }); + resetSelectedPost(); + setOpen(false); + }); + }, + }); + const onSelectValueChange = (toBbsId: string) => { selectedPostsRef.current = selectedPosts.map((post) => ({ ...post, @@ -35,7 +55,7 @@ function MovePostDialog({ }; return ( - + - + ); diff --git a/apps/cs/src/pages/recent/ui/recent-page.tsx b/apps/cs/src/pages/recent/ui/recent-page.tsx index ea9be6569..f99ee2339 100644 --- a/apps/cs/src/pages/recent/ui/recent-page.tsx +++ b/apps/cs/src/pages/recent/ui/recent-page.tsx @@ -24,18 +24,12 @@ import { import { PostApi, type DeletePost, - type MovePost, type RecentPost, type RecentPostParams, } from "@/entities/post"; import { BoardApi } from "@/entities/board"; import { AuthorityButton } from "@/entities/menu-authority"; -import { - useAlertStore, - useMutationWrapper, - usePrompt, - useDataTable, -} from "@/shared/lib"; +import { useAlertStore, usePrompt, useDataTable } from "@/shared/lib"; import { ENDPOINT } from "@/shared/config"; import { columns } from "../model/table-columns"; import { MovePostDialog } from "./move-post-dialog"; @@ -82,13 +76,6 @@ function RecentPage() { queryFn: () => BoardApi.getBoardList(), }); - const { mutate: movePost } = useMutationWrapper({ - mutationFn: (data: MovePost[]) => PostApi.movePost(data), - onSuccess: () => { - alert("이동이 완료되었습니다.", query.refetch); - }, - }); - const handleRowClick = (row: RecentPost) => { router.push( `/bbs/${row.bbsTypeCd.toLowerCase()}/${row.bbsId}/${row.pstNo}`, @@ -320,7 +307,7 @@ function RecentPage() { pstNo: row.original.pstNo, }))} boardList={boardList?.content ?? []} - onMovePost={movePost} + resetSelectedPost={() => table.setRowSelection({})} /> props.onOpenChange?.(false)); } }; diff --git a/apps/cs/src/pages/site/ui/ip-management-dialog.tsx b/apps/cs/src/pages/site/ui/ip-management-dialog.tsx index df682f06f..ec5c7a0dd 100644 --- a/apps/cs/src/pages/site/ui/ip-management-dialog.tsx +++ b/apps/cs/src/pages/site/ui/ip-management-dialog.tsx @@ -84,7 +84,7 @@ function IPManagementDialog({ const onSubmit = async (data: IPFormData) => { if (await confirm("저장하시겠습니까?")) { await mutateAsync(data.ips); - alert("저장되었습니다."); + alert("저장되었습니다.", () => props.onOpenChange?.(false)); } }; diff --git a/apps/cs/src/pages/site/ui/modify-page.tsx b/apps/cs/src/pages/site/ui/modify-page.tsx index 5f162d368..20bb0ddbc 100644 --- a/apps/cs/src/pages/site/ui/modify-page.tsx +++ b/apps/cs/src/pages/site/ui/modify-page.tsx @@ -3,7 +3,7 @@ import { useRouter } from "next/navigation"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; -import { useQuery, useQueryClient } from "@tanstack/react-query"; +import { useQuery } from "@tanstack/react-query"; import { SiteApi, siteFormSchema, type SiteFormData } from "@/entities/site"; import { useAlertStore, useMutationWrapper } from "@/shared/lib"; import { ENDPOINT } from "@/shared/config"; @@ -11,7 +11,6 @@ import { SiteForm } from "./site-form"; function ModifyPage({ siteId }: { siteId: string }) { const router = useRouter(); - const queryClient = useQueryClient(); const alert = useAlertStore((state) => state.setMessage); const { data: siteDetail } = useQuery({ @@ -34,11 +33,7 @@ function ModifyPage({ siteId }: { siteId: string }) { const { mutateAsync: updateSite } = useMutationWrapper({ mutationFn: (data: SiteFormData) => SiteApi.updateSite(siteId, data), onSuccess: () => { - alert("수정되었습니다.", () => { - queryClient.invalidateQueries({ - queryKey: [ENDPOINT.CMS_SERVICE.SITES], - }); - }); + alert("수정되었습니다.", router.back); }, }); diff --git a/apps/cs/src/pages/survey/ui/article-management-dialog.tsx b/apps/cs/src/pages/survey/ui/article-management-dialog.tsx index 38225d092..49d83143c 100644 --- a/apps/cs/src/pages/survey/ui/article-management-dialog.tsx +++ b/apps/cs/src/pages/survey/ui/article-management-dialog.tsx @@ -60,13 +60,13 @@ function ArticleManagementDialog({ enabled: !!srvyQitemNo && !!open, }); - const { mutateAsync } = useMutationWrapper({ + const { mutate } = useMutationWrapper({ mutationFn: (body: Article[]) => SurveyApi.saveArticleList(body), onSuccess: () => { queryClient.invalidateQueries({ queryKey: [ENDPOINT.CMS_SERVICE.SURVEY_ARTICLE, srvyQitemNo], }); - alert("저장되었습니다."); + alert("저장되었습니다.", () => setOpen(false)); }, }); @@ -95,8 +95,7 @@ function ArticleManagementDialog({ const onSubmit = async (data: ArticleFormData) => { if (await confirm("저장하시겠습니까?")) { - await mutateAsync(data.articles); - alert("저장되었습니다."); + mutate(data.articles); } }; diff --git a/apps/cs/src/pages/survey/ui/question-add-dialog.tsx b/apps/cs/src/pages/survey/ui/question-add-dialog.tsx index 4af6e6a4f..03527806d 100644 --- a/apps/cs/src/pages/survey/ui/question-add-dialog.tsx +++ b/apps/cs/src/pages/survey/ui/question-add-dialog.tsx @@ -43,8 +43,7 @@ function QuestionAddDialog({ queryClient.invalidateQueries({ queryKey: [ENDPOINT.CMS_SERVICE.SURVEY_QUESTION, srvySn.toString()], }); - alert("문항이 추가되었습니다."); - onOpenChange?.(false); + alert("문항이 추가되었습니다.", () => onOpenChange?.(false)); }, }); diff --git a/apps/cs/src/pages/survey/ui/question-edit-dialog.tsx b/apps/cs/src/pages/survey/ui/question-edit-dialog.tsx index 6d722f738..07d6a8227 100644 --- a/apps/cs/src/pages/survey/ui/question-edit-dialog.tsx +++ b/apps/cs/src/pages/survey/ui/question-edit-dialog.tsx @@ -50,8 +50,7 @@ function QuestionEditDialog({ queryClient.invalidateQueries({ queryKey: [ENDPOINT.CMS_SERVICE.SURVEY_QUESTION, srvySn.toString()], }); - alert("문항이 수정되었습니다."); - setOpen(false); + alert("문항이 수정되었습니다.", () => setOpen(false)); }, }); diff --git a/apps/cs/src/pages/survey/ui/survey-page.tsx b/apps/cs/src/pages/survey/ui/survey-page.tsx index 3e99f2bad..c34a21f6f 100644 --- a/apps/cs/src/pages/survey/ui/survey-page.tsx +++ b/apps/cs/src/pages/survey/ui/survey-page.tsx @@ -116,6 +116,7 @@ function SurveyPage() { table.setRowSelection({})} /> TemplateApi.updateTemplate(sequential, data), onSuccess: () => { - alert("수정되었습니다."); + alert("수정되었습니다.", router.back); }, }); diff --git a/apps/cs/src/pages/terms/ui/modify-page.tsx b/apps/cs/src/pages/terms/ui/modify-page.tsx index a13bd5787..5490a6b34 100644 --- a/apps/cs/src/pages/terms/ui/modify-page.tsx +++ b/apps/cs/src/pages/terms/ui/modify-page.tsx @@ -22,7 +22,7 @@ function ModifyPage({ sequential }: { sequential: string }) { const { mutateAsync: updateTerms } = useMutationWrapper({ mutationFn: (data: TermsFormData) => TermsApi.updateTerms(sequential, data), onSuccess: () => { - alert("수정되었습니다."); + alert("수정되었습니다.", router.back); }, }); diff --git a/apps/cs/src/pages/users/ui/create-page.tsx b/apps/cs/src/pages/users/ui/create-page.tsx index 84cc23b06..f58469327 100644 --- a/apps/cs/src/pages/users/ui/create-page.tsx +++ b/apps/cs/src/pages/users/ui/create-page.tsx @@ -37,8 +37,7 @@ function CreatePage() { const { mutateAsync: saveUser } = useMutationWrapper({ mutationFn: (data: UserSaveData) => UserApi.saveUser(data), onSuccess: () => { - alert("회원이 등록되었습니다."); - router.push("/users"); + alert("회원이 등록되었습니다.", router.back); }, }); diff --git a/apps/cs/src/pages/users/ui/password-reset-dialog.tsx b/apps/cs/src/pages/users/ui/password-reset-dialog.tsx index e94d1cb1d..dab2cef12 100644 --- a/apps/cs/src/pages/users/ui/password-reset-dialog.tsx +++ b/apps/cs/src/pages/users/ui/password-reset-dialog.tsx @@ -51,9 +51,10 @@ export function PasswordResetDialog({ userUnqId }: PasswordResetDialogProps) { mutationFn: (data: UserPasswordUpdateData) => UserApi.initializePassword(userUnqId, data), onSuccess: () => { - alert("비밀번호가 초기화되었습니다."); - setOpen(false); - form.reset(); + alert("비밀번호가 초기화되었습니다.", () => { + setOpen(false); + form.reset(); + }); }, });