UNPKG

@spaced-out/ui-design-system

Version:
84 lines (80 loc) 2.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useArbitraryOptionAddition = useArbitraryOptionAddition; var _useFilteredOptions = require("../useFilteredOptions"); function useArbitraryOptionAddition(_ref) { let { searchTerm, options = [], excludedKeys = [], allowArbitraryValues = true, allowMultiArbitraryValues = false, validateArbitraryValue = value => value.trim() !== '', makeArbitraryValue = searchTerm => ({ key: searchTerm, label: searchTerm, arbitrary: true }), makeMultiArbitraryValue = searchTerm => { const regex = /^(?=.*[,\n]).+$/; if (regex.test(searchTerm)) { return { key: searchTerm, label: searchTerm, multiArbitrary: true }; } return undefined; }, groupTitleOptions = [], arbitraryGroup = { groupTitle: '', showLineDivider: false, options: [] }, searchOptionsBy = (option, searchTerm) => { const { label, key } = option; return key.toLowerCase().includes(searchTerm) || (label ? label.toLowerCase().includes(searchTerm) : false); } } = _ref; const trimmedSearchTerm = (searchTerm || '').trim().toLowerCase(); const { filteredOptions, filteredGroupTitleOptions } = (0, _useFilteredOptions.useFilteredOptions)({ searchTerm: trimmedSearchTerm, options, groupTitleOptions, searchOptionsBy }); // Find if an arbitrary option should be added const arbitraryOption = allowArbitraryValues && trimmedSearchTerm && !filteredOptions.some(option => option.key === trimmedSearchTerm) && !filteredGroupTitleOptions.some(group => Array.isArray(group.options) && group.options.some(option => option.key === trimmedSearchTerm)) && !excludedKeys.includes(trimmedSearchTerm) && validateArbitraryValue(trimmedSearchTerm) && makeArbitraryValue(trimmedSearchTerm); // Find if a multi-arbitrary option should be added const multiArbitraryOption = allowMultiArbitraryValues && trimmedSearchTerm && makeMultiArbitraryValue(trimmedSearchTerm); // Compose the results let optionsWithArbitrary = filteredOptions; let groupTitleOptionsWithArbitrary = filteredGroupTitleOptions; if (arbitraryOption) { optionsWithArbitrary = [arbitraryOption, ...optionsWithArbitrary]; groupTitleOptionsWithArbitrary = [{ ...arbitraryGroup, options: [arbitraryOption] }, ...groupTitleOptionsWithArbitrary]; } if (multiArbitraryOption) { optionsWithArbitrary = [multiArbitraryOption, ...optionsWithArbitrary]; groupTitleOptionsWithArbitrary = [{ ...arbitraryGroup, options: [multiArbitraryOption] }, ...groupTitleOptionsWithArbitrary]; } return { optionsWithArbitrary, groupTitleOptionsWithArbitrary }; }