@gravity-ui/uikit
Version:
Gravity UI base styling and components
50 lines (49 loc) • 1.98 kB
JavaScript
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
;