From 97a8b2811ec548be038127c50736888b2a3b7f05 Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 4 Jun 2026 15:54:30 +0900 Subject: [PATCH] =?UTF-8?q?[cs]=20feat:=20=ED=9A=8C=EC=9B=90=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=ED=8F=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/entities/user/model/user-interface.ts | 2 + apps/cs/src/pages/users/index.ts | 2 +- .../src/pages/users/model/table-columns.tsx | 3 +- .../pages/users/ui/agency-search-dialog.tsx | 22 +++--- apps/cs/src/pages/users/ui/create-page.tsx | 9 ++- apps/cs/src/pages/users/ui/modify-page.tsx | 12 ++- apps/cs/src/pages/users/ui/user-detail.tsx | 12 +-- apps/cs/src/pages/users/ui/users-form.tsx | 76 +++++++++++-------- apps/cs/src/pages/users/ui/users-page.tsx | 27 ++++--- .../src/pages/users/ui/zip-search-dialog.tsx | 17 +++-- 10 files changed, 109 insertions(+), 73 deletions(-) diff --git a/apps/cs/src/entities/user/model/user-interface.ts b/apps/cs/src/entities/user/model/user-interface.ts index 012fe9e92..5f4524eb0 100644 --- a/apps/cs/src/entities/user/model/user-interface.ts +++ b/apps/cs/src/entities/user/model/user-interface.ts @@ -1,4 +1,5 @@ import { z } from "zod"; + import type { PageableList, PageableParams } from "@/shared/model"; export const USER_STATE_CODE = { @@ -153,6 +154,7 @@ export const userUpdateSchema = z.object({ autzrId: z.string().uuid().optional(), expryYmd: z.string().max(8), instSeCd: z.string().optional(), + instSeNm: z.string().optional(), dtlInstCd: z.string().optional(), aprvYmd: z.string().max(8).optional(), enoCd: z.string().optional(), diff --git a/apps/cs/src/pages/users/index.ts b/apps/cs/src/pages/users/index.ts index e518fb440..c4c302b85 100644 --- a/apps/cs/src/pages/users/index.ts +++ b/apps/cs/src/pages/users/index.ts @@ -1,3 +1,3 @@ -export { UsersPage } from "./ui/users-page"; export { CreatePage } from "./ui/create-page"; export { UserDetail } from "./ui/user-detail"; +export { UsersPage } from "./ui/users-page"; diff --git a/apps/cs/src/pages/users/model/table-columns.tsx b/apps/cs/src/pages/users/model/table-columns.tsx index 1aad6de27..fbb05db39 100644 --- a/apps/cs/src/pages/users/model/table-columns.tsx +++ b/apps/cs/src/pages/users/model/table-columns.tsx @@ -1,5 +1,6 @@ -import dayjs from "dayjs"; import type { ColumnDef } from "@tanstack/react-table"; +import dayjs from "dayjs"; + import { USER_STATE_CODE, type UserListResponse, diff --git a/apps/cs/src/pages/users/ui/agency-search-dialog.tsx b/apps/cs/src/pages/users/ui/agency-search-dialog.tsx index 9759d42be..5b56ad2e9 100644 --- a/apps/cs/src/pages/users/ui/agency-search-dialog.tsx +++ b/apps/cs/src/pages/users/ui/agency-search-dialog.tsx @@ -1,4 +1,5 @@ import { useState } from "react"; + import { keepPreviousData, useQuery, @@ -9,25 +10,26 @@ import { getPaginationRowModel, type PaginationState, } from "@tanstack/react-table"; + +import { ENDPOINT } from "@/shared/config"; +import { useDataTable } from "@/shared/lib"; import { + type LwpoCode, + LwpoCodeApi, + type LwpoCodeParams, +} from "@/entities/code"; +import { + Button, Dialog, + DialogClose, DialogContent, - DialogHeader, DialogFooter, + DialogHeader, DialogTitle, DialogTrigger, - DialogClose, - Button, Input, Label, } from "@common/components"; -import { - LwpoCodeApi, - type LwpoCode, - type LwpoCodeParams, -} from "@/entities/code"; -import { ENDPOINT } from "@/shared/config"; -import { useDataTable } from "@/shared/lib"; interface AgencySearchDialogProps { onSelectAgency: (data: { lwpoCd: string; lwpoCdNm: string }) => void; diff --git a/apps/cs/src/pages/users/ui/create-page.tsx b/apps/cs/src/pages/users/ui/create-page.tsx index 2d55a1cd2..33ec5ec0b 100644 --- a/apps/cs/src/pages/users/ui/create-page.tsx +++ b/apps/cs/src/pages/users/ui/create-page.tsx @@ -1,10 +1,13 @@ "use client"; -import { useRouter } from "next/navigation"; import { useForm } from "react-hook-form"; +import { useRouter } from "next/navigation"; + import { zodResolver } from "@hookform/resolvers/zod"; -import { useMutationWrapper, useAlertStore } from "@/shared/lib"; -import { UserApi, userSaveSchema, type UserSaveData } from "@/entities/user"; + +import { useAlertStore, useMutationWrapper } from "@/shared/lib"; +import { UserApi, type UserSaveData, userSaveSchema } from "@/entities/user"; + import { UsersForm } from "./users-form"; function CreatePage() { diff --git a/apps/cs/src/pages/users/ui/modify-page.tsx b/apps/cs/src/pages/users/ui/modify-page.tsx index fc93e4b05..b9b83b800 100644 --- a/apps/cs/src/pages/users/ui/modify-page.tsx +++ b/apps/cs/src/pages/users/ui/modify-page.tsx @@ -1,17 +1,20 @@ "use client"; import React from "react"; -import { useRouter } from "next/navigation"; import { useForm } from "react-hook-form"; +import { useRouter } from "next/navigation"; + import { zodResolver } from "@hookform/resolvers/zod"; import { useQuery } from "@tanstack/react-query"; + +import { ENDPOINT } from "@/shared/config"; +import { useAlertStore, useMutationWrapper } from "@/shared/lib"; import { UserApi, - userUpdateSchema, type UserUpdateData, + userUpdateSchema, } from "@/entities/user"; -import { ENDPOINT } from "@/shared/config"; -import { useMutationWrapper, useAlertStore } from "@/shared/lib"; + import { UsersForm } from "./users-form"; interface ModifyPageProps { @@ -47,6 +50,7 @@ export function ModifyPage({ userUnqId }: ModifyPageProps) { aprvYn: userData?.aprvYn ?? "", expryYmd: userData?.expryYmd ?? "", instSeCd: userData?.instSeCd ?? "", + instSeNm: userData?.instSeNm ?? "", dtlInstCd: userData?.dtlInstCd ?? "", aprvYmd: userData?.aprvYmd ?? "", enoCd: userData?.enoCd ?? "", diff --git a/apps/cs/src/pages/users/ui/user-detail.tsx b/apps/cs/src/pages/users/ui/user-detail.tsx index fbfa016c2..1438c4864 100644 --- a/apps/cs/src/pages/users/ui/user-detail.tsx +++ b/apps/cs/src/pages/users/ui/user-detail.tsx @@ -1,9 +1,14 @@ "use client"; -import dayjs from "dayjs"; import { usePathname, useRouter } from "next/navigation"; -import { useQuery, useQueryClient } from "@tanstack/react-query"; + import { useConfirm } from "@frontend-opensource/use-react-hooks"; +import { useQuery, useQueryClient } from "@tanstack/react-query"; +import dayjs from "dayjs"; + +import { ENDPOINT } from "@/shared/config"; +import { useAlertStore, useMutationWrapper } from "@/shared/lib"; +import { PasswordResetDialog, USER_STATE_CODE, UserApi } from "@/entities/user"; import { Button, Table, @@ -12,9 +17,6 @@ import { TableHead, TableRow, } from "@common/components"; -import { USER_STATE_CODE, UserApi, PasswordResetDialog } from "@/entities/user"; -import { ENDPOINT } from "@/shared/config"; -import { useAlertStore, useMutationWrapper } from "@/shared/lib"; function UserDetail({ userUnqId }: { userUnqId: string }) { const router = useRouter(); diff --git a/apps/cs/src/pages/users/ui/users-form.tsx b/apps/cs/src/pages/users/ui/users-form.tsx index 963e0f87e..f82be740b 100644 --- a/apps/cs/src/pages/users/ui/users-form.tsx +++ b/apps/cs/src/pages/users/ui/users-form.tsx @@ -1,42 +1,45 @@ -import { useState, useMemo, useCallback } from "react"; +import { useCallback, useMemo, useState } from "react"; import { - useWatch, type Path, type PathValue, type UseFormReturn, + useWatch, } from "react-hook-form"; + import { useQuery } from "@tanstack/react-query"; + +import { ENDPOINT } from "@/shared/config"; +import { useAlertStore, useMutationWrapper } from "@/shared/lib"; import { - Button, - Input, - Table, - TableBody, - TableCell, - TableHead, - TableRow, - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@common/components"; -import { FormWrapper } from "@/widgets/form-wrapper"; + FormControl, + FormField, + FormItem, + FormMessage, +} from "@/shared/ui/form"; import { CodeApi, CodeSelect } from "@/entities/code"; import { UserApi, type UserSaveData, type UserUpdateData, } from "@/entities/user"; +import { FormWrapper } from "@/widgets/form-wrapper"; import { - FormField, - FormItem, - FormControl, - FormMessage, -} from "@/shared/ui/form"; -import { ENDPOINT } from "@/shared/config"; -import { useAlertStore, useMutationWrapper } from "@/shared/lib"; -import { ZipSearchDialog } from "./zip-search-dialog"; + Button, + Input, + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, + Table, + TableBody, + TableCell, + TableHead, + TableRow, +} from "@common/components"; + import { AgencySearchDialog } from "./agency-search-dialog"; +import { ZipSearchDialog } from "./zip-search-dialog"; type UsersFormProps = { userId?: string; @@ -61,7 +64,6 @@ function UsersForm({ const [isValidUserId, setIsValidUserId] = useState(false); const [isValidEmail, setIsValidEmail] = useState(false); const [passwordMatch, setPasswordMatch] = useState(true); - const [instSeCdNm, setInstSeCdNm] = useState(""); const { data: authSeCd } = useQuery({ queryKey: [ENDPOINT.CMS_SERVICE.CODE, "AUTHSECD"], @@ -163,7 +165,10 @@ function UsersForm({ "instSeCd" as Path, data.lwpoCd as PathValue>, ); - setInstSeCdNm(data.lwpoCdNm); + form.setValue( + "instSeNm" as Path, + data.lwpoCdNm as PathValue>, + ); }, [form], ); @@ -650,10 +655,21 @@ function UsersForm({ 기관/업체명
- } + render={({ field }) => ( + + + + + + )} />
diff --git a/apps/cs/src/pages/users/ui/users-page.tsx b/apps/cs/src/pages/users/ui/users-page.tsx index 5670eb9d3..17b44707c 100644 --- a/apps/cs/src/pages/users/ui/users-page.tsx +++ b/apps/cs/src/pages/users/ui/users-page.tsx @@ -1,10 +1,21 @@ "use client"; -import dayjs from "dayjs"; import { useState } from "react"; import { useRouter } from "next/navigation"; + import { useQuery } from "@tanstack/react-query"; import { getCoreRowModel, type PaginationState } from "@tanstack/react-table"; +import dayjs from "dayjs"; + +import { ENDPOINT } from "@/shared/config"; +import { useDataTable } from "@/shared/lib"; +import { InputDateRangePicker } from "@/shared/ui/input-date-range-picker"; +import { CodeApi } from "@/entities/code"; +import { + UserApi, + type UserListResponse, + type UserSearchParams, +} from "@/entities/user"; import { Button, Checkbox, @@ -16,20 +27,12 @@ import { SelectTrigger, SelectValue, } from "@common/components"; -import { CodeApi } from "@/entities/code"; -import { - UserApi, - type UserListResponse, - type UserSearchParams, -} from "@/entities/user"; -import { ENDPOINT } from "@/shared/config"; -import { useDataTable } from "@/shared/lib"; -import { InputDateRangePicker } from "@/shared/ui/input-date-range-picker"; + import { columns } from "../model/table-columns"; type DateRange = { - from?: Date | undefined; - to?: Date | undefined; + from?: Date | null; + to?: Date | null; }; function UsersPage() { diff --git a/apps/cs/src/pages/users/ui/zip-search-dialog.tsx b/apps/cs/src/pages/users/ui/zip-search-dialog.tsx index bf2160ea8..de5ae9696 100644 --- a/apps/cs/src/pages/users/ui/zip-search-dialog.tsx +++ b/apps/cs/src/pages/users/ui/zip-search-dialog.tsx @@ -1,4 +1,5 @@ -import { useState, useRef, useEffect } from "react"; +import { useEffect, useRef, useState } from "react"; + import { keepPreviousData, useQuery, @@ -9,21 +10,23 @@ import { getPaginationRowModel, type PaginationState, } from "@tanstack/react-table"; + +import { ENDPOINT } from "@/shared/config"; +import { useDataTable } from "@/shared/lib"; import { + Button, Dialog, + DialogClose, DialogContent, - DialogHeader, DialogFooter, + DialogHeader, DialogTitle, DialogTrigger, - DialogClose, - Button, Input, Label, } from "@common/components"; -import { ENDPOINT } from "@/shared/config"; -import { useDataTable } from "@/shared/lib"; -import { ZipApi, type Zip, type ZipSearchParams } from "../api/zip-service"; + +import { type Zip, ZipApi, type ZipSearchParams } from "../api/zip-service"; interface ZipSearchDialogProps { onSelectAddress: (data: { zip: string; addr: string }) => void;