Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 26x 26x 26x 26x 10x 16x 12x 38x 24x 24x 12x 6x 6x 6x 26x 17x 9x 9x 24x | import React from 'react'; import * as R from 'ramda'; const spotlightHandler = ({ term, fields }) => item => R.any(field => { const itemValue = R.is(Function, field.accessor) ? field.accessor(item) : R.prop(field.accessor, item); if (R.is(Number, itemValue)) return R.contains(R.toLower(term), R.toLower(R.toString(itemValue))); return R.contains(R.toLower(term), R.toLower(itemValue)); })(fields); export const getNodePath = (node, items, pathLabel = '') => { if (R.isNil(node.parentId)) return pathLabel; const nextNode = R.prop(node.parentId)(items); return getNodePath( R.prop(node.parentId)(items), items, R.join(' > ', [nextNode.label, pathLabel]), ); }; export const spotlightScopeListEngine = ({ term = '', fields, items, itemsById, noPath, hasPath, }) => { const isSelected = R.pipe(R.prop('isSelected'), R.equals(true)); const getFields = R.pipe(R.defaultTo([]), R.filter(isSelected), R.values); return R.reduce((acc, item) => { if (spotlightHandler({ term, fields: getFields(fields) })(item)) { if (noPath) return [...acc, item]; return [ ...acc, { ...item, nodePath: hasPath ? R.join(' > ', R.propOr([], 'path')(item)) : getNodePath(item, itemsById), }, ]; } return acc; }, [])(items); }; export const withBlank = func => Component => props => { if (R.pipe(func, R.prop('isBlank'))(props)) return null; return <Component {...props} />; }; |