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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) 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/Application/utils/application.utils.ts +2 -3
  9. package/src/packages/components/Badge/badge.scss +4 -0
  10. package/src/packages/components/Cascade/createMultipleCascadeRender.tsx +3 -4
  11. package/src/packages/components/Cascade/createSingleCascadeRender.tsx +4 -5
  12. package/src/packages/components/DatePicker/createDateRender.multiple.tsx +5 -5
  13. package/src/packages/components/DatePicker/createDateRender.single.tsx +6 -5
  14. package/src/packages/components/DatePicker/index.tsx +2 -0
  15. package/src/packages/components/DatePicker/useRangeDateRender.tsx +6 -6
  16. package/src/packages/components/Form/validate/useFormItemValidation.tsx +25 -27
  17. package/src/packages/components/Input/useMultipleInput.tsx +4 -3
  18. package/src/packages/components/Input/useSuggestionInput.tsx +3 -4
  19. package/src/packages/components/Input/useTextareaInput.tsx +3 -3
  20. package/src/packages/components/Input/uses/useInputEnterHandler.tsx +10 -6
  21. package/src/packages/components/Object/createObjectRender.multiple.tsx +7 -7
  22. package/src/packages/components/Object/createObjectRender.single.tsx +10 -10
  23. package/src/packages/components/PageThemeUtils/index.tsx +2 -2
  24. package/src/packages/components/Select/createMultipleSelectRender.tsx +10 -6
  25. package/src/packages/components/Select/createPublicSelectRender.tsx +8 -4
  26. package/src/packages/components/Select/createSingleSelectRender.tsx +11 -7
  27. package/src/packages/components/Slider/useSlider.range.tsx +12 -9
  28. package/src/packages/components/Slider/useSlider.single.tsx +7 -8
  29. package/src/packages/components/Table/standard/PlcCheck/PlcCheck.hooks.tsx +2 -2
  30. package/src/packages/components/Table/standard/PlcCheck/PlcCheck.multiple.tsx +4 -5
  31. package/src/packages/components/Table/standard/PlcCheck/PlcCheck.single.tsx +3 -4
  32. package/src/packages/components/TimePicker/createSingleTimeRender.tsx +4 -5
  33. package/src/packages/components/TimePicker/useRangeTimeRender.tsx +6 -6
  34. package/src/packages/components/usePopup/PopupItem.tsx +3 -3
  35. package/src/packages/components/usePopup/trigger/useReferenceTrigger.tsx +51 -45
  36. package/src/packages/components/usePopupEditor/index.tsx +6 -9
  37. package/src/packages/components/useTooltip/index.tsx +5 -6
  38. package/src/packages/uses/useDragHorizontalScroll.ts +4 -5
  39. package/src/packages/uses/useFocusHandler.ts +25 -12
  40. package/src/packages/uses/useMultipleModel.tsx +3 -1
@@ -1,6 +1,6 @@
1
1
  import {ePopupTrigger, iPopupManager, iPopupUseOption} from "../utils/popup.utils";
2
2
  import {createEffects} from "@peryl/utils/createEffects";
3
- import {onBeforeUnmount, SimpleFunction, watchEffect} from "@peryl/react-compose";
3
+ import {globalWatchEffect, onBeforeUnmount, SimpleFunction} from "@peryl/react-compose";
4
4
  import {isStopPopup} from "../utils/stopPopup";
5
5
 
6
6
  /**
@@ -28,57 +28,63 @@ export function createReferenceTrigger(
28
28
  }
29
29
  ) {
30
30
  const { effects } = createEffects();
31
+ const { effects: setupEffects } = createEffects();
31
32
 
32
33
  let prev: ReturnType<typeof get> | null = null;
33
34
 
34
- watchEffect(() => {
35
- const { reference, trigger } = get();
36
- if (!!prev && prev.trigger === trigger && prev.reference === reference) {
37
- return;
38
- }
39
- effects.clear();
40
- prev = { reference, trigger };
41
-
42
- if (!reference) {return;}
43
-
44
- const onClick = (e: MouseEvent) => {
45
- if (isStopPopup(e)) {
35
+ setupEffects.push(
36
+ globalWatchEffect(() => {
37
+ const { reference, trigger } = get();
38
+ if (!!prev && prev.trigger === trigger && prev.reference === reference) {
46
39
  return;
47
40
  }
48
- manager.hooks.onTriggerReferenceClick.exec({ e, option: getOption() });
49
- };
50
- const onContextmenu = (e: MouseEvent) => {
51
- e.preventDefault();
52
- manager.hooks.onTriggerReferenceContextmenu.exec({ e, option: getOption() });
53
- };
54
- const onMouseenter = (e: MouseEvent) => {manager.hooks.onTriggerReferenceEnter.exec({ e, option: getOption() });};
55
- const onMouseleave = (e: MouseEvent) => {manager.hooks.onTriggerReferenceLeave.exec({ e, option: getOption() });};
56
- const onMousedown = (e: MouseEvent) => {manager.hooks.onTriggerReferenceMousedown.exec({ e, option: getOption() });};
57
- const onMousemove = (e: MouseEvent) => {manager.hooks.onTriggerReferenceMousemove.exec({ e, option: getOption() });};
58
- const onFocus = (e: FocusEvent) => {manager.hooks.onTriggerReferenceFocus.exec({ e, option: getOption() });};
59
- const onBlur = (e: FocusEvent) => {manager.hooks.onTriggerReferenceBlur.exec({ e, option: getOption() });};
41
+ effects.clear();
42
+ prev = { reference, trigger };
60
43
 
44
+ if (!reference) {return;}
61
45
 
62
- reference.addEventListener('click', onClick);
63
- reference.addEventListener('contextmenu', onContextmenu);
64
- reference.addEventListener('mouseenter', onMouseenter);
65
- reference.addEventListener('mouseleave', onMouseleave);
66
- reference.addEventListener('mousedown', onMousedown);
67
- reference.addEventListener('mousemove', onMousemove);
68
- reference.addEventListener('focus', onFocus);
69
- reference.addEventListener('blur', onBlur);
46
+ const onClick = (e: MouseEvent) => {
47
+ if (isStopPopup(e)) {
48
+ return;
49
+ }
50
+ manager.hooks.onTriggerReferenceClick.exec({ e, option: getOption() });
51
+ };
52
+ const onContextmenu = (e: MouseEvent) => {
53
+ e.preventDefault();
54
+ manager.hooks.onTriggerReferenceContextmenu.exec({ e, option: getOption() });
55
+ };
56
+ const onMouseenter = (e: MouseEvent) => {manager.hooks.onTriggerReferenceEnter.exec({ e, option: getOption() });};
57
+ const onMouseleave = (e: MouseEvent) => {manager.hooks.onTriggerReferenceLeave.exec({ e, option: getOption() });};
58
+ const onMousedown = (e: MouseEvent) => {manager.hooks.onTriggerReferenceMousedown.exec({ e, option: getOption() });};
59
+ const onMousemove = (e: MouseEvent) => {manager.hooks.onTriggerReferenceMousemove.exec({ e, option: getOption() });};
60
+ const onFocus = (e: FocusEvent) => {manager.hooks.onTriggerReferenceFocus.exec({ e, option: getOption() });};
61
+ const onBlur = (e: FocusEvent) => {manager.hooks.onTriggerReferenceBlur.exec({ e, option: getOption() });};
70
62
 
71
- effects.push(() => {
72
- reference.removeEventListener('click', onClick);
73
- reference.removeEventListener('contextmenu', onContextmenu);
74
- reference.removeEventListener('mouseenter', onMouseenter);
75
- reference.removeEventListener('mouseleave', onMouseleave);
76
- reference.removeEventListener('mousedown', onMousedown);
77
- reference.removeEventListener('mousemove', onMousemove);
78
- reference.removeEventListener('focus', onFocus);
79
- reference.removeEventListener('blur', onBlur);
80
- });
81
- });
82
63
 
83
- onBeforeUnmount(() => {effects.clear();});
64
+ reference.addEventListener('click', onClick);
65
+ reference.addEventListener('contextmenu', onContextmenu);
66
+ reference.addEventListener('mouseenter', onMouseenter);
67
+ reference.addEventListener('mouseleave', onMouseleave);
68
+ reference.addEventListener('mousedown', onMousedown);
69
+ reference.addEventListener('mousemove', onMousemove);
70
+ reference.addEventListener('focus', onFocus);
71
+ reference.addEventListener('blur', onBlur);
72
+
73
+ effects.push(() => {
74
+ reference.removeEventListener('click', onClick);
75
+ reference.removeEventListener('contextmenu', onContextmenu);
76
+ reference.removeEventListener('mouseenter', onMouseenter);
77
+ reference.removeEventListener('mouseleave', onMouseleave);
78
+ reference.removeEventListener('mousedown', onMousedown);
79
+ reference.removeEventListener('mousemove', onMousemove);
80
+ reference.removeEventListener('focus', onFocus);
81
+ reference.removeEventListener('blur', onBlur);
82
+ });
83
+ })
84
+ );
85
+
86
+ onBeforeUnmount(() => {
87
+ effects.clear();
88
+ setupEffects.clear();
89
+ });
84
90
  }
@@ -1,6 +1,5 @@
1
1
  import {iPopupEditorOption} from "./popup-editor.utils";
2
- import {computed, onBeforeUnmount, SimpleFunction, watch} from "@peryl/react-compose";
3
- import {createEffects} from "@peryl/utils/createEffects";
2
+ import {createEffectsOfReaction, onBeforeUnmount, SimpleFunction} from "@peryl/react-compose";
4
3
  import {createPopup} from "../usePopup/usePopup";
5
4
  import {iPopupUseOption} from "../usePopup/utils/popup.utils";
6
5
  import {createReferenceTrigger} from "../usePopup/trigger/useReferenceTrigger";
@@ -14,11 +13,11 @@ export function createPopupEditor(
14
13
  }
15
14
  ) {
16
15
 
17
- const { effects } = createEffects();
16
+ const { effects, effectComputed, effectWatch } = createEffectsOfReaction();
18
17
 
19
18
  const popup = createPopup(effects.push);
20
19
 
21
- const reference = computed(() => {
20
+ const reference = effectComputed(() => {
22
21
  let reference = option.reference() as any;
23
22
  if (!reference) {return null;}
24
23
  if ('$el' in reference) {reference = reference.$el;}
@@ -90,11 +89,9 @@ export function createPopupEditor(
90
89
  isShow: () => popup.$popup.manager.methods.isShow(getOption())
91
90
  };
92
91
 
93
- effects.push(
94
- watch(() => option.popperAttrs?.(), () => {
95
- popup.$popup.update(getOption());
96
- })
97
- );
92
+ effectWatch(() => option.popperAttrs?.(), () => {
93
+ popup.$popup.update(getOption());
94
+ });
98
95
 
99
96
  effects.push(() => {
100
97
  popup.$popup.manager.methods.remove(popup.popupId);
@@ -1,5 +1,4 @@
1
- import {createEffects} from '@peryl/utils/createEffects';
2
- import {getComponentCls, nextTick, onBeforeUnmount, reactive, watch} from "@peryl/react-compose";
1
+ import {createEffectsOfReaction, getComponentCls, nextTick, onBeforeUnmount, reactive} from "@peryl/react-compose";
3
2
  import {iPopupService, usePopup} from "../usePopup/usePopup";
4
3
  import {iPopupUseOption} from "../usePopup/utils/popup.utils";
5
4
  import {delay} from "@peryl/utils/delay";
@@ -10,7 +9,7 @@ import {delay} from "@peryl/utils/delay";
10
9
  * @date 2023.1.21 14:06
11
10
  */
12
11
  export function createTooltip(option: iTooltipServiceOption, popup: iPopupService) {
13
- const { effects } = createEffects();
12
+ const { effects, effectWatch } = createEffectsOfReaction();
14
13
 
15
14
  const state = reactive({
16
15
  isEnter: false,
@@ -67,7 +66,7 @@ export function createTooltip(option: iTooltipServiceOption, popup: iPopupServic
67
66
  }
68
67
  };
69
68
  effects.push(
70
- watch(
69
+ effectWatch(
71
70
  () => option.tooltip(),
72
71
  ({ message, reference }) => {
73
72
  if (!reference) {
@@ -108,7 +107,7 @@ export function createTooltip(option: iTooltipServiceOption, popup: iPopupServic
108
107
 
109
108
  const tooltipHandler = (() => {
110
109
  effects.push(
111
- watch(
110
+ effectWatch(
112
111
  () => option.tooltip().message,
113
112
  val => {
114
113
  popup.$popup.update(getOption());
@@ -122,7 +121,7 @@ export function createTooltip(option: iTooltipServiceOption, popup: iPopupServic
122
121
  )
123
122
  );
124
123
  effects.push(
125
- watch(
124
+ effectWatch(
126
125
  (): boolean => {
127
126
  const { reference, message } = option.tooltip();
128
127
  if (reference == null || message == null || (typeof message === "string" && !message.trim().length)) {
@@ -1,6 +1,5 @@
1
- import {createEffects} from "@peryl/utils/createEffects";
2
1
  import {ClientZoom} from "../utils/ClientZoom";
3
- import {watch} from "@peryl/react-compose";
2
+ import {createEffectsOfReaction} from "@peryl/react-compose";
4
3
 
5
4
  export function useDragHorizontalScroll(getEl: () => HTMLElement | null | undefined, config?: { onDragStart: () => void, onDragEnd: () => void }) {
6
5
 
@@ -17,7 +16,7 @@ export function useDragHorizontalScroll(getEl: () => HTMLElement | null | undefi
17
16
  }
18
17
  };
19
18
 
20
- const { effects } = createEffects();
19
+ const { effects, effectWatch } = createEffectsOfReaction();
21
20
 
22
21
  const handler = {
23
22
  mousedown: (e: MouseEvent) => {
@@ -60,7 +59,7 @@ export function useDragHorizontalScroll(getEl: () => HTMLElement | null | undefi
60
59
  },
61
60
  };
62
61
 
63
- effects.push(watch(() => getEl(), el => {
62
+ effectWatch(() => getEl(), el => {
64
63
  if (!!staticState.el) {
65
64
  staticState.el.removeEventListener('mousedown', handler.mousedown);
66
65
  staticState.el.removeEventListener('wheel', handler.onWheel);
@@ -69,7 +68,7 @@ export function useDragHorizontalScroll(getEl: () => HTMLElement | null | undefi
69
68
  if (!staticState.el) {return;}
70
69
  staticState.el.addEventListener('mousedown', handler.mousedown);
71
70
  staticState.el.addEventListener('wheel', handler.onWheel);
72
- }));
71
+ });
73
72
 
74
73
  effects.push(() => {
75
74
  if (!!staticState.el) {
@@ -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
  }