feat(FE-65): enhance MovementForm to support file uploads with FormData conversion

This commit is contained in:
rstubryan
2025-10-14 14:00:58 +07:00
parent b2f0bd6698
commit 19bca9ec73
4 changed files with 85 additions and 12 deletions
@@ -31,6 +31,8 @@ import {
WarehouseApi,
} from '@/services/api/master-data';
import { toast } from 'react-hot-toast';
import FileInput from '@/components/input/FileInput';
import { containsFile } from '@/lib/form-data';
interface MovementFormProps {
type?: 'add' | 'edit' | 'detail';
@@ -62,6 +64,11 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
validationSchema:
type === 'edit' ? UpdateMovementFormSchema : MovementFormSchema,
onSubmit: async (values) => {
console.log(
'Dokumen:',
values.ekspedisi?.map((e) => e.dokumen)
);
setMovementFormErrorMessage('');
const payload: CreateMovementPayload = {
alasan_transfer: values.alasan_transfer,
@@ -88,6 +95,9 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
})),
};
console.log('containsFile:', containsFile(payload));
console.log('payload:', payload);
switch (type) {
case 'add':
await createMovementHandler(payload);
@@ -810,9 +820,8 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
/>
</td>
<td>
<TextInput
<FileInput
required
type='file'
name={`ekspedisi.${idx}.dokumen`}
onChange={(e) => {
const file = e.target.files?.[0];
@@ -8,6 +8,7 @@ import {
UpdateMovementPayload,
} from '@/types/api/inventory/movement';
import { isResponseError } from '@/lib/api-helper';
import { containsFile, toFormData } from '@/lib/form-data';
export const useMovementFormHandlers = (initialValuesId?: number) => {
const router = useRouter();
@@ -17,7 +18,11 @@ export const useMovementFormHandlers = (initialValuesId?: number) => {
const createMovementHandler = useCallback(
async (payload: CreateMovementPayload) => {
const res = await MovementApi.create(payload);
const finalPayload = containsFile(payload)
? (toFormData(payload) as unknown as CreateMovementPayload)
: payload;
const res = await MovementApi.create(finalPayload);
if (isResponseError(res)) {
setMovementFormErrorMessage(res.message);
return;
@@ -30,7 +35,11 @@ export const useMovementFormHandlers = (initialValuesId?: number) => {
const updateMovementHandler = useCallback(
async (movementId: number, payload: UpdateMovementPayload) => {
const res = await MovementApi.update(movementId, payload);
const finalPayload = containsFile(payload)
? (toFormData(payload) as unknown as UpdateMovementPayload)
: payload;
const res = await MovementApi.update(movementId, finalPayload);
if (res?.status === 'error') {
setMovementFormErrorMessage(res.message);
return;