- {t("ui.admin.users.detail.custom_fields.multi_title", "테넌트별 프로필 관리")}
+ {t(
+ "ui.admin.users.detail.custom_fields.multi_title",
+ "테넌트별 프로필 관리",
+ )}
사용자가 소속된 각 테넌트별 맞춤 정보를 관리합니다.
diff --git a/adminfront/src/features/users/UserListPage.tsx b/adminfront/src/features/users/UserListPage.tsx
index 3a6f165e..8febddfb 100644
--- a/adminfront/src/features/users/UserListPage.tsx
+++ b/adminfront/src/features/users/UserListPage.tsx
@@ -45,15 +45,15 @@ import {
bulkDeleteUsers,
bulkUpdateUsers,
deleteUser,
+ exportUsersCSVUrl,
fetchMe,
fetchTenant,
fetchTenants,
fetchUsers,
- exportUsersCSVUrl,
} from "../../lib/adminApi";
import { t } from "../../lib/i18n";
-import { UserBulkUploadModal } from "./components/UserBulkUploadModal";
import { UserBulkMoveGroupModal } from "./components/UserBulkMoveGroupModal";
+import { UserBulkUploadModal } from "./components/UserBulkUploadModal";
type UserSchemaField = {
key: string;
@@ -67,7 +67,9 @@ function UserListPage() {
const [search, setSearch] = React.useState("");
const [searchDraft, setSearchDraft] = React.useState("");
const [selectedCompany, setSelectedCompany] = React.useState("");
- const [visibleColumns, setVisibleColumns] = React.useState>({});
+ const [visibleColumns, setVisibleColumns] = React.useState<
+ Record
+ >({});
const [selectedUserIds, setSelectedUserIds] = React.useState([]);
const limit = 50;
const offset = (page - 1) * limit;
@@ -129,7 +131,10 @@ function UserListPage() {
};
const query = useQuery({
- queryKey: ["users", { limit, offset, search, companyCode: selectedCompany }],
+ queryKey: [
+ "users",
+ { limit, offset, search, companyCode: selectedCompany },
+ ],
queryFn: () => fetchUsers(limit, offset, search, selectedCompany),
placeholderData: (previousData) => previousData,
});
@@ -190,7 +195,12 @@ function UserListPage() {
onSuccess: () => {
query.refetch();
setSelectedUserIds([]);
- toast.success(t("msg.admin.users.bulk.delete_success", "선택한 사용자들이 삭제되었습니다."));
+ toast.success(
+ t(
+ "msg.admin.users.bulk.delete_success",
+ "선택한 사용자들이 삭제되었습니다.",
+ ),
+ );
},
});
@@ -199,7 +209,12 @@ function UserListPage() {
onSuccess: () => {
query.refetch();
setSelectedUserIds([]);
- toast.success(t("msg.admin.users.bulk.update_success", "선택한 사용자들의 정보가 수정되었습니다."));
+ toast.success(
+ t(
+ "msg.admin.users.bulk.update_success",
+ "선택한 사용자들의 정보가 수정되었습니다.",
+ ),
+ );
},
});
@@ -210,7 +225,15 @@ function UserListPage() {
const handleBulkDelete = () => {
if (selectedUserIds.length === 0) return;
- if (window.confirm(t("msg.admin.users.bulk.delete_confirm", "{{count}}명의 사용자를 정말 삭제하시겠습니까?", { count: selectedUserIds.length }))) {
+ if (
+ window.confirm(
+ t(
+ "msg.admin.users.bulk.delete_confirm",
+ "{{count}}명의 사용자를 정말 삭제하시겠습니까?",
+ { count: selectedUserIds.length },
+ ),
+ )
+ ) {
bulkDeleteMutation.mutate(selectedUserIds);
}
};
@@ -273,19 +296,30 @@ function UserListPage() {
- {t("ui.admin.users.list.columns.title", "표시 컬럼 설정")}
+
+ {t("ui.admin.users.list.columns.title", "표시 컬럼 설정")}
+
- {t("msg.admin.users.list.columns.description", "사용자 목록에 표시할 커스텀 필드를 선택하세요.")}
+ {t(
+ "msg.admin.users.list.columns.description",
+ "사용자 목록에 표시할 커스텀 필드를 선택하세요.",
+ )}
{userSchema.length === 0 && (
- {t("msg.admin.users.list.columns.no_custom", "현재 테넌트에 정의된 커스텀 필드가 없습니다.")}
+ {t(
+ "msg.admin.users.list.columns.no_custom",
+ "현재 테넌트에 정의된 커스텀 필드가 없습니다.",
+ )}
)}
{userSchema.map((field) => (
-
-
+
@@ -387,7 +425,10 @@ function UserListPage() {
0 && selectedUserIds.length === items.length}
+ checked={
+ items.length > 0 &&
+ selectedUserIds.length === items.length
+ }
onChange={toggleSelectAll}
/>
@@ -407,13 +448,14 @@ function UserListPage() {
)}
{/* Dynamic Columns from Schema */}
- {userSchema.map((field) => (
- visibleColumns[field.key] !== false && (
-
- {field.label}
-
- )
- ))}
+ {userSchema.map(
+ (field) =>
+ visibleColumns[field.key] !== false && (
+
+ {field.label}
+
+ ),
+ )}
{t("ui.admin.users.list.table.created", "CREATED")}
@@ -444,9 +486,11 @@ function UserListPage() {
)}
{items.map((user) => (
-
{/* Dynamic Metadata Cells */}
- {userSchema.map((field) => (
- visibleColumns[field.key] !== false && (
-
- {String(user.metadata?.[field.key] ?? "-")}
-
- )
- ))}
+ {userSchema.map(
+ (field) =>
+ visibleColumns[field.key] !== false && (
+
+ {String(user.metadata?.[field.key] ?? "-")}
+
+ ),
+ )}
{new Date(user.createdAt).toLocaleDateString()}
@@ -534,36 +579,38 @@ function UserListPage() {
{selectedUserIds.length > 0 && (
- {t("ui.admin.users.bulk.selected_count", "{{count}}명 선택됨", { count: selectedUserIds.length })}
+ {t("ui.admin.users.bulk.selected_count", "{{count}}명 선택됨", {
+ count: selectedUserIds.length,
+ })}
-
-
-
{
query.refetch();
setSelectedUserIds([]);
- }}
+ }}
/>
-
-