Skip to content

Commit 2cf5727

Browse files
xkr47Alexey-Pavlovesezen
authored
Fix: Browse and Search types (#410)
* Fix browse types based on empirical testing * Fix search types based on empirical testing * Fix types in browse and search tests * Fix typo --------- Co-authored-by: Aleksei Pavlov <pavlov.aleksey.m@gmail.com> Co-authored-by: Enes Kutay SEZEN <eneskutaysezen@gmail.com>
1 parent dea9dda commit 2cf5727

5 files changed

Lines changed: 168 additions & 138 deletions

File tree

src/types/browse.d.ts

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {
2+
BrowseFacet,
23
Collection,
34
ConstructorClientOptions,
45
Facet,
@@ -31,7 +32,7 @@ export interface IBrowseParameters {
3132
hiddenFacets?: string[];
3233
variationsMap?: VariationsMap;
3334
qsParam?: Record<string, any>;
34-
filterMatchTypes?: Record<string, 'all'| 'any' | 'none'>
35+
filterMatchTypes?: Record<string, 'all' | 'any' | 'none'>;
3536
}
3637

3738
declare class Browse {
@@ -77,40 +78,52 @@ declare class Browse {
7778
/** *********
7879
* Browse results returned from server
7980
********** */
80-
export interface BrowseResponse<ResponseType> extends Record<string, any> {
81-
request?: Partial<BrowseRequestType>;
82-
response?: Partial<ResponseType>;
83-
result_id?: string;
81+
export interface BrowseResponse<ResponseType, OmittedRequestFields extends keyof BrowseRequestType>
82+
extends Record<string, any> {
83+
84+
request: Omit<BrowseRequestType, OmittedRequestFields>;
85+
response: ResponseType;
86+
result_id: string;
8487
ad_based?: boolean;
8588
}
8689

8790
export type GetBrowseResultsResponse =
88-
BrowseResponse<GetBrowseResultsResponseData>;
91+
BrowseResponse<GetBrowseResultsResponseData, 'facet_name'>;
8992
export type GetBrowseResultsForItemIdsResponse =
90-
BrowseResponse<GetBrowseResultsResponseData>;
93+
BrowseResponse<GetBrowseResultsResponseData, 'facet_name'>;
9194
export type GetBrowseGroupsResponse = BrowseResponse<
9295
Pick<
9396
GetBrowseResultsResponseData,
9497
'result_sources' | 'groups' | 'refined_content'
95-
>
98+
>,
99+
'browse_filter_name' | 'browse_filter_value' | 'searchandized_items' | 'facet_name'
96100
>;
97101
export type GetBrowseFacetsResponse = BrowseResponse<
98-
Pick<GetBrowseResultsResponseData, 'facets' | 'total_num_results'>
102+
GetBrowseFacetsResultsResponseData,
103+
'browse_filter_name' | 'browse_filter_value' | 'searchandized_items' | 'facet_name'
99104
>;
100105
export type GetBrowseFacetOptionsResponse = BrowseResponse<
101-
Pick<GetBrowseResultsResponseData, 'facets'>
106+
Pick<GetBrowseResultsResponseData, 'facets' | 'total_num_results'>,
107+
'browse_filter_name' | 'browse_filter_value' | 'searchandized_items'
102108
>;
103109

104110
export interface GetBrowseResultsResponseData extends Record<string, any> {
105-
result_sources: Partial<ResultSources>;
106-
facets: Partial<Facet>[];
107-
groups: Partial<Group>[];
108-
results: Partial<BrowseResultData>[];
109-
sort_options: Partial<SortOption>[];
111+
result_sources: ResultSources;
112+
facets: Facet[];
113+
groups: Group[];
114+
results: BrowseResultData[];
115+
sort_options: SortOption[];
110116
refined_content: Record<string, any>[];
111117
total_num_results: number;
112-
features: Partial<Feature>[];
113-
collection: Partial<Collection>;
118+
features: Feature[];
119+
collection?: Partial<Collection>;
120+
related_searches?: Record<string, any>[];
121+
related_browse_pages?: Record<string, any>[];
122+
}
123+
124+
export interface GetBrowseFacetsResultsResponseData extends Record<string, any> {
125+
facets: BrowseFacet[];
126+
total_num_results: number;
114127
}
115128

116129
export interface BrowseResultData extends Record<string, any> {
@@ -122,23 +135,24 @@ export interface BrowseResultData extends Record<string, any> {
122135
value: string;
123136
is_slotted: false;
124137
labels: Record<string, any>;
125-
variations: Record<string, any>[];
126-
variations_map: Record<string, any> | Record<string, any>[];
138+
variations?: Record<string, any>[];
139+
variations_map?: Record<string, any> | Record<string, any>[];
127140
}
128141

129142
export interface BrowseRequestType extends Record<string, any> {
130143
browse_filter_name: string;
131144
browse_filter_value: string;
132-
filter_match_types: Record<string, any>;
133-
filters: Record<string, any>;
134-
fmt_options: Record<string, any>;
145+
filter_match_types?: Record<string, any>;
146+
filters?: Record<string, any>;
147+
fmt_options: FmtOptions;
148+
facet_name: string;
135149
num_results_per_page: number;
136150
page: number;
137151
section: string;
138152
sort_by: string;
139153
sort_order: string;
140154
term: string;
141-
query: string;
155+
query?: string;
142156
features: Partial<RequestFeature>;
143157
feature_variants: Partial<RequestFeatureVariant>;
144158
searchandized_items: Record<string, any>;

src/types/index.d.ts

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ export interface SortOption extends Record<string, any> {
9797
display_name: string;
9898
sort_order: string;
9999
status: string;
100+
hidden: boolean;
100101
}
101102

102103
export interface Feature extends Record<string, any> {
@@ -110,44 +111,59 @@ export interface Feature extends Record<string, any> {
110111
} | null;
111112
}
112113

113-
export type Facet = RangeFacet | OptionFacet;
114+
export type Facet = RangeFacet | OptionFacet | HierarchicalOptionFacet;
115+
116+
export type BrowseFacet = Pick<Facet, keyof BaseFacet | 'type'>;
114117

115118
export interface BaseFacet extends Record<string, any> {
116119
data: Record<string, any>;
117-
status: Record<string, any>;
118120
display_name: string;
119121
name: string;
120122
hidden: boolean;
121123
}
122124

123125
export interface RangeFacet extends BaseFacet, Record<string, any> {
124-
max: number;
125-
min: number;
126+
status?: { min: RangeMin, max: RangeMax };
127+
max: RangeMax;
128+
min: RangeMin;
126129
type: 'range';
127130
}
128131

129132
export interface OptionFacet extends BaseFacet, Record<string, any> {
130133
options: FacetOption[];
131-
type: 'multiple' | 'single' | 'hierarchical';
134+
type: 'multiple' | 'single';
135+
}
136+
137+
export interface HierarchicalOptionFacet extends BaseFacet, Record<string, any> {
138+
options: HierarchicalFacetOption[];
139+
type: 'hierarchical';
132140
}
133141

134142
export interface FacetOption extends Record<string, any> {
135143
count: number;
136144
display_name: string;
137145
value: string;
138-
options?: FacetOption[];
139-
range?: ['-inf' | number, 'inf' | number];
146+
range?: [RangeMin, RangeMax];
140147
status: string;
148+
data: Record<string, any>;
141149
}
142150

151+
export interface HierarchicalFacetOption extends FacetOption {
152+
options?: HierarchicalFacetOption[];
153+
}
154+
155+
export type RangeMin = '-inf' | number;
156+
export type RangeMax = '+inf' | 'inf' | number
157+
143158
export interface Group extends BaseGroup, Record<string, any> {
144-
count?: number;
159+
count: number;
145160
data?: Record<string, any>;
146-
parents?: BaseGroup[];
147-
children?: Group[];
161+
parents: BaseGroup[];
162+
children: Group[];
148163
}
149164

150165
export interface Collection extends Record<string, any> {
166+
// documentation says this field is called `id`
151167
collection_id: string;
152168
display_name: string;
153169
data: Record<string, any>;

src/types/search.d.ts

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {
2+
BrowseResultData,
23
ConstructorClientOptions,
34
Facet,
45
Feature,
@@ -56,27 +57,29 @@ declare class Search {
5657
* search results returned from server
5758
********** */
5859
export interface SearchResponse {
59-
request: Partial<SearchRequestType>;
60-
response: Partial<SearchResponseType | Redirect>;
60+
request: SearchRequestType;
61+
response: SearchResponseType | Redirect;
6162
result_id: string;
6263
}
6364

6465
export interface SearchResponseType extends Record<string, any> {
65-
result_sources: Partial<ResultSources>;
66-
facets: Partial<Facet>[];
67-
groups: Partial<Group>[];
68-
results: Partial<Result>[];
69-
sort_options: Partial<SortOption>[];
66+
result_sources: ResultSources;
67+
facets: Facet[];
68+
groups: Group[];
69+
results: Result[];
70+
sort_options: SortOption[];
7071
refined_content: Record<string, any>[];
7172
total_num_results: number;
72-
features: Partial<Feature>[];
73+
features: Feature[];
74+
related_searches?: Record<string, any>[];
75+
related_browse_pages?: Record<string, any>[];
7376
}
7477

7578
export interface SearchRequestType extends Record<string, any> {
7679
page: number;
7780
num_results_per_page: number;
7881
section: string;
79-
blacklist_rules: boolean;
82+
blacklist_rules?: boolean;
8083
term: string;
8184
fmt_options: FmtOptions;
8285
sort_by: string;
@@ -89,18 +92,7 @@ export interface SearchRequestType extends Record<string, any> {
8992
pre_filter_expression?: FilterExpression;
9093
}
9194

92-
export interface Result extends Record<string, any> {
93-
matched_terms: string[];
94-
data: {
95-
id: string;
96-
[key: string]: any;
97-
};
98-
value: string;
99-
is_slotted: false;
100-
labels: Record<string, any>;
101-
variations: Record<string, any>[];
102-
variations_map: Record<string, any> | Record<string, any>[];
103-
}
95+
export type Result = BrowseResultData;
10496

10597
export interface Redirect extends Record<string, any> {
10698
redirect: {

src/types/tests/browse.test-d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ expectAssignable<GetBrowseResultsResponse>({
2929
data: {},
3030
},
3131
],
32+
groups: [],
3233
results: [
3334
{
3435
matched_terms: [],
@@ -62,6 +63,7 @@ expectAssignable<GetBrowseResultsResponse>({
6263
display_name: 'A - Z',
6364
sort_order: 'descending',
6465
status: '',
66+
hidden: false,
6567
},
6668
],
6769
refined_content: [],

0 commit comments

Comments
 (0)