@kietpt2003/react-native-core-ui
Version:
React Native Core UI components by KietPT
67 lines (66 loc) • 3.92 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { jsx as _jsx } from "react/jsx-runtime";
import React from "react";
import { findNodeHandle, LogBox } from "react-native";
import { useDerivedValue, useSharedValue } from "react-native-reanimated";
import { useStableCallback } from "../hooks/DraggableFlatList/useStableCallback";
import { useNestedAutoScroll } from "../hooks/DraggableFlatList/useNestedAutoScroll";
import { useSafeNestableScrollContainerContext } from "../context/DraggableFlatList/nestableScrollContainerContext";
import DraggableFlatList from "./DraggableFlatList";
function NestableDraggableFlatListInner(props, ref) {
const hasSuppressedWarnings = React.useRef(false);
if (!hasSuppressedWarnings.current) {
LogBox.ignoreLogs([
"VirtualizedLists should never be nested inside plain ScrollViews with the same orientation because it can break windowing",
]); // Ignore log notification by message
//@ts-ignore
console.reportErrorsAsExceptions = false;
hasSuppressedWarnings.current = true;
}
const { scrollableRef, outerScrollOffset, setOuterScrollEnabled } = useSafeNestableScrollContainerContext();
const listVerticalOffset = useSharedValue(0);
const [animVals, setAnimVals] = React.useState({});
const defaultHoverOffset = useSharedValue(0);
const [listHoverOffset, setListHoverOffset] = React.useState(defaultHoverOffset);
const hoverOffset = useDerivedValue(() => {
return listHoverOffset.value + listVerticalOffset.value;
}, [listHoverOffset]);
useNestedAutoScroll(Object.assign(Object.assign({}, animVals), { hoverOffset }));
const onListContainerLayout = useStableCallback((_a) => __awaiter(this, [_a], void 0, function* ({ containerRef }) {
const nodeHandle = findNodeHandle(scrollableRef.current);
const onSuccess = (_x, y) => {
listVerticalOffset.value = y;
};
const onFail = () => {
console.log("## nested draggable list measure fail");
};
//@ts-ignore
containerRef.current.measureLayout(nodeHandle, onSuccess, onFail);
}));
const onDragBegin = useStableCallback((params) => {
var _a;
setOuterScrollEnabled(false);
(_a = props.onDragBegin) === null || _a === void 0 ? void 0 : _a.call(props, params);
});
const onDragEnd = useStableCallback((params) => {
var _a;
setOuterScrollEnabled(true);
(_a = props.onDragEnd) === null || _a === void 0 ? void 0 : _a.call(props, params);
});
const onAnimValInit = useStableCallback((params) => {
var _a;
setListHoverOffset(params.hoverOffset);
setAnimVals(Object.assign(Object.assign({}, params), { hoverOffset }));
(_a = props.onAnimValInit) === null || _a === void 0 ? void 0 : _a.call(props, params);
});
return (_jsx(DraggableFlatList, Object.assign({ ref: ref, onContainerLayout: onListContainerLayout, activationDistance: props.activationDistance || 20, scrollEnabled: false }, props, { outerScrollOffset: outerScrollOffset, onDragBegin: onDragBegin, onDragEnd: onDragEnd, onAnimValInit: onAnimValInit })));
}
export const NestableDraggableFlatList = React.forwardRef(NestableDraggableFlatListInner);