1 Commits
Author SHA1 Message Date
yanle 75669a760a feat: add paginator for version history drawer 2024-08-13 00:10:33 +08:00
2 changed files with 71 additions and 10 deletions
+52
View File
@@ -0,0 +1,52 @@
import React from "react";
import { Flex, Button, Text, Spinner } from "@chakra-ui/react";
type PaginatorProps = {
pageNumber: number;
loading: boolean;
noMoreData: boolean;
onPageChange: (newPage: number) => void;
};
const Paginator: React.FC<PaginatorProps> = ({
pageNumber,
loading,
noMoreData,
onPageChange,
}) => {
const handlePrevPage = () => {
if (pageNumber > 1) {
onPageChange(pageNumber - 1);
}
};
const handleNextPage = () => {
if (!noMoreData) {
onPageChange(pageNumber + 1);
}
};
return (
<Flex justifyContent="center" alignItems="center" mt={2}>
<Button
onClick={handlePrevPage}
isDisabled={pageNumber === 1 || loading}
mr={2}
>
Previous
</Button>
<Text>{pageNumber}</Text>
<Button
onClick={handleNextPage}
isDisabled={noMoreData || loading}
ml={2}
>
Next
</Button>
{noMoreData && !loading && <Text ml={4}>No more data!</Text>}
{loading && <Spinner ml={2} size={"xs"} color="gray" />}
</Flex>
);
};
export default Paginator;
+19 -10
View File
@@ -14,7 +14,6 @@ import {
TabPanels, TabPanels,
Tab, Tab,
TabPanel, TabPanel,
useToast,
HStack, HStack,
Tag, Tag,
} from "@chakra-ui/react"; } from "@chakra-ui/react";
@@ -30,10 +29,10 @@ import { WorkspaceContext } from "../WorkspaceContext";
import { Changelog, WorkflowVersion } from "../types/dbTypes"; import { Changelog, WorkflowVersion } from "../types/dbTypes";
import DeleteConfirm from "./DeleteConfirm"; import DeleteConfirm from "./DeleteConfirm";
import { app } from "../utils/comfyapp"; import { app } from "../utils/comfyapp";
import Paginator from "./Paginator";
export function VersionHistoryDrawer({ onClose }: { onClose: () => void }) { export function VersionHistoryDrawer({ onClose }: { onClose: () => void }) {
const { isDirty, loadWorkflowID, curVersion, session } = const { isDirty, curVersion, session } = useContext(WorkspaceContext);
useContext(WorkspaceContext);
const [active, setActive] = useState(0); // 0: version、1: changelog const [active, setActive] = useState(0); // 0: version、1: changelog
const [selectedVersion, setSelectedVersion] = useState<string | null>(null); const [selectedVersion, setSelectedVersion] = useState<string | null>(null);
const [changelogs, setChangelogs] = useState<Changelog[]>([]); const [changelogs, setChangelogs] = useState<Changelog[]>([]);
@@ -43,6 +42,7 @@ export function VersionHistoryDrawer({ onClose }: { onClose: () => void }) {
const curFlow = workflowsTable?.curWorkflow; const curFlow = workflowsTable?.curWorkflow;
const cloudHost = userSettingsTable?.settings?.cloudHost; const cloudHost = userSettingsTable?.settings?.cloudHost;
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const [pageNumber, setPageNumber] = useState(1);
const loadChangeLogs = async (flowId: string) => { const loadChangeLogs = async (flowId: string) => {
const workflow = await workflowsTable?.get(flowId); const workflow = await workflowsTable?.get(flowId);
const changelogs = await changelogsTable?.listByWorkflowID(flowId); const changelogs = await changelogsTable?.listByWorkflowID(flowId);
@@ -54,15 +54,13 @@ export function VersionHistoryDrawer({ onClose }: { onClose: () => void }) {
selectedChangelogID && setSelectedVersion(selectedChangelogID); selectedChangelogID && setSelectedVersion(selectedChangelogID);
}; };
const loadVersions = async () => { const loadVersions = async (pageNum: number) => {
let vers = let vers =
(await workflowVersionsTable?.listByWorkflowID(curFlow!.id)) ?? []; (await workflowVersionsTable?.listByWorkflowID(curFlow!.id)) ?? [];
if (session?.shareKey && curFlow?.cloudID) { if (session?.shareKey && curFlow?.cloudID) {
setLoading(true); setLoading(true);
await fetch( await fetch(
userSettingsTable?.settings?.cloudHost! + `${userSettingsTable?.settings?.cloudHost}/api/listWorkflowVersionsByWorkflowID?workflowID=${curFlow?.cloudID}&pageNumber=${pageNum}`,
"/api/listWorkflowVersionsByWorkflowID?workflowID=" +
curFlow?.cloudID,
{ {
headers: { headers: {
authorization: `Bearer ${session?.shareKey}`, authorization: `Bearer ${session?.shareKey}`,
@@ -90,16 +88,22 @@ export function VersionHistoryDrawer({ onClose }: { onClose: () => void }) {
setVersions(vers); setVersions(vers);
}; };
const onVersionsPageChange = (num: number) => {
setPageNumber(num);
loadVersions(num);
};
const onDelete = (id: string) => { const onDelete = (id: string) => {
workflowVersionsTable?.delete(id).then(() => { workflowVersionsTable?.delete(id).then(() => {
loadVersions(); loadVersions(pageNumber);
}); });
}; };
useEffect(() => { useEffect(() => {
switch (active) { switch (active) {
case 0: case 0:
loadVersions(); setPageNumber(1);
loadVersions(1);
break; break;
case 1: case 1:
loadChangeLogs(curFlow!.id); loadChangeLogs(curFlow!.id);
@@ -158,7 +162,6 @@ export function VersionHistoryDrawer({ onClose }: { onClose: () => void }) {
</Text> </Text>
)} )}
<Stack divider={<StackDivider />} spacing={2}> <Stack divider={<StackDivider />} spacing={2}>
{loading && <Text>Loading...</Text>}
{versions?.map((version) => { {versions?.map((version) => {
return ( return (
<Flex <Flex
@@ -223,6 +226,12 @@ export function VersionHistoryDrawer({ onClose }: { onClose: () => void }) {
</Flex> </Flex>
); );
})} })}
<Paginator
onPageChange={onVersionsPageChange}
pageNumber={pageNumber}
loading={loading}
noMoreData={versions.length === 0}
/>
</Stack> </Stack>
</TabPanel> </TabPanel>
<TabPanel> <TabPanel>