Skip to content

Commit

Permalink
fix: shoppinglist modifier and default value (#310)
Browse files Browse the repository at this point in the history
* fix: shoppinglist modifier and default value
  • Loading branch information
BrianJiang2021 committed Apr 25, 2023
1 parent dcd7e6f commit 03f1f0b
Show file tree
Hide file tree
Showing 6 changed files with 240 additions and 13 deletions.
16 changes: 13 additions & 3 deletions apps/storefront/src/components/upload/B3Upload.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import { GlobaledContext } from '@/shared/global'
import {
B2BProductsBulkUploadCSV,
BcProductsBulkUploadCSV,
guestProductsBulkUploadCSV,
} from '@/shared/service/b2b'
import { getDefaultCurrencyInfo } from '@/utils'

Expand All @@ -37,13 +38,15 @@ interface B3UploadProps {
setProductData?: (product: CustomFieldItems) => void
isLoading?: boolean
isToCart?: boolean
withModifiers?: boolean
}

interface BulkUploadCSVProps {
currencyCode: string
productList: CustomFieldItems
channelId?: number
isToCart: boolean
withModifiers?: boolean
}

const FileUploadContainer = styled(Box)(() => ({
Expand All @@ -69,14 +72,15 @@ export default function B3Upload(props: B3UploadProps) {
setProductData = () => {},
isLoading = false,
isToCart = false,
withModifiers = false,
} = props

const [isMobile] = useMobile()

const uploadRef = useRef<HTMLInputElement>(null)

const {
state: { isB2BUser, currentChannelId },
state: { isB2BUser, currentChannelId, role },
} = useContext(GlobaledContext)

const theme = useTheme()
Expand Down Expand Up @@ -142,14 +146,20 @@ export default function B3Upload(props: B3UploadProps) {
currencyCode,
productList: parseData,
isToCart,
withModifiers,
}

if (!isB2BUser) params.channelId = currentChannelId
const BulkUploadCSV = isB2BUser
const uploadAction = isB2BUser
? B2BProductsBulkUploadCSV
: BcProductsBulkUploadCSV

const { productUpload } = await BulkUploadCSV(params)
const BulkUploadCSV =
role === 100 ? guestProductsBulkUploadCSV : uploadAction

const resp = await BulkUploadCSV(params)
const productUpload =
role === 100 ? resp.productAnonUpload : resp.productUpload

if (productUpload) {
const { result } = productUpload
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
} from '@/shared/service/b2b'
import { snackbar } from '@/utils'

import { getAllModifierDefaultValue } from '../../../utils/b3Product/shared/config'
import { ShoppingListDetailsContext } from '../context/ShoppingListDetailsContext'

import QuickAdd from './QuickAdd'
Expand Down Expand Up @@ -76,22 +77,58 @@ export default function AddToShoppingList(props: AddToListProps) {
const getValidProducts = (products: CustomFieldItems) => {
const notPurchaseSku: string[] = []
const productItems: CustomFieldItems[] = []
const notAddAble: string[] = []

products.forEach((item: CustomFieldItems) => {
const { products: currentProduct, qty } = item
const { option, purchasingDisabled, variantSku, variantId, productId } =
currentProduct

const {
option,
purchasingDisabled,
variantSku,
variantId,
productId,
modifiers,
} = currentProduct

const defaultModifiers = getAllModifierDefaultValue(modifiers)
if (purchasingDisabled) {
notPurchaseSku.push(variantSku)
return
}

const notPassedModifier = defaultModifiers.filter(
(modifier: CustomFieldItems) => !modifier.isVerified
)
if (notPassedModifier.length > 0) {
notAddAble.push(variantSku)

return
}

const optionsList = option.map((item: CustomFieldItems) => ({
optionId: `attribute[${item.option_id}]`,
optionValue: item.id.toString(),
}))

defaultModifiers.forEach((modifier: CustomFieldItems) => {
const { type } = modifier

if (type === 'date') {
const { defaultValue } = modifier
Object.keys(defaultValue).forEach((key) => {
optionsList.push({
optionId: `attribute[${modifier.option_id}][${key}]`,
optionValue: `${modifier.defaultValue[key]}`,
})
})
} else {
optionsList.push({
optionId: `attribute[${modifier.option_id}]`,
optionValue: `${modifier.defaultValue}`,
})
}
})

productItems.push({
productId: parseInt(productId, 10) || 0,
variantId: parseInt(variantId, 10) || 0,
Expand All @@ -103,6 +140,7 @@ export default function AddToShoppingList(props: AddToListProps) {
return {
notPurchaseSku,
productItems,
notAddAble,
}
}

Expand All @@ -111,14 +149,21 @@ export default function AddToShoppingList(props: AddToListProps) {
try {
const { validProduct } = productsData

const { notPurchaseSku, productItems } = getValidProducts(validProduct)
const { notPurchaseSku, productItems, notAddAble } =
getValidProducts(validProduct)

if (productItems.length > 0) {
await quickAddToList(productItems)

updateList()
}

if (notAddAble.length > 0) {
snackbar.error(`SKU ${notAddAble} cannot be added quickly`, {
isClose: true,
})
}

if (notPurchaseSku.length > 0) {
snackbar.error(
`SKU ${notPurchaseSku} cannot be purchased in online store.`,
Expand Down Expand Up @@ -180,6 +225,7 @@ export default function AddToShoppingList(props: AddToListProps) {
setIsOpen={setIsOpenBulkLoadCSV}
handleAddToList={handleCSVAddToList}
isLoading={isLoading}
withModifiers
/>
</Box>
</CardContent>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ import { Box, Grid, Typography } from '@mui/material'
import { B3CustomForm, B3Sping, CustomButton } from '@/components'
import { GlobaledContext } from '@/shared/global'
import { snackbar } from '@/utils'
import { getQuickAddRowFields } from '@/utils/b3Product/shared/config'
import {
getAllModifierDefaultValue,
getQuickAddRowFields,
} from '@/utils/b3Product/shared/config'

import {
getB2BVariantInfoBySkus,
Expand Down Expand Up @@ -136,6 +139,7 @@ export default function QuickAdd(props: AddToListContentProps) {
const notPurchaseSku: string[] = []
const productItems: CustomFieldItems[] = []
const passSku: string[] = []
const notAddAble: string[] = []

skus.forEach((sku) => {
const variantInfo: CustomFieldItems | null = (variantInfoList || []).find(
Expand All @@ -153,7 +157,9 @@ export default function QuickAdd(props: AddToListContentProps) {
variantId,
option: options,
purchasingDisabled = '1',
modifiers,
} = variantInfo
const defaultModifiers = getAllModifierDefaultValue(modifiers)

const quantity = (skuValue[sku] as number) || 0

Expand All @@ -162,6 +168,15 @@ export default function QuickAdd(props: AddToListContentProps) {
return
}

const notPassedModifier = defaultModifiers.filter(
(modifier: CustomFieldItems) => !modifier.isVerified
)
if (notPassedModifier.length > 0) {
notAddAble.push(sku)

return
}

const optionList = (options || []).reduce(
(arr: ShoppingListAddProductOption[], optionStr: string) => {
try {
Expand All @@ -179,6 +194,25 @@ export default function QuickAdd(props: AddToListContentProps) {
[]
)

defaultModifiers.forEach((modifier: CustomFieldItems) => {
const { type } = modifier

if (type === 'date') {
const { defaultValue } = modifier
Object.keys(defaultValue).forEach((key) => {
optionList.push({
optionId: `attribute[${modifier.option_id}][${key}]`,
optionValue: `${modifier.defaultValue[key]}`,
})
})
} else {
optionList.push({
optionId: `attribute[${modifier.option_id}]`,
optionValue: `${modifier.defaultValue}`,
})
}
})

passSku.push(sku)

productItems.push({
Expand All @@ -195,6 +229,7 @@ export default function QuickAdd(props: AddToListContentProps) {
notPurchaseSku,
productItems,
passSku,
notAddAble,
}
}

Expand Down Expand Up @@ -260,9 +295,13 @@ export default function QuickAdd(props: AddToListContentProps) {
}

const variantInfoList = await getVariantList(skus)

const { notFoundSku, notPurchaseSku, productItems, passSku } =
getProductItems(variantInfoList, skuValue, skus)
const {
notFoundSku,
notPurchaseSku,
productItems,
notAddAble,
passSku,
} = getProductItems(variantInfoList, skuValue, skus)

if (notFoundSku.length > 0) {
showErrors(value, notFoundSku, 'sku', '')
Expand All @@ -281,6 +320,13 @@ export default function QuickAdd(props: AddToListContentProps) {
})
}

if (notAddAble.length > 0) {
showErrors(value, notAddAble, 'sku', '')
snackbar.error(`SKU ${notAddAble} cannot be added quickly`, {
isClose: true,
})
}

if (productItems.length > 0) {
await quickAddToList(productItems)
clearInputValue(value, passSku)
Expand Down
29 changes: 29 additions & 0 deletions apps/storefront/src/shared/service/b2b/graphql/product.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,28 @@ const productsBulkUploadCSV = (data: CustomFieldItems) => `mutation {
productList: ${convertArrayToGraphql(data.productList || [])}
${!data?.channelId ? '' : `channelId: ${data.channelId}`}
isToCart: ${data.isToCart || false}
withModifiers: ${data.withModifiers || false}
}
) {
result {
errorFile,
errorProduct,
validProduct,
stockErrorFile,
stockErrorSkus,
}
}
}`

const productAnonUploadBulkUploadCSV = (data: CustomFieldItems) => `mutation {
productAnonUpload (
productListData: {
currencyCode: "${data.currencyCode || ''}"
productList: ${convertArrayToGraphql(data.productList || [])}
${!data?.channelId ? '' : `channelId: ${data.channelId}`}
isToCart: ${data.isToCart || false}
withModifiers: ${data.withModifiers || false}
storeHash: "${storeHash}"
}
) {
result {
Expand Down Expand Up @@ -135,3 +157,10 @@ export const BcProductsBulkUploadCSV = (
B3Request.graphqlProxyBC({
query: productsBulkUploadCSV(data),
})

export const guestProductsBulkUploadCSV = (
data: CustomFieldItems = {}
): CustomFieldItems =>
B3Request.graphqlB2B({
query: productAnonUploadBulkUploadCSV(data),
})
2 changes: 2 additions & 0 deletions apps/storefront/src/shared/service/b2b/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ import {
BcProductsBulkUploadCSV,
getB2BVariantInfoBySkus,
getBcVariantInfoBySkus,
guestProductsBulkUploadCSV,
searchB2BProducts,
searchBcProducts,
} from './graphql/product'
Expand Down Expand Up @@ -191,6 +192,7 @@ export {
getTaxZoneRates,
getUserCompany,
getUsers,
guestProductsBulkUploadCSV,
quoteDetailAttachFileCreate,
quoteDetailAttachFileDelete,
searchB2BProducts,
Expand Down
Loading

0 comments on commit 03f1f0b

Please sign in to comment.