From 207fa48fdfe38340bcdb6e7901106e4daefdeaff Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 31 May 2024 13:39:44 -0700 Subject: [PATCH 1/5] fix(searchresultstore): needed to filter out unavailable options even if there are no selections --- .../src/Search/Stores/SearchResultStore.ts | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts b/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts index b7e2caed5..8375b3a06 100644 --- a/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts +++ b/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts @@ -478,10 +478,14 @@ export class VariantSelection { let availableVariants = variants.data; // loop through selectedSelections and remove products that do not match - for (const selectedSelection of selectedSelections) { - availableVariants = availableVariants.filter( - (variant) => selectedSelection.selected?.value == variant.options[selectedSelection.field].value && variant.available - ); + if (selectedSelections.length) { + for (const selectedSelection of selectedSelections) { + availableVariants = availableVariants.filter( + (variant) => selectedSelection.selected?.value == variant.options[selectedSelection.field].value && variant.available + ); + } + } else { + availableVariants = availableVariants.filter((variant) => variant.available); } const newValues: VariantSelectionValue[] = variants.data @@ -507,6 +511,13 @@ export class VariantSelection { ), }; + console.log( + Boolean(availableVariants.some((availableVariant) => availableVariant.options[this.field].value == variant.options[this.field].value)), + Boolean( + availableVariants.some((availableVariant) => availableVariant.options[this.field].value == variant.options[this.field].value) && + variant.available + ) + ); if (this.config.thumbnailBackgroundImages) { mappedValue.backgroundImageUrl = thumbnailImageUrl; } else if (variant.options[this.field].backgroundImageUrl) { From dbde0288e25b47874804d0dd248f269c35e681ba Mon Sep 17 00:00:00 2001 From: Chris Date: Fri, 31 May 2024 13:41:19 -0700 Subject: [PATCH 2/5] chore(searchresultstore): clean up --- .../snap-store-mobx/src/Search/Stores/SearchResultStore.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts b/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts index 8375b3a06..ac33d8d79 100644 --- a/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts +++ b/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts @@ -511,13 +511,6 @@ export class VariantSelection { ), }; - console.log( - Boolean(availableVariants.some((availableVariant) => availableVariant.options[this.field].value == variant.options[this.field].value)), - Boolean( - availableVariants.some((availableVariant) => availableVariant.options[this.field].value == variant.options[this.field].value) && - variant.available - ) - ); if (this.config.thumbnailBackgroundImages) { mappedValue.backgroundImageUrl = thumbnailImageUrl; } else if (variant.options[this.field].backgroundImageUrl) { From e03b8b19cfe69a5ec3c7939a9591ec2e2c11631d Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 3 Jun 2024 10:09:27 -0700 Subject: [PATCH 3/5] fix(searchresultstore): filter out unavailable variants at contruction --- .../Search/Stores/SearchResultStore.test.ts | 40 +++++++++++++------ .../src/Search/Stores/SearchResultStore.ts | 18 +++++---- 2 files changed, 38 insertions(+), 20 deletions(-) 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 ac33d8d79..7e163f6fd 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 = []; From 1993e2dee72ce836b70022414ef3720927dc58ee Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 3 Jun 2024 10:19:20 -0700 Subject: [PATCH 4/5] refactor(searchresultstore): clean up --- .../snap-store-mobx/src/Search/Stores/SearchResultStore.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts b/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts index 7e163f6fd..91af085eb 100644 --- a/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts +++ b/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts @@ -477,17 +477,15 @@ 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 if (selectedSelections.length) { for (const selectedSelection of selectedSelections) { availableVariants = availableVariants.filter( - (variant) => selectedSelection.selected?.value == variant.options[selectedSelection.field].value && variant.available + (variant) => selectedSelection.selected?.value == variant.options[selectedSelection.field].value ); } - } else { - availableVariants = availableVariants.filter((variant) => variant.available); } const newValues: VariantSelectionValue[] = variants.data From 76b03b4e6c4b9967840f6c930405c3705facbc98 Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 3 Jun 2024 10:21:38 -0700 Subject: [PATCH 5/5] chore(searchresultstore): clean up --- .../src/Search/Stores/SearchResultStore.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts b/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts index 91af085eb..66e6cb42d 100644 --- a/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts +++ b/packages/snap-store-mobx/src/Search/Stores/SearchResultStore.ts @@ -480,12 +480,10 @@ export class VariantSelection { let availableVariants = variants.data.filter((variant) => variant.available); // loop through selectedSelections and remove products that do not match - if (selectedSelections.length) { - for (const selectedSelection of selectedSelections) { - availableVariants = availableVariants.filter( - (variant) => selectedSelection.selected?.value == variant.options[selectedSelection.field].value - ); - } + for (const selectedSelection of selectedSelections) { + availableVariants = availableVariants.filter( + (variant) => selectedSelection.selected?.value == variant.options[selectedSelection.field].value && variant.available + ); } const newValues: VariantSelectionValue[] = variants.data