use-form-item.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. var __assign = (this && this.__assign) || function () {
  2. __assign = Object.assign || function(t) {
  3. for (var s, i = 1, n = arguments.length; i < n; i++) {
  4. s = arguments[i];
  5. for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
  6. t[p] = s[p];
  7. }
  8. return t;
  9. };
  10. return __assign.apply(this, arguments);
  11. };
  12. import { useState, useEvent, useRef, useEffect, } from 'functional-mini/component';
  13. import { triggerRefEvent } from '../_util/hooks/useReportRef';
  14. export var useFormItem = function (props) {
  15. var _a = useState({
  16. value: undefined,
  17. status: 'default',
  18. required: false,
  19. errors: [],
  20. }), formData = _a[0], setFormDate = _a[1];
  21. var formRef = useRef(formData);
  22. var emitRef = useRef(null);
  23. useEvent('setFormData', function (values) {
  24. setFormDate(function (old) {
  25. var newValue = __assign(__assign({}, old), values);
  26. formRef.current = newValue;
  27. return newValue;
  28. });
  29. });
  30. useEvent('getFormData', function () {
  31. return formRef.current;
  32. });
  33. useEvent('on', function (callback) {
  34. emitRef.current = callback;
  35. });
  36. var originalProps = useRef();
  37. useEvent('getProps', function () {
  38. return props;
  39. });
  40. useEffect(function () {
  41. return function () {
  42. emit('didUnmount');
  43. };
  44. }, []);
  45. function emit(event, value, extraInfo) {
  46. if (emitRef.current) {
  47. emitRef.current(event, value, extraInfo);
  48. }
  49. }
  50. // 这个必须要放在后面。
  51. triggerRefEvent();
  52. useEffect(function () {
  53. emit('deriveDataFromProps', props, originalProps.current);
  54. originalProps.current = props;
  55. }, [props]);
  56. return {
  57. formData: formData,
  58. emit: emit,
  59. };
  60. };