@nayan-ui/react-native
Version:
React Native Component Library for smooth and faster mobile application development.
80 lines (79 loc) • 2.58 kB
JavaScript
"use strict";
import React, { useMemo } from 'react';
import { ScrollView, View } from 'react-native';
import { useSafeAreaInsets } from 'react-native-safe-area-context';
import { NText } from "./NText.js";
import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue } from "./ui/select.js";
import { cn } from "../lib/utils.js";
import { jsx as _jsx, jsxs as _jsxs } from "react-native-css-interop/jsx-runtime";
export const NSelect = /*#__PURE__*/React.memo(({
label = '',
selectLabel = '',
placeholder = '',
disabled = false,
value,
items,
onChange,
className = '',
labelClassName = '',
inputClassName = ''
}) => {
const insets = useSafeAreaInsets();
const contentInsets = useMemo(() => ({
top: insets.top,
bottom: insets.bottom,
left: 12,
right: 12
}), [insets.top, insets.bottom]);
return _jsxs(View, {
className: cn('flex-1 mb-3', className),
children: [label && _jsx(NText, {
className: cn('mb-1', labelClassName),
children: label
}), _jsxs(Select, {
defaultValue: value,
onValueChange: onChange,
disabled: disabled,
children: [_jsx(SelectTrigger, {
className: cn('w-full bg-card border-border', disabled && 'opacity-70'),
disabled: disabled,
children: _jsx(SelectValue, {
className: "text-text text-sm native:text-lg",
placeholder: placeholder
})
}), _jsx(SelectContent, {
insets: contentInsets,
className: cn('w-full bg-card border-border shadow', inputClassName),
children: _jsx(View, {
style: {
maxHeight: 550
},
children: _jsx(ScrollView, {
showsVerticalScrollIndicator: true,
nestedScrollEnabled: true,
persistentScrollbar: false,
indicatorStyle: "black",
scrollIndicatorInsets: {
right: 1
},
keyboardShouldPersistTaps: "handled",
scrollEventThrottle: 1,
children: _jsxs(SelectGroup, {
children: [selectLabel && _jsx(SelectLabel, {
className: "text-text",
children: selectLabel
}), items.map(item => _jsx(SelectItem, {
className: "text-text",
label: item.label,
value: item.value,
children: item.label
}, item.value))]
})
})
})
})]
})]
});
});
NSelect.displayName = 'NSelect';
//# sourceMappingURL=NSelect.js.map