Skip to content

Commit 9379bf8

Browse files
author
Ruben van Leeuwen
committed
2143: Readss fieldDataStorage as a hook
1 parent 9a41da8 commit 9379bf8

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

frontend/packages/pydantic-forms/src/core/hooks/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ export * from './useLabelProvider';
55
export * from './usePydanticForm';
66
export * from './useGetConfig';
77
export * from './useGetValidationErrors';
8+
export * from './useFieldDataStorage';
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { useMemo, useRef } from 'react';
2+
3+
export const useGetFieldDataStorage = () => {
4+
const fieldDataStorageRef = useRef<Map<string, Map<string, unknown>>>(
5+
new Map(),
6+
);
7+
8+
const fieldDataStorage = useMemo(
9+
() => ({
10+
has: (fieldId: string, key: string | number) => {
11+
if (
12+
fieldDataStorageRef.current &&
13+
fieldDataStorageRef.current.has(fieldId)
14+
) {
15+
const fieldStorage =
16+
fieldDataStorageRef.current.get(fieldId);
17+
return fieldStorage?.has(key.toString()) ?? false;
18+
}
19+
return false;
20+
},
21+
get: (fieldId: string, key: string | number) => {
22+
const fieldData = fieldDataStorageRef?.current?.get(fieldId);
23+
return fieldData?.get(key.toString());
24+
},
25+
set: (fieldId: string, key: string | number, value: unknown) => {
26+
fieldDataStorageRef.current.set(
27+
fieldId,
28+
new Map([[key.toString(), value]]),
29+
);
30+
},
31+
delete: (fieldId: string) => {
32+
if (fieldDataStorageRef.current?.has(fieldId)) {
33+
fieldDataStorageRef.current.delete(fieldId);
34+
}
35+
},
36+
}),
37+
[],
38+
);
39+
40+
return { fieldDataStorage };
41+
};

0 commit comments

Comments
 (0)