@@ -280,14 +280,27 @@ export default async ({ params, application }) => {
280280 return kitDiscount ;
281281 } ) ;
282282 }
283- const itemsForKit = params . items . filter ( ( item ) => {
284- return ! item . flags ?. includes ( 'freebie' ) ;
285- } ) ;
286- const kitDiscounts = getValidDiscountRules (
287- config . product_kit_discounts ,
288- params ,
289- itemsForKit ,
290- )
283+ const freebieProductIds = [ ] ;
284+ if ( Array . isArray ( config . freebies_rules ) ) {
285+ config . freebies_rules . forEach ( ( rule ) => {
286+ if (
287+ validateDateRange ( rule )
288+ && validateCustomerId ( rule , params )
289+ && mapCampaignProducts ( { product_ids : rule . check_product_ids } , params ) . valid
290+ && Array . isArray ( rule . product_ids )
291+ && rule . product_ids . length
292+ && matchFreebieRule ( rule , params )
293+ ) {
294+ rule . product_ids . forEach ( ( id ) => {
295+ if ( ! freebieProductIds . includes ( id ) ) freebieProductIds . push ( id ) ;
296+ } ) ;
297+ }
298+ } ) ;
299+ }
300+ const kitEligibleItems = freebieProductIds . length
301+ ? params . items . filter ( ( item ) => ! freebieProductIds . includes ( item . product_id ) )
302+ : params . items ;
303+ const kitDiscounts = getValidDiscountRules ( config . product_kit_discounts , params , kitEligibleItems )
291304 . sort ( ( a , b ) => {
292305 if ( ! Array . isArray ( a . product_ids ) || ! a . product_ids . length ) {
293306 if ( Array . isArray ( b . product_ids ) && b . product_ids . length ) {
@@ -339,7 +352,9 @@ export default async ({ params, application }) => {
339352 }
340353 // eslint-disable-next-line no-loop-func
341354 kitItems = kitItems . filter ( ( item ) => {
342- return item . quantity && discountedItemIds . indexOf ( item . product_id ) === - 1 ;
355+ return item . quantity
356+ && discountedItemIds . indexOf ( item . product_id ) === - 1
357+ && ! freebieProductIds . includes ( item . product_id ) ;
343358 } ) ;
344359 if ( ! kitItems . length ) {
345360 continue ;
0 commit comments