source: node_modules/recharts/es6/state/selectors/tooltipSelectors.js

Last change on this file was a762898, checked in by istevanoska <ilinastevanoska@…>, 5 months ago

Added visualizations

  • Property mode set to 100644
File size: 13.8 KB
Line 
1import { createSelector } from 'reselect';
2import { combineAppliedValues, combineAreasDomain, combineAxisDomain, combineAxisDomainWithNiceTicks, combineCategoricalDomain, combineDisplayedData, combineDomainOfAllAppliedNumericalValuesIncludingErrorValues, combineDomainOfStackGroups, combineDotsDomain, combineDuplicateDomain, combineGraphicalItemsData, combineGraphicalItemsSettings, combineLinesDomain, combineNiceTicks, combineNumericalDomain, combineRealScaleType, combineScaleFunction, combineStackGroups, filterGraphicalNotStackedItems, filterReferenceElements, getDomainDefinition, itemAxisPredicate, mergeDomains, selectAllErrorBarSettings, selectAxisRange, selectHasBar, selectReferenceAreas, selectReferenceDots, selectReferenceLines, selectTooltipAxis, selectTooltipAxisDataKey } from './axisSelectors';
3import { selectChartLayout } from '../../context/chartLayoutContext';
4import { isCategoricalAxis } from '../../util/ChartUtils';
5import { selectChartDataWithIndexes } from './dataSelectors';
6import { selectChartName, selectReverseStackOrder, selectStackOffsetType } from './rootPropsSelectors';
7import { isNotNil, mathSign } from '../../util/DataUtils';
8import { combineAxisRangeWithReverse } from './combiners/combineAxisRangeWithReverse';
9import { combineTooltipEventType, selectDefaultTooltipEventType, selectValidateTooltipEventTypes } from './selectTooltipEventType';
10import { combineActiveLabel } from './combiners/combineActiveLabel';
11import { selectTooltipSettings } from './selectTooltipSettings';
12import { combineTooltipInteractionState } from './combiners/combineTooltipInteractionState';
13import { combineActiveTooltipIndex } from './combiners/combineActiveTooltipIndex';
14import { combineCoordinateForDefaultIndex } from './combiners/combineCoordinateForDefaultIndex';
15import { selectChartHeight, selectChartWidth } from './containerSelectors';
16import { selectChartOffsetInternal } from './selectChartOffsetInternal';
17import { combineTooltipPayloadConfigurations } from './combiners/combineTooltipPayloadConfigurations';
18import { selectTooltipPayloadSearcher } from './selectTooltipPayloadSearcher';
19import { selectTooltipState } from './selectTooltipState';
20import { combineTooltipPayload } from './combiners/combineTooltipPayload';
21import { selectTooltipAxisId } from './selectTooltipAxisId';
22import { selectTooltipAxisType } from './selectTooltipAxisType';
23import { combineDisplayedStackedData } from './combiners/combineDisplayedStackedData';
24import { isStacked } from '../types/StackedGraphicalItem';
25import { numericalDomainSpecifiedWithoutRequiringData } from '../../util/isDomainSpecifiedByUser';
26import { numberDomainEqualityCheck } from './numberDomainEqualityCheck';
27import { emptyArraysAreEqualCheck } from './arrayEqualityCheck';
28import { isWellBehavedNumber } from '../../util/isWellBehavedNumber';
29export var selectTooltipAxisRealScaleType = createSelector([selectTooltipAxis, selectHasBar, selectChartName], combineRealScaleType);
30export var selectAllUnfilteredGraphicalItems = createSelector([state => state.graphicalItems.cartesianItems, state => state.graphicalItems.polarItems], (cartesianItems, polarItems) => [...cartesianItems, ...polarItems]);
31var selectTooltipAxisPredicate = createSelector([selectTooltipAxisType, selectTooltipAxisId], itemAxisPredicate);
32export var selectAllGraphicalItemsSettings = createSelector([selectAllUnfilteredGraphicalItems, selectTooltipAxis, selectTooltipAxisPredicate], combineGraphicalItemsSettings, {
33 memoizeOptions: {
34 resultEqualityCheck: emptyArraysAreEqualCheck
35 }
36});
37var selectAllStackedGraphicalItemsSettings = createSelector([selectAllGraphicalItemsSettings], graphicalItems => graphicalItems.filter(isStacked));
38export var selectTooltipGraphicalItemsData = createSelector([selectAllGraphicalItemsSettings], combineGraphicalItemsData, {
39 memoizeOptions: {
40 resultEqualityCheck: emptyArraysAreEqualCheck
41 }
42});
43
44/**
45 * Data for tooltip always use the data with indexes set by a Brush,
46 * and never accept the isPanorama flag:
47 * because Tooltip never displays inside the panorama anyway
48 * so we don't need to worry what would happen there.
49 */
50export var selectTooltipDisplayedData = createSelector([selectTooltipGraphicalItemsData, selectChartDataWithIndexes], combineDisplayedData);
51var selectTooltipStackedData = createSelector([selectAllStackedGraphicalItemsSettings, selectChartDataWithIndexes, selectTooltipAxis], combineDisplayedStackedData);
52var selectAllTooltipAppliedValues = createSelector([selectTooltipDisplayedData, selectTooltipAxis, selectAllGraphicalItemsSettings], combineAppliedValues);
53var selectTooltipAxisDomainDefinition = createSelector([selectTooltipAxis], getDomainDefinition);
54var selectTooltipDataOverflow = createSelector([selectTooltipAxis], axisSettings => axisSettings.allowDataOverflow);
55var selectTooltipDomainFromUserPreferences = createSelector([selectTooltipAxisDomainDefinition, selectTooltipDataOverflow], numericalDomainSpecifiedWithoutRequiringData);
56var selectAllStackedGraphicalItems = createSelector([selectAllGraphicalItemsSettings], graphicalItems => graphicalItems.filter(isStacked));
57var selectTooltipStackGroups = createSelector([selectTooltipStackedData, selectAllStackedGraphicalItems, selectStackOffsetType, selectReverseStackOrder], combineStackGroups);
58var selectTooltipDomainOfStackGroups = createSelector([selectTooltipStackGroups, selectChartDataWithIndexes, selectTooltipAxisType, selectTooltipDomainFromUserPreferences], combineDomainOfStackGroups);
59var selectTooltipItemsSettingsExceptStacked = createSelector([selectAllGraphicalItemsSettings], filterGraphicalNotStackedItems);
60var selectDomainOfAllAppliedNumericalValuesIncludingErrorValues = createSelector([selectTooltipDisplayedData, selectTooltipAxis, selectTooltipItemsSettingsExceptStacked, selectAllErrorBarSettings, selectTooltipAxisType], combineDomainOfAllAppliedNumericalValuesIncludingErrorValues, {
61 memoizeOptions: {
62 resultEqualityCheck: numberDomainEqualityCheck
63 }
64});
65var selectReferenceDotsByTooltipAxis = createSelector([selectReferenceDots, selectTooltipAxisType, selectTooltipAxisId], filterReferenceElements);
66var selectTooltipReferenceDotsDomain = createSelector([selectReferenceDotsByTooltipAxis, selectTooltipAxisType], combineDotsDomain);
67var selectReferenceAreasByTooltipAxis = createSelector([selectReferenceAreas, selectTooltipAxisType, selectTooltipAxisId], filterReferenceElements);
68var selectTooltipReferenceAreasDomain = createSelector([selectReferenceAreasByTooltipAxis, selectTooltipAxisType], combineAreasDomain);
69var selectReferenceLinesByTooltipAxis = createSelector([selectReferenceLines, selectTooltipAxisType, selectTooltipAxisId], filterReferenceElements);
70var selectTooltipReferenceLinesDomain = createSelector([selectReferenceLinesByTooltipAxis, selectTooltipAxisType], combineLinesDomain);
71var selectTooltipReferenceElementsDomain = createSelector([selectTooltipReferenceDotsDomain, selectTooltipReferenceLinesDomain, selectTooltipReferenceAreasDomain], mergeDomains);
72var selectTooltipNumericalDomain = createSelector([selectTooltipAxis, selectTooltipAxisDomainDefinition, selectTooltipDomainFromUserPreferences, selectTooltipDomainOfStackGroups, selectDomainOfAllAppliedNumericalValuesIncludingErrorValues, selectTooltipReferenceElementsDomain, selectChartLayout, selectTooltipAxisType], combineNumericalDomain);
73export var selectTooltipAxisDomain = createSelector([selectTooltipAxis, selectChartLayout, selectTooltipDisplayedData, selectAllTooltipAppliedValues, selectStackOffsetType, selectTooltipAxisType, selectTooltipNumericalDomain], combineAxisDomain);
74var selectTooltipNiceTicks = createSelector([selectTooltipAxisDomain, selectTooltipAxis, selectTooltipAxisRealScaleType], combineNiceTicks);
75export var selectTooltipAxisDomainIncludingNiceTicks = createSelector([selectTooltipAxis, selectTooltipAxisDomain, selectTooltipNiceTicks, selectTooltipAxisType], combineAxisDomainWithNiceTicks);
76var selectTooltipAxisRange = state => {
77 var axisType = selectTooltipAxisType(state);
78 var axisId = selectTooltipAxisId(state);
79 var isPanorama = false; // Tooltip never displays in panorama so this is safe to assume
80 return selectAxisRange(state, axisType, axisId, isPanorama);
81};
82export var selectTooltipAxisRangeWithReverse = createSelector([selectTooltipAxis, selectTooltipAxisRange], combineAxisRangeWithReverse);
83export var selectTooltipAxisScale = createSelector([selectTooltipAxis, selectTooltipAxisRealScaleType, selectTooltipAxisDomainIncludingNiceTicks, selectTooltipAxisRangeWithReverse], combineScaleFunction);
84var selectTooltipDuplicateDomain = createSelector([selectChartLayout, selectAllTooltipAppliedValues, selectTooltipAxis, selectTooltipAxisType], combineDuplicateDomain);
85export var selectTooltipCategoricalDomain = createSelector([selectChartLayout, selectAllTooltipAppliedValues, selectTooltipAxis, selectTooltipAxisType], combineCategoricalDomain);
86var combineTicksOfTooltipAxis = (layout, axis, realScaleType, scale, range, duplicateDomain, categoricalDomain, axisType) => {
87 if (!axis) {
88 return undefined;
89 }
90 var {
91 type
92 } = axis;
93 var isCategorical = isCategoricalAxis(layout, axisType);
94 if (!scale) {
95 return undefined;
96 }
97 var offsetForBand = realScaleType === 'scaleBand' && scale.bandwidth ? scale.bandwidth() / 2 : 2;
98 var offset = type === 'category' && scale.bandwidth ? scale.bandwidth() / offsetForBand : 0;
99 offset = axisType === 'angleAxis' && range != null && (range === null || range === void 0 ? void 0 : range.length) >= 2 ? mathSign(range[0] - range[1]) * 2 * offset : offset;
100
101 // When axis is a categorical axis, but the type of axis is number or the scale of axis is not "auto"
102 if (isCategorical && categoricalDomain) {
103 return categoricalDomain.map((entry, index) => {
104 var scaled = scale.map(entry);
105 if (!isWellBehavedNumber(scaled)) {
106 return null;
107 }
108 return {
109 coordinate: scaled + offset,
110 value: entry,
111 index,
112 offset
113 };
114 }).filter(isNotNil);
115 }
116
117 // When axis has duplicated text, serial numbers are used to generate scale
118 return scale.domain().map((entry, index) => {
119 var scaled = scale.map(entry);
120 if (!isWellBehavedNumber(scaled)) {
121 return null;
122 }
123 return {
124 coordinate: scaled + offset,
125 // @ts-expect-error can't use Date as an index
126 value: duplicateDomain ? duplicateDomain[entry] : entry,
127 index,
128 offset
129 };
130 }).filter(isNotNil);
131};
132
133/**
134 * Of on four almost identical implementations of tick generation.
135 * The four horsemen of tick generation are:
136 * - {@link selectTooltipAxisTicks}
137 * - {@link combineAxisTicks}
138 * - {@link getTicksOfAxis}.
139 * - {@link combineGraphicalItemTicks}
140 */
141export var selectTooltipAxisTicks = createSelector([selectChartLayout, selectTooltipAxis, selectTooltipAxisRealScaleType, selectTooltipAxisScale, selectTooltipAxisRange, selectTooltipDuplicateDomain, selectTooltipCategoricalDomain, selectTooltipAxisType], combineTicksOfTooltipAxis);
142var selectTooltipEventType = createSelector([selectDefaultTooltipEventType, selectValidateTooltipEventTypes, selectTooltipSettings], (defaultTooltipEventType, validateTooltipEventType, settings) => combineTooltipEventType(settings.shared, defaultTooltipEventType, validateTooltipEventType));
143var selectTooltipTrigger = state => state.tooltip.settings.trigger;
144var selectDefaultIndex = state => state.tooltip.settings.defaultIndex;
145var selectTooltipInteractionState = createSelector([selectTooltipState, selectTooltipEventType, selectTooltipTrigger, selectDefaultIndex], combineTooltipInteractionState);
146export var selectActiveTooltipIndex = createSelector([selectTooltipInteractionState, selectTooltipDisplayedData, selectTooltipAxisDataKey, selectTooltipAxisDomain], combineActiveTooltipIndex);
147export var selectActiveLabel = createSelector([selectTooltipAxisTicks, selectActiveTooltipIndex], combineActiveLabel);
148export var selectActiveTooltipDataKey = createSelector([selectTooltipInteractionState], tooltipInteraction => {
149 if (!tooltipInteraction) {
150 return undefined;
151 }
152 return tooltipInteraction.dataKey;
153});
154export var selectActiveTooltipGraphicalItemId = createSelector([selectTooltipInteractionState], tooltipInteraction => {
155 if (!tooltipInteraction) {
156 return undefined;
157 }
158 return tooltipInteraction.graphicalItemId;
159});
160var selectTooltipPayloadConfigurations = createSelector([selectTooltipState, selectTooltipEventType, selectTooltipTrigger, selectDefaultIndex], combineTooltipPayloadConfigurations);
161var selectTooltipCoordinateForDefaultIndex = createSelector([selectChartWidth, selectChartHeight, selectChartLayout, selectChartOffsetInternal, selectTooltipAxisTicks, selectDefaultIndex, selectTooltipPayloadConfigurations], combineCoordinateForDefaultIndex);
162export var selectActiveTooltipCoordinate = createSelector([selectTooltipInteractionState, selectTooltipCoordinateForDefaultIndex], (tooltipInteractionState, defaultIndexCoordinate) => {
163 if (tooltipInteractionState !== null && tooltipInteractionState !== void 0 && tooltipInteractionState.coordinate) {
164 return tooltipInteractionState.coordinate;
165 }
166 return defaultIndexCoordinate;
167});
168export var selectIsTooltipActive = createSelector([selectTooltipInteractionState], tooltipInteractionState => {
169 var _tooltipInteractionSt;
170 return (_tooltipInteractionSt = tooltipInteractionState === null || tooltipInteractionState === void 0 ? void 0 : tooltipInteractionState.active) !== null && _tooltipInteractionSt !== void 0 ? _tooltipInteractionSt : false;
171});
172export var selectActiveTooltipPayload = createSelector([selectTooltipPayloadConfigurations, selectActiveTooltipIndex, selectChartDataWithIndexes, selectTooltipAxisDataKey, selectActiveLabel, selectTooltipPayloadSearcher, selectTooltipEventType], combineTooltipPayload);
173export var selectActiveTooltipDataPoints = createSelector([selectActiveTooltipPayload], payload => {
174 if (payload == null) {
175 return undefined;
176 }
177 var dataPoints = payload.map(p => p.payload).filter(p => p != null);
178 return Array.from(new Set(dataPoints));
179});
Note: See TracBrowser for help on using the repository browser.