import { keyWibu, LayoutDrawer, TEMA, WARNA } from "@/module/_global" import LayoutModal from "@/module/_global/layout/layout_modal" import { funGetAllGroup, IDataGroup } from "@/module/group" import { Box, Stack, SimpleGrid, Flex, Text, Select, TextInput, Button, Skeleton } from "@mantine/core" import { useShallowEffect } from "@mantine/hooks" import { useEffect, useState } from "react" import toast from "react-hot-toast" import { FaPencil, FaToggleOff } from "react-icons/fa6" import { funEditPosition, funEditStatusPosition, funGetOnePosition } from "../lib/api_position" import { IDataPosition } from "../lib/type_position" import { useHookstate } from "@hookstate/core" import { globalRefreshPosition } from "../lib/val_posisition" import { useWibuRealtime } from "wibu-realtime" export default function DrawerDetailPosition({ onUpdated, id, isActive }: { onUpdated: (val: boolean) => void, id: string, isActive: boolean; }) { const [openDrawerGroup, setOpenDrawerGroup] = useState(false) const [isModal, setModal] = useState(false) const refresh = useHookstate(globalRefreshPosition) const [loading, setLoading] = useState(true) const [loadingEdit, setLoadingEdit] = useState(false) const tema = useHookstate(TEMA) const [data, setData] = useState({ id: id, name: "", idGroup: "" }) const [listGroup, setListGorup] = useState([]) const [touched, setTouched] = useState({ name: false, }); const [dataRealTime, setDataRealtime] = useWibuRealtime({ WIBU_REALTIME_TOKEN: keyWibu, project: "sdm" }) function onCLose() { onUpdated(true) setOpenDrawerGroup(false) } async function getAllGroup() { try { const response = await funGetAllGroup('?active=true') if (response.success) { setListGorup(response.data); } else { toast.error(response.message); } } catch (error) { console.error(error) toast.error("Gagal mendapatkan grup, coba lagi nanti"); } } async function getOneData() { try { setLoading(true) const res = await funGetOnePosition(id) if (res.success) { setData(res.data) } else { toast.error(res.message) } setLoading(false) } catch (error) { console.error(error) toast.error("Gagal mendapatkan jabatan, coba lagi nanti"); } finally { setLoading(false) } } async function onSubmit() { try { setLoadingEdit(true) const res = await funEditPosition(id, { name: data.name, idGroup: data.idGroup }) if (res.success) { toast.success(res.message); setDataRealtime([{ category: "data-position", group: data.idGroup, }]) refresh.set(!refresh.get()) onUpdated(true); onCLose(); } else { onUpdated(false); toast.error(res.message) } } catch (error) { toast.error('Error'); toast.error("Edit jabatan gagal, coba lagi nanti"); } finally { setLoadingEdit(false) } } useShallowEffect(() => { getAllGroup() getOneData() }, [refresh.get()]) function onCheck() { if (Object.values(touched).some((v) => v == true)) return false onSubmit() } function onValidation(kategori: string, val: string) { if (kategori == 'name') { setData({ ...data, name: val }) if (val == "" || val.length < 3) { setTouched({ ...touched, name: true }) } else { setTouched({ ...touched, name: false }) } } } async function nonActive(val: boolean) { try { if (val) { const res = await funEditStatusPosition(id, { isActive: isActive }) if (res.success) { toast.success(res.message); setDataRealtime([{ category: "data-position", group: data.idGroup, }]) refresh.set(!refresh.get()) onUpdated(true); } else { onUpdated(false); toast.error(res.message) } } setModal(false); } catch (error) { console.error(error); setModal(false); toast.error("Edit jabatan gagal, coba lagi nanti"); onUpdated(false); } } return ( setModal(true)} > {isActive == false ? "Aktifkan" : "Non Aktifkan"} setOpenDrawerGroup(true)} > Edit setOpenDrawerGroup(false)} title={'Edit Jabatan'} > {loading ? : { onValidation('name', e.target.value) }} error={ touched.name && (data.name == "" ? "Nama Jabatan Tidak Boleh Kosong" : data.name.length < 3 ? "Masukkan Minimal 3 karakter" : "" ) } radius={10} placeholder="Nama Jabatan" /> } setModal(false)} description="Apakah Anda yakin ingin mengubah status aktifasi data?" onYes={(val) => { nonActive(val) }} /> ) }