Files
lti-web-client/src/components/pages/finance/form/FinanceForm.schema.ts
T
2025-12-15 14:12:09 +07:00

72 lines
2.1 KiB
TypeScript

'use client';
import * as Yup from 'yup';
import { OptionType } from '@/components/input/SelectInput';
import { CreateFinancePayload } from '@/types/api/finance';
export const FinanceFormSchema = Yup.object().shape({
transactionType: Yup.object()
.shape({
value: Yup.string().required(),
label: Yup.string().required(),
})
.nullable()
.required('Jenis Transaksi Wajib diisi'),
customerId: Yup.number()
.nullable()
.when('transactionType', {
is: (val: { value: string }) => val?.value === 'REVENUE',
then: (schema) => schema.required('Customer Wajib diisi'),
otherwise: (schema) => schema.notRequired(),
}),
paymentDate: Yup.string().required('Tanggal Pembayaran Wajib diisi'),
paymentMethod: Yup.object()
.shape({
value: Yup.string().required(),
label: Yup.string().required(),
})
.nullable()
.required('Metode Pembayaran Wajib diisi'),
bankId: Yup.number()
.nullable()
.test('required-if-transfer', 'Bank Wajib diisi', function (value) {
const paymentMethod = this.parent.paymentMethod;
if (paymentMethod?.value === 'TRANSFER' && !value) {
return false;
}
return true;
}),
supplierBankAccountNumber: Yup.string()
.nullable()
.test(
'required-if-transfer',
'Nomor Rekening Customer Wajib diisi',
function (value) {
const paymentMethod = this.parent.paymentMethod;
if (paymentMethod?.value === 'TRANSFER' && !value) {
return false;
}
return true;
}
),
referenceNumber: Yup.string().nullable(),
amount: Yup.number()
.typeError('Nominal harus berupa angka')
.required('Nominal Wajib diisi'),
notes: Yup.string().nullable(),
});
export type FinanceFormValues = {
transactionType: OptionType | null;
customerId: number | null;
customer: OptionType | null;
paymentDate: string;
paymentMethod: OptionType | null;
bankId: number | null;
bank: OptionType | null;
supplierBankAccountNumber: string;
referenceNumber: string;
amount: string;
notes: string;
};