Skip to content

Commit

Permalink
handle non existent previous operation, handle 404 operations (#58)
Browse files Browse the repository at this point in the history
- prevent the call made for non existent previous operation
- handle 404 for non existent operation
  • Loading branch information
aidemsined authored Aug 12, 2024
2 parents 79c5d08 + 6e07994 commit 07bb8b5
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 17 deletions.
13 changes: 8 additions & 5 deletions src/components/operation-details/OperationDetailsComponent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ const OperationDetailsComponent: React.FC<OperationDetailsProps> = ({ operationI
const [zoomedInView, setZoomedInView] = useState(false);

const {
operationDetails: { data: operationDetails, isLoading },
operationDetails: { data: operationDetails, isLoading, status },
} = useOperationDetails(operationId);

const { data: previousOperationDetails, isLoading: isPrevLoading } =
Expand All @@ -61,10 +61,13 @@ const OperationDetailsComponent: React.FC<OperationDetailsProps> = ({ operationI

if (isLoading || isPrevLoading || !operationDetails || !previousOperationDetails) {
return (
<OperationDetailsNavigation
operationId={operationId}
isLoading={isLoading}
/>
<>
<OperationDetailsNavigation
operationId={operationId}
isLoading={isLoading}
/>
{status === 'error' && <h3 className='not-found-message'>Operation {operationId} not found</h3>}
</>
);
}

Expand Down
50 changes: 38 additions & 12 deletions src/hooks/useAPI.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,35 @@

import axios, { AxiosError } from 'axios';
import { useQuery } from 'react-query';
import { MicroOperation, OperationDescription, OperationDetailsData, ReportMetaData } from '../model/APIData';

const fetchOperationDetails = async (id: number): Promise<OperationDetailsData> => {
const { data: operationDetails } = await axios.get<OperationDetailsData>(`/api/operations/${id}`);
return operationDetails;
import {
MicroOperation,
OperationDescription,
OperationDetailsData,
ReportMetaData,
defaultOperationDetailsData,
} from '../model/APIData';

const fetchOperationDetails = async (id: number | null): Promise<OperationDetailsData> => {
if (id === null) {
return defaultOperationDetailsData;
}
try {
const { data: operationDetails } = await axios.get<OperationDetailsData>(`/api/operations/${id}`, {
maxRedirects: 1,
});
return operationDetails;
} catch (error: unknown) {
if (axios.isAxiosError(error)) {
if (error.response && error.response.status >= 400 && error.response.status < 500) {
// we may want to handle this differently
throw error;
}
if (error.response && error.response.status >= 500) {
throw error;
}
}
}
return defaultOperationDetailsData;
};
const fetchOperations = async (): Promise<OperationDescription[]> => {
const [{ data: operationList }, { data: microOperations }] = await Promise.all([
Expand Down Expand Up @@ -46,18 +70,20 @@ export const useAllBuffers = () => {
return useQuery<{ operation_id: number; buffers: [] }[], AxiosError>('get-operation-buffers', fetchAllBuffers);
};

export const useOperationDetails = (operationId: number) => {
export const useOperationDetails = (operationId: number | null) => {
const { data: operations } = useOperationsList();
const operation = operations?.filter((_operation) => {
return _operation.id === operationId;
})[0];
const operationDetails = useQuery<OperationDetailsData>(['get-operation-detail', operationId], () =>
fetchOperationDetails(operationId),
const operationDetails = useQuery<OperationDetailsData>(
['get-operation-detail', operationId],
() => fetchOperationDetails(operationId),
{
retry: 2,
retryDelay: (retryAttempt) => Math.min(retryAttempt * 100, 500),
},
);


// TODO: consider useQueries or include operation data on BE

return {
operation,
operationDetails,
Expand All @@ -72,7 +98,7 @@ export const usePreviousOperationDetails = (operationId: number) => {
return operationList[index + 1]?.id === operationId;
});

return useOperationDetails(operation ? operation.id : -1);
return useOperationDetails(operation ? operation.id : null);
};

export const usePreviousOperation = (operationId: number) => {
Expand Down
11 changes: 11 additions & 0 deletions src/model/APIData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,17 @@ export interface OperationDetailsData extends Operation {
stack_trace: string;
}

// TODO: we may want to revisit the 'default' portion fo the variable name
export const defaultOperationDetailsData: OperationDetailsData = {
id: 0,
name: '',
inputs: [],
outputs: [],
buffers: [],
l1_sizes: [],
stack_trace: '',
};

export interface Chunk {
address: number;
size: number;
Expand Down

0 comments on commit 07bb8b5

Please sign in to comment.