Skip to content

Commit 9c40c89

Browse files
authored
Merge pull request #749 from actiontech/fix/issue-2552
[fix](useRecentlySelectedZone): Fix the initialization issue of state
2 parents ef94799 + 2635db1 commit 9c40c89

File tree

4 files changed

+18
-37
lines changed

4 files changed

+18
-37
lines changed

packages/base/src/page/Nav/SideMenu/UserMenu/components/UserNavigate.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,7 @@ const UserNavigate: React.FC<Props> = ({
5252
const [open, setOpen] = useState(false);
5353

5454
//# if [ee]
55-
const { clearRecentlySelectedZone } = useRecentlySelectedZone({
56-
manualInit: true
57-
});
55+
const { clearRecentlySelectedZone } = useRecentlySelectedZone();
5856
//# endif
5957

6058
const logout = () => {

packages/base/src/testUtils/mockHooks/data.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ export const mockUseRecentlySelectedZoneData = {
1010
availabilityZone: undefined,
1111
updateRecentlySelectedZone: jest.fn(),
1212
setAvailabilityZone: jest.fn(),
13-
initializeAvailabilityZone: jest.fn(),
1413
verifyRecentlySelectedZoneRecord: jest.fn(),
1514
clearRecentlySelectedZone: jest.fn()
1615
};

packages/dms-kit/src/features/useRecentlySelectedZone/__tests__/index.test.ts

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ describe('useRecentlySelectedZone', () => {
1818
localStorage.setItem(StorageKey.DMS_AVAILABILITY_ZONE, JSON.stringify([]));
1919
});
2020

21-
it('should initialize from storage when manualInit is false (default)', () => {
21+
it('should initialize from storage', () => {
2222
const initial: Zone[] = [
2323
{ uid: 'u1', name: 'zone-1' },
2424
{ uid: 'u2', name: 'zone-2' }
@@ -32,22 +32,6 @@ describe('useRecentlySelectedZone', () => {
3232
expect(result.current.availabilityZone).toEqual(initial[0]);
3333
});
3434

35-
it('should not auto initialize when manualInit is true', () => {
36-
const initial: Zone[] = [{ uid: 'u1', name: 'zone-1' }];
37-
localStorage.setItem(
38-
StorageKey.DMS_AVAILABILITY_ZONE,
39-
JSON.stringify(initial)
40-
);
41-
42-
const { result } = superRenderHook(() =>
43-
useRecentlySelectedZone<Zone>({ manualInit: true })
44-
);
45-
expect(result.current.availabilityZone).toBeUndefined();
46-
47-
act(() => result.current.initializeAvailabilityZone());
48-
expect(result.current.availabilityZone).toEqual(initial[0]);
49-
});
50-
5135
it('should update record: move to front, unique, trim to max, and emit', () => {
5236
const eventEmitterSpy = jest.spyOn(eventEmitter, 'emit');
5337
const { result } = superRenderHook(() => useRecentlySelectedZone<Zone>());

packages/dms-kit/src/features/useRecentlySelectedZone/index.ts

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,22 @@ import { eventEmitter } from '../../utils/EventEmitter';
77

88
export const DEFAULT_MAX_SELECTED_ZONE_NUMBER = 3;
99

10-
const useRecentlySelectedZone = <T extends { uid?: string; name?: string }>({
11-
manualInit = false
12-
}: { manualInit?: boolean } = {}) => {
13-
const [availabilityZone, setAvailabilityZone] = useState<T>();
10+
const useRecentlySelectedZone = <
11+
T extends { uid?: string; name?: string }
12+
>() => {
13+
const [availabilityZone, setAvailabilityZone] = useState<T | undefined>(
14+
() => {
15+
const data = LocalStorageWrapper.get(StorageKey.DMS_AVAILABILITY_ZONE);
16+
try {
17+
const parsedData: T[] = JSON.parse(data || '[]');
18+
return parsedData?.[0] ?? undefined;
19+
} catch (error) {
20+
// eslint-disable-next-line no-console
21+
console.error(error);
22+
return undefined;
23+
}
24+
}
25+
);
1426

1527
const setStorageRecentlySelectedZoneRecord = useCallback((record: T[]) => {
1628
LocalStorageWrapper.set(
@@ -88,22 +100,11 @@ const useRecentlySelectedZone = <T extends { uid?: string; name?: string }>({
88100
}
89101
};
90102

91-
const initializeAvailabilityZone = useCallback(() => {
92-
const parsedData = getStorageZoneRecord();
93-
setAvailabilityZone(parsedData?.[0] ?? undefined);
94-
}, [getStorageZoneRecord]);
95-
96103
const clearRecentlySelectedZone = useCallback(() => {
97104
setAvailabilityZone(undefined);
98105
setStorageRecentlySelectedZoneRecord([]);
99106
}, [setAvailabilityZone, setStorageRecentlySelectedZoneRecord]);
100107

101-
useEffect(() => {
102-
if (!manualInit) {
103-
initializeAvailabilityZone();
104-
}
105-
}, [initializeAvailabilityZone, manualInit]);
106-
107108
useEffect(() => {
108109
const { unsubscribe } = eventEmitter.subscribe(
109110
EmitterKey.DMS_SYNC_CURRENT_AVAILABILITY_ZONE,
@@ -115,7 +116,6 @@ const useRecentlySelectedZone = <T extends { uid?: string; name?: string }>({
115116
return {
116117
availabilityZone,
117118
updateRecentlySelectedZone,
118-
initializeAvailabilityZone,
119119
verifyRecentlySelectedZoneRecord,
120120
clearRecentlySelectedZone,
121121
setAvailabilityZone

0 commit comments

Comments
 (0)