diff --git a/src/_screens/criteria/criteria-manage/index.js b/src/_screens/criteria/criteria-manage/index.js index 73f0a97..93b577f 100644 --- a/src/_screens/criteria/criteria-manage/index.js +++ b/src/_screens/criteria/criteria-manage/index.js @@ -36,6 +36,10 @@ export default function CriteriaManage() { const [isLoading, setIsLoading] = useState(false); const [isFiltered, setIsFiltered] = useState(false); const [endPointSave, setendPointSave] = useState(null) + const [isLoadMoreOnline, setLoadMoreOnline] = useState(true); + const [limitOnline] = useState(10); + const [offsetOnline, setOffsetOnline] = useState(0); + const [isEndOnlineClasses, setIsEndOnlineClasses] = useState(false); const dispatch = useDispatch(); const changeProvince = (item) => { setProvinceSelect(item); @@ -283,6 +287,67 @@ export default function CriteriaManage() { sessionStorage.setItem('criteriaManageState', JSON.stringify(currentState)); }; + const handleScroll = (e) => { + if ( + e.target.scrollHeight - e.target.scrollTop < e.target.clientHeight + 5 && + isLoadMoreOnline && + !isLoading + ) { + onLoadMoreClasses(); + } + }; + + // Load More Classes for Teacher + const onLoadMoreClasses = async () => { + let offsetOnlineMore = offsetOnline + limitOnline; + let listNext = []; + setIsLoading(true); + try { + if (!isEndOnlineClasses) { + const queryParams = []; + + const addParam = (key, value) => { + if (value !== undefined && value !== null && value !== '') { + queryParams.push(`${key}=${value}`); + } + }; + + addParam('province_id', provinceSelect?.value); + addParam('district_id', districtSelect?.value); + if (statusCriteriaSelected?.value !== undefined && statusCriteriaSelected?.value !== null) { + const statusValue = statusCriteriaSelected.value === '0' + ? JSON.stringify(statusCriteriaSelected.value) + : statusCriteriaSelected.value; + addParam('status', statusValue); + } + addParam('school_name', searchText); + + const endPoint = `/report/api_report/getOrganizationAndCriteria${ + queryParams.length ? `?${queryParams.join("&")}` : "" + }&limit=${limitOnline}&offset=${offsetOnlineMore}`; + const res = await apiCaller(endPoint, "GET"); + + if (res?.status) { + listNext = res?.data; + setOffsetOnline(offsetOnline + limitOnline); + if (res?.data?.length < limitOnline) { + setLoadMoreOnline(false); + if (res?.data?.length == 0) setLoadMoreOnline(false); + setIsEndOnlineClasses(true); + } + } + } else { + setIsEndOnlineClasses(true); + } + + let listPrev = listData; + setListData(listPrev?.concat(listNext)); + } catch (e) { + } finally { + setIsLoading(false); + } + }; + return (