Skip to content

Commit 1343503

Browse files
committed
Update design patter to a factory function
1 parent f5722d5 commit 1343503

File tree

1 file changed

+65
-40
lines changed

1 file changed

+65
-40
lines changed

src/adapter/search-request-adapter/search-params-adapter.ts

Lines changed: 65 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -14,58 +14,82 @@ import { adaptFilters } from './filter-adapter'
1414
*
1515
* @returns {MeiliSearchParams}
1616
*/
17-
function ParamsAdapter(searchContext: SearchContext) {
17+
function MeiliParamsCreator(searchContext: SearchContext) {
1818
const meiliSearchParams: Record<string, any> = {}
19+
const {
20+
facets,
21+
attributesToSnippet,
22+
snippetEllipsisText,
23+
attributesToRetrieve,
24+
filters,
25+
numericFilters,
26+
facetFilters,
27+
attributesToHighlight,
28+
highlightPreTag,
29+
highlightPostTag,
30+
placeholderSearch,
31+
query,
32+
finitePagination,
33+
sort,
34+
pagination,
35+
} = searchContext
1936

2037
return {
2138
getParams() {
2239
return meiliSearchParams
2340
},
24-
adaptFacets() {
25-
const facets = searchContext?.facets
41+
addFacets() {
2642
if (facets?.length) {
27-
meiliSearchParams.facetsDistribution = facets
43+
meiliSearchParams.facets = facets
2844
}
2945
},
30-
adaptAttributesToCrop() {
31-
const attributesToCrop = searchContext?.attributesToSnippet
32-
if (attributesToCrop) {
33-
meiliSearchParams.attributesToCrop = attributesToCrop
46+
addAttributesToCrop() {
47+
if (attributesToSnippet) {
48+
meiliSearchParams.attributesToCrop = attributesToSnippet
3449
}
3550
},
36-
adaptAttributesToRetrieve() {
37-
const attributesToRetrieve = searchContext?.attributesToRetrieve
51+
addCropMarker() {
52+
// Attributes To Crop marker
53+
if (snippetEllipsisText != null) {
54+
meiliSearchParams.cropMarker = snippetEllipsisText
55+
}
56+
},
57+
addAttributesToRetrieve() {
3858
if (attributesToRetrieve) {
3959
meiliSearchParams.attributesToRetrieve = attributesToRetrieve
4060
}
4161
},
42-
adaptFilters() {
43-
const filter = adaptFilters(
44-
searchContext?.filters,
45-
searchContext?.numericFilters,
46-
searchContext?.facetFilters
47-
)
62+
addFilters() {
63+
const filter = adaptFilters(filters, numericFilters, facetFilters)
4864
if (filter.length) {
4965
meiliSearchParams.filter = filter
5066
}
5167
},
52-
adaptAttributesToHighlight() {
53-
meiliSearchParams.attributesToHighlight = searchContext?.attributesToHighlight || [
54-
'*',
55-
]
68+
addAttributesToHighlight() {
69+
meiliSearchParams.attributesToHighlight = attributesToHighlight || ['*']
5670
},
57-
adaptLimit() {
58-
const placeholderSearch = searchContext.placeholderSearch
59-
const query = searchContext.query
60-
const { pagination } = searchContext
61-
71+
addPreTag() {
72+
if (highlightPreTag) {
73+
meiliSearchParams.highlightPreTag = highlightPreTag
74+
} else {
75+
meiliSearchParams.highlightPreTag = '__ais-highlight__'
76+
}
77+
},
78+
addPostTag() {
79+
if (highlightPostTag) {
80+
meiliSearchParams.highlightPostTag = highlightPostTag
81+
} else {
82+
meiliSearchParams.highlightPostTag = '__/ais-highlight__'
83+
}
84+
},
85+
addPagination() {
6286
// Limit based on pagination preferences
6387
if (
6488
(!placeholderSearch && query === '') ||
6589
pagination.paginationTotalHits === 0
6690
) {
6791
meiliSearchParams.limit = 0
68-
} else if (searchContext.finitePagination) {
92+
} else if (finitePagination) {
6993
meiliSearchParams.limit = pagination.paginationTotalHits
7094
} else {
7195
const limit = (pagination.page + 1) * pagination.hitsPerPage + 1
@@ -78,14 +102,12 @@ function ParamsAdapter(searchContext: SearchContext) {
78102
}
79103
}
80104
},
81-
adaptSort() {
82-
const sort = searchContext.sort
83-
105+
addSort() {
84106
if (sort?.length) {
85107
meiliSearchParams.sort = [sort]
86108
}
87109
},
88-
adaptGeoSearchRules() {
110+
addGeoSearchRules() {
89111
const geoSearchContext = createGeoSearchContext(searchContext)
90112
const geoRules = adaptGeoPointsRules(geoSearchContext)
91113

@@ -110,15 +132,18 @@ function ParamsAdapter(searchContext: SearchContext) {
110132
export function adaptSearchParams(
111133
searchContext: SearchContext
112134
): MeiliSearchParams {
113-
const adapter = ParamsAdapter(searchContext)
114-
adapter.adaptFacets()
115-
adapter.adaptFilters()
116-
adapter.adaptLimit()
117-
adapter.adaptSort()
118-
adapter.adaptGeoSearchRules()
119-
adapter.adaptAttributesToCrop()
120-
adapter.adaptAttributesToHighlight()
121-
adapter.adaptAttributesToRetrieve()
135+
const meilisearchParams = MeiliParamsCreator(searchContext)
136+
meilisearchParams.addFacets()
137+
meilisearchParams.addAttributesToHighlight()
138+
meilisearchParams.addPreTag()
139+
meilisearchParams.addPostTag()
140+
meilisearchParams.addAttributesToRetrieve()
141+
meilisearchParams.addAttributesToCrop()
142+
meilisearchParams.addCropMarker()
143+
meilisearchParams.addPagination()
144+
meilisearchParams.addFilters()
145+
meilisearchParams.addSort()
146+
meilisearchParams.addGeoSearchRules()
122147

123-
return adapter.getParams()
148+
return meilisearchParams.getParams()
124149
}

0 commit comments

Comments
 (0)