"use client"; import { close, error, loading } from "@/config/swal"; import { createMasterUser, editMasterUsers, getDetailMasterUsers, } from "@/service/master-user"; import { MasterUser } from "@/types/globals"; import { zodResolver } from "@hookform/resolvers/zod"; import { Button, Card, Input, Radio, RadioGroup, Select, SelectItem, Selection, Textarea, } from "@heroui/react"; import Link from "next/link"; import { useParams, useRouter } from "next/navigation"; import React, { useEffect, useState } from "react"; import { Controller, useForm } from "react-hook-form"; import Datepicker from "react-tailwindcss-datepicker"; import Swal from "sweetalert2"; import withReactContent from "sweetalert2-react-content"; import { z } from "zod"; import ReactSelect from "react-select"; import makeAnimated from "react-select/animated"; import { getAllUserLevels } from "@/services/user-levels/user-levels-service"; import { listUserRole } from "@/service/master-user-role"; const userSchema = z.object({ id: z.number(), label: z.string(), value: z.string(), }); const masterUserSchema = z.object({ fullname: z.string().min(1, { message: "Required" }), username: z.string().min(1, { message: "Required" }), email: z.string().min(1, { message: "Required" }), identityNumber: z.string().min(1, { message: "Required" }), genderType: z.string().min(1, { message: "Required" }), phoneNumber: z.string().min(1, { message: "Required" }), address: z.string().min(1, { message: "Required" }), userLevelType: userSchema, userRoleType: userSchema, }); export default function FormMasterUserEdit() { const router = useRouter(); const MySwal = withReactContent(Swal); const animatedComponents = makeAnimated(); const params = useParams(); const id = params?.id; const [parentList, setParentList] = useState([]); const [listRole, setListRole] = useState([]); const formOptions = { resolver: zodResolver(masterUserSchema), }; type MicroIssueSchema = z.infer; const { control, handleSubmit, formState: { errors }, setError, watch, setValue, } = useForm(formOptions); async function save(data: z.infer) { const formData = { address: data.address, email: data.email, fullname: data.fullname, genderType: data.genderType, identityNumber: data.identityNumber, phoneNumber: data.phoneNumber, userLevelId: data.userLevelType.id, userRoleId: data.userRoleType.id, username: data.username, }; const response = await editMasterUsers(formData, String(id)); if (response?.error) { error(response.message); return false; } successSubmit("/admin/master-user"); } function successSubmit(redirect: any) { MySwal.fire({ title: "Sukses", icon: "success", confirmButtonColor: "#3085d6", confirmButtonText: "OK", }).then((result) => { if (result.isConfirmed) { router.push(redirect); } }); } 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); } }); } useEffect(() => { initFetch(); }, [id]); const initFetch = async () => { loading(); const res = await getDetailMasterUsers(String(id)); const profile = res?.data?.data; const listLevel = await fetchUserLevel(); const listRole = await fetchUserRole(); const findLevel = listLevel?.find((a) => a.id === profile.userLevelId); const findRole = listRole?.find((a) => a.id === profile.userRoleId); setValue("fullname", profile?.fullname); setValue("username", profile?.username); setValue("email", profile?.email); setValue("address", profile?.address); setValue("identityNumber", profile?.identityNumber); setValue("genderType", profile?.genderType); setValue("phoneNumber", profile?.phoneNumber); if (findLevel) { setValue("userLevelType", findLevel); } if (findRole) { setValue("userRoleType", findRole); } close(); }; const fetchUserLevel = async () => { const res = await getAllUserLevels(); if (res?.data?.data) { return setupParent(res?.data?.data, "level"); } }; const fetchUserRole = async () => { const request = { limit: 100, page: 1, }; const res = await listUserRole(request); if (res?.data?.data) { return setupParent(res?.data?.data, "role"); } }; const setupParent = (data: any, type: "level" | "role") => { const temp = []; for (const element of data) { temp.push({ id: element.id, label: element.name, value: element.aliasName || element.code, }); } if (type === "level") { setParentList(temp); } else { setListRole(temp); } return temp; }; return (
( )} /> {errors.fullname?.message && (

{errors.fullname?.message}

)} ( )} /> {errors.username?.message && (

{errors.username?.message}

)} ( )} /> {errors.email?.message && (

{errors.email?.message}

)} {/* ( )} /> {errors.identityType?.message && (

{errors.identityType?.message}

)} */} ( )} /> {errors.identityNumber?.message && (

{errors.identityNumber?.message}

)} (