Skip to content

Commit 66d575c

Browse files
author
Павел Ахметчанов
committed
[#70] finish show diaposon of procentile by set day
1 parent afd3dfe commit 66d575c

File tree

2 files changed

+41
-43
lines changed

2 files changed

+41
-43
lines changed

src/charts/AddSlaLine.js

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ const getBasicSlaRect = (chartElement, slaPathElementIdentifier, strokeColor) =>
2727
slaRect.id = rectId;
2828
slaRect.setAttributeNS(null, 'fill', strokeColor || SLA_COLOR);
2929
slaRect.setAttributeNS(null, 'stroke', strokeColor || SLA_COLOR);
30-
slaRect.setAttributeNS(null, 'fill-opacity', '0.25');
30+
slaRect.setAttributeNS(null, 'fill-opacity', '0.15');
3131
slaRect.setAttributeNS(null, 'stroke-width', '1');
3232
slaRect.setAttributeNS(null, 'x', '0');
3333
slaRect.setAttributeNS(null, 'y', '0');
@@ -120,41 +120,41 @@ const renderSlaPercentageLabel = ({ chartElement, value, slaProcentile, slaPosit
120120
};
121121

122122
const findDiaposonForSlaRectPosition = ({ chartElement, slaProcentile, ticsVals }) => {
123-
let pMin = 0;
124-
let pMax = ticsVals.length - 1;
125-
126-
let minSlaPosition = 0;
127-
let minProcentile = 0;
128-
let maxSlaPosition = 0;
129-
let maxProcentile = 0;
130-
let minValue = 0;
131-
let maxValue = 0;
132-
133-
while (pMin <= pMax) {
134-
if (minProcentile !== slaProcentile) {
135-
minValue = ticsVals[pMin].value;
136-
minSlaPosition = getChartLinePosition(ticsVals, minValue);
137-
minProcentile = calculateSlaProcentile({ chartElement, slaPosition: minSlaPosition });
123+
const maxDay = ticsVals[ticsVals.length - 1].value;
124+
const slaPosition = [0, 0];
125+
let pIn = 0;
126+
let day = ticsVals[0].value;
127+
128+
let fProcentile = 0;
129+
let valPosition = 0;
130+
131+
while (pIn < 2 && day <= maxDay) {
132+
valPosition = getChartLinePosition(ticsVals, day);
133+
fProcentile = calculateSlaProcentile({ chartElement, slaPosition: valPosition });
134+
135+
day += 0.1; // for case if user set fractional number to input
136+
if (fProcentile === slaProcentile) {
137+
slaPosition[pIn] = valPosition;
138+
139+
if (pIn === 0) {
140+
pIn += 1;
141+
slaPosition[pIn] = valPosition; // if one step on the one procentile
142+
// eslint-disable-next-line no-continue
143+
continue;
144+
}
138145
}
139-
if (maxProcentile !== slaProcentile) {
140-
maxValue = ticsVals[pMax].value;
141-
maxSlaPosition = getChartLinePosition(ticsVals, maxValue);
142-
maxProcentile = calculateSlaProcentile({ chartElement, slaPosition: maxSlaPosition });
146+
147+
if (pIn === 1 && fProcentile !== slaProcentile) {
148+
// exit from top board
149+
pIn += 1;
150+
break;
143151
}
144-
pMin += 1;
145-
pMax -= 1;
146152
}
147-
window.console.log(
148-
{
149-
minSlaPosition,
150-
maxSlaPosition,
151-
},
152-
ticsVals
153-
);
154-
return {
155-
minSlaPosition,
156-
maxSlaPosition,
157-
};
153+
154+
slaPosition[0] = Number.isNaN(slaPosition[0]) ? 0 : slaPosition[0];
155+
slaPosition[1] = Number.isNaN(slaPosition[1]) ? 0 : slaPosition[1];
156+
157+
return slaPosition;
158158
};
159159

160160
const renderSlaLine = (sla, chartElement, changingSlaValue = sla) => {
@@ -169,7 +169,7 @@ const renderSlaLine = (sla, chartElement, changingSlaValue = sla) => {
169169
if (Number.isNaN(slaPosition)) return;
170170

171171
const slaProcentile = calculateSlaProcentile({ chartElement, slaPosition });
172-
const { minSlaPosition, maxSlaPosition } = findDiaposonForSlaRectPosition({
172+
const [minSlaPosition, maxSlaPosition] = findDiaposonForSlaRectPosition({
173173
chartElement,
174174
slaProcentile,
175175
ticsVals,

src/charts/utils.js

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,13 @@ export const getChartTics = chartElement => {
22
const ticks = [...chartElement.querySelectorAll('.tick')].filter(
33
elem => elem.lastChild.attributes.y.value === '0' && elem.lastChild.textContent
44
);
5-
return ticks
6-
.map(elem => {
7-
const [, transform] = elem.attributes.transform.value.split(',');
8-
return {
9-
position: Number(transform.slice(0, -1)),
10-
value: Number(elem.lastChild.textContent),
11-
};
12-
})
13-
.sort((a, b) => a.value - b.value);
5+
return ticks.map(elem => {
6+
const [, transform] = elem.attributes.transform.value.split(',');
7+
return {
8+
position: Number(transform.slice(0, -1)),
9+
value: Number(elem.lastChild.textContent),
10+
};
11+
});
1412
};
1513

1614
export const getChartLinePosition = (ticksVals, value) => {

0 commit comments

Comments
 (0)