@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.
- package/cjs/dist/react/ProductListFilters.d.ts +1 -0
- package/cjs/dist/react/ProductListFilters.js +2 -1
- package/cjs/dist/services/products-list-search-service.d.ts +12 -4
- package/cjs/dist/services/products-list-search-service.js +25 -2
- package/dist/react/ProductListFilters.d.ts +1 -0
- package/dist/react/ProductListFilters.js +2 -1
- package/dist/services/products-list-search-service.d.ts +12 -4
- package/dist/services/products-list-search-service.js +25 -2
- package/package.json +1 -1
|
@@ -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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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
|
});
|