@easyv/charts 1.8.14 → 1.8.15

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@easyv/charts",
3
- "version": "1.8.14",
3
+ "version": "1.8.15",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -5,8 +5,8 @@ import React, {
5
5
  useState,
6
6
  useCallback,
7
7
  useRef,
8
- } from 'react';
9
- import { interval as d3Interval, Timer } from 'd3v7';
8
+ } from "react";
9
+ import { interval as d3Interval, Timer } from "d3v7";
10
10
  type State = {
11
11
  currentIndex: number | null;
12
12
  trigger: string;
@@ -14,18 +14,18 @@ type State = {
14
14
 
15
15
  const initialState = {
16
16
  currentIndex: null,
17
- trigger: '',
17
+ trigger: "",
18
18
  };
19
19
 
20
20
  const carouselState = {
21
21
  currentIndex: 0,
22
- trigger: 'carousel',
22
+ trigger: "carousel",
23
23
  };
24
24
 
25
25
  const defaultAnimation = {
26
26
  on: false,
27
27
  interval: 0,
28
- interactive: '',
28
+ interactive: "",
29
29
  canCancel: false,
30
30
  current: { heighten: 0, opacity: 100 },
31
31
  };
@@ -53,19 +53,28 @@ export default (Component: ComponentType<any>) =>
53
53
  const timer: { current: Timer | null } = useRef(null);
54
54
  const hoverState = useRef(false);
55
55
  const animationOn = on && interval && dataLength;
56
+ // 封装计时器停止逻辑
57
+ const stopTimer = useCallback(() => {
58
+ if (timer.current) {
59
+ timer.current.stop();
60
+ timer.current = null;
61
+ }
62
+ }, []);
56
63
 
57
64
  const carousel = useCallback(() => {
65
+ // 先停止之前的计时器
66
+ stopTimer();
58
67
  if (animationOn) {
59
68
  setState({
60
69
  currentIndex: 0,
61
- trigger: 'carousel'
62
- })
70
+ trigger: "carousel",
71
+ });
63
72
  timer.current = d3Interval(() => {
64
73
  setState(({ currentIndex }) => {
65
74
  const tmp = (currentIndex == null ? 0 : +currentIndex) + 1;
66
75
  return {
67
76
  currentIndex: tmp >= dataLength ? 0 : tmp,
68
- trigger: 'carousel',
77
+ trigger: "carousel",
69
78
  };
70
79
  });
71
80
  }, interval * 1000);
@@ -73,7 +82,7 @@ export default (Component: ComponentType<any>) =>
73
82
  timer.current = null;
74
83
  setState({
75
84
  currentIndex: null,
76
- trigger: '',
85
+ trigger: "",
77
86
  });
78
87
  }
79
88
  }, [animationOn, interval, dataLength]);
@@ -81,50 +90,54 @@ export default (Component: ComponentType<any>) =>
81
90
  useEffect(() => {
82
91
  active && carousel && carousel();
83
92
  return () => {
84
- timer.current && timer.current.stop();
93
+ stopTimer();
85
94
  };
86
- }, [carousel, active]);
87
- interface Event{
88
- currentIndex:number,
89
- type:string
95
+ }, [carousel, active, stopTimer]);
96
+ interface Event {
97
+ currentIndex: number;
98
+ type: string;
90
99
  }
91
100
  const onEvent = useCallback(
92
- ({ currentIndex, type }:Event) => {
101
+ ({ currentIndex, type }: Event) => {
93
102
  switch (interactive) {
94
103
  case true:
95
- case 'click':
96
- if (type == 'onClick') {
97
- timer.current && timer.current.stop();
104
+ case "click":
105
+ if (type == "onClick") {
106
+ stopTimer();
98
107
  !hoverState.current && animationOn && carousel();
99
- setState(pre => {
108
+ setState((pre) => {
100
109
  return {
101
110
  trigger: type,
102
- currentIndex:pre.currentIndex==currentIndex && canCancel?-1:currentIndex,
103
- }
111
+ currentIndex:
112
+ pre.currentIndex == currentIndex && canCancel
113
+ ? -1
114
+ : currentIndex,
115
+ };
104
116
  });
105
117
  }
106
118
  break;
107
- case 'hover':
108
- if (type == 'onMouseEnter') {
119
+ case "hover":
120
+ if (type == "onMouseEnter") {
109
121
  setState({
110
- trigger:type,
122
+ trigger: type,
111
123
  currentIndex,
112
124
  });
113
- timer.current && timer.current.stop();
114
- } else if (type == 'onMouseLeave') {
125
+ stopTimer();
126
+ } else if (type == "onMouseLeave") {
115
127
  !hoverState.current && animationOn && carousel();
116
- canCancel && setState(pre => {
117
- return {
118
- trigger: "onMouseEnter",
119
- currentIndex:-1,
120
- }
121
- });
128
+ canCancel &&
129
+ setState((pre) => {
130
+ return {
131
+ trigger: "onMouseEnter",
132
+ currentIndex: -1,
133
+ };
134
+ });
122
135
  }
123
136
  break;
124
137
  case false:
125
- case '':
138
+ case "":
126
139
  break;
127
- case 'carousel':
140
+ case "carousel":
128
141
  default:
129
142
  setState({
130
143
  trigger: type,
@@ -133,30 +146,34 @@ export default (Component: ComponentType<any>) =>
133
146
  break;
134
147
  }
135
148
  },
136
- [interactive, canCancel, animationOn, carousel]
149
+ [interactive, canCancel, animationOn, carousel, stopTimer]
137
150
  );
138
-
139
- const hoverEvent = useCallback((isHover:boolean)=>{
140
- if(hoverStop){
141
- if(isHover){
142
- hoverState.current = true;
143
- timer.current && timer.current.stop();
144
- }else{
145
- hoverState.current = false;
146
- if(animationOn){
147
- timer.current = d3Interval(() => {
148
- setState(({ currentIndex }) => {
149
- const tmp = (currentIndex == null ? 0 : +currentIndex) + 1;
150
- return {
151
- currentIndex: tmp >= dataLength ? 0 : tmp,
152
- trigger: 'carousel',
153
- };
154
- });
155
- }, interval * 1000);
151
+
152
+ const hoverEvent = useCallback(
153
+ (isHover: boolean) => {
154
+ if (hoverStop) {
155
+ if (isHover) {
156
+ hoverState.current = true;
157
+ stopTimer();
158
+ } else {
159
+ hoverState.current = false;
160
+ if (animationOn) {
161
+ stopTimer();
162
+ timer.current = d3Interval(() => {
163
+ setState(({ currentIndex }) => {
164
+ const tmp = (currentIndex == null ? 0 : +currentIndex) + 1;
165
+ return {
166
+ currentIndex: tmp >= dataLength ? 0 : tmp,
167
+ trigger: "carousel",
168
+ };
169
+ });
170
+ }, interval * 1000);
171
+ }
156
172
  }
157
173
  }
158
- }
159
- },[hoverStop, animationOn, carousel]);
174
+ },
175
+ [hoverStop, animationOn, interval, dataLength, stopTimer]
176
+ );
160
177
 
161
178
  return (
162
179
  <Component