fix(resolve): resolve merge issue

This commit is contained in:
rstubryan
2025-10-29 15:56:57 +07:00
41 changed files with 5161 additions and 1734 deletions
@@ -40,10 +40,14 @@ interface MovementFormProps {
const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
// ===== STATE MANAGEMENT =====
const [, setMovementFormErrorMessage] = useState('');
const [productWarehouseSelectInputValue, setProductWarehouseSelectInputValue] = useState('');
const [
productWarehouseSelectInputValue,
setProductWarehouseSelectInputValue,
] = useState('');
const [selectedProducts, setSelectedProducts] = useState<number[]>([]);
const [selectedDeliveries, setSelectedDeliveries] = useState<number[]>([]);
const [warehouseSelectInputValue, setWarehouseSelectInputValue] = useState('');
const [warehouseSelectInputValue, setWarehouseSelectInputValue] =
useState('');
const [supplierSelectInputValue, setSupplierSelectInputValue] = useState('');
// ===== FORM HANDLERS =====
@@ -112,9 +116,9 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
const warehouseOptions = isResponseSuccess(warehouses)
? warehouses?.data.map((w) => {
warehouseStockMap.get(w.id);
return {
value: w.id,
warehouseStockMap.get(w.id);
return {
value: w.id,
label: w.name,
area: w.area?.name,
location:
@@ -400,10 +404,7 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
const handleDeliveryCostPerItemChange = useCallback(
(idx: number, value: number) => {
formik.setFieldValue(
`deliveries.${idx}.delivery_cost_per_item`,
value
);
formik.setFieldValue(`deliveries.${idx}.delivery_cost_per_item`, value);
const delivery = formik.values.deliveries?.[idx];
if (delivery) {
@@ -520,9 +521,9 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
if (!stockInfo) {
return (
<Badge
variant="ghost"
color="neutral"
size="sm"
variant='ghost'
color='neutral'
size='sm'
className={{ badge: 'whitespace-nowrap font-semibold' }}
>
Kosong
@@ -537,9 +538,9 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
return (
<Badge
variant="soft"
variant='soft'
color={color}
size="sm"
size='sm'
className={{ badge: 'whitespace-nowrap font-semibold' }}
>
Tersedia {productCount} produk
@@ -806,7 +807,9 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
isClearable
startAdornment={
formik.values.source_warehouse_id
? getWarehouseStockAdornment(formik.values.source_warehouse_id)
? getWarehouseStockAdornment(
formik.values.source_warehouse_id
)
: undefined
}
/>
@@ -873,7 +876,9 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
isClearable
startAdornment={
formik.values.destination_warehouse_id
? getWarehouseStockAdornment(formik.values.destination_warehouse_id)
? getWarehouseStockAdornment(
formik.values.destination_warehouse_id
)
: undefined
}
/>
@@ -925,31 +930,31 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
<tr>
{type !== 'detail' && (
<th>
<CheckboxInput
name='select-all-products'
checked={
formik.values.products?.length ===
selectedProducts.length &&
formik.values.products?.length > 0
<CheckboxInput
name='select-all-products'
checked={
formik.values.products?.length ===
selectedProducts.length &&
formik.values.products?.length > 0
}
onChange={(
e: React.ChangeEvent<HTMLInputElement>
) => {
if (e.target.checked) {
setSelectedProducts(
formik.values.products?.map(
(_, idx) => idx
) ?? []
);
} else {
setSelectedProducts([]);
}
onChange={(
e: React.ChangeEvent<HTMLInputElement>
) => {
if (e.target.checked) {
setSelectedProducts(
formik.values.products?.map(
(_, idx) => idx
) ?? []
);
} else {
setSelectedProducts([]);
}
}}
classNames={{
wrapper: 'flex justify-center',
checkbox: 'checkbox checkbox-sm',
}}
/>
}}
classNames={{
wrapper: 'flex justify-center',
checkbox: 'checkbox checkbox-sm',
}}
/>
</th>
)}
<th>
@@ -977,12 +982,12 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
{formik.values.products?.map((product, idx) => (
<tr key={`product-row-${idx}-${product.product_id}`}>
{type !== 'detail' && (
<td className="!align-middle">
<td className='!align-middle'>
<CheckboxInput
name={`product-${idx}`}
checked={selectedProducts.includes(idx)}
onChange={(
e: React.ChangeEvent<HTMLInputElement>,
e: React.ChangeEvent<HTMLInputElement>
) => {
if (e.target.checked) {
setSelectedProducts([
@@ -991,7 +996,7 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
]);
} else {
setSelectedProducts(
selectedProducts.filter((i) => i !== idx),
selectedProducts.filter((i) => i !== idx)
);
}
}}
@@ -1057,8 +1062,8 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
onBlur={formik.handleBlur}
decimalScale={0}
allowNegative={false}
thousandSeparator=","
decimalSeparator="."
thousandSeparator=','
decimalSeparator='.'
bottomLabel={getProductQtyBottomLabel(idx)}
isError={
isRepeaterInputError(
@@ -1146,31 +1151,31 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
<tr>
{type !== 'detail' && (
<th>
<CheckboxInput
name='select-all-deliveries'
checked={
formik.values.deliveries?.length ===
selectedDeliveries.length &&
formik.values.deliveries?.length > 0
<CheckboxInput
name='select-all-deliveries'
checked={
formik.values.deliveries?.length ===
selectedDeliveries.length &&
formik.values.deliveries?.length > 0
}
onChange={(
e: React.ChangeEvent<HTMLInputElement>
) => {
if (e.target.checked) {
setSelectedDeliveries(
formik.values.deliveries?.map(
(_, idx) => idx
) ?? []
);
} else {
setSelectedDeliveries([]);
}
onChange={(
e: React.ChangeEvent<HTMLInputElement>
) => {
if (e.target.checked) {
setSelectedDeliveries(
formik.values.deliveries?.map(
(_, idx) => idx
) ?? []
);
} else {
setSelectedDeliveries([]);
}
}}
classNames={{
wrapper: 'flex justify-center',
checkbox: 'checkbox checkbox-sm',
}}
/>
}}
classNames={{
wrapper: 'flex justify-center',
checkbox: 'checkbox checkbox-sm',
}}
/>
</th>
)}
<th>
@@ -1244,12 +1249,12 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
{formik.values.deliveries?.map((delivery, idx) => (
<tr key={`delivery-row-${idx}`}>
{type !== 'detail' && (
<td className="!align-middle">
<td className='!align-middle'>
<CheckboxInput
name={`delivery-${idx}`}
checked={selectedDeliveries.includes(idx)}
onChange={(
e: React.ChangeEvent<HTMLInputElement>,
e: React.ChangeEvent<HTMLInputElement>
) => {
if (e.target.checked) {
setSelectedDeliveries([
@@ -1258,9 +1263,7 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
]);
} else {
setSelectedDeliveries(
selectedDeliveries.filter(
(i) => i !== idx,
),
selectedDeliveries.filter((i) => i !== idx)
);
}
}}
@@ -1319,8 +1322,8 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
onBlur={formik.handleBlur}
decimalScale={0}
allowNegative={false}
thousandSeparator=","
decimalSeparator="."
thousandSeparator=','
decimalSeparator='.'
isError={
isDeliveryProductInputError(idx, 0, 'product_qty')
.isError || Boolean(getDeliveryQtyError(idx, 0))
@@ -1331,7 +1334,10 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
getDeliveryQtyError(idx, 0) ||
undefined
}
bottomLabel={getDeliveryProductQtyBottomLabel(idx, 0)}
bottomLabel={getDeliveryProductQtyBottomLabel(
idx,
0
)}
readOnly={type === 'detail'}
className={{
wrapper: 'w-full min-w-48',
@@ -1464,7 +1470,7 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
allowNegative={false}
thousandSeparator=','
decimalSeparator='.'
inputPrefix="Rp"
inputPrefix='Rp'
{...isRepeaterInputError(
'deliveries',
'delivery_cost',
@@ -1482,13 +1488,15 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
required
name={`deliveries.${idx}.delivery_cost_per_item`}
value={delivery.delivery_cost_per_item || ''}
onChange={handleDeliveryCostPerItemChangeWrapper(idx)}
onChange={handleDeliveryCostPerItemChangeWrapper(
idx
)}
onBlur={formik.handleBlur}
decimalScale={0}
allowNegative={false}
thousandSeparator=','
decimalSeparator='.'
inputPrefix="Rp"
inputPrefix='Rp'
{...isRepeaterInputError(
'deliveries',
'delivery_cost_per_item',