|
1 | 1 | // @flow |
| 2 | +import getNestedFieldValue from './getNestedFieldValue'; |
2 | 3 |
|
3 | 4 | import { PrefixIndexStrategy } from './IndexStrategy/index'; |
4 | 5 | import { LowerCaseSanitizer } from './Sanitizer/index'; |
@@ -29,14 +30,14 @@ export class Search { |
29 | 30 |
|
30 | 31 | _searchIndex : ISearchIndex; |
31 | 32 | _tokenizer : ITokenizer; |
32 | | - _uidFieldName : string; |
| 33 | + _uidFieldName : string | Array<string>; |
33 | 34 |
|
34 | 35 | /** |
35 | 36 | * Constructor. |
36 | 37 | * @param uidFieldName Field containing values that uniquely identify search documents; this field's values are used |
37 | 38 | * to ensure that a search result set does not contain duplicate objects. |
38 | 39 | */ |
39 | | - constructor(uidFieldName : string) { |
| 40 | + constructor(uidFieldName : string | Array<string>) { |
40 | 41 | this._uidFieldName = uidFieldName; |
41 | 42 |
|
42 | 43 | // Set default/recommended strategies |
@@ -168,7 +169,13 @@ export class Search { |
168 | 169 |
|
169 | 170 | for (var di = 0, numDocuments = documents.length; di < numDocuments; di++) { |
170 | 171 | var doc = documents[di]; |
171 | | - var uid = doc[uidFieldName]; |
| 172 | + var uid; |
| 173 | + |
| 174 | + if (uidFieldName instanceof Array) { |
| 175 | + uid = getNestedFieldValue(doc, uidFieldName); |
| 176 | + } else { |
| 177 | + uid = doc[uidFieldName]; |
| 178 | + } |
172 | 179 |
|
173 | 180 | for (var sfi = 0, numSearchableFields = _searchableFields.length; sfi < numSearchableFields; sfi++) { |
174 | 181 | var fieldValue; |
@@ -206,28 +213,3 @@ export class Search { |
206 | 213 | } |
207 | 214 | } |
208 | 215 | } |
209 | | - |
210 | | -/** |
211 | | - * Find and return a nested object value. |
212 | | - * |
213 | | - * @param object to crawl |
214 | | - * @param path Property path |
215 | | - * @returns {any} |
216 | | - */ |
217 | | -function getNestedFieldValue(object : Object, path : Array<string>) { |
218 | | - path = path || []; |
219 | | - object = object || {}; |
220 | | - |
221 | | - var value = object; |
222 | | - |
223 | | - // walk down the property path |
224 | | - for (var i = 0; i < path.length; i++) { |
225 | | - value = value[path[i]]; |
226 | | - |
227 | | - if (value == null) { |
228 | | - return null; |
229 | | - } |
230 | | - } |
231 | | - |
232 | | - return value; |
233 | | -} |
0 commit comments