@cometchat/chat-uikit-react-native
Version:
Ready-to-use Chat UI Components for React Native
228 lines (227 loc) • 7.05 kB
TypeScript
import React, { Component, RefObject } from 'react';
import { GestureResponderEvent, PanResponderGestureState, View } from 'react-native';
import { Vec2D, ReactNativeZoomableViewProps, ReactNativeZoomableViewState, ZoomableViewEvent } from './types';
declare class ReactNativeZoomableView extends Component<ReactNativeZoomableViewProps, ReactNativeZoomableViewState> {
zoomSubjectWrapperRef: RefObject<View | null>;
gestureHandlers: any;
doubleTapFirstTapReleaseTimestamp: number | any;
static defaultProps: {
zoomEnabled: boolean;
panEnabled: boolean;
initialZoom: number;
initialOffsetX: number;
initialOffsetY: number;
maxZoom: number;
minZoom: number;
pinchToZoomInSensitivity: number;
pinchToZoomOutSensitivity: number;
movementSensibility: number;
doubleTapDelay: number;
bindToBorders: boolean;
zoomStep: number;
onLongPress: null;
longPressDuration: number;
contentWidth: undefined;
contentHeight: undefined;
panBoundaryPadding: number;
disablePanOnInitialZoom: boolean;
};
private panAnim;
private zoomAnim;
private __offsets;
private zoomLevel;
private lastGestureCenterPosition;
private lastGestureTouchDistance;
private gestureType;
private gestureStarted;
/**
* Last press time (used to evaluate whether user double tapped)
* @type {number}
*/
private longPressTimeout;
private onTransformInvocationInitialized;
private singleTapTimeoutId;
private touches;
private doubleTapFirstTap;
private measureZoomSubjectInterval;
constructor(props: any);
private set offsetX(value);
private set offsetY(value);
private get offsetX();
private get offsetY();
private __setOffset;
private __getOffset;
componentDidUpdate(prevProps: ReactNativeZoomableViewProps, prevState: ReactNativeZoomableViewState): void;
componentDidMount(): void;
componentWillUnmount(): void;
/**
* try to invoke onTransform
* @private
*/
_invokeOnTransform(): {
successful: boolean;
};
/**
* Returns additional information about components current state for external event hooks
*
* @returns {{}}
* @private
*/
_getZoomableViewEventObject(overwriteObj?: {}): ZoomableViewEvent;
/**
* Get the original box dimensions and save them for later use.
* (They will be used to calculate boxBorders)
*
* @private
*/
private grabZoomSubjectOriginalMeasurements;
/**
* Handles the start of touch events and checks for taps
*
* @param e
* @param gestureState
* @returns {boolean}
*
* @private
*/
_handleStartShouldSetPanResponder: (e: GestureResponderEvent, gestureState: PanResponderGestureState) => boolean;
/**
* Calculates pinch distance
*
* @param e
* @param gestureState
* @private
*/
_handlePanResponderGrant: (e: GestureResponderEvent, gestureState: PanResponderGestureState) => void;
/**
* Handles the end of touch events
*
* @param e
* @param gestureState
*
* @private
*/
_handlePanResponderEnd: (e: GestureResponderEvent, gestureState: PanResponderGestureState) => void;
/**
* Handles the actual movement of our pan responder
*
* @param e
* @param gestureState
*
* @private
*/
_handlePanResponderMove: (e: GestureResponderEvent, gestureState: PanResponderGestureState) => boolean;
/**
* Handles the pinch movement and zooming
*
* @param e
* @param gestureState
*
* @private
*/
_handlePinching(e: GestureResponderEvent, gestureState: PanResponderGestureState): void;
/**
* Calculates the amount the offset should shift since the last position during panning
*
* @param {Vec2D} gestureCenterPoint
*
* @private
*/
_calcOffsetShiftSinceLastGestureState(gestureCenterPoint: Vec2D): any;
/**
* Handles movement by tap and move
*
* @param gestureState
*
* @private
*/
_handleShifting(gestureState: PanResponderGestureState): void;
/**
* Set the state to offset moved
*
* @param {number} newOffsetX
* @param {number} newOffsetY
* @returns
*/
_setNewOffsetPosition(newOffsetX: number, newOffsetY: number): Promise<void>;
/**
* Check whether the press event is double tap
* or single tap and handle the event accordingly
*
* @param e
*
* @private
*/
private _resolveAndHandleTap;
private _addTouch;
private _removeTouch;
/**
* Handles the double tap event
*
* @param e
*
* @private
*/
_handleDoubleTap(e: GestureResponderEvent): void;
/**
* Returns the next zoom step based on current step and zoomStep property.
* If we are zoomed all the way in -> return to initialzoom
*
* @returns {*}
*/
_getNextZoomStep(): any;
/**
* Zooms to a specific location in our view
*
* @param x
* @param y
* @param newZoomLevel
*
* @private
*/
_zoomToLocation(x: number, y: number, newZoomLevel: number): Promise<void>;
/**
* Zooms to a specificied zoom level.
* Returns a promise if everything was updated and a boolean, whether it could be updated or if it exceeded the min/max zoom limits.
*
* @param {number} newZoomLevel
*
* @return {Promise<bool>}
*/
zoomTo(newZoomLevel: number): Promise<boolean>;
/**
* Zooms in or out by a specified change level
* Use a positive number for `zoomLevelChange` to zoom in
* Use a negative number for `zoomLevelChange` to zoom out
*
* Returns a promise if everything was updated and a boolean, whether it could be updated or if it exceeded the min/max zoom limits.
*
* @param {number | null} zoomLevelChange
*
* @return {Promise<bool>}
*/
zoomBy(zoomLevelChange?: number | null | undefined): Promise<boolean>;
/**
* Moves the zoomed view to a specified position
* Returns a promise when finished
*
* @param {number} newOffsetX the new position we want to move it to (x-axis)
* @param {number} newOffsetY the new position we want to move it to (y-axis)
*
* @return {Promise<bool>}
*/
moveTo(newOffsetX: number, newOffsetY: number): Promise<void>;
/**
* Moves the zoomed view by a certain amount.
*
* Returns a promise when finished
*
* @param {number} offsetChangeX the amount we want to move the offset by (x-axis)
* @param {number} offsetChangeY the amount we want to move the offset by (y-axis)
*
* @return {Promise<bool>}
*/
moveBy(offsetChangeX: number, offsetChangeY: number): Promise<void>;
render(): React.JSX.Element;
}
export default ReactNativeZoomableView;