@helloworldqq/react-modal 1.0.0 → 1.0.2
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/README.md +8 -8
- package/dist/index.js +13 -13
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +13 -13
- package/dist/index.modern.js.map +1 -1
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/utils/logger.d.ts +21 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# React Hook Disclosure Modal
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/@helloworldqq/react-modal)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
|
|
6
6
|
Thư viện React hook mạnh mẽ và linh hoạt để quản lý modal với API khai báo rõ ràng. Hoàn hảo cho các ứng dụng cần quản lý nhiều modal với khả năng truyền dữ liệu.
|
|
@@ -36,11 +36,11 @@ Thư viện React hook mạnh mẽ và linh hoạt để quản lý modal với
|
|
|
36
36
|
## Cài Đặt
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
npm install @
|
|
39
|
+
npm install @helloworldqq/react-modal
|
|
40
40
|
# hoặc
|
|
41
|
-
yarn add @
|
|
41
|
+
yarn add @helloworldqq/react-modal
|
|
42
42
|
# hoặc
|
|
43
|
-
pnpm add @
|
|
43
|
+
pnpm add @helloworldqq/react-modal
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
---
|
|
@@ -49,7 +49,7 @@ pnpm add @vnquang24/react-modal
|
|
|
49
49
|
|
|
50
50
|
```tsx
|
|
51
51
|
import React from 'react'
|
|
52
|
-
import { ReactHookModalProvider, useDisclosure } from '@
|
|
52
|
+
import { ReactHookModalProvider, useDisclosure } from '@helloworldqq/react-modal'
|
|
53
53
|
import { Modal, Button } from 'antd'
|
|
54
54
|
|
|
55
55
|
// 1. Định nghĩa component modal của bạn
|
|
@@ -97,7 +97,7 @@ Component provider quản lý tất cả các modal đã đăng ký.
|
|
|
97
97
|
| `children` | `React.ReactNode` | ✅ | Các component con của ứng dụng |
|
|
98
98
|
|
|
99
99
|
---
|
|
100
|
-
|
|
100
|
+
|
|
101
101
|
### useDisclosure Hook
|
|
102
102
|
|
|
103
103
|
Hook chính để điều khiển trạng thái modal.
|
|
@@ -324,7 +324,7 @@ onOpen({ wrong: 'data' }) // ❌ Lỗi kiểu
|
|
|
324
324
|
|
|
325
325
|
```tsx
|
|
326
326
|
import { Modal, Button } from 'antd'
|
|
327
|
-
import { useDisclosure } from '@
|
|
327
|
+
import { useDisclosure } from '@helloworldqq/react-modal'
|
|
328
328
|
|
|
329
329
|
const BasicModal = () => {
|
|
330
330
|
const { isOpen, onClose } = useDisclosure({ tag: 'BasicModal' })
|
|
@@ -480,7 +480,7 @@ Ví dụ hoàn chỉnh với Ant Design 6:
|
|
|
480
480
|
```tsx
|
|
481
481
|
import React from 'react'
|
|
482
482
|
import { Modal, Button, Space, Form, Input, message } from 'antd'
|
|
483
|
-
import { ReactHookModalProvider, useDisclosure } from '@
|
|
483
|
+
import { ReactHookModalProvider, useDisclosure } from '@helloworldqq/react-modal'
|
|
484
484
|
|
|
485
485
|
// Các Component Modal
|
|
486
486
|
const WelcomeModal = () => {
|
package/dist/index.js
CHANGED
|
@@ -92,20 +92,20 @@ var ModalWrapper = React.memo(function ModalWrapper(_ref) {
|
|
|
92
92
|
var modalTags = useModalStore(function (state) {
|
|
93
93
|
return state.modalTags;
|
|
94
94
|
});
|
|
95
|
-
var
|
|
96
|
-
return Object.entries(modals).
|
|
97
|
-
var
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
95
|
+
var allModals = React.useMemo(function () {
|
|
96
|
+
return Object.entries(modals).map(function (_ref2) {
|
|
97
|
+
var tag = _ref2[0],
|
|
98
|
+
Modal = _ref2[1];
|
|
99
|
+
try {
|
|
100
|
+
return React__default.createElement(Modal, {
|
|
101
|
+
key: tag
|
|
102
|
+
});
|
|
103
|
+
} catch (error) {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
106
|
});
|
|
107
|
-
}, [modals
|
|
108
|
-
return React__default.createElement(React__default.Fragment, null,
|
|
107
|
+
}, [modals]);
|
|
108
|
+
return React__default.createElement(React__default.Fragment, null, allModals);
|
|
109
109
|
});
|
|
110
110
|
|
|
111
111
|
var useDisclosure = function useDisclosure(disclosureHook) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/store/index.ts","../src/provider/index.tsx","../src/hook/index.ts","../src/index.tsx"],"sourcesContent":["import { Store, useStore } from \"@tanstack/react-store\";\n\n// You can instantiate the store outside of React components too!\n\nimport { Any } from '../hook'\n\nexport type State = {\n modalTags: {\n [tag: string]: {\n input?: Any\n output?: Any\n }\n }\n}\n\nexport type Action = {\n openModal: (tag: string, input?: Any) => void\n okModal: (tag: string, output?: Any) => void\n closeModal: (tag: string) => void\n toggleModal: (tag: string) => void\n clearModalTag: (tag: string) => void\n clearAllModalTags: () => void\n}\nexport const store = new Store<State>({\n modalTags: {}\n});\n\n\nconst openModal = (tag: string, input?: Any) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n input: input ?? true // Default to true if no input is provided\n }\n }\n }))\n}\nconst okModal = (tag: string, output?: Any) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n output\n }\n }\n }))\n}\nconst closeModal = (tag: string) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: { input: false }\n }\n }))\n}\nconst toggleModal = (tag: string) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n input: !state.modalTags[tag]?.input\n }\n }\n }))\n}\nconst clearModalTag = (tag: string) => {\n store.setState((state) => {\n const newModalTags = { ...state.modalTags };\n delete newModalTags[tag];\n return { modalTags: newModalTags };\n })\n}\nconst clearAllModalTags = () => {\n store.setState(() => ({ modalTags: {} }))\n}\n\nexport const useModalStore = <T>(\n stateCallback: (state: State) => T,\n): T => {\n return useStore(store, stateCallback)\n}\n\nexport const useModalActions = <T>(\n actionCallback: (action: Action) => T\n): T => {\n return actionCallback(\n {\n openModal,\n okModal,\n closeModal,\n toggleModal,\n clearModalTag,\n clearAllModalTags\n }\n )\n}","import React, { useMemo, memo } from 'react'\nimport { useModalStore, State } from '../store'\n\ntype ModalComponent = React.FunctionComponent<any> | React.ComponentType<any>\n\nexport interface ModalWrapperProps {\n modals: Record<string, ModalComponent>\n}\n\nexport const ModalWrapper = memo(function ModalWrapper({\n modals\n}: ModalWrapperProps) {\n const modalTags = useModalStore((state: State) => state.modalTags)\n \n const modalOpened = useMemo(() => {\n return Object.entries(modals)\n .filter(([tag]) => !!modalTags[tag]?.input)\n .map(([tag, Modal]) => <Modal key={tag} />)\n }, [modals, modalTags])\n \n return <React.Fragment>{modalOpened}</React.Fragment>\n})\n","import { useEffect, useCallback, useRef } from 'react'\nimport { TagType } from './tag'\nimport { useModalStore, useModalActions, store } from '../store'\n\nexport type Any = string | number | boolean | object | undefined | Record<string, any>\n\nexport interface DisclosureHookProps<O> {\n tag: TagType\n isOpen?: boolean\n onOpen?: () => void\n onClose?: () => void\n onToggle?: () => void\n onChange?: (isOpen: boolean) => void\n onOk?: (output?: O) => void\n onCancel?: () => void\n}\n\nexport const useDisclosure = <Input = Any, Output = Any>(\n disclosureHook: DisclosureHookProps<Output>\n) => {\n const tag = disclosureHook.tag\n \n // Use refs to store callbacks to avoid stale closures\n const disclosureHookRef = useRef(disclosureHook)\n disclosureHookRef.current = disclosureHook\n\n const inputState = useModalStore(\n (state) => state.modalTags[tag]?.input\n ) as Input\n const outputState = useModalStore(\n (state) => state.modalTags[tag]?.output\n ) as Output\n const clearDisclosureTag = useModalActions(\n (actions) => actions.clearModalTag\n )\n\n const onOpenAction = useModalActions((actions) => actions.openModal)\n const okAction = useModalActions((actions) => actions.okModal)\n const onCloseAction = useModalActions((actions) => actions.closeModal)\n const onToggleAction = useModalActions((actions) => actions.toggleModal)\n\n const updateInput = useCallback((input?: Input) => {\n // If input is a function, call it and set the result as input\n let processedInput = input\n if (processedInput && typeof processedInput == 'object' && 'preventDefault' in processedInput) {\n processedInput = undefined\n }\n onOpenAction(tag, processedInput as Any)\n }, [tag, onOpenAction])\n\n const onOpen = useCallback((input?: Input) => {\n updateInput(input)\n disclosureHookRef.current?.onOpen?.()\n }, [updateInput])\n\n const onClose = useCallback(() => {\n onCloseAction(tag)\n disclosureHookRef.current?.onClose?.()\n }, [tag, onCloseAction])\n\n const onToggle = useCallback(() => {\n onToggleAction(tag)\n disclosureHookRef.current?.onToggle?.()\n }, [tag, onToggleAction])\n\n const onOk = useCallback((output?: Output) => {\n disclosureHookRef.current?.onOk?.(output)\n okAction(tag, output as Any)\n }, [tag, okAction])\n\n const onChange = useCallback((isOpen: boolean) => {\n if (isOpen) {\n onOpen()\n } else {\n onClose()\n }\n disclosureHookRef.current?.onChange?.(isOpen)\n }, [onOpen, onClose])\n\n useEffect(() => {\n return () => {\n clearDisclosureTag(tag)\n }\n }, [tag, clearDisclosureTag])\n\n useEffect(() => {\n if (outputState) {\n onOk(outputState as Output)\n }\n }, [outputState, onOk])\n\n return {\n isOpen: !!inputState,\n input: typeof inputState === 'boolean' ? undefined : inputState,\n onOpen,\n onClose,\n onToggle,\n onOk,\n onChange,\n updateInput,\n store\n }\n}\n","import * as React from 'react'\nimport { ModalWrapper } from './provider'\n\ntype ModalComponent = React.FunctionComponent<any> | React.ComponentType<any>\n\nexport type ReactHookModalProviderProps = {\n children: React.ReactNode\n modals: Record<string, ModalComponent>\n}\n\nexport const ReactHookModalProvider = ({\n children,\n modals\n}: ReactHookModalProviderProps) => {\n return (\n <React.Fragment>\n <ModalWrapper modals={modals} />\n {children}\n </React.Fragment>\n )\n}\n\nexport * from './hook'\nexport * from './provider'\n"],"names":["store","Store","modalTags","openModal","tag","input","setState","state","_extends2","_extends","okModal","output","_extends3","closeModal","_extends4","toggleModal","_state$modalTags$tag","_extends5","clearModalTag","newModalTags","clearAllModalTags","useModalStore","stateCallback","useStore","useModalActions","actionCallback","ModalWrapper","memo","_ref","modals","modalOpened","useMemo","Object","entries","filter","_ref2","_modalTags$tag","map","_ref3","Modal","React","key","Fragment","useDisclosure","disclosureHook","disclosureHookRef","useRef","current","inputState","outputState","_state$modalTags$tag2","clearDisclosureTag","actions","onOpenAction","okAction","onCloseAction","onToggleAction","updateInput","useCallback","processedInput","undefined","onOpen","_disclosureHookRef$cu","_disclosureHookRef$cu2","call","onClose","_disclosureHookRef$cu3","_disclosureHookRef$cu4","onToggle","_disclosureHookRef$cu5","_disclosureHookRef$cu6","onOk","_disclosureHookRef$cu7","_disclosureHookRef$cu8","onChange","isOpen","_disclosureHookRef$cu9","_disclosureHookRef$cu0","useEffect","ReactHookModalProvider","children"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/store/index.ts","../src/provider/index.tsx","../src/hook/index.ts","../src/index.tsx"],"sourcesContent":["import { Store, useStore } from \"@tanstack/react-store\";\n\n// You can instantiate the store outside of React components too!\n\nimport { Any } from '../hook'\n\nexport type State = {\n modalTags: {\n [tag: string]: {\n input?: Any\n output?: Any\n }\n }\n}\n\nexport type Action = {\n openModal: (tag: string, input?: Any) => void\n okModal: (tag: string, output?: Any) => void\n closeModal: (tag: string) => void\n toggleModal: (tag: string) => void\n clearModalTag: (tag: string) => void\n clearAllModalTags: () => void\n}\nexport const store = new Store<State>({\n modalTags: {}\n});\n\n\nconst openModal = (tag: string, input?: Any) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n input: input ?? true // Default to true if no input is provided\n }\n }\n }))\n}\nconst okModal = (tag: string, output?: Any) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n output\n }\n }\n }))\n}\nconst closeModal = (tag: string) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: { input: false }\n }\n }))\n}\nconst toggleModal = (tag: string) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n input: !state.modalTags[tag]?.input\n }\n }\n }))\n}\nconst clearModalTag = (tag: string) => {\n store.setState((state) => {\n const newModalTags = { ...state.modalTags };\n delete newModalTags[tag];\n return { modalTags: newModalTags };\n })\n}\nconst clearAllModalTags = () => {\n store.setState(() => ({ modalTags: {} }))\n}\n\nexport const useModalStore = <T>(\n stateCallback: (state: State) => T,\n): T => {\n return useStore(store, stateCallback)\n}\n\nexport const useModalActions = <T>(\n actionCallback: (action: Action) => T\n): T => {\n return actionCallback(\n {\n openModal,\n okModal,\n closeModal,\n toggleModal,\n clearModalTag,\n clearAllModalTags\n }\n )\n}","import React, { useMemo, memo } from 'react'\nimport { useModalStore, State } from '../store'\n\ntype ModalComponent = React.FunctionComponent<any> | React.ComponentType<any>\n\nexport interface ModalWrapperProps {\n modals: Record<string, ModalComponent>\n}\n\nexport const ModalWrapper = memo(function ModalWrapper({\n modals\n}: ModalWrapperProps) {\n const modalTags = useModalStore((state: State) => state.modalTags)\n \n // LUÔN render tất cả modals - KHÔNG conditional render\n // Modal components tự control hiển thị qua isOpen prop\n const allModals = useMemo(() => {\n return Object.entries(modals).map(([tag, Modal]) => {\n try {\n return <Modal key={tag} />\n } catch (error) {\n return null\n }\n })\n }, [modals]) // Chỉ phụ thuộc vào modals object, KHÔNG phụ thuộc modalTags\n \n return <React.Fragment>{allModals}</React.Fragment>\n})\n","import { useEffect, useCallback, useRef } from 'react'\nimport { TagType } from './tag'\nimport { useModalStore, useModalActions, store } from '../store'\n\nexport type Any = string | number | boolean | object | undefined | Record<string, any>\n\nexport interface DisclosureHookProps<O> {\n tag: TagType\n isOpen?: boolean\n onOpen?: () => void\n onClose?: () => void\n onToggle?: () => void\n onChange?: (isOpen: boolean) => void\n onOk?: (output?: O) => void\n onCancel?: () => void\n}\n\nexport const useDisclosure = <Input = Any, Output = Any>(\n disclosureHook: DisclosureHookProps<Output>\n) => {\n const tag = disclosureHook.tag\n \n // Use refs to store callbacks to avoid stale closures\n const disclosureHookRef = useRef(disclosureHook)\n disclosureHookRef.current = disclosureHook\n\n const inputState = useModalStore(\n (state) => state.modalTags[tag]?.input\n ) as Input\n const outputState = useModalStore(\n (state) => state.modalTags[tag]?.output\n ) as Output\n const clearDisclosureTag = useModalActions(\n (actions) => actions.clearModalTag\n )\n\n const onOpenAction = useModalActions((actions) => actions.openModal)\n const okAction = useModalActions((actions) => actions.okModal)\n const onCloseAction = useModalActions((actions) => actions.closeModal)\n const onToggleAction = useModalActions((actions) => actions.toggleModal)\n\n const updateInput = useCallback((input?: Input) => {\n // If input is a function, call it and set the result as input\n let processedInput = input\n if (processedInput && typeof processedInput == 'object' && 'preventDefault' in processedInput) {\n processedInput = undefined\n }\n onOpenAction(tag, processedInput as Any)\n }, [tag, onOpenAction])\n\n const onOpen = useCallback((input?: Input) => {\n updateInput(input)\n disclosureHookRef.current?.onOpen?.()\n }, [updateInput])\n\n const onClose = useCallback(() => {\n onCloseAction(tag)\n disclosureHookRef.current?.onClose?.()\n }, [tag, onCloseAction])\n\n const onToggle = useCallback(() => {\n onToggleAction(tag)\n disclosureHookRef.current?.onToggle?.()\n }, [tag, onToggleAction])\n\n const onOk = useCallback((output?: Output) => {\n disclosureHookRef.current?.onOk?.(output)\n okAction(tag, output as Any)\n }, [tag, okAction])\n\n const onChange = useCallback((isOpen: boolean) => {\n if (isOpen) {\n onOpen()\n } else {\n onClose()\n }\n disclosureHookRef.current?.onChange?.(isOpen)\n }, [onOpen, onClose])\n\n useEffect(() => {\n return () => {\n clearDisclosureTag(tag)\n }\n }, [tag, clearDisclosureTag])\n\n useEffect(() => {\n if (outputState) {\n onOk(outputState as Output)\n }\n }, [outputState, onOk])\n\n return {\n isOpen: !!inputState,\n input: typeof inputState === 'boolean' ? undefined : inputState,\n onOpen,\n onClose,\n onToggle,\n onOk,\n onChange,\n updateInput,\n store\n }\n}\n","import * as React from 'react'\nimport { ModalWrapper } from './provider'\n\ntype ModalComponent = React.FunctionComponent<any> | React.ComponentType<any>\n\nexport type ReactHookModalProviderProps = {\n children: React.ReactNode\n modals: Record<string, ModalComponent>\n}\n\nexport const ReactHookModalProvider = ({\n children,\n modals\n}: ReactHookModalProviderProps) => {\n return (\n <React.Fragment>\n <ModalWrapper modals={modals} />\n {children}\n </React.Fragment>\n )\n}\n\nexport * from './hook'\nexport * from './provider'\n"],"names":["store","Store","modalTags","openModal","tag","input","setState","state","_extends2","_extends","okModal","output","_extends3","closeModal","_extends4","toggleModal","_state$modalTags$tag","_extends5","clearModalTag","newModalTags","clearAllModalTags","useModalStore","stateCallback","useStore","useModalActions","actionCallback","ModalWrapper","memo","_ref","modals","allModals","useMemo","Object","entries","map","_ref2","Modal","React","key","error","Fragment","useDisclosure","disclosureHook","disclosureHookRef","useRef","current","inputState","outputState","_state$modalTags$tag2","clearDisclosureTag","actions","onOpenAction","okAction","onCloseAction","onToggleAction","updateInput","useCallback","processedInput","undefined","onOpen","_disclosureHookRef$cu","_disclosureHookRef$cu2","call","onClose","_disclosureHookRef$cu3","_disclosureHookRef$cu4","onToggle","_disclosureHookRef$cu5","_disclosureHookRef$cu6","onOk","_disclosureHookRef$cu7","_disclosureHookRef$cu8","onChange","isOpen","_disclosureHookRef$cu9","_disclosureHookRef$cu0","useEffect","ReactHookModalProvider","children"],"mappings":"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"}
|
package/dist/index.modern.js
CHANGED
|
@@ -89,20 +89,20 @@ var ModalWrapper = memo(function ModalWrapper(_ref) {
|
|
|
89
89
|
var modalTags = useModalStore(function (state) {
|
|
90
90
|
return state.modalTags;
|
|
91
91
|
});
|
|
92
|
-
var
|
|
93
|
-
return Object.entries(modals).
|
|
94
|
-
var
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
92
|
+
var allModals = useMemo(function () {
|
|
93
|
+
return Object.entries(modals).map(function (_ref2) {
|
|
94
|
+
var tag = _ref2[0],
|
|
95
|
+
Modal = _ref2[1];
|
|
96
|
+
try {
|
|
97
|
+
return React__default.createElement(Modal, {
|
|
98
|
+
key: tag
|
|
99
|
+
});
|
|
100
|
+
} catch (error) {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
103
|
});
|
|
104
|
-
}, [modals
|
|
105
|
-
return React__default.createElement(React__default.Fragment, null,
|
|
104
|
+
}, [modals]);
|
|
105
|
+
return React__default.createElement(React__default.Fragment, null, allModals);
|
|
106
106
|
});
|
|
107
107
|
|
|
108
108
|
var useDisclosure = function useDisclosure(disclosureHook) {
|
package/dist/index.modern.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.modern.js","sources":["../src/store/index.ts","../src/provider/index.tsx","../src/hook/index.ts","../src/index.tsx"],"sourcesContent":["import { Store, useStore } from \"@tanstack/react-store\";\n\n// You can instantiate the store outside of React components too!\n\nimport { Any } from '../hook'\n\nexport type State = {\n modalTags: {\n [tag: string]: {\n input?: Any\n output?: Any\n }\n }\n}\n\nexport type Action = {\n openModal: (tag: string, input?: Any) => void\n okModal: (tag: string, output?: Any) => void\n closeModal: (tag: string) => void\n toggleModal: (tag: string) => void\n clearModalTag: (tag: string) => void\n clearAllModalTags: () => void\n}\nexport const store = new Store<State>({\n modalTags: {}\n});\n\n\nconst openModal = (tag: string, input?: Any) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n input: input ?? true // Default to true if no input is provided\n }\n }\n }))\n}\nconst okModal = (tag: string, output?: Any) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n output\n }\n }\n }))\n}\nconst closeModal = (tag: string) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: { input: false }\n }\n }))\n}\nconst toggleModal = (tag: string) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n input: !state.modalTags[tag]?.input\n }\n }\n }))\n}\nconst clearModalTag = (tag: string) => {\n store.setState((state) => {\n const newModalTags = { ...state.modalTags };\n delete newModalTags[tag];\n return { modalTags: newModalTags };\n })\n}\nconst clearAllModalTags = () => {\n store.setState(() => ({ modalTags: {} }))\n}\n\nexport const useModalStore = <T>(\n stateCallback: (state: State) => T,\n): T => {\n return useStore(store, stateCallback)\n}\n\nexport const useModalActions = <T>(\n actionCallback: (action: Action) => T\n): T => {\n return actionCallback(\n {\n openModal,\n okModal,\n closeModal,\n toggleModal,\n clearModalTag,\n clearAllModalTags\n }\n )\n}","import React, { useMemo, memo } from 'react'\nimport { useModalStore, State } from '../store'\n\ntype ModalComponent = React.FunctionComponent<any> | React.ComponentType<any>\n\nexport interface ModalWrapperProps {\n modals: Record<string, ModalComponent>\n}\n\nexport const ModalWrapper = memo(function ModalWrapper({\n modals\n}: ModalWrapperProps) {\n const modalTags = useModalStore((state: State) => state.modalTags)\n \n const modalOpened = useMemo(() => {\n return Object.entries(modals)\n .filter(([tag]) => !!modalTags[tag]?.input)\n .map(([tag, Modal]) => <Modal key={tag} />)\n }, [modals, modalTags])\n \n return <React.Fragment>{modalOpened}</React.Fragment>\n})\n","import { useEffect, useCallback, useRef } from 'react'\nimport { TagType } from './tag'\nimport { useModalStore, useModalActions, store } from '../store'\n\nexport type Any = string | number | boolean | object | undefined | Record<string, any>\n\nexport interface DisclosureHookProps<O> {\n tag: TagType\n isOpen?: boolean\n onOpen?: () => void\n onClose?: () => void\n onToggle?: () => void\n onChange?: (isOpen: boolean) => void\n onOk?: (output?: O) => void\n onCancel?: () => void\n}\n\nexport const useDisclosure = <Input = Any, Output = Any>(\n disclosureHook: DisclosureHookProps<Output>\n) => {\n const tag = disclosureHook.tag\n \n // Use refs to store callbacks to avoid stale closures\n const disclosureHookRef = useRef(disclosureHook)\n disclosureHookRef.current = disclosureHook\n\n const inputState = useModalStore(\n (state) => state.modalTags[tag]?.input\n ) as Input\n const outputState = useModalStore(\n (state) => state.modalTags[tag]?.output\n ) as Output\n const clearDisclosureTag = useModalActions(\n (actions) => actions.clearModalTag\n )\n\n const onOpenAction = useModalActions((actions) => actions.openModal)\n const okAction = useModalActions((actions) => actions.okModal)\n const onCloseAction = useModalActions((actions) => actions.closeModal)\n const onToggleAction = useModalActions((actions) => actions.toggleModal)\n\n const updateInput = useCallback((input?: Input) => {\n // If input is a function, call it and set the result as input\n let processedInput = input\n if (processedInput && typeof processedInput == 'object' && 'preventDefault' in processedInput) {\n processedInput = undefined\n }\n onOpenAction(tag, processedInput as Any)\n }, [tag, onOpenAction])\n\n const onOpen = useCallback((input?: Input) => {\n updateInput(input)\n disclosureHookRef.current?.onOpen?.()\n }, [updateInput])\n\n const onClose = useCallback(() => {\n onCloseAction(tag)\n disclosureHookRef.current?.onClose?.()\n }, [tag, onCloseAction])\n\n const onToggle = useCallback(() => {\n onToggleAction(tag)\n disclosureHookRef.current?.onToggle?.()\n }, [tag, onToggleAction])\n\n const onOk = useCallback((output?: Output) => {\n disclosureHookRef.current?.onOk?.(output)\n okAction(tag, output as Any)\n }, [tag, okAction])\n\n const onChange = useCallback((isOpen: boolean) => {\n if (isOpen) {\n onOpen()\n } else {\n onClose()\n }\n disclosureHookRef.current?.onChange?.(isOpen)\n }, [onOpen, onClose])\n\n useEffect(() => {\n return () => {\n clearDisclosureTag(tag)\n }\n }, [tag, clearDisclosureTag])\n\n useEffect(() => {\n if (outputState) {\n onOk(outputState as Output)\n }\n }, [outputState, onOk])\n\n return {\n isOpen: !!inputState,\n input: typeof inputState === 'boolean' ? undefined : inputState,\n onOpen,\n onClose,\n onToggle,\n onOk,\n onChange,\n updateInput,\n store\n }\n}\n","import * as React from 'react'\nimport { ModalWrapper } from './provider'\n\ntype ModalComponent = React.FunctionComponent<any> | React.ComponentType<any>\n\nexport type ReactHookModalProviderProps = {\n children: React.ReactNode\n modals: Record<string, ModalComponent>\n}\n\nexport const ReactHookModalProvider = ({\n children,\n modals\n}: ReactHookModalProviderProps) => {\n return (\n <React.Fragment>\n <ModalWrapper modals={modals} />\n {children}\n </React.Fragment>\n )\n}\n\nexport * from './hook'\nexport * from './provider'\n"],"names":["store","Store","modalTags","openModal","tag","input","setState","state","_extends2","_extends","okModal","output","_extends3","closeModal","_extends4","toggleModal","_state$modalTags$tag","_extends5","clearModalTag","newModalTags","clearAllModalTags","useModalStore","stateCallback","useStore","useModalActions","actionCallback","ModalWrapper","memo","_ref","modals","modalOpened","useMemo","Object","entries","filter","_ref2","_modalTags$tag","map","_ref3","Modal","React","key","Fragment","useDisclosure","disclosureHook","disclosureHookRef","useRef","current","inputState","outputState","_state$modalTags$tag2","clearDisclosureTag","actions","onOpenAction","okAction","onCloseAction","onToggleAction","updateInput","useCallback","processedInput","undefined","onOpen","_disclosureHookRef$cu","_disclosureHookRef$cu2","call","onClose","_disclosureHookRef$cu3","_disclosureHookRef$cu4","onToggle","_disclosureHookRef$cu5","_disclosureHookRef$cu6","onOk","_disclosureHookRef$cu7","_disclosureHookRef$cu8","onChange","isOpen","_disclosureHookRef$cu9","_disclosureHookRef$cu0","useEffect","ReactHookModalProvider","children"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.modern.js","sources":["../src/store/index.ts","../src/provider/index.tsx","../src/hook/index.ts","../src/index.tsx"],"sourcesContent":["import { Store, useStore } from \"@tanstack/react-store\";\n\n// You can instantiate the store outside of React components too!\n\nimport { Any } from '../hook'\n\nexport type State = {\n modalTags: {\n [tag: string]: {\n input?: Any\n output?: Any\n }\n }\n}\n\nexport type Action = {\n openModal: (tag: string, input?: Any) => void\n okModal: (tag: string, output?: Any) => void\n closeModal: (tag: string) => void\n toggleModal: (tag: string) => void\n clearModalTag: (tag: string) => void\n clearAllModalTags: () => void\n}\nexport const store = new Store<State>({\n modalTags: {}\n});\n\n\nconst openModal = (tag: string, input?: Any) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n input: input ?? true // Default to true if no input is provided\n }\n }\n }))\n}\nconst okModal = (tag: string, output?: Any) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n output\n }\n }\n }))\n}\nconst closeModal = (tag: string) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: { input: false }\n }\n }))\n}\nconst toggleModal = (tag: string) => {\n store.setState((state) => ({\n modalTags: {\n ...state.modalTags,\n [tag]: {\n ...state.modalTags[tag],\n input: !state.modalTags[tag]?.input\n }\n }\n }))\n}\nconst clearModalTag = (tag: string) => {\n store.setState((state) => {\n const newModalTags = { ...state.modalTags };\n delete newModalTags[tag];\n return { modalTags: newModalTags };\n })\n}\nconst clearAllModalTags = () => {\n store.setState(() => ({ modalTags: {} }))\n}\n\nexport const useModalStore = <T>(\n stateCallback: (state: State) => T,\n): T => {\n return useStore(store, stateCallback)\n}\n\nexport const useModalActions = <T>(\n actionCallback: (action: Action) => T\n): T => {\n return actionCallback(\n {\n openModal,\n okModal,\n closeModal,\n toggleModal,\n clearModalTag,\n clearAllModalTags\n }\n )\n}","import React, { useMemo, memo } from 'react'\nimport { useModalStore, State } from '../store'\n\ntype ModalComponent = React.FunctionComponent<any> | React.ComponentType<any>\n\nexport interface ModalWrapperProps {\n modals: Record<string, ModalComponent>\n}\n\nexport const ModalWrapper = memo(function ModalWrapper({\n modals\n}: ModalWrapperProps) {\n const modalTags = useModalStore((state: State) => state.modalTags)\n \n // LUÔN render tất cả modals - KHÔNG conditional render\n // Modal components tự control hiển thị qua isOpen prop\n const allModals = useMemo(() => {\n return Object.entries(modals).map(([tag, Modal]) => {\n try {\n return <Modal key={tag} />\n } catch (error) {\n return null\n }\n })\n }, [modals]) // Chỉ phụ thuộc vào modals object, KHÔNG phụ thuộc modalTags\n \n return <React.Fragment>{allModals}</React.Fragment>\n})\n","import { useEffect, useCallback, useRef } from 'react'\nimport { TagType } from './tag'\nimport { useModalStore, useModalActions, store } from '../store'\n\nexport type Any = string | number | boolean | object | undefined | Record<string, any>\n\nexport interface DisclosureHookProps<O> {\n tag: TagType\n isOpen?: boolean\n onOpen?: () => void\n onClose?: () => void\n onToggle?: () => void\n onChange?: (isOpen: boolean) => void\n onOk?: (output?: O) => void\n onCancel?: () => void\n}\n\nexport const useDisclosure = <Input = Any, Output = Any>(\n disclosureHook: DisclosureHookProps<Output>\n) => {\n const tag = disclosureHook.tag\n \n // Use refs to store callbacks to avoid stale closures\n const disclosureHookRef = useRef(disclosureHook)\n disclosureHookRef.current = disclosureHook\n\n const inputState = useModalStore(\n (state) => state.modalTags[tag]?.input\n ) as Input\n const outputState = useModalStore(\n (state) => state.modalTags[tag]?.output\n ) as Output\n const clearDisclosureTag = useModalActions(\n (actions) => actions.clearModalTag\n )\n\n const onOpenAction = useModalActions((actions) => actions.openModal)\n const okAction = useModalActions((actions) => actions.okModal)\n const onCloseAction = useModalActions((actions) => actions.closeModal)\n const onToggleAction = useModalActions((actions) => actions.toggleModal)\n\n const updateInput = useCallback((input?: Input) => {\n // If input is a function, call it and set the result as input\n let processedInput = input\n if (processedInput && typeof processedInput == 'object' && 'preventDefault' in processedInput) {\n processedInput = undefined\n }\n onOpenAction(tag, processedInput as Any)\n }, [tag, onOpenAction])\n\n const onOpen = useCallback((input?: Input) => {\n updateInput(input)\n disclosureHookRef.current?.onOpen?.()\n }, [updateInput])\n\n const onClose = useCallback(() => {\n onCloseAction(tag)\n disclosureHookRef.current?.onClose?.()\n }, [tag, onCloseAction])\n\n const onToggle = useCallback(() => {\n onToggleAction(tag)\n disclosureHookRef.current?.onToggle?.()\n }, [tag, onToggleAction])\n\n const onOk = useCallback((output?: Output) => {\n disclosureHookRef.current?.onOk?.(output)\n okAction(tag, output as Any)\n }, [tag, okAction])\n\n const onChange = useCallback((isOpen: boolean) => {\n if (isOpen) {\n onOpen()\n } else {\n onClose()\n }\n disclosureHookRef.current?.onChange?.(isOpen)\n }, [onOpen, onClose])\n\n useEffect(() => {\n return () => {\n clearDisclosureTag(tag)\n }\n }, [tag, clearDisclosureTag])\n\n useEffect(() => {\n if (outputState) {\n onOk(outputState as Output)\n }\n }, [outputState, onOk])\n\n return {\n isOpen: !!inputState,\n input: typeof inputState === 'boolean' ? undefined : inputState,\n onOpen,\n onClose,\n onToggle,\n onOk,\n onChange,\n updateInput,\n store\n }\n}\n","import * as React from 'react'\nimport { ModalWrapper } from './provider'\n\ntype ModalComponent = React.FunctionComponent<any> | React.ComponentType<any>\n\nexport type ReactHookModalProviderProps = {\n children: React.ReactNode\n modals: Record<string, ModalComponent>\n}\n\nexport const ReactHookModalProvider = ({\n children,\n modals\n}: ReactHookModalProviderProps) => {\n return (\n <React.Fragment>\n <ModalWrapper modals={modals} />\n {children}\n </React.Fragment>\n )\n}\n\nexport * from './hook'\nexport * from './provider'\n"],"names":["store","Store","modalTags","openModal","tag","input","setState","state","_extends2","_extends","okModal","output","_extends3","closeModal","_extends4","toggleModal","_state$modalTags$tag","_extends5","clearModalTag","newModalTags","clearAllModalTags","useModalStore","stateCallback","useStore","useModalActions","actionCallback","ModalWrapper","memo","_ref","modals","allModals","useMemo","Object","entries","map","_ref2","Modal","React","key","error","Fragment","useDisclosure","disclosureHook","disclosureHookRef","useRef","current","inputState","outputState","_state$modalTags$tag2","clearDisclosureTag","actions","onOpenAction","okAction","onCloseAction","onToggleAction","updateInput","useCallback","processedInput","undefined","onOpen","_disclosureHookRef$cu","_disclosureHookRef$cu2","call","onClose","_disclosureHookRef$cu3","_disclosureHookRef$cu4","onToggle","_disclosureHookRef$cu5","_disclosureHookRef$cu6","onOk","_disclosureHookRef$cu7","_disclosureHookRef$cu8","onChange","isOpen","_disclosureHookRef$cu9","_disclosureHookRef$cu0","useEffect","ReactHookModalProvider","children"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/provider/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAA;AAG5C,aAAK,cAAc,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;AAE7E,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;CACvC;AAED,eAAO,MAAM,YAAY,+
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/provider/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAA;AAG5C,aAAK,cAAc,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;AAE7E,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;CACvC;AAED,eAAO,MAAM,YAAY,+CAkBvB,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'none';
|
|
2
|
+
export interface LoggerConfig {
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
level: LogLevel;
|
|
5
|
+
prefix: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const logger: {
|
|
8
|
+
configure: (newConfig: Partial<LoggerConfig>) => void;
|
|
9
|
+
getConfig: () => {
|
|
10
|
+
enabled: boolean;
|
|
11
|
+
level: LogLevel;
|
|
12
|
+
prefix: string;
|
|
13
|
+
};
|
|
14
|
+
debug: (message: string, ...args: any[]) => void;
|
|
15
|
+
info: (message: string, ...args: any[]) => void;
|
|
16
|
+
warn: (message: string, ...args: any[]) => void;
|
|
17
|
+
error: (message: string, ...args: any[]) => void;
|
|
18
|
+
group: (label: string) => void;
|
|
19
|
+
groupEnd: () => void;
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/utils/logger.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;AAEnE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,QAAQ,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf;AAuBD,eAAO,MAAM,MAAM;2BACM,OAAO,CAAC,YAAY,CAAC;;iBA3BnC,OAAO;eACT,QAAQ;gBACP,MAAM;;qBA+BG,MAAM,WAAW,GAAG,EAAE;oBAMvB,MAAM,WAAW,GAAG,EAAE;oBAMtB,MAAM,WAAW,GAAG,EAAE;qBAMrB,MAAM,WAAW,GAAG,EAAE;mBAMxB,MAAM;;CAWtB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@helloworldqq/react-modal",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "React hook disclosure modal - A powerful and flexible React hook library for managing modals",
|
|
5
5
|
"author": "helloworldqq",
|
|
6
6
|
"license": "MIT",
|
|
@@ -48,6 +48,9 @@
|
|
|
48
48
|
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
+
"@babel/core": "^7.28.5",
|
|
52
|
+
"@babel/plugin-proposal-unicode-property-regex": "^7.18.6",
|
|
53
|
+
"@babel/plugin-transform-unicode-property-regex": "^7.27.1",
|
|
51
54
|
"@testing-library/jest-dom": "^6.4.2",
|
|
52
55
|
"@testing-library/react": "^14.2.1",
|
|
53
56
|
"@testing-library/user-event": "^14.5.2",
|
|
@@ -79,4 +82,4 @@
|
|
|
79
82
|
"@tanstack/react-store": "^0.7.3"
|
|
80
83
|
},
|
|
81
84
|
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
|
|
82
|
-
}
|
|
85
|
+
}
|