chore: organization -> user-organization으로 리네이밍

This commit is contained in:
2025-04-21 10:44:30 +09:00
parent 665c8fd7ae
commit 6290634171
6 changed files with 72 additions and 63 deletions
@@ -1,17 +0,0 @@
import { client } from "@/shared/api";
import { ENDPOINT } from "@/shared/config";
import type {
Organization,
OrganizationService,
} from "../model/organization-interface";
export class OrganizationApiService implements OrganizationService {
public async getOrganizationUserTreeList(): Promise<Organization[]> {
const response = await client.get<Organization[]>(
`${ENDPOINT.CMS_SERVICE.USER_ORGANIZATION}/treeuser`,
);
return response.data;
}
}
export const OrganizationApi = new OrganizationApiService();
@@ -0,0 +1,17 @@
import { client } from "@/shared/api";
import { ENDPOINT } from "@/shared/config";
import type {
UserOrganization,
UserOrganizationService,
} from "../model/user-organization-interface";
export class UserOrganizationApiService implements UserOrganizationService {
public async getUserOrganizationTreeList(): Promise<UserOrganization[]> {
const response = await client.get<UserOrganization[]>(
`${ENDPOINT.CMS_SERVICE.USER_ORGANIZATION}/treeuser`,
);
return response.data;
}
}
export const UserOrganizationApi = new UserOrganizationApiService();
+39 -33
View File
@@ -1,6 +1,9 @@
import type { DropOptions, NodeModel } from "@minoru/react-dnd-treeview";
import type { TreeMenu, TreeNode } from "../model/menu-interface";
import type { Organization, User } from "../model/organization-interface";
import type {
UserOrganization,
User,
} from "../model/user-organization-interface";
export const generateMenuTreeData = (
data: TreeMenu[],
@@ -107,44 +110,47 @@ export const handleNodeTextChange =
callback(newTree);
};
export const generateOrganizationTreeData = (
organizations: Organization[],
): NodeModel<Organization | User>[] => {
return organizations.reduce<NodeModel<Organization | User>[]>((acc, org) => {
const orgNode: NodeModel<Organization> = {
id: org.ognzSn,
parent: org.upOgnzSn ?? 0,
text: org.ognzNm,
data: org,
droppable: false,
};
export const generateUserOrganizationTreeData = (
organizations: UserOrganization[],
): NodeModel<UserOrganization | User>[] => {
return organizations.reduce<NodeModel<UserOrganization | User>[]>(
(acc, org) => {
const orgNode: NodeModel<UserOrganization> = {
id: org.ognzSn,
parent: org.upOgnzSn ?? 0,
text: org.ognzNm,
data: org,
droppable: false,
};
acc.push(orgNode);
acc.push(orgNode);
if (org.children?.length) {
acc.push(...generateOrganizationTreeData(org.children));
}
if (org.children?.length) {
acc.push(...generateUserOrganizationTreeData(org.children));
}
if (org.users?.length) {
acc.push(
...org.users.map((user) => ({
id: user.userUnqId,
parent: org.ognzSn,
text: user.userNm,
data: user,
droppable: false,
})),
);
}
if (org.users?.length) {
acc.push(
...org.users.map((user) => ({
id: user.userUnqId,
parent: org.ognzSn,
text: user.userNm,
data: user,
droppable: false,
})),
);
}
return acc;
}, []);
return acc;
},
[],
);
};
export const filterOrganizationTreeDataByKeyword = (
treeData: NodeModel<Organization | User>[],
export const filterUserOrganizationTreeDataByKeyword = (
treeData: NodeModel<UserOrganization | User>[],
keyword: string,
): NodeModel<Organization | User>[] => {
): NodeModel<UserOrganization | User>[] => {
return Array.from(
treeData.reduce((matchedNodes, node) => {
if (!node.text.includes(keyword)) return matchedNodes;
@@ -160,6 +166,6 @@ export const filterOrganizationTreeDataByKeyword = (
}
return matchedNodes;
}, new Set<NodeModel<Organization | User>>()),
}, new Set<NodeModel<UserOrganization | User>>()),
);
};
@@ -5,14 +5,14 @@ export interface User {
jbgdSeCd: string;
}
export interface Organization {
export interface UserOrganization {
ognzSn: number;
upOgnzSn: number;
ognzNm: string;
users: User[];
children: Organization[];
children: UserOrganization[];
}
export interface OrganizationService {
getOrganizationUserTreeList(): Promise<Organization[]>;
export interface UserOrganizationService {
getUserOrganizationTreeList(): Promise<UserOrganization[]>;
}
@@ -20,14 +20,17 @@ import {
} from "@common/components/ui";
import { cn } from "@common/components/lib";
import { ENDPOINT } from "@/shared/config";
import { OrganizationApi } from "../api/organization-service";
import type { Organization, User } from "../model/organization-interface";
import { UserOrganizationApi } from "../api/user-organization-service";
import type {
UserOrganization,
User,
} from "../model/user-organization-interface";
import {
filterOrganizationTreeDataByKeyword,
generateOrganizationTreeData,
filterUserOrganizationTreeDataByKeyword,
generateUserOrganizationTreeData,
} from "../lib/utils";
type TreeModel = Organization | User;
type TreeModel = UserOrganization | User;
interface OrganizationSearchDialogProps {
handleUserSelect: (user: User) => void;
@@ -44,8 +47,8 @@ function OrganizationSearchDialog({
const { data: treeData } = useQuery({
queryKey: [ENDPOINT.CMS_SERVICE.USER_ORGANIZATION],
queryFn: () => OrganizationApi.getOrganizationUserTreeList(),
select: (data) => generateOrganizationTreeData(data),
queryFn: () => UserOrganizationApi.getUserOrganizationTreeList(),
select: (data) => generateUserOrganizationTreeData(data),
});
const handleSelectNode = (node: NodeModel<TreeModel>) => {
@@ -79,7 +82,7 @@ function OrganizationSearchDialog({
<Button
size="sm"
onClick={() =>
setTree(filterOrganizationTreeDataByKeyword(tree, keyword))
setTree(filterUserOrganizationTreeDataByKeyword(tree, keyword))
}
>
<i className="diveicon di-search text-base" />
+1 -1
View File
@@ -16,7 +16,7 @@ import {
import { FormItem, FormControl, FormField } from "@/shared/ui/form";
import type { BoardPopup } from "@/entities/board";
import type { Contents } from "@/entities/content";
import type { User } from "../model/organization-interface";
import type { User } from "../model/user-organization-interface";
import type { MenuFormData, MenuType } from "../model/menu-interface";
import { OrganizationSearchDialog } from "./organization-search-dialog";
import { ContentSearchDialog } from "./content-search-dialog";