forked from baron/baron-sso
fix(adminfront): fix Biome lint errors by removing explicit any types
This commit is contained in:
@@ -40,6 +40,7 @@ import {
|
|||||||
} from "../../../components/ui/table";
|
} from "../../../components/ui/table";
|
||||||
import { toast } from "../../../components/ui/use-toast";
|
import { toast } from "../../../components/ui/use-toast";
|
||||||
import {
|
import {
|
||||||
|
type TenantAdmin,
|
||||||
addTenantAdmin,
|
addTenantAdmin,
|
||||||
addTenantOwner,
|
addTenantOwner,
|
||||||
fetchTenantAdmins,
|
fetchTenantAdmins,
|
||||||
@@ -86,7 +87,7 @@ export function TenantAdminsAndOwnersTab() {
|
|||||||
await queryClient.cancelQueries({
|
await queryClient.cancelQueries({
|
||||||
queryKey: ["tenant-owners", tenantId],
|
queryKey: ["tenant-owners", tenantId],
|
||||||
});
|
});
|
||||||
const previousOwners = queryClient.getQueryData<any[]>([
|
const previousOwners = queryClient.getQueryData<TenantAdmin[]>([
|
||||||
"tenant-owners",
|
"tenant-owners",
|
||||||
tenantId,
|
tenantId,
|
||||||
]);
|
]);
|
||||||
@@ -94,17 +95,20 @@ export function TenantAdminsAndOwnersTab() {
|
|||||||
// Optimistically add to the list to prevent immediate double clicks
|
// Optimistically add to the list to prevent immediate double clicks
|
||||||
const addedUser = searchResults.find((u) => u.id === userId);
|
const addedUser = searchResults.find((u) => u.id === userId);
|
||||||
if (addedUser) {
|
if (addedUser) {
|
||||||
queryClient.setQueryData<any[]>(["tenant-owners", tenantId], (old) => {
|
queryClient.setQueryData<TenantAdmin[]>(
|
||||||
if (!old)
|
["tenant-owners", tenantId],
|
||||||
|
(old) => {
|
||||||
|
if (!old)
|
||||||
|
return [
|
||||||
|
{ id: userId, name: addedUser.name, email: addedUser.email },
|
||||||
|
];
|
||||||
|
if (old.some((o) => o.id === userId)) return old;
|
||||||
return [
|
return [
|
||||||
|
...old,
|
||||||
{ id: userId, name: addedUser.name, email: addedUser.email },
|
{ id: userId, name: addedUser.name, email: addedUser.email },
|
||||||
];
|
];
|
||||||
if (old.some((o) => o.id === userId)) return old;
|
},
|
||||||
return [
|
);
|
||||||
...old,
|
|
||||||
{ id: userId, name: addedUser.name, email: addedUser.email },
|
|
||||||
];
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
return { previousOwners };
|
return { previousOwners };
|
||||||
},
|
},
|
||||||
@@ -140,12 +144,13 @@ export function TenantAdminsAndOwnersTab() {
|
|||||||
await queryClient.cancelQueries({
|
await queryClient.cancelQueries({
|
||||||
queryKey: ["tenant-owners", tenantId],
|
queryKey: ["tenant-owners", tenantId],
|
||||||
});
|
});
|
||||||
const previousOwners = queryClient.getQueryData<any[]>([
|
const previousOwners = queryClient.getQueryData<TenantAdmin[]>([
|
||||||
"tenant-owners",
|
"tenant-owners",
|
||||||
tenantId,
|
tenantId,
|
||||||
]);
|
]);
|
||||||
queryClient.setQueryData<any[]>(["tenant-owners", tenantId], (old) =>
|
queryClient.setQueryData<TenantAdmin[]>(
|
||||||
old ? old.filter((o) => o.id !== userId) : [],
|
["tenant-owners", tenantId],
|
||||||
|
(old) => (old ? old.filter((o) => o.id !== userId) : []),
|
||||||
);
|
);
|
||||||
return { previousOwners };
|
return { previousOwners };
|
||||||
},
|
},
|
||||||
@@ -182,24 +187,27 @@ export function TenantAdminsAndOwnersTab() {
|
|||||||
await queryClient.cancelQueries({
|
await queryClient.cancelQueries({
|
||||||
queryKey: ["tenant-admins", tenantId],
|
queryKey: ["tenant-admins", tenantId],
|
||||||
});
|
});
|
||||||
const previousAdmins = queryClient.getQueryData<any[]>([
|
const previousAdmins = queryClient.getQueryData<TenantAdmin[]>([
|
||||||
"tenant-admins",
|
"tenant-admins",
|
||||||
tenantId,
|
tenantId,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const addedUser = searchResults.find((u) => u.id === userId);
|
const addedUser = searchResults.find((u) => u.id === userId);
|
||||||
if (addedUser) {
|
if (addedUser) {
|
||||||
queryClient.setQueryData<any[]>(["tenant-admins", tenantId], (old) => {
|
queryClient.setQueryData<TenantAdmin[]>(
|
||||||
if (!old)
|
["tenant-admins", tenantId],
|
||||||
|
(old) => {
|
||||||
|
if (!old)
|
||||||
|
return [
|
||||||
|
{ id: userId, name: addedUser.name, email: addedUser.email },
|
||||||
|
];
|
||||||
|
if (old.some((a) => a.id === userId)) return old;
|
||||||
return [
|
return [
|
||||||
|
...old,
|
||||||
{ id: userId, name: addedUser.name, email: addedUser.email },
|
{ id: userId, name: addedUser.name, email: addedUser.email },
|
||||||
];
|
];
|
||||||
if (old.some((a) => a.id === userId)) return old;
|
},
|
||||||
return [
|
);
|
||||||
...old,
|
|
||||||
{ id: userId, name: addedUser.name, email: addedUser.email },
|
|
||||||
];
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
return { previousAdmins };
|
return { previousAdmins };
|
||||||
},
|
},
|
||||||
@@ -234,12 +242,13 @@ export function TenantAdminsAndOwnersTab() {
|
|||||||
await queryClient.cancelQueries({
|
await queryClient.cancelQueries({
|
||||||
queryKey: ["tenant-admins", tenantId],
|
queryKey: ["tenant-admins", tenantId],
|
||||||
});
|
});
|
||||||
const previousAdmins = queryClient.getQueryData<any[]>([
|
const previousAdmins = queryClient.getQueryData<TenantAdmin[]>([
|
||||||
"tenant-admins",
|
"tenant-admins",
|
||||||
tenantId,
|
tenantId,
|
||||||
]);
|
]);
|
||||||
queryClient.setQueryData<any[]>(["tenant-admins", tenantId], (old) =>
|
queryClient.setQueryData<TenantAdmin[]>(
|
||||||
old ? old.filter((a) => a.id !== userId) : [],
|
["tenant-admins", tenantId],
|
||||||
|
(old) => (old ? old.filter((a) => a.id !== userId) : []),
|
||||||
);
|
);
|
||||||
return { previousAdmins };
|
return { previousAdmins };
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -12,11 +12,14 @@ import {
|
|||||||
Save,
|
Save,
|
||||||
Trash2,
|
Trash2,
|
||||||
UserCheck,
|
UserCheck,
|
||||||
UserMinus,
|
|
||||||
Users,
|
Users,
|
||||||
} from "lucide-react";
|
} from "lucide-react";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import { useForm } from "react-hook-form";
|
import {
|
||||||
|
type FieldErrors,
|
||||||
|
type UseFormRegister,
|
||||||
|
useForm,
|
||||||
|
} from "react-hook-form";
|
||||||
import { Link, useNavigate, useParams } from "react-router-dom";
|
import { Link, useNavigate, useParams } from "react-router-dom";
|
||||||
import { Badge } from "../../components/ui/badge";
|
import { Badge } from "../../components/ui/badge";
|
||||||
import { Button } from "../../components/ui/button";
|
import { Button } from "../../components/ui/button";
|
||||||
@@ -35,7 +38,6 @@ import {
|
|||||||
type UserUpdateRequest,
|
type UserUpdateRequest,
|
||||||
deleteUser,
|
deleteUser,
|
||||||
fetchMe,
|
fetchMe,
|
||||||
fetchTenant,
|
|
||||||
fetchTenants,
|
fetchTenants,
|
||||||
fetchUser,
|
fetchUser,
|
||||||
updateUser,
|
updateUser,
|
||||||
@@ -52,6 +54,10 @@ type UserSchemaField = {
|
|||||||
validation?: string;
|
validation?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type UserFormValues = Omit<UserUpdateRequest, "metadata"> & {
|
||||||
|
metadata: Record<string, Record<string, string | number | boolean>>;
|
||||||
|
};
|
||||||
|
|
||||||
function TenantMetadataFields({
|
function TenantMetadataFields({
|
||||||
tenant,
|
tenant,
|
||||||
schema,
|
schema,
|
||||||
@@ -60,8 +66,8 @@ function TenantMetadataFields({
|
|||||||
}: {
|
}: {
|
||||||
tenant: { id: string; name: string; slug: string };
|
tenant: { id: string; name: string; slug: string };
|
||||||
schema: UserSchemaField[];
|
schema: UserSchemaField[];
|
||||||
register: any;
|
register: UseFormRegister<UserFormValues>;
|
||||||
errors: any;
|
errors: FieldErrors<UserFormValues>;
|
||||||
}) {
|
}) {
|
||||||
if (schema.length === 0) return null;
|
if (schema.length === 0) return null;
|
||||||
|
|
||||||
@@ -107,7 +113,7 @@ function TenantMetadataFields({
|
|||||||
className={
|
className={
|
||||||
field.type === "boolean" ? "w-auto h-auto" : "h-8 text-sm"
|
field.type === "boolean" ? "w-auto h-auto" : "h-8 text-sm"
|
||||||
}
|
}
|
||||||
{...register(`metadata.${tenant.id}.${field.key}`, {
|
{...register(`metadata.${tenant.id}.${field.key}` as const, {
|
||||||
required: field.required
|
required: field.required
|
||||||
? t(
|
? t(
|
||||||
"msg.admin.users.detail.form.field_required",
|
"msg.admin.users.detail.form.field_required",
|
||||||
@@ -149,10 +155,6 @@ function TenantMetadataFields({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserFormValues = Omit<UserUpdateRequest, "metadata"> & {
|
|
||||||
metadata: Record<string, Record<string, any>>;
|
|
||||||
};
|
|
||||||
|
|
||||||
function UserDetailPage() {
|
function UserDetailPage() {
|
||||||
const params = useParams<{ id: string }>();
|
const params = useParams<{ id: string }>();
|
||||||
const userId = params.id ?? "";
|
const userId = params.id ?? "";
|
||||||
@@ -191,7 +193,6 @@ function UserDetailPage() {
|
|||||||
handleSubmit,
|
handleSubmit,
|
||||||
reset,
|
reset,
|
||||||
watch,
|
watch,
|
||||||
setValue,
|
|
||||||
formState: { errors },
|
formState: { errors },
|
||||||
} = useForm<UserFormValues>({
|
} = useForm<UserFormValues>({
|
||||||
defaultValues: {
|
defaultValues: {
|
||||||
@@ -261,7 +262,11 @@ function UserDetailPage() {
|
|||||||
department: user.department || "",
|
department: user.department || "",
|
||||||
position: user.position || "",
|
position: user.position || "",
|
||||||
jobTitle: user.jobTitle || "",
|
jobTitle: user.jobTitle || "",
|
||||||
metadata: user.metadata || {},
|
metadata:
|
||||||
|
(user.metadata as unknown as Record<
|
||||||
|
string,
|
||||||
|
Record<string, string | number | boolean>
|
||||||
|
>) || {},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, [user, reset]);
|
}, [user, reset]);
|
||||||
@@ -326,7 +331,10 @@ function UserDetailPage() {
|
|||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
mutation.mutate({ ...data, metadata: cleanMetadata });
|
mutation.mutate({
|
||||||
|
...data,
|
||||||
|
metadata: cleanMetadata as Record<string, unknown>,
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleDelete = () => {
|
const handleDelete = () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user