Skip to content

Commit 08fe919

Browse files
committed
fix: move entire radius calculation logic to dedicated module
1 parent c0fedb8 commit 08fe919

File tree

3 files changed

+72
-118
lines changed

3 files changed

+72
-118
lines changed

package-lock.json

+53-91
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/components/Circle/circleMixin.js

-27
Original file line numberDiff line numberDiff line change
@@ -30,23 +30,11 @@ export default {
3030
},
3131

3232
radius() {
33-
if (this.options.multiple) {
34-
return this.baseRadius - this.previousCirclesThickness;
35-
}
3633
return radius(this.options);
3734
},
3835
emptyRadius() {
39-
if (this.options.multiple) {
40-
return this.baseRadius - this.previousCirclesThickness;
41-
}
4236
return emptyRadius(this.options);
4337
},
44-
baseRadius() {
45-
return this.options.size / 2 - this.thicknessWithDot / 2;
46-
},
47-
emptyBaseRadius() {
48-
return this.options.size / 2 - this.emptyThickness / 2;
49-
},
5038

5139
dataIsAvailable() {
5240
return isValidNumber(this.computedProgress) && !this.options.noData;
@@ -130,21 +118,6 @@ export default {
130118
globalGap() {
131119
return this.options.globalGap;
132120
},
133-
134-
previousCirclesThickness() {
135-
if (this.options.index === 0) return 0;
136-
const currentCircleGap = isValidNumber(this.gap) ? this.gap : this.globalGap;
137-
const previousCirclesThickness = [];
138-
for (let i = 0; i < this.options.index; i++) {
139-
const data = this.options.previousCircles[i];
140-
const dot = data.dot ? data.dot.size : this.globalDotSize;
141-
const thickness = isValidNumber(data.thickness) ? data.thickness : this.globalThickness;
142-
const gap = isValidNumber(data.gap) ? data.gap : this.globalGap;
143-
const completeThickness = Math.max(dot, thickness);
144-
previousCirclesThickness.push(i > 0 ? completeThickness + gap : completeThickness);
145-
}
146-
return previousCirclesThickness.reduce((acc, current) => acc + current) + currentCircleGap;
147-
},
148121
dotSize() {
149122
return this.options.dot.size;
150123
},

src/components/Circle/radiusCalculation.js

+19
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { isValidNumber } from "../../utils";
2+
13
const half = (val) => val / 2;
24

35
const thicknessWithDot = (options) => {
@@ -17,6 +19,21 @@ const normalLineModeRadius = (options) => {
1719
return baseRadius(options);
1820
};
1921

22+
const previousCirclesThickness = (options) => {
23+
if (options.index === 0) return 0;
24+
const currentCircleGap = isValidNumber(options.gap) ? options.gap : options.globalGap;
25+
const preCirclesThickness = [];
26+
for (let i = 0; i < options.options.previousCircles.length; i++) {
27+
const data = options.options.previousCircles[i];
28+
const dot = data.dot ? data.dot.size : options.globalDot.size;
29+
const thickness = isValidNumber(data.thickness) ? data.thickness : options.globalThickness;
30+
const gap = isValidNumber(data.gap) ? data.gap : options.globalGap;
31+
const completeThickness = Math.max(dot, thickness);
32+
preCirclesThickness.push(i > 0 ? completeThickness + gap : completeThickness);
33+
}
34+
return preCirclesThickness.reduce((acc, current) => acc + current) + currentCircleGap;
35+
};
36+
2037
const radiusNormalMode = (options) => normalLineModeRadius(options);
2138
const radiusInMode = (options) =>
2239
emptyRadius(options) - half(options.emptyThickness + half(options.thickness) + options.lineMode.offset);
@@ -62,6 +79,7 @@ const emptyRadiusTopMode = (options) => emptyBaseRadius(options) - half(thicknes
6279

6380
export const radius = (options) => {
6481
const modes = {
82+
multiple: () => baseRadius(options) - previousCirclesThickness(options),
6583
normal: () => radiusNormalMode(options),
6684
in: () => radiusInMode(options),
6785
"out-over": () => radiusOutOverMode(options),
@@ -74,6 +92,7 @@ export const radius = (options) => {
7492

7593
export const emptyRadius = (options) => {
7694
const modes = {
95+
multiple: () => baseRadius(options) - previousCirclesThickness(options),
7796
normal: () => emptyRadiusNormalMode(options),
7897
in: () => emptyRadiusInMode(options),
7998
"in-over": () => emptyRadiusInOverMode(options),

0 commit comments

Comments
 (0)