fix: edit users

This commit is contained in:
Sabda Yagra 2026-02-09 14:49:39 +07:00
parent 995a5db0b4
commit dd2344a59f
5 changed files with 122 additions and 105 deletions

View File

@ -124,18 +124,18 @@ interface RoleData {
}
const FormSchema = z.object({
level: z.string({
required_error: "Required",
}),
// level: z.string({
// required_error: "Required",
// }),
fullname: z.string({
required_error: "Required",
}),
username: z.string({
required_error: "Required",
}),
role: z.string({
required_error: "Required",
}),
// role: z.string({
// required_error: "Required",
// }),
// nrp: z.string({
// required_error: "Required",
// }),
@ -170,7 +170,6 @@ export default function EditUserForm() {
const MySwal = withReactContent(Swal);
const levelName = getCookiesDecrypt("ulnae");
const [roleList, setRoleList] = useState<RoleData[]>([]);
const [userEducations, setUserEducations] = useState<any>();
const [userSchools, setUserSchools] = useState<any>();
const [userCompetencies, setUserCompetencies] = useState<any>();
@ -189,7 +188,6 @@ export default function EditUserForm() {
const passwordVal = form.watch("password");
const confPasswordVal = form.watch("confirmPassword");
const selectedRole = form.watch("role");
useEffect(() => {
getDataAdditional();
@ -198,12 +196,8 @@ export default function EditUserForm() {
const initData = async () => {
loading();
// 1⃣ Ambil level dulu
const levels = await initFetch();
console.log("LEVEL READY:", levels);
// 2⃣ Ambil user
const response = await getUserById(String(id));
close();
@ -225,8 +219,8 @@ export default function EditUserForm() {
address: user.address ?? "",
phoneNumber: user.phoneNumber ?? "",
// nrp: user.identityNumber ?? "",
level: String(user.userLevelId),
role: String(user.userRoleId ?? ""),
// level: String(user.userLevelId),
// role: String(user.userRoleId ?? ""),
password: "",
confirmPassword: "",
sns: [],
@ -281,7 +275,7 @@ export default function EditUserForm() {
}));
setRoleList(levelsArr);
return levelsArr; // ⬅️ PENTING
return levelsArr;
};
async function getDataAdditional() {
@ -301,49 +295,6 @@ export default function EditUserForm() {
return;
}
const roles =
levelName == "MABES POLRI"
? [
{
id: "ADM-ID",
name: "Admin",
},
{
id: "APP-ID",
name: "Approver",
},
{
id: "CON-ID",
name: "Kontributor",
},
{
id: "SPV-ID",
name: "Supervisor Feedback Center",
},
{
id: "OPT-ID",
name: "Operator Feedback Center",
},
{
id: "KKUR-ID",
name: "Koor Kurator",
},
{
id: "KUR-ID",
name: "Kurator",
},
]
: [
{
id: "APP-ID",
name: "Approver",
},
{
id: "CON-ID",
name: "Kontributor",
},
];
async function save(data: z.infer<typeof FormSchema>) {
const req = {
fullname: data.fullname,
@ -351,8 +302,8 @@ export default function EditUserForm() {
email: data.email,
address: data.address,
phoneNumber: data.phoneNumber,
userLevelId: Number(data.level),
userRoleId: userRoleId,
// userLevelId: Number(data.level),
// userRoleId: userRoleId,
};
// let req: any = {
@ -420,7 +371,7 @@ export default function EditUserForm() {
className="space-y-6 bg-white p-10 w-full"
>
<p className="text-xl">Data User</p>
<FormField
{/* <FormField
control={form.control}
name="level"
render={({ field }) => (
@ -478,7 +429,7 @@ export default function EditUserForm() {
<FormMessage />
</FormItem>
)}
/>
/> */}
<FormField
control={form.control}
name="fullname"

View File

@ -35,7 +35,7 @@ const BannerListTable = () => {
const [sorting, setSorting] = React.useState<SortingState>([]);
const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>(
[]
[],
);
const [columnVisibility, setColumnVisibility] =
React.useState<VisibilityState>({});
@ -44,7 +44,7 @@ const BannerListTable = () => {
pageIndex: 0,
pageSize: Number(showData),
});
const [getData, setGetData] = React.useState<any>([]);
const [getData, setGetData] = React.useState<any[]>([]);
const dataChange = searchParams?.get("dataChange");
const [page, setPage] = React.useState(1);
@ -90,17 +90,38 @@ const BannerListTable = () => {
}, [page, showData]);
async function getListBanner() {
loading();
let temp: any;
try {
loading();
const response = await listBanner();
const data = response?.data?.data?.content;
console.log("banner", data);
setGetData(data);
const response = await listBanner();
close();
const data = Array.isArray(response?.data?.data?.content)
? response.data.data.content
: [];
console.log("banner", data);
setGetData(data);
} catch (error) {
console.error("Error fetching banner list:", error);
setGetData([]);
} finally {
close();
}
}
// async function getListBanner() {
// loading();
// let temp: any;
// const response = await listBanner();
// const data = response?.data?.data?.content;
// console.log("banner", data);
// setGetData(data);
// close();
// }
return (
<>
<Table className="overflow-hidden mt-10">
@ -113,7 +134,7 @@ const BannerListTable = () => {
? null
: flexRender(
header.column.columnDef.header,
header.getContext()
header.getContext(),
)}
</TableHead>
))}

View File

@ -35,7 +35,7 @@ const ContentListBanner = () => {
const [totalData, setTotalData] = React.useState<number>(1);
const [sorting, setSorting] = React.useState<SortingState>([]);
const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>(
[]
[],
);
const [columnVisibility, setColumnVisibility] =
React.useState<VisibilityState>({});
@ -60,7 +60,7 @@ const ContentListBanner = () => {
try {
const res = await listDataMedia(0, "100", "", "", "");
const banners = res?.data?.data?.content?.filter(
(item: any) => item.isBanner
(item: any) => item.isBanner,
);
setBannerCount(banners?.length || 0);
@ -117,31 +117,67 @@ const ContentListBanner = () => {
async function fetchData() {
try {
loading();
const res = await listDataMedia(
page - 1,
showData,
searchQuery,
categoryFilter?.sort().join(","),
statusFilter?.sort().join(",")
statusFilter?.sort().join(","),
);
const data = res?.data?.data;
const contentData = data?.content;
const rawData = res?.data?.data;
const contentData = Array.isArray(rawData?.content)
? rawData.content
: [];
contentData.forEach((item: any, index: number) => {
item.no = (page - 1) * Number(showData) + index + 1;
});
console.log("contentData : ", data);
setData(contentData);
setTotalData(data?.totalElements);
setTotalPage(data?.totalPages);
setTotalData(rawData?.totalElements ?? 0);
setTotalPage(rawData?.totalPages ?? 1);
close();
} catch (error) {
console.error("Error fetching tasks:", error);
close();
console.error("Error fetching banner data:", error);
setData([]);
setTotalData(0);
setTotalPage(1);
}
}
// async function fetchData() {
// try {
// loading();
// const res = await listDataMedia(
// page - 1,
// showData,
// searchQuery,
// categoryFilter?.sort().join(","),
// statusFilter?.sort().join(",")
// );
// const data = res?.data?.data;
// const contentData = data?.content;
// contentData.forEach((item: any, index: number) => {
// item.no = (page - 1) * Number(showData) + index + 1;
// });
// console.log("contentData : ", data);
// setData(contentData);
// setTotalData(data?.totalElements);
// setTotalPage(data?.totalPages);
// close();
// } catch (error) {
// console.error("Error fetching tasks:", error);
// }
// }
React.useEffect(() => {
getCategories();
}, []);
@ -176,7 +212,7 @@ const ContentListBanner = () => {
const handleSelect = (id: number) => {
setSelectedItems((prev) =>
prev.includes(id) ? prev.filter((item) => item !== id) : [...prev, id]
prev.includes(id) ? prev.filter((item) => item !== id) : [...prev, id],
);
};

View File

@ -40,7 +40,7 @@ const AdminTagTable = () => {
const [totalData, setTotalData] = React.useState<number>(1);
const [sorting, setSorting] = React.useState<SortingState>([]);
const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>(
[]
[],
);
const [columnVisibility, setColumnVisibility] =
React.useState<VisibilityState>({});
@ -95,24 +95,33 @@ const AdminTagTable = () => {
try {
loading();
const response = await getTags();
const data = response?.data?.data;
const data = Array.isArray(response?.data?.data)
? response.data.data
: [];
data.forEach((item: any, index: number) => {
item.no = (page - 1) * 10 + index + 1;
});
setDataTable(data);
setTotalData(data?.length);
setTotalData(data.length);
setTotalPage(1);
close();
} catch (error) {
console.error("Error fetching tasks:", error);
close();
console.error("Error fetching tags:", error);
setDataTable([]);
setTotalData(0);
}
}
return (
<div className="w-full overflow-x-auto bg-white p-4 rounded-sm space-y-3">
<div className="flex justify-between mb-10 items-center">
<p className="text-xl font-medium text-default-900">{t("tags", { defaultValue: "Tags" })}</p>
<p className="text-xl font-medium text-default-900">
{t("tags", { defaultValue: "Tags" })}
</p>
<CreateFAQModal />
</div>
@ -126,7 +135,7 @@ const AdminTagTable = () => {
? null
: flexRender(
header.column.columnDef.header,
header.getContext()
header.getContext(),
)}
</TableHead>
))}
@ -134,8 +143,8 @@ const AdminTagTable = () => {
))}
</TableHeader>
<TableBody>
{table.getRowModel().rows?.length ? (
table.getRowModel().rows.map((row) => (
{table?.getRowModel()?.rows?.length ? (
table?.getRowModel()?.rows.map((row) => (
<TableRow
key={row.id}
data-state={row.getIsSelected() && "selected"}

View File

@ -238,20 +238,20 @@ export function getMenuList(pathname: string, t: any): Group[] {
icon: "heroicons:arrow-trending-up",
children: [],
},
// {
// href: "/admin/settings/tag",
// label: "Tag",
// active: pathname === "/admin/settings/tag",
// icon: "heroicons:arrow-trending-up",
// children: [],
// },
// {
// href: "/admin/settings/banner",
// label: "Banner",
// active: pathname === "/admin/settings/banner",
// icon: "heroicons:arrow-trending-up",
// children: [],
// },
{
href: "/admin/settings/tag",
label: "Tag",
active: pathname === "/admin/settings/tag",
icon: "heroicons:arrow-trending-up",
children: [],
},
{
href: "/admin/settings/banner",
label: "Banner",
active: pathname === "/admin/settings/banner",
icon: "heroicons:arrow-trending-up",
children: [],
},
],
},
],