victory-native
Version:
A charting library for React Native with a focus on performance and customization.
65 lines (60 loc) • 2.02 kB
text/typescript
import type { ChartPressPanConfig } from "../../types";
type ArrayItem<T> = T extends readonly (infer Item)[] ? Item : T;
type ChartPressExternalGesture = ArrayItem<
NonNullable<ChartPressPanConfig["simultaneousWithExternalGesture"]>
>;
type ChartPressPanGesture = {
activateAfterLongPress: (
delay: NonNullable<ChartPressPanConfig["activateAfterLongPress"]>,
) => void;
activeOffsetX: (
offset: NonNullable<ChartPressPanConfig["activeOffsetX"]>,
) => void;
activeOffsetY: (
offset: NonNullable<ChartPressPanConfig["activeOffsetY"]>,
) => void;
failOffsetX: (
offset: NonNullable<ChartPressPanConfig["failOffsetX"]>,
) => void;
failOffsetY: (
offset: NonNullable<ChartPressPanConfig["failOffsetY"]>,
) => void;
simultaneousWithExternalGesture: (
...gestures: ChartPressExternalGesture[]
) => void;
};
export const applyChartPressPanConfig = ({
panGesture,
panConfig,
gestureLongPressDelay,
}: {
panGesture: ChartPressPanGesture;
panConfig?: ChartPressPanConfig;
gestureLongPressDelay: number;
}) => {
if (!panConfig) {
panGesture.activateAfterLongPress(gestureLongPressDelay);
return;
}
if (panConfig.activateAfterLongPress !== undefined) {
panGesture.activateAfterLongPress(panConfig.activateAfterLongPress);
}
if (panConfig.activeOffsetX !== undefined) {
panGesture.activeOffsetX(panConfig.activeOffsetX);
}
if (panConfig.activeOffsetY !== undefined) {
panGesture.activeOffsetY(panConfig.activeOffsetY);
}
if (panConfig.failOffsetX !== undefined) {
panGesture.failOffsetX(panConfig.failOffsetX);
}
if (panConfig.failOffsetY !== undefined) {
panGesture.failOffsetY(panConfig.failOffsetY);
}
if (panConfig.simultaneousWithExternalGesture !== undefined) {
const gestures = Array.isArray(panConfig.simultaneousWithExternalGesture)
? panConfig.simultaneousWithExternalGesture
: [panConfig.simultaneousWithExternalGesture];
panGesture.simultaneousWithExternalGesture(...gestures);
}
};