From 2b4b40c0d9e966b874a1d2616fa393a3174da4ca Mon Sep 17 00:00:00 2001 From: chan Date: Wed, 4 Mar 2026 13:55:54 +0900 Subject: [PATCH] feat: enhance tenant admin experience with form locking and column visibility settings --- .../src/features/users/UserCreatePage.tsx | 14 +++ .../src/features/users/UserDetailPage.tsx | 7 ++ .../src/features/users/UserListPage.tsx | 90 +++++++++++++++++-- 3 files changed, 105 insertions(+), 6 deletions(-) diff --git a/adminfront/src/features/users/UserCreatePage.tsx b/adminfront/src/features/users/UserCreatePage.tsx index 3147c701..03914928 100644 --- a/adminfront/src/features/users/UserCreatePage.tsx +++ b/adminfront/src/features/users/UserCreatePage.tsx @@ -50,10 +50,16 @@ function UserCreatePage() { }); const tenants = tenantsData?.items ?? []; + const { data: profile } = useQuery({ + queryKey: ["me"], + queryFn: fetchMe, + }); + const { register, handleSubmit, watch, + setValue, formState: { errors }, } = useForm({ defaultValues: { @@ -70,6 +76,13 @@ function UserCreatePage() { }, }); + // Lock company for tenant_admin + React.useEffect(() => { + if (profile?.role === "tenant_admin" && profile.companyCode) { + setValue("companyCode", profile.companyCode); + } + }, [profile, setValue]); + const selectedCompanyCode = watch("companyCode"); const selectedTenant = tenants.find((t) => t.slug === selectedCompanyCode); @@ -352,6 +365,7 @@ function UserCreatePage() { id="companyCode" className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50" {...register("companyCode")} + disabled={profile?.role === "tenant_admin"} >