All files ArcUtils.js

24.14% Statements 7/29
0% Branches 0/8
16.67% Functions 1/6
23.08% Lines 6/26
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92                    1x   1x                     1x                                                         1x                                             1x                             1x  
/*
 * This file is part of the nivo project.
 *
 * Copyright 2016-present, Raphaƫl Benitte.
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
import d3 from 'd3'
 
export const degreesToRadians = degrees => degrees * Math.PI / 180
 
export const radiansToDegrees = radians => 180 * radians / Math.PI
 
/**
 * Try to get a neighbor arc, otherwise, returns null.
 *
 * @param {Number}   i
 * @param {function} identity
 * @param {Array}    prevData
 * @param {Array}    newData
 * @returns {{startAngle: *, endAngle: *}}
 */
export const findNeighbor = (i, identity, prevData, newData) => {
    const preceding = findPreceding(i, identity, prevData, newData)
    if (preceding) {
        return {
            startAngle: preceding.endAngle,
            endAngle: preceding.endAngle,
        }
    }
 
    const following = findFollowing(i, identity, prevData, newData)
    if (following) {
        return {
            startAngle: following.startAngle,
            endAngle: following.startAngle,
        }
    }
 
    return null
}
 
/**
 * Find the element in prevData that joins the highest preceding element in newData.
 *
 * @param {Number}   i
 * @param {function} identity
 * @param {Array}    prevData
 * @param {Array}    newData
 * @returns {*}
 */
export const findPreceding = (i, identity, prevData, newData) => {
    const m = prevData.length
 
    while (--i >= 0) {
        let k = identity(newData[i])
 
        for (let j = 0; j < m; ++j) {
            if (identity(prevData[j]) === k) {
                return prevData[j]
            }
        }
    }
}
 
/**
 * Find the element in prevData that joins the lowest following element in newData.
 *
 * @param {Number}   i
 * @param {function} identity
 * @param {Array}    prevData
 * @param {Array}    newData
 * @returns {*}
 */
export const findFollowing = (i, identity, prevData, newData) => {
    const n = newData.length
    const m = prevData.length
 
    while (++i < n) {
        let k = identity(newData[i])
 
        for (let j = 0; j < m; ++j) {
            if (identity(prevData[j]) === k) {
                return prevData[j]
            }
        }
    }
}
 
export const midAngle = arc => arc.startAngle + (arc.endAngle - arc.startAngle) / 2