UNPKG

@bytedance/mona-client-web

Version:

web for mona

71 lines 3.79 kB
var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; import React, { useEffect, useRef, useState } from 'react'; import { isElement } from 'react-is'; import { useHandlers } from '../hooks'; import { genEvent } from '../utils'; import styles from './index.module.less'; var PickerView = function (_a) { var _b; var children = _a.children, value = _a.value, indicatorStyle = _a.indicatorStyle, maskStyle = _a.maskStyle, onChange = _a.onChange, restProps = __rest(_a, ["children", "value", "indicatorStyle", "maskStyle", "onChange"]); var _c = useState(0), itemHeight = _c[0], setItemHeight = _c[1]; var barRef = useRef(null); var wrapperRef = useRef(null); var _d = useState(0), wrapperHeight = _d[0], setWrapperHeight = _d[1]; var _e = useHandlers(restProps), handleClassName = _e.handleClassName, handleProps = __rest(_e, ["handleClassName"]); var innerValueRef = useRef(value !== null && value !== void 0 ? value : []); useEffect(function () { if (wrapperRef.current) { setWrapperHeight(wrapperRef.current.offsetHeight); } if (barRef.current) { setItemHeight(barRef.current.clientHeight); } }, []); function _onValueChange(index, nValue) { var _a, _b; var newValue = (_b = (_a = innerValueRef.current) === null || _a === void 0 ? void 0 : _a.concat()) !== null && _b !== void 0 ? _b : []; newValue[index] = nValue; innerValueRef.current = newValue; onChange === null || onChange === void 0 ? void 0 : onChange(genEvent({ type: 'change', detail: { value: newValue } })); } return (React.createElement("div", __assign({ className: styles.pickerView, style: { height: "".concat(itemHeight * 5, "px") }, ref: wrapperRef }, handleProps), React.createElement("div", { className: styles.pickerViewMulti, style: { lineHeight: "".concat(itemHeight, "px") } }, (_b = React.Children.map(children, function (item, idx) { //@ts-ignore if (isElement(item) && item.type.name === 'PickerViewColumn') { return React.cloneElement(item, { itemHeight: itemHeight, wrapperHeight: wrapperHeight, selectedValue: value[idx], onValueChange: _onValueChange.bind(null, idx), }); } return; })) === null || _b === void 0 ? void 0 : _b.filter(function (item) { return item !== null && item !== undefined; })), React.createElement("div", { className: styles.pickerViewSelection, style: maskStyle }, React.createElement("div", { className: styles.pickerViewSelectionMaskTop }), React.createElement("div", { ref: barRef, className: styles.pickerViewSelectionBar, style: indicatorStyle }), React.createElement("div", { className: styles.pickerViewSelectionMaskTop })))); }; export default PickerView; //# sourceMappingURL=index.js.map