diff --git a/packages/circle-packing/package.json b/packages/circle-packing/package.json index 65629ca650..1e497e46d6 100644 --- a/packages/circle-packing/package.json +++ b/packages/circle-packing/package.json @@ -33,9 +33,7 @@ "@nivo/tooltip": "0.68.0", "d3-hierarchy": "^1.1.8", "lodash": "^4.17.11", - "react-motion": "^0.5.2", - "react-spring": "9.0.0-rc.3", - "recompose": "^0.30.0" + "react-spring": "9.1.2" }, "devDependencies": { "@nivo/core": "0.68.0", diff --git a/packages/circle-packing/src/CirclePacking.tsx b/packages/circle-packing/src/CirclePacking.tsx index 98ca29d81a..0f5cbfd7d0 100644 --- a/packages/circle-packing/src/CirclePacking.tsx +++ b/packages/circle-packing/src/CirclePacking.tsx @@ -139,8 +139,8 @@ const InnerCirclePacking = ({ role={role} > {layers.map((layer, i) => { - if (layerById[layer as CirclePackLayerId] !== undefined) { - return layerById[layer as CirclePackLayerId] + if (layerById[layer as CirclePackingLayerId] !== undefined) { + return layerById[layer as CirclePackingLayerId] } if (typeof layer === 'function') { @@ -154,10 +154,10 @@ const InnerCirclePacking = ({ } export const CirclePacking = ({ + theme, isInteractive = defaultProps.isInteractive, animate = defaultProps.animate, motionConfig = defaultProps.motionConfig, - theme, ...otherProps }: Partial, 'data' | 'width' | 'height'>> & Pick, 'data' | 'width' | 'height'>) => ( diff --git a/packages/circle-packing/src/Circles.tsx b/packages/circle-packing/src/Circles.tsx index 9972031b70..437f8aeedd 100644 --- a/packages/circle-packing/src/Circles.tsx +++ b/packages/circle-packing/src/Circles.tsx @@ -120,7 +120,7 @@ export const Circles = ({ opacity: number } >(nodes, { - key: node => node.id, + keys: node => node.id, initial: transitionPhases.update, from: transitionPhases.enter, enter: transitionPhases.update, @@ -147,6 +147,6 @@ export const Circles = ({ onClick: handleClick, }) })} - + ) } diff --git a/packages/circle-packing/src/Labels.tsx b/packages/circle-packing/src/Labels.tsx index b5cb051d1b..ff780c1e3c 100644 --- a/packages/circle-packing/src/Labels.tsx +++ b/packages/circle-packing/src/Labels.tsx @@ -68,7 +68,7 @@ export const Labels = ({ opacity: number } >(labels, { - key: label => label.node.id, + keys: label => label.node.id, initial: transitionPhases.update, from: transitionPhases.enter, enter: transitionPhases.update, diff --git a/packages/circle-packing/src/ResponsiveBubbleHtml.js b/packages/circle-packing/src/ResponsiveBubbleHtml.js deleted file mode 100644 index 53381efc06..0000000000 --- a/packages/circle-packing/src/ResponsiveBubbleHtml.js +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react' -import { ResponsiveWrapper } from '@nivo/core' -import BubbleHtml from './BubbleHtml' - -const ResponsiveBubbleHtml = props => ( - - {({ width, height }) => } - -) - -export default ResponsiveBubbleHtml diff --git a/packages/circle-packing/src/ResponsiveCirclePacking.tsx b/packages/circle-packing/src/ResponsiveCirclePacking.tsx index ab2ece24f5..91fe4afdb9 100644 --- a/packages/circle-packing/src/ResponsiveCirclePacking.tsx +++ b/packages/circle-packing/src/ResponsiveCirclePacking.tsx @@ -1,7 +1,7 @@ import React from 'react' import { ResponsiveWrapper } from '@nivo/core' +import { CirclePackingSvgProps } from './types' import { CirclePacking } from './CirclePacking' -import { CirclePackSvgProps } from './types' type ResponsiveCirclePackingProps = Partial< Omit, 'data' | 'width' | 'height'> diff --git a/packages/circle-packing/src/hooks.ts b/packages/circle-packing/src/hooks.ts index d42181e4cf..42ab46481c 100644 --- a/packages/circle-packing/src/hooks.ts +++ b/packages/circle-packing/src/hooks.ts @@ -17,10 +17,11 @@ import { MouseHandlers, } from './types' -export const useCirclePacking = >({ +export const useCirclePacking = ({ data, id, value, + valueFormat, width, height, padding, @@ -30,9 +31,10 @@ export const useCirclePacking = >({ inheritColorFromParent, childColor, }: { - data: RawDatum - id: CirclePackSvgProps['id'] - value: CirclePackSvgProps['value'] + data: CirclePackingCommonProps['data'] + id: CirclePackingCommonProps['id'] + value: CirclePackingCommonProps['value'] + valueFormat?: CirclePackingCommonProps['valueFormat'] width: number height: number padding: CirclePackingCommonProps['padding'] @@ -44,6 +46,7 @@ export const useCirclePacking = >({ }): ComputedDatum[] => { const getId = usePropertyAccessor(id) const getValue = usePropertyAccessor(value) + const formatValue = useValueFormatter(valueFormat) const getColor = useOrdinalColorScale, 'color' | 'fill'>>( colors, @@ -57,10 +60,9 @@ export const useCirclePacking = >({ // this ensures that we don't mutate the input data const clonedData = cloneDeep(data) - const hierarchy = d3Hierarchy(clonedData).sum(getValue) - - const pack = d3Pack().size([width, height]).padding(padding) + const hierarchy = d3Hierarchy(clonedData).sum(getValue) + const pack = d3Pack().size([width, height]).padding(padding) const packedData = pack(hierarchy) const nodes = leavesOnly ? packedData.leaves() : packedData.descendants() @@ -73,7 +75,7 @@ export const useCirclePacking = >({ const total = hierarchy.value ?? 0 - const computedNodes = sortedNodes.reduce>((acc, descendant) => { + const computedNodes = sortedNodes.reduce[]>((acc, descendant) => { const id = getId(descendant.data) const value = descendant.value! const percentage = (100 * value) / total @@ -89,7 +91,7 @@ export const useCirclePacking = >({ path, value, percentage, - //formattedValue: valueFormat ? formatValue(value) : `${percentage.toFixed(2)}%`, + formattedValue: valueFormat ? formatValue(value) : `${percentage.toFixed(2)}%`, x: descendant.x, y: descendant.y, radius: descendant.r, diff --git a/packages/circle-packing/src/types.ts b/packages/circle-packing/src/types.ts index 35f2184efc..92e4808a24 100644 --- a/packages/circle-packing/src/types.ts +++ b/packages/circle-packing/src/types.ts @@ -30,13 +30,15 @@ export interface ComputedDatum { parent?: ComputedDatum } -export type CirclePackLayerId = 'circles' | 'labels' +export type CirclePackingLayerId = 'circles' | 'labels' -export interface CirclePackCustomLayerProps> {} +export interface CirclePackingCustomLayerProps { + nodes: ComputedDatum[] +} -export type CirclePackCustomLayer = React.FC> +export type CirclePackingCustomLayer = React.FC> -export type CirclePackLayer = CirclePackLayerId | CirclePackCustomLayer +export type CirclePackingLayer = CirclePackingLayerId | CirclePackingCustomLayer export type MouseHandler = ( datum: ComputedDatum,