'use client'; import { FormikContextType } from 'formik'; import Card from '@/components/Card'; import SelectInput, { OptionType, useSelect, } from '@/components/input/SelectInput'; import NumberInput from '@/components/input/NumberInput'; import TextInput from '@/components/input/TextInput'; import { ExpenseRealizationFormValues } from '@/components/pages/expense/form/ExpenseRealizationForm.schema'; import { cn } from '@/lib/helper'; import { NonstockApi } from '@/services/api/master-data'; import { Nonstock } from '@/types/api/master-data/nonstock'; interface ExpenseRealizationKandangDetailExpenseProps { type?: 'add' | 'edit' | 'detail'; formik: FormikContextType; supplierId?: number; location?: { value: number; label: string; }; className?: { wrapper?: string; }; } const ExpenseRealizationKandangDetailExpense: React.FC< ExpenseRealizationKandangDetailExpenseProps > = ({ formik, supplierId, location, className }) => { const { setInputValue: setNonstockInputValue, options: nonstockOptions, isLoadingOptions: isLoadingNonstockOptions, } = useSelect( NonstockApi.basePath, 'id', 'name', 'search', supplierId ? { supplier_id: String(supplierId) } : undefined ); const nonstockChangeHandler = ( kandangExpenseIdx: number, costItemIdx: number, val: OptionType | OptionType[] | null ) => { formik.setFieldTouched( `realizations[${kandangExpenseIdx}].cost_items[${costItemIdx}].nonstock`, true ); formik.setFieldValue( `realizations[${kandangExpenseIdx}].cost_items[${costItemIdx}].nonstock`, val ); }; const isExpenseRepeaterInputError = ( column: 'nonstock' | 'quantity' | 'price' | 'notes', kandangExpenseIdx: number, expenseIdx: number ) => { return ( formik.touched.realizations?.[kandangExpenseIdx]?.cost_items?.[ expenseIdx ]?.[column] && Boolean( formik.errors.realizations?.[kandangExpenseIdx] instanceof Object && formik.errors.realizations?.[kandangExpenseIdx].cost_items?.[ expenseIdx ] instanceof Object && formik.errors.realizations?.[kandangExpenseIdx].cost_items?.[ expenseIdx ]?.[column] ) ); }; return (

Rincian Realisasi Biaya Operasional

{!formik.values.supplier?.value && (

Pilih supplier terlebih dahulu!

)} {formik.values.realizations.length === 0 && formik.values.supplier?.value && (

Belum ada item biaya. Silakan pilih lokasi terlebih dahulu.

)} {formik.values.realizations.length > 0 && formik.values.supplier?.value && formik.values.realizations.map( (kandangExpense, kandangExpenseIdx) => { const kandangName = kandangExpense.kandang_id ? formik.values.kandangs?.find( (kandang) => kandang.id === kandangExpense.kandang_id ) : null; return ( (kandangName?.name || !kandangExpense.kandang_id) && (
{kandangName?.name ? `Biaya ${kandangName.name}` : location?.label ? `Biaya ${location.label}` : 'Biaya Umum'}
{kandangExpense.cost_items.map( (expenseItem, expenseIdx) => ( ) )}
Nonstock Total Kuantitas Harga Satuan Catatan
{ nonstockChangeHandler( kandangExpenseIdx, expenseIdx, val ); }} options={nonstockOptions} isLoading={isLoadingNonstockOptions} onInputChange={setNonstockInputValue} className={{ wrapper: 'min-w-48' }} isDisabled /> Rp } className={{ wrapper: 'min-w-24' }} />
) ); } )}
); }; export default ExpenseRealizationKandangDetailExpense;