@gitlab/ui
Version:
GitLab UI Components
26 lines (16 loc) • 1.1 kB
JavaScript
import isNumber from 'lodash/isNumber';
import isString from 'lodash/isString';
const isOption = (item) => Boolean(item) && (isString(item.value) || isNumber(item.value));
// eslint-disable-next-line unicorn/no-array-callback-reference
const isGroup = ({ options } = {}) => Array.isArray(options) && options.every(isOption);
const hasNoDuplicates = (array) => array.length === new Set(array).size;
const flattenedOptions = (items) => items.flatMap((item) => (isOption(item) ? item : item.options));
// eslint-disable-next-line unicorn/no-array-callback-reference
const isAllOptionsOrAllGroups = (items) => items.every(isOption) || items.every(isGroup);
const hasUniqueValues = (items) =>
hasNoDuplicates(flattenedOptions(items).map(({ value }) => value));
// eslint-disable-next-line unicorn/no-array-callback-reference
const hasUniqueGroups = (items) => hasNoDuplicates(items.filter(isGroup).map(({ text }) => text));
const itemsValidator = (items) =>
isAllOptionsOrAllGroups(items) && hasUniqueValues(items) && hasUniqueGroups(items);
export { isOption, itemsValidator, flattenedOptions };