UNPKG

angular-sunburst-radar-chart

Version:
119 lines 18.8 kB
//Not Used now ,Might Use later import { polarToCartesian } from './trignometry'; // function anglesBasedOnPercentage(items) { // // const total = items.reduce((prevValue, curValue) => prevValue + //curValue, 0); // if (Math.round(total) != 100) { // console.error('Cannnot draw as the sum of values should be 100'); // throw new Error('Cannnot draw as the sum of values should be 100'); // } // let prevDegree = 0; // const results = []; // for (let i = 0; i < items.length; i++) { // // const item = items[i]; // const currentDegree = item * 3.6; // // const degreeToBeDrawn = currentDegree + prevDegree; // results.push(degreeToBeDrawn); // prevDegree = prevDegree + currentDegree; // } // // // return results; // } // function getInitialPosition(startLocation, totalDegrees, num) { var perLocation = totalDegrees / num; var middleLocation = perLocation / 2; var startMiddle = startLocation + middleLocation; return { startLocation: startLocation, perLocation: perLocation, middleLocation: middleLocation, startMiddle: startMiddle }; } function getDegreeForIndexBasedOnSplitAngle(index, data) { var perLocation = data.perLocation, middleLocation = data.middleLocation, startMiddle = data.startMiddle, startLocation = data.startLocation; var position = index; // + 1; var startDegree = startLocation + (position * perLocation); var middleDegree = startMiddle + (position * perLocation); var endDegree = startLocation + (position * perLocation) + perLocation; return { startDegree: startDegree, middleDegree: middleDegree, endDegree: endDegree }; } export function getAllAnglesBasedOnChild(items) { var num = items.length; var results = []; var totalChildren = items.filter(function (item) { return item.children; }).map(function (item) { return item.children.length; }).reduce((function (a, b) { return a + b; }), 0); var childAngleDifference = 360 / totalChildren; var currentStartLocation = 0; for (var i = 0; i < items.length; i++) { var item = items[i]; var childCount = item.children ? item.children.length : 0; var totalDegrees = childCount * childAngleDifference; var endDegree = currentStartLocation + (childCount * childAngleDifference); var middleDegree = (endDegree - currentStartLocation) / 2; var currentItem = {}; currentItem['item'] = item; currentItem['startDegree'] = currentStartLocation; currentItem['middleDegree'] = middleDegree; currentItem['endDegree'] = endDegree; if (childCount > 0) { currentItem['children'] = iterateChildrenAndSetAngles({ children: item.children, currentItem: currentItem, angleDifference: totalDegrees }); } currentStartLocation = currentStartLocation + (childCount * childAngleDifference); results.push(currentItem); } return results; } export function getAllAnglesBasedOnParent(items) { var num = items.length; var results = []; var angleDifference = 360 / num; var data = getInitialPosition(0, 360, num); for (var i = 0; i < items.length; i++) { var _a = getDegreeForIndexBasedOnSplitAngle(i, data), startDegree = _a.startDegree, middleDegree = _a.middleDegree, endDegree = _a.endDegree; var item = items[i]; var currentItem = {}; currentItem['item'] = item; currentItem['startDegree'] = startDegree; currentItem['middleDegree'] = middleDegree; currentItem['endDegree'] = endDegree; var hasChildren = items.filter(function (item) { return !!item.children; }).length > 0; if (hasChildren) { currentItem['children'] = iterateChildrenAndSetAngles({ children: item.children, currentItem: currentItem, angleDifference: angleDifference }); } results.push(currentItem); } return results; } function iterateChildrenAndSetAngles(_a) { var children = _a.children, currentItem = _a.currentItem, angleDifference = _a.angleDifference; var count = children.length; var childItems = []; var data = getInitialPosition(currentItem['startDegree'], angleDifference, count); for (var j = 0; j < count; j++) { var childItem = {}; childItem['item'] = children[j]; var _b = getDegreeForIndexBasedOnSplitAngle(j, data), startDegree = _b.startDegree, middleDegree = _b.middleDegree, endDegree = _b.endDegree; childItem['startDegree'] = startDegree; childItem['middleDegree'] = middleDegree; childItem['endDegree'] = endDegree; childItems.push(childItem); } return childItems; } export function positionsOnAngles(centerX, centerY, radius, angels) { var results = []; for (var i = 0; i < angels.length; i++) { var degreeToBeDrawn = angels[i]; results.push(polarToCartesian(centerX, centerY, radius, degreeToBeDrawn)); } return results; } export function getPointsOnCircleAtAngels(centerX, centerY, radius, angels) { var results = []; for (var i = 0; i < angels.length; i++) { var degreeToBeDrawn = angels[i]; results.push(polarToCartesian(centerX, centerY, radius, degreeToBeDrawn)); } return results; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5nZWxzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1zdW5idXJzdC1yYWRhci1jaGFydC8iLCJzb3VyY2VzIjpbImxpYi91dGlscy9hbmdlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUvQyw0Q0FBNEM7QUFDNUMsRUFBRTtBQUNGLG9FQUFvRTtBQUNwRSxlQUFlO0FBQ2Ysb0NBQW9DO0FBQ3BDLHdFQUF3RTtBQUN4RSwwRUFBMEU7QUFDMUUsTUFBTTtBQUNOLHdCQUF3QjtBQUN4Qix3QkFBd0I7QUFDeEIsNkNBQTZDO0FBQzdDLEVBQUU7QUFDRiw2QkFBNkI7QUFDN0Isd0NBQXdDO0FBQ3hDLEVBQUU7QUFDRiwwREFBMEQ7QUFDMUQscUNBQXFDO0FBQ3JDLCtDQUErQztBQUMvQyxNQUFNO0FBQ04sRUFBRTtBQUNGLEVBQUU7QUFDRixvQkFBb0I7QUFDcEIsSUFBSTtBQUNKLEVBQUU7QUFFRixTQUFTLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsR0FBRztJQUcxRCxJQUFNLFdBQVcsR0FBRyxZQUFZLEdBQUcsR0FBRyxDQUFDO0lBQ3ZDLElBQU0sY0FBYyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDdkMsSUFBTSxXQUFXLEdBQUcsYUFBYSxHQUFHLGNBQWMsQ0FBQztJQUVuRCxPQUFPLEVBQUMsYUFBYSxlQUFBLEVBQUUsV0FBVyxhQUFBLEVBQUUsY0FBYyxnQkFBQSxFQUFFLFdBQVcsYUFBQSxFQUFDLENBQUM7QUFHbkUsQ0FBQztBQUVELFNBQVMsa0NBQWtDLENBQUMsS0FBSyxFQUFFLElBQUk7SUFHOUMsSUFBQSw4QkFBVyxFQUFFLG9DQUFjLEVBQUUsOEJBQVcsRUFBRSxrQ0FBYSxDQUFTO0lBQ3ZFLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFBLE9BQU87SUFHNUIsSUFBTSxXQUFXLEdBQUcsYUFBYSxH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QUNuQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUV0QyxJQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0tBRTNFO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vTm90IFVzZWQgbm93ICxNaWdodCBVc2UgbGF0ZXJcclxuaW1wb3J0IHtwb2xhclRvQ2FydGVzaWFufSBmcm9tICcuL3RyaWdub21ldHJ5JztcclxuXHJcbi8vIGZ1bmN0aW9uIGFuZ2xlc0Jhc2VkT25QZXJjZW50YWdlKGl0ZW1zKSB7XHJcbi8vXHJcbi8vICAgY29uc3QgdG90YWwgPSBpdGVtcy5yZWR1Y2UoKHByZXZWYWx1ZSwgY3VyVmFsdWUpID0+IHByZXZWYWx1ZSArXHJcbi8vY3VyVmFsdWUsIDApO1xyXG4vLyAgIGlmIChNYXRoLnJvdW5kKHRvdGFsKSAhPSAxMDApIHtcclxuLy8gICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5ub3QgZHJhdyBhcyB0aGUgc3VtIG9mIHZhbHVlcyBzaG91bGQgYmUgMTAwJyk7XHJcbi8vICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5ub3QgZHJhdyBhcyB0aGUgc3VtIG9mIHZhbHVlcyBzaG91bGQgYmUgMTAwJyk7XHJcbi8vICAgfVxyXG4vLyAgIGxldCBwcmV2RGVncmVlID0gMDtcclxuLy8gICBjb25zdCByZXN1bHRzID0gW107XHJcbi8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4vL1xyXG4vLyAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldO1xyXG4vLyAgICAgY29uc3QgY3VycmVudERlZ3JlZSA9IGl0ZW0gKiAzLjY7XHJcbi8vXHJcbi8vICAgICBjb25zdCBkZWdyZWVUb0JlRHJhd24gPSBjdXJyZW50RGVncmVlICsgcHJldkRlZ3JlZTtcclxuLy8gICAgIHJlc3VsdHMucHVzaChkZWdyZWVUb0JlRHJhd24pO1xyXG4vLyAgICAgcHJldkRlZ3JlZSA9IHByZXZEZWdyZWUgKyBjdXJyZW50RGVncmVlO1xyXG4vLyAgIH1cclxuLy9cclxuLy9cclxuLy8gICByZXR1cm4gcmVzdWx0cztcclxuLy8gfVxyXG4vL1xyXG5cclxuZnVuY3Rpb24gZ2V0SW5pdGlhbFBvc2l0aW9uKHN0YXJ0TG9jYXRpb24sIHRvdGFsRGVncmVlcywgbnVtKSB7XHJcblxyXG5cclxuICBjb25zdCBwZXJMb2NhdGlvbiA9IHRvdGFsRGVncmVlcyAvIG51bTtcclxuICBjb25zdCBtaWRkbGVMb2NhdGlvbiA9IHBlckxvY2F0aW9uIC8gMjtcclxuICBjb25zdCBzdGFydE1pZGRsZSA9IHN0YXJ0TG9jYXRpb24gKyBtaWRkbGVMb2NhdGlvbjtcclxuXHJcbiAgcmV0dXJuIHtzdGFydExvY2F0aW9uLCBwZXJMb2NhdGlvbiwgbWlkZGxlTG9jYXRpb24sIHN0YXJ0TWlkZGxlfTtcclxuXHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXREZWdyZWVGb3JJbmRleEJhc2VkT25TcGxpdEFuZ2xlKGluZGV4LCBkYXRhKSB7XHJcblxyXG5cclxuICBjb25zdCB7cGVyTG9jYXRpb24sIG1pZGRsZUxvY2F0aW9uLCBzdGFydE1pZGRsZSwgc3RhcnRMb2NhdGlvbn0gPSBkYXRhO1xyXG4gIGxldCBwb3NpdGlvbiA9IGluZGV4Oy8vICsgMTtcclxuXHJcblxyXG4gIGNvbnN0IHN0YXJ0RGVncmVlID0gc3RhcnRMb2NhdGlvbiArIChwb3NpdGlvbiAqIHBlckxvY2F0aW9uKTtcclxuICBjb25zdCBtaWRkbGVEZWdyZWUgPSBzdGFydE1pZGRsZSArIChwb3NpdGlvbiAqIHBlckxvY2F0aW9uKTtcclxuICBjb25zdCBlbmREZWdyZWUgPSBzdGFydExvY2F0aW9uICsgKHBvc2l0aW9uICogcGVyTG9jYXRpb24pICsgcGVyTG9jYXRpb247XHJcblxyXG5cclxuICByZXR1cm4ge3N0YXJ0RGVncmVlLCBtaWRkbGVEZWdyZWUsIGVuZERlZ3JlZX07XHJcblxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsQW5nbGVzQmFzZWRPbkNoaWxkKGl0ZW1zKSB7XHJcblxyXG4gIGNvbnN0IG51bSA9IGl0ZW1zLmxlbmd0aDtcclxuICBjb25zdCByZXN1bHRzID0gW107XHJcblxyXG5cclxuICBjb25zdCB0b3RhbENoaWxkcmVuID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5jaGlsZHJlbikubWFwKGl0ZW0gPT4gaXRlbS5jaGlsZHJlbi5sZW5ndGgpLnJlZHVjZSgoKGEsIGIpID0+IGEgKyBiKSwwKTtcclxuXHJcbiAgY29uc3QgY2hpbGRBbmdsZURpZmZlcmVuY2UgPSAzNjAgLyB0b3RhbENoaWxkcmVuO1xyXG5cclxuICBsZXQgY3VycmVudFN0YXJ0TG9jYXRpb24gPSAwO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHJcbiAgICBjb25zdCBpdGVtID0gaXRlbXNbaV07XHJcbiAgICBjb25zdCBjaGlsZENvdW50ID0gaXRlbS5jaGlsZHJlbiA/IGl0ZW0uY2hpbGRyZW4ubGVuZ3RoIDogMDtcclxuICAgIGNvbnN0IHRvdGFsRGVncmVlcyA9IGNoaWxkQ291bnQgKiBjaGlsZEFuZ2xlRGlmZmVyZW5jZTtcclxuXHJcblxyXG4gICAgY29uc3QgZW5kRGVncmVlID0gY3VycmVudFN0YXJ0TG9jYXRpb24gKyAoY2hpbGRDb3VudCAqIGNoaWxkQW5nbGVEaWZmZXJlbmNlKTtcclxuXHJcbiAgICBjb25zdCBtaWRkbGVEZWdyZWUgPSAoZW5kRGVncmVlIC0gY3VycmVudFN0YXJ0TG9jYXRpb24pIC8gMjtcclxuXHJcblxyXG4gICAgY29uc3QgY3VycmVudEl0ZW0gPSB7fTtcclxuICAgIGN1cnJlbnRJdGVtWydpdGVtJ10gPSBpdGVtO1xyXG4gICAgY3VycmVudEl0ZW1bJ3N0YXJ0RGVncmVlJ10gPSBjdXJyZW50U3RhcnRMb2NhdGlvbjtcclxuICAgIGN1cnJlbnRJdGVtWydtaWRkbGVEZWdyZWUnXSA9IG1pZGRsZURlZ3JlZTtcclxuICAgIGN1cnJlbnRJdGVtWydlbmREZWdyZWUnXSA9IGVuZERlZ3JlZTtcclxuXHJcbiAgICBpZiAoY2hpbGRDb3VudCA+IDApIHtcclxuXHJcblxyXG4gICAgICBjdXJyZW50SXRlbVsnY2hpbGRyZW4nXSA9IGl0ZXJhdGVDaGlsZHJlbkFuZFNldEFuZ2xlcyh7Y2hpbGRyZW46IGl0ZW0uY2hpbGRyZW4sIGN1cnJlbnRJdGVtLCBhbmdsZURpZmZlcmVuY2U6IHRvdGFsRGVncmVlc30pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjdXJyZW50U3RhcnRMb2NhdGlvbiA9IGN1cnJlbnRTdGFydExvY2F0aW9uICsgKGNoaWxkQ291bnQgKiBjaGlsZEFuZ2xlRGlmZmVyZW5jZSk7XHJcbiAgICByZXN1bHRzLnB1c2goY3VycmVudEl0ZW0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHJldHVybiByZXN1bHRzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsQW5nbGVzQmFzZWRPblBhcmVudChpdGVtcykge1xyXG5cclxuICBjb25zdCBudW0gPSBpdGVtcy5sZW5ndGg7XHJcbiAgbGV0IHJlc3VsdHMgPSBbXTtcclxuICBsZXQgYW5nbGVEaWZmZXJlbmNlID0gMzYwIC8gbnVtO1xyXG5cclxuICBjb25zdCBkYXRhID0gZ2V0SW5pdGlhbFBvc2l0aW9uKDAsIDM2MCwgbnVtKTtcclxuXHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHJcbiAgICBjb25zdFxyXG4gICAgICB7c3RhcnREZWdyZWUsIG1pZGRsZURlZ3JlZSwgZW5kRGVncmVlfSA9IGdldERlZ3JlZUZvckluZGV4QmFzZWRPblNwbGl0QW5nbGUoaSwgZGF0YSk7XHJcblxyXG5cclxuICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgIGNvbnN0IGN1cnJlbnRJdGVtID0ge307XHJcbiAgICBjdXJyZW50SXRlbVsnaXRlbSddID0gaXRlbTtcclxuICAgIGN1cnJlbnRJdGVtWydzdGFydERlZ3JlZSddID0gc3RhcnREZWdyZWU7XHJcbiAgICBjdXJyZW50SXRlbVsnbWlkZGxlRGVncmVlJ10gPSBtaWRkbGVEZWdyZWU7XHJcbiAgICBjdXJyZW50SXRlbVsnZW5kRGVncmVlJ10gPSBlbmREZWdyZWU7XHJcblxyXG4gICAgY29uc3QgaGFzQ2hpbGRyZW4gPSBpdGVtcy5maWx0ZXIoaXRlbSA9PiAhIWl0ZW0uY2hpbGRyZW4pLmxlbmd0aCA+IDA7XHJcbiAgICBpZiAoaGFzQ2hpbGRyZW4pIHtcclxuXHJcblxyXG4gICAgICBjdXJyZW50SXRlbVsnY2hpbGRyZW4nXSA9IGl0ZXJhdGVDaGlsZHJlbkFuZFNldEFuZ2xlcyh7Y2hpbGRyZW46IGl0ZW0uY2hpbGRyZW4sIGN1cnJlbnRJdGVtLCBhbmdsZURpZmZlcmVuY2V9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRJdGVtKTtcclxuICB9XHJcblxyXG5cclxuICByZXR1cm4gcmVzdWx0cztcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGl0ZXJhdGVDaGlsZHJlbkFuZFNldEFuZ2xlcyh7Y2hpbGRyZW4sIGN1cnJlbnRJdGVtLCBhbmdsZURpZmZlcmVuY2V9KSB7XHJcblxyXG5cclxuICBjb25zdCBjb3VudCA9IGNoaWxkcmVuLmxlbmd0aDtcclxuXHJcbiAgY29uc3QgY2hpbGRJdGVtcyA9IFtdO1xyXG4gIGNvbnN0IGRhdGEgPSBnZXRJbml0aWFsUG9zaXRpb24oY3VycmVudEl0ZW1bJ3N0YXJ0RGVncmVlJ10sIGFuZ2xlRGlmZmVyZW5jZSwgY291bnQpO1xyXG5cclxuXHJcbiAgZm9yIChsZXQgaiA9IDA7IGogPCBjb3VudDsgaisrKSB7XHJcbiAgICBjb25zdCBjaGlsZEl0ZW0gPSB7fTtcclxuXHJcblxyXG4gICAgY2hpbGRJdGVtWydpdGVtJ10gPSBjaGlsZHJlbltqXTtcclxuXHJcblxyXG4gICAgY29uc3RcclxuICAgICAge3N0YXJ0RGVncmVlLCBtaWRkbGVEZWdyZWUsIGVuZERlZ3JlZX0gPSBnZXREZWdyZWVGb3JJbmRleEJhc2VkT25TcGxpdEFuZ2xlKGosIGRhdGEpO1xyXG5cclxuXHJcbiAgICBjaGlsZEl0ZW1bJ3N0YXJ0RGVncmVlJ10gPSBzdGFydERlZ3JlZTtcclxuICAgIGNoaWxkSXRlbVsnbWlkZGxlRGVncmVlJ10gPSBtaWRkbGVEZWdyZWU7XHJcbiAgICBjaGlsZEl0ZW1bJ2VuZERlZ3JlZSddID0gZW5kRGVncmVlO1xyXG5cclxuICAgIGNoaWxkSXRlbXMucHVzaChjaGlsZEl0ZW0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHJldHVybiBjaGlsZEl0ZW1zO1xyXG5cclxuXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcG9zaXRpb25zT25BbmdsZXMoY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzLCBhbmdlbHMpIHtcclxuXHJcbiAgY29uc3QgcmVzdWx0cyA9IFtdO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYW5nZWxzLmxlbmd0aDsgaSsrKSB7XHJcblxyXG4gICAgY29uc3QgZGVncmVlVG9CZURyYXduID0gYW5nZWxzW2ldO1xyXG4gICAgcmVzdWx0cy5wdXNoKHBvbGFyVG9DYXJ0ZXNpYW4oY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzLCBkZWdyZWVUb0JlRHJhd24pKTtcclxuXHJcbiAgfVxyXG4gIHJldHVybiByZXN1bHRzO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uXHJcbmdldFBvaW50c09uQ2lyY2xlQXRBbmdlbHMoY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzLCBhbmdlbHMpIHtcclxuXHJcbiAgY29uc3QgcmVzdWx0cyA9IFtdO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYW5nZWxzLmxlbmd0aDsgaSsrKSB7XHJcblxyXG4gICAgY29uc3QgZGVncmVlVG9CZURyYXduID0gYW5nZWxzW2ldO1xyXG4gICAgcmVzdWx0cy5wdXNoKHBvbGFyVG9DYXJ0ZXNpYW4oY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzLCBkZWdyZWVUb0JlRHJhd24pKTtcclxuXHJcbiAgfVxyXG4gIHJldHVybiByZXN1bHRzO1xyXG59XHJcbiJdfQ==