Skip to content

Commit e84c143

Browse files
committed
feat: enable backup settings
1 parent 97b9929 commit e84c143

File tree

14 files changed

+534
-396
lines changed

14 files changed

+534
-396
lines changed

src/App.tsx

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,9 @@ import { Path } from "./router/Path";
1515
import { darkTheme } from "./themes";
1616
import { useElectronStore } from "./stores/electronStore";
1717
import { Provider } from "mobx-react";
18-
import {
19-
isElectron,
20-
logError,
21-
sendMessageToParent,
22-
} from "./common/utils/appUtil";
18+
import { isElectron, sendMessageToParent } from "./common/utils/appUtil";
2319
import { useBackupStore } from "./stores/backupStore";
24-
import api from "./api";
25-
import { getErrorMsg } from "./common/utils/errorUtil";
26-
import { timer } from "rxjs";
27-
import { exhaustMap, retry } from "rxjs/operators";
20+
import { useServiceStore } from "./stores/serviceStore";
2821

2922
const GlobalCss = withStyles((theme: Theme) => {
3023
const background = theme.palette.background;
@@ -56,6 +49,7 @@ const GlobalCss = withStyles((theme: Theme) => {
5649

5750
const electronStore = useElectronStore({});
5851
const backupStore = useBackupStore({ backupInfoLoaded: false });
52+
const serviceStore = useServiceStore({});
5953

6054
function App(): ReactElement {
6155
useEffect(() => {
@@ -74,25 +68,15 @@ function App(): ReactElement {
7468
return () => window.removeEventListener("message", messageListenerHandler);
7569
}, []);
7670

77-
useEffect(() => {
78-
const sub = timer(0, 60000)
79-
.pipe(
80-
exhaustMap(() => api.getBackupInfo$()),
81-
retry(3)
82-
)
83-
.subscribe({
84-
next: (resp) => backupStore.setInfo(resp),
85-
error: (err) =>
86-
logError(`Failed to retrieve backup info: ${getErrorMsg(err)}`),
87-
});
88-
return () => sub.unsubscribe();
89-
}, []);
90-
9171
return (
9272
<ThemeProvider theme={darkTheme}>
9373
<CssBaseline />
9474
<GlobalCss />
95-
<Provider electronStore={electronStore} backupStore={backupStore}>
75+
<Provider
76+
electronStore={electronStore}
77+
backupStore={backupStore}
78+
serviceStore={serviceStore}
79+
>
9680
<Router>
9781
<Switch>
9882
<Route path={Path.CONNECTION_FAILED}>

src/api.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,11 @@ const fetchJsonResponse = <T>(
5252
}
5353
return from(fetch(queryUrl.toString(), { method, body })).pipe(
5454
mergeMap((resp: Response) =>
55-
from(resp.json()).pipe(
56-
mergeMap((body) => (resp.ok ? of(body) : throwError(body)))
57-
)
55+
resp.status === 204
56+
? of({})
57+
: from(resp.json()).pipe(
58+
mergeMap((body) => (resp.ok ? of(body) : throwError(body)))
59+
)
5860
),
5961
catchError((err) => logAndThrow(url, err))
6062
);
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { inject, observer } from "mobx-react";
2+
import React, { ReactElement } from "react";
3+
import ViewDisabled from "../../dashboard/ViewDisabled";
4+
import { ServiceStore, SERVICE_STORE } from "../../stores/serviceStore";
5+
import Loader from "./data-display/loader/Loader";
6+
7+
type OpendexdDependentProps = {
8+
comp: ReactElement;
9+
serviceStore?: ServiceStore;
10+
};
11+
12+
/**
13+
* In case a component needs opendexd to be ready and unlocked,
14+
* information from opendexd status is displayed when those conditions are not met.
15+
*
16+
* @param comp
17+
* a component to display when opendexd is ready and unlocked
18+
*/
19+
const OpendexdDependent = inject(SERVICE_STORE)(
20+
observer(
21+
(props: OpendexdDependentProps): ReactElement => {
22+
const { comp, serviceStore } = props;
23+
24+
return (
25+
<>
26+
{serviceStore!.opendexdStatus ? (
27+
!serviceStore!.opendexdLocked && serviceStore!.opendexdReady ? (
28+
comp
29+
) : (
30+
<ViewDisabled
31+
opendexdLocked={serviceStore!.opendexdLocked}
32+
opendexdStatus={serviceStore!.opendexdStatus.status}
33+
/>
34+
)
35+
) : (
36+
<Loader />
37+
)}
38+
</>
39+
);
40+
}
41+
)
42+
);
43+
44+
export default OpendexdDependent;

0 commit comments

Comments
 (0)