diff --git a/adminfront/src/features/coverage/adminLargePages.test.tsx b/adminfront/src/features/coverage/adminLargePages.test.tsx
index 9c4537c8..dd728e92 100644
--- a/adminfront/src/features/coverage/adminLargePages.test.tsx
+++ b/adminfront/src/features/coverage/adminLargePages.test.tsx
@@ -351,7 +351,7 @@ describe("adminfront large page coverage smoke", () => {
);
expect(await screen.findByText("Worksmobile 연동")).toBeInTheDocument();
- expect(screen.getByText("Baron / Works 비교")).toBeInTheDocument();
+ expect(await screen.findByText("Baron / Works 비교")).toBeInTheDocument();
expect(
await screen.findByText("최근 실패: worksmobile api failed"),
).toBeInTheDocument();
@@ -446,6 +446,7 @@ describe("adminfront large page coverage smoke", () => {
"/tenants/tenant-company/worksmobile",
);
+ fireEvent.click(screen.getByRole("tab", { name: "이력" }));
await screen.findByText("credential-batch-1");
expect(
screen.getByRole("button", {
diff --git a/adminfront/src/features/tenants/routes/TenantWorksmobilePage.tsx b/adminfront/src/features/tenants/routes/TenantWorksmobilePage.tsx
index 44e18e56..f7504d34 100644
--- a/adminfront/src/features/tenants/routes/TenantWorksmobilePage.tsx
+++ b/adminfront/src/features/tenants/routes/TenantWorksmobilePage.tsx
@@ -194,7 +194,7 @@ export function TenantWorksmobilePage() {
const tenantId = params.tenantId ?? HANMAC_FAMILY_TENANT_ID;
const [orgUnitId, setOrgUnitId] = React.useState("");
const [userId, setUserId] = React.useState("");
- const [activeTab, setActiveTab] = React.useState("history");
+ const [activeTab, setActiveTab] = React.useState("users");
const [userFilters, setUserFilters] = React.useState<
WorksmobileComparisonFilter[]
>(getDefaultUserComparisonFilters);
@@ -733,7 +733,7 @@ export function TenantWorksmobilePage() {
{activeTab === "users" ? (
({
+ index,
+ start: index * WORKSMOBILE_ROW_ESTIMATED_HEIGHT,
+ size: WORKSMOBILE_ROW_ESTIMATED_HEIGHT,
+ key: index,
+ lanes: 0,
+ }))
+ : rowVirtualizer.getVirtualItems();
const shouldVirtualizeRows = !loading && rows.length > 0;
const toggleAll = (checked: boolean | "indeterminate") => {
@@ -1668,7 +1679,11 @@ function ComparisonTable({
shouldVirtualizeRows
? {
display: "grid",
- height: `${rowVirtualizer.getTotalSize()}px`,
+ height: `${
+ isTestEnv
+ ? rows.length * WORKSMOBILE_ROW_ESTIMATED_HEIGHT
+ : rowVirtualizer.getTotalSize()
+ }px`,
minWidth: tableMinWidth,
position: "relative",
}
diff --git a/adminfront/src/features/users/UserCreatePage.tsx b/adminfront/src/features/users/UserCreatePage.tsx
index efe8d494..3f056651 100644
--- a/adminfront/src/features/users/UserCreatePage.tsx
+++ b/adminfront/src/features/users/UserCreatePage.tsx
@@ -48,6 +48,7 @@ import {
type UserCreateResponse,
} from "../../lib/adminApi";
import { t } from "../../lib/i18n";
+import { normalizeAdminRole } from "../../lib/roles";
import { isSuperAdminRole } from "../../lib/roles";
import {
buildAuthenticatedOrgChartTenantPickerUrl,
@@ -152,6 +153,7 @@ function UserCreatePage() {
queryKey: ["me"],
queryFn: fetchMe,
});
+ const profileRole = normalizeAdminRole(profile?.role);
const {
register,
diff --git a/adminfront/src/features/users/UserListPage.tsx b/adminfront/src/features/users/UserListPage.tsx
index e0551648..0df7eeff 100644
--- a/adminfront/src/features/users/UserListPage.tsx
+++ b/adminfront/src/features/users/UserListPage.tsx
@@ -98,6 +98,7 @@ import {
updateUser,
} from "../../lib/adminApi";
import { t } from "../../lib/i18n";
+import { normalizeAdminRole } from "../../lib/roles";
import { isSuperAdminRole } from "../../lib/roles";
import {
downloadUserTemplate,
@@ -292,6 +293,7 @@ function UserListPage() {
queryKey: ["me"],
queryFn: fetchMe,
});
+ const profileRole = normalizeAdminRole(profile?.role);
const { data: tenantsData } = useQuery({
queryKey: ["tenants", "all"],
@@ -299,12 +301,12 @@ function UserListPage() {
});
const tenants = tenantsData?.items ?? [];
- // Lock company for tenant_admin
+ // Lock company for non-super_admin
React.useEffect(() => {
- if (profile?.role === "tenant_admin" && profile.tenantSlug) {
+ if (profileRole !== "super_admin" && profile?.tenantSlug) {
setSelectedCompany(profile.tenantSlug);
}
- }, [profile]);
+ }, [profile, profileRole]);
const selectedTenantId = React.useMemo(() => {
return tenants.find((t) => t.slug === selectedCompany)?.id ?? "";