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

Sign up to get free protection for your applications and to get access to all the features.
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
  }