@ehfuse/forma 1.4.2 → 1.4.5
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/{GlobalFormContext.d.ts → GlobalFormaContext.d.ts} +12 -12
- package/dist/contexts/GlobalFormaContext.d.ts.map +1 -0
- package/dist/contexts/{GlobalFormContext.js → GlobalFormaContext.js} +42 -16
- package/dist/contexts/GlobalFormaContext.js.map +1 -0
- package/dist/esm/contexts/{GlobalFormContext.d.ts → GlobalFormaContext.d.ts} +12 -12
- package/dist/esm/contexts/GlobalFormaContext.d.ts.map +1 -0
- package/dist/esm/contexts/{GlobalFormContext.js → GlobalFormaContext.js} +40 -14
- package/dist/esm/contexts/GlobalFormaContext.js.map +1 -0
- package/dist/esm/hooks/useForm.js +11 -2
- package/dist/esm/hooks/useForm.js.map +1 -1
- package/dist/esm/hooks/useFormaState.d.ts +2 -0
- package/dist/esm/hooks/useFormaState.d.ts.map +1 -1
- package/dist/esm/hooks/useFormaState.js +14 -15
- package/dist/esm/hooks/useFormaState.js.map +1 -1
- package/dist/esm/hooks/useGlobalForm.js +2 -2
- package/dist/esm/hooks/useGlobalForm.js.map +1 -1
- package/dist/esm/hooks/useGlobalFormaState.js +2 -2
- package/dist/esm/hooks/useGlobalFormaState.js.map +1 -1
- package/dist/esm/hooks/useRegisterGlobalForm.js +2 -2
- package/dist/esm/hooks/useRegisterGlobalForm.js.map +1 -1
- package/dist/esm/hooks/useRegisterGlobalFormaState.d.ts +55 -0
- package/dist/esm/hooks/useRegisterGlobalFormaState.d.ts.map +1 -0
- package/dist/esm/hooks/useRegisterGlobalFormaState.js +64 -0
- package/dist/esm/hooks/useRegisterGlobalFormaState.js.map +1 -0
- package/dist/esm/hooks/useUnregisterGlobalForm.d.ts +68 -0
- package/dist/esm/hooks/useUnregisterGlobalForm.d.ts.map +1 -0
- package/dist/esm/hooks/useUnregisterGlobalForm.js +88 -0
- package/dist/esm/hooks/useUnregisterGlobalForm.js.map +1 -0
- package/dist/esm/hooks/useUnregisterGlobalFormaState.d.ts +69 -0
- package/dist/esm/hooks/useUnregisterGlobalFormaState.d.ts.map +1 -0
- package/dist/esm/hooks/useUnregisterGlobalFormaState.js +89 -0
- package/dist/esm/hooks/useUnregisterGlobalFormaState.js.map +1 -0
- package/dist/esm/index.d.ts +5 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +4 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/globalForm.d.ts +56 -7
- package/dist/esm/types/globalForm.d.ts.map +1 -1
- package/dist/esm/types/globalForm.js.map +1 -1
- package/dist/esm/types/index.d.ts +1 -1
- package/dist/esm/types/index.d.ts.map +1 -1
- package/dist/esm/types/index.js.map +1 -1
- package/dist/hooks/useForm.js +10 -1
- package/dist/hooks/useForm.js.map +1 -1
- package/dist/hooks/useFormaState.d.ts +2 -0
- package/dist/hooks/useFormaState.d.ts.map +1 -1
- package/dist/hooks/useFormaState.js +14 -15
- package/dist/hooks/useFormaState.js.map +1 -1
- package/dist/hooks/useGlobalForm.js +2 -2
- package/dist/hooks/useGlobalForm.js.map +1 -1
- package/dist/hooks/useGlobalFormaState.js +2 -2
- package/dist/hooks/useGlobalFormaState.js.map +1 -1
- package/dist/hooks/useRegisterGlobalForm.js +2 -2
- package/dist/hooks/useRegisterGlobalForm.js.map +1 -1
- package/dist/hooks/useRegisterGlobalFormaState.d.ts +55 -0
- package/dist/hooks/useRegisterGlobalFormaState.d.ts.map +1 -0
- package/dist/hooks/useRegisterGlobalFormaState.js +67 -0
- package/dist/hooks/useRegisterGlobalFormaState.js.map +1 -0
- package/dist/hooks/useUnregisterGlobalForm.d.ts +68 -0
- package/dist/hooks/useUnregisterGlobalForm.d.ts.map +1 -0
- package/dist/hooks/useUnregisterGlobalForm.js +91 -0
- package/dist/hooks/useUnregisterGlobalForm.js.map +1 -0
- package/dist/hooks/useUnregisterGlobalFormaState.d.ts +69 -0
- package/dist/hooks/useUnregisterGlobalFormaState.d.ts.map +1 -0
- package/dist/hooks/useUnregisterGlobalFormaState.js +92 -0
- package/dist/hooks/useUnregisterGlobalFormaState.js.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/types/globalForm.d.ts +56 -7
- package/dist/types/globalForm.d.ts.map +1 -1
- package/dist/types/globalForm.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/contexts/GlobalFormContext.d.ts.map +0 -1
- package/dist/contexts/GlobalFormContext.js.map +0 -1
- package/dist/esm/contexts/GlobalFormContext.d.ts.map +0 -1
- package/dist/esm/contexts/GlobalFormContext.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* GlobalFormaContext.tsx
|
|
3
3
|
*
|
|
4
|
-
* Forma - 글로벌
|
|
4
|
+
* Forma - 글로벌 Forma 상태 관리 컨텍스트 | Global Forma state management context
|
|
5
5
|
* 여러 컴포넌트 간 폼 상태 공유를 위한 React Context | React Context for sharing form state across multiple components
|
|
6
6
|
*
|
|
7
7
|
* @license MIT License
|
|
@@ -27,16 +27,16 @@
|
|
|
27
27
|
* SOFTWARE.
|
|
28
28
|
*/
|
|
29
29
|
import { ReactNode } from "react";
|
|
30
|
-
import {
|
|
30
|
+
import { GlobalFormaContextType } from "../types/globalForm";
|
|
31
31
|
/**
|
|
32
32
|
* 글로벌 폼 상태 관리를 위한 React Context | React Context for global form state management
|
|
33
33
|
*/
|
|
34
|
-
export declare const
|
|
34
|
+
export declare const GlobalFormaContext: import("react").Context<GlobalFormaContextType>;
|
|
35
35
|
/**
|
|
36
|
-
* 글로벌
|
|
36
|
+
* 글로벌 Forma 상태 관리 Provider | Global Forma state management provider
|
|
37
37
|
*
|
|
38
|
-
* 애플리케이션 최상단에 배치하여 전역
|
|
39
|
-
* 각 formId별로 독립적인 FieldStore 인스턴스를 관리합니다. | Manages independent FieldStore instances for each formId.
|
|
38
|
+
* 애플리케이션 최상단에 배치하여 전역 Forma 상태 관리를 활성화합니다. | Place at the top of your application to enable global Forma state management.
|
|
39
|
+
* 각 stateId/formId별로 독립적인 FieldStore 인스턴스를 관리합니다. | Manages independent FieldStore instances for each stateId/formId.
|
|
40
40
|
*
|
|
41
41
|
* @param props Provider props
|
|
42
42
|
* @returns 글로벌 폼 컨텍스트 Provider
|
|
@@ -44,23 +44,23 @@ export declare const GlobalFormContext: import("react").Context<GlobalFormContex
|
|
|
44
44
|
* @example
|
|
45
45
|
* ```typescript
|
|
46
46
|
* // App.tsx
|
|
47
|
-
* import {
|
|
47
|
+
* import { GlobalFormaProvider } from '@/forma';
|
|
48
48
|
*
|
|
49
49
|
* function App() {
|
|
50
50
|
* return (
|
|
51
|
-
* <
|
|
51
|
+
* <GlobalFormaProvider>
|
|
52
52
|
* <Router>
|
|
53
53
|
* <Routes>
|
|
54
54
|
* <Route path="/" element={<HomePage />} />
|
|
55
55
|
* <Route path="/customer" element={<CustomerPage />} />
|
|
56
56
|
* </Routes>
|
|
57
57
|
* </Router>
|
|
58
|
-
* </
|
|
58
|
+
* </GlobalFormaProvider>
|
|
59
59
|
* );
|
|
60
60
|
* }
|
|
61
61
|
* ```
|
|
62
62
|
*/
|
|
63
|
-
export declare function
|
|
63
|
+
export declare function GlobalFormaProvider({ children }: {
|
|
64
64
|
children: ReactNode;
|
|
65
65
|
}): import("react/jsx-runtime").JSX.Element;
|
|
66
|
-
//# sourceMappingURL=
|
|
66
|
+
//# sourceMappingURL=GlobalFormaContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlobalFormaContext.d.ts","sourceRoot":"","sources":["../../contexts/GlobalFormaContext.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAyB,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,kBAAkB,iDAqB7B,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAuExE"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
3
|
+
exports.GlobalFormaContext = void 0;
|
|
4
|
+
exports.GlobalFormaProvider = GlobalFormaProvider;
|
|
5
5
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* GlobalFormaContext.tsx
|
|
8
8
|
*
|
|
9
|
-
* Forma - 글로벌
|
|
9
|
+
* Forma - 글로벌 Forma 상태 관리 컨텍스트 | Global Forma state management context
|
|
10
10
|
* 여러 컴포넌트 간 폼 상태 공유를 위한 React Context | React Context for sharing form state across multiple components
|
|
11
11
|
*
|
|
12
12
|
* @license MIT License
|
|
@@ -36,19 +36,25 @@ const FieldStore_1 = require("../core/FieldStore");
|
|
|
36
36
|
/**
|
|
37
37
|
* 글로벌 폼 상태 관리를 위한 React Context | React Context for global form state management
|
|
38
38
|
*/
|
|
39
|
-
exports.
|
|
39
|
+
exports.GlobalFormaContext = (0, react_1.createContext)({
|
|
40
40
|
getOrCreateStore: () => {
|
|
41
|
-
throw new Error("
|
|
41
|
+
throw new Error("GlobalFormaContext must be used within GlobalFormaProvider");
|
|
42
42
|
},
|
|
43
43
|
registerStore: () => {
|
|
44
|
-
throw new Error("
|
|
44
|
+
throw new Error("GlobalFormaContext must be used within GlobalFormaProvider");
|
|
45
|
+
},
|
|
46
|
+
unregisterStore: () => {
|
|
47
|
+
throw new Error("GlobalFormaContext must be used within GlobalFormaProvider");
|
|
48
|
+
},
|
|
49
|
+
clearStores: () => {
|
|
50
|
+
throw new Error("GlobalFormaContext must be used within GlobalFormaProvider");
|
|
45
51
|
},
|
|
46
52
|
});
|
|
47
53
|
/**
|
|
48
|
-
* 글로벌
|
|
54
|
+
* 글로벌 Forma 상태 관리 Provider | Global Forma state management provider
|
|
49
55
|
*
|
|
50
|
-
* 애플리케이션 최상단에 배치하여 전역
|
|
51
|
-
* 각 formId별로 독립적인 FieldStore 인스턴스를 관리합니다. | Manages independent FieldStore instances for each formId.
|
|
56
|
+
* 애플리케이션 최상단에 배치하여 전역 Forma 상태 관리를 활성화합니다. | Place at the top of your application to enable global Forma state management.
|
|
57
|
+
* 각 stateId/formId별로 독립적인 FieldStore 인스턴스를 관리합니다. | Manages independent FieldStore instances for each stateId/formId.
|
|
52
58
|
*
|
|
53
59
|
* @param props Provider props
|
|
54
60
|
* @returns 글로벌 폼 컨텍스트 Provider
|
|
@@ -56,23 +62,23 @@ exports.GlobalFormContext = (0, react_1.createContext)({
|
|
|
56
62
|
* @example
|
|
57
63
|
* ```typescript
|
|
58
64
|
* // App.tsx
|
|
59
|
-
* import {
|
|
65
|
+
* import { GlobalFormaProvider } from '@/forma';
|
|
60
66
|
*
|
|
61
67
|
* function App() {
|
|
62
68
|
* return (
|
|
63
|
-
* <
|
|
69
|
+
* <GlobalFormaProvider>
|
|
64
70
|
* <Router>
|
|
65
71
|
* <Routes>
|
|
66
72
|
* <Route path="/" element={<HomePage />} />
|
|
67
73
|
* <Route path="/customer" element={<CustomerPage />} />
|
|
68
74
|
* </Routes>
|
|
69
75
|
* </Router>
|
|
70
|
-
* </
|
|
76
|
+
* </GlobalFormaProvider>
|
|
71
77
|
* );
|
|
72
78
|
* }
|
|
73
79
|
* ```
|
|
74
80
|
*/
|
|
75
|
-
function
|
|
81
|
+
function GlobalFormaProvider({ children }) {
|
|
76
82
|
// formId별 FieldStore 인스턴스들을 관리하는 Map | Map managing FieldStore instances by formId
|
|
77
83
|
const storesRef = (0, react_1.useRef)(new Map());
|
|
78
84
|
/**
|
|
@@ -101,10 +107,30 @@ function GlobalFormProvider({ children }) {
|
|
|
101
107
|
const stores = storesRef.current;
|
|
102
108
|
stores.set(formId, store);
|
|
103
109
|
};
|
|
110
|
+
/**
|
|
111
|
+
* 글로벌 스토어에서 특정 formId의 FieldStore를 제거합니다. | Remove specific FieldStore from global store.
|
|
112
|
+
*
|
|
113
|
+
* @param formId 제거할 폼 식별자 | Form identifier to remove
|
|
114
|
+
* @returns 제거 성공 여부 | Whether removal was successful
|
|
115
|
+
*/
|
|
116
|
+
const unregisterStore = (formId) => {
|
|
117
|
+
const stores = storesRef.current;
|
|
118
|
+
return stores.delete(formId);
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* 모든 글로벌 스토어를 제거합니다. | Clear all global stores.
|
|
122
|
+
* 메모리 정리나 애플리케이션 리셋 시 사용합니다. | Use for memory cleanup or application reset.
|
|
123
|
+
*/
|
|
124
|
+
const clearStores = () => {
|
|
125
|
+
const stores = storesRef.current;
|
|
126
|
+
stores.clear();
|
|
127
|
+
};
|
|
104
128
|
const contextValue = {
|
|
105
129
|
getOrCreateStore,
|
|
106
130
|
registerStore,
|
|
131
|
+
unregisterStore,
|
|
132
|
+
clearStores,
|
|
107
133
|
};
|
|
108
|
-
return ((0, jsx_runtime_1.jsx)(exports.
|
|
134
|
+
return ((0, jsx_runtime_1.jsx)(exports.GlobalFormaContext.Provider, { value: contextValue, children: children }));
|
|
109
135
|
}
|
|
110
|
-
//# sourceMappingURL=
|
|
136
|
+
//# sourceMappingURL=GlobalFormaContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlobalFormaContext.js","sourceRoot":"","sources":["../../contexts/GlobalFormaContext.tsx"],"names":[],"mappings":";;;AAuFA,kDAuEC;;AA9JD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,iCAAyD;AACzD,mDAAgD;AAGhD;;GAEG;AACU,QAAA,kBAAkB,GAAG,IAAA,qBAAa,EAAyB;IACpE,gBAAgB,EAAE,GAAG,EAAE;QACnB,MAAM,IAAI,KAAK,CACX,4DAA4D,CAC/D,CAAC;IACN,CAAC;IACD,aAAa,EAAE,GAAG,EAAE;QAChB,MAAM,IAAI,KAAK,CACX,4DAA4D,CAC/D,CAAC;IACN,CAAC;IACD,eAAe,EAAE,GAAG,EAAE;QAClB,MAAM,IAAI,KAAK,CACX,4DAA4D,CAC/D,CAAC;IACN,CAAC;IACD,WAAW,EAAE,GAAG,EAAE;QACd,MAAM,IAAI,KAAK,CACX,4DAA4D,CAC/D,CAAC;IACN,CAAC;CACJ,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,SAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAA2B;IACrE,mFAAmF;IACnF,MAAM,SAAS,GAAG,IAAA,cAAM,EAA+B,IAAI,GAAG,EAAE,CAAC,CAAC;IAElE;;;;;OAKG;IACH,MAAM,gBAAgB,GAAG,CACrB,MAAc,EACD,EAAE;QACf,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;QAEjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,yDAAyD;YACzD,MAAM,QAAQ,GAAG,IAAI,uBAAU,CAAI,EAAO,CAAC,CAAC;YAC5C,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC7B,OAAO,QAAQ,CAAC;QACpB,CAAC;QAED,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAkB,CAAC;IAC/C,CAAC,CAAC;IAEF;;;;;OAKG;IACH,MAAM,aAAa,GAAG,CAClB,MAAc,EACd,KAAoB,EAChB,EAAE;QACN,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF;;;;;OAKG;IACH,MAAM,eAAe,GAAG,CAAC,MAAc,EAAW,EAAE;QAChD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;QACjC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF;;;OAGG;IACH,MAAM,WAAW,GAAG,GAAS,EAAE;QAC3B,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;QACjC,MAAM,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,YAAY,GAA2B;QACzC,gBAAgB;QAChB,aAAa;QACb,eAAe;QACf,WAAW;KACd,CAAC;IAEF,OAAO,CACH,uBAAC,0BAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,YAC3C,QAAQ,GACiB,CACjC,CAAC;AACN,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* GlobalFormaContext.tsx
|
|
3
3
|
*
|
|
4
|
-
* Forma - 글로벌
|
|
4
|
+
* Forma - 글로벌 Forma 상태 관리 컨텍스트 | Global Forma state management context
|
|
5
5
|
* 여러 컴포넌트 간 폼 상태 공유를 위한 React Context | React Context for sharing form state across multiple components
|
|
6
6
|
*
|
|
7
7
|
* @license MIT License
|
|
@@ -27,16 +27,16 @@
|
|
|
27
27
|
* SOFTWARE.
|
|
28
28
|
*/
|
|
29
29
|
import { ReactNode } from "react";
|
|
30
|
-
import {
|
|
30
|
+
import { GlobalFormaContextType } from "../types/globalForm";
|
|
31
31
|
/**
|
|
32
32
|
* 글로벌 폼 상태 관리를 위한 React Context | React Context for global form state management
|
|
33
33
|
*/
|
|
34
|
-
export declare const
|
|
34
|
+
export declare const GlobalFormaContext: import("react").Context<GlobalFormaContextType>;
|
|
35
35
|
/**
|
|
36
|
-
* 글로벌
|
|
36
|
+
* 글로벌 Forma 상태 관리 Provider | Global Forma state management provider
|
|
37
37
|
*
|
|
38
|
-
* 애플리케이션 최상단에 배치하여 전역
|
|
39
|
-
* 각 formId별로 독립적인 FieldStore 인스턴스를 관리합니다. | Manages independent FieldStore instances for each formId.
|
|
38
|
+
* 애플리케이션 최상단에 배치하여 전역 Forma 상태 관리를 활성화합니다. | Place at the top of your application to enable global Forma state management.
|
|
39
|
+
* 각 stateId/formId별로 독립적인 FieldStore 인스턴스를 관리합니다. | Manages independent FieldStore instances for each stateId/formId.
|
|
40
40
|
*
|
|
41
41
|
* @param props Provider props
|
|
42
42
|
* @returns 글로벌 폼 컨텍스트 Provider
|
|
@@ -44,23 +44,23 @@ export declare const GlobalFormContext: import("react").Context<GlobalFormContex
|
|
|
44
44
|
* @example
|
|
45
45
|
* ```typescript
|
|
46
46
|
* // App.tsx
|
|
47
|
-
* import {
|
|
47
|
+
* import { GlobalFormaProvider } from '@/forma';
|
|
48
48
|
*
|
|
49
49
|
* function App() {
|
|
50
50
|
* return (
|
|
51
|
-
* <
|
|
51
|
+
* <GlobalFormaProvider>
|
|
52
52
|
* <Router>
|
|
53
53
|
* <Routes>
|
|
54
54
|
* <Route path="/" element={<HomePage />} />
|
|
55
55
|
* <Route path="/customer" element={<CustomerPage />} />
|
|
56
56
|
* </Routes>
|
|
57
57
|
* </Router>
|
|
58
|
-
* </
|
|
58
|
+
* </GlobalFormaProvider>
|
|
59
59
|
* );
|
|
60
60
|
* }
|
|
61
61
|
* ```
|
|
62
62
|
*/
|
|
63
|
-
export declare function
|
|
63
|
+
export declare function GlobalFormaProvider({ children }: {
|
|
64
64
|
children: ReactNode;
|
|
65
65
|
}): import("react/jsx-runtime").JSX.Element;
|
|
66
|
-
//# sourceMappingURL=
|
|
66
|
+
//# sourceMappingURL=GlobalFormaContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlobalFormaContext.d.ts","sourceRoot":"","sources":["../../../contexts/GlobalFormaContext.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAyB,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,kBAAkB,iDAqB7B,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAuExE"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* GlobalFormaContext.tsx
|
|
4
4
|
*
|
|
5
|
-
* Forma - 글로벌
|
|
5
|
+
* Forma - 글로벌 Forma 상태 관리 컨텍스트 | Global Forma state management context
|
|
6
6
|
* 여러 컴포넌트 간 폼 상태 공유를 위한 React Context | React Context for sharing form state across multiple components
|
|
7
7
|
*
|
|
8
8
|
* @license MIT License
|
|
@@ -32,19 +32,25 @@ import { FieldStore } from "../core/FieldStore";
|
|
|
32
32
|
/**
|
|
33
33
|
* 글로벌 폼 상태 관리를 위한 React Context | React Context for global form state management
|
|
34
34
|
*/
|
|
35
|
-
export const
|
|
35
|
+
export const GlobalFormaContext = createContext({
|
|
36
36
|
getOrCreateStore: () => {
|
|
37
|
-
throw new Error("
|
|
37
|
+
throw new Error("GlobalFormaContext must be used within GlobalFormaProvider");
|
|
38
38
|
},
|
|
39
39
|
registerStore: () => {
|
|
40
|
-
throw new Error("
|
|
40
|
+
throw new Error("GlobalFormaContext must be used within GlobalFormaProvider");
|
|
41
|
+
},
|
|
42
|
+
unregisterStore: () => {
|
|
43
|
+
throw new Error("GlobalFormaContext must be used within GlobalFormaProvider");
|
|
44
|
+
},
|
|
45
|
+
clearStores: () => {
|
|
46
|
+
throw new Error("GlobalFormaContext must be used within GlobalFormaProvider");
|
|
41
47
|
},
|
|
42
48
|
});
|
|
43
49
|
/**
|
|
44
|
-
* 글로벌
|
|
50
|
+
* 글로벌 Forma 상태 관리 Provider | Global Forma state management provider
|
|
45
51
|
*
|
|
46
|
-
* 애플리케이션 최상단에 배치하여 전역
|
|
47
|
-
* 각 formId별로 독립적인 FieldStore 인스턴스를 관리합니다. | Manages independent FieldStore instances for each formId.
|
|
52
|
+
* 애플리케이션 최상단에 배치하여 전역 Forma 상태 관리를 활성화합니다. | Place at the top of your application to enable global Forma state management.
|
|
53
|
+
* 각 stateId/formId별로 독립적인 FieldStore 인스턴스를 관리합니다. | Manages independent FieldStore instances for each stateId/formId.
|
|
48
54
|
*
|
|
49
55
|
* @param props Provider props
|
|
50
56
|
* @returns 글로벌 폼 컨텍스트 Provider
|
|
@@ -52,23 +58,23 @@ export const GlobalFormContext = createContext({
|
|
|
52
58
|
* @example
|
|
53
59
|
* ```typescript
|
|
54
60
|
* // App.tsx
|
|
55
|
-
* import {
|
|
61
|
+
* import { GlobalFormaProvider } from '@/forma';
|
|
56
62
|
*
|
|
57
63
|
* function App() {
|
|
58
64
|
* return (
|
|
59
|
-
* <
|
|
65
|
+
* <GlobalFormaProvider>
|
|
60
66
|
* <Router>
|
|
61
67
|
* <Routes>
|
|
62
68
|
* <Route path="/" element={<HomePage />} />
|
|
63
69
|
* <Route path="/customer" element={<CustomerPage />} />
|
|
64
70
|
* </Routes>
|
|
65
71
|
* </Router>
|
|
66
|
-
* </
|
|
72
|
+
* </GlobalFormaProvider>
|
|
67
73
|
* );
|
|
68
74
|
* }
|
|
69
75
|
* ```
|
|
70
76
|
*/
|
|
71
|
-
export function
|
|
77
|
+
export function GlobalFormaProvider({ children }) {
|
|
72
78
|
// formId별 FieldStore 인스턴스들을 관리하는 Map | Map managing FieldStore instances by formId
|
|
73
79
|
const storesRef = useRef(new Map());
|
|
74
80
|
/**
|
|
@@ -97,10 +103,30 @@ export function GlobalFormProvider({ children }) {
|
|
|
97
103
|
const stores = storesRef.current;
|
|
98
104
|
stores.set(formId, store);
|
|
99
105
|
};
|
|
106
|
+
/**
|
|
107
|
+
* 글로벌 스토어에서 특정 formId의 FieldStore를 제거합니다. | Remove specific FieldStore from global store.
|
|
108
|
+
*
|
|
109
|
+
* @param formId 제거할 폼 식별자 | Form identifier to remove
|
|
110
|
+
* @returns 제거 성공 여부 | Whether removal was successful
|
|
111
|
+
*/
|
|
112
|
+
const unregisterStore = (formId) => {
|
|
113
|
+
const stores = storesRef.current;
|
|
114
|
+
return stores.delete(formId);
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* 모든 글로벌 스토어를 제거합니다. | Clear all global stores.
|
|
118
|
+
* 메모리 정리나 애플리케이션 리셋 시 사용합니다. | Use for memory cleanup or application reset.
|
|
119
|
+
*/
|
|
120
|
+
const clearStores = () => {
|
|
121
|
+
const stores = storesRef.current;
|
|
122
|
+
stores.clear();
|
|
123
|
+
};
|
|
100
124
|
const contextValue = {
|
|
101
125
|
getOrCreateStore,
|
|
102
126
|
registerStore,
|
|
127
|
+
unregisterStore,
|
|
128
|
+
clearStores,
|
|
103
129
|
};
|
|
104
|
-
return (_jsx(
|
|
130
|
+
return (_jsx(GlobalFormaContext.Provider, { value: contextValue, children: children }));
|
|
105
131
|
}
|
|
106
|
-
//# sourceMappingURL=
|
|
132
|
+
//# sourceMappingURL=GlobalFormaContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlobalFormaContext.js","sourceRoot":"","sources":["../../../contexts/GlobalFormaContext.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,EAAa,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAyB;IACpE,gBAAgB,EAAE,GAAG,EAAE;QACnB,MAAM,IAAI,KAAK,CACX,4DAA4D,CAC/D,CAAC;IACN,CAAC;IACD,aAAa,EAAE,GAAG,EAAE;QAChB,MAAM,IAAI,KAAK,CACX,4DAA4D,CAC/D,CAAC;IACN,CAAC;IACD,eAAe,EAAE,GAAG,EAAE;QAClB,MAAM,IAAI,KAAK,CACX,4DAA4D,CAC/D,CAAC;IACN,CAAC;IACD,WAAW,EAAE,GAAG,EAAE;QACd,MAAM,IAAI,KAAK,CACX,4DAA4D,CAC/D,CAAC;IACN,CAAC;CACJ,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAE,QAAQ,EAA2B;IACrE,mFAAmF;IACnF,MAAM,SAAS,GAAG,MAAM,CAA+B,IAAI,GAAG,EAAE,CAAC,CAAC;IAElE;;;;;OAKG;IACH,MAAM,gBAAgB,GAAG,CACrB,MAAc,EACD,EAAE;QACf,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;QAEjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,yDAAyD;YACzD,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAI,EAAO,CAAC,CAAC;YAC5C,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC7B,OAAO,QAAQ,CAAC;QACpB,CAAC;QAED,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAkB,CAAC;IAC/C,CAAC,CAAC;IAEF;;;;;OAKG;IACH,MAAM,aAAa,GAAG,CAClB,MAAc,EACd,KAAoB,EAChB,EAAE;QACN,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF;;;;;OAKG;IACH,MAAM,eAAe,GAAG,CAAC,MAAc,EAAW,EAAE;QAChD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;QACjC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF;;;OAGG;IACH,MAAM,WAAW,GAAG,GAAS,EAAE;QAC3B,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;QACjC,MAAM,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,YAAY,GAA2B;QACzC,gBAAgB;QAChB,aAAa;QACb,eAAe;QACf,WAAW;KACd,CAAC;IAEF,OAAO,CACH,KAAC,kBAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,YAC3C,QAAQ,GACiB,CACjC,CAAC;AACN,CAAC"}
|
|
@@ -29,11 +29,19 @@
|
|
|
29
29
|
*/
|
|
30
30
|
import { useFormaState } from "./useFormaState";
|
|
31
31
|
import { devError } from "../utils";
|
|
32
|
-
import { useEffect, useState, useCallback, useMemo, } from "react";
|
|
32
|
+
import { useEffect, useState, useCallback, useRef, useMemo, } from "react";
|
|
33
33
|
export function useForm(props = {}) {
|
|
34
34
|
const { initialValues = {}, onSubmit, onValidate, onComplete, _externalStore, } = props;
|
|
35
|
+
// 초기값 안정화: 첫 번째 렌더링에서만 초기값을 고정
|
|
36
|
+
// Stabilize initial values: fix initial values only on first render
|
|
37
|
+
const stableInitialValues = useRef(null);
|
|
38
|
+
if (!stableInitialValues.current) {
|
|
39
|
+
stableInitialValues.current = initialValues;
|
|
40
|
+
}
|
|
35
41
|
// useFormaState를 기반으로 사용 / Use useFormaState as foundation
|
|
36
|
-
const fieldState = useFormaState(
|
|
42
|
+
const fieldState = useFormaState(stableInitialValues.current, {
|
|
43
|
+
_externalStore,
|
|
44
|
+
});
|
|
37
45
|
// 폼 특정 상태 관리 / Form-specific state management
|
|
38
46
|
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
39
47
|
const [isValidating, setIsValidating] = useState(false);
|
|
@@ -118,6 +126,7 @@ export function useForm(props = {}) {
|
|
|
118
126
|
* 초기값 재설정 / Reset initial values
|
|
119
127
|
*/
|
|
120
128
|
const setInitialFormValues = useCallback((newInitialValues) => {
|
|
129
|
+
stableInitialValues.current = newInitialValues;
|
|
121
130
|
fieldState._store.setInitialValues(newInitialValues);
|
|
122
131
|
}, [fieldState._store]);
|
|
123
132
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useForm.js","sourceRoot":"","sources":["../../../hooks/useForm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AASH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,OAAc,EACV,SAAS,EACT,QAAQ,EACR,WAAW,
|
|
1
|
+
{"version":3,"file":"useForm.js","sourceRoot":"","sources":["../../../hooks/useForm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AASH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,OAAc,EACV,SAAS,EACT,QAAQ,EACR,WAAW,EACX,MAAM,EACN,OAAO,GACV,MAAM,OAAO,CAAC;AAoCf,MAAM,UAAU,OAAO,CACnB,QAEgC,EAA6B;IAE7D,MAAM,EACF,aAAa,GAAG,EAAO,EACvB,QAAQ,EACR,UAAU,EACV,UAAU,EACV,cAAc,GACjB,GAAG,KAAK,CAAC;IAEV,+BAA+B;IAC/B,oEAAoE;IACpE,MAAM,mBAAmB,GAAG,MAAM,CAAW,IAAI,CAAC,CAAC;IACnD,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;QAC/B,mBAAmB,CAAC,OAAO,GAAG,aAAa,CAAC;IAChD,CAAC;IAED,2DAA2D;IAC3D,MAAM,UAAU,GAAG,aAAa,CAAI,mBAAmB,CAAC,OAAO,EAAE;QAC7D,cAAc;KACjB,CAAC,CAAC;IAEH,8CAA8C;IAC9C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,2CAA2C;IAC3C,8BAA8B;IAC9B,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE;YACvD,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,WAAW;QACX,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAE9C,OAAO,WAAW,CAAC;IACvB,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAExB;;;;OAIG;IACH,MAAM,gBAAgB,GAAG,WAAW,CAChC,CAAC,CAAkB,EAAE,EAAE;QACnB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,OAAO;QAEpC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAa,CAAC;QACrD,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,gEAAgE;QAChE,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACrD,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC1C,CAAC;QACD,8BAA8B;aACzB,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YAC3B,QAAQ,GAAG,OAAO,CAAC;QACvB,CAAC;QACD,kCAAkC;aAC7B,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACzB,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,kCAAkC;aAC7B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACtB,QAAQ,GAAG,SAAS,CAAC;QACzB,CAAC;QAED,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC,EACD,CAAC,UAAU,CAAC,QAAQ,CAAC,CACxB,CAAC;IAEF;;;OAGG;IACH,MAAM,sBAAsB,GAA4B,WAAW,CAC/D,CAAC,SAAiB,EAAE,EAAE;QAClB,OAAO,CAAC,KAAU,EAAE,QAA0C,EAAE,EAAE;YAC9D,IAAI,QAAQ,GAAG,KAAK,CAAC;YAErB,gEAAgE;YAChE,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACrD,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC1C,CAAC;iBAAM,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACxB,QAAQ,GAAG,SAAS,CAAC;YACzB,CAAC;YAED,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC,CAAC;IACN,CAAC,EACD,CAAC,UAAU,CAAC,QAAQ,CAAC,CACxB,CAAC;IAEF;;OAEG;IACH,MAAM,YAAY,GAAG,WAAW,CAC5B,CAAC,IAAsB,EAAE,KAAU,EAAE,EAAE;QACnC,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,oEAAoE;QACpE,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACrD,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAChD,CAAC;aAAM,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACxB,cAAc,GAAG,SAAS,CAAC;QAC/B,CAAC;QAED,UAAU,CAAC,QAAQ,CAAC,IAAc,EAAE,cAAc,CAAC,CAAC;IACxD,CAAC,EACD,CAAC,UAAU,CAAC,QAAQ,CAAC,CACxB,CAAC;IAEF;;OAEG;IACH,MAAM,aAAa,GAAG,WAAW,CAC7B,CAAC,SAAqB,EAAE,EAAE;QACtB,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC,EACD,CAAC,UAAU,CAAC,SAAS,CAAC,CACzB,CAAC;IAEF;;OAEG;IACH,MAAM,oBAAoB,GAAG,WAAW,CACpC,CAAC,gBAAmB,EAAE,EAAE;QACpB,mBAAmB,CAAC,OAAO,GAAG,gBAAgB,CAAC;QAC/C,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IACzD,CAAC,EACD,CAAC,UAAU,CAAC,MAAM,CAAC,CACtB,CAAC;IAEF;;OAEG;IACH,MAAM,YAAY,GAAG,WAAW,CAC5B,CAAC,SAA2B,EAAO,EAAE;QACjC,OAAO,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAmB,CAAC,CAAC;IAC3D,CAAC,EACD,CAAC,UAAU,CAAC,MAAM,CAAC,CACtB,CAAC;IAEF;;OAEG;IACH,MAAM,aAAa,GAAG,WAAW,CAAC,GAAM,EAAE;QACtC,OAAO,UAAU,CAAC,SAAS,EAAE,CAAC;IAClC,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IAE3B;;;;OAIG;IACH,MAAM,YAAY,GAAG,WAAW,CAC5B,CAAC,SAA2B,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAmB,CAAC,CAAC;QACvD,+CAA+C;QAC/C,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5C,CAAC,EACD,CAAC,UAAU,CAAC,QAAQ,CAAC,CACxB,CAAC;IAEF;;OAEG;IACH,MAAM,YAAY,GAAG,WAAW,CAC5B,KAAK,EAAE,gBAAoB,EAAE,EAAE;QAC3B,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAC7B,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,aAAa,GAAG,gBAAgB,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;QAEjE,IAAI,CAAC;YACD,OAAO,MAAM,UAAU,CAAC,aAAa,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,QAAQ,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;YACrC,OAAO,KAAK,CAAC;QACjB,CAAC;gBAAS,CAAC;YACP,eAAe,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC,EACD,CAAC,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC,CACrC,CAAC;IAEF;;OAEG;IACH,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,eAAe,CAAC,KAAK,CAAC,CAAC;QACvB,eAAe,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAEvB;;OAEG;IACH,MAAM,MAAM,GAAG,WAAW,CACtB,KAAK,EAAE,CAAmB,EAAoB,EAAE;QAC5C,IAAI,CAAC;YAAE,CAAC,CAAC,cAAc,EAAE,CAAC;QAE1B,MAAM,aAAa,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;QAC7C,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;YACvC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,eAAe,CAAC,IAAI,CAAC,CAAC;QAEtB,IAAI,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACX,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC;YAClC,CAAC;YAED,IAAI,UAAU,EAAE,CAAC;gBACb,UAAU,CAAC,aAAa,CAAC,CAAC;YAC9B,CAAC;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,QAAQ,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAC1C,OAAO,KAAK,CAAC;QACjB,CAAC;gBAAS,CAAC;YACP,eAAe,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC,EACD,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,SAAS,CAAC,CAC7D,CAAC;IAEF,OAAO,OAAO,CACV,GAAG,EAAE,CAAC,CAAC;QACH,aAAa;QACb,YAAY;QACZ,YAAY;QACZ,UAAU;QAEV,sBAAsB;QACtB,YAAY,EAAE,oEAAoE;QAClF,YAAY,EAAE,uEAAuE;QACrF,aAAa,EAAE,oCAAoC;QAEnD,oBAAoB;QACpB,YAAY,EAAE,kCAAkC;QAChD,aAAa,EAAE,2BAA2B;QAC1C,oBAAoB,EAAE,iCAAiC;QAEvD,2BAA2B;QAC3B,gBAAgB,EAAE,2EAA2E;QAC7F,sBAAsB,EAAE,wDAAwD;QAEhF,sBAAsB;QACtB,MAAM,EAAE,qBAAqB;QAC7B,SAAS,EAAE,qBAAqB;QAChC,YAAY,EAAE,uBAAuB;QAErC,sBAAsB;QACtB,MAAM,EAAE,UAAU,CAAC,SAAS,EAAE,EAAE,8EAA8E;QAE9G,yBAAyB;QACzB,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,qCAAqC;KACnE,CAAC,EACF;QACI,YAAY;QACZ,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,YAAY;QACZ,aAAa;QACb,YAAY;QACZ,aAAa;QACb,oBAAoB;QACpB,gBAAgB;QAChB,sBAAsB;QACtB,MAAM;QACN,SAAS;QACT,YAAY;QACZ,UAAU,CAAC,MAAM,EAAE,iBAAiB;KACvC,CACJ,CAAC;AACN,CAAC"}
|
|
@@ -42,6 +42,8 @@ export interface UseFormaStateReturn<T extends Record<string, any>> {
|
|
|
42
42
|
setValues: (values: Partial<T>) => void;
|
|
43
43
|
/** Reset to initial values | 초기값으로 재설정 */
|
|
44
44
|
reset: () => void;
|
|
45
|
+
/** Set new initial values (for dynamic initialization) | 새 초기값 설정 (동적 초기화용) */
|
|
46
|
+
setInitialValues: (newInitialValues: T) => void;
|
|
45
47
|
/** Handle standard input change events | 표준 입력 변경 이벤트 처리 */
|
|
46
48
|
handleChange: (event: FormChangeEvent) => void;
|
|
47
49
|
/** Check if a field exists | 필드 존재 여부 확인 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFormaState.d.ts","sourceRoot":"","sources":["../../../hooks/useFormaState.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,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,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;AA0BD;;;;;;;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"}
|
|
1
|
+
{"version":3,"file":"useFormaState.d.ts","sourceRoot":"","sources":["../../../hooks/useFormaState.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,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;AA0BD;;;;;;;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"}
|
|
@@ -43,6 +43,12 @@ export function useFieldSubscription(store, path) {
|
|
|
43
43
|
}
|
|
44
44
|
export function useFormaState(initialValues = {}, options = {}) {
|
|
45
45
|
const { onChange, deepEquals = false, _externalStore } = options;
|
|
46
|
+
// 초기값 안정화: 첫 번째 렌더링에서만 초기값을 고정
|
|
47
|
+
// Stabilize initial values: fix initial values only on first render
|
|
48
|
+
const stableInitialValues = useRef(null);
|
|
49
|
+
if (!stableInitialValues.current) {
|
|
50
|
+
stableInitialValues.current = initialValues;
|
|
51
|
+
}
|
|
46
52
|
// Create or use external field store instance (persists across renders)
|
|
47
53
|
// 필드 스토어 인스턴스 생성 또는 외부 스토어 사용 (렌더링 간 유지)
|
|
48
54
|
const storeRef = useRef(null);
|
|
@@ -50,7 +56,7 @@ export function useFormaState(initialValues = {}, options = {}) {
|
|
|
50
56
|
storeRef.current = _externalStore;
|
|
51
57
|
}
|
|
52
58
|
else if (!storeRef.current) {
|
|
53
|
-
storeRef.current = new FieldStore(
|
|
59
|
+
storeRef.current = new FieldStore(stableInitialValues.current);
|
|
54
60
|
// Set up global change listener if provided
|
|
55
61
|
// 글로벌 변경 리스너 설정 (제공된 경우)
|
|
56
62
|
if (onChange) {
|
|
@@ -60,20 +66,6 @@ export function useFormaState(initialValues = {}, options = {}) {
|
|
|
60
66
|
}
|
|
61
67
|
}
|
|
62
68
|
const store = storeRef.current;
|
|
63
|
-
// Update initial values when they change (only for non-external stores)
|
|
64
|
-
// 초기값이 변경되면 업데이트 (외부 스토어가 아닌 경우에만)
|
|
65
|
-
const initialValuesRef = useRef(initialValues);
|
|
66
|
-
const initialValuesStringRef = useRef(JSON.stringify(initialValues));
|
|
67
|
-
useEffect(() => {
|
|
68
|
-
const currentInitialValuesString = JSON.stringify(initialValues);
|
|
69
|
-
if (!_externalStore &&
|
|
70
|
-
store &&
|
|
71
|
-
initialValuesStringRef.current !== currentInitialValuesString) {
|
|
72
|
-
store.setInitialValues(initialValues);
|
|
73
|
-
initialValuesRef.current = initialValues;
|
|
74
|
-
initialValuesStringRef.current = currentInitialValuesString;
|
|
75
|
-
}
|
|
76
|
-
}, [initialValues, _externalStore]); // store 의존성 제거
|
|
77
69
|
// Subscribe to a specific field value with dot notation
|
|
78
70
|
// dot notation으로 특정 필드 값 구독
|
|
79
71
|
const useValue = useCallback((path) => {
|
|
@@ -104,6 +96,12 @@ export function useFormaState(initialValues = {}, options = {}) {
|
|
|
104
96
|
const reset = useCallback(() => {
|
|
105
97
|
store.reset();
|
|
106
98
|
}, []); // store 의존성 제거
|
|
99
|
+
// Set new initial values (for dynamic initialization)
|
|
100
|
+
// 새 초기값 설정 (동적 초기화용)
|
|
101
|
+
const setInitialValues = useCallback((newInitialValues) => {
|
|
102
|
+
stableInitialValues.current = newInitialValues;
|
|
103
|
+
store.setInitialValues(newInitialValues);
|
|
104
|
+
}, []); // store 의존성 제거
|
|
107
105
|
// Handle standard input change events
|
|
108
106
|
// 표준 입력 변경 이벤트 처리
|
|
109
107
|
const handleChange = useCallback((event) => {
|
|
@@ -138,6 +136,7 @@ export function useFormaState(initialValues = {}, options = {}) {
|
|
|
138
136
|
getValues,
|
|
139
137
|
setValues,
|
|
140
138
|
reset,
|
|
139
|
+
setInitialValues,
|
|
141
140
|
handleChange,
|
|
142
141
|
hasField: useCallback((path) => {
|
|
143
142
|
return store.hasField(path);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFormaState.js","sourceRoot":"","sources":["../../../hooks/useFormaState.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,WAAW,EAAW,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAkC,OAAO,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"useFormaState.js","sourceRoot":"","sources":["../../../hooks/useFormaState.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
*/
|
|
30
30
|
import { useContext } from "react";
|
|
31
31
|
import { useForm } from "./useForm";
|
|
32
|
-
import {
|
|
32
|
+
import { GlobalFormaContext } from "../contexts/GlobalFormaContext";
|
|
33
33
|
/**
|
|
34
34
|
* 글로벌 폼 상태 관리 훅 / Global form state management hook
|
|
35
35
|
*
|
|
@@ -44,7 +44,7 @@ import { GlobalFormContext } from "../contexts/GlobalFormContext";
|
|
|
44
44
|
* @returns 글로벌 폼 관리 API 객체 / Global form management API object
|
|
45
45
|
*/
|
|
46
46
|
export function useGlobalForm({ formId, }) {
|
|
47
|
-
const { getOrCreateStore } = useContext(
|
|
47
|
+
const { getOrCreateStore } = useContext(GlobalFormaContext);
|
|
48
48
|
// 글로벌 스토어 가져오기 또는 생성 / Get or create global store
|
|
49
49
|
const store = getOrCreateStore(formId);
|
|
50
50
|
// useForm에 외부 스토어 전달 (빈 초기값으로) / Pass external store to useForm (with empty initial values)
|
|
@@ -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;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"useGlobalForm.js","sourceRoot":"","sources":["../../../hooks/useGlobalForm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAAgC,EACzD,MAAM,GACc;IACpB,MAAM,EAAE,gBAAgB,EAAE,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAE5D,kDAAkD;IAClD,MAAM,KAAK,GAAG,gBAAgB,CAAI,MAAM,CAAC,CAAC;IAE1C,4FAA4F;IAC5F,MAAM,IAAI,GAAG,OAAO,CAAI;QACpB,aAAa,EAAE,EAAO;QACtB,cAAc,EAAE,KAAK;KACxB,CAAC,CAAC;IAEH,OAAO;QACH,GAAG,IAAI;QACP,MAAM,EAAE,qDAAqD;QAC7D,MAAM,EAAE,KAAK,EAAE,iDAAiD;KACzC,CAAC;AAChC,CAAC"}
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
*/
|
|
30
30
|
import { useContext } from "react";
|
|
31
31
|
import { useFormaState } from "./useFormaState";
|
|
32
|
-
import {
|
|
32
|
+
import { GlobalFormaContext } from "../contexts/GlobalFormaContext";
|
|
33
33
|
/**
|
|
34
34
|
* 글로벌 FormaState 관리 훅 / Global FormaState management hook
|
|
35
35
|
*
|
|
@@ -104,7 +104,7 @@ import { GlobalFormContext } from "../contexts/GlobalFormContext";
|
|
|
104
104
|
* ```
|
|
105
105
|
*/
|
|
106
106
|
export function useGlobalFormaState({ stateId, autoCleanup = true, }) {
|
|
107
|
-
const { getOrCreateStore } = useContext(
|
|
107
|
+
const { getOrCreateStore } = useContext(GlobalFormaContext);
|
|
108
108
|
// 글로벌 스토어 가져오기 또는 생성 / Get or create global store
|
|
109
109
|
const store = getOrCreateStore(stateId);
|
|
110
110
|
// useFormaState에 외부 스토어 전달 (빈 초기값으로) / Pass external store to useFormaState (with empty initial values)
|
|
@@ -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;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAKhD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"useGlobalFormaState.js","sourceRoot":"","sources":["../../../hooks/useGlobalFormaState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAKhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AACH,MAAM,UAAU,mBAAmB,CAAgC,EAC/D,OAAO,EACP,WAAW,GAAG,IAAI,GACQ;IAC1B,MAAM,EAAE,gBAAgB,EAAE,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAE5D,kDAAkD;IAClD,MAAM,KAAK,GAAG,gBAAgB,CAAI,OAAO,CAAC,CAAC;IAE3C,wGAAwG;IACxG,MAAM,UAAU,GAAG,aAAa,CAAI,EAAO,EAAE;QACzC,cAAc,EAAE,KAAK;KACxB,CAAC,CAAC;IAEH,OAAO;QACH,GAAG,UAAU;QACb,OAAO,EAAE,oEAAoE;QAC7E,MAAM,EAAE,KAAK,EAAE,gFAAgF;KAClE,CAAC;AACtC,CAAC"}
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* SOFTWARE.
|
|
29
29
|
*/
|
|
30
30
|
import { useContext, useEffect } from "react";
|
|
31
|
-
import {
|
|
31
|
+
import { GlobalFormaContext } from "../contexts/GlobalFormaContext";
|
|
32
32
|
/**
|
|
33
33
|
* 기존 useForm을 글로벌 폼으로 등록하는 훅 | Hook to register existing useForm as global form
|
|
34
34
|
*
|
|
@@ -53,7 +53,7 @@ import { GlobalFormContext } from "../contexts/GlobalFormContext";
|
|
|
53
53
|
* ```
|
|
54
54
|
*/
|
|
55
55
|
export function useRegisterGlobalForm(formId, form) {
|
|
56
|
-
const { registerStore } = useContext(
|
|
56
|
+
const { registerStore } = useContext(GlobalFormaContext);
|
|
57
57
|
useEffect(() => {
|
|
58
58
|
// useForm의 내부 store를 글로벌에 등록 | Register useForm's internal store globally
|
|
59
59
|
if (form._store) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRegisterGlobalForm.js","sourceRoot":"","sources":["../../../hooks/useRegisterGlobalForm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"useRegisterGlobalForm.js","sourceRoot":"","sources":["../../../hooks/useRegisterGlobalForm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,qBAAqB,CACjC,MAAc,EACd,IAAsB;IAEtB,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAEzD,SAAS,CAAC,GAAG,EAAE;QACX,0EAA0E;QAC1E,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;IACL,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;AAC7C,CAAC"}
|