index.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { useEffect } from 'functional-mini/compat';
  2. import { useEvent, useState } from 'functional-mini/component';
  3. import { mountComponent } from '../_util/component';
  4. import { useComponentEvent } from '../_util/hooks/useComponentEvent';
  5. import { NumberKeyboardFunctionalProps } from './props';
  6. import { useEvent as useStableCallback } from '../_util/hooks/useEvent';
  7. var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
  8. var NumberKeyboard = function (props) {
  9. var numArr = [
  10. [1, 2, 3],
  11. [4, 5, 6],
  12. [7, 8, 9],
  13. ];
  14. var _a = useState([]), randomArr = _a[0], setRandomArr = _a[1];
  15. var _b = useComponentEvent(props), triggerEventOnly = _b.triggerEventOnly, triggerEvent = _b.triggerEvent;
  16. var setRandom = useStableCallback(function () {
  17. if (props.random) {
  18. var newArr = arr.sort(function () {
  19. return Math.random() - 0.5;
  20. });
  21. setRandomArr([
  22. newArr.slice(0, 3),
  23. newArr.slice(3, 6),
  24. newArr.slice(6, 9),
  25. ]);
  26. }
  27. });
  28. var vibrate = useStableCallback(function () {
  29. if (props.vibrate && typeof my !== 'undefined') {
  30. my.canIUse('vibrateShort') && my.vibrateShort();
  31. }
  32. });
  33. useEvent('handleHide', function () {
  34. triggerEventOnly('close');
  35. });
  36. useEvent('tapButton', function (e) {
  37. var value = props.value, confirmDisabled = props.confirmDisabled;
  38. vibrate();
  39. var _key = e.currentTarget.dataset.key;
  40. var _val = "".concat(value);
  41. // 回退
  42. if (_key === 'del') {
  43. triggerEvent('change', "".concat(_val.substr(0, _val.length - 1)));
  44. return;
  45. }
  46. if (_key !== 'del' && _key !== 'enter') {
  47. triggerEvent('change', "".concat(_val).concat(_key));
  48. }
  49. if (_key === 'enter' && !confirmDisabled) {
  50. triggerEventOnly('close');
  51. triggerEventOnly('confirm');
  52. triggerEventOnly('close'); // 保持和之前一样的逻辑
  53. }
  54. });
  55. useEvent('catchAppearModal', function () {
  56. setRandom();
  57. });
  58. useEffect(function () {
  59. setRandom();
  60. }, []);
  61. return {
  62. randomArr: randomArr,
  63. numArr: numArr,
  64. };
  65. };
  66. mountComponent(NumberKeyboard, NumberKeyboardFunctionalProps);