"use client"; import SiteBreadcrumb from "@/components/site-breadcrumb"; import { zodResolver } from "@hookform/resolvers/zod"; import { Check, ChevronsUpDown } from "lucide-react"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { cn, getCookiesDecrypt } from "@/lib/utils"; import { Button } from "@/components/ui/button"; import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from "@/components/ui/command"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { AdministrationLevelList, getListCompetencies, getListEducation, getListSchools, getUserById, updateUserInternal, } from "@/service/management-user/management-user"; import { useEffect, useState } from "react"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { Link, useRouter } from "@/i18n/routing"; import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; import dynamic from "next/dynamic"; import { Checkbox } from "@/components/ui/checkbox"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import Swal from "sweetalert2"; import withReactContent from "sweetalert2-react-content"; import { close, error, loading } from "@/config/swal"; import { useParams } from "next/navigation"; import { getUserLevels } from "@/service/approval-workflows"; const PasswordChecklist = dynamic(() => import("react-password-checklist"), { ssr: false, }); const sns = [ { key: 1, id: "comment", typeId: 1, name: "Komentar Konten", }, { key: 2, id: "fb", typeId: 2, name: "Facebook", }, { key: 3, id: "ig", typeId: 3, name: "Instagram", }, { key: 4, id: "twt", typeId: 4, name: "Twitter", }, { key: 5, id: "yt", typeId: 5, name: "Youtube", }, { key: 6, id: "emergency", typeId: 6, name: "Emergency Issue", }, { key: 7, id: "email", typeId: 7, name: "Email", }, { key: 8, id: "inbox", typeId: 8, name: "Pesan Masuk", }, { key: 9, id: "whatsapp", typeId: 9, name: "Whatssapp", }, { key: 10, id: "tiktok", typeId: 10, name: "Tiktok", }, ]; interface RoleData { id: number; label: string; name: string; value: string; levelNumber: number; } const FormSchema = z.object({ level: z.string({ required_error: "Required", }), fullname: z.string({ required_error: "Required", }), username: z.string({ required_error: "Required", }), role: z.string({ required_error: "Required", }), // nrp: z.string({ // required_error: "Required", // }), address: z.string({ required_error: "Required", }), email: z.string({ required_error: "Required", }), phoneNumber: z.string({ required_error: "Required", }), password: z.string({ required_error: "Required", }), confirmPassword: z.string({ required_error: "Required", }), isValidPassword: z.boolean().refine((val) => val === true, { message: "Check Password", }), sns: z.array(z.string()).optional(), education: z.string().optional(), school: z.string().optional(), competency: z.string().optional(), }); export default function EditUserForm() { const router = useRouter(); const params = useParams(); const id = params?.id; const MySwal = withReactContent(Swal); const levelName = getCookiesDecrypt("ulnae"); const [roleList, setRoleList] = useState([]); const [userEducations, setUserEducations] = useState(); const [userSchools, setUserSchools] = useState(); const [userCompetencies, setUserCompetencies] = useState(); const form = useForm>({ resolver: zodResolver(FormSchema), defaultValues: { password: "", confirmPassword: "", sns: [], education: "1", school: "4", competency: "2", }, }); const passwordVal = form.watch("password"); const confPasswordVal = form.watch("confirmPassword"); const selectedRole = form.watch("role"); useEffect(() => { getDataAdditional(); initData(); }, []); 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(); const list = response?.data?.data; const user = list?.find((item: any) => item.id === Number(id)); if (!user) { error("User tidak ditemukan"); return; } console.log("RESET WITH USER:", user); // 3️⃣ Reset SETELAH level ADA form.reset({ fullname: user.fullname ?? "", username: user.username ?? "", email: user.email ?? "", address: user.address ?? "", phoneNumber: user.phoneNumber ?? "", // nrp: user.identityNumber ?? "", level: String(user.userLevelId), role: String(user.userRoleId ?? ""), password: "", confirmPassword: "", sns: [], education: "", school: "", competency: "", }); }; // const initData = async () => { // console.log("PARAM ID:", id); // loading(); // const response = await getUserById(String(id)); // const res = response?.data?.data; // close(); // console.log("FULL RESPONSE:", response); // console.log("RESPONSE.DATA:", response?.data); // console.log("RESPONSE.DATA.DATA:", response?.data?.data); // if (Number(res.roleId) > 4) { // form.setValue("fullname", res?.fullname); // form.setValue("username", res?.username); // form.setValue("phoneNumber", res?.phoneNumber); // form.setValue("nrp", res?.memberIdentity); // form.setValue("address", res?.address); // form.setValue("email", res?.email); // form.setValue("role", res?.role?.code); // form.setValue("level", String(res?.userLevelId)); // } else { // initFetch(); // form.setValue("fullname", res?.fullname); // form.setValue("username", res?.username); // form.setValue("phoneNumber", res?.phoneNumber); // form.setValue("nrp", res?.memberIdentity); // form.setValue("address", res?.address); // form.setValue("email", res?.email); // form.setValue("role", res?.role?.code); // form.setValue("level", String(res?.userLevelId)); // } // }; const initFetch = async () => { const response = await getUserLevels(); const res = response?.data?.data ?? []; const levelsArr: RoleData[] = res.map((levels: any) => ({ id: levels.id, label: levels.aliasName ?? levels.name, name: levels.name, value: String(levels.id), levelNumber: levels.levelNumber, })); setRoleList(levelsArr); return levelsArr; // ⬅️ PENTING }; async function getDataAdditional() { const resEducations = await getListEducation(); setUserEducations(resEducations?.data?.data); const resSchools = await getListSchools(); setUserSchools(resSchools?.data?.data); const resCompetencies = await getListCompetencies(); setUserCompetencies(resCompetencies?.data?.data); } const rawRoleId = getCookiesDecrypt("urie"); const userRoleId = rawRoleId ? Number(rawRoleId) : undefined; if (!userRoleId || Number.isNaN(userRoleId)) { error("Role user tidak valid, silakan login ulang"); 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) { const req = { fullname: data.fullname, username: data.username, email: data.email, address: data.address, phoneNumber: data.phoneNumber, userLevelId: Number(data.level), userRoleId: userRoleId, }; // let req: any = { // id: Number(id), // firstName: data.fullname, // username: data.username, // roleId: data.role, // userLevelId: Number(data.level), // memberIdentity: data.nrp, // address: data.address, // email: data.email, // password: data.password, // passwordConf: data.confirmPassword, // isDefault: false, // isAdmin: true, // }; console.log("USER ROLE ID FROM COOKIE:", rawRoleId, userRoleId); console.log("REQUEST UPDATE:", req); loading(); const response = await updateUserInternal(Number(id), req); if (response?.error) { error(response.message); return false; } close(); MySwal.fire({ title: "Sukses", icon: "success", confirmButtonColor: "#3085d6", confirmButtonText: "Oke", }).then((result) => { if (result.isConfirmed) { router.push("/admin/management-user"); } }); return false; } async function onSubmit(data: z.infer) { MySwal.fire({ title: "Simpan Data?", text: "", icon: "warning", showCancelButton: true, cancelButtonColor: "#d33", confirmButtonColor: "#3085d6", confirmButtonText: "Simpan", }).then((result) => { if (result.isConfirmed) { save(data); } }); } return (

Data User

( Pilih Level No role found. {roleList.map((role) => ( { form.setValue("level", role.value); }} > {role.label} ))} )} /> ( Nama Lengkap )} /> ( Username )} /> {/* ( Role {roles.map((role) => ( {role.name} ))} )} /> */} {/* {selectedRole === "OPT-ID" && ( (
Social Media Yang Ditangani
{sns.map((item) => ( { return ( { return checked ? field.onChange([ ...(field.value || []), String(item.typeId), ]) : field.onChange( (field.value || []).filter( (value) => value !== String(item.typeId), ), ); }} /> {item.name} ); }} /> ))}
)} /> )} {selectedRole === "KUR-ID" && ( <> ( Pendidikan Terakhir )} /> ( Universitas / Perguruan Tinggi )} /> ( Kompetensi )} /> )} ( Nomor Regitrasi Polri {`(NRP)`} )} /> */} ( Alamat