refactor(FE-Issue): add validation to prevent selecting the same warehouse for source and destination in MovementForm

This commit is contained in:
rstubryan
2025-11-22 11:33:28 +07:00
parent 3c7f630580
commit 5bb94b5679
@@ -176,6 +176,22 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
enableReinitialize: true,
onSubmit: async (values) => {
setMovementFormErrorMessage('');
if (values.source_warehouse_id === values.destination_warehouse_id) {
const sourceWarehouseName =
(values.source_warehouse as WarehouseOptionType)?.label ||
'Gudang asal';
const destinationWarehouseName =
(values.destination_warehouse as WarehouseOptionType)?.label ||
'gudang tujuan';
setMovementFormErrorMessage(
`Tidak bisa submit form. ${sourceWarehouseName} tidak boleh sama dengan ${destinationWarehouseName}.`
);
toast.error(
`Tidak bisa submit form. Gudang asal dan tujuan tidak boleh sama!`
);
return;
}
const documents: File[] = [];
const deliveriesPayload = values.deliveries.map((d) => {
let documentIndex = 0;
@@ -858,35 +874,40 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
placeholder='Pilih gudang asal...'
value={formik.values.source_warehouse}
onChange={(val) => {
const newSourceWarehouseId = (val as WarehouseOptionType)
?.value;
if (newSourceWarehouseId) {
if (
newSourceWarehouseId ===
formik.values.destination_warehouse_id
) {
const destinationWarehouseName =
(
formik.values
.destination_warehouse as WarehouseOptionType
)?.label || 'gudang tujuan';
toast.error(
`Tidak bisa memilih gudang yang sama. Gudang asal tidak boleh sama dengan ${destinationWarehouseName}.`
);
return; // Prevent setting the value
}
}
formik.setFieldTouched('source_warehouse', true);
formik.setFieldValue('source_warehouse', val);
formik.setFieldTouched('source_warehouse_id', true);
const newSourceWarehouseId = (val as WarehouseOptionType)
?.value;
formik.setFieldValue(
'source_warehouse_id',
newSourceWarehouseId
);
if (
newSourceWarehouseId &&
formik.values.destination_warehouse_id &&
newSourceWarehouseId ===
formik.values.destination_warehouse_id
formik.errors.destination_warehouse_id ===
'Gudang tujuan tidak boleh sama dengan gudang asal!'
) {
formik.setFieldError(
'destination_warehouse_id',
'Gudang tujuan tidak boleh sama dengan gudang asal!'
);
} else {
if (
formik.errors.destination_warehouse_id ===
'Gudang tujuan tidak boleh sama dengan gudang asal!'
) {
formik.setFieldError(
'destination_warehouse_id',
undefined
);
}
formik.setFieldError('destination_warehouse_id', undefined);
}
}}
options={warehouseOptions}
@@ -952,35 +973,38 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
placeholder='Pilih gudang tujuan...'
value={formik.values.destination_warehouse}
onChange={(val) => {
const newDestinationWarehouseId = (val as WarehouseOptionType)
?.value;
if (newDestinationWarehouseId) {
if (
newDestinationWarehouseId ===
formik.values.source_warehouse_id
) {
const sourceWarehouseName =
(formik.values.source_warehouse as WarehouseOptionType)
?.label || 'gudang asal';
toast.error(
`Tidak bisa memilih gudang yang sama. Gudang tujuan tidak boleh sama dengan ${sourceWarehouseName}.`
);
return;
}
}
formik.setFieldTouched('destination_warehouse', true);
formik.setFieldValue('destination_warehouse', val);
formik.setFieldTouched('destination_warehouse_id', true);
const newDestinationWarehouseId = (val as WarehouseOptionType)
?.value;
formik.setFieldValue(
'destination_warehouse_id',
newDestinationWarehouseId
);
if (
newDestinationWarehouseId &&
formik.values.source_warehouse_id &&
newDestinationWarehouseId ===
formik.values.source_warehouse_id
formik.errors.destination_warehouse_id ===
'Gudang tujuan tidak boleh sama dengan gudang asal!'
) {
formik.setFieldError(
'destination_warehouse_id',
'Gudang tujuan tidak boleh sama dengan gudang asal!'
);
} else {
if (
formik.errors.destination_warehouse_id ===
'Gudang tujuan tidak boleh sama dengan gudang asal!'
) {
formik.setFieldError(
'destination_warehouse_id',
undefined
);
}
formik.setFieldError('destination_warehouse_id', undefined);
}
}}
options={warehouseOptions}
@@ -1701,7 +1725,11 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
hasInvalidQty ||
hasExceededStock ||
!formik.isValid ||
formik.isSubmitting
formik.isSubmitting ||
(formik.values.source_warehouse_id ===
formik.values.destination_warehouse_id &&
formik.values.source_warehouse_id !== 0 &&
formik.values.destination_warehouse_id !== 0)
}
>
Submit