plain-design 1.0.0-beta.107 → 1.0.0-beta.108

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. package/dist/plain-design.commonjs.min.js +2 -2
  2. package/dist/plain-design.min.css +1 -1
  3. package/dist/plain-design.min.js +2 -2
  4. package/dist/report.html +2 -2
  5. package/package.json +3 -3
  6. package/src/packages/components/AddressCascade/createAddressCascade.multiple.tsx +5 -6
  7. package/src/packages/components/AddressCascade/createAddressCascade.single.tsx +6 -7
  8. package/src/packages/components/Badge/badge.scss +4 -0
  9. package/src/packages/components/Cascade/createMultipleCascadeRender.tsx +3 -4
  10. package/src/packages/components/Cascade/createSingleCascadeRender.tsx +4 -5
  11. package/src/packages/components/DatePicker/createDateRender.multiple.tsx +5 -5
  12. package/src/packages/components/DatePicker/createDateRender.single.tsx +6 -5
  13. package/src/packages/components/DatePicker/index.tsx +2 -0
  14. package/src/packages/components/DatePicker/useRangeDateRender.tsx +6 -6
  15. package/src/packages/components/Input/useMultipleInput.tsx +4 -3
  16. package/src/packages/components/Input/useSuggestionInput.tsx +3 -4
  17. package/src/packages/components/Input/useTextareaInput.tsx +3 -3
  18. package/src/packages/components/Input/uses/useInputEnterHandler.tsx +10 -6
  19. package/src/packages/components/Object/createObjectRender.multiple.tsx +7 -7
  20. package/src/packages/components/Object/createObjectRender.single.tsx +10 -10
  21. package/src/packages/components/PageThemeUtils/index.tsx +2 -2
  22. package/src/packages/components/Select/createMultipleSelectRender.tsx +10 -6
  23. package/src/packages/components/Select/createPublicSelectRender.tsx +8 -4
  24. package/src/packages/components/Select/createSingleSelectRender.tsx +11 -7
  25. package/src/packages/components/Slider/useSlider.range.tsx +12 -9
  26. package/src/packages/components/Slider/useSlider.single.tsx +7 -8
  27. package/src/packages/components/Table/standard/PlcCheck/PlcCheck.hooks.tsx +2 -2
  28. package/src/packages/components/Table/standard/PlcCheck/PlcCheck.multiple.tsx +4 -5
  29. package/src/packages/components/Table/standard/PlcCheck/PlcCheck.single.tsx +3 -4
  30. package/src/packages/components/TimePicker/createSingleTimeRender.tsx +4 -5
  31. package/src/packages/components/TimePicker/useRangeTimeRender.tsx +6 -6
  32. package/src/packages/components/usePopup/PopupItem.tsx +3 -3
  33. package/src/packages/components/usePopup/trigger/useReferenceTrigger.tsx +51 -45
  34. package/src/packages/components/usePopupEditor/index.tsx +6 -9
  35. package/src/packages/components/useTooltip/index.tsx +5 -6
  36. package/src/packages/uses/useDragHorizontalScroll.ts +4 -5
  37. package/src/packages/uses/useFocusHandler.ts +25 -12
  38. package/src/packages/uses/useMultipleModel.tsx +3 -1
@@ -1,5 +1,6 @@
1
- import {reactive, watchEffect} from "@peryl/react-compose";
1
+ import {globalWatchEffect, onBeforeUnmount, reactive} from "@peryl/react-compose";
2
2
  import {toArray} from '@peryl/utils/toArray';
3
+ import {createEffects, iEffects} from "@peryl/utils/createEffects";
3
4
 
4
5
  /**
5
6
  * 得到元素(input,textarea,editable div,button)的focus状态,如果是多个元素,则元素在失去焦点之后的100ms之后才会派发blur事件,否则期间任何一个元素获取焦点,都会取消派发blur事件这个动作
@@ -10,19 +11,26 @@ export function useFocusHandler(
10
11
  {
11
12
  getEls,
12
13
  onFocus,
13
- onBlur
14
+ onBlur,
15
+ effects: setupEffects
14
16
  }: {
15
17
  getEls: () => (HTMLElement | null | undefined) | (HTMLElement | null | undefined)[],
16
18
  onFocus: (e: FocusEvent) => void,
17
19
  onBlur: (e: FocusEvent) => void,
20
+ effects?: iEffects,
18
21
  }
19
22
  ) {
20
23
 
24
+ if (!setupEffects) {
25
+ setupEffects = createEffects().effects;
26
+ onBeforeUnmount(() => setupEffects!.clear());
27
+ }
28
+
21
29
  const isFocus = reactive({ value: false });
30
+
22
31
  let blurTimer: any = null;
23
32
 
24
33
  const handler = {
25
- elements: [] as (HTMLElement | null | undefined)[],
26
34
  onFocus: (e: FocusEvent) => {
27
35
  if (!!blurTimer) {
28
36
  clearTimeout(blurTimer);
@@ -41,20 +49,25 @@ export function useFocusHandler(
41
49
  },
42
50
  };
43
51
 
44
- watchEffect(() => {
45
- handler.elements.forEach(el => {
46
- if (!el) {return;}
47
- el.removeEventListener('focus', handler.onFocus);
48
- el.removeEventListener('blur', handler.onBlur);
49
- });
50
- handler.elements = toArray(getEls());
51
- handler.elements.forEach(el => {
52
+ const { effects } = createEffects();
53
+
54
+ setupEffects.push(globalWatchEffect(() => {
55
+ effects.clear();
56
+
57
+ const elements = toArray(getEls());
58
+ elements.forEach(el => {
52
59
  if (!el) {return;}
53
60
  el.addEventListener('focus', handler.onFocus);
54
61
  el.addEventListener('blur', handler.onBlur);
55
62
  });
63
+ effects.push(() => elements.forEach(el => {
64
+ if (!el) {return;}
65
+ el.removeEventListener('focus', handler.onFocus);
66
+ el.removeEventListener('blur', handler.onBlur);
67
+ }));
68
+ }));
56
69
 
57
- });
70
+ setupEffects.push(() => effects.clear());
58
71
 
59
72
  return { isFocus };
60
73
  }
@@ -1,6 +1,7 @@
1
1
  import {UseModelConfig} from "@peryl/react-compose/src/use/useModel";
2
2
  import {useModel} from "@peryl/react-compose";
3
3
  import {createEnum} from "@peryl/utils/createEnum";
4
+ import {iEffects} from "@peryl/utils/createEffects";
4
5
 
5
6
  /**
6
7
  * 多选的时候值的类型
@@ -23,6 +24,7 @@ export function useMultipleModel<T>(
23
24
  emitter: (val: T) => void,
24
25
  props: { valueType?: typeof eMultipleValueType.TYPE, multiple?: boolean },
25
26
  config?: UseModelConfig<T>,
27
+ effects?: iEffects
26
28
  ) {
27
29
 
28
30
  /*最后一次emit的值*/
@@ -59,5 +61,5 @@ export function useMultipleModel<T>(
59
61
  }
60
62
  emitter(val);
61
63
  }
62
- }, config);
64
+ }, config, effects);
63
65
  }