@growupsell/react-ecommerce-core 2.0.16 → 2.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -118,6 +118,15 @@ declare const FilterContext: React__default.Context<{
118
118
  selectedVariants: any[];
119
119
  updateSelectedVariants: (x: any) => void;
120
120
  variantLoading: boolean;
121
+ selectedSpecifications: {
122
+ id: number;
123
+ values: string[];
124
+ }[];
125
+ updateSpecificationOption: (keyId: number, option: string) => void;
126
+ setSelectedSpecifications: (value: {
127
+ id: number;
128
+ values: string[];
129
+ }[]) => void;
121
130
  total: number;
122
131
  limit: number;
123
132
  offset: number;
@@ -150,6 +159,15 @@ declare const useFilter: () => {
150
159
  selectedVariants: any[];
151
160
  updateSelectedVariants: (x: any) => void;
152
161
  variantLoading: boolean;
162
+ selectedSpecifications: {
163
+ id: number;
164
+ values: string[];
165
+ }[];
166
+ updateSpecificationOption: (keyId: number, option: string) => void;
167
+ setSelectedSpecifications: (value: {
168
+ id: number;
169
+ values: string[];
170
+ }[]) => void;
153
171
  total: number;
154
172
  limit: number;
155
173
  offset: number;
package/dist/index.d.ts CHANGED
@@ -118,6 +118,15 @@ declare const FilterContext: React__default.Context<{
118
118
  selectedVariants: any[];
119
119
  updateSelectedVariants: (x: any) => void;
120
120
  variantLoading: boolean;
121
+ selectedSpecifications: {
122
+ id: number;
123
+ values: string[];
124
+ }[];
125
+ updateSpecificationOption: (keyId: number, option: string) => void;
126
+ setSelectedSpecifications: (value: {
127
+ id: number;
128
+ values: string[];
129
+ }[]) => void;
121
130
  total: number;
122
131
  limit: number;
123
132
  offset: number;
@@ -150,6 +159,15 @@ declare const useFilter: () => {
150
159
  selectedVariants: any[];
151
160
  updateSelectedVariants: (x: any) => void;
152
161
  variantLoading: boolean;
162
+ selectedSpecifications: {
163
+ id: number;
164
+ values: string[];
165
+ }[];
166
+ updateSpecificationOption: (keyId: number, option: string) => void;
167
+ setSelectedSpecifications: (value: {
168
+ id: number;
169
+ values: string[];
170
+ }[]) => void;
153
171
  total: number;
154
172
  limit: number;
155
173
  offset: number;
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { AuthContext, AuthProvider, BaseProvider, BusinessConfigProvider, BusinessMediaContext, BusinessMediaProvider, CartContext, CartProvider, CartWishlistRefreshContext, CartWishlistRefreshProvider, CustomPageConfigContext, CustomPageConfigProvider, CustomerConfigContext, CustomerConfigProvider, FilterContext, FilterProvider, HeaderFooterContext, HeaderFooterProvider, HomeConfigContext, HomeConfigHeroSliderContext, HomeConfigHeroSliderProvider, HomeConfigProvider, LiveSupportWidgetProvider, MenuCartContext, MenuCartProvider, MenuFilterContext, MenuFilterProvider, ModalProvider, ProductConfigContext, ProductConfigProvider, ProductDetailContext, ProductDetailProvider, ReferralCodeProvider, StorageContext, StorageProvider, ThemeEditContext, ThemeEditProvider, ToastSupportProvider, WishlistContext, WishlistProvider, useAuth, useBusiness, useBusinessContext, useBusinessMedia, useCart, useCartWishlistRefresh, useCustomPageConfig, useCustomer, useFilter, useHeaderFooter, useHomeConfig, useHomeConfigHeroSlider, useLiveSupportWidget, useMenuCart, useMenuFilter, useModal, useProductConfig, useProductDetail, useReferralCode, useStorage, useThemeEdit, useToastSupport, useWishlist } from './chunk-ID4JKOXT.js';
1
+ export { AuthContext, AuthProvider, BaseProvider, BusinessConfigProvider, BusinessMediaContext, BusinessMediaProvider, CartContext, CartProvider, CartWishlistRefreshContext, CartWishlistRefreshProvider, CustomPageConfigContext, CustomPageConfigProvider, CustomerConfigContext, CustomerConfigProvider, FilterContext, FilterProvider, HeaderFooterContext, HeaderFooterProvider, HomeConfigContext, HomeConfigHeroSliderContext, HomeConfigHeroSliderProvider, HomeConfigProvider, LiveSupportWidgetProvider, MenuCartContext, MenuCartProvider, MenuFilterContext, MenuFilterProvider, ModalProvider, ProductConfigContext, ProductConfigProvider, ProductDetailContext, ProductDetailProvider, ReferralCodeProvider, StorageContext, StorageProvider, ThemeEditContext, ThemeEditProvider, ToastSupportProvider, WishlistContext, WishlistProvider, useAuth, useBusiness, useBusinessContext, useBusinessMedia, useCart, useCartWishlistRefresh, useCustomPageConfig, useCustomer, useFilter, useHeaderFooter, useHomeConfig, useHomeConfigHeroSlider, useLiveSupportWidget, useMenuCart, useMenuFilter, useModal, useProductConfig, useProductDetail, useReferralCode, useStorage, useThemeEdit, useToastSupport, useWishlist } from './chunk-D24PXFD3.js';
2
2
  export { BusinessConfigContext } from './chunk-SP77KIKJ.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
package/dist/provider.cjs CHANGED
@@ -588,6 +588,9 @@ var FilterContext = react.createContext({
588
588
  selectedVariants: [],
589
589
  updateSelectedVariants: () => null,
590
590
  variantLoading: false,
591
+ selectedSpecifications: [],
592
+ updateSpecificationOption: () => null,
593
+ setSelectedSpecifications: () => null,
591
594
  total: 0,
592
595
  limit: 10,
593
596
  offset: 0
@@ -614,6 +617,7 @@ var FilterProvider = (props) => {
614
617
  const [variantList, setVariantList] = react.useState([]);
615
618
  const [selectedVariants, setSelectedVariants] = react.useState([]);
616
619
  const [variantLoading, setVariantLoading] = react.useState(false);
620
+ const [selectedSpecifications, setSelectedSpecifications] = react.useState([]);
617
621
  const [limit, setLimit] = react.useState(10);
618
622
  const [offset, setOffset] = react.useState(0);
619
623
  const [total, setTotal] = react.useState(0);
@@ -640,15 +644,30 @@ var FilterProvider = (props) => {
640
644
  });
641
645
  setCurrentPage(1);
642
646
  };
643
- const fetchFilterConfig = async () => {
644
- setFilterConfigLoading(true);
645
- const response = await api.api.getProductFilterConfig();
646
- setFilterConfig(response);
647
- setFilterConfigLoading(false);
648
- };
647
+ const categoryFilterKey = selectedCategoryId.length === 1 ? selectedCategoryId[0] : void 0;
649
648
  react.useEffect(() => {
650
- fetchFilterConfig();
651
- }, []);
649
+ let active = true;
650
+ (async () => {
651
+ if (!filterConfig) {
652
+ setFilterConfigLoading(true);
653
+ }
654
+ try {
655
+ const response = await api.api.getProductFilterConfig(categoryFilterKey);
656
+ if (active) {
657
+ setFilterConfig(response);
658
+ }
659
+ } catch (error) {
660
+ console.log(error);
661
+ } finally {
662
+ if (active) {
663
+ setFilterConfigLoading(false);
664
+ }
665
+ }
666
+ })();
667
+ return () => {
668
+ active = false;
669
+ };
670
+ }, [categoryFilterKey]);
652
671
  const removeCategoryFilterId = (id) => {
653
672
  setSelectedCategoryId((x) => {
654
673
  return x.filter((o) => o !== id);
@@ -666,6 +685,7 @@ var FilterProvider = (props) => {
666
685
  max_price: selectedMaxPrice,
667
686
  brand_ids: selectedCategoryId.length > 0 ? selectedBrandId : null,
668
687
  variants: selectedCategoryId.length > 0 ? selectedVariants : null,
688
+ specifications: selectedSpecifications,
669
689
  limit,
670
690
  offset
671
691
  };
@@ -687,6 +707,21 @@ var FilterProvider = (props) => {
687
707
  return [...prevIds, id];
688
708
  });
689
709
  };
710
+ const updateSpecificationOption = (keyId, option) => {
711
+ setSelectedSpecifications((prev) => {
712
+ const current = prev.find((item) => item.id === keyId);
713
+ if (!current) {
714
+ return [...prev, { id: keyId, values: [option] }];
715
+ }
716
+ const values = current.values.includes(option) ? current.values.filter((value) => value !== option) : [...current.values, option];
717
+ if (values.length === 0) {
718
+ return prev.filter((item) => item.id !== keyId);
719
+ }
720
+ return prev.map(
721
+ (item) => item.id === keyId ? { ...item, values } : item
722
+ );
723
+ });
724
+ };
690
725
  const updateSelectedVariants = (label) => {
691
726
  setSelectedVariants((prevVariants) => {
692
727
  if (prevVariants.includes(label)) {
@@ -718,9 +753,31 @@ var FilterProvider = (props) => {
718
753
  selectedMaxPrice,
719
754
  selectedBrandId,
720
755
  selectedVariants,
756
+ selectedSpecifications,
721
757
  limit,
722
758
  offset
723
759
  ]);
760
+ react.useEffect(() => {
761
+ const keys = filterConfig?.specifications ?? [];
762
+ const allowed = new Map(
763
+ keys.map((key) => [
764
+ key.id,
765
+ new Set(key.options ?? [])
766
+ ])
767
+ );
768
+ setSelectedSpecifications((prev) => {
769
+ const next = prev.map((item) => ({
770
+ ...item,
771
+ values: item.values.filter((value) => allowed.get(item.id)?.has(value))
772
+ })).filter((item) => item.values.length > 0 && allowed.has(item.id));
773
+ if (next.length === prev.length && next.every(
774
+ (item, index) => item.id === prev[index].id && item.values.length === prev[index].values.length && item.values.every((value, valueIndex) => value === prev[index].values[valueIndex])
775
+ )) {
776
+ return prev;
777
+ }
778
+ return next;
779
+ });
780
+ }, [filterConfig]);
724
781
  const handlePageChange = (newOffset) => {
725
782
  setOffset(newOffset);
726
783
  };
@@ -760,6 +817,9 @@ var FilterProvider = (props) => {
760
817
  selectedVariants,
761
818
  updateSelectedVariants,
762
819
  variantLoading,
820
+ selectedSpecifications,
821
+ updateSpecificationOption,
822
+ setSelectedSpecifications,
763
823
  total,
764
824
  limit,
765
825
  offset