Обработка вариантов в элементах корзины в React Native - PullRequest
0 голосов
/ 03 октября 2019

Я уже обработал элементы корзины (добавить и удалить) в своем собственном проекте. Но у товара ранее не было вариантов.

Теперь нас просят добавить варианты для каждого продукта и обрабатывать их отдельно.

Я добавил массив вариантов в 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. Пожалуйста, не стесняйтесь предложить лучший методтакже. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...