UNPKG

react-native-chart-kit

Version:

Beautiful React Native charts for dashboards, reports, and data-rich mobile apps.

67 lines (66 loc) 2.35 kB
const fullCircle = Math.PI * 2; const normalizeAngleFromStart = (angle, startAngle) => { let normalizedAngle = angle; while (normalizedAngle < startAngle) { normalizedAngle += fullCircle; } while (normalizedAngle >= startAngle + fullCircle) { normalizedAngle -= fullCircle; } return normalizedAngle; }; export const getPieChartInteractionConfig = (interaction) => { if (!interaction) { return { mode: "none", deselectOnOutsidePress: true, onDeselect: undefined, onSelect: undefined }; } if (interaction === "tap" || interaction === "none") { return { mode: interaction, deselectOnOutsidePress: true, onDeselect: undefined, onSelect: undefined }; } return { mode: interaction.mode ?? "tap", deselectOnOutsidePress: interaction.deselectOnOutsidePress !== false, onDeselect: interaction.onDeselect, onSelect: interaction.onSelect }; }; export const isPieChartInteractionEnabled = (config) => config.mode === "tap"; export const normalizePieChartSelectedIndex = (selectedIndex) => typeof selectedIndex === "number" && Number.isFinite(selectedIndex) ? Math.max(0, Math.floor(selectedIndex)) : undefined; export const getPieChartSliceAtPoint = ({ arcs, centerX, centerY, innerRadius, locationX, locationY, radius }) => { const dx = locationX - centerX; const dy = locationY - centerY; const distance = Math.sqrt(dx * dx + dy * dy); if (distance < innerRadius || distance > radius) { return undefined; } const firstDefinedArc = arcs.find((arc) => arc.defined); if (!firstDefinedArc) { return undefined; } const angle = normalizeAngleFromStart(Math.atan2(dy, dx), firstDefinedArc.startAngle); return arcs.find((arc) => arc.defined && angle >= arc.startAngle && angle <= arc.endAngle); }; export const buildPieChartSelectEvent = (arc) => { if (!arc || !arc.defined) { return undefined; } return { index: arc.index, label: arc.label, value: arc.value, percentage: arc.percentage, ...(arc.color !== undefined ? { color: arc.color } : {}), ...(arc.raw !== undefined ? { raw: arc.raw } : {}) }; };