UNPKG

@gravity-ui/uikit

Version:

Gravity UI base styling and components

50 lines (49 loc) 1.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getSelectFilteredOptions = getSelectFilteredOptions; exports.useSelectOptions = useSelectOptions; const tslib_1 = require("tslib"); const React = tslib_1.__importStar(require("react")); const get_1 = tslib_1.__importDefault(require("lodash/get.js")); const constants_1 = require("../../constants.js"); const utils_1 = require("../../utils.js"); function isFlattenOptions(options) { return (0, get_1.default)(options, [constants_1.FLATTEN_KEY]); } /** * Helps to manage options data before passing it into `Select` component. * * @param {SelectOptions} options * @returns preprared options for `Select` component. * * @example * * import {Select, getSelectFilteredOptions, useSelectOptions} from '@gravity-ui/uikit'; * * function App() { * const options = useSelectOptions({options: [{value: '1'}, {value: '2'}]}); * const filteredOptions = getSelectFilteredOptions(options); * // Do some staff with prepared options * return <Select options={options} /> * } */ function getSelectFilteredOptions(options) { if (!isFlattenOptions(options)) { throw Error('You should use options generated by useSelectOptions hook'); } return (0, get_1.default)(options, [constants_1.FLATTEN_KEY, 'filteredOptions']); } function useSelectOptions(props) { const { filter = '', filterable, filterOption } = props; const options = React.useMemo(() => { return isFlattenOptions(props.options) ? props.options : (0, utils_1.getFlattenOptions)(props.options); }, [props.options]); const filteredOptions = React.useMemo(() => { return filterable ? (0, utils_1.getFilteredFlattenOptions)({ options, filter, filterOption }) : options; }, [filter, filterable, filterOption, options]); options[constants_1.FLATTEN_KEY]['filteredOptions'] = filteredOptions; return options; } //# sourceMappingURL=index.js.map