import { View, Text, ScrollView } from "@tarojs/components";
import './layout.scss'
import { NaviBarTitleShowType, TemplateType } from "@/utils/types";
import { useEffect, useRef, useState } from "react";
import Taro, { usePageScroll } from "@tarojs/taro";
import { rpxToPx } from "@/utils/tools";
let useNavigation;
let GradientText
let RefreshControl;
let ScrollViewRN;
if (process.env.TARO_ENV == 'rn') {
ScrollViewRN = require("react-native").ScrollView
RefreshControl = require("react-native").RefreshControl
GradientText = require('@/components/basic/GradientText').default
useNavigation = require("@react-navigation/native").useNavigation
}
export default function Layout(props: {
children: React.ReactNode,
type: TemplateType,
refresh?: Function,
more?: Function,
triggered?: boolean,
title?: string,
titleColor?: string,
header?: React.ReactNode,
secondPage?: boolean,
isFastSleepTheme?: boolean,
titleShowStyle: NaviBarTitleShowType,
showPullToRefresh?: boolean,
// ref?: any
}) {
const { children, type, triggered } = props;
const [isRefreshing, setIsRefreshing] = useState(false)
const scrollRef = useRef(null);
const [scrollTop, setScrollTop] = useState(0)
const [showTitle, setShowTitle] = useState(props.titleShowStyle == NaviBarTitleShowType.alwayShow)
let navigation;
if (useNavigation) {
navigation = useNavigation()
}
useEffect(() => {
Taro.setNavigationBarTitle({
title: showTitle ? props.title ? props.title : '' : ''
})
if (navigation) {
navigation.setOptions({
headerTitle: showTitle ? props.title ? props.title : '' : '',
});
}
// setTimeout(() => {
// if (process.env.TARO_ENV == 'rn') {
// setScrollTop(100)
// // debugger
// // (scrollRef.current as any).scrollToOffset(100,true)
// }
// }, 8000)
}, [showTitle, props.title])
function onRefresh() {
if (props.refresh) {
props.refresh()
}
setIsRefreshing(true)
setTimeout(() => {
setIsRefreshing(false)
}, 1000)
}
function onScroll(e) {
if (props.titleShowStyle == NaviBarTitleShowType.scrollToShow) {
if (e.nativeEvent){
const {contentOffset} = e.nativeEvent
if (contentOffset.y > 70) {
setShowTitle(true)
}
else {
setShowTitle(false)
}
}
else {
if (e.detail.scrollTop > 70) {
setShowTitle(true)
}
else {
setShowTitle(false)
}
}
}
if (e.nativeEvent){
const { contentSize, contentOffset, layoutMeasurement } = e.nativeEvent;
const isAtTheBottom =
contentSize.height - contentOffset.y <= layoutMeasurement.height;
if (isAtTheBottom && props.more){
props.more()
}
}
}
usePageScroll((e) => {
if (props.titleShowStyle == NaviBarTitleShowType.scrollToShow) {
if (e.scrollTop > 70) {
setShowTitle(true)
}
else {
setShowTitle(false)
}
}
})
function fastSleepTitle() {
if (process.env.TARO_ENV == 'rn') {
return {props.title}
}
return {props.title}
}
function pageDetail() {
return
{
props.title &&
{
props.isFastSleepTheme ? fastSleepTitle() :
{props.title}
}
}
{
children
}
}
switch (type) {
case TemplateType.flex:
return
{/* */}
{
process.env.TARO_ENV == 'weapp' ? pageDetail() :
{
pageDetail()
}
}
case TemplateType.customHeader:
if (process.env.TARO_ENV == 'rn') {
return : null
}
showsVerticalScrollIndicator={false}>
{
props.header
}
{children}
}
return
{/* */}
{
props.header
}
{children}
}
return
}