Я уже обработал элементы корзины (добавить и удалить) в своем собственном проекте. Но у товара ранее не было вариантов.
Теперь нас просят добавить варианты для каждого продукта и обрабатывать их отдельно.
Я добавил массив вариантов в cart_item.json, но в результате возникли ошибки. Может кто-нибудь предложить мне вариант обработки в реагировать нативный код и получить идеальный cart_item.json с вариантами
Cart.js
// Initial State
function cartInitialState() {
return {
orderType: params.order.types.oneTime.key,
items: {}, // { productId: { product, count, frequency?, days? } }
countTotal: 0,
amountTotal: 0,
amountTotalWeekly: 0,
deliveries: 0,
deliveryDates: [] // ['2019-01-30', '2019-02-01', '2019-02-02']
}
}
// State
export default (state = cartInitialState(), action) => {
switch (action.type) {
let items = state.items
const { count } = action
if (items[action.product._id]) {
if (action.type === ORDER_CART_PRODUCT_REMOVE) {
if (items[action.product._id].count > 0) {
items[action.product._id].count--
if (items[action.product._id].count === 0) {
delete items[action.product._id]
}
if (!(Object.keys(items).length > 0)) {
state = cartInitialState()
}
}
} else if (action.type === ORDER_CART_PRODUCT_ADD && parseInt(count) > 0) {
const { product } = action
if (count == NaN) {
count = 1;
}
items[action.product._id] = {
product,
// TODO: product specific count is hard coded here
// send value to update
count,
frequency: params.order.frequency.daily.key,
frequencyDays: [dateFormat(new Date(), 'dddd').toLowerCase()]
}
} else {
items[action.product._id].count++
}
} else {
if (action.type === ORDER_CART_PRODUCT_ADD) {
const { product } = action
items[action.product._id] = {
product,
// TODO: product specific count is hard coded here
// send value to update
count,
frequency: params.order.frequency.daily.key,
frequencyDays: [dateFormat(new Date(), 'dddd').toLowerCase()]
}
}
}
let countTotal = 0
let amountTotal = 0
let countingTotalItem = 0;
Object.values(items).map(({
product,
count
}) => {
//const u = parseInt(product.unit.split(" ")[0])
countingTotalItem++;
countTotal = countingTotalItem;
amountTotal += (product.priceDiscounted || product.price) * (count)
})
return {
...state,
items,
countTotal,
amountTotal: amountTotal.toFixed(2)
}
И виджет -> элемент -> index.js
cartAdd = (product) => () => {
const { cartProductAdd, addCartProductFromCart, cart, cartSetOrderType, messageShow } = this.props
//const { quantity } = this.state
// if(quantity)
let upDatedCount = 0;
for (var x in cart.items) {
if (x == product._id) {
upDatedCount = cart.items[x]['count']
}
}
if (upDatedCount !== '' && upDatedCount !== null) {
if (cart.orderType === "prepaidSubscription") {
messageShow({ success: false, message: "Please remove prepaid subscription or checkout your order. Then try to add another product." }, params.message.timers.long)
} else {
cartProductAdd({ product, count: upDatedCount + 1 })
cartSetOrderType(params.order.types.oneTime.key)
}
} else {
cartProductAdd({ product, count: upDatedCount + 1 })
cartSetOrderType(params.order.types.oneTime.key)
}
}
cartRemove = product => () => {
const { cartProductRemove } = this.props
cartProductRemove(product)
this.setState({ userAlert: true })
}
cartRemoveAll = product => () => {
const { cartProductRemoveAll } = this.props
cartProductRemoveAll(product)
}
badgeCount = () => {
const { product: { _id }, cart } = this.props
return cart && cart.items && cart.items[_id] ? cart.items[_id].count : 0
}
и это мой cart_item.json https://pastebin.com/tN6V5Qgm
и вот мой ожидаемый cart_item.json с добавленными вариантами https://pastebin.com/EYBEFr5n. Пожалуйста, не стесняйтесь предложить лучший методтакже. Спасибо