Skip to content

Commit 0776133

Browse files
refactor: make GenerateDialog use new async pattern
1 parent c8dc071 commit 0776133

File tree

2 files changed

+28
-27
lines changed

2 files changed

+28
-27
lines changed

src/web/src/services/cliApi.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,17 @@ export const cliApi = {
3939
return res.data;
4040
},
4141

42-
updateCliModule: async (repoName: string, moduleName: string, data: any): Promise<void> => {
43-
await axios.put(`/CLI/Az/${repoName}/Modules/${moduleName}`, data);
44-
},
45-
46-
patchCliModule: async (repoName: string, moduleName: string, data: any): Promise<void> => {
47-
await axios.patch(`/CLI/Az/${repoName}/Modules/${moduleName}`, data);
42+
updateCliModule: {
43+
loadingMessage: "Generating all CLI commands...",
44+
fn: async (repoName: string, moduleName: string, data: any): Promise<void> => {
45+
await axios.put(`/CLI/Az/${repoName}/Modules/${moduleName}`, data);
46+
},
47+
},
48+
49+
patchCliModule: {
50+
loadingMessage: "Generating modified CLI commands...",
51+
fn: async (repoName: string, moduleName: string, data: any): Promise<void> => {
52+
await axios.patch(`/CLI/Az/${repoName}/Modules/${moduleName}`, data);
53+
},
4854
},
4955
} as const;

src/web/src/views/cli/components/GenerateDialog.tsx

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { useState } from "react";
21
import { Alert, Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, LinearProgress } from "@mui/material";
32
import { cliApi, errorHandlerApi } from "../../../services";
3+
import { useAsyncOperation } from "../../../services/hooks";
44
import { exportModViewProfile, type ProfileCommandTree } from "../utils/commandTreeInitialization";
55
import { type CLIModViewProfiles } from "../interfaces";
66

@@ -17,8 +17,8 @@ interface GenerateDialogProps {
1717
}
1818

1919
const GenerateDialog = (props: GenerateDialogProps) => {
20-
const [updating, setUpdating] = useState<boolean>(false);
21-
const [invalidText, setInvalidText] = useState<string | undefined>(undefined);
20+
const updateAllOperation = useAsyncOperation(cliApi.updateCliModule);
21+
const updateModifiedOperation = useAsyncOperation(cliApi.patchCliModule);
2222

2323
const handleClose = () => {
2424
props.onClose(false);
@@ -34,15 +34,11 @@ const GenerateDialog = (props: GenerateDialogProps) => {
3434
profiles: profiles,
3535
};
3636

37-
setUpdating(true);
3837
try {
39-
await cliApi.updateCliModule(props.repoName, props.moduleName, data);
40-
setUpdating(false);
38+
await updateAllOperation.execute(props.repoName, props.moduleName, data);
4139
props.onClose(true);
42-
} catch (err: any) {
43-
console.error(err);
44-
setInvalidText(errorHandlerApi.getErrorMessage(err));
45-
setUpdating(false);
40+
} catch (error) {
41+
console.error("Generate all failed:", error);
4642
}
4743
};
4844

@@ -56,36 +52,35 @@ const GenerateDialog = (props: GenerateDialogProps) => {
5652
profiles: profiles,
5753
};
5854

59-
setUpdating(true);
6055
try {
61-
await cliApi.patchCliModule(props.repoName, props.moduleName, data);
62-
setUpdating(false);
56+
await updateModifiedOperation.execute(props.repoName, props.moduleName, data);
6357
props.onClose(true);
64-
} catch (err: any) {
65-
console.error(err);
66-
setInvalidText(errorHandlerApi.getErrorMessage(err));
67-
setUpdating(false);
58+
} catch (error) {
59+
console.error("Generate modified failed:", error);
6860
}
6961
};
7062

63+
const isLoading = updateAllOperation.loading || updateModifiedOperation.loading;
64+
const error = updateAllOperation.error || updateModifiedOperation.error;
65+
7166
return (
7267
<Dialog disableEscapeKeyDown open={props.open}>
7368
<DialogTitle>Generate CLI commands to {props.moduleName}</DialogTitle>
7469
<DialogContent>
75-
{invalidText && (
70+
{error && (
7671
<Alert variant="filled" severity="error">
7772
{" "}
78-
{invalidText}{" "}
73+
{errorHandlerApi.getErrorMessage(error)}{" "}
7974
</Alert>
8075
)}
8176
</DialogContent>
8277
<DialogActions>
83-
{updating && (
78+
{isLoading && (
8479
<Box sx={{ width: "100%" }}>
8580
<LinearProgress color="secondary" />
8681
</Box>
8782
)}
88-
{!updating && (
83+
{!isLoading && (
8984
<>
9085
<Button onClick={handleClose}>Cancel</Button>
9186
<Button onClick={handleGenerateAll}>Generate All</Button>

0 commit comments

Comments
 (0)