@wix/headless-stores 0.0.43 → 0.0.44

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.
@@ -171,6 +171,7 @@ export interface PriceRangeRenderProps {
171
171
  export declare function PriceRange(props: PriceRangeProps): ReactNode;
172
172
  export interface CategoryFilterRenderProps {
173
173
  selectedCategory: Category | null;
174
+ setSelectedCategory: (category: Category | null) => void;
174
175
  }
175
176
  export interface CategoryFilterProps {
176
177
  /** Content to display (can be a render function receiving category data or ReactNode) */
@@ -151,8 +151,9 @@ export function PriceRange(props) {
151
151
  export function CategoryFilter(props) {
152
152
  const service = useService(ProductsListSearchServiceDefinition);
153
153
  const selectedCategory = service.selectedCategory.get();
154
+ const setSelectedCategory = service.setSelectedCategory;
154
155
  return typeof props.children === "function"
155
- ? props.children({ selectedCategory })
156
+ ? props.children({ selectedCategory, setSelectedCategory })
156
157
  : props.children;
157
158
  }
158
159
  /**
@@ -90,7 +90,9 @@ export declare const ProductsListSearchServiceDefinition: string & {
90
90
  toggleInventoryStatus: (status: InventoryStatusType) => void;
91
91
  toggleProductOption: (optionId: string, choiceId: string) => void;
92
92
  setSelectedCategory: (category: Category | null) => void;
93
- isFiltered: Signal<boolean>;
93
+ isFiltered: {
94
+ get: () => boolean;
95
+ };
94
96
  reset: () => void;
95
97
  };
96
98
  __config: {};
@@ -126,7 +128,9 @@ export declare const ProductsListSearchServiceDefinition: string & {
126
128
  toggleInventoryStatus: (status: InventoryStatusType) => void;
127
129
  toggleProductOption: (optionId: string, choiceId: string) => void;
128
130
  setSelectedCategory: (category: Category | null) => void;
129
- isFiltered: Signal<boolean>;
131
+ isFiltered: {
132
+ get: () => boolean;
133
+ };
130
134
  reset: () => void;
131
135
  };
132
136
  /**
@@ -179,7 +183,9 @@ export declare const ProductsListSearchService: import("@wix/services-definition
179
183
  toggleInventoryStatus: (status: InventoryStatusType) => void;
180
184
  toggleProductOption: (optionId: string, choiceId: string) => void;
181
185
  setSelectedCategory: (category: Category | null) => void;
182
- isFiltered: Signal<boolean>;
186
+ isFiltered: {
187
+ get: () => boolean;
188
+ };
183
189
  reset: () => void;
184
190
  };
185
191
  __config: {};
@@ -215,6 +221,8 @@ export declare const ProductsListSearchService: import("@wix/services-definition
215
221
  toggleInventoryStatus: (status: InventoryStatusType) => void;
216
222
  toggleProductOption: (optionId: string, choiceId: string) => void;
217
223
  setSelectedCategory: (category: Category | null) => void;
218
- isFiltered: Signal<boolean>;
224
+ isFiltered: {
225
+ get: () => boolean;
226
+ };
219
227
  reset: () => void;
220
228
  }, ProductsListSearchServiceConfig>;
@@ -438,7 +438,31 @@ export const ProductsListSearchService = implementService.withConfig()(ProductsL
438
438
  const selectedCategorySignal = signalsService.signal(initialSearchState?.category || null);
439
439
  const selectedVisibleSignal = signalsService.signal(initialSearchState?.visible ?? null);
440
440
  const selectedProductTypeSignal = signalsService.signal(initialSearchState?.productType || null);
441
- const isFilteredSignal = signalsService.signal(false);
441
+ // Computed signal to check if any filters are applied
442
+ const isFilteredSignal = signalsService.computed(() => {
443
+ const catalogPriceRange = getCatalogPriceRange(productsListService.aggregations.get()?.results || []);
444
+ const minPrice = userFilterMinPriceSignal.get();
445
+ const maxPrice = userFilterMaxPriceSignal.get();
446
+ const selectedInventoryStatuses = selectedInventoryStatusesSignal.get();
447
+ const selectedProductOptions = selectedProductOptionsSignal.get();
448
+ const selectedCategory = selectedCategorySignal.get();
449
+ const selectedVisible = selectedVisibleSignal.get();
450
+ const selectedProductType = selectedProductTypeSignal.get();
451
+ // Check if any filters are different from default values
452
+ const hasPriceFilter = minPrice > catalogPriceRange.minPrice ||
453
+ maxPrice < catalogPriceRange.maxPrice;
454
+ const hasInventoryFilter = selectedInventoryStatuses.length > 0;
455
+ const hasProductOptionsFilter = Object.keys(selectedProductOptions).length > 0;
456
+ const hasCategoryFilter = selectedCategory !== null;
457
+ const hasVisibilityFilter = selectedVisible !== null;
458
+ const hasProductTypeFilter = selectedProductType !== null;
459
+ return (hasPriceFilter ||
460
+ hasInventoryFilter ||
461
+ hasProductOptionsFilter ||
462
+ hasCategoryFilter ||
463
+ hasVisibilityFilter ||
464
+ hasProductTypeFilter);
465
+ });
442
466
  // Computed signals for pagination
443
467
  const hasNextPageSignal = signalsService.computed(() => {
444
468
  const pagingMetadata = productsListService.pagingMetadata.get();
@@ -721,7 +745,6 @@ export const ProductsListSearchService = implementService.withConfig()(ProductsL
721
745
  selectedCategorySignal.set(null);
722
746
  selectedVisibleSignal.set(null);
723
747
  selectedProductTypeSignal.set(null);
724
- isFilteredSignal.set(false);
725
748
  },
726
749
  };
727
750
  });
@@ -171,6 +171,7 @@ export interface PriceRangeRenderProps {
171
171
  export declare function PriceRange(props: PriceRangeProps): ReactNode;
172
172
  export interface CategoryFilterRenderProps {
173
173
  selectedCategory: Category | null;
174
+ setSelectedCategory: (category: Category | null) => void;
174
175
  }
175
176
  export interface CategoryFilterProps {
176
177
  /** Content to display (can be a render function receiving category data or ReactNode) */
@@ -151,8 +151,9 @@ export function PriceRange(props) {
151
151
  export function CategoryFilter(props) {
152
152
  const service = useService(ProductsListSearchServiceDefinition);
153
153
  const selectedCategory = service.selectedCategory.get();
154
+ const setSelectedCategory = service.setSelectedCategory;
154
155
  return typeof props.children === "function"
155
- ? props.children({ selectedCategory })
156
+ ? props.children({ selectedCategory, setSelectedCategory })
156
157
  : props.children;
157
158
  }
158
159
  /**
@@ -90,7 +90,9 @@ export declare const ProductsListSearchServiceDefinition: string & {
90
90
  toggleInventoryStatus: (status: InventoryStatusType) => void;
91
91
  toggleProductOption: (optionId: string, choiceId: string) => void;
92
92
  setSelectedCategory: (category: Category | null) => void;
93
- isFiltered: Signal<boolean>;
93
+ isFiltered: {
94
+ get: () => boolean;
95
+ };
94
96
  reset: () => void;
95
97
  };
96
98
  __config: {};
@@ -126,7 +128,9 @@ export declare const ProductsListSearchServiceDefinition: string & {
126
128
  toggleInventoryStatus: (status: InventoryStatusType) => void;
127
129
  toggleProductOption: (optionId: string, choiceId: string) => void;
128
130
  setSelectedCategory: (category: Category | null) => void;
129
- isFiltered: Signal<boolean>;
131
+ isFiltered: {
132
+ get: () => boolean;
133
+ };
130
134
  reset: () => void;
131
135
  };
132
136
  /**
@@ -179,7 +183,9 @@ export declare const ProductsListSearchService: import("@wix/services-definition
179
183
  toggleInventoryStatus: (status: InventoryStatusType) => void;
180
184
  toggleProductOption: (optionId: string, choiceId: string) => void;
181
185
  setSelectedCategory: (category: Category | null) => void;
182
- isFiltered: Signal<boolean>;
186
+ isFiltered: {
187
+ get: () => boolean;
188
+ };
183
189
  reset: () => void;
184
190
  };
185
191
  __config: {};
@@ -215,6 +221,8 @@ export declare const ProductsListSearchService: import("@wix/services-definition
215
221
  toggleInventoryStatus: (status: InventoryStatusType) => void;
216
222
  toggleProductOption: (optionId: string, choiceId: string) => void;
217
223
  setSelectedCategory: (category: Category | null) => void;
218
- isFiltered: Signal<boolean>;
224
+ isFiltered: {
225
+ get: () => boolean;
226
+ };
219
227
  reset: () => void;
220
228
  }, ProductsListSearchServiceConfig>;
@@ -438,7 +438,31 @@ export const ProductsListSearchService = implementService.withConfig()(ProductsL
438
438
  const selectedCategorySignal = signalsService.signal(initialSearchState?.category || null);
439
439
  const selectedVisibleSignal = signalsService.signal(initialSearchState?.visible ?? null);
440
440
  const selectedProductTypeSignal = signalsService.signal(initialSearchState?.productType || null);
441
- const isFilteredSignal = signalsService.signal(false);
441
+ // Computed signal to check if any filters are applied
442
+ const isFilteredSignal = signalsService.computed(() => {
443
+ const catalogPriceRange = getCatalogPriceRange(productsListService.aggregations.get()?.results || []);
444
+ const minPrice = userFilterMinPriceSignal.get();
445
+ const maxPrice = userFilterMaxPriceSignal.get();
446
+ const selectedInventoryStatuses = selectedInventoryStatusesSignal.get();
447
+ const selectedProductOptions = selectedProductOptionsSignal.get();
448
+ const selectedCategory = selectedCategorySignal.get();
449
+ const selectedVisible = selectedVisibleSignal.get();
450
+ const selectedProductType = selectedProductTypeSignal.get();
451
+ // Check if any filters are different from default values
452
+ const hasPriceFilter = minPrice > catalogPriceRange.minPrice ||
453
+ maxPrice < catalogPriceRange.maxPrice;
454
+ const hasInventoryFilter = selectedInventoryStatuses.length > 0;
455
+ const hasProductOptionsFilter = Object.keys(selectedProductOptions).length > 0;
456
+ const hasCategoryFilter = selectedCategory !== null;
457
+ const hasVisibilityFilter = selectedVisible !== null;
458
+ const hasProductTypeFilter = selectedProductType !== null;
459
+ return (hasPriceFilter ||
460
+ hasInventoryFilter ||
461
+ hasProductOptionsFilter ||
462
+ hasCategoryFilter ||
463
+ hasVisibilityFilter ||
464
+ hasProductTypeFilter);
465
+ });
442
466
  // Computed signals for pagination
443
467
  const hasNextPageSignal = signalsService.computed(() => {
444
468
  const pagingMetadata = productsListService.pagingMetadata.get();
@@ -721,7 +745,6 @@ export const ProductsListSearchService = implementService.withConfig()(ProductsL
721
745
  selectedCategorySignal.set(null);
722
746
  selectedVisibleSignal.set(null);
723
747
  selectedProductTypeSignal.set(null);
724
- isFilteredSignal.set(false);
725
748
  },
726
749
  };
727
750
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/headless-stores",
3
- "version": "0.0.43",
3
+ "version": "0.0.44",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "prebuild": "cd ../media && yarn build && cd ../ecom && yarn build",