Merge branch 'iipbs/cs/dev'

This commit is contained in:
2026-06-04 15:56:27 +09:00
10 changed files with 109 additions and 73 deletions
@@ -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(),
+1 -1
View File
@@ -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";
@@ -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,
@@ -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;
+6 -3
View File
@@ -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() {
+8 -4
View File
@@ -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 ?? "",
+7 -5
View File
@@ -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();
+46 -30
View File
@@ -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<T extends UserSaveData | UserUpdateData> = {
userId?: string;
@@ -61,7 +64,6 @@ function UsersForm<T extends UserSaveData | UserUpdateData>({
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<T extends UserSaveData | UserUpdateData>({
"instSeCd" as Path<T>,
data.lwpoCd as PathValue<T, Path<T>>,
);
setInstSeCdNm(data.lwpoCdNm);
form.setValue(
"instSeNm" as Path<T>,
data.lwpoCdNm as PathValue<T, Path<T>>,
);
},
[form],
);
@@ -650,10 +655,21 @@ function UsersForm<T extends UserSaveData | UserUpdateData>({
<TableHead>기관/업체명</TableHead>
<TableCell className="border">
<div className="flex items-center gap-2">
<Input
value={instSeCdNm}
className="w-[24rem] !text-[1.3rem]"
disabled
<FormField
control={form.control}
name={"instSeNm" as Path<T>}
render={({ field }) => (
<FormItem>
<FormControl>
<Input
{...field}
value={field.value ?? ""}
className="w-[24rem] !text-[1.3rem]"
disabled
/>
</FormControl>
</FormItem>
)}
/>
<AgencySearchDialog onSelectAgency={handleAgencySelect} />
</div>
+15 -12
View File
@@ -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() {
@@ -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;