diff --git a/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.test.ts b/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.test.ts index 665016212..44d010e28 100644 --- a/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.test.ts +++ b/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.test.ts @@ -227,7 +227,7 @@ describe('SearchResultStore', () => { const variants = (result as Product).variants; - expect(variants?.data.length).toStrictEqual(parsedVariantData.length); + expect(variants?.data.length).toStrictEqual(parsedVariantData.filter((variant: any) => variant.attributes.available !== false).length); expect(variants?.selections.length).toBe(Object.keys(parsedVariantData[0].options).length); }); }); @@ -268,14 +268,18 @@ describe('SearchResultStore', () => { expect(variants).toBeDefined(); - expect((result as Product).variants?.data.length).toStrictEqual(parsedVariantData.length); + expect((result as Product).variants?.data.length).toStrictEqual( + parsedVariantData.filter((variant: any) => variant.attributes.available !== false).length + ); expect((result as Product).variants?.selections.length).toBe(Object.keys(parsedVariantData[0].options).length); (result as Product).variants?.update(parsedVariantDataToUse); expect((result as Product).variants).toBeDefined(); - expect((result as Product).variants?.data.length).toStrictEqual(parsedVariantDataToUse.length); + expect((result as Product).variants?.data.length).toStrictEqual( + parsedVariantDataToUse.filter((variant: any) => variant.attributes.available !== false).length + ); expect((result as Product).variants?.selections.length).toBe(Object.keys(parsedVariantDataToUse[0].options).length); }); }); @@ -373,14 +377,18 @@ describe('SearchResultStore', () => { expect(variants).toBeDefined(); - expect((resultForTest as Product).variants?.data.length).toStrictEqual(parsedVariantData.length); + expect((resultForTest as Product).variants?.data.length).toStrictEqual( + parsedVariantData.filter((variant: any) => variant.attributes.available !== false).length + ); expect((resultForTest as Product).variants?.selections.length).toBe(Object.keys(parsedVariantData[0].options).length); (resultForTest as Product).variants?.update(parsedVariantDataToUse); expect((resultForTest as Product).variants).toBeDefined(); - expect((resultForTest as Product).variants?.data.length).toStrictEqual(parsedVariantDataToUse.length); + expect((resultForTest as Product).variants?.data.length).toStrictEqual( + parsedVariantData.filter((variant: any) => variant.attributes.available !== false).length + ); expect((resultForTest as Product).variants?.selections.length).toBe(Object.keys(parsedVariantDataToUse[0].options).length); expect(resultForTest).toBeDefined(); @@ -445,14 +453,18 @@ describe('SearchResultStore', () => { expect(variants).toBeDefined(); - expect((resultForTest as Product).variants?.data.length).toStrictEqual(parsedVariantData.length); + expect((resultForTest as Product).variants?.data.length).toStrictEqual( + parsedVariantData.filter((variant: any) => variant.attributes.available !== false).length + ); expect((resultForTest as Product).variants?.selections.length).toBe(Object.keys(parsedVariantData[0].options).length); (resultForTest as Product).variants?.update(parsedVariantDataToUse); expect((resultForTest as Product).variants).toBeDefined(); - expect((resultForTest as Product).variants?.data.length).toStrictEqual(parsedVariantDataToUse.length); + expect((resultForTest as Product).variants?.data.length).toStrictEqual( + parsedVariantDataToUse.filter((variant: any) => variant.attributes.available !== false).length + ); expect((resultForTest as Product).variants?.selections.length).toBe(Object.keys(parsedVariantDataToUse[0].options).length); expect(resultForTest).toBeDefined(); @@ -488,14 +500,18 @@ describe('SearchResultStore', () => { expect(variants).toBeDefined(); - expect((resultForTest as Product).variants?.data.length).toStrictEqual(parsedVariantData.length); + expect((resultForTest as Product).variants?.data.length).toStrictEqual( + parsedVariantData.filter((variant: any) => variant.attributes.available !== false).length + ); expect((resultForTest as Product).variants?.selections.length).toBe(Object.keys(parsedVariantData[0].options).length); (resultForTest as Product).variants?.update(parsedVariantDataToUse, newVariantsConfig); expect((resultForTest as Product).variants).toBeDefined(); - expect((resultForTest as Product).variants?.data.length).toStrictEqual(parsedVariantDataToUse.length); + expect((resultForTest as Product).variants?.data.length).toStrictEqual( + parsedVariantDataToUse.filter((variant: any) => variant.attributes.available !== false).length + ); expect((resultForTest as Product).variants?.selections.length).toBe(Object.keys(parsedVariantDataToUse[0].options).length); expect(resultForTest).toBeDefined(); @@ -650,12 +666,12 @@ describe('SearchResultStore', () => { // only uses "available" variants expect(variants?.active).toBe(variants?.data.find((variant) => variant.available)); - expect(variants?.data.length).toStrictEqual(parsedVariantData.length); + expect(variants?.data.length).toStrictEqual(parsedVariantData.filter((variant: any) => variant.attributes.available !== false).length); expect(variants?.selections.length).toBe(Object.keys(parsedVariantData[0].options).length); - // creates a variant for each data entry + // creates a variant for each available data entry variants.data.forEach((variant, index) => { - expect(variant).toStrictEqual(new Variant(parsedVariantData[index])); + expect(variant).toStrictEqual(new Variant(parsedVariantData.filter((variant: any) => variant.attributes.available !== false)[index])); }); }); diff --git a/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts b/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts index b7e2caed5..66e6cb42d 100644 --- a/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts +++ b/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts @@ -320,15 +320,17 @@ export class Variants { const options: string[] = []; // create variants objects - this.data = variantData.map((variant) => { - Object.keys(variant.options).forEach((variantOption) => { - if (!options.includes(variantOption)) { - options.push(variantOption); - } - }); + this.data = variantData + .filter((variant) => variant.attributes.available !== false) + .map((variant) => { + Object.keys(variant.options).forEach((variantOption) => { + if (!options.includes(variantOption)) { + options.push(variantOption); + } + }); - return new Variant(variant); - }); + return new Variant(variant); + }); //need to reset this.selections first this.selections = []; @@ -475,7 +477,7 @@ export class VariantSelection { // current selection should only consider OTHER selections for availability const selectedSelections = variants.selections.filter((selection) => selection.field != this.field && selection.selected); - let availableVariants = variants.data; + let availableVariants = variants.data.filter((variant) => variant.available); // loop through selectedSelections and remove products that do not match for (const selectedSelection of selectedSelections) {