You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

119 lines
3.4 KiB

import { NavBar, Toast } from 'antd-mobile';
import { useEffect, useRef, useState } from 'react';
import './Mine.scss';
import UploadedList from '../components/UploadedList';
import { Measurement } from '../services/apiTypes';
import UnuploadList from '../components/UnuploadList';
import MineSegment from '../components/MineSegment';
import Bridge from '../utils/bridge';
const PAGE_SIZE = 10;
export default function Mine() {
const [tabIndex, setTabIndex] = useState(0);
const [uploadedList, setUploadedList] = useState<Measurement[]>([]);
const [unuploadList, setUnuploadList] = useState<Measurement[]>([]);
const noMoreUploaded = useRef(false);
const noMoreUnupload = useRef(false);
const [selectIds, setSelectIds] = useState<number[]>([]);
const onItemSelected = (id: number) => {
if (selectIds.includes(id)) {
setSelectIds(selectIds.filter((i) => i !== id));
} else {
setSelectIds([...selectIds, id]);
}
};
useEffect(() => {
Bridge.getUploadedRecords({
size: PAGE_SIZE,
}).then((res) => {
if (res.success) {
setUploadedList((list) => list.concat(res.data || []));
noMoreUploaded.current = res.data.length < PAGE_SIZE;
} else {
noMoreUnupload.current = true;
Toast.show(res.message);
}
});
Bridge.getUnuploadRecords({
size: PAGE_SIZE,
}).then((res) => {
if (res.success) {
setUnuploadList((list) => list.concat(res.data || []));
noMoreUnupload.current = res.data.length < PAGE_SIZE;
} else {
noMoreUnupload.current = true;
Toast.show(res.message);
}
});
}, []);
const onUploadClick = () => {
Bridge.uploadRecords({ ids: selectIds }).then((res) => {
if (!res.success) {
Toast.show(res.message);
}
});
};
async function loadMoreUploadedRecords() {
const res = await Bridge.getUploadedRecords({
lastId: uploadedList[uploadedList.length - 1].id,
size: PAGE_SIZE,
});
if (res.success) {
noMoreUploaded.current = res.data.length < PAGE_SIZE;
setUploadedList((list) => list.concat(res.data));
} else {
noMoreUploaded.current = true;
Toast.show(res.message);
}
}
async function loadMoreUnuploadRecords() {
const res = await Bridge.getUnuploadRecords({
lastId: unuploadList[unuploadList.length - 1].id,
size: PAGE_SIZE,
});
if (res.success) {
noMoreUnupload.current = res.data.length < PAGE_SIZE;
setUnuploadList((list) => list.concat(res.data));
} else {
noMoreUnupload.current = true;
Toast.show(res.message);
}
}
return (
<div>
<NavBar className="bg-white" back={null}>
</NavBar>
<div className="home-page-content">
<MineSegment tabIndex={tabIndex} setTabIndex={setTabIndex} />
<main>
{tabIndex === 0 && (
<UploadedList
dataList={uploadedList}
hasMore={!noMoreUploaded.current}
loadMore={loadMoreUploadedRecords}
/>
)}
{tabIndex === 1 && (
<UnuploadList
dataList={unuploadList}
selectIds={selectIds}
onItemSelected={onItemSelected}
onUpload={onUploadClick}
hasMore={!noMoreUnupload.current}
loadMore={loadMoreUnuploadRecords}
/>
)}
</main>
</div>
</div>
);
}