UNPKG

angular-sunburst-radar-chart

Version:
60 lines 14.1 kB
import { getLargeArcFlag, polarToCartesian } from './trignometry'; import { convertToPercentage } from './math'; import { createPathForBar } from './elements'; import { getItemTitle } from './utils'; export function createOuterChartBarWithInArc({ item, startAngle, endAngle, middleAngle, color, middleRadius, maxScore, innerRadiusBorder, center }) { const [centerX, centerY] = [center.x, center.y]; const currentVal = item.value; const totalRadiusInside = middleRadius - innerRadiusBorder; const innerRadius = convertToPercentage({ plotMax: totalRadiusInside, actualScore: currentVal, maxScore }); const radiusFromCenter = innerRadius + innerRadiusBorder; const firstPoint = polarToCartesian(centerX, centerY, radiusFromCenter, startAngle); const secondPoint = polarToCartesian(centerX, centerY, radiusFromCenter, endAngle); const startPoint = polarToCartesian(centerX, centerY, innerRadiusBorder, startAngle); const endPoint = polarToCartesian(centerX, centerY, innerRadiusBorder, endAngle); const startMiddlePoint = polarToCartesian(centerX, centerY, innerRadiusBorder, middleAngle); const distFromStartToFirst = Math.sqrt(Math.pow((startPoint.x - firstPoint.x), 2) + Math.pow((startPoint.y - firstPoint.y), 2)); const distFromStartToSecond = Math.sqrt(Math.pow((startPoint.x - secondPoint.x), 2) + Math.pow((startPoint.y - secondPoint.y), 2)); const { updatedFirstPoint, updatedSecondPoint } = getUpdatedPoints(firstPoint, secondPoint, distFromStartToFirst, distFromStartToSecond); const d = getDrawPositions(updatedFirstPoint, middleRadius, updatedSecondPoint, endPoint, startMiddlePoint, startPoint); const title = getItemTitle(item); return createPathForBar({ d: d.join(' '), stroke: 'none', fill: color, "fill-opacity": '0.5', title }); } function getDrawPositions(firstPoint, middleRadius, secondPoint, endPoint, startMiddlePoint, startPoint) { const d = [ 'M', firstPoint.x, firstPoint.y, 'A', middleRadius, middleRadius, 0, 0, 1, secondPoint.x, secondPoint.y, 'L', endPoint.x, endPoint.y, 'C', endPoint.x, endPoint.y, startMiddlePoint.x, startMiddlePoint.y, startPoint.x, startPoint.y, 'L', firstPoint.x, firstPoint.y, 'Z' ]; return d; } export function getUpdatedPoints(firstPoint, secondPoint, distFromStartToFirst, distFromStartToSecond) { let [updatedFirstPoint, updatedSecondPoint] = [firstPoint, secondPoint]; if (distFromStartToSecond < distFromStartToFirst) { updatedSecondPoint = firstPoint; updatedFirstPoint = secondPoint; } return { updatedSecondPoint, updatedFirstPoint }; } export function createInnerChartBarWithInArc({ startPoint, item, radius, startAngle, endAngle, maxScore }) { const [centerX, centerY] = [startPoint.x, startPoint.y]; const currentVal = item.value; const color = item.color; const arcRadius = convertToPercentage({ plotMax: radius, actualScore: currentVal, maxScore }); const start = polarToCartesian(centerX, centerY, arcRadius, endAngle); const end = polarToCartesian(centerX, centerY, arcRadius, startAngle); const largeArcFlag = getLargeArcFlag(startAngle, endAngle); //const largeArcFlag = endAngle - startAngle <= 180 ? '0' : '1'; const d = [ 'M', centerX, centerY, 'L', start.x, start.y, 'A', arcRadius, arcRadius, 0, largeArcFlag, 0, end.x, end.y ].join(' '); const title = getItemTitle(item); const arcForInnerChart = createPathForBar({ d, fill: color, title }); return arcForInnerChart; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjLWJhci1jaGFydHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLXN1bmJ1cnN0LXJhZGFyLWNoYXJ0LyIsInNvdXJjZXMiOlsibGliL3V0aWxzL2FyYy1iYXItY2hhcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNDLE9BQU8sRUFBYSxnQkFBZ0IsRUFBQyxNQUFNLFlBQVksQ0FBQztBQUN4RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBR3JDLE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUM7SUFHN0ksTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBR2hELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7SUFHOUIsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLEdBQUcsaUJBQWlCLENBQUM7SUFFM0QsTUFBTSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsRUFBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO0lBQ3pHLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxHQUFHLGlCQUFpQixDQUFDO0lBR3pELE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDcEYsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxF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QUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUM1RCxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUdaLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUdqQyxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLEVBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztJQUVuRSxPQUFPLGdCQUFnQixDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dldExhcmdlQXJjRmxhZywgcG9sYXJUb0NhcnRlc2lhbn0gZnJvbSAnLi90cmlnbm9tZXRyeSc7XHJcbmltcG9ydCB7Y29udmVydFRvUGVyY2VudGFnZX0gZnJvbSAnLi9tYXRoJztcclxuaW1wb3J0IHtjcmVhdGVQYXRoLCBjcmVhdGVQYXRoRm9yQmFyfSBmcm9tICcuL2VsZW1lbnRzJztcclxuaW1wb3J0IHtnZXRJdGVtVGl0bGV9IGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQge1BvaW50fSBmcm9tICcuL3Bvc2l0aW9ucyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3V0ZXJDaGFydEJhcldpdGhJbkFyYyh7aXRlbSwgc3RhcnRBbmdsZSwgZW5kQW5nbGUsIG1pZGRsZUFuZ2xlLCBjb2xvciwgbWlkZGxlUmFkaXVzLG1heFNjb3JlLCBpbm5lclJhZGl1c0JvcmRlciwgY2VudGVyfSkge1xyXG5cclxuXHJcbiAgY29uc3QgW2NlbnRlclgsIGNlbnRlclldID0gW2NlbnRlci54LCBjZW50ZXIueV07XHJcblxyXG5cclxuICBjb25zdCBjdXJyZW50VmFsID0gaXRlbS52YWx1ZTtcclxuXHJcblxyXG4gIGNvbnN0IHRvdGFsUmFkaXVzSW5zaWRlID0gbWlkZGxlUmFkaXVzIC0gaW5uZXJSYWRpdXNCb3JkZXI7XHJcblxyXG4gIGNvbnN0IGlubmVyUmFkaXVzID0gY29udmVydFRvUGVyY2VudGFnZSh7cGxvdE1heDogdG90YWxSYWRpdXNJbnNpZGUsIGFjdHVhbFNjb3JlOiBjdXJyZW50VmFsLCBtYXhTY29yZX0pO1xyXG4gIGNvbnN0IHJhZGl1c0Zyb21DZW50ZXIgPSBpbm5lclJhZGl1cyArIGlubmVyUmFkaXVzQm9yZGVyO1xyXG5cclxuXHJcbiAgY29uc3QgZmlyc3RQb2ludCA9IHBvbGFyVG9DYXJ0ZXNpYW4oY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzRnJvbUNlbnRlciwgc3RhcnRBbmdsZSk7XHJcbiAgY29uc3Qgc2Vjb25kUG9pbnQgPSBwb2xhclRvQ2FydGVzaWFuKGNlbnRlclgsIGNlbnRlclksIHJhZGl1c0Zyb21DZW50ZXIsIGVuZEFuZ2xlKTtcclxuXHJcblxyXG4gIGNvbnN0IHN0YXJ0UG9pbnQgPSBwb2xhclRvQ2FydGVzaWFuKGNlbnRlclgsIGNlbnRlclksIGlubmVyUmFkaXVzQm9yZGVyLCBzdGFydEFuZ2xlKTtcclxuICBjb25zdCBlbmRQb2ludCA9IHBvbGFyVG9DYXJ0ZXNpYW4oY2VudGVyWCwgY2VudGVyWSwgaW5uZXJSYWRpdXNCb3JkZXIsIGVuZEFuZ2xlKTtcclxuXHJcblxyXG4gIGNvbnN0IHN0YXJ0TWlkZGxlUG9pbnQgPSBwb2xhclRvQ2FydGVzaWFuKGNlbnRlclgsIGNlbnRlclksIGlubmVyUmFkaXVzQm9yZGVyLCBtaWRkbGVBbmdsZSk7XHJcblxyXG4gIGNvbnN0IGRpc3RGcm9tU3RhcnRUb0ZpcnN0ID0gTWF0aC5zcXJ0KE1hdGgucG93KChzdGFydFBvaW50LnggLSBmaXJzdFBvaW50LngpLCAyKSArIE1hdGgucG93KChzdGFydFBvaW50LnkgLSBmaXJzdFBvaW50LnkpLCAyKSk7XHJcbiAgY29uc3QgZGlzdEZyb21TdGFydFRvU2Vjb25kID0gTWF0aC5zcXJ0KE1hdGgucG93KChzdGFydFBvaW50LnggLSBzZWNvbmRQb2ludC54KSwgMikgKyBNYXRoLnBvdygoc3RhcnRQb2ludC55IC0gc2Vjb25kUG9pbnQueSksIDIpKTtcclxuXHJcblxyXG4gIGNvbnN0IHt1cGRhdGVkRmlyc3RQb2ludCwgdXBkYXRlZFNlY29uZFBvaW50fSA9IGdldFVwZGF0ZWRQb2ludHMoZmlyc3RQb2ludCwgc2Vjb25kUG9pbnQsIGRpc3RGcm9tU3RhcnRUb0ZpcnN0LCBkaXN0RnJvbVN0YXJ0VG9TZWNvbmQpO1xyXG5cclxuXHJcbiAgY29uc3QgZCA9IGdldERyYXdQb3NpdGlvbnModXBkYXRlZEZpcnN0UG9pbnQsIG1pZGRsZVJhZGl1cywgdXBkYXRlZFNlY29uZFBvaW50LCBlbmRQb2ludCwgc3RhcnRNaWRkbGVQb2ludCwgc3RhcnRQb2ludCk7XHJcblxyXG5cclxuICBjb25zdCB0aXRsZSA9IGdldEl0ZW1UaXRsZShpdGVtKTtcclxuXHJcbiAgcmV0dXJuIGNyZWF0ZVBhdGhGb3JCYXIoe2Q6IGQuam9pbignICcpLCBzdHJva2U6ICdub25lJywgZmlsbDogY29sb3IsXCJmaWxsLW9wYWNpdHlcIjonMC41JywgdGl0bGV9KTtcclxuXHJcbn1cclxuZnVuY3Rpb24gZ2V0RHJhd1Bvc2l0aW9ucyhmaXJzdFBvaW50OiB7IHg6IGFueTsgeTogYW55IH0sIG1pZGRsZVJhZGl1cywgc2Vjb25kUG9pbnQ6IHsgeDogYW55OyB5OiBhbnkgfSwgZW5kUG9pbnQ6IHsgeDogYW55OyB5OiBhbnkgfSwgc3RhcnRNaWRkbGVQb2ludDogeyB4OiBhbnk7IHk6IGFueSB9LCBzdGFydFBvaW50OiB7IHg6IGFueTsgeTogYW55IH0pIHtcclxuICBjb25zdCBkID0gW1xyXG5cclxuICAgICdNJywgZmlyc3RQb2ludC54LCBmaXJzdFBvaW50LnksXHJcbiAgICAnQScsIG1pZGRsZVJhZGl1cywgbWlkZGxlUmFkaXVzLCAwLCAwLCAxLCBzZWNvbmRQb2ludC54LCBzZWNvbmRQb2ludC55LFxyXG4gICAgJ0wnLCBlbmRQb2ludC54LCBlbmRQb2ludC55LFxyXG4gICAgJ0MnLCBlbmRQb2ludC54LCBlbmRQb2ludC55LCBzdGFydE1pZGRsZVBvaW50LngsIHN0YXJ0TWlkZGxlUG9pbnQueSwgc3RhcnRQb2ludC54LCBzdGFydFBvaW50LnksXHJcbiAgICAnTCcsIGZpcnN0UG9pbnQueCwgZmlyc3RQb2ludC55LFxyXG4gICAgJ1onXHJcblxyXG5cclxuICBdO1xyXG4gIHJldHVybiBkO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFVwZGF0ZWRQb2ludHMoZmlyc3RQb2ludDogUG9pbnQsIHNlY29uZFBvaW50OiBQb2ludCwgZGlzdEZyb21TdGFydFRvRmlyc3QsIGRpc3RGcm9tU3RhcnRUb1NlY29uZCkge1xyXG5cclxuICBsZXQgW3VwZGF0ZWRGaXJzdFBvaW50LCB1cGRhdGVkU2Vjb25kUG9pbnRdID0gW2ZpcnN0UG9pbnQsIHNlY29uZFBvaW50XTtcclxuXHJcbiAgaWYgKGRpc3RGcm9tU3RhcnRUb1NlY29uZCA8IGRpc3RGcm9tU3RhcnRUb0ZpcnN0KSB7XHJcbiAgICB1cGRhdGVkU2Vjb25kUG9pbnQgPSBmaXJzdFBvaW50O1xyXG4gICAgdXBkYXRlZEZpcnN0UG9pbnQgPSBzZWNvbmRQb2ludDtcclxuXHJcblxyXG4gIH1cclxuICByZXR1cm4ge3VwZGF0ZWRTZWNvbmRQb2ludCwgdXBkYXRlZEZpcnN0UG9pbnR9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5uZXJDaGFydEJhcldpdGhJbkFyYyh7c3RhcnRQb2ludCwgaXRlbSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSxtYXhTY29yZX0pIHtcclxuXHJcbiAgY29uc3QgW2NlbnRlclgsIGNlbnRlclldID0gW3N0YXJ0UG9pbnQueCwgc3RhcnRQb2ludC55XTtcclxuXHJcbiAgY29uc3QgY3VycmVudFZhbCA9IGl0ZW0udmFsdWU7XHJcbiAgY29uc3QgY29sb3IgPSBpdGVtLmNvbG9yO1xyXG4gIGNvbnN0IGFyY1JhZGl1cyA9IGNvbnZlcnRUb1BlcmNlbnRhZ2Uoe3Bsb3RNYXg6IHJhZGl1cywgYWN0dWFsU2NvcmU6IGN1cnJlbnRWYWwsbWF4U2NvcmV9KTtcclxuXHJcblxyXG4gIGNvbnN0IHN0YXJ0ID0gcG9sYXJUb0NhcnRlc2lhbihjZW50ZXJYLCBjZW50ZXJZLCBhcmNSYWRpdXMsIGVuZEFuZ2xlKTtcclxuICBjb25zdCBlbmQgPSBwb2xhclRvQ2FydGVzaWFuKGNlbnRlclgsIGNlbnRlclksIGFyY1JhZGl1cywgc3RhcnRBbmdsZSk7XHJcblxyXG4gIGNvbnN0IGxhcmdlQXJjRmxhZyA9IGdldExhcmdlQXJjRmxhZyhzdGFydEFuZ2xlLGVuZEFuZ2xlKVxyXG4gIC8vY29uc3QgbGFyZ2VBcmNGbGFnID0gZW5kQW5nbGUgLSBzdGFydEFuZ2xlIDw9IDE4MCA/ICcwJyA6ICcxJztcclxuXHJcbiAgY29uc3QgZCA9IFtcclxuICAgICdNJywgY2VudGVyWCwgY2VudGVyWSxcclxuICAgICdMJywgc3RhcnQueCwgc3RhcnQueSxcclxuICAgICdBJywgYXJjUmFkaXVzLCBhcmNSYWRpdXMsIDAsIGxhcmdlQXJjRmxhZywgMCwgZW5kLngsIGVuZC55XHJcbiAgXS5qb2luKCcgJyk7XHJcblxyXG5cclxuICBjb25zdCB0aXRsZSA9IGdldEl0ZW1UaXRsZShpdGVtKTtcclxuXHJcblxyXG4gIGNvbnN0IGFyY0ZvcklubmVyQ2hhcnQgPSBjcmVhdGVQYXRoRm9yQmFyKHtkLCBmaWxsOiBjb2xvciwgdGl0bGV9KTtcclxuXHJcbiAgcmV0dXJuIGFyY0ZvcklubmVyQ2hhcnQ7XHJcbn1cclxuIl19