Home Identifier Source Repository

src/helpers/partial-title.js

import curry from 'lodash/function/curry'
import any from 'lodash/collection/any'
import isArray from 'lodash/lang/isArray'
import contains from 'lodash/collection/contains'

/**
 * Checks if a course has a string in its title property.
 *
 * @param {String} partial - the partial string.
 * @param {Course} course
 * @returns {Boolean}
 */
let partialTitle = curry((partial, course) => {
	return contains(course.title, partial)
})


/**
 * Checks if a course has a string in its name property.
 *
 * @param {String} partial - the partial string.
 * @param {Course} course
 * @returns {Boolean}
 */
let partialName = curry((partial, course) => {
	return contains(course.name, partial)
})


/**
 * Checks if a course has a string in either the name or title property.
 *
 * @param {String} partial - the partial string.
 * @param {Course} course
 * @returns {Boolean}
 */
let checkPartialNameOrTitle = curry((partial, course) => {
	return (partialTitle(partial, course) || partialName(partial, course))
})


/**
 * Checks if a course has a string or list of strings in either the name or title property.
 *
 * @param {String|Array<String>} partial - the partial string, or an array of partial strings.
 * @param {Course} course
 * @returns {Boolean}
 */
let partialNameOrTitle = curry((partial, course) => {
	if (isArray(partial)) {
		return any(partial, p => checkPartialNameOrTitle(p, course))
	}
	return checkPartialNameOrTitle(partial, course)
})

export {
	partialTitle,
	partialName,
	partialNameOrTitle,
}