zp-bee
Version:
zp-bee,是一款基于 Dumi,由 React + TypeScript 开发的组件库 🎉。
85 lines (74 loc) • 2.33 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
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, memo } from 'react';
import { BeeInput } from 'zp-bee';
import { atom, setCoiledState, selector, useCoiledValue } from '../../_utils/recoil';
var inputGen = function inputGen(params) {
var initialState = {
value: '',
defaultValue: ''
};
var createSlice = atom({
key: 'inputGen',
default: initialState
});
var dispatch = setCoiledState(createSlice);
var valueSelector = selector({
key: 'inputSelector',
get: function get(_ref) {
var _get = _ref.get;
var _get2 = _get(createSlice),
value = _get2.value;
return value;
}
});
var handleChange = function handleChange(e) {
var value = e.target.value;
dispatch({
value: value
});
};
var _params$inputProps = params.inputProps,
label = _params$inputProps.label,
paramName = _params$inputProps.paramName;
params.inject.set(Symbol('input'), {
getValue: function getValue() {
return _defineProperty({}, paramName, createSlice.snapshot().value);
},
resetValue: function resetValue() {
return dispatch({
value: createSlice.snapshot().defaultValue
});
}
});
return /*#__PURE__*/memo(function (props) {
var propsValue = props.value,
defaultValue = props.defaultValue,
others = __rest(props, ["value", "defaultValue"]);
var value = useCoiledValue(valueSelector);
useEffect(function () {
if (propsValue || defaultValue) {
dispatch({
value: propsValue || defaultValue,
defaultValue: defaultValue || ''
});
}
}, []);
return /*#__PURE__*/React.createElement(BeeInput, Object.assign({
label: label,
value: value
}, others, {
onChange: handleChange
}));
});
};
export default inputGen;