"use client";
import React, {
useEffect,
useRef,
useState,
useImperativeHandle,
forwardRef,
} from "react";
import { Tabs, Swiper, Toast, List, InfiniteScroll } from "antd-mobile";
import PostItem from "@/components/PostItem";
import "./index.css";
import Link from "next/link";
import Empty from "@/components/Empty";
import { useRouter } from "next/navigation";
import PostItemSkeleton from "@/components/skeletons/PostItemSkeleton";
import SpaceItemSkeleton from "@/components/skeletons/SpaceItemSkeleton";
import requireAPI from "@/utils/requireAPI";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faRefresh } from "@fortawesome/free-solid-svg-icons";
import InfiniteScrollContent from "@/components/InfiniteScrollContent";
import OwnIcon from "@/components/OwnIcon";
import OwnImage from "@/components/OwnImage";
const tabItems = [
{ key: "space", title: "空间" },
{ key: "post", title: "动态" },
];
// const scrollHeight = 700;
// const scrollHeight = window.innerHeight-126
export default function Space() {
const swiperRef = useRef(null);
const [activeIndex, setActiveIndex] = useState(0);
// const [spacePost, setSpacePost] = useState([]);
const [scrollHeight, setScrollHeight] = useState(0);
const [offset, setOffset] = useState(0);
const [loading, setLoading] = useState(false);
const spaceRef = useRef();
const spacePostRef = useRef();
// 获取屏幕高度
// const scrollHeight = 600;
useEffect(() => {
setScrollHeight(window.innerHeight - 57 - 44);
// const handleResize = () => {
// setScrollHeight(window.innerHeight - 126);
// };
// window.addEventListener("resize", handleResize);
// return () => {
// // window.removeEventListener("resize", handleResize);
// };
}, []);
const childrenFunc = async () => {
setLoading(true);
if (!activeIndex) {
await spaceRef.current?.doRefresh();
setLoading(false);
} else {
await spacePostRef.current?.doRefresh();
setLoading(false);
}
};
return (
{
const index = tabItems.findIndex((item) => item.key === key);
setActiveIndex(index);
swiperRef.current?.swipeTo(index);
}}
>
{tabItems.map((item) => (
))}
{}
null}
ref={swiperRef}
defaultIndex={activeIndex}
allowTouchMove={false}
onIndexChange={(index) => {
setActiveIndex(index);
}}
>
{!activeIndex && (
)}
{!!activeIndex && (
)}
{
// scrollRef.current?.scrollTo(0, 0);
window.scrollTo({
top: 0,
left: 0,
behavior: "smooth", // 可选,平滑滚动效果
});
childrenFunc();
// firstRequest();
}}
/>
);
}
const VisitingCard = ({ data }) => {
const router = useRouter();
return (
router.push("/space/" + data?.streamer_ext?.mid)}
>
{data?.is_unread_zone_moment_exist === 1 && (
)}
{data?.streamer_ext?.name}
{data?.admission_price !== 0 && (
-
付费
)}
{data.visitor_role === 3 && (
-
创建者
)}
);
};
const SpacesList = forwardRef(({ scrollHeight }, ref) => {
const router = useRouter();
const [loading, setLoading] = useState(false);
const [hasMore, setHasMore] = useState(true);
const [offset, setOffset] = useState(0);
const [spacesList, setSpacesList] = useState([]);
useEffect(() => {
// getSpaceList(2).then((res) => {
// setSpacesList(res);
// setHasMore(true)
// });
}, []);
useImperativeHandle(
ref,
() => {
return { doRefresh };
},
[]
);
async function doRefresh() {
// await sleep(1000);
// Toast.show({
// icon: "fail",
// content: "刷新失败",
// });
// throw new Error("刷新失败");
window.scrollTo({
top: 0,
left: 0,
behavior: "smooth", // 可选,平滑滚动效果
});
const list = await getSpaceList(1);
setSpacesList(list);
setHasMore(true);
return true;
}
async function loadMore() {
// debugger
const list = await getSpaceList(!spacesList.length ? 2 : 0);
if (list.length == 0) {
setHasMore(false);
}
setSpacesList((prev) => [...prev, ...list]);
}
const getSpaceList = async (type = 2) => {
setLoading(true);
try {
const data = await requireAPI(
"POST",
"/api/zone/list_by_visitor_mid_v2",
{
body: { offset, limit: 4 },
}
);
setOffset(data.data.offset);
setHasMore(data.data.more);
setLoading(false);
if (data.ret == -1) {
// Toast.show({
// icon: "fail",
// content: data.msg,
// position: "top",
// });
return [];
} else {
return data.data.list;
}
} catch (error) {
setLoading(false);
}
};
return (
//
{loading && !spacesList.length && (
)}
{spacesList?.map((item) => (
-
))}
{spacesList.length > 0 && (
- router.push("/search")}>
navigation.navigate("Stream")}
// onClick={}
className="w-full h-52"
>
)}
{/* {spacesList?.length == 0 && !loading && (
)} */}
{/* {!!spacesList?.length && (
)} */}
);
});
const SpacePostList = forwardRef(({ scrollHeight }, ref) => {
const [loading, setLoading] = useState(false);
const [hasMore, setHasMore] = useState(false);
const [spacePostList, setSpacePostList] = useState([]);
const [currentTime, setCurrentTime] = useState();
const [offset, setOffset] = useState(0);
const ids = useRef(null);
useEffect(() => {
getFollowIds().then((res) => {
ids.current = res;
getSpacePostList(res, 0);
});
}, []);
useImperativeHandle(
ref,
() => {
return { doRefresh };
},
[]
);
async function doRefresh() {
// await sleep(1000);
// Toast.show({
// icon: "fail",
// content: "刷新失败",
// });
// throw new Error("刷新失败");
// getRecommPostList(1);
window.scrollTo({
top: 0,
left: 0,
behavior: "smooth", // 可选,平滑滚动效果
});
// setSpacePostList([]);
await getSpacePostList(ids.current, 0);
return true;
}
async function loadMore() {
await getSpacePostList(ids.current, offset);
// const newList = [...spacePostList, ...list];
// setSpacePostList(newList);
}
const getFollowIds = async () => {
setLoading(true);
setCurrentTime(Math.floor(new Date().getTime() / 1000));
const data = await requireAPI(
"POST",
"/api/account_relation/list_follow",
{
body: { offset, limit: 4 },
},
true
);
return data;
};
const getSpacePostList = async (data, offset) => {
if (data.data.list.length > 0) {
//查关注主播展示资料
const postsResponse = await requireAPI(
"POST",
"/api/zone_moment/list_by_visitor_mid",
{
body: {
offset,
limit: 4,
},
}
);
// debugger;
// console.log("offset", postsResponse.data.offset);
setOffset(postsResponse.data.offset);
setHasMore(postsResponse.data.more);
setLoading(false);
if (data.ret == -1) {
// Toast.show({
// icon: "fail",
// content: data.msg,
// position: "top",
// });
} else {
setSpacePostList((old) => {
if (!offset) {
return postsResponse.data.list;
} else {
return [...old, ...postsResponse.data.list];
}
});
}
} else {
setLoading(false);
}
};
return (
{/*
*/}
{loading && !spacePostList.length && (
)}
{spacePostList?.map((item, index) => (
))}
{!spacePostList?.length && (
)}
{!!spacePostList?.length && (
)}
{/* */}
);
});