'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; className?: { wrapper?: string; }; } const ExpenseRealizationKandangDetailExpense: React.FC< ExpenseRealizationKandangDetailExpenseProps > = ({ type, formik, className }) => { const { setInputValue: setNonstockInputValue, options: nonstockOptions, isLoadingOptions: isLoadingNonstockOptions, } = useSelect(NonstockApi.basePath, 'id', 'name'); 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.realizations.length === 0 && (

Pilih kandang terlebih dahulu!

)} {formik.values.realizations.map((kandangExpense, kandangExpenseIdx) => { const kandangName = formik.values.kandangs?.find( (kandang) => kandang.id === kandangExpense.kandang_id ); return ( kandangName?.name && (
Biaya {kandangName?.name}
{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;