import { FC, useEffect } from "react"; import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/lib/components/ui/dialog"; import { ButtonBetter, ButtonContainer } from "@/lib/components/ui/button"; import { Checkbox } from "@/lib/components/ui/checkbox"; import { IoEye } from "react-icons/io5"; import { HiPlus } from "react-icons/hi"; import { useLocal } from "@/lib/utils/use-local"; import api from "@/lib/utils/axios"; import { Form } from "../form/Form"; import { Field } from "../form/Field"; import { cloneFM } from "@/lib/utils/cloneFm"; import { toast } from "sonner"; import { AlertTriangle, Check, Loader2 } from "lucide-react"; import { get_user } from "@/lib/utils/get_user"; import { events } from "@/lib/utils/event"; import get from "lodash.get"; export const AlertCeoReject: FC = ({ lc }) => { const local = useLocal({ organization: [] as any[], reject: "reject-all" as any, fm: null as any, org: [] as string[] }); useEffect(() => { const run = async () => { const batch: any = await api.get( `${process.env.NEXT_PUBLIC_API_MPP}/api/batch/find-by-status/NEED APPROVAL` ); const btc = batch?.data?.data; const addtional = { status: "APPROVED", paging: 1, take: 500, }; const params = await events("onload-param", addtional); const res: any = await api.get( `${process.env.NEXT_PUBLIC_API_MPP}/api/batch/organizations/${btc?.id}` + params ); const data: any[] = res.data.data; const result = data?.length ? data.map((e) => { return { id: e.id, label: e.name }; }) : []; local.organization = result; local.render(); }; run(); }, []); const items = [ { id: "reject-all", label: "Reject All", }, { id: "reject-partially", label: "Reject Partially", }, ] as const; return ( <>
Reject
Reject
{items.map((item) => (
{ local.reject = item.id; local.render(); }} />
))}
{local?.reject === "reject-partially" && local?.organization?.length && ( <>
{}} onLoad={async () => { return { organization: [], }; }} showResize={false} header={(fm: any) => { return <>; }} onInit={(fm: any) => { local.fm = fm; local.render(); }} children={(fm: any) => { return (
{local.organization.map((item) => { const is_check = fm.data?.organization?.length ? fm.data.organization.find( (org: any) => org?.id === item.id ) : false; const data = fm.data?.organization?.length ? fm.data.organization.find( (org: any) => org?.id === item.id ) : {}; return (
{ if (e) { if ( !Array.isArray(fm.data?.organization) ) { fm.data["organization"] = []; fm.render(); } // Jika checkbox dicentang, tambahkan item ke array organization fm.data.organization.push({ id: item.id, }); } else { // Jika checkbox tidak dicentang, hapus item dari array organization fm.data["organization"] = fm.data ?.organization?.length ? fm.data.organization.filter( (org: any) => org?.id !== item.id ) : []; } fm.render(); local.org = fm.data?.organization?.length ? fm.data.organization.map((e: any) => { return { id: e.id } }) : []; local.render(); }} />
{is_check ? (
) : ( <> )}
); })}
); }} /> )}
No
{ toast.info( <> {"Saving..."} ); try { const isPartial = local.reject === "reject-partially"; if (isPartial) { const partial = local?.org || []; const res = await api.put( `${process.env.NEXT_PUBLIC_API_MPP}/api/mp-plannings/lines/reject-partial-pt`, { approver_id: get_user("employee.id"), payload: partial } ); } else { const batch = await api.get( `${process.env.NEXT_PUBLIC_API_MPP}/api/batch/find-by-status/NEED APPROVAL` ); const id = batch?.data?.data?.id; const param = { id, status: "REJECTED", approved_by: get_user("employee.id"), approver_name: get_user("employee.name"), }; const res = await api.put( `${process.env.NEXT_PUBLIC_API_MPP}/api/batch/update-status`, param ); } lc.data = null; lc.render() setTimeout(() => { toast.success(
{ toast.dismiss(); }} >
Record Saved
); }, 1000); } catch (ex: any) { toast.error(
Submit Failed { get(ex, "response.data.meta.message") || ex.message}.
, { dismissible: true, className: css` background: #ffecec; border: 2px solid red; `, } ); } }} >
Yes
); };