Skip to content

Commit f597e7a

Browse files
authored
Merge pull request #30 from oasisprotocol/mz/backendSync
Enable build result polling
2 parents 8fa3498 + a616c47 commit f597e7a

File tree

2 files changed

+31
-21
lines changed

2 files changed

+31
-21
lines changed

src/backend/api.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,10 +124,17 @@ export function useGetMe(token: string | null) {
124124
});
125125
}
126126

127-
export function useBuildRofl(token: string | null) {
127+
export function useBuildRofl(
128+
token: string | null,
129+
onSuccess: (data: RoflBuildResponse) => void
130+
) {
128131
return useMutation<RoflBuildResponse, AxiosError<unknown>, RoflBuildRequest>({
129132
mutationFn: (data) => buildRofl(data, token!),
130133
throwOnError: false,
134+
onSuccess: onSuccess,
135+
onError: (error) => {
136+
console.error('Error starting build:', error);
137+
},
131138
});
132139
}
133140

@@ -141,7 +148,12 @@ export function useGetRoflBuildResults(
141148
return fetchRoflBuildResults(taskId!, token!);
142149
},
143150
enabled: !!taskId && !!token,
144-
refetchInterval: 3000,
151+
refetchInterval: (data) => {
152+
if (data.state.data?.err) {
153+
return false;
154+
}
155+
return 3000;
156+
},
145157
refetchIntervalInBackground: true,
146158
retry: (failureCount, error) => {
147159
if (error?.response?.status === 404) {

src/pages/CreateApp/BootstrapStep.tsx

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { type FC, useEffect, useState, useRef } from 'react';
1+
import { type FC, useEffect, useState } from 'react';
22
import { Layout } from '@oasisprotocol/ui-library/src/components/ui/layout';
33
import { Header } from '../../components/Layout/Header';
44
import { Footer } from '../../components/Layout/Footer';
55
import Bootstrap from './images/bootstrap.png';
66
import type { AppData, MetadataFormData } from './types';
77
import { stringify } from 'yaml';
8-
import { useBuildRofl } from '../../backend/api';
8+
import { useBuildRofl, useGetRoflBuildResults } from '../../backend/api';
99
import { useRoflAppBackendAuthContext } from '../../contexts/RoflAppBackendAuth/hooks';
1010

1111
// TEMP
@@ -64,9 +64,12 @@ export const BootstrapStep: FC<BootstrapStepProps> = ({
6464
}) => {
6565
const [currentIndex, setCurrentIndex] = useState(0);
6666
const [isVisible, setIsVisible] = useState(true);
67-
const hasTriggeredBuildRef = useRef(false);
67+
const [taskId, setTaskId] = useState<string | null>(null);
68+
const [buildTriggered, setBuildTriggered] = useState(false);
6869
const { token } = useRoflAppBackendAuthContext();
69-
const buildRoflMutation = useBuildRofl(token);
70+
const buildRoflMutation = useBuildRofl(token, (data) =>
71+
setTaskId(data.task_id)
72+
);
7073

7174
if (!appData || !template) {
7275
throw new Error('Missing data to bootstrap the app');
@@ -80,21 +83,16 @@ export const BootstrapStep: FC<BootstrapStepProps> = ({
8083
const manifest = Array.from(new Uint8Array(manifestBuf));
8184
const compose = Array.from(new Uint8Array(composeBuf));
8285

83-
useEffect(() => {
84-
// Revisit the logic to trigger the build only once
85-
if (
86-
!hasTriggeredBuildRef.current &&
87-
token &&
88-
!buildRoflMutation.isPending &&
89-
!buildRoflMutation.isSuccess
90-
) {
91-
hasTriggeredBuildRef.current = true;
92-
buildRoflMutation.mutate({
93-
manifest,
94-
compose,
95-
});
96-
}
97-
}, [token, buildRoflMutation, manifest, compose]);
86+
if (!buildTriggered && token && appData && template) {
87+
setBuildTriggered(true);
88+
buildRoflMutation.mutate({
89+
manifest,
90+
compose,
91+
});
92+
}
93+
94+
const { data } = useGetRoflBuildResults(taskId, token);
95+
console.log('Build results:', data);
9896

9997
useEffect(() => {
10098
const interval = setInterval(() => {

0 commit comments

Comments
 (0)