UNPKG

react95

Version:

Refreshed Windows95 UI components for modern web apps - React95

38 lines (35 loc) 1.77 kB
import React__default, { useMemo } from 'react'; import useControlledOrUncontrolled from '../common/hooks/useControlledOrUncontrolled.mjs'; import { StyledDropdownButton, StyledDropdownIcon, StyledFlatSelectWrapper, StyledSelectWrapper } from './Select.styles.mjs'; const emptyArray = []; const useSelectCommon = ({ className, defaultValue, disabled, native, onChange, options: optionsProp = emptyArray, readOnly, style, value: valueProp, variant, width }) => { var _a; const options = useMemo(() => optionsProp.filter(Boolean), [optionsProp]); const [value, setValue] = useControlledOrUncontrolled({ defaultValue: defaultValue !== null && defaultValue !== void 0 ? defaultValue : (_a = options === null || options === void 0 ? void 0 : options[0]) === null || _a === void 0 ? void 0 : _a.value, onChange, readOnly, value: valueProp }); const isEnabled = !(disabled || readOnly); const wrapperProps = useMemo(() => ({ className, style: { ...style, width } }), [className, style, width]); const DropdownButton = useMemo(() => React__default.createElement( StyledDropdownButton, { as: "div", "data-testid": "select-button", "$disabled": disabled, native, tabIndex: -1, variant: variant === "flat" ? "flat" : "raised" }, React__default.createElement(StyledDropdownIcon, { "data-testid": "select-icon", "$disabled": disabled }) ), [disabled, native, variant]); const Wrapper = useMemo(() => variant === "flat" ? StyledFlatSelectWrapper : StyledSelectWrapper, [variant]); return useMemo(() => ({ isEnabled, options, value, setValue, wrapperProps, DropdownButton, Wrapper }), [DropdownButton, Wrapper, isEnabled, options, setValue, value, wrapperProps]); }; export { useSelectCommon };