Files
teach_sys_Demo/src/pages/CompanyJobsListPage/index.jsx

48 lines
1.3 KiB
React
Raw Normal View History

2025-08-26 10:54:12 +08:00
import { useState, useCallback } from "react";
import JobList from "@/pages/CompanyJobsPage/components/JobList";
import InfiniteScroll from "@/components/InfiniteScroll";
import { getJobsList } from "@/services";
2025-08-19 22:35:01 +08:00
import { mapJobList } from "@/utils/dataMapper";
2025-08-15 16:16:41 +08:00
import "./index.css";
2025-08-26 10:54:12 +08:00
const PAGE_SIZE = 20;
2025-08-15 16:16:41 +08:00
const CompanyJobsListPage = () => {
2025-08-19 22:35:01 +08:00
const [jobs, setJobs] = useState([]);
2025-08-26 10:54:12 +08:00
const [listPage, setListPage] = useState(1);
const [listHasMore, setListHasMore] = useState(true);
const fetchJobs = useCallback(async () => {
const res = await getJobsList({
page: listPage,
pageSize: PAGE_SIZE,
isActive: true,
});
if (res.success) {
const mappedJobs = mapJobList(res.data);
setJobs((prevList) => {
const newList = [...prevList, ...mappedJobs];
if (res.total === newList?.length) {
setListHasMore(false);
} else {
setListPage((prevPage) => prevPage + 1);
}
return newList;
2025-08-19 22:35:01 +08:00
});
}
2025-08-26 10:54:12 +08:00
}, [listPage]);
2025-08-19 22:35:01 +08:00
2025-08-15 16:16:41 +08:00
return (
2025-08-26 10:54:12 +08:00
<InfiniteScroll
loadMore={fetchJobs}
hasMore={listHasMore}
empty={jobs.length === 0}
className="company-jobs-list-page-wrapper"
>
2025-08-19 22:35:01 +08:00
<JobList data={jobs} />
2025-08-26 10:54:12 +08:00
</InfiniteScroll>
2025-08-15 16:16:41 +08:00
);
};
export default CompanyJobsListPage;