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 ?? "";