"use client"; import { Button, Input, Radio, RadioGroup, Select, SelectItem, SelectSection, Slider, Switch, Tab, Table, Tabs, Textarea, User, } from "@heroui/react"; import React, { useCallback, useEffect, useMemo, useRef, useState, } from "react"; import { TimesIcon } from "@/components/icons"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { close, error, loading } from "@/config/swal"; import Swal from "sweetalert2"; import withReactContent from "sweetalert2-react-content"; import dynamic from "next/dynamic"; import { Controller, useForm } from "react-hook-form"; import * as z from "zod"; import { zodResolver } from "@hookform/resolvers/zod"; import { createUserLevels, getAllUserLevels, } from "@/services/user-levels/user-levels-service"; import ReactSelect from "react-select"; import makeAnimated from "react-select/animated"; const createArticleSchema = z.object({ name: z.string().min(2, { message: "Required", }), aliasName: z.string().optional(), group: z.string().min(2, { message: "Required", }), }); const groups = [ { id: 1, name: "Mabes", value: "mabes", level: 1 }, { id: 2, name: "Polda", value: "polda", level: 2 }, { id: 3, name: "Satker", value: "satker", level: 2 }, { id: 4, name: "Polres", value: "polres", level: 3 }, { id: 5, name: "Subdiv", value: "subdiv", level: 3 }, ]; export default function CreateMasterUserLevelForm() { const router = useRouter(); const MySwal = withReactContent(Swal); const animatedComponents = makeAnimated(); const [needApproval, setNeedApproval] = useState(false); const [parentList, setParentList] = useState([]); const [selectedParent, setSelectedParent] = useState(); const formOptions = { resolver: zodResolver(createArticleSchema), defaultValues: { name: "", group: "" }, }; type UserSettingSchema = z.infer; const { register, control, handleSubmit, formState: { errors, isValid }, setValue, getValues, watch, setError, clearErrors, } = useForm(formOptions); const watchName = watch("name"); const generateSlug = (title: string) => { return title .toLowerCase() .trim() .replace(/[^\w\s-]/g, "") .replace(/\s+/g, "-"); }; useEffect(() => { setValue("aliasName", generateSlug(watchName)); }, [watchName]); const findSelectedLevel = (group: string) => { const selectedLevel = groups.find((a) => a.value === group); return selectedLevel ? selectedLevel : null; }; const save = async (data: any) => { const findParent = (group: string) => { if (group === "mabes") { return 0; } else if (group === "polda" || group === "satker") { if (group === "polda") { return 1; } else { return 555; } } else { return selectedParent?.id; } }; const request = { name: data.name, aliasName: data.aliasName, levelNumber: findSelectedLevel(data.group)?.level, isActive: true, group: data.group, parentLevelId: findParent(data.group), provinceId: 0, isApprovalActive: needApproval, }; loading(); const res = await createUserLevels(request); if (res.error) { error(res.message); return false; } close(); successSubmit("/admin/user-level"); }; async function onSubmit(data: any) { MySwal.fire({ title: "Save Data", text: "", icon: "warning", showCancelButton: true, cancelButtonColor: "#d33", confirmButtonColor: "#3085d6", confirmButtonText: "Save", }).then((result) => { if (result.isConfirmed) { save(data); } }); } function successSubmit(redirect: string) { MySwal.fire({ title: "Sukses", icon: "success", confirmButtonColor: "#3085d6", confirmButtonText: "OK", }).then((result) => { if (result.isConfirmed) { router.push(redirect); } }); } useEffect(() => { fetchCategory(); }, []); const fetchCategory = async () => { loading(); const request = { limit: 10, }; const res = await getAllUserLevels(request); close(); if (res?.data?.data) { setupParent(res?.data?.data); } }; const setupParent = (data: any) => { const temp = []; for (const element of data) { temp.push({ id: element.id, label: element.name, value: element.aliasName, }); } setParentList(temp); }; const selectedGroup = watch("group"); return (

Name*

( )} /> {errors?.name && (

{errors.name?.message}

)}

Alias Name

( )} /> {errors?.aliasName && (

{errors.aliasName?.message}

)}

Group*

( )} /> {errors?.name && (

{errors.name?.message}

)}

Need Approval

{needApproval ? "Active" : "Inactive"}

{findSelectedLevel(selectedGroup)?.level === 3 && ( <>

Parent

"!rounded-lg bg-white !border-1 !border-gray-200 dark:!border-stone-500", }} classNamePrefix="select" onChange={setSelectedParent} closeMenuOnSelect={false} components={animatedComponents} isClearable={true} isSearchable={true} isMulti={false} placeholder="" name="sub-module" options={parentList} /> )}
); }