@solidports/recharts 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +40 -2
- package/dist/index.js +14238 -7174
- package/dist/{dev.js → index.jsx} +18367 -15900
- package/dist/server.js +48178 -0
- package/package.json +36 -19
- package/src/animation/AnimatedItems.tsx +0 -183
- package/src/animation/AnimationController.ts +0 -33
- package/src/animation/AnimationControllerImpl.ts +0 -36
- package/src/animation/AnimationHandle.ts +0 -307
- package/src/animation/CSSTransitionAnimate.tsx +0 -170
- package/src/animation/JavascriptAnimate.tsx +0 -119
- package/src/animation/easing.ts +0 -221
- package/src/animation/matchBy.ts +0 -164
- package/src/animation/timeoutController.ts +0 -70
- package/src/animation/useAnimationController.tsx +0 -34
- package/src/animation/useAnimationStartSnapshot.ts +0 -118
- package/src/animation/util.ts +0 -41
- package/src/cartesian/Area.tsx +0 -915
- package/src/cartesian/AreaRevealShape.tsx +0 -190
- package/src/cartesian/Bar.tsx +0 -1369
- package/src/cartesian/BarStack.tsx +0 -152
- package/src/cartesian/Brush.tsx +0 -951
- package/src/cartesian/CartesianAxis.tsx +0 -722
- package/src/cartesian/CartesianGrid.tsx +0 -711
- package/src/cartesian/ErrorBar.tsx +0 -361
- package/src/cartesian/Funnel.tsx +0 -803
- package/src/cartesian/GraphicalItemClipPath.tsx +0 -67
- package/src/cartesian/Line.tsx +0 -863
- package/src/cartesian/LineDrawShape.tsx +0 -89
- package/src/cartesian/ReferenceArea.tsx +0 -331
- package/src/cartesian/ReferenceDot.tsx +0 -304
- package/src/cartesian/ReferenceLine.tsx +0 -474
- package/src/cartesian/Scatter.tsx +0 -888
- package/src/cartesian/XAxis.tsx +0 -433
- package/src/cartesian/YAxis.tsx +0 -443
- package/src/cartesian/ZAxis.tsx +0 -155
- package/src/cartesian/cartesianPositionToCSSTranslate.tsx +0 -29
- package/src/cartesian/cartesianViewBoxToTrapezoid.tsx +0 -21
- package/src/cartesian/getCartesianPosition.tsx +0 -267
- package/src/cartesian/getEquidistantTicks.ts +0 -144
- package/src/cartesian/getTicks.ts +0 -225
- package/src/cartesian/isOutsidePosition.ts +0 -15
- package/src/cartesian/useAnimatedLineLength.ts +0 -54
- package/src/chart/AreaChart.tsx +0 -29
- package/src/chart/BarChart.tsx +0 -29
- package/src/chart/CartesianChart.tsx +0 -131
- package/src/chart/CategoricalChart.tsx +0 -94
- package/src/chart/ComposedChart.tsx +0 -29
- package/src/chart/FunnelChart.tsx +0 -29
- package/src/chart/LineChart.tsx +0 -29
- package/src/chart/PieChart.tsx +0 -50
- package/src/chart/PolarChart.tsx +0 -164
- package/src/chart/RadarChart.tsx +0 -70
- package/src/chart/RadialBarChart.tsx +0 -46
- package/src/chart/RechartsWrapper.tsx +0 -551
- package/src/chart/Sankey.tsx +0 -1534
- package/src/chart/ScatterChart.tsx +0 -29
- package/src/chart/SunburstChart.tsx +0 -504
- package/src/chart/Treemap.tsx +0 -1223
- package/src/chart/createInitialRootProps.ts +0 -24
- package/src/chart/types.ts +0 -53
- package/src/component/ActivePoints.tsx +0 -144
- package/src/component/Cell.tsx +0 -37
- package/src/component/Cursor.tsx +0 -185
- package/src/component/Customized.tsx +0 -50
- package/src/component/DefaultLegendContent.tsx +0 -348
- package/src/component/DefaultTooltipContent.tsx +0 -224
- package/src/component/Dots.tsx +0 -157
- package/src/component/Label.tsx +0 -636
- package/src/component/LabelList.tsx +0 -375
- package/src/component/Legend.tsx +0 -512
- package/src/component/ResponsiveContainer.tsx +0 -348
- package/src/component/Text.tsx +0 -541
- package/src/component/Tooltip.tsx +0 -470
- package/src/component/TooltipBoundingBox.tsx +0 -146
- package/src/component/responsiveContainerUtils.ts +0 -134
- package/src/container/ClipPathProvider.tsx +0 -51
- package/src/container/Layer.tsx +0 -38
- package/src/container/RootSurface.tsx +0 -120
- package/src/container/Surface.tsx +0 -61
- package/src/context/CellsContext.tsx +0 -54
- package/src/context/ErrorBarContext.tsx +0 -146
- package/src/context/GraphicalItemChildrenScope.tsx +0 -18
- package/src/context/PanoramaContext.tsx +0 -9
- package/src/context/RegisterGraphicalItemId.tsx +0 -30
- package/src/context/accessibilityContext.tsx +0 -6
- package/src/context/brushUpdateContext.tsx +0 -9
- package/src/context/chartDataContext.tsx +0 -97
- package/src/context/chartLayoutContext.tsx +0 -201
- package/src/context/legendPayloadContext.tsx +0 -20
- package/src/context/legendPortalContext.tsx +0 -12
- package/src/context/tooltipContext.tsx +0 -89
- package/src/context/tooltipPortalContext.tsx +0 -12
- package/src/context/useTooltipAxis.ts +0 -22
- package/src/hooks.ts +0 -476
- package/src/index.ts +0 -280
- package/src/polar/Pie.tsx +0 -1360
- package/src/polar/PolarAngleAxis.tsx +0 -616
- package/src/polar/PolarGrid.tsx +0 -312
- package/src/polar/PolarRadiusAxis.tsx +0 -547
- package/src/polar/Radar.tsx +0 -734
- package/src/polar/RadialBar.tsx +0 -917
- package/src/polar/defaultPolarAngleAxisProps.tsx +0 -27
- package/src/polar/defaultPolarRadiusAxisProps.tsx +0 -25
- package/src/shape/Cross.tsx +0 -89
- package/src/shape/Curve.tsx +0 -343
- package/src/shape/Dot.tsx +0 -70
- package/src/shape/Polygon.tsx +0 -195
- package/src/shape/Rectangle.tsx +0 -470
- package/src/shape/Sector.tsx +0 -347
- package/src/shape/Symbols.tsx +0 -139
- package/src/shape/Trapezoid.tsx +0 -280
- package/src/state/RechartsStateContext.tsx +0 -12
- package/src/state/RechartsStateProvider.tsx +0 -87
- package/src/state/RechartsStoreContext.tsx +0 -25
- package/src/state/RechartsStoreProvider.tsx +0 -35
- package/src/state/ReportChartProps.tsx +0 -40
- package/src/state/ReportEventSettings.tsx +0 -30
- package/src/state/ReportMainChartProps.tsx +0 -61
- package/src/state/ReportPolarOptions.tsx +0 -35
- package/src/state/SetGraphicalItem.ts +0 -79
- package/src/state/SetLegendPayload.ts +0 -134
- package/src/state/SetTooltipEntrySettings.tsx +0 -72
- package/src/state/actions.ts +0 -464
- package/src/state/brushSlice.ts +0 -13
- package/src/state/cartesianAxisSlice.ts +0 -141
- package/src/state/chartDataSlice.ts +0 -50
- package/src/state/chartState.ts +0 -297
- package/src/state/errorBarSlice.ts +0 -29
- package/src/state/eventSettingsSlice.ts +0 -8
- package/src/state/events.ts +0 -76
- package/src/state/externalEventsMiddleware.ts +0 -255
- package/src/state/graphicalItemsSlice.ts +0 -74
- package/src/state/hooks/useChartSelectors.tsx +0 -45
- package/src/state/keyboardEventsMiddleware.ts +0 -228
- package/src/state/layoutSlice.ts +0 -21
- package/src/state/legendSlice.ts +0 -57
- package/src/state/mouseEventsMiddleware.ts +0 -185
- package/src/state/optionsSlice.ts +0 -47
- package/src/state/polarAxisSlice.ts +0 -10
- package/src/state/polarOptionsSlice.ts +0 -12
- package/src/state/rawData.ts +0 -26
- package/src/state/referenceElementsSlice.ts +0 -40
- package/src/state/renderedTicksSlice.ts +0 -15
- package/src/state/rootPropsSlice.ts +0 -47
- package/src/state/selectors/areaSelectors.ts +0 -240
- package/src/state/selectors/arrayEqualityCheck.ts +0 -29
- package/src/state/selectors/axisSelectors.ts +0 -2157
- package/src/state/selectors/barSelectors.ts +0 -310
- package/src/state/selectors/barStackSelectors.ts +0 -77
- package/src/state/selectors/brushSelectors.ts +0 -33
- package/src/state/selectors/chartSelector.ts +0 -185
- package/src/state/selectors/combiners/combineActiveLabel.ts +0 -16
- package/src/state/selectors/combiners/combineActiveTooltipIndex.ts +0 -95
- package/src/state/selectors/combiners/combineAllBarPositions.ts +0 -122
- package/src/state/selectors/combiners/combineAxisRangeWithReverse.ts +0 -16
- package/src/state/selectors/combiners/combineBarPosition.ts +0 -23
- package/src/state/selectors/combiners/combineBarSizeList.ts +0 -80
- package/src/state/selectors/combiners/combineCheckedDomain.ts +0 -48
- package/src/state/selectors/combiners/combineConfiguredScale.ts +0 -111
- package/src/state/selectors/combiners/combineCoordinateForDefaultIndex.ts +0 -45
- package/src/state/selectors/combiners/combineDisplayedStackedData.ts +0 -50
- package/src/state/selectors/combiners/combineInverseScaleFunction.ts +0 -16
- package/src/state/selectors/combiners/combineRealScaleType.ts +0 -44
- package/src/state/selectors/combiners/combineStackedData.ts +0 -27
- package/src/state/selectors/combiners/combineTooltipInteractionState.ts +0 -86
- package/src/state/selectors/combiners/combineTooltipPayload.ts +0 -205
- package/src/state/selectors/combiners/combineTooltipPayloadConfigurations.ts +0 -58
- package/src/state/selectors/containerSelectors.ts +0 -12
- package/src/state/selectors/dataSelectors.ts +0 -88
- package/src/state/selectors/funnelSelectors.ts +0 -75
- package/src/state/selectors/graphicalItemSelectors.ts +0 -30
- package/src/state/selectors/legendSelectors.ts +0 -29
- package/src/state/selectors/lineSelectors.ts +0 -134
- package/src/state/selectors/numberDomainEqualityCheck.ts +0 -14
- package/src/state/selectors/pickAxisId.ts +0 -5
- package/src/state/selectors/pickAxisType.ts +0 -3
- package/src/state/selectors/pieSelectors.ts +0 -97
- package/src/state/selectors/polarAxisSelectors.ts +0 -201
- package/src/state/selectors/polarGridSelectors.ts +0 -28
- package/src/state/selectors/polarScaleSelectors.ts +0 -133
- package/src/state/selectors/polarSelectors.ts +0 -219
- package/src/state/selectors/radarSelectors.ts +0 -191
- package/src/state/selectors/radialBarSelectors.ts +0 -435
- package/src/state/selectors/rootPropsSelectors.ts +0 -25
- package/src/state/selectors/scatterSelectors.ts +0 -96
- package/src/state/selectors/selectActivePropsFromChartPointer.ts +0 -26
- package/src/state/selectors/selectAllAxes.ts +0 -17
- package/src/state/selectors/selectChartOffset.ts +0 -16
- package/src/state/selectors/selectChartOffsetInternal.ts +0 -136
- package/src/state/selectors/selectLegendArea.ts +0 -20
- package/src/state/selectors/selectPlotArea.ts +0 -22
- package/src/state/selectors/selectTooltipAxisId.ts +0 -7
- package/src/state/selectors/selectTooltipAxisType.ts +0 -32
- package/src/state/selectors/selectTooltipEventType.ts +0 -48
- package/src/state/selectors/selectTooltipPayloadSearcher.ts +0 -6
- package/src/state/selectors/selectTooltipSettings.ts +0 -39
- package/src/state/selectors/selectTooltipState.ts +0 -8
- package/src/state/selectors/selectors.ts +0 -271
- package/src/state/selectors/tooltipSelectors.ts +0 -578
- package/src/state/selectors/touchSelectors.ts +0 -31
- package/src/state/store.ts +0 -29
- package/src/state/storeIdentity.ts +0 -9
- package/src/state/teardownWrite.ts +0 -10
- package/src/state/tooltipInteraction.ts +0 -23
- package/src/state/tooltipSlice.ts +0 -334
- package/src/state/touchEventsMiddleware.ts +0 -214
- package/src/state/types/AnimationSettings.ts +0 -20
- package/src/state/types/AreaSettings.ts +0 -14
- package/src/state/types/BarSettings.ts +0 -15
- package/src/state/types/LineSettings.ts +0 -9
- package/src/state/types/PieSettings.ts +0 -34
- package/src/state/types/RadarSettings.ts +0 -5
- package/src/state/types/RadialBarSettings.ts +0 -10
- package/src/state/types/ScatterSettings.ts +0 -12
- package/src/state/types/StackedGraphicalItem.ts +0 -34
- package/src/state/useChartState.ts +0 -17
- package/src/state/zIndexSlice.ts +0 -39
- package/src/synchronisation/syncSelectors.ts +0 -7
- package/src/synchronisation/types.ts +0 -44
- package/src/synchronisation/useChartSynchronisation.tsx +0 -404
- package/src/theme/RechartsTheme.ts +0 -16
- package/src/theme/RechartsThemeContext.ts +0 -19
- package/src/theme/darkTheme.ts +0 -13
- package/src/theme/graphicalItemIdentity.ts +0 -70
- package/src/theme/legacyTheme.ts +0 -17
- package/src/theme/lightTheme.ts +0 -13
- package/src/types.ts +0 -54
- package/src/util/ActiveShapeUtils.tsx +0 -162
- package/src/util/BarUtils.tsx +0 -62
- package/src/util/BarePortal.tsx +0 -50
- package/src/util/CamelCaseSVGAttrs.ts +0 -34
- package/src/util/CartesianUtils.ts +0 -48
- package/src/util/ChartUtils.ts +0 -802
- package/src/util/Constants.ts +0 -42
- package/src/util/CssPrefixUtils.ts +0 -20
- package/src/util/DOMUtils.ts +0 -129
- package/src/util/DataUtils.ts +0 -216
- package/src/util/Events.ts +0 -16
- package/src/util/FunnelUtils.tsx +0 -15
- package/src/util/Global.ts +0 -12
- package/src/util/IfOverflow.ts +0 -15
- package/src/util/LRUCache.ts +0 -41
- package/src/util/LogUtils.ts +0 -22
- package/src/util/PolarUtils.ts +0 -132
- package/src/util/RadialBarUtils.tsx +0 -24
- package/src/util/ReactUtils.ts +0 -95
- package/src/util/ReduceCSSCalc.ts +0 -187
- package/src/util/ScatterUtils.tsx +0 -52
- package/src/util/ShapeElementProps.tsx +0 -87
- package/src/util/TickUtils.ts +0 -60
- package/src/util/XAxisUtils.ts +0 -48
- package/src/util/YAxisUtils.ts +0 -48
- package/src/util/axisPropsAreEqual.ts +0 -48
- package/src/util/createCartesianCharts.tsx +0 -150
- package/src/util/createEventProxy.ts +0 -20
- package/src/util/createPolarCharts.tsx +0 -112
- package/src/util/cursor/getCursorPoints.ts +0 -46
- package/src/util/cursor/getCursorRectangle.ts +0 -28
- package/src/util/cursor/getRadialCursorPoints.ts +0 -32
- package/src/util/excludeEventProps.ts +0 -171
- package/src/util/getActiveCoordinate.ts +0 -213
- package/src/util/getAxisTypeBasedOnLayout.ts +0 -21
- package/src/util/getClassNameFromUnknown.ts +0 -6
- package/src/util/getEveryNth.ts +0 -27
- package/src/util/getRadiusAndStrokeWidthFromDot.ts +0 -35
- package/src/util/getRelativeCoordinate.ts +0 -80
- package/src/util/getSliced.ts +0 -13
- package/src/util/hoverDedupe.ts +0 -41
- package/src/util/isDomainSpecifiedByUser.ts +0 -219
- package/src/util/isWellBehavedNumber.ts +0 -7
- package/src/util/pathTotalLength.ts +0 -25
- package/src/util/payload/getUniqPayload.ts +0 -28
- package/src/util/propsAreEqual.ts +0 -121
- package/src/util/resolveDefaultProps.ts +0 -161
- package/src/util/round.ts +0 -32
- package/src/util/scale/CartesianScaleHelper.ts +0 -72
- package/src/util/scale/CustomScaleDefinition.ts +0 -81
- package/src/util/scale/RechartsScale.ts +0 -130
- package/src/util/scale/createCategoricalInverse.ts +0 -72
- package/src/util/scale/getNiceTickValues.ts +0 -311
- package/src/util/scale/index.ts +0 -2
- package/src/util/scale/util/arithmetic.ts +0 -54
- package/src/util/solid-1-compat.ts +0 -310
- package/src/util/solidJsxCamelAugment.d.ts +0 -84
- package/src/util/stacks/getStackSeriesIdentifier.ts +0 -21
- package/src/util/stacks/stackTypes.ts +0 -60
- package/src/util/structurallyEqual.ts +0 -31
- package/src/util/svgPropertiesAndEvents.ts +0 -53
- package/src/util/svgPropertiesNoEvents.ts +0 -571
- package/src/util/tooltip/translate.ts +0 -171
- package/src/util/typedDataKey.ts +0 -48
- package/src/util/types.ts +0 -1560
- package/src/util/useAnimationId.ts +0 -31
- package/src/util/useElementOffset.ts +0 -110
- package/src/util/useId.ts +0 -8
- package/src/util/usePrefersReducedMotion.ts +0 -48
- package/src/util/useReportScale.ts +0 -24
- package/src/util/useUniqueId.ts +0 -30
- package/src/zIndex/DefaultZIndexes.ts +0 -84
- package/src/zIndex/ZIndexLayer.tsx +0 -121
- package/src/zIndex/ZIndexPortal.tsx +0 -79
- package/src/zIndex/getZIndexFromUnknown.ts +0 -14
- package/src/zIndex/zIndexSelectors.ts +0 -48
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/* eslint-disable import/no-cycle */
|
|
2
|
-
import {
|
|
3
|
-
noInteraction,
|
|
4
|
-
TooltipIndex,
|
|
5
|
-
TooltipInteractionState,
|
|
6
|
-
TooltipState,
|
|
7
|
-
} from "../../tooltipSlice"
|
|
8
|
-
import { TooltipEventType } from "../../../util/types"
|
|
9
|
-
import { TooltipTrigger } from "../../../chart/types"
|
|
10
|
-
|
|
11
|
-
function chooseAppropriateMouseInteraction(
|
|
12
|
-
tooltipState: TooltipState,
|
|
13
|
-
tooltipEventType: TooltipEventType,
|
|
14
|
-
trigger: TooltipTrigger,
|
|
15
|
-
): TooltipInteractionState | undefined {
|
|
16
|
-
if (tooltipEventType === "axis") {
|
|
17
|
-
if (trigger === "click") {
|
|
18
|
-
return tooltipState.axisInteraction.click
|
|
19
|
-
}
|
|
20
|
-
return tooltipState.axisInteraction.hover
|
|
21
|
-
}
|
|
22
|
-
if (trigger === "click") {
|
|
23
|
-
return tooltipState.itemInteraction.click
|
|
24
|
-
}
|
|
25
|
-
return tooltipState.itemInteraction.hover
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function hasBeenActivePreviously(tooltipInteractionState: TooltipInteractionState): boolean {
|
|
29
|
-
return tooltipInteractionState.index != null
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export const combineTooltipInteractionState = (
|
|
33
|
-
tooltipState: TooltipState,
|
|
34
|
-
tooltipEventType: TooltipEventType | undefined,
|
|
35
|
-
trigger: TooltipTrigger,
|
|
36
|
-
defaultIndex: TooltipIndex | undefined,
|
|
37
|
-
): TooltipInteractionState => {
|
|
38
|
-
if (tooltipEventType == null) {
|
|
39
|
-
return noInteraction
|
|
40
|
-
}
|
|
41
|
-
const appropriateMouseInteraction = chooseAppropriateMouseInteraction(
|
|
42
|
-
tooltipState,
|
|
43
|
-
tooltipEventType,
|
|
44
|
-
trigger,
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
if (appropriateMouseInteraction == null) {
|
|
48
|
-
return noInteraction
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
if (appropriateMouseInteraction.active) {
|
|
52
|
-
return appropriateMouseInteraction
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (tooltipState.keyboardInteraction.active) {
|
|
56
|
-
return tooltipState.keyboardInteraction
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
if (tooltipState.syncInteraction.active && tooltipState.syncInteraction.index != null) {
|
|
60
|
-
return tooltipState.syncInteraction
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const activeFromProps = tooltipState.settings.active === true
|
|
64
|
-
|
|
65
|
-
if (hasBeenActivePreviously(appropriateMouseInteraction)) {
|
|
66
|
-
if (activeFromProps) {
|
|
67
|
-
return {
|
|
68
|
-
...appropriateMouseInteraction,
|
|
69
|
-
active: true,
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
} else if (defaultIndex != null) {
|
|
73
|
-
return {
|
|
74
|
-
active: true,
|
|
75
|
-
coordinate: undefined,
|
|
76
|
-
dataKey: undefined,
|
|
77
|
-
graphicalItemId: undefined,
|
|
78
|
-
index: defaultIndex,
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
return {
|
|
83
|
-
...noInteraction,
|
|
84
|
-
coordinate: appropriateMouseInteraction.coordinate,
|
|
85
|
-
}
|
|
86
|
-
}
|
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
/* eslint-disable import/no-cycle */
|
|
2
|
-
import {
|
|
3
|
-
TooltipEntrySettings,
|
|
4
|
-
TooltipIndex,
|
|
5
|
-
TooltipPayload,
|
|
6
|
-
TooltipPayloadConfiguration,
|
|
7
|
-
TooltipPayloadEntry,
|
|
8
|
-
TooltipPayloadSearcher,
|
|
9
|
-
} from "../../tooltipSlice"
|
|
10
|
-
import { ChartData, ChartDataState } from "../../chartDataSlice"
|
|
11
|
-
import { DataKey, TooltipEventType } from "../../../util/types"
|
|
12
|
-
import { findEntryInArray } from "../../../util/DataUtils"
|
|
13
|
-
import { getTooltipEntry, getValueByDataKey } from "../../../util/ChartUtils"
|
|
14
|
-
import { getSliced } from "../../../util/getSliced"
|
|
15
|
-
import { ActiveLabel } from "../../../synchronisation/types"
|
|
16
|
-
|
|
17
|
-
type TooltipPayloadItemLike = {
|
|
18
|
-
name: TooltipEntrySettings["name"]
|
|
19
|
-
unit: TooltipEntrySettings["unit"]
|
|
20
|
-
dataKey: DataKey<unknown> | undefined
|
|
21
|
-
payload: unknown
|
|
22
|
-
color: string | undefined
|
|
23
|
-
fill: string | undefined
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function parseName(value: unknown): TooltipEntrySettings["name"] {
|
|
27
|
-
if (typeof value === "string" || typeof value === "number") {
|
|
28
|
-
return value
|
|
29
|
-
}
|
|
30
|
-
return undefined
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function parseUnit(value: unknown): TooltipEntrySettings["unit"] {
|
|
34
|
-
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
35
|
-
return value
|
|
36
|
-
}
|
|
37
|
-
return undefined
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function parseDataKey(value: unknown): DataKey<unknown> | undefined {
|
|
41
|
-
if (typeof value === "string" || typeof value === "number") {
|
|
42
|
-
return value
|
|
43
|
-
}
|
|
44
|
-
if (typeof value === "function") {
|
|
45
|
-
return (obj: unknown) => value(obj)
|
|
46
|
-
}
|
|
47
|
-
return undefined
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function parseColor(value: unknown): string | undefined {
|
|
51
|
-
if (typeof value === "string") {
|
|
52
|
-
return value
|
|
53
|
-
}
|
|
54
|
-
return undefined
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
function parseTooltipPayloadItem(item: unknown): TooltipPayloadItemLike | undefined {
|
|
58
|
-
if (item == null || typeof item !== "object") {
|
|
59
|
-
return undefined
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const name = "name" in item ? parseName(item.name) : undefined
|
|
63
|
-
const unit = "unit" in item ? parseUnit(item.unit) : undefined
|
|
64
|
-
const dataKey = "dataKey" in item ? parseDataKey(item.dataKey) : undefined
|
|
65
|
-
const payload = "payload" in item ? item.payload : undefined
|
|
66
|
-
const color = "color" in item ? parseColor(item.color) : undefined
|
|
67
|
-
const fill = "fill" in item ? parseColor(item.fill) : undefined
|
|
68
|
-
|
|
69
|
-
return {
|
|
70
|
-
color,
|
|
71
|
-
dataKey,
|
|
72
|
-
fill,
|
|
73
|
-
name,
|
|
74
|
-
payload,
|
|
75
|
-
unit,
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function selectFinalData(
|
|
80
|
-
dataDefinedOnItem: unknown,
|
|
81
|
-
dataDefinedOnChart: ChartData | undefined,
|
|
82
|
-
): unknown {
|
|
83
|
-
/*
|
|
84
|
-
* If a payload has data specified directly from the graphical item, prefer that.
|
|
85
|
-
* Otherwise, fill in data from the chart level, using the same index.
|
|
86
|
-
*/
|
|
87
|
-
if (dataDefinedOnItem != null) {
|
|
88
|
-
return dataDefinedOnItem
|
|
89
|
-
}
|
|
90
|
-
return dataDefinedOnChart
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export const combineTooltipPayload = (
|
|
94
|
-
tooltipPayloadConfigurations: ReadonlyArray<TooltipPayloadConfiguration>,
|
|
95
|
-
activeIndex: TooltipIndex,
|
|
96
|
-
chartDataState: ChartDataState,
|
|
97
|
-
tooltipAxisDataKey: DataKey<unknown> | undefined,
|
|
98
|
-
activeLabel: ActiveLabel,
|
|
99
|
-
tooltipPayloadSearcher: TooltipPayloadSearcher | undefined,
|
|
100
|
-
tooltipEventType: TooltipEventType | undefined,
|
|
101
|
-
): TooltipPayload | undefined => {
|
|
102
|
-
if (activeIndex == null || tooltipPayloadSearcher == null) {
|
|
103
|
-
return undefined
|
|
104
|
-
}
|
|
105
|
-
const { chartData, computedData, dataStartIndex, dataEndIndex } = chartDataState
|
|
106
|
-
|
|
107
|
-
const init: Array<TooltipPayloadEntry> = []
|
|
108
|
-
|
|
109
|
-
return tooltipPayloadConfigurations.reduce(
|
|
110
|
-
(agg, { dataDefinedOnItem, settings }): Array<TooltipPayloadEntry> => {
|
|
111
|
-
const finalData = selectFinalData(dataDefinedOnItem, chartData)
|
|
112
|
-
|
|
113
|
-
const sliced = Array.isArray(finalData)
|
|
114
|
-
? getSliced(finalData, dataStartIndex, dataEndIndex)
|
|
115
|
-
: finalData
|
|
116
|
-
|
|
117
|
-
const finalDataKey: DataKey<unknown> | undefined = settings?.dataKey ?? tooltipAxisDataKey
|
|
118
|
-
const finalNameKey: DataKey<unknown> | undefined = settings?.nameKey
|
|
119
|
-
let tooltipPayload: unknown
|
|
120
|
-
if (
|
|
121
|
-
tooltipAxisDataKey &&
|
|
122
|
-
Array.isArray(sliced) &&
|
|
123
|
-
/*
|
|
124
|
-
* findEntryInArray won't work for Scatter because Scatter provides an array of arrays
|
|
125
|
-
* as tooltip payloads and findEntryInArray is not prepared to handle that.
|
|
126
|
-
* Sad but also ScatterChart only allows 'item' tooltipEventType
|
|
127
|
-
* and also this is only a problem if there are multiple Scatters and each has its own data array
|
|
128
|
-
* so let's fix that some other time.
|
|
129
|
-
*/
|
|
130
|
-
!Array.isArray(sliced[0]) &&
|
|
131
|
-
/*
|
|
132
|
-
* If the tooltipEventType is 'axis', we should search for the dataKey in the sliced data
|
|
133
|
-
* because thanks to allowDuplicatedCategory=false, the order of elements in the array
|
|
134
|
-
* no longer matches the order of elements in the original data
|
|
135
|
-
* and so we need to search by the active dataKey + label rather than by index.
|
|
136
|
-
*
|
|
137
|
-
* The same happens if multiple graphical items are present in the chart
|
|
138
|
-
* and each of them has its own data array. Those arrays get concatenated
|
|
139
|
-
* and again the tooltip index no longer matches the original data.
|
|
140
|
-
*
|
|
141
|
-
* On the other hand the tooltipEventType 'item' should always search by index
|
|
142
|
-
* because we get the index from interacting over the individual elements
|
|
143
|
-
* which is always accurate, irrespective of the allowDuplicatedCategory setting.
|
|
144
|
-
*/
|
|
145
|
-
tooltipEventType === "axis"
|
|
146
|
-
) {
|
|
147
|
-
tooltipPayload = findEntryInArray(sliced, tooltipAxisDataKey, activeLabel)
|
|
148
|
-
if (tooltipPayload == null) {
|
|
149
|
-
tooltipPayload = tooltipPayloadSearcher(
|
|
150
|
-
sliced,
|
|
151
|
-
activeIndex,
|
|
152
|
-
computedData,
|
|
153
|
-
finalNameKey,
|
|
154
|
-
)
|
|
155
|
-
}
|
|
156
|
-
} else {
|
|
157
|
-
/*
|
|
158
|
-
* This is a problem because it assumes that the index is pointing to the displayed data
|
|
159
|
-
* which it isn't because the index is pointing to the tooltip ticks array.
|
|
160
|
-
* The above approach (with findEntryInArray) is the correct one, but it only works
|
|
161
|
-
* if the axis dataKey is defined explicitly, and if the data is an array of objects.
|
|
162
|
-
*/
|
|
163
|
-
tooltipPayload = tooltipPayloadSearcher(sliced, activeIndex, computedData, finalNameKey)
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
if (Array.isArray(tooltipPayload)) {
|
|
167
|
-
tooltipPayload.forEach((item) => {
|
|
168
|
-
const parsedItem = parseTooltipPayloadItem(item)
|
|
169
|
-
const itemName = parsedItem?.name
|
|
170
|
-
const itemDataKey = parsedItem?.dataKey
|
|
171
|
-
const itemPayload = parsedItem?.payload
|
|
172
|
-
const newSettings: TooltipEntrySettings = {
|
|
173
|
-
...settings,
|
|
174
|
-
/* Preserve item-level color/fill from graphical items. */
|
|
175
|
-
color: parsedItem?.color ?? settings?.color,
|
|
176
|
-
fill: parsedItem?.fill ?? settings?.fill,
|
|
177
|
-
name: itemName,
|
|
178
|
-
unit: parsedItem?.unit,
|
|
179
|
-
}
|
|
180
|
-
agg.push(
|
|
181
|
-
getTooltipEntry({
|
|
182
|
-
dataKey: itemDataKey,
|
|
183
|
-
name: itemName == null ? undefined : String(itemName),
|
|
184
|
-
payload: itemPayload,
|
|
185
|
-
tooltipEntrySettings: newSettings,
|
|
186
|
-
value: getValueByDataKey(itemPayload, itemDataKey),
|
|
187
|
-
}),
|
|
188
|
-
)
|
|
189
|
-
})
|
|
190
|
-
} else {
|
|
191
|
-
agg.push(
|
|
192
|
-
getTooltipEntry({
|
|
193
|
-
dataKey: finalDataKey,
|
|
194
|
-
name: getValueByDataKey(tooltipPayload, finalNameKey) ?? settings?.name,
|
|
195
|
-
payload: tooltipPayload,
|
|
196
|
-
tooltipEntrySettings: settings,
|
|
197
|
-
value: getValueByDataKey(tooltipPayload, finalDataKey),
|
|
198
|
-
}),
|
|
199
|
-
)
|
|
200
|
-
}
|
|
201
|
-
return agg
|
|
202
|
-
},
|
|
203
|
-
init,
|
|
204
|
-
)
|
|
205
|
-
}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/* eslint-disable import/no-cycle */
|
|
2
|
-
import { TooltipIndex, TooltipPayloadConfiguration, TooltipState } from "../../tooltipSlice"
|
|
3
|
-
import { TooltipEventType } from "../../../util/types"
|
|
4
|
-
import { TooltipTrigger } from "../../../chart/types"
|
|
5
|
-
import { GraphicalItemId } from "../../graphicalItemsSlice"
|
|
6
|
-
|
|
7
|
-
export const combineTooltipPayloadConfigurations = (
|
|
8
|
-
tooltipState: TooltipState,
|
|
9
|
-
tooltipEventType: TooltipEventType | undefined,
|
|
10
|
-
trigger: TooltipTrigger,
|
|
11
|
-
defaultIndex: TooltipIndex | undefined,
|
|
12
|
-
): ReadonlyArray<TooltipPayloadConfiguration> => {
|
|
13
|
-
/* if tooltip reacts to axis interaction, then we display all items at the same time. */
|
|
14
|
-
if (tooltipEventType === "axis") {
|
|
15
|
-
return tooltipState.tooltipItemPayloads
|
|
16
|
-
}
|
|
17
|
-
/*
|
|
18
|
-
* By now we already know that tooltipEventType is 'item', so we can only search in itemInteractions.
|
|
19
|
-
* item means that only the hovered or clicked item will be present in the tooltip.
|
|
20
|
-
*/
|
|
21
|
-
if (tooltipState.tooltipItemPayloads.length === 0) {
|
|
22
|
-
/* No point filtering if the payload is empty */
|
|
23
|
-
return []
|
|
24
|
-
}
|
|
25
|
-
let filterByGraphicalItemId: GraphicalItemId | undefined
|
|
26
|
-
if (trigger === "hover") {
|
|
27
|
-
filterByGraphicalItemId = tooltipState.itemInteraction.hover.graphicalItemId
|
|
28
|
-
} else {
|
|
29
|
-
filterByGraphicalItemId = tooltipState.itemInteraction.click.graphicalItemId
|
|
30
|
-
}
|
|
31
|
-
if (tooltipState.syncInteraction.active && filterByGraphicalItemId == null) {
|
|
32
|
-
/*
|
|
33
|
-
* When a tooltip is synchronised from another chart, the local itemInteraction
|
|
34
|
-
* has no graphicalItemId because the user hasn't hovered over this chart.
|
|
35
|
-
* In that case we show all tooltip items so the receiving chart can display
|
|
36
|
-
* its own data at the synced index — matching the behaviour of axis-type tooltips.
|
|
37
|
-
*/
|
|
38
|
-
return tooltipState.tooltipItemPayloads
|
|
39
|
-
}
|
|
40
|
-
if (
|
|
41
|
-
filterByGraphicalItemId == null &&
|
|
42
|
-
(defaultIndex != null || tooltipState.keyboardInteraction.active)
|
|
43
|
-
) {
|
|
44
|
-
/*
|
|
45
|
-
* So when we use `defaultIndex` - we don't have a dataKey to filter by because user did not hover over anything yet.
|
|
46
|
-
* In that case let's display the first item in the tooltip; after all, this is `item` interaction case,
|
|
47
|
-
* so we should display only one item at a time instead of all.
|
|
48
|
-
*/
|
|
49
|
-
const firstItemPayload = tooltipState.tooltipItemPayloads[0]
|
|
50
|
-
if (firstItemPayload != null) {
|
|
51
|
-
return [firstItemPayload]
|
|
52
|
-
}
|
|
53
|
-
return []
|
|
54
|
-
}
|
|
55
|
-
return tooltipState.tooltipItemPayloads.filter(
|
|
56
|
-
(tpc) => tpc.settings?.graphicalItemId === filterByGraphicalItemId,
|
|
57
|
-
)
|
|
58
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/* eslint-disable import/no-cycle */
|
|
2
|
-
import { ChartState } from "../store"
|
|
3
|
-
import { Margin } from "../../util/types"
|
|
4
|
-
|
|
5
|
-
export const selectChartWidth = (state: ChartState): number => state.layout.width
|
|
6
|
-
|
|
7
|
-
export const selectChartHeight = (state: ChartState): number => state.layout.height
|
|
8
|
-
|
|
9
|
-
export const selectContainerScale: (state: ChartState) => number = (state) =>
|
|
10
|
-
state.layout.scale
|
|
11
|
-
|
|
12
|
-
export const selectMargin = (state: ChartState): Margin => state.layout.margin
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/* eslint-disable import/no-cycle */
|
|
2
|
-
import { ChartState } from "../store"
|
|
3
|
-
import { chartSelector } from "./chartSelector"
|
|
4
|
-
import { ChartData, ChartDataState } from "../chartDataSlice"
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* This selector always returns the data with the indexes set by a Brush.
|
|
8
|
-
* Trouble is, that might or might not be what you want.
|
|
9
|
-
*
|
|
10
|
-
* In charts with Brush, you will sometimes want to select the full range of data, and sometimes the one decided by the Brush
|
|
11
|
-
* - even if the Brush is active, the panorama inside the Brush should show the full range of data.
|
|
12
|
-
*
|
|
13
|
-
* So instead of this selector, consider using either selectChartDataAndAlwaysIgnoreIndexes or selectChartDataWithIndexesIfNotInPanorama
|
|
14
|
-
*
|
|
15
|
-
* @param state ChartState
|
|
16
|
-
* @returns data defined on the chart root element, such as BarChart or ScatterChart
|
|
17
|
-
*/
|
|
18
|
-
export const selectChartDataWithIndexes = (state: ChartState): ChartDataState =>
|
|
19
|
-
state.chartData
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* This selector will always return the full range of data, ignoring the indexes set by a Brush.
|
|
23
|
-
* Useful for when you want to render the full range of data, even if a Brush is active.
|
|
24
|
-
* For example: in the Brush panorama, in Legend, in Tooltip.
|
|
25
|
-
*/
|
|
26
|
-
export const selectChartDataAndAlwaysIgnoreIndexes = chartSelector(function selectChartDataAndAlwaysIgnoreIndexes(state: ChartState): ChartDataState {
|
|
27
|
-
const dataState = selectChartDataWithIndexes(state)
|
|
28
|
-
const dataEndIndex = dataState.chartData != null ? dataState.chartData.length - 1 : 0
|
|
29
|
-
return {
|
|
30
|
-
chartData: dataState.chartData,
|
|
31
|
-
computedData: dataState.computedData,
|
|
32
|
-
dataEndIndex,
|
|
33
|
-
dataStartIndex: 0,
|
|
34
|
-
}
|
|
35
|
-
})
|
|
36
|
-
|
|
37
|
-
export const selectChartDataWithIndexesIfNotInPanoramaPosition4 = chartSelector((
|
|
38
|
-
state: ChartState,
|
|
39
|
-
_unused1: unknown,
|
|
40
|
-
_unused2: unknown,
|
|
41
|
-
isPanorama: boolean,
|
|
42
|
-
): ChartDataState => {
|
|
43
|
-
if (isPanorama) {
|
|
44
|
-
return selectChartDataAndAlwaysIgnoreIndexes(state)
|
|
45
|
-
}
|
|
46
|
-
return selectChartDataWithIndexes(state)
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Returns the chart-level data sliced by the Brush indexes (full range in the panorama).
|
|
51
|
-
*/
|
|
52
|
-
export const selectChartDataSliceIfNotInPanorama = chartSelector((
|
|
53
|
-
state: ChartState,
|
|
54
|
-
_unused1: unknown,
|
|
55
|
-
_unused2: unknown,
|
|
56
|
-
isPanorama: boolean,
|
|
57
|
-
): ChartData => {
|
|
58
|
-
const { chartData, dataStartIndex, dataEndIndex } = selectChartDataWithIndexesIfNotInPanoramaPosition4(
|
|
59
|
-
state,
|
|
60
|
-
_unused1,
|
|
61
|
-
_unused2,
|
|
62
|
-
isPanorama,
|
|
63
|
-
)
|
|
64
|
-
return chartData != null ? chartData.slice(dataStartIndex, dataEndIndex + 1) : []
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
export const selectChartDataWithIndexesIfNotInPanoramaPosition3 = chartSelector((
|
|
68
|
-
state: ChartState,
|
|
69
|
-
_unused1: unknown,
|
|
70
|
-
isPanorama: boolean,
|
|
71
|
-
): ChartDataState => {
|
|
72
|
-
if (isPanorama) {
|
|
73
|
-
return selectChartDataAndAlwaysIgnoreIndexes(state)
|
|
74
|
-
}
|
|
75
|
-
return selectChartDataWithIndexes(state)
|
|
76
|
-
})
|
|
77
|
-
|
|
78
|
-
/** Chart-level data slice ignoring Brush indexes (polar charts always use the full range). */
|
|
79
|
-
export const selectChartDataSliceIgnoringIndexes = chartSelector(function selectChartDataSliceIgnoringIndexes(state: ChartState): ChartData {
|
|
80
|
-
const { chartData, dataStartIndex, dataEndIndex } = selectChartDataAndAlwaysIgnoreIndexes(state)
|
|
81
|
-
return chartData != null ? chartData.slice(dataStartIndex, dataEndIndex + 1) : []
|
|
82
|
-
})
|
|
83
|
-
|
|
84
|
-
/** Chart-level data slice honoring Brush indexes (tooltip never renders in the panorama). */
|
|
85
|
-
export const selectChartDataSliceWithIndexes = chartSelector(function selectChartDataSliceWithIndexes(state: ChartState): ChartData {
|
|
86
|
-
const { chartData, dataStartIndex, dataEndIndex } = selectChartDataWithIndexes(state)
|
|
87
|
-
return chartData != null ? chartData.slice(dataStartIndex, dataEndIndex + 1) : []
|
|
88
|
-
})
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
/* eslint-disable import/no-cycle */
|
|
2
|
-
import { computeFunnelTrapezoids, type FunnelTrapezoidItem } from "../../cartesian/Funnel"
|
|
3
|
-
import type { ChartData } from "../chartDataSlice"
|
|
4
|
-
import type { ChartState } from "../store"
|
|
5
|
-
import { selectChartOffsetInternal } from "./selectChartOffsetInternal"
|
|
6
|
-
import { selectChartDataAndAlwaysIgnoreIndexes } from "./dataSelectors"
|
|
7
|
-
import type { ChartOffsetInternal, DataKey, TooltipType } from "../../util/types"
|
|
8
|
-
import { chartSelector } from "./chartSelector"
|
|
9
|
-
import type { GraphicalItemId } from "../graphicalItemsSlice"
|
|
10
|
-
|
|
11
|
-
export type ResolvedFunnelSettings = {
|
|
12
|
-
dataKey: DataKey<unknown>
|
|
13
|
-
data: ChartData | undefined
|
|
14
|
-
nameKey: DataKey<unknown>
|
|
15
|
-
tooltipType?: TooltipType
|
|
16
|
-
lastShapeType?: "triangle" | "rectangle"
|
|
17
|
-
reversed?: boolean
|
|
18
|
-
customWidth?: string | number
|
|
19
|
-
cells: ReadonlyArray<Record<string, unknown>>
|
|
20
|
-
presentationProps: Record<string, unknown> | null
|
|
21
|
-
id: GraphicalItemId
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export const selectFunnelTrapezoids = chartSelector(function selectFunnelTrapezoids(state: ChartState, funnelSettings: ResolvedFunnelSettings): ReadonlyArray<FunnelTrapezoidItem> {
|
|
25
|
-
const offset: ChartOffsetInternal = selectChartOffsetInternal(state)
|
|
26
|
-
const { chartData } = selectChartDataAndAlwaysIgnoreIndexes(state)
|
|
27
|
-
const {
|
|
28
|
-
data,
|
|
29
|
-
dataKey,
|
|
30
|
-
nameKey,
|
|
31
|
-
tooltipType,
|
|
32
|
-
lastShapeType,
|
|
33
|
-
reversed,
|
|
34
|
-
customWidth,
|
|
35
|
-
cells,
|
|
36
|
-
presentationProps,
|
|
37
|
-
id: graphicalItemId,
|
|
38
|
-
} = funnelSettings
|
|
39
|
-
|
|
40
|
-
let displayedData: ChartData | undefined
|
|
41
|
-
if (data != null && data.length > 0) {
|
|
42
|
-
displayedData = data
|
|
43
|
-
} else if (chartData != null && chartData.length > 0) {
|
|
44
|
-
displayedData = chartData
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if (displayedData && displayedData.length) {
|
|
48
|
-
displayedData = displayedData.map((entry: unknown, index: number) =>
|
|
49
|
-
Object.assign(
|
|
50
|
-
{ payload: entry },
|
|
51
|
-
presentationProps,
|
|
52
|
-
entry as Record<string, unknown>,
|
|
53
|
-
cells && cells[index] ? cells[index] : undefined,
|
|
54
|
-
),
|
|
55
|
-
)
|
|
56
|
-
} else if (cells && cells.length) {
|
|
57
|
-
displayedData = cells.map((cell: Record<string, unknown>) =>
|
|
58
|
-
Object.assign({}, presentationProps, cell),
|
|
59
|
-
)
|
|
60
|
-
} else {
|
|
61
|
-
return []
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return computeFunnelTrapezoids({
|
|
65
|
-
customWidth,
|
|
66
|
-
dataKey,
|
|
67
|
-
displayedData,
|
|
68
|
-
graphicalItemId,
|
|
69
|
-
lastShapeType,
|
|
70
|
-
nameKey,
|
|
71
|
-
offset,
|
|
72
|
-
reversed,
|
|
73
|
-
tooltipType,
|
|
74
|
-
})
|
|
75
|
-
})
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/* eslint-disable import/no-cycle */
|
|
2
|
-
import type { ChartState } from "../store"
|
|
3
|
-
import type { GraphicalItemId } from "../graphicalItemsSlice"
|
|
4
|
-
import { AxisId, defaultAxisId } from "../cartesianAxisSlice"
|
|
5
|
-
import type { CartesianItemState } from "../chartState"
|
|
6
|
-
import { chartSelector } from "./chartSelector"
|
|
7
|
-
import { readChartState } from "../chartState"
|
|
8
|
-
|
|
9
|
-
function isCartesianItem(item: { type: string }): item is CartesianItemState {
|
|
10
|
-
return (
|
|
11
|
-
item.type === "line" ||
|
|
12
|
-
item.type === "area" ||
|
|
13
|
-
item.type === "bar" ||
|
|
14
|
-
item.type === "scatter"
|
|
15
|
-
)
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export const selectXAxisIdFromGraphicalItemId = chartSelector(function selectXAxisIdFromGraphicalItemId(state: ChartState, id: GraphicalItemId): AxisId {
|
|
19
|
-
const graphicalItems = readChartState(state).graphicalItems
|
|
20
|
-
const entry = graphicalItems?.[id]
|
|
21
|
-
if (entry == null || !isCartesianItem(entry)) return defaultAxisId
|
|
22
|
-
return entry.settings.xAxisId ?? defaultAxisId
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
export const selectYAxisIdFromGraphicalItemId = chartSelector(function selectYAxisIdFromGraphicalItemId(state: ChartState, id: GraphicalItemId): AxisId {
|
|
26
|
-
const graphicalItems = readChartState(state).graphicalItems
|
|
27
|
-
const entry = graphicalItems?.[id]
|
|
28
|
-
if (entry == null || !isCartesianItem(entry)) return defaultAxisId
|
|
29
|
-
return entry.settings.yAxisId ?? defaultAxisId
|
|
30
|
-
})
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/* eslint-disable import/no-cycle */
|
|
2
|
-
import sortBy from "es-toolkit/compat/sortBy"
|
|
3
|
-
import type { ChartState } from "../store"
|
|
4
|
-
import type { LegendSettings } from "../legendSlice"
|
|
5
|
-
import type { LegendPayload } from "../../component/DefaultLegendContent"
|
|
6
|
-
import type { Size } from "../../util/types"
|
|
7
|
-
import { chartSelector } from "./chartSelector"
|
|
8
|
-
import { readChartState } from "../chartState"
|
|
9
|
-
|
|
10
|
-
export const selectLegendSettings = (state: ChartState): LegendSettings => {
|
|
11
|
-
return readChartState(state).legend.settings
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export const selectLegendSize = (state: ChartState): Size => {
|
|
15
|
-
return readChartState(state).legend.size
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const selectAllLegendPayload2DArray = (
|
|
19
|
-
state: ChartState,
|
|
20
|
-
): ReadonlyArray<ReadonlyArray<LegendPayload>> => {
|
|
21
|
-
return readChartState(state).legend.payload
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export const selectLegendPayload = chartSelector(function selectLegendPayload(state: ChartState): ReadonlyArray<LegendPayload> {
|
|
25
|
-
const payloads = selectAllLegendPayload2DArray(state)
|
|
26
|
-
const { itemSorter } = selectLegendSettings(state)
|
|
27
|
-
const flat = payloads.flat(1)
|
|
28
|
-
return itemSorter ? sortBy(flat, itemSorter) : flat
|
|
29
|
-
})
|