"use client"; import React, { useEffect, useState } from "react"; import { useForm, Controller } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import * as z from "zod"; import { Card } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Button } from "@/components/ui/button"; import Swal from "sweetalert2"; import withReactContent from "sweetalert2-react-content"; import { errorAutoClose, loading, successAutoClose } from "@/lib/swal"; import { close } from "@/config/swal"; import { getUserLevelDetail, updateUserLevel } from "@/service/tenant"; import { UserLevelsCreateRequest, getUserLevels, getProvinces, } from "@/service/approval-workflows"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Checkbox } from "@/components/ui/checkbox"; const tenantSchema = z.object({ aliasName: z.string().trim().min(1, { message: "Alias Name wajib diisi" }), levelNumber: z .number({ invalid_type_error: "Level Number harus berupa angka", }) .min(1, { message: "Level Number minimal 1" }), name: z.string().trim().min(1, { message: "Name wajib diisi" }), parentLevelId: z.number().optional(), provinceId: z.number().optional(), group: z.string().optional(), isApprovalActive: z.boolean().default(true), isActive: z.boolean().default(true), }); type TenantSchema = z.infer; interface TenantUpdateFormProps { id: number; initialData?: UserLevelsCreateRequest; onSuccess?: () => void; onCancel?: () => void; } export default function TenantUpdateForm({ id, onSuccess, onCancel, }: TenantUpdateFormProps) { const MySwal = withReactContent(Swal); const [loadingData, setLoadingData] = useState(false); const [userLevels, setUserLevels] = useState<{ id: number; name: string }[]>( [] ); const [provinces, setProvinces] = useState<{ id: number; prov_name: string }[]>( [] ); const { control, handleSubmit, setValue, formState: { errors }, } = useForm({ resolver: zodResolver(tenantSchema), defaultValues: { aliasName: "", levelNumber: 1, name: "", parentLevelId: undefined, provinceId: undefined, group: "", isApprovalActive: true, isActive: true, }, }); useEffect(() => { async function loadData() { setLoadingData(true); try { const [detailResponse, userLevelsResponse, provincesResponse] = await Promise.all([ getUserLevelDetail(id), getUserLevels(), getProvinces(), ]); if (!detailResponse.error && detailResponse.data) { const detail = detailResponse.data.data; setValue("aliasName", detail.aliasName ?? ""); setValue("levelNumber", detail.levelNumber ?? 1); setValue("name", detail.name ?? ""); setValue("parentLevelId", detail.parentLevelId); setValue("provinceId", detail.provinceId); setValue("group", detail.group ?? ""); setValue("isApprovalActive", detail.isApprovalActive ?? true); setValue("isActive", detail.isActive ?? true); console.log("OOOO", detailResponse.data); } else { console.error("Gagal mengambil detail:", detailResponse.message); } if (!userLevelsResponse?.error) { setUserLevels(userLevelsResponse?.data?.data || []); } if (!provincesResponse?.error) { setProvinces(provincesResponse?.data?.data || []); } } catch (err) { console.error("Error loading data:", err); } finally { setLoadingData(false); } } if (id) loadData(); }, [id, setValue]); const onSubmit = async (data: TenantSchema) => { try { loading(); const payload = { id: id, aliasName: data.aliasName, levelNumber: data.levelNumber, name: data.name, parentLevelId: data.parentLevelId, provinceId: data.provinceId, group: data.group, isApprovalActive: data.isApprovalActive, isActive: data.isActive, }; console.log("Payload dikirim ke API:", payload); const response = await updateUserLevel(Number(id), payload); close(); if (response?.error) { errorAutoClose(response.message || "Gagal memperbarui data."); return; } successAutoClose("Data berhasil diperbarui."); setTimeout(() => { if (onSuccess) onSuccess(); }, 3000); } catch (err) { close(); errorAutoClose("Terjadi kesalahan saat menyimpan data."); console.error("Update user level error:", err); } }; if (loadingData) { return (

Loading data...

); } return (

Update Tenant (User Level)

{/* Alias Name */}
( )} /> {errors.aliasName && (

{errors.aliasName.message}

)}
{/* Level Number */}
( field.onChange(Number(e.target.value) || 1)} placeholder="Masukkan level number" /> )} /> {errors.levelNumber && (

{errors.levelNumber.message}

)}
{/* Name */}
( )} /> {errors.name && (

{errors.name.message}

)}
{/* Parent Level */}
( )} /> {errors.parentLevelId && (

{errors.parentLevelId.message}

)}
{/* Province */}
( )} /> {errors.provinceId && (

{errors.provinceId.message}

)}
{/* Group */}
( )} /> {errors.group && (

{errors.group.message}

)}
{/* Approval Active */}
( )} /> {errors.isApprovalActive && (

{errors.isApprovalActive.message}

)}
{/* Active */}
( )} /> {errors.isActive && (

{errors.isActive.message}

)}
{/* Action Buttons */}
); }