Skip to content

Commit b05e235

Browse files
committed
[frontend] Make FileDetailsDialog use api module
1 parent 5c83007 commit b05e235

File tree

2 files changed

+35
-22
lines changed

2 files changed

+35
-22
lines changed

frontend/src/api.tsx

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,17 @@ export interface FileListAPIResponse {
3232
files: [FileAPIResponse];
3333
}
3434

35+
export interface FileDetailsAPIResponse {
36+
filename: string;
37+
path: string;
38+
bed_size_mm: [number, number, number];
39+
height_mm: number;
40+
layer_count: number;
41+
layer_height_mm: number;
42+
resolution: [number, number];
43+
print_time_secs: number;
44+
}
45+
3546
function isAxiosError(error: Error): error is AxiosError {
3647
return (error as AxiosError).isAxiosError !== undefined;
3748
}
@@ -61,6 +72,18 @@ export class API {
6172
}
6273
}
6374

75+
async fileDetails(path: string): Promise<FileDetailsAPIResponse | undefined> {
76+
try {
77+
const response: AxiosResponse<FileDetailsAPIResponse> = await axios.get(
78+
"api/file_details",
79+
{ params: { filename: path } }
80+
);
81+
return response.data;
82+
} catch (error) {
83+
this._handleError(error);
84+
}
85+
}
86+
6487
async uploadFile(file: File): Promise<CommandAPIResponse | undefined> {
6588
try {
6689
const formData = new FormData();

frontend/src/components/FileDetailsDialog.tsx

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,13 @@ import TableCell from "@material-ui/core/TableCell";
1313
import TableRow from "@material-ui/core/TableRow";
1414
import Typography from "@material-ui/core/Typography";
1515
import DeleteForeverIcon from "@material-ui/icons/DeleteForever";
16-
import axios, { AxiosResponse } from "axios";
1716
import nullthrows from "nullthrows";
1817
import React from "react";
18+
import { FileDetailsAPIResponse, withAPI, WithAPIProps } from "../api";
1919
import { renderTime } from "../utils";
2020
import FilePreview from "./FilePreview";
2121

22-
interface FileDetailsAPIResponse {
23-
filename: string;
24-
path: string;
25-
bed_size_mm: [number, number, number];
26-
height_mm: number;
27-
layer_count: number;
28-
layer_height_mm: number;
29-
resolution: [number, number];
30-
print_time_secs: number;
31-
}
32-
33-
interface FileDetailsProps {
22+
interface FileDetailsProps extends WithAPIProps {
3423
filename: string;
3524
path: string;
3625
}
@@ -46,14 +35,13 @@ class FileDetails extends React.Component<FileDetailsProps, FileDetailsState> {
4635
};
4736

4837
async componentDidMount(): Promise<void> {
49-
const response: AxiosResponse<FileDetailsAPIResponse> = await axios.get(
50-
"api/file_details",
51-
{ params: { filename: this.props.path } }
52-
);
53-
this.setState({
54-
isLoading: false,
55-
data: response.data,
56-
});
38+
const response = await this.props.api.fileDetails(this.props.path);
39+
if (response) {
40+
this.setState({
41+
isLoading: false,
42+
data: response,
43+
});
44+
}
5745
}
5846

5947
_getTableContent(data: FileDetailsAPIResponse): Array<[string, string]> {
@@ -115,6 +103,8 @@ const useStyles = makeStyles({
115103
},
116104
});
117105

106+
const FileDetailsWithAPI = withAPI(FileDetails);
107+
118108
export default function FileDetailsDialog(
119109
props: {
120110
filename: string;
@@ -168,7 +158,7 @@ export default function FileDetailsDialog(
168158
</Dialog>
169159
</DialogTitle>
170160
<DialogContent style={{ padding: 0 }} dividers>
171-
<FileDetails filename={props.filename} path={props.path} />
161+
<FileDetailsWithAPI filename={props.filename} path={props.path} />
172162
</DialogContent>
173163
<DialogActions>
174164
<Button onClick={props.onCancel} color="primary">

0 commit comments

Comments
 (0)