From ed543a006bfe2360689c481cbd5c13a420468c1e Mon Sep 17 00:00:00 2001 From: Egor Savkin Date: Fri, 18 Aug 2023 12:34:30 +0800 Subject: [PATCH] Fix JSON shop load Signed-off-by: Egor Savkin --- static/js/shop.jsx | 35 +++++++++++++++++++++++------------ static/js/shop_components.jsx | 9 ++++----- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/static/js/shop.jsx b/static/js/shop.jsx index 4f01eaf..6e28a3d 100644 --- a/static/js/shop.jsx +++ b/static/js/shop.jsx @@ -255,6 +255,7 @@ class Layout extends React.PureComponent { conf_obj.items = conf_obj.items.map(function (item) { return { pn: item.pn, + options: item.options ? item.options : null, }; }); @@ -635,7 +636,6 @@ class ProductCartItem extends React.PureComponent { if (data && data.options) { - console.log(data.options_data); options = data.options; if (!data.options_data) data.options_data = {}; options_data = data.options_data; @@ -878,7 +878,6 @@ class Cart extends React.PureComponent { let itemData; if (data.itemsData && index in data.itemsData) { itemData = data.itemsData[index]; - console.log(itemData.options_data); } return ( @@ -1434,7 +1433,7 @@ class OrderSumary extends React.PureComponent { let alert; let warning; - if (itemsData[index]) { + if (itemsData[index] && itemsData[index].warnings) { alert = itemsData[index]; const warningsKeys = Object.keys(alert.warnings); if (warningsKeys && warningsKeys.length > 0) { @@ -1471,7 +1470,7 @@ class OrderSumary extends React.PureComponent { ) : ( )} @@ -1872,11 +1871,14 @@ class Shop extends React.PureComponent { type: this.state.currentMode, }; const clonedCart = Array.from(this.state.columns.cart.items); - console.log(clonedCart); + const clonedCartData = Array.from(this.state.columns.cart.itemsData); + console.log(clonedCartData); for (const i in clonedCart) { const item = clonedCart[i]; + const item_data = clonedCartData[i]; crate.items.push({ - 'pn': item.name_number + 'pn': item.name_number, + 'options': item_data.options_data ? item_data.options_data : null, }); } @@ -1900,9 +1902,11 @@ class Shop extends React.PureComponent { if (!customconf) {return; } const items = this.props.data.items; + console.trace(customconf); const self = this; let new_items = []; + let new_items_data = []; this.setState({ @@ -1923,14 +1927,15 @@ class Shop extends React.PureComponent { ...items[key], }, { id: uuidv4(), + options_data: item.options ? item.options : null, })); + new_items_data.push({options_data: item.options? item.options : null}); } }); return item; }); - this.setState({ ...this.state, columns: { @@ -1938,6 +1943,7 @@ class Shop extends React.PureComponent { cart: { ...this.state.columns.cart, items: new_items, + itemsData: new_items_data, }, }, currentMode: customconf.type, @@ -1951,10 +1957,13 @@ class Shop extends React.PureComponent { type: this.state.currentMode, }; const clonedCart = Array.from(this.state.columns.cart.items); + const clonedCartData = Array.from(this.state.columns.cart.itemsData); for (const i in clonedCart) { const item = clonedCart[i]; + const item_data = clonedCartData[i]; crate.items.push({ 'pn': item.name_number, + 'options': item_data.options_data ? item_data.options_data : null, }); } @@ -2080,8 +2089,6 @@ class Shop extends React.PureComponent { const itemsCloned = Array.from(newItems); const itemsData = []; - console.log(prevItems); - console.log(this.state); const rules = {}; @@ -2174,9 +2181,6 @@ class Shop extends React.PureComponent { rules[ddkali.rules.follow.type] = {...ddkali.rules.follow}; } } - console.log(idx); - if (idx in this.state.columns.cart.itemsData && this.state.columns.cart.itemsData[idx].options_data) - itemsData[idx].options_data = this.state.columns.cart.itemsData[idx].options_data; } if (idxK.length === 0) { @@ -2360,6 +2364,13 @@ class Shop extends React.PureComponent { } } + itemsCloned.forEach((_elem, idx) => { + if (!(idx in itemsData)) itemsData[idx] = {}; + if (idx in this.state.columns.cart.itemsData && this.state.columns.cart.itemsData[idx].options_data) { + itemsData[idx].options_data = this.state.columns.cart.itemsData[idx].options_data; + } + }); + // update state with rules this.setState({ diff --git a/static/js/shop_components.jsx b/static/js/shop_components.jsx index 79625a6..3575a38 100644 --- a/static/js/shop_components.jsx +++ b/static/js/shop_components.jsx @@ -2,7 +2,6 @@ import React, {Component} from "react"; import jsonLogic from 'json-logic-js'; -import {v4 as uuidv4} from 'uuid'; // https://stackoverflow.com/a/70511311 const trueTypeOf = (obj) => Object.prototype.toString.call(obj).slice(8, -1).toLowerCase(); @@ -15,7 +14,7 @@ class Radio extends Component { target: props.target, outvar: props.outvar, variants: props.variants, - variant: props.variants[0], + variant: props.outvar in props.data ? props.data[props.outvar] : props.variants[0], id: props.id }; @@ -60,8 +59,8 @@ class Radio extends Component { } } -function RadioWrapper(target, id, {title, variants, outvar}) { - return ; +function RadioWrapper(target, id, data, {title, variants, outvar}) { + return ; } @@ -94,7 +93,7 @@ export default function ProcessOptions({options, data, target, id}) { trueTypeOf(options.args) === "object" ) { if (options.type in componentsList) { - return componentsList[options.type](target, id + options.type, options.args); + return componentsList[options.type](target, id + options.type, data, options.args); } else { return componentsList["Default"](options.type, id + "missing"); }