victory-core 36.5.0 → 36.5.3
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/victory-core.js +13817 -10827
- package/dist/victory-core.min.js +1 -1
- package/es/index.d.ts +7 -27
- package/es/index.js +7 -53
- package/es/{types.d.ts → types/callbacks.d.ts} +12 -8
- package/es/types/callbacks.js +2 -0
- package/es/types/prop-types.d.ts +130 -0
- package/es/types/prop-types.js +2 -0
- package/es/victory-accessible-group/victory-accessible-group.d.ts +1 -0
- package/es/victory-accessible-group/victory-accessible-group.js +2 -1
- package/es/victory-animation/util.d.ts +2 -1
- package/es/victory-animation/util.js +6 -4
- package/es/victory-animation/victory-animation.d.ts +1 -0
- package/es/victory-animation/victory-animation.js +2 -1
- package/es/victory-clip-container/victory-clip-container.d.ts +6 -5
- package/es/victory-clip-container/victory-clip-container.js +2 -1
- package/es/victory-container/victory-container.d.ts +8 -7
- package/es/victory-container/victory-container.js +2 -1
- package/es/victory-label/victory-label.d.ts +3 -2
- package/es/victory-label/victory-label.js +4 -4
- package/es/victory-portal/portal-context.d.ts +1 -0
- package/es/victory-portal/portal-context.js +2 -1
- package/es/victory-portal/portal.d.ts +3 -2
- package/es/victory-portal/portal.js +2 -1
- package/es/victory-portal/victory-portal.d.ts +1 -0
- package/es/victory-portal/victory-portal.js +2 -1
- package/es/victory-primitives/arc.d.ts +31 -2
- package/es/victory-primitives/arc.js +3 -2
- package/es/victory-primitives/background.d.ts +31 -2
- package/es/victory-primitives/background.js +3 -2
- package/es/victory-primitives/border.d.ts +28 -2
- package/es/victory-primitives/border.js +3 -2
- package/es/victory-primitives/circle.d.ts +1 -0
- package/es/victory-primitives/circle.js +2 -1
- package/es/victory-primitives/clip-path.d.ts +2 -1
- package/es/victory-primitives/clip-path.js +2 -1
- package/es/victory-primitives/index.d.ts +1 -0
- package/es/victory-primitives/index.js +2 -1
- package/es/victory-primitives/line-segment.d.ts +29 -2
- package/es/victory-primitives/line-segment.js +3 -2
- package/es/victory-primitives/line.d.ts +1 -0
- package/es/victory-primitives/line.js +2 -1
- package/es/victory-primitives/path.d.ts +1 -0
- package/es/victory-primitives/path.js +2 -1
- package/es/victory-primitives/point.d.ts +30 -2
- package/es/victory-primitives/point.js +3 -2
- package/es/victory-primitives/rect.d.ts +1 -0
- package/es/victory-primitives/rect.js +2 -1
- package/es/victory-primitives/text.d.ts +2 -1
- package/es/victory-primitives/text.js +2 -1
- package/es/victory-primitives/tspan.d.ts +2 -1
- package/es/victory-primitives/tspan.js +2 -1
- package/es/victory-primitives/types.d.ts +2 -1
- package/es/victory-primitives/types.js +2 -1
- package/es/victory-primitives/whisker.d.ts +37 -2
- package/es/victory-primitives/whisker.js +3 -2
- package/es/victory-state/defaults.d.ts +3 -0
- package/es/victory-state/defaults.js +3 -0
- package/es/victory-state/helpers/get-axis-data.d.ts +3 -0
- package/es/victory-state/helpers/get-axis-data.js +15 -0
- package/es/victory-state/helpers/get-data.d.ts +15 -0
- package/es/victory-state/helpers/get-data.js +88 -0
- package/es/victory-state/helpers/get-domain.d.ts +6 -0
- package/es/victory-state/helpers/get-domain.js +68 -0
- package/es/victory-state/helpers/get-range.d.ts +6 -0
- package/es/victory-state/helpers/get-range.js +37 -0
- package/es/victory-state/helpers/get-scale.d.ts +6 -0
- package/es/victory-state/helpers/get-scale.js +59 -0
- package/es/victory-state/index.d.ts +3 -0
- package/es/victory-state/index.js +3 -0
- package/es/victory-state/types.d.ts +24 -0
- package/es/victory-state/types.js +2 -0
- package/es/victory-state/victory-provider.d.ts +19 -0
- package/es/victory-state/victory-provider.js +118 -0
- package/es/victory-theme/grayscale.d.ts +2 -1
- package/es/victory-theme/grayscale.js +2 -1
- package/es/victory-theme/material.d.ts +2 -1
- package/es/victory-theme/material.js +2 -1
- package/{lib/victory-theme/victory-theme-definition.d.ts → es/victory-theme/types.d.ts} +3 -8
- package/es/victory-theme/types.js +2 -0
- package/es/victory-theme/victory-theme.d.ts +4 -3
- package/es/victory-theme/victory-theme.js +3 -2
- package/es/victory-transition/victory-transition.d.ts +1 -0
- package/es/victory-transition/victory-transition.js +2 -1
- package/es/victory-util/add-events.d.ts +106 -0
- package/es/victory-util/add-events.js +40 -33
- package/es/victory-util/axis.d.ts +51 -0
- package/es/victory-util/axis.js +9 -7
- package/es/victory-util/collection.d.ts +9 -0
- package/es/victory-util/collection.js +6 -4
- package/es/victory-util/common-props.d.ts +84 -0
- package/es/victory-util/common-props.js +29 -12
- package/es/victory-util/data.d.ts +75 -0
- package/es/victory-util/data.js +2 -1
- package/es/victory-util/default-transitions.d.ts +5 -0
- package/es/victory-util/default-transitions.js +2 -1
- package/es/victory-util/domain.d.ts +91 -0
- package/es/victory-util/domain.js +6 -2
- package/es/victory-util/events.d.ts +65 -0
- package/es/victory-util/events.js +13 -8
- package/es/victory-util/helpers.d.ts +61 -0
- package/es/victory-util/helpers.js +8 -4
- package/es/victory-util/hooks/index.d.ts +3 -0
- package/es/victory-util/hooks/index.js +2 -1
- package/es/victory-util/hooks/use-animation-state.js +4 -3
- package/es/victory-util/hooks/use-previous-props.d.ts +2 -0
- package/es/victory-util/hooks/use-previous-props.js +4 -3
- package/es/victory-util/immutable.d.ts +12 -0
- package/es/victory-util/immutable.js +5 -4
- package/es/victory-util/index.d.ts +29 -0
- package/es/victory-util/index.js +48 -0
- package/es/victory-util/label-helpers.d.ts +27 -0
- package/es/victory-util/label-helpers.js +2 -1
- package/es/victory-util/line-helpers.d.ts +5 -0
- package/es/victory-util/line-helpers.js +24 -6
- package/es/victory-util/log.d.ts +2 -0
- package/es/victory-util/log.js +2 -1
- package/es/victory-util/point-path-helpers.d.ts +1 -0
- package/es/victory-util/point-path-helpers.js +2 -1
- package/es/victory-util/prop-types.d.ts +51 -0
- package/es/victory-util/prop-types.js +35 -44
- package/es/victory-util/scale.d.ts +10 -0
- package/es/victory-util/scale.js +14 -6
- package/es/victory-util/selection.d.ts +25 -23
- package/es/victory-util/selection.js +25 -14
- package/es/victory-util/style.d.ts +19 -0
- package/es/victory-util/style.js +2 -1
- package/es/victory-util/textsize.d.ts +37 -8
- package/es/victory-util/textsize.js +9 -6
- package/es/victory-util/timer-context.d.ts +1 -0
- package/es/victory-util/timer-context.js +2 -1
- package/es/victory-util/timer.d.ts +3 -2
- package/es/victory-util/timer.js +2 -1
- package/es/victory-util/transitions.d.ts +49 -0
- package/es/victory-util/transitions.js +5 -4
- package/es/victory-util/type-helpers.d.ts +10 -0
- package/es/victory-util/type-helpers.js +28 -0
- package/es/victory-util/user-props.d.ts +21 -0
- package/es/victory-util/user-props.js +6 -5
- package/es/victory-util/with-container.d.ts +5 -0
- package/es/victory-util/with-container.js +32 -0
- package/es/victory-util/wrapper.d.ts +38 -0
- package/es/victory-util/wrapper.js +4 -3
- package/lib/index.d.ts +7 -27
- package/lib/index.js +58 -147
- package/lib/{types.d.ts → types/callbacks.d.ts} +12 -8
- package/lib/types/callbacks.js +2 -0
- package/lib/types/prop-types.d.ts +130 -0
- package/lib/types/prop-types.js +2 -0
- package/lib/victory-accessible-group/victory-accessible-group.d.ts +1 -0
- package/lib/victory-accessible-group/victory-accessible-group.js +2 -1
- package/lib/victory-animation/util.d.ts +2 -1
- package/lib/victory-animation/util.js +6 -4
- package/lib/victory-animation/victory-animation.d.ts +1 -0
- package/lib/victory-animation/victory-animation.js +2 -1
- package/lib/victory-clip-container/victory-clip-container.d.ts +6 -5
- package/lib/victory-clip-container/victory-clip-container.js +2 -1
- package/lib/victory-container/victory-container.d.ts +8 -7
- package/lib/victory-container/victory-container.js +2 -1
- package/lib/victory-label/victory-label.d.ts +3 -2
- package/lib/victory-label/victory-label.js +4 -4
- package/lib/victory-portal/portal-context.d.ts +1 -0
- package/lib/victory-portal/portal-context.js +2 -1
- package/lib/victory-portal/portal.d.ts +3 -2
- package/lib/victory-portal/portal.js +2 -1
- package/lib/victory-portal/victory-portal.d.ts +1 -0
- package/lib/victory-portal/victory-portal.js +2 -1
- package/lib/victory-primitives/arc.d.ts +31 -2
- package/lib/victory-primitives/arc.js +4 -3
- package/lib/victory-primitives/background.d.ts +31 -2
- package/lib/victory-primitives/background.js +4 -3
- package/lib/victory-primitives/border.d.ts +28 -2
- package/lib/victory-primitives/border.js +4 -3
- package/lib/victory-primitives/circle.d.ts +1 -0
- package/lib/victory-primitives/circle.js +2 -1
- package/lib/victory-primitives/clip-path.d.ts +2 -1
- package/lib/victory-primitives/clip-path.js +2 -1
- package/lib/victory-primitives/index.d.ts +1 -0
- package/lib/victory-primitives/index.js +2 -1
- package/lib/victory-primitives/line-segment.d.ts +29 -2
- package/lib/victory-primitives/line-segment.js +4 -3
- package/lib/victory-primitives/line.d.ts +1 -0
- package/lib/victory-primitives/line.js +2 -1
- package/lib/victory-primitives/path.d.ts +1 -0
- package/lib/victory-primitives/path.js +2 -1
- package/lib/victory-primitives/point.d.ts +30 -2
- package/lib/victory-primitives/point.js +4 -3
- package/lib/victory-primitives/rect.d.ts +1 -0
- package/lib/victory-primitives/rect.js +2 -1
- package/lib/victory-primitives/text.d.ts +2 -1
- package/lib/victory-primitives/text.js +2 -1
- package/lib/victory-primitives/tspan.d.ts +2 -1
- package/lib/victory-primitives/tspan.js +2 -1
- package/lib/victory-primitives/types.d.ts +2 -1
- package/lib/victory-primitives/types.js +2 -1
- package/lib/victory-primitives/whisker.d.ts +37 -2
- package/lib/victory-primitives/whisker.js +4 -3
- package/lib/victory-state/defaults.d.ts +3 -0
- package/lib/victory-state/defaults.js +11 -0
- package/lib/victory-state/helpers/get-axis-data.d.ts +3 -0
- package/lib/victory-state/helpers/get-axis-data.js +23 -0
- package/lib/victory-state/helpers/get-data.d.ts +15 -0
- package/lib/victory-state/helpers/get-data.js +99 -0
- package/lib/victory-state/helpers/get-domain.d.ts +6 -0
- package/lib/victory-state/helpers/get-domain.js +82 -0
- package/lib/victory-state/helpers/get-range.d.ts +6 -0
- package/lib/victory-state/helpers/get-range.js +46 -0
- package/lib/victory-state/helpers/get-scale.d.ts +6 -0
- package/lib/victory-state/helpers/get-scale.js +74 -0
- package/lib/victory-state/index.d.ts +3 -0
- package/lib/victory-state/index.js +32 -0
- package/lib/victory-state/types.d.ts +24 -0
- package/lib/victory-state/types.js +2 -0
- package/lib/victory-state/victory-provider.d.ts +19 -0
- package/lib/victory-state/victory-provider.js +144 -0
- package/lib/victory-theme/grayscale.d.ts +2 -1
- package/lib/victory-theme/grayscale.js +2 -1
- package/lib/victory-theme/material.d.ts +2 -1
- package/lib/victory-theme/material.js +2 -1
- package/{es/victory-theme/victory-theme-definition.d.ts → lib/victory-theme/types.d.ts} +3 -8
- package/lib/victory-theme/types.js +2 -0
- package/lib/victory-theme/victory-theme.d.ts +4 -3
- package/lib/victory-theme/victory-theme.js +6 -5
- package/lib/victory-transition/victory-transition.d.ts +1 -0
- package/lib/victory-transition/victory-transition.js +2 -1
- package/lib/victory-util/add-events.d.ts +106 -0
- package/lib/victory-util/add-events.js +40 -36
- package/lib/victory-util/axis.d.ts +51 -0
- package/lib/victory-util/axis.js +8 -6
- package/lib/victory-util/collection.d.ts +9 -0
- package/lib/victory-util/collection.js +6 -4
- package/lib/victory-util/common-props.d.ts +84 -0
- package/lib/victory-util/common-props.js +27 -12
- package/lib/victory-util/data.d.ts +75 -0
- package/lib/victory-util/data.js +2 -1
- package/lib/victory-util/default-transitions.d.ts +5 -0
- package/lib/victory-util/default-transitions.js +2 -1
- package/lib/victory-util/domain.d.ts +91 -0
- package/lib/victory-util/domain.js +6 -2
- package/lib/victory-util/events.d.ts +65 -0
- package/lib/victory-util/events.js +13 -9
- package/lib/victory-util/helpers.d.ts +61 -0
- package/lib/victory-util/helpers.js +8 -4
- package/lib/victory-util/hooks/index.d.ts +3 -0
- package/lib/victory-util/hooks/index.js +2 -1
- package/lib/victory-util/hooks/use-animation-state.js +4 -3
- package/lib/victory-util/hooks/use-previous-props.d.ts +2 -0
- package/lib/victory-util/hooks/use-previous-props.js +5 -6
- package/lib/victory-util/immutable.d.ts +12 -0
- package/lib/victory-util/immutable.js +5 -4
- package/lib/victory-util/index.d.ts +29 -0
- package/lib/victory-util/index.js +181 -0
- package/lib/victory-util/label-helpers.d.ts +27 -0
- package/lib/victory-util/label-helpers.js +2 -1
- package/lib/victory-util/line-helpers.d.ts +5 -0
- package/lib/victory-util/line-helpers.js +28 -7
- package/lib/victory-util/log.d.ts +2 -0
- package/lib/victory-util/log.js +2 -1
- package/lib/victory-util/point-path-helpers.d.ts +1 -0
- package/lib/victory-util/point-path-helpers.js +2 -1
- package/lib/victory-util/prop-types.d.ts +51 -0
- package/lib/victory-util/prop-types.js +36 -44
- package/lib/victory-util/scale.d.ts +10 -0
- package/lib/victory-util/scale.js +14 -5
- package/lib/victory-util/selection.d.ts +25 -23
- package/lib/victory-util/selection.js +25 -19
- package/lib/victory-util/style.d.ts +19 -0
- package/lib/victory-util/style.js +2 -1
- package/lib/victory-util/textsize.d.ts +37 -8
- package/lib/victory-util/textsize.js +9 -6
- package/lib/victory-util/timer-context.d.ts +1 -0
- package/lib/victory-util/timer-context.js +2 -1
- package/lib/victory-util/timer.d.ts +3 -2
- package/lib/victory-util/timer.js +2 -1
- package/lib/victory-util/transitions.d.ts +49 -0
- package/lib/victory-util/transitions.js +5 -4
- package/lib/victory-util/type-helpers.d.ts +10 -0
- package/lib/victory-util/type-helpers.js +45 -0
- package/lib/victory-util/user-props.d.ts +21 -0
- package/lib/victory-util/user-props.js +6 -5
- package/lib/victory-util/with-container.d.ts +5 -0
- package/lib/victory-util/with-container.js +44 -0
- package/lib/victory-util/wrapper.d.ts +38 -0
- package/lib/victory-util/wrapper.js +4 -3
- package/package.json +3 -3
- package/src/index.ts +9 -31
- package/src/{types.ts → types/callbacks.ts} +21 -13
- package/src/types/prop-types.ts +195 -0
- package/src/victory-accessible-group/victory-accessible-group.tsx +3 -3
- package/src/victory-animation/util.ts +3 -2
- package/src/victory-animation/victory-animation.tsx +13 -13
- package/src/victory-clip-container/victory-clip-container.tsx +23 -23
- package/src/victory-container/victory-container.tsx +19 -19
- package/src/victory-label/victory-label.tsx +41 -39
- package/src/victory-portal/portal.tsx +1 -1
- package/src/victory-portal/victory-portal.tsx +3 -3
- package/src/victory-primitives/arc.tsx +8 -6
- package/src/victory-primitives/background.tsx +8 -6
- package/src/victory-primitives/border.tsx +8 -6
- package/src/victory-primitives/clip-path.tsx +3 -3
- package/src/victory-primitives/line-segment.tsx +8 -6
- package/src/victory-primitives/point.tsx +10 -8
- package/src/victory-primitives/text.tsx +2 -2
- package/src/victory-primitives/tspan.tsx +1 -1
- package/src/victory-primitives/types.ts +1 -1
- package/src/victory-primitives/whisker.tsx +15 -13
- package/src/victory-state/defaults.ts +2 -0
- package/src/victory-state/helpers/get-axis-data.ts +14 -0
- package/src/victory-state/helpers/get-data.ts +79 -0
- package/src/victory-state/helpers/get-domain.ts +62 -0
- package/src/victory-state/helpers/get-range.ts +39 -0
- package/src/victory-state/helpers/get-scale.ts +64 -0
- package/src/victory-state/index.ts +2 -0
- package/src/victory-state/types.ts +32 -0
- package/src/victory-state/victory-provider.tsx +116 -0
- package/src/victory-theme/grayscale.tsx +62 -62
- package/src/victory-theme/material.tsx +67 -67
- package/src/victory-theme/{victory-theme-definition.ts → types.ts} +10 -14
- package/src/victory-theme/victory-theme.tsx +1 -1
- package/src/victory-transition/victory-transition.tsx +19 -19
- package/src/victory-util/{add-events.js → add-events.tsx} +136 -59
- package/src/victory-util/{axis.js → axis.tsx} +17 -18
- package/src/victory-util/{collection.js → collection.tsx} +14 -10
- package/src/victory-util/common-props.tsx +307 -0
- package/src/victory-util/{data.js → data.ts} +14 -10
- package/src/victory-util/{default-transitions.js → default-transitions.ts} +20 -18
- package/src/victory-util/{domain.js → domain.ts} +26 -23
- package/src/victory-util/{events.js → events.ts} +82 -31
- package/src/victory-util/{helpers.js → helpers.ts} +41 -22
- package/src/victory-util/hooks/{index.js → index.ts} +0 -0
- package/src/victory-util/hooks/use-animation-state.js +12 -12
- package/src/victory-util/hooks/use-previous-props.ts +9 -0
- package/src/victory-util/{immutable.js → immutable.ts} +14 -10
- package/src/victory-util/index.ts +28 -0
- package/src/victory-util/{label-helpers.js → label-helpers.ts} +7 -7
- package/src/victory-util/line-helpers.ts +104 -0
- package/src/victory-util/{log.js → log.ts} +1 -1
- package/src/victory-util/{prop-types.js → prop-types.ts} +103 -101
- package/src/victory-util/{scale.js → scale.ts} +29 -16
- package/src/victory-util/selection.ts +158 -0
- package/src/victory-util/{style.js → style.ts} +3 -3
- package/src/victory-util/{textsize.js → textsize.ts} +32 -17
- package/src/victory-util/timer-context.ts +1 -1
- package/src/victory-util/timer.ts +5 -10
- package/src/victory-util/{transitions.js → transitions.ts} +50 -22
- package/src/victory-util/type-helpers.ts +50 -0
- package/src/victory-util/{user-props.js → user-props.ts} +16 -11
- package/src/victory-util/with-container.tsx +41 -0
- package/src/victory-util/{wrapper.js → wrapper.tsx} +38 -33
- package/es/types.js +0 -1
- package/es/victory-theme/victory-theme-definition.js +0 -1
- package/es/victory-util/types.d.ts +0 -188
- package/es/victory-util/types.js +0 -1
- package/lib/types.js +0 -1
- package/lib/victory-theme/victory-theme-definition.js +0 -1
- package/lib/victory-util/types.d.ts +0 -188
- package/lib/victory-util/types.js +0 -1
- package/src/victory-util/common-props.js +0 -197
- package/src/victory-util/hooks/use-previous-props.js +0 -9
- package/src/victory-util/line-helpers.js +0 -54
- package/src/victory-util/selection.d.ts +0 -23
- package/src/victory-util/selection.js +0 -98
- package/src/victory-util/textsize.d.ts +0 -8
- package/src/victory-util/types.ts +0 -247
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AxisType, Datum, DomainValue } from "../../types/prop-types";
|
|
2
|
+
import { isKeyValueObject } from "../../victory-util/type-helpers";
|
|
3
|
+
|
|
4
|
+
export function getAxisData(data: Datum[], axis: AxisType) {
|
|
5
|
+
return data.reduce((acc, datum) => {
|
|
6
|
+
if (isKeyValueObject(datum)) {
|
|
7
|
+
const value = datum[axis];
|
|
8
|
+
if (value && typeof value !== "string") {
|
|
9
|
+
acc.push(value);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return acc;
|
|
13
|
+
}, [] as DomainValue[]);
|
|
14
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { get, isNil, orderBy } from "lodash";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { Datum, DatumValue } from "../../types/prop-types";
|
|
4
|
+
import { isKeyValueObject } from "../../victory-util/type-helpers";
|
|
5
|
+
import { VictoryProviderProps } from "../types";
|
|
6
|
+
|
|
7
|
+
type DataProps = Pick<
|
|
8
|
+
VictoryProviderProps,
|
|
9
|
+
"data" | "x" | "y" | "sortKey" | "sortOrder" | "samples"
|
|
10
|
+
>;
|
|
11
|
+
|
|
12
|
+
export interface FormattedDatum {
|
|
13
|
+
x: DatumValue;
|
|
14
|
+
y: DatumValue;
|
|
15
|
+
_x: number | Date;
|
|
16
|
+
_y: number | Date;
|
|
17
|
+
xName?: string;
|
|
18
|
+
yName?: string;
|
|
19
|
+
[key: string]: DatumValue;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function getValue(datum: Datum, key: string): DatumValue {
|
|
23
|
+
if (typeof datum === "object") {
|
|
24
|
+
return get(datum, key);
|
|
25
|
+
}
|
|
26
|
+
return datum;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function getNumericValue(value: DatumValue, fallback: number): number | Date {
|
|
30
|
+
if (typeof value === "number" || value instanceof Date) {
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
return fallback;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function getData({
|
|
37
|
+
x: xAccessor = "x",
|
|
38
|
+
y: yAccessor = "y",
|
|
39
|
+
sortKey,
|
|
40
|
+
sortOrder = "ascending",
|
|
41
|
+
data = [],
|
|
42
|
+
}: DataProps = {}): FormattedDatum[] {
|
|
43
|
+
const formattedData = data.reduce((nonNullData, datum, index) => {
|
|
44
|
+
const x = getValue(datum, xAccessor);
|
|
45
|
+
const y = getValue(datum, yAccessor);
|
|
46
|
+
if (isNil(x) || isNil(y)) {
|
|
47
|
+
return nonNullData;
|
|
48
|
+
}
|
|
49
|
+
const _x = getNumericValue(x, index + 1);
|
|
50
|
+
const _y = getNumericValue(y, index + 1);
|
|
51
|
+
|
|
52
|
+
// TODO: Get this value if it is different
|
|
53
|
+
const xName = typeof x === "string" ? x : undefined;
|
|
54
|
+
const yName = typeof y === "string" ? y : undefined;
|
|
55
|
+
|
|
56
|
+
const additionalProperties = isKeyValueObject(datum) ? datum : {};
|
|
57
|
+
|
|
58
|
+
return [
|
|
59
|
+
...nonNullData,
|
|
60
|
+
{
|
|
61
|
+
x,
|
|
62
|
+
y,
|
|
63
|
+
_x,
|
|
64
|
+
_y,
|
|
65
|
+
// Only set these properties if they exist
|
|
66
|
+
...(xName ? { xName } : {}),
|
|
67
|
+
...(yName ? { yName } : {}),
|
|
68
|
+
...additionalProperties,
|
|
69
|
+
},
|
|
70
|
+
];
|
|
71
|
+
}, [] as FormattedDatum[]);
|
|
72
|
+
|
|
73
|
+
if (sortKey) {
|
|
74
|
+
const order = sortOrder === "descending" ? "desc" : "asc";
|
|
75
|
+
return orderBy(formattedData, sortKey, order);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return formattedData;
|
|
79
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import * as d3Array from "victory-vendor/d3-array";
|
|
2
|
+
import { getAxisData } from "./get-axis-data";
|
|
3
|
+
import {
|
|
4
|
+
getValueForAxis,
|
|
5
|
+
isDate,
|
|
6
|
+
isTuple,
|
|
7
|
+
} from "../../victory-util/type-helpers";
|
|
8
|
+
import { VictoryProviderProps } from "../types";
|
|
9
|
+
import {
|
|
10
|
+
Tuple,
|
|
11
|
+
AxisType,
|
|
12
|
+
DomainTuple,
|
|
13
|
+
DomainValue,
|
|
14
|
+
} from "../../types/prop-types";
|
|
15
|
+
|
|
16
|
+
type DomainProps = Pick<
|
|
17
|
+
VictoryProviderProps,
|
|
18
|
+
"data" | "domain" | "maxDomain" | "minDomain" | "includeZero"
|
|
19
|
+
>;
|
|
20
|
+
|
|
21
|
+
// TODO: What should this default value be?
|
|
22
|
+
const DEFAULT_MIN = 0;
|
|
23
|
+
const DEFAULT_MAX = 1;
|
|
24
|
+
|
|
25
|
+
function getDomainFromMinMax(
|
|
26
|
+
min: number = DEFAULT_MIN,
|
|
27
|
+
max: number = DEFAULT_MAX,
|
|
28
|
+
): Tuple<number> {
|
|
29
|
+
// TODO: Victoy currently has some really specific logic in getDomainFromMinMax
|
|
30
|
+
// that adds or subtracts a very small number from each domain to avoid the min
|
|
31
|
+
// and max being the same value. This has resulted in some weird behavior in the
|
|
32
|
+
// past, so we should revisit this.
|
|
33
|
+
return [min, max];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function getDomain(
|
|
37
|
+
{ data = [], includeZero, ...props }: DomainProps,
|
|
38
|
+
axis: AxisType,
|
|
39
|
+
): DomainTuple {
|
|
40
|
+
const domainFromProps = getValueForAxis<DomainTuple>(props.domain, axis);
|
|
41
|
+
const axisData = getAxisData(data, axis);
|
|
42
|
+
|
|
43
|
+
if (includeZero && axis === "y") {
|
|
44
|
+
axisData.push(0);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (isTuple(domainFromProps)) {
|
|
48
|
+
return domainFromProps;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const [min, max] = d3Array.extent(axisData) as DomainTuple | Tuple<undefined>;
|
|
52
|
+
|
|
53
|
+
const minDomain = getValueForAxis<DomainValue>(props.minDomain, axis) || min;
|
|
54
|
+
const maxDomain = getValueForAxis<DomainValue>(props.maxDomain, axis) || max;
|
|
55
|
+
|
|
56
|
+
if (isDate(minDomain) && isDate(maxDomain)) {
|
|
57
|
+
return [min, max] as Tuple<Date>;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// TODO: There might be an edge case here where we have mixed types
|
|
61
|
+
return getDomainFromMinMax(minDomain as number, maxDomain as number);
|
|
62
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { AxisType, Padding, RangeTuple } from "../../types/prop-types";
|
|
2
|
+
import { getPadding } from "../../victory-util/helpers";
|
|
3
|
+
import { getValueForAxis, isTuple } from "../../victory-util/type-helpers";
|
|
4
|
+
import { VictoryProviderProps } from "../types";
|
|
5
|
+
|
|
6
|
+
type RangeProps = Pick<
|
|
7
|
+
VictoryProviderProps,
|
|
8
|
+
"range" | "padding" | "height" | "width"
|
|
9
|
+
>;
|
|
10
|
+
|
|
11
|
+
// TODO: Should we store these defaults somewhere?
|
|
12
|
+
const DEFAULT_HEIGHT = 300;
|
|
13
|
+
const DEFAULT_WIDTH = 450;
|
|
14
|
+
|
|
15
|
+
// TODO: This does not include polar range
|
|
16
|
+
export function getRange(
|
|
17
|
+
{
|
|
18
|
+
range,
|
|
19
|
+
height = DEFAULT_HEIGHT,
|
|
20
|
+
width = DEFAULT_WIDTH,
|
|
21
|
+
...props
|
|
22
|
+
}: RangeProps,
|
|
23
|
+
axis: AxisType,
|
|
24
|
+
) {
|
|
25
|
+
const rangeFromProps = getValueForAxis<RangeTuple>(range, axis);
|
|
26
|
+
|
|
27
|
+
if (isTuple(rangeFromProps)) {
|
|
28
|
+
return rangeFromProps;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// TODO: Convert this to TS
|
|
32
|
+
const padding = getPadding({ padding: props.padding }) as Padding;
|
|
33
|
+
const rangeForAxis = {
|
|
34
|
+
x: [padding.left, width - padding.right],
|
|
35
|
+
y: [height - padding.top, padding.bottom],
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
return rangeForAxis[axis];
|
|
39
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import {
|
|
2
|
+
scaleLinear,
|
|
3
|
+
scaleTime,
|
|
4
|
+
scaleLog,
|
|
5
|
+
scaleSqrt,
|
|
6
|
+
} from "victory-vendor/d3-scale";
|
|
7
|
+
import { AxisType, D3ScaleFn, ScalePropType } from "../../types/prop-types";
|
|
8
|
+
import * as Collection from "../../victory-util/collection";
|
|
9
|
+
import { getValueForAxis, isFunction } from "../../victory-util/type-helpers";
|
|
10
|
+
import { VictoryProviderProps } from "../types";
|
|
11
|
+
import { getAxisData } from "./get-axis-data";
|
|
12
|
+
|
|
13
|
+
type Scale = ScalePropType | D3ScaleFn;
|
|
14
|
+
|
|
15
|
+
type ScaleProps = Pick<VictoryProviderProps, "data" | "scale">;
|
|
16
|
+
|
|
17
|
+
const DEFAULT_SCALE = scaleLinear;
|
|
18
|
+
|
|
19
|
+
function isD3Scale(scale?: unknown): scale is D3ScaleFn {
|
|
20
|
+
return (
|
|
21
|
+
isFunction(scale) &&
|
|
22
|
+
isFunction(scale().copy) &&
|
|
23
|
+
isFunction(scale().domain) &&
|
|
24
|
+
isFunction(scale().range)
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function getD3ScaleFromString(scale: ScalePropType): D3ScaleFn {
|
|
29
|
+
switch (scale) {
|
|
30
|
+
case "linear":
|
|
31
|
+
return scaleLinear;
|
|
32
|
+
case "time":
|
|
33
|
+
return scaleTime;
|
|
34
|
+
case "log":
|
|
35
|
+
return scaleLog;
|
|
36
|
+
case "sqrt":
|
|
37
|
+
return scaleSqrt;
|
|
38
|
+
default:
|
|
39
|
+
return DEFAULT_SCALE;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function getScale(
|
|
44
|
+
{ data = [], ...props }: ScaleProps,
|
|
45
|
+
axis: AxisType,
|
|
46
|
+
): D3ScaleFn {
|
|
47
|
+
const scale = getValueForAxis<Scale>(props.scale, axis);
|
|
48
|
+
|
|
49
|
+
if (isD3Scale(scale)) {
|
|
50
|
+
return scale;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (typeof scale === "string") {
|
|
54
|
+
return getD3ScaleFromString(scale);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const axisData = getAxisData(data, axis);
|
|
58
|
+
|
|
59
|
+
if (Collection.containsDates(axisData)) {
|
|
60
|
+
return scaleTime;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return DEFAULT_SCALE;
|
|
64
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import {
|
|
2
|
+
D3ScaleFn,
|
|
3
|
+
Datum,
|
|
4
|
+
DomainTuple,
|
|
5
|
+
RangeTuple,
|
|
6
|
+
ScalePropType,
|
|
7
|
+
ValueOrAxes,
|
|
8
|
+
} from "../types/prop-types";
|
|
9
|
+
import { PaddingProps } from "../victory-theme/types";
|
|
10
|
+
|
|
11
|
+
// These are all the props that are used to calculate data, domain, range, and scale
|
|
12
|
+
export interface VictoryCalculatedStateProps {
|
|
13
|
+
data?: Datum[];
|
|
14
|
+
domain?: ValueOrAxes<DomainTuple>;
|
|
15
|
+
height?: number;
|
|
16
|
+
includeZero?: boolean;
|
|
17
|
+
maxDomain?: ValueOrAxes<number>;
|
|
18
|
+
minDomain?: ValueOrAxes<number>;
|
|
19
|
+
padding?: PaddingProps;
|
|
20
|
+
range?: ValueOrAxes<RangeTuple>;
|
|
21
|
+
samples?: number;
|
|
22
|
+
scale?: ValueOrAxes<ScalePropType | D3ScaleFn>;
|
|
23
|
+
sortKey?: string;
|
|
24
|
+
sortOrder?: "ascending" | "descending";
|
|
25
|
+
width?: number;
|
|
26
|
+
x?: string;
|
|
27
|
+
y?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface VictoryProviderProps extends VictoryCalculatedStateProps {
|
|
31
|
+
children?: React.ReactNode;
|
|
32
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { createContext, useContext } from "react";
|
|
3
|
+
import { D3ScaleFn, DomainTuple, ForAxes } from "../types/prop-types";
|
|
4
|
+
import { FormattedDatum, getData } from "./helpers/get-data";
|
|
5
|
+
import { getDomain } from "./helpers/get-domain";
|
|
6
|
+
import { getRange } from "./helpers/get-range";
|
|
7
|
+
import { getScale } from "./helpers/get-scale";
|
|
8
|
+
import { VictoryCalculatedStateProps, VictoryProviderProps } from "./types";
|
|
9
|
+
|
|
10
|
+
type ScaleType = Required<ForAxes<D3ScaleFn>>;
|
|
11
|
+
type DomainType = Required<ForAxes<DomainTuple>>;
|
|
12
|
+
|
|
13
|
+
export interface ContextType {
|
|
14
|
+
data: FormattedDatum[];
|
|
15
|
+
scale: ScaleType;
|
|
16
|
+
domain: DomainType;
|
|
17
|
+
setChildProps: (id: string, props: VictoryProviderProps) => void;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const VictoryContext = createContext<ContextType | null>(null);
|
|
21
|
+
|
|
22
|
+
export function VictoryProvider({
|
|
23
|
+
children,
|
|
24
|
+
...initialProps
|
|
25
|
+
}: VictoryProviderProps) {
|
|
26
|
+
// We need to store the props in state so they can be overwritten by child components
|
|
27
|
+
const [props, setProps] = React.useState(initialProps);
|
|
28
|
+
|
|
29
|
+
const setChildProps = React.useCallback(
|
|
30
|
+
(id: string, newProps: VictoryCalculatedStateProps) => {
|
|
31
|
+
setProps((prevProps) => {
|
|
32
|
+
return { ...prevProps, ...newProps };
|
|
33
|
+
});
|
|
34
|
+
},
|
|
35
|
+
[],
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
const data = React.useMemo(() => {
|
|
39
|
+
return getData(props);
|
|
40
|
+
}, [props]);
|
|
41
|
+
|
|
42
|
+
const domain = React.useMemo(() => {
|
|
43
|
+
return {
|
|
44
|
+
x: getDomain(props, "x"),
|
|
45
|
+
y: getDomain(props, "y"),
|
|
46
|
+
};
|
|
47
|
+
}, [props]);
|
|
48
|
+
|
|
49
|
+
const range = React.useMemo(
|
|
50
|
+
() => ({
|
|
51
|
+
x: getRange(props, "x"),
|
|
52
|
+
y: getRange(props, "y"),
|
|
53
|
+
}),
|
|
54
|
+
[props],
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
const scale = React.useMemo(() => {
|
|
58
|
+
const xBaseScaleFn = getScale(props, "x");
|
|
59
|
+
const yBaseScaleFn = getScale(props, "y");
|
|
60
|
+
|
|
61
|
+
// @ts-expect-error: This is a valid scale function
|
|
62
|
+
const xScaleFn = xBaseScaleFn().domain(domain.x).range(range.x);
|
|
63
|
+
// @ts-expect-error: This is a valid scale function
|
|
64
|
+
const yScaleFn = yBaseScaleFn().domain(domain.y).range(range.y);
|
|
65
|
+
|
|
66
|
+
return {
|
|
67
|
+
x: xScaleFn,
|
|
68
|
+
y: yScaleFn,
|
|
69
|
+
};
|
|
70
|
+
}, [props, domain, range]);
|
|
71
|
+
|
|
72
|
+
const value = {
|
|
73
|
+
scale,
|
|
74
|
+
data,
|
|
75
|
+
domain,
|
|
76
|
+
setChildProps,
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
return (
|
|
80
|
+
<VictoryContext.Provider value={value}>{children}</VictoryContext.Provider>
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function useVictoryContext<T>(selector: (value: ContextType) => T): T {
|
|
85
|
+
const context = useContext(VictoryContext);
|
|
86
|
+
if (!context) {
|
|
87
|
+
throw new Error("useVictoryContext must be used within a VictoryProvider");
|
|
88
|
+
}
|
|
89
|
+
return selector(context);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function useScale() {
|
|
93
|
+
return useVictoryContext<ScaleType>((value) => value.scale);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export function useData() {
|
|
97
|
+
return useVictoryContext<FormattedDatum[]>((value) => value.data);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function useDomain() {
|
|
101
|
+
return useVictoryContext<DomainType>((value) => value.domain);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// This function keeps props in sync betwen the VictoryProvider and child components
|
|
105
|
+
export function useVictoryProviderSync(
|
|
106
|
+
id: string,
|
|
107
|
+
props: VictoryCalculatedStateProps,
|
|
108
|
+
) {
|
|
109
|
+
const setChildProps = useVictoryContext((value) => value.setChildProps);
|
|
110
|
+
|
|
111
|
+
React.useEffect(() => {
|
|
112
|
+
setChildProps(id, props);
|
|
113
|
+
}, []);
|
|
114
|
+
|
|
115
|
+
return props;
|
|
116
|
+
}
|