UNPKG

@gravity-ui/uikit

Version:

Gravity UI base styling and components

45 lines (44 loc) 1.67 kB
import * as React from 'react'; import get from "lodash/get.js"; import { FLATTEN_KEY } from "../../constants.js"; import { getFilteredFlattenOptions, getFlattenOptions } from "../../utils.js"; function isFlattenOptions(options) { return get(options, [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} /> * } */ export function getSelectFilteredOptions(options) { if (!isFlattenOptions(options)) { throw Error('You should use options generated by useSelectOptions hook'); } return get(options, [FLATTEN_KEY, 'filteredOptions']); } export function useSelectOptions(props) { const { filter = '', filterable, filterOption } = props; const options = React.useMemo(() => { return isFlattenOptions(props.options) ? props.options : getFlattenOptions(props.options); }, [props.options]); const filteredOptions = React.useMemo(() => { return filterable ? getFilteredFlattenOptions({ options, filter, filterOption }) : options; }, [filter, filterable, filterOption, options]); options[FLATTEN_KEY]['filteredOptions'] = filteredOptions; return options; } //# sourceMappingURL=index.js.map