@ehfuse/forma 1.4.6 → 1.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/contexts/GlobalFormaContext.d.ts.map +1 -1
- package/dist/contexts/GlobalFormaContext.js +134 -1
- package/dist/contexts/GlobalFormaContext.js.map +1 -1
- package/dist/esm/contexts/GlobalFormaContext.d.ts.map +1 -1
- package/dist/esm/contexts/GlobalFormaContext.js +134 -1
- package/dist/esm/contexts/GlobalFormaContext.js.map +1 -1
- package/dist/esm/hooks/useFormaState.d.ts.map +1 -1
- package/dist/esm/hooks/useFormaState.js +26 -12
- package/dist/esm/hooks/useFormaState.js.map +1 -1
- package/dist/esm/hooks/useGlobalForm.d.ts +1 -1
- package/dist/esm/hooks/useGlobalForm.d.ts.map +1 -1
- package/dist/esm/hooks/useGlobalForm.js +50 -5
- package/dist/esm/hooks/useGlobalForm.js.map +1 -1
- package/dist/esm/hooks/useGlobalFormaState.d.ts +1 -1
- package/dist/esm/hooks/useGlobalFormaState.d.ts.map +1 -1
- package/dist/esm/hooks/useGlobalFormaState.js +60 -5
- package/dist/esm/hooks/useGlobalFormaState.js.map +1 -1
- package/dist/esm/types/globalForm.d.ts +10 -0
- package/dist/esm/types/globalForm.d.ts.map +1 -1
- package/dist/esm/types/globalForm.js.map +1 -1
- package/dist/hooks/useFormaState.d.ts.map +1 -1
- package/dist/hooks/useFormaState.js +25 -11
- package/dist/hooks/useFormaState.js.map +1 -1
- package/dist/hooks/useGlobalForm.d.ts +1 -1
- package/dist/hooks/useGlobalForm.d.ts.map +1 -1
- package/dist/hooks/useGlobalForm.js +49 -4
- package/dist/hooks/useGlobalForm.js.map +1 -1
- package/dist/hooks/useGlobalFormaState.d.ts +1 -1
- package/dist/hooks/useGlobalFormaState.d.ts.map +1 -1
- package/dist/hooks/useGlobalFormaState.js +59 -4
- package/dist/hooks/useGlobalFormaState.js.map +1 -1
- package/dist/types/globalForm.d.ts +10 -0
- package/dist/types/globalForm.d.ts.map +1 -1
- package/dist/types/globalForm.js.map +1 -1
- package/package.json +1 -1
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
28
28
|
* SOFTWARE.
|
|
29
29
|
*/
|
|
30
|
-
import { useContext } from "react";
|
|
30
|
+
import { useContext, useEffect } from "react";
|
|
31
31
|
import { useForm } from "./useForm";
|
|
32
32
|
import { GlobalFormaContext } from "../contexts/GlobalFormaContext";
|
|
33
33
|
/**
|
|
@@ -43,15 +43,60 @@ import { GlobalFormaContext } from "../contexts/GlobalFormaContext";
|
|
|
43
43
|
* @param props 글로벌 폼 설정 옵션 / Global form configuration options
|
|
44
44
|
* @returns 글로벌 폼 관리 API 객체 / Global form management API object
|
|
45
45
|
*/
|
|
46
|
-
export function useGlobalForm({ formId, }) {
|
|
47
|
-
const
|
|
46
|
+
export function useGlobalForm({ formId, initialValues, autoCleanup = true, }) {
|
|
47
|
+
const context = useContext(GlobalFormaContext);
|
|
48
|
+
// Context가 제대로 설정되지 않았을 때 명확한 에러 표시
|
|
49
|
+
// Show clear error when Context is not properly configured
|
|
50
|
+
if (!context || !context.getOrCreateStore) {
|
|
51
|
+
// 페이지에 에러가 표시되도록 컴포넌트 렌더링을 방해하는 에러를 던짐
|
|
52
|
+
// Throw error that prevents component rendering so error shows on page
|
|
53
|
+
const errorMessage = `
|
|
54
|
+
🚨 GlobalFormaProvider 설정 오류 | Configuration Error
|
|
55
|
+
|
|
56
|
+
GlobalFormaProvider가 App.tsx에 설정되지 않았습니다!
|
|
57
|
+
GlobalFormaProvider is not configured in App.tsx!
|
|
58
|
+
|
|
59
|
+
해결 방법 | Solution:
|
|
60
|
+
1. App.tsx 파일에서 GlobalFormaProvider로 컴포넌트를 감싸주세요.
|
|
61
|
+
2. import { GlobalFormaProvider } from '@/forma';
|
|
62
|
+
3. <GlobalFormaProvider><YourApp /></GlobalFormaProvider>
|
|
63
|
+
|
|
64
|
+
Details: GlobalFormaContext must be used within GlobalFormaProvider (formId: ${formId})
|
|
65
|
+
`.trim();
|
|
66
|
+
throw new Error(errorMessage);
|
|
67
|
+
}
|
|
68
|
+
const { getOrCreateStore, incrementRef, decrementRef, validateAndStoreAutoCleanupSetting, } = context;
|
|
69
|
+
// autoCleanup 설정 일관성 검증
|
|
70
|
+
validateAndStoreAutoCleanupSetting(formId, autoCleanup);
|
|
48
71
|
// 글로벌 스토어 가져오기 또는 생성 / Get or create global store
|
|
49
72
|
const store = getOrCreateStore(formId);
|
|
50
|
-
// useForm에 외부 스토어 전달
|
|
73
|
+
// useForm에 외부 스토어 전달 / Pass external store to useForm
|
|
51
74
|
const form = useForm({
|
|
52
|
-
initialValues: {},
|
|
75
|
+
initialValues: initialValues || {},
|
|
53
76
|
_externalStore: store,
|
|
54
77
|
});
|
|
78
|
+
// 초기값이 있고 스토어가 비어있다면 초기값 설정 (올바른 방법으로)
|
|
79
|
+
// Set initial values if provided and store is empty (using proper method)
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
if (initialValues && Object.keys(store.getValues()).length === 0) {
|
|
82
|
+
form.setInitialFormValues(initialValues);
|
|
83
|
+
}
|
|
84
|
+
}, [formId, initialValues, store, form]);
|
|
85
|
+
// 참조 카운팅을 통한 자동 정리 관리
|
|
86
|
+
// Auto cleanup management through reference counting
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
if (autoCleanup) {
|
|
89
|
+
// 컴포넌트 마운트 시 참조 카운트 증가
|
|
90
|
+
// Increment reference count on component mount
|
|
91
|
+
incrementRef(formId, autoCleanup);
|
|
92
|
+
return () => {
|
|
93
|
+
// 컴포넌트 언마운트 시 참조 카운트 감소 (마지막 참조자면 자동 정리)
|
|
94
|
+
// Decrement reference count on unmount (auto cleanup if last reference)
|
|
95
|
+
decrementRef(formId, autoCleanup);
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return undefined;
|
|
99
|
+
}, [formId, autoCleanup, incrementRef, decrementRef]);
|
|
55
100
|
return {
|
|
56
101
|
...form,
|
|
57
102
|
formId, // 글로벌 폼 ID 추가 제공 / Provide additional global form ID
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGlobalForm.js","sourceRoot":"","sources":["../../../hooks/useGlobalForm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useGlobalForm.js","sourceRoot":"","sources":["../../../hooks/useGlobalForm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAAgC,EACzD,MAAM,EACN,aAAa,EACb,WAAW,GAAG,IAAI,GACE;IACpB,MAAM,OAAO,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAE/C,oCAAoC;IACpC,2DAA2D;IAC3D,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACxC,uCAAuC;QACvC,uEAAuE;QACvE,MAAM,YAAY,GAAG;;;;;;;;;;;+EAWkD,MAAM;SAC5E,CAAC,IAAI,EAAE,CAAC;QAET,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,EACF,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,kCAAkC,GACrC,GAAG,OAAO,CAAC;IAEZ,wBAAwB;IACxB,kCAAkC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAExD,kDAAkD;IAClD,MAAM,KAAK,GAAG,gBAAgB,CAAI,MAAM,CAAC,CAAC;IAE1C,sDAAsD;IACtD,MAAM,IAAI,GAAG,OAAO,CAAI;QACpB,aAAa,EAAG,aAAmB,IAAK,EAAQ;QAChD,cAAc,EAAE,KAAK;KACxB,CAAC,CAAC;IAEH,uCAAuC;IACvC,0EAA0E;IAC1E,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,oBAAoB,CAAC,aAAkB,CAAC,CAAC;QAClD,CAAC;IACL,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IAEzC,sBAAsB;IACtB,qDAAqD;IACrD,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,WAAW,EAAE,CAAC;YACd,uBAAuB;YACvB,+CAA+C;YAC/C,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAElC,OAAO,GAAG,EAAE;gBACR,yCAAyC;gBACzC,wEAAwE;gBACxE,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACtC,CAAC,CAAC;QACN,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;IAEtD,OAAO;QACH,GAAG,IAAI;QACP,MAAM,EAAE,qDAAqD;QAC7D,MAAM,EAAE,KAAK,EAAE,iDAAiD;KACzC,CAAC;AAChC,CAAC"}
|
|
@@ -101,5 +101,5 @@ import { UseGlobalFormaStateProps, UseGlobalFormaStateReturn } from "../types/gl
|
|
|
101
101
|
* }
|
|
102
102
|
* ```
|
|
103
103
|
*/
|
|
104
|
-
export declare function useGlobalFormaState<T extends Record<string, any>>({ stateId, autoCleanup, }: UseGlobalFormaStateProps<T>): UseGlobalFormaStateReturn<T>;
|
|
104
|
+
export declare function useGlobalFormaState<T extends Record<string, any>>({ stateId, initialValues, autoCleanup, }: UseGlobalFormaStateProps<T>): UseGlobalFormaStateReturn<T>;
|
|
105
105
|
//# sourceMappingURL=useGlobalFormaState.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGlobalFormaState.d.ts","sourceRoot":"","sources":["../../../hooks/useGlobalFormaState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,EACH,wBAAwB,EACxB,yBAAyB,EAC5B,MAAM,qBAAqB,CAAC;AAG7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAC/D,OAAO,EACP,WAAkB,GACrB,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"useGlobalFormaState.d.ts","sourceRoot":"","sources":["../../../hooks/useGlobalFormaState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,EACH,wBAAwB,EACxB,yBAAyB,EAC5B,MAAM,qBAAqB,CAAC;AAG7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAC/D,OAAO,EACP,aAAa,EACb,WAAkB,GACrB,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAqF5D"}
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
28
28
|
* SOFTWARE.
|
|
29
29
|
*/
|
|
30
|
-
import { useContext } from "react";
|
|
30
|
+
import { useContext, useEffect, useRef } from "react";
|
|
31
31
|
import { useFormaState } from "./useFormaState";
|
|
32
32
|
import { GlobalFormaContext } from "../contexts/GlobalFormaContext";
|
|
33
33
|
/**
|
|
@@ -103,14 +103,69 @@ import { GlobalFormaContext } from "../contexts/GlobalFormaContext";
|
|
|
103
103
|
* }
|
|
104
104
|
* ```
|
|
105
105
|
*/
|
|
106
|
-
export function useGlobalFormaState({ stateId, autoCleanup = true, }) {
|
|
107
|
-
const
|
|
106
|
+
export function useGlobalFormaState({ stateId, initialValues, autoCleanup = true, }) {
|
|
107
|
+
const context = useContext(GlobalFormaContext);
|
|
108
|
+
// 참조 등록 상태를 추적하는 ref 추가 + 컴포넌트 고유 ID
|
|
109
|
+
const isRegisteredRef = useRef(false);
|
|
110
|
+
const componentIdRef = useRef(undefined);
|
|
111
|
+
// 컴포넌트 고유 ID 생성 (한 번만)
|
|
112
|
+
if (!componentIdRef.current) {
|
|
113
|
+
componentIdRef.current = `${stateId}-${Date.now()}-${Math.random()
|
|
114
|
+
.toString(36)
|
|
115
|
+
.substr(2, 9)}`;
|
|
116
|
+
}
|
|
117
|
+
// Context가 제대로 설정되지 않았을 때 명확한 에러 표시
|
|
118
|
+
// Show clear error when Context is not properly configured
|
|
119
|
+
if (!context || !context.getOrCreateStore) {
|
|
120
|
+
// 페이지에 에러가 표시되도록 컴포넌트 렌더링을 방해하는 에러를 던짐
|
|
121
|
+
// Throw error that prevents component rendering so error shows on page
|
|
122
|
+
const errorMessage = `
|
|
123
|
+
🚨 GlobalFormaProvider 설정 오류 | Configuration Error
|
|
124
|
+
|
|
125
|
+
GlobalFormaProvider가 App.tsx에 설정되지 않았습니다!
|
|
126
|
+
GlobalFormaProvider is not configured in App.tsx!
|
|
127
|
+
|
|
128
|
+
해결 방법 | Solution:
|
|
129
|
+
1. App.tsx 파일에서 GlobalFormaProvider로 컴포넌트를 감싸주세요.
|
|
130
|
+
2. import { GlobalFormaProvider } from '@/forma';
|
|
131
|
+
3. <GlobalFormaProvider><YourApp /></GlobalFormaProvider>
|
|
132
|
+
|
|
133
|
+
Details: GlobalFormaContext must be used within GlobalFormaProvider (stateId: ${stateId})
|
|
134
|
+
`.trim();
|
|
135
|
+
throw new Error(errorMessage);
|
|
136
|
+
}
|
|
137
|
+
const { getOrCreateStore, incrementRef, decrementRef, validateAndStoreAutoCleanupSetting, } = context;
|
|
138
|
+
// autoCleanup 설정 일관성 검증
|
|
139
|
+
validateAndStoreAutoCleanupSetting(stateId, autoCleanup);
|
|
108
140
|
// 글로벌 스토어 가져오기 또는 생성 / Get or create global store
|
|
109
141
|
const store = getOrCreateStore(stateId);
|
|
110
|
-
// useFormaState에 외부 스토어 전달 (
|
|
111
|
-
const formaState = useFormaState({}, {
|
|
142
|
+
// useFormaState에 초기값과 외부 스토어 전달 (올바른 방식)
|
|
143
|
+
const formaState = useFormaState(initialValues || {}, {
|
|
112
144
|
_externalStore: store,
|
|
113
145
|
});
|
|
146
|
+
// 초기값이 있고 스토어가 비어있다면 초기값 설정 (올바른 방법으로)
|
|
147
|
+
// Set initial values if provided and store is empty (using proper method)
|
|
148
|
+
useEffect(() => {
|
|
149
|
+
if (initialValues && Object.keys(store.getValues()).length === 0) {
|
|
150
|
+
formaState.setInitialValues(initialValues);
|
|
151
|
+
}
|
|
152
|
+
}, [stateId, initialValues, store, formaState]);
|
|
153
|
+
// 참조 카운팅을 통한 자동 정리 관리 (마운트 시 한 번만 실행)
|
|
154
|
+
// Auto cleanup management through reference counting (execute only once on mount)
|
|
155
|
+
useEffect(() => {
|
|
156
|
+
if (!autoCleanup)
|
|
157
|
+
return;
|
|
158
|
+
// 첫 번째 등록시에만 참조 카운트 증가
|
|
159
|
+
const componentId = componentIdRef.current;
|
|
160
|
+
context.incrementRef(stateId, autoCleanup);
|
|
161
|
+
isRegisteredRef.current = true;
|
|
162
|
+
return () => {
|
|
163
|
+
// 컴포넌트 언마운트 시에만 참조 카운트 감소
|
|
164
|
+
context.decrementRef(stateId, autoCleanup);
|
|
165
|
+
isRegisteredRef.current = false;
|
|
166
|
+
};
|
|
167
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
168
|
+
}, []); // 완전히 빈 의존성 배열로 마운트 시 한 번만 실행
|
|
114
169
|
return {
|
|
115
170
|
...formaState,
|
|
116
171
|
stateId, // 글로벌 FormaState ID 추가 제공 / Provide additional global FormaState ID
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGlobalFormaState.js","sourceRoot":"","sources":["../../../hooks/useGlobalFormaState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useGlobalFormaState.js","sourceRoot":"","sources":["../../../hooks/useGlobalFormaState.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,8 @@ export interface GlobalFormaProviderProps {
|
|
|
42
42
|
export interface UseGlobalFormProps<T extends Record<string, any>> {
|
|
43
43
|
/** 전역에서 폼을 식별하는 고유 ID | Unique ID to identify form globally */
|
|
44
44
|
formId: string;
|
|
45
|
+
/** 초기값 | Initial values for the form */
|
|
46
|
+
initialValues?: Partial<T>;
|
|
45
47
|
/** 컴포넌트 언마운트 시 자동 정리 여부 | Auto cleanup on component unmount */
|
|
46
48
|
autoCleanup?: boolean;
|
|
47
49
|
}
|
|
@@ -52,6 +54,8 @@ export interface UseGlobalFormProps<T extends Record<string, any>> {
|
|
|
52
54
|
export interface UseGlobalFormaStateProps<T extends Record<string, any>> {
|
|
53
55
|
/** 전역에서 상태를 식별하는 고유 ID | Unique ID to identify state globally */
|
|
54
56
|
stateId: string;
|
|
57
|
+
/** 초기값 | Initial values for the state */
|
|
58
|
+
initialValues?: Partial<T>;
|
|
55
59
|
/** 컴포넌트 언마운트 시 자동 정리 여부 | Auto cleanup on component unmount */
|
|
56
60
|
autoCleanup?: boolean;
|
|
57
61
|
}
|
|
@@ -331,5 +335,11 @@ export interface GlobalFormaContextType {
|
|
|
331
335
|
registerStore: <T extends Record<string, any>>(formId: string, store: FieldStore<T>) => void;
|
|
332
336
|
unregisterStore: (formId: string) => boolean;
|
|
333
337
|
clearStores: () => void;
|
|
338
|
+
/** 스토어 사용 참조를 증가시킵니다 | Increment store usage reference */
|
|
339
|
+
incrementRef: (formId: string, autoCleanup: boolean) => void;
|
|
340
|
+
/** 스토어 사용 참조를 감소시키고, autoCleanup 참조가 0이 되면 자동 정리합니다 | Decrement store usage reference and auto cleanup when autoCleanup refs reach 0 */
|
|
341
|
+
decrementRef: (formId: string, autoCleanup: boolean) => void;
|
|
342
|
+
/** autoCleanup 설정의 일관성을 검증하고 설정을 저장합니다 | Validate and store autoCleanup setting consistency */
|
|
343
|
+
validateAndStoreAutoCleanupSetting: (formId: string, autoCleanup: boolean) => void;
|
|
334
344
|
}
|
|
335
345
|
//# sourceMappingURL=globalForm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globalForm.d.ts","sourceRoot":"","sources":["../../../types/globalForm.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"globalForm.d.ts","sourceRoot":"","sources":["../../../types/globalForm.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globalForm.js","sourceRoot":"","sources":["../../../types/globalForm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;
|
|
1
|
+
{"version":3,"file":"globalForm.js","sourceRoot":"","sources":["../../../types/globalForm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAuOH;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACtC,YACI,OAAe,EACR,MAAe,EACf,SAAkB;QAEzB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,WAAM,GAAN,MAAM,CAAS;QACf,cAAS,GAAT,SAAS,CAAS;QAGzB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAClC,CAAC;CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFormaState.d.ts","sourceRoot":"","sources":["../../hooks/useFormaState.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"useFormaState.d.ts","sourceRoot":"","sources":["../../hooks/useFormaState.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD;;;GAGG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC/D,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;IAE/B,qFAAqF;IACrF,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,mFAAmF;IACnF,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAE/B,4DAA4D;IAC5D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAEjC,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC9D,gFAAgF;IAChF,QAAQ,EAAE,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC;IAE7C,+EAA+E;IAC/E,QAAQ,EAAE,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAE1D,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC,CAAC;IAEnB,6CAA6C;IAC7C,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAExC,0CAA0C;IAC1C,KAAK,EAAE,MAAM,IAAI,CAAC;IAElB,+EAA+E;IAC/E,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAC,KAAK,IAAI,CAAC;IAEhD,4DAA4D;IAC5D,YAAY,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAE/C,4CAA4C;IAC5C,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAEpC,6CAA6C;IAC7C,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEpC,sEAAsE;IACtE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAC;IAEhC,oDAAoD;IACpD,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAEzD,sFAAsF;IACtF,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;CACzB;AAgCD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,GAAG,GAAG,EACxC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,EACtB,IAAI,EAAE,MAAM,GACb,CAAC,CAEH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,wBAAgB,aAAa,CACzB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACrD,aAAa,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAGhF,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACvD,aAAa,EAAE,CAAC,EAChB,OAAO,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAClC,mBAAmB,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -24,14 +24,20 @@ const utils_1 = require("../utils");
|
|
|
24
24
|
*/
|
|
25
25
|
function useFieldValue(store, fieldName) {
|
|
26
26
|
const [value, setValue] = (0, react_1.useState)(() => store.getValue(fieldName));
|
|
27
|
+
const [, forceUpdate] = (0, react_1.useReducer)((x) => x + 1, 0);
|
|
27
28
|
(0, react_1.useEffect)(() => {
|
|
29
|
+
// 초기값 강제 동기화
|
|
30
|
+
const currentValue = store.getValue(fieldName);
|
|
31
|
+
setValue(currentValue);
|
|
28
32
|
// 구독 설정 / Setup subscription
|
|
29
33
|
const unsubscribe = store.subscribe(fieldName, () => {
|
|
30
34
|
const newValue = store.getValue(fieldName);
|
|
31
35
|
setValue(newValue);
|
|
36
|
+
// useReducer를 사용한 강제 리렌더링
|
|
37
|
+
forceUpdate();
|
|
32
38
|
});
|
|
33
39
|
return unsubscribe;
|
|
34
|
-
}, [fieldName]); //
|
|
40
|
+
}, [fieldName, store]); // 깔끔한 의존성 배열
|
|
35
41
|
return value;
|
|
36
42
|
}
|
|
37
43
|
/**
|
|
@@ -58,6 +64,14 @@ function useFormaState(initialValues = {}, options = {}) {
|
|
|
58
64
|
const storeRef = (0, react_1.useRef)(null);
|
|
59
65
|
if (_externalStore) {
|
|
60
66
|
storeRef.current = _externalStore;
|
|
67
|
+
// 외부 스토어 사용 시 초기값이 비어있으면 설정
|
|
68
|
+
const currentValues = _externalStore.getValues();
|
|
69
|
+
if (Object.keys(currentValues).length === 0 &&
|
|
70
|
+
Object.keys(initialValues).length > 0) {
|
|
71
|
+
Object.keys(initialValues).forEach((key) => {
|
|
72
|
+
_externalStore.setValue(key, initialValues[key]);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
61
75
|
}
|
|
62
76
|
else if (!storeRef.current) {
|
|
63
77
|
storeRef.current = new FieldStore_1.FieldStore(stableInitialValues.current);
|
|
@@ -74,38 +88,38 @@ function useFormaState(initialValues = {}, options = {}) {
|
|
|
74
88
|
// dot notation으로 특정 필드 값 구독
|
|
75
89
|
const useValue = (0, react_1.useCallback)((path) => {
|
|
76
90
|
return useFieldValue(store, path);
|
|
77
|
-
}, [] // store 의존성
|
|
91
|
+
}, [store] // store 의존성 추가 - 외부 스토어 사용 시 중요
|
|
78
92
|
);
|
|
79
93
|
// Set a specific field value with dot notation
|
|
80
94
|
// dot notation으로 특정 필드 값 설정
|
|
81
95
|
const setValue = (0, react_1.useCallback)((path, value) => {
|
|
82
96
|
store.setValue(path, value);
|
|
83
|
-
}, [] // store 의존성
|
|
97
|
+
}, [store] // store 의존성 추가
|
|
84
98
|
);
|
|
85
99
|
// Get all current values (non-reactive)
|
|
86
100
|
// 모든 현재 값 가져오기 (반응형 아님)
|
|
87
101
|
const getValues = (0, react_1.useCallback)(() => {
|
|
88
102
|
return store.getValues();
|
|
89
|
-
}, []); // store 의존성
|
|
103
|
+
}, [store]); // store 의존성 추가
|
|
90
104
|
// Set all values at once
|
|
91
105
|
// 모든 값을 한 번에 설정
|
|
92
106
|
const setValues = (0, react_1.useCallback)((values) => {
|
|
93
107
|
const currentValues = store.getValues();
|
|
94
108
|
const newValues = { ...currentValues, ...values };
|
|
95
109
|
store.setValues(newValues);
|
|
96
|
-
}, [] // store 의존성
|
|
110
|
+
}, [store] // store 의존성 추가
|
|
97
111
|
);
|
|
98
112
|
// Reset to initial values
|
|
99
113
|
// 초기값으로 재설정
|
|
100
114
|
const reset = (0, react_1.useCallback)(() => {
|
|
101
115
|
store.reset();
|
|
102
|
-
}, []); // store 의존성
|
|
116
|
+
}, [store]); // store 의존성 추가
|
|
103
117
|
// Set new initial values (for dynamic initialization)
|
|
104
118
|
// 새 초기값 설정 (동적 초기화용)
|
|
105
119
|
const setInitialValues = (0, react_1.useCallback)((newInitialValues) => {
|
|
106
120
|
stableInitialValues.current = newInitialValues;
|
|
107
121
|
store.setInitialValues(newInitialValues);
|
|
108
|
-
}, []); // store 의존성
|
|
122
|
+
}, [store]); // store 의존성 추가
|
|
109
123
|
// Handle standard input change events
|
|
110
124
|
// 표준 입력 변경 이벤트 처리
|
|
111
125
|
const handleChange = (0, react_1.useCallback)((event) => {
|
|
@@ -144,19 +158,19 @@ function useFormaState(initialValues = {}, options = {}) {
|
|
|
144
158
|
handleChange,
|
|
145
159
|
hasField: (0, react_1.useCallback)((path) => {
|
|
146
160
|
return store.hasField(path);
|
|
147
|
-
}, [] // store 의존성
|
|
161
|
+
}, [store] // store 의존성 추가
|
|
148
162
|
),
|
|
149
163
|
removeField: (0, react_1.useCallback)((path) => {
|
|
150
164
|
store.removeField(path);
|
|
151
|
-
}, [] // store 의존성
|
|
165
|
+
}, [store] // store 의존성 추가
|
|
152
166
|
),
|
|
153
167
|
getValue: (0, react_1.useCallback)((path) => {
|
|
154
168
|
return store.getValue(path);
|
|
155
|
-
}, [] // store 의존성
|
|
169
|
+
}, [store] // store 의존성 추가
|
|
156
170
|
),
|
|
157
171
|
subscribe: (0, react_1.useCallback)((callback) => {
|
|
158
172
|
return store.subscribeToAll(callback);
|
|
159
|
-
}, [] // store 의존성
|
|
173
|
+
}, [store] // store 의존성 추가
|
|
160
174
|
),
|
|
161
175
|
_store: store,
|
|
162
176
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFormaState.js","sourceRoot":"","sources":["../../hooks/useFormaState.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;
|
|
1
|
+
{"version":3,"file":"useFormaState.js","sourceRoot":"","sources":["../../hooks/useFormaState.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,5 +41,5 @@ import { UseGlobalFormProps, UseGlobalFormReturn } from "../types/globalForm";
|
|
|
41
41
|
* @param props 글로벌 폼 설정 옵션 / Global form configuration options
|
|
42
42
|
* @returns 글로벌 폼 관리 API 객체 / Global form management API object
|
|
43
43
|
*/
|
|
44
|
-
export declare function useGlobalForm<T extends Record<string, any>>({ formId, }: UseGlobalFormProps<T>): UseGlobalFormReturn<T>;
|
|
44
|
+
export declare function useGlobalForm<T extends Record<string, any>>({ formId, initialValues, autoCleanup, }: UseGlobalFormProps<T>): UseGlobalFormReturn<T>;
|
|
45
45
|
//# sourceMappingURL=useGlobalForm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGlobalForm.d.ts","sourceRoot":"","sources":["../../hooks/useGlobalForm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG9E;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EACzD,MAAM,
|
|
1
|
+
{"version":3,"file":"useGlobalForm.d.ts","sourceRoot":"","sources":["../../hooks/useGlobalForm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG9E;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EACzD,MAAM,EACN,aAAa,EACb,WAAkB,GACrB,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CA2EhD"}
|
|
@@ -46,15 +46,60 @@ const GlobalFormaContext_1 = require("../contexts/GlobalFormaContext");
|
|
|
46
46
|
* @param props 글로벌 폼 설정 옵션 / Global form configuration options
|
|
47
47
|
* @returns 글로벌 폼 관리 API 객체 / Global form management API object
|
|
48
48
|
*/
|
|
49
|
-
function useGlobalForm({ formId, }) {
|
|
50
|
-
const
|
|
49
|
+
function useGlobalForm({ formId, initialValues, autoCleanup = true, }) {
|
|
50
|
+
const context = (0, react_1.useContext)(GlobalFormaContext_1.GlobalFormaContext);
|
|
51
|
+
// Context가 제대로 설정되지 않았을 때 명확한 에러 표시
|
|
52
|
+
// Show clear error when Context is not properly configured
|
|
53
|
+
if (!context || !context.getOrCreateStore) {
|
|
54
|
+
// 페이지에 에러가 표시되도록 컴포넌트 렌더링을 방해하는 에러를 던짐
|
|
55
|
+
// Throw error that prevents component rendering so error shows on page
|
|
56
|
+
const errorMessage = `
|
|
57
|
+
🚨 GlobalFormaProvider 설정 오류 | Configuration Error
|
|
58
|
+
|
|
59
|
+
GlobalFormaProvider가 App.tsx에 설정되지 않았습니다!
|
|
60
|
+
GlobalFormaProvider is not configured in App.tsx!
|
|
61
|
+
|
|
62
|
+
해결 방법 | Solution:
|
|
63
|
+
1. App.tsx 파일에서 GlobalFormaProvider로 컴포넌트를 감싸주세요.
|
|
64
|
+
2. import { GlobalFormaProvider } from '@/forma';
|
|
65
|
+
3. <GlobalFormaProvider><YourApp /></GlobalFormaProvider>
|
|
66
|
+
|
|
67
|
+
Details: GlobalFormaContext must be used within GlobalFormaProvider (formId: ${formId})
|
|
68
|
+
`.trim();
|
|
69
|
+
throw new Error(errorMessage);
|
|
70
|
+
}
|
|
71
|
+
const { getOrCreateStore, incrementRef, decrementRef, validateAndStoreAutoCleanupSetting, } = context;
|
|
72
|
+
// autoCleanup 설정 일관성 검증
|
|
73
|
+
validateAndStoreAutoCleanupSetting(formId, autoCleanup);
|
|
51
74
|
// 글로벌 스토어 가져오기 또는 생성 / Get or create global store
|
|
52
75
|
const store = getOrCreateStore(formId);
|
|
53
|
-
// useForm에 외부 스토어 전달
|
|
76
|
+
// useForm에 외부 스토어 전달 / Pass external store to useForm
|
|
54
77
|
const form = (0, useForm_1.useForm)({
|
|
55
|
-
initialValues: {},
|
|
78
|
+
initialValues: initialValues || {},
|
|
56
79
|
_externalStore: store,
|
|
57
80
|
});
|
|
81
|
+
// 초기값이 있고 스토어가 비어있다면 초기값 설정 (올바른 방법으로)
|
|
82
|
+
// Set initial values if provided and store is empty (using proper method)
|
|
83
|
+
(0, react_1.useEffect)(() => {
|
|
84
|
+
if (initialValues && Object.keys(store.getValues()).length === 0) {
|
|
85
|
+
form.setInitialFormValues(initialValues);
|
|
86
|
+
}
|
|
87
|
+
}, [formId, initialValues, store, form]);
|
|
88
|
+
// 참조 카운팅을 통한 자동 정리 관리
|
|
89
|
+
// Auto cleanup management through reference counting
|
|
90
|
+
(0, react_1.useEffect)(() => {
|
|
91
|
+
if (autoCleanup) {
|
|
92
|
+
// 컴포넌트 마운트 시 참조 카운트 증가
|
|
93
|
+
// Increment reference count on component mount
|
|
94
|
+
incrementRef(formId, autoCleanup);
|
|
95
|
+
return () => {
|
|
96
|
+
// 컴포넌트 언마운트 시 참조 카운트 감소 (마지막 참조자면 자동 정리)
|
|
97
|
+
// Decrement reference count on unmount (auto cleanup if last reference)
|
|
98
|
+
decrementRef(formId, autoCleanup);
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
return undefined;
|
|
102
|
+
}, [formId, autoCleanup, incrementRef, decrementRef]);
|
|
58
103
|
return {
|
|
59
104
|
...form,
|
|
60
105
|
formId, // 글로벌 폼 ID 추가 제공 / Provide additional global form ID
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGlobalForm.js","sourceRoot":"","sources":["../../hooks/useGlobalForm.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;;AAoBH,
|
|
1
|
+
{"version":3,"file":"useGlobalForm.js","sourceRoot":"","sources":["../../hooks/useGlobalForm.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;;AAoBH,sCA+EC;AAjGD,iCAA8C;AAC9C,uCAAoC;AAEpC,uEAAoE;AAEpE;;;;;;;;;;;;GAYG;AACH,SAAgB,aAAa,CAAgC,EACzD,MAAM,EACN,aAAa,EACb,WAAW,GAAG,IAAI,GACE;IACpB,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,uCAAkB,CAAC,CAAC;IAE/C,oCAAoC;IACpC,2DAA2D;IAC3D,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACxC,uCAAuC;QACvC,uEAAuE;QACvE,MAAM,YAAY,GAAG;;;;;;;;;;;+EAWkD,MAAM;SAC5E,CAAC,IAAI,EAAE,CAAC;QAET,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,EACF,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,kCAAkC,GACrC,GAAG,OAAO,CAAC;IAEZ,wBAAwB;IACxB,kCAAkC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAExD,kDAAkD;IAClD,MAAM,KAAK,GAAG,gBAAgB,CAAI,MAAM,CAAC,CAAC;IAE1C,sDAAsD;IACtD,MAAM,IAAI,GAAG,IAAA,iBAAO,EAAI;QACpB,aAAa,EAAG,aAAmB,IAAK,EAAQ;QAChD,cAAc,EAAE,KAAK;KACxB,CAAC,CAAC;IAEH,uCAAuC;IACvC,0EAA0E;IAC1E,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,oBAAoB,CAAC,aAAkB,CAAC,CAAC;QAClD,CAAC;IACL,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IAEzC,sBAAsB;IACtB,qDAAqD;IACrD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,WAAW,EAAE,CAAC;YACd,uBAAuB;YACvB,+CAA+C;YAC/C,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAElC,OAAO,GAAG,EAAE;gBACR,yCAAyC;gBACzC,wEAAwE;gBACxE,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACtC,CAAC,CAAC;QACN,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;IAEtD,OAAO;QACH,GAAG,IAAI;QACP,MAAM,EAAE,qDAAqD;QAC7D,MAAM,EAAE,KAAK,EAAE,iDAAiD;KACzC,CAAC;AAChC,CAAC"}
|
|
@@ -101,5 +101,5 @@ import { UseGlobalFormaStateProps, UseGlobalFormaStateReturn } from "../types/gl
|
|
|
101
101
|
* }
|
|
102
102
|
* ```
|
|
103
103
|
*/
|
|
104
|
-
export declare function useGlobalFormaState<T extends Record<string, any>>({ stateId, autoCleanup, }: UseGlobalFormaStateProps<T>): UseGlobalFormaStateReturn<T>;
|
|
104
|
+
export declare function useGlobalFormaState<T extends Record<string, any>>({ stateId, initialValues, autoCleanup, }: UseGlobalFormaStateProps<T>): UseGlobalFormaStateReturn<T>;
|
|
105
105
|
//# sourceMappingURL=useGlobalFormaState.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGlobalFormaState.d.ts","sourceRoot":"","sources":["../../hooks/useGlobalFormaState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,EACH,wBAAwB,EACxB,yBAAyB,EAC5B,MAAM,qBAAqB,CAAC;AAG7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAC/D,OAAO,EACP,WAAkB,GACrB,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"useGlobalFormaState.d.ts","sourceRoot":"","sources":["../../hooks/useGlobalFormaState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,EACH,wBAAwB,EACxB,yBAAyB,EAC5B,MAAM,qBAAqB,CAAC;AAG7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAC/D,OAAO,EACP,aAAa,EACb,WAAkB,GACrB,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAqF5D"}
|
|
@@ -106,14 +106,69 @@ const GlobalFormaContext_1 = require("../contexts/GlobalFormaContext");
|
|
|
106
106
|
* }
|
|
107
107
|
* ```
|
|
108
108
|
*/
|
|
109
|
-
function useGlobalFormaState({ stateId, autoCleanup = true, }) {
|
|
110
|
-
const
|
|
109
|
+
function useGlobalFormaState({ stateId, initialValues, autoCleanup = true, }) {
|
|
110
|
+
const context = (0, react_1.useContext)(GlobalFormaContext_1.GlobalFormaContext);
|
|
111
|
+
// 참조 등록 상태를 추적하는 ref 추가 + 컴포넌트 고유 ID
|
|
112
|
+
const isRegisteredRef = (0, react_1.useRef)(false);
|
|
113
|
+
const componentIdRef = (0, react_1.useRef)(undefined);
|
|
114
|
+
// 컴포넌트 고유 ID 생성 (한 번만)
|
|
115
|
+
if (!componentIdRef.current) {
|
|
116
|
+
componentIdRef.current = `${stateId}-${Date.now()}-${Math.random()
|
|
117
|
+
.toString(36)
|
|
118
|
+
.substr(2, 9)}`;
|
|
119
|
+
}
|
|
120
|
+
// Context가 제대로 설정되지 않았을 때 명확한 에러 표시
|
|
121
|
+
// Show clear error when Context is not properly configured
|
|
122
|
+
if (!context || !context.getOrCreateStore) {
|
|
123
|
+
// 페이지에 에러가 표시되도록 컴포넌트 렌더링을 방해하는 에러를 던짐
|
|
124
|
+
// Throw error that prevents component rendering so error shows on page
|
|
125
|
+
const errorMessage = `
|
|
126
|
+
🚨 GlobalFormaProvider 설정 오류 | Configuration Error
|
|
127
|
+
|
|
128
|
+
GlobalFormaProvider가 App.tsx에 설정되지 않았습니다!
|
|
129
|
+
GlobalFormaProvider is not configured in App.tsx!
|
|
130
|
+
|
|
131
|
+
해결 방법 | Solution:
|
|
132
|
+
1. App.tsx 파일에서 GlobalFormaProvider로 컴포넌트를 감싸주세요.
|
|
133
|
+
2. import { GlobalFormaProvider } from '@/forma';
|
|
134
|
+
3. <GlobalFormaProvider><YourApp /></GlobalFormaProvider>
|
|
135
|
+
|
|
136
|
+
Details: GlobalFormaContext must be used within GlobalFormaProvider (stateId: ${stateId})
|
|
137
|
+
`.trim();
|
|
138
|
+
throw new Error(errorMessage);
|
|
139
|
+
}
|
|
140
|
+
const { getOrCreateStore, incrementRef, decrementRef, validateAndStoreAutoCleanupSetting, } = context;
|
|
141
|
+
// autoCleanup 설정 일관성 검증
|
|
142
|
+
validateAndStoreAutoCleanupSetting(stateId, autoCleanup);
|
|
111
143
|
// 글로벌 스토어 가져오기 또는 생성 / Get or create global store
|
|
112
144
|
const store = getOrCreateStore(stateId);
|
|
113
|
-
// useFormaState에 외부 스토어 전달 (
|
|
114
|
-
const formaState = (0, useFormaState_1.useFormaState)({}, {
|
|
145
|
+
// useFormaState에 초기값과 외부 스토어 전달 (올바른 방식)
|
|
146
|
+
const formaState = (0, useFormaState_1.useFormaState)(initialValues || {}, {
|
|
115
147
|
_externalStore: store,
|
|
116
148
|
});
|
|
149
|
+
// 초기값이 있고 스토어가 비어있다면 초기값 설정 (올바른 방법으로)
|
|
150
|
+
// Set initial values if provided and store is empty (using proper method)
|
|
151
|
+
(0, react_1.useEffect)(() => {
|
|
152
|
+
if (initialValues && Object.keys(store.getValues()).length === 0) {
|
|
153
|
+
formaState.setInitialValues(initialValues);
|
|
154
|
+
}
|
|
155
|
+
}, [stateId, initialValues, store, formaState]);
|
|
156
|
+
// 참조 카운팅을 통한 자동 정리 관리 (마운트 시 한 번만 실행)
|
|
157
|
+
// Auto cleanup management through reference counting (execute only once on mount)
|
|
158
|
+
(0, react_1.useEffect)(() => {
|
|
159
|
+
if (!autoCleanup)
|
|
160
|
+
return;
|
|
161
|
+
// 첫 번째 등록시에만 참조 카운트 증가
|
|
162
|
+
const componentId = componentIdRef.current;
|
|
163
|
+
context.incrementRef(stateId, autoCleanup);
|
|
164
|
+
isRegisteredRef.current = true;
|
|
165
|
+
return () => {
|
|
166
|
+
// 컴포넌트 언마운트 시에만 참조 카운트 감소
|
|
167
|
+
context.decrementRef(stateId, autoCleanup);
|
|
168
|
+
isRegisteredRef.current = false;
|
|
169
|
+
};
|
|
170
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
171
|
+
}, []); // 완전히 빈 의존성 배열로 마운트 시 한 번만 실행
|
|
117
172
|
return {
|
|
118
173
|
...formaState,
|
|
119
174
|
stateId, // 글로벌 FormaState ID 추가 제공 / Provide additional global FormaState ID
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGlobalFormaState.js","sourceRoot":"","sources":["../../hooks/useGlobalFormaState.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;;AAmFH,
|
|
1
|
+
{"version":3,"file":"useGlobalFormaState.js","sourceRoot":"","sources":["../../hooks/useGlobalFormaState.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;;AAmFH,kDAyFC;AA1KD,iCAAsD;AACtD,mDAAgD;AAKhD,uEAAoE;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AACH,SAAgB,mBAAmB,CAAgC,EAC/D,OAAO,EACP,aAAa,EACb,WAAW,GAAG,IAAI,GACQ;IAC1B,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,uCAAkB,CAAC,CAAC;IAE/C,qCAAqC;IACrC,MAAM,eAAe,GAAG,IAAA,cAAM,EAAC,KAAK,CAAC,CAAC;IACtC,MAAM,cAAc,GAAG,IAAA,cAAM,EAAqB,SAAS,CAAC,CAAC;IAE7D,uBAAuB;IACvB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAC1B,cAAc,CAAC,OAAO,GAAG,GAAG,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;aAC7D,QAAQ,CAAC,EAAE,CAAC;aACZ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACxB,CAAC;IAED,oCAAoC;IACpC,2DAA2D;IAC3D,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACxC,uCAAuC;QACvC,uEAAuE;QACvE,MAAM,YAAY,GAAG;;;;;;;;;;;gFAWmD,OAAO;SAC9E,CAAC,IAAI,EAAE,CAAC;QAET,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,EACF,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,kCAAkC,GACrC,GAAG,OAAO,CAAC;IAEZ,wBAAwB;IACxB,kCAAkC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAEzD,kDAAkD;IAClD,MAAM,KAAK,GAAG,gBAAgB,CAAI,OAAO,CAAC,CAAC;IAE3C,yCAAyC;IACzC,MAAM,UAAU,GAAG,IAAA,6BAAa,EAAK,aAAmB,IAAK,EAAQ,EAAE;QACnE,cAAc,EAAE,KAAK;KACxB,CAAC,CAAC;IAEH,uCAAuC;IACvC,0EAA0E;IAC1E,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/D,UAAU,CAAC,gBAAgB,CAAC,aAAkB,CAAC,CAAC;QACpD,CAAC;IACL,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAEhD,sCAAsC;IACtC,kFAAkF;IAClF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACX,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,uBAAuB;QACvB,MAAM,WAAW,GAAG,cAAc,CAAC,OAAQ,CAAC;QAC5C,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC3C,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;QAE/B,OAAO,GAAG,EAAE;YACR,0BAA0B;YAC1B,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAC3C,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC;QACpC,CAAC,CAAC;QACF,uDAAuD;IAC3D,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,8BAA8B;IAEtC,OAAO;QACH,GAAG,UAAU;QACb,OAAO,EAAE,oEAAoE;QAC7E,MAAM,EAAE,KAAK,EAAE,gFAAgF;KAClE,CAAC;AACtC,CAAC"}
|
|
@@ -42,6 +42,8 @@ export interface GlobalFormaProviderProps {
|
|
|
42
42
|
export interface UseGlobalFormProps<T extends Record<string, any>> {
|
|
43
43
|
/** 전역에서 폼을 식별하는 고유 ID | Unique ID to identify form globally */
|
|
44
44
|
formId: string;
|
|
45
|
+
/** 초기값 | Initial values for the form */
|
|
46
|
+
initialValues?: Partial<T>;
|
|
45
47
|
/** 컴포넌트 언마운트 시 자동 정리 여부 | Auto cleanup on component unmount */
|
|
46
48
|
autoCleanup?: boolean;
|
|
47
49
|
}
|
|
@@ -52,6 +54,8 @@ export interface UseGlobalFormProps<T extends Record<string, any>> {
|
|
|
52
54
|
export interface UseGlobalFormaStateProps<T extends Record<string, any>> {
|
|
53
55
|
/** 전역에서 상태를 식별하는 고유 ID | Unique ID to identify state globally */
|
|
54
56
|
stateId: string;
|
|
57
|
+
/** 초기값 | Initial values for the state */
|
|
58
|
+
initialValues?: Partial<T>;
|
|
55
59
|
/** 컴포넌트 언마운트 시 자동 정리 여부 | Auto cleanup on component unmount */
|
|
56
60
|
autoCleanup?: boolean;
|
|
57
61
|
}
|
|
@@ -331,5 +335,11 @@ export interface GlobalFormaContextType {
|
|
|
331
335
|
registerStore: <T extends Record<string, any>>(formId: string, store: FieldStore<T>) => void;
|
|
332
336
|
unregisterStore: (formId: string) => boolean;
|
|
333
337
|
clearStores: () => void;
|
|
338
|
+
/** 스토어 사용 참조를 증가시킵니다 | Increment store usage reference */
|
|
339
|
+
incrementRef: (formId: string, autoCleanup: boolean) => void;
|
|
340
|
+
/** 스토어 사용 참조를 감소시키고, autoCleanup 참조가 0이 되면 자동 정리합니다 | Decrement store usage reference and auto cleanup when autoCleanup refs reach 0 */
|
|
341
|
+
decrementRef: (formId: string, autoCleanup: boolean) => void;
|
|
342
|
+
/** autoCleanup 설정의 일관성을 검증하고 설정을 저장합니다 | Validate and store autoCleanup setting consistency */
|
|
343
|
+
validateAndStoreAutoCleanupSetting: (formId: string, autoCleanup: boolean) => void;
|
|
334
344
|
}
|
|
335
345
|
//# sourceMappingURL=globalForm.d.ts.map
|