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.
- package/dist/plain-design.commonjs.min.js +2 -2
- package/dist/plain-design.min.css +1 -1
- package/dist/plain-design.min.js +2 -2
- package/dist/report.html +2 -2
- package/package.json +3 -3
- package/src/packages/components/AddressCascade/createAddressCascade.multiple.tsx +5 -6
- package/src/packages/components/AddressCascade/createAddressCascade.single.tsx +6 -7
- package/src/packages/components/Application/utils/application.utils.ts +2 -3
- package/src/packages/components/Badge/badge.scss +4 -0
- package/src/packages/components/Cascade/createMultipleCascadeRender.tsx +3 -4
- package/src/packages/components/Cascade/createSingleCascadeRender.tsx +4 -5
- package/src/packages/components/DatePicker/createDateRender.multiple.tsx +5 -5
- package/src/packages/components/DatePicker/createDateRender.single.tsx +6 -5
- package/src/packages/components/DatePicker/index.tsx +2 -0
- package/src/packages/components/DatePicker/useRangeDateRender.tsx +6 -6
- package/src/packages/components/Form/validate/useFormItemValidation.tsx +25 -27
- package/src/packages/components/Input/useMultipleInput.tsx +4 -3
- package/src/packages/components/Input/useSuggestionInput.tsx +3 -4
- package/src/packages/components/Input/useTextareaInput.tsx +3 -3
- package/src/packages/components/Input/uses/useInputEnterHandler.tsx +10 -6
- package/src/packages/components/Object/createObjectRender.multiple.tsx +7 -7
- package/src/packages/components/Object/createObjectRender.single.tsx +10 -10
- package/src/packages/components/PageThemeUtils/index.tsx +2 -2
- package/src/packages/components/Select/createMultipleSelectRender.tsx +10 -6
- package/src/packages/components/Select/createPublicSelectRender.tsx +8 -4
- package/src/packages/components/Select/createSingleSelectRender.tsx +11 -7
- package/src/packages/components/Slider/useSlider.range.tsx +12 -9
- package/src/packages/components/Slider/useSlider.single.tsx +7 -8
- package/src/packages/components/Table/standard/PlcCheck/PlcCheck.hooks.tsx +2 -2
- package/src/packages/components/Table/standard/PlcCheck/PlcCheck.multiple.tsx +4 -5
- package/src/packages/components/Table/standard/PlcCheck/PlcCheck.single.tsx +3 -4
- package/src/packages/components/TimePicker/createSingleTimeRender.tsx +4 -5
- package/src/packages/components/TimePicker/useRangeTimeRender.tsx +6 -6
- package/src/packages/components/usePopup/PopupItem.tsx +3 -3
- package/src/packages/components/usePopup/trigger/useReferenceTrigger.tsx +51 -45
- package/src/packages/components/usePopupEditor/index.tsx +6 -9
- package/src/packages/components/useTooltip/index.tsx +5 -6
- package/src/packages/uses/useDragHorizontalScroll.ts +4 -5
- package/src/packages/uses/useFocusHandler.ts +25 -12
- 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
|
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
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
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
|
-
|
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
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
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
|
-
|
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 {
|
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 } =
|
16
|
+
const { effects, effectComputed, effectWatch } = createEffectsOfReaction();
|
18
17
|
|
19
18
|
const popup = createPopup(effects.push);
|
20
19
|
|
21
|
-
const reference =
|
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
|
-
|
94
|
-
|
95
|
-
|
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 {
|
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 } =
|
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
|
-
|
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
|
-
|
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
|
-
|
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 {
|
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 } =
|
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
|
-
|
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 {
|
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
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
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
|
}
|