enh
This commit is contained in:
parent
1b62c6add4
commit
6193104e6f
2 changed files with 4 additions and 16 deletions
|
|
@ -43,7 +43,7 @@ const SkuItemComponent: React.FC<SkuItemProps> = ({
|
||||||
const displayPrice = change.price !== undefined ? change.price : sku.price;
|
const displayPrice = change.price !== undefined ? change.price : sku.price;
|
||||||
const displayMarketPrice = change.marketPrice !== undefined ? change.marketPrice : sku.marketPrice;
|
const displayMarketPrice = change.marketPrice !== undefined ? change.marketPrice : sku.marketPrice;
|
||||||
const displayFlashPrice = change.flashPrice !== undefined ? change.flashPrice : sku.flashPrice;
|
const displayFlashPrice = change.flashPrice !== undefined ? change.flashPrice : sku.flashPrice;
|
||||||
const displayProductQuantity = change.productQuantity !== undefined ? change.productQuantity : sku.productQuantity;
|
const displayUnit = (sku.features || []).map((f: any) => f.featureValue).join(' ') || '—';
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View style={tw`bg-white p-4 mb-3 rounded-xl border border-gray-200 shadow-sm`}>
|
<View style={tw`bg-white p-4 mb-3 rounded-xl border border-gray-200 shadow-sm`}>
|
||||||
|
|
@ -130,7 +130,7 @@ const SkuItemComponent: React.FC<SkuItemProps> = ({
|
||||||
<View style={tw`items-center`}>
|
<View style={tw`items-center`}>
|
||||||
<MyText style={tw`text-xs text-gray-500 mb-1`}>Size</MyText>
|
<MyText style={tw`text-xs text-gray-500 mb-1`}>Size</MyText>
|
||||||
<View style={tw`flex-row items-center`}>
|
<View style={tw`flex-row items-center`}>
|
||||||
<MyText style={tw`text-sm text-blue-600`}>{displayProductQuantity ? `${displayProductQuantity}${sku.unit?.shortNotation || ''}` : "N/A"}</MyText>
|
<MyText style={tw`text-sm text-blue-600`}>{displayUnit}</MyText>
|
||||||
<TouchableOpacity onPress={() => openEditDialog(sku, productName)} style={tw`ml-1`}>
|
<TouchableOpacity onPress={() => openEditDialog(sku, productName)} style={tw`ml-1`}>
|
||||||
<MaterialIcons name="edit" size={14} color="#6b7280" />
|
<MaterialIcons name="edit" size={14} color="#6b7280" />
|
||||||
</TouchableOpacity>
|
</TouchableOpacity>
|
||||||
|
|
@ -145,7 +145,6 @@ interface PendingChange {
|
||||||
price?: number;
|
price?: number;
|
||||||
marketPrice?: number | null;
|
marketPrice?: number | null;
|
||||||
flashPrice?: number | null;
|
flashPrice?: number | null;
|
||||||
productQuantity?: number | null;
|
|
||||||
isFlashAvailable?: boolean;
|
isFlashAvailable?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -156,7 +155,6 @@ interface EditDialogState {
|
||||||
tempPrice: string;
|
tempPrice: string;
|
||||||
tempMarketPrice: string;
|
tempMarketPrice: string;
|
||||||
tempFlashPrice: string;
|
tempFlashPrice: string;
|
||||||
tempProductQuantity: string;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function PricesOverview() {
|
export default function PricesOverview() {
|
||||||
|
|
@ -170,7 +168,6 @@ export default function PricesOverview() {
|
||||||
tempPrice: "",
|
tempPrice: "",
|
||||||
tempMarketPrice: "",
|
tempMarketPrice: "",
|
||||||
tempFlashPrice: "",
|
tempFlashPrice: "",
|
||||||
tempProductQuantity: "",
|
|
||||||
});
|
});
|
||||||
const [showMenu, setShowMenu] = useState(false);
|
const [showMenu, setShowMenu] = useState(false);
|
||||||
|
|
||||||
|
|
@ -233,7 +230,6 @@ export default function PricesOverview() {
|
||||||
tempPrice: (change.price ?? sku.price)?.toString() || "",
|
tempPrice: (change.price ?? sku.price)?.toString() || "",
|
||||||
tempMarketPrice: (change.marketPrice ?? sku.marketPrice)?.toString() || "",
|
tempMarketPrice: (change.marketPrice ?? sku.marketPrice)?.toString() || "",
|
||||||
tempFlashPrice: (change.flashPrice ?? sku.flashPrice)?.toString() || "",
|
tempFlashPrice: (change.flashPrice ?? sku.flashPrice)?.toString() || "",
|
||||||
tempProductQuantity: (change.productQuantity ?? sku.productQuantity)?.toString() || "",
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -241,7 +237,6 @@ export default function PricesOverview() {
|
||||||
const price = parseFloat(editDialog.tempPrice);
|
const price = parseFloat(editDialog.tempPrice);
|
||||||
const marketPrice = editDialog.tempMarketPrice ? parseFloat(editDialog.tempMarketPrice) : null;
|
const marketPrice = editDialog.tempMarketPrice ? parseFloat(editDialog.tempMarketPrice) : null;
|
||||||
const flashPrice = editDialog.tempFlashPrice ? parseFloat(editDialog.tempFlashPrice) : null;
|
const flashPrice = editDialog.tempFlashPrice ? parseFloat(editDialog.tempFlashPrice) : null;
|
||||||
const productQuantity = editDialog.tempProductQuantity ? parseFloat(editDialog.tempProductQuantity) : null;
|
|
||||||
|
|
||||||
if (isNaN(price) || price <= 0) {
|
if (isNaN(price) || price <= 0) {
|
||||||
Alert.alert("Error", "Please enter a valid price");
|
Alert.alert("Error", "Please enter a valid price");
|
||||||
|
|
@ -258,7 +253,6 @@ export default function PricesOverview() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (editDialog.tempProductQuantity && (isNaN(productQuantity!) || productQuantity! <= 0)) {
|
|
||||||
Alert.alert("Error", "Please enter a valid size");
|
Alert.alert("Error", "Please enter a valid size");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -269,21 +263,18 @@ export default function PricesOverview() {
|
||||||
price: price !== parseFloat(editDialog.sku.price) ? price : undefined,
|
price: price !== parseFloat(editDialog.sku.price) ? price : undefined,
|
||||||
marketPrice: marketPrice !== parseFloat(editDialog.sku.marketPrice || '0') ? marketPrice : undefined,
|
marketPrice: marketPrice !== parseFloat(editDialog.sku.marketPrice || '0') ? marketPrice : undefined,
|
||||||
flashPrice: flashPrice !== parseFloat(editDialog.sku.flashPrice || '0') ? flashPrice : undefined,
|
flashPrice: flashPrice !== parseFloat(editDialog.sku.flashPrice || '0') ? flashPrice : undefined,
|
||||||
productQuantity: productQuantity !== (editDialog.sku.productQuantity || 1) ? productQuantity : undefined,
|
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
setEditDialog({ open: false, sku: null, productName: "", tempPrice: "", tempMarketPrice: "", tempFlashPrice: "", tempProductQuantity: "" });
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleSave = () => {
|
const handleSave = () => {
|
||||||
const updates = Object.entries(pendingChanges).map(([skuId, change]) => {
|
const updates = Object.entries(pendingChanges).map(([skuId, change]) => {
|
||||||
const sku = allSkus.find(s => s.id === parseInt(skuId));
|
const sku = allSkus.find(s => s.id === parseInt(skuId));
|
||||||
const update: any = { productId: sku?.productId };
|
const update: any = { productId: sku?.id };
|
||||||
if (change.price !== undefined) update.price = change.price;
|
if (change.price !== undefined) update.price = change.price;
|
||||||
if (change.marketPrice !== undefined) update.marketPrice = change.marketPrice;
|
if (change.marketPrice !== undefined) update.marketPrice = change.marketPrice;
|
||||||
if (change.flashPrice !== undefined) update.flashPrice = change.flashPrice;
|
if (change.flashPrice !== undefined) update.flashPrice = change.flashPrice;
|
||||||
if (change.productQuantity !== undefined) update.productQuantity = change.productQuantity;
|
|
||||||
if (change.isFlashAvailable !== undefined) update.isFlashAvailable = change.isFlashAvailable;
|
if (change.isFlashAvailable !== undefined) update.isFlashAvailable = change.isFlashAvailable;
|
||||||
return update;
|
return update;
|
||||||
});
|
});
|
||||||
|
|
@ -377,7 +368,6 @@ export default function PricesOverview() {
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<BottomDialog open={editDialog.open} onClose={() => setEditDialog({ ...editDialog, open: false, tempFlashPrice: "", tempMarketPrice: "", tempPrice: "", tempProductQuantity: "" })}>
|
|
||||||
<View style={tw`p-4`}>
|
<View style={tw`p-4`}>
|
||||||
<MyText style={tw`text-lg font-bold mb-1`}>{editDialog.productName}</MyText>
|
<MyText style={tw`text-lg font-bold mb-1`}>{editDialog.productName}</MyText>
|
||||||
<MyText style={tw`text-sm text-gray-500 mb-4`}>{editDialog.sku?.displayName || editDialog.sku?.name || ''}</MyText>
|
<MyText style={tw`text-sm text-gray-500 mb-4`}>{editDialog.sku?.displayName || editDialog.sku?.name || ''}</MyText>
|
||||||
|
|
@ -419,8 +409,6 @@ export default function PricesOverview() {
|
||||||
<MyText style={tw`text-sm font-medium mb-1`}>Size</MyText>
|
<MyText style={tw`text-sm font-medium mb-1`}>Size</MyText>
|
||||||
<TextInput
|
<TextInput
|
||||||
style={tw`border border-gray-300 rounded-md px-3 py-2`}
|
style={tw`border border-gray-300 rounded-md px-3 py-2`}
|
||||||
value={editDialog.tempProductQuantity}
|
|
||||||
onChangeText={(text) => setEditDialog({ ...editDialog, tempProductQuantity: text })}
|
|
||||||
keyboardType="decimal-pad"
|
keyboardType="decimal-pad"
|
||||||
placeholder="Enter size"
|
placeholder="Enter size"
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ const mapBanner = (banner: BannerRow): UserBanner => ({
|
||||||
name: banner.name,
|
name: banner.name,
|
||||||
imageUrl: banner.imageUrl,
|
imageUrl: banner.imageUrl,
|
||||||
description: banner.description ?? null,
|
description: banner.description ?? null,
|
||||||
productIds: banner.productIds ?? null,
|
skuIds: banner.skuIds ?? null,
|
||||||
redirectUrl: banner.redirectUrl ?? null,
|
redirectUrl: banner.redirectUrl ?? null,
|
||||||
serialNum: banner.serialNum ?? null,
|
serialNum: banner.serialNum ?? null,
|
||||||
isActive: banner.isActive,
|
isActive: banner.isActive,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue