Skip to content

Commit 70396d5

Browse files
authored
Fix wrong picture displayed after retake (#739)
1 parent b771311 commit 70396d5

File tree

4 files changed

+33
-39
lines changed

4 files changed

+33
-39
lines changed

packages/common-ui-web/src/components/InspectionGallery/hooks/useInspectionGalleryItems.ts

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useState } from 'react';
1+
import { useMemo } from 'react';
22
import { ImageStatus, Sight } from '@monkvision/types';
33
import { getInspectionImages, MonkState, useMonkState } from '@monkvision/common';
44
import { useInspectionPoll } from '@monkvision/network';
@@ -89,22 +89,19 @@ function shouldContinueToFetch(items: InspectionGalleryItem[]): boolean {
8989
export function useInspectionGalleryItems(props: InspectionGalleryProps): InspectionGalleryItem[] {
9090
const inspectionSights = props.captureMode ? props.sights : undefined;
9191
const { state } = useMonkState();
92-
const [items, setItems] = useState<InspectionGalleryItem[]>(
93-
getItems(props.inspectionId, props.captureMode, state, inspectionSights, props.enableAddDamage),
94-
);
95-
const [shouldFetch, setShouldFetch] = useState(shouldContinueToFetch(items));
9692

97-
const onSuccess = (entities: MonkState) => {
98-
const newItems = getItems(
99-
props.inspectionId,
100-
props.captureMode,
101-
entities,
102-
inspectionSights,
103-
props.enableAddDamage,
104-
);
105-
setItems(newItems);
106-
setShouldFetch(shouldContinueToFetch(newItems));
107-
};
93+
const items = useMemo(
94+
() =>
95+
getItems(
96+
props.inspectionId,
97+
props.captureMode,
98+
state,
99+
inspectionSights,
100+
props.enableAddDamage,
101+
),
102+
[props.inspectionId, props.captureMode, state, inspectionSights, props.enableAddDamage],
103+
);
104+
const shouldFetch = useMemo(() => shouldContinueToFetch(items), items);
108105

109106
useInspectionPoll({
110107
id: props.inspectionId,
@@ -119,7 +116,6 @@ export function useInspectionGalleryItems(props: InspectionGalleryProps): Inspec
119116
}
120117
: undefined,
121118
delay: shouldFetch ? props.refreshIntervalMs ?? DEFAULT_REFRESH_INTERVAL_MS : null,
122-
onSuccess,
123119
});
124120

125121
return items;

packages/common-ui-web/test/components/InspectionGallery/hooks/useInspectionGalleryItems.test.ts

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { sights } from '@monkvision/sights';
33
import { ComplianceIssue, ComplianceOptions, Image, ImageStatus } from '@monkvision/types';
44
import { createEmptyMonkState, useMonkState } from '@monkvision/common';
55
import { useInspectionPoll } from '@monkvision/network';
6-
import { act } from '@testing-library/react';
76
import { useInspectionGalleryItems } from '../../../../src/components/InspectionGallery/hooks';
87
import { InspectionGalleryProps } from '../../../../src';
98

@@ -56,8 +55,16 @@ describe('useInspectionGalleryItems hook', () => {
5655

5756
it('should properly update the items after each inspection poll', () => {
5857
const initialProps = createProps();
59-
const entities = createEmptyMonkState();
60-
entities.images.push(
58+
const entitiesMock1 = createEmptyMonkState();
59+
entitiesMock1.images.push({
60+
id: 'image-1',
61+
sightId: 'test-sight-1',
62+
inspectionId: initialProps.inspectionId,
63+
status: ImageStatus.SUCCESS,
64+
} as unknown as Image);
65+
66+
const entitiesMock2 = createEmptyMonkState();
67+
entitiesMock2.images.push(
6168
{
6269
id: 'image-1',
6370
inspectionId: initialProps.inspectionId,
@@ -67,33 +74,26 @@ describe('useInspectionGalleryItems hook', () => {
6774
{
6875
id: 'image-2',
6976
inspectionId: initialProps.inspectionId,
70-
status: ImageStatus.SUCCESS,
71-
} as unknown as Image,
72-
{
73-
id: 'image-3',
74-
inspectionId: initialProps.inspectionId,
75-
sightId: 'test-sight-3',
77+
sightId: 'test-sight-2',
7678
status: ImageStatus.SUCCESS,
7779
} as unknown as Image,
7880
);
79-
const { result, unmount } = renderHook(useInspectionGalleryItems, { initialProps });
81+
(useMonkState as jest.Mock).mockImplementationOnce(() => ({ state: entitiesMock1 }));
82+
const { result, unmount, rerender } = renderHook(useInspectionGalleryItems, { initialProps });
8083

8184
expect(result.current).toEqual([
82-
{ isAddDamage: false, isTaken: false, sightId: 'test-sight-1' },
85+
{ isAddDamage: false, isTaken: true, image: entitiesMock1.images[0] },
8386
{ isAddDamage: false, isTaken: false, sightId: 'test-sight-2' },
8487
{ isAddDamage: false, isTaken: false, sightId: 'test-sight-3' },
8588
{ isAddDamage: true },
8689
]);
87-
expect(useInspectionPoll).toHaveBeenCalledWith(
88-
expect.objectContaining({ onSuccess: expect.any(Function) }),
89-
);
90-
const { onSuccess } = (useInspectionPoll as jest.Mock).mock.calls[0][0];
91-
act(() => onSuccess(entities));
90+
91+
(useMonkState as jest.Mock).mockImplementationOnce(() => ({ state: entitiesMock2 }));
92+
rerender();
9293
expect(result.current).toEqual([
93-
{ isAddDamage: false, isTaken: true, image: entities.images[0] },
94-
{ isAddDamage: false, isTaken: false, sightId: 'test-sight-2' },
95-
{ isAddDamage: false, isTaken: true, image: entities.images[2] },
96-
{ isAddDamage: false, isTaken: true, image: entities.images[1] },
94+
{ isAddDamage: false, isTaken: true, image: entitiesMock2.images[0] },
95+
{ isAddDamage: false, isTaken: true, image: entitiesMock2.images[1] },
96+
{ isAddDamage: false, isTaken: false, sightId: 'test-sight-3' },
9797
{ isAddDamage: true },
9898
]);
9999

packages/inspection-capture-web/src/PhotoCapture/hooks/useUploadQueue.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,6 @@ export function useUploadQueue({
134134
}
135135
},
136136
{
137-
maxProcessingItems: 5,
138137
storeFailedItems: true,
139138
},
140139
);

packages/inspection-capture-web/test/PhotoCapture/hooks/useUploadQueue.test.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ describe('useUploadQueue hook', () => {
3737
const { result, unmount } = renderHook(useUploadQueue, { initialProps });
3838

3939
expect(useQueue).toHaveBeenCalledWith(expect.anything(), {
40-
maxProcessingItems: 5,
4140
storeFailedItems: true,
4241
});
4342
const queue = (useQueue as jest.Mock).mock.results[0].value;

0 commit comments

Comments
 (0)