@sparrowengg/integrations-templates-frontend 7.0.0-bulkify.3 → 7.0.0-bulkify.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/cjs/cascader-dropdown/cascader-dropdown-provider.js +24 -4
- package/dist/cjs/cascader-dropdown/cascader-dropdown-provider.js.map +1 -1
- package/dist/es/cascader-dropdown/cascader-dropdown-provider.js +24 -4
- package/dist/es/cascader-dropdown/cascader-dropdown-provider.js.map +1 -1
- package/package.json +1 -1
|
@@ -18,12 +18,32 @@ const CascaderDropdownProvider = ({
|
|
|
18
18
|
const inputRef = React.useRef(null);
|
|
19
19
|
const [popoverOpen, setPopoverOpen] = React.useState(false);
|
|
20
20
|
const prevPopoverOpen = React.useRef(false);
|
|
21
|
+
const hasAutoOpened = React.useRef(false);
|
|
21
22
|
React.useEffect(() => {
|
|
22
|
-
if (defaultOpen)
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
if (!defaultOpen || hasAutoOpened.current)
|
|
24
|
+
return void 0;
|
|
25
|
+
hasAutoOpened.current = true;
|
|
26
|
+
const rafSupported = typeof window !== "undefined" && typeof window.requestAnimationFrame === "function";
|
|
27
|
+
let raf1 = 0;
|
|
28
|
+
let raf2 = 0;
|
|
29
|
+
let timer = null;
|
|
30
|
+
if (rafSupported) {
|
|
31
|
+
raf1 = window.requestAnimationFrame(() => {
|
|
32
|
+
raf2 = window.requestAnimationFrame(() => setPopoverOpen(true));
|
|
33
|
+
});
|
|
34
|
+
} else {
|
|
35
|
+
timer = setTimeout(() => setPopoverOpen(true), 32);
|
|
25
36
|
}
|
|
26
|
-
return
|
|
37
|
+
return () => {
|
|
38
|
+
if (rafSupported) {
|
|
39
|
+
if (raf1)
|
|
40
|
+
window.cancelAnimationFrame(raf1);
|
|
41
|
+
if (raf2)
|
|
42
|
+
window.cancelAnimationFrame(raf2);
|
|
43
|
+
}
|
|
44
|
+
if (timer)
|
|
45
|
+
clearTimeout(timer);
|
|
46
|
+
};
|
|
27
47
|
}, [defaultOpen]);
|
|
28
48
|
React.useEffect(() => {
|
|
29
49
|
if (prevPopoverOpen.current !== popoverOpen) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cascader-dropdown-provider.js","sources":["../../../src/cascader-dropdown/cascader-dropdown-provider.tsx"],"sourcesContent":["import React, {\n ReactNode, useId, useMemo, useState, useRef,\n useEffect\n} from 'react';\nimport {\n CascaderDropdownItemType, CascaderDropdownOperatorType, CascaderDropdownDataValueType, CascaderDropdownValueSelectorType, optionTypes\n} from './helpers/cascader-dropdown-constants';\nimport { CascaderDropdownContext, CascaderDropdownContextType } from './use-value';\nimport {\n buildSelectionPath, buildTree, findNextFocusableRowNode, findPrevFocusableRowNode,\n recursiveFind\n} from './helpers/cascader-dropdown-utils';\nimport { CascaderDropdownNode } from './cascader-dropdown-node';\nimport { OnChangeReturnType } from './cascader-dropdown';\n\nexport type CascaderDropdownProviderProps = {\n children: ReactNode;\n data: (CascaderDropdownItemType | CascaderDropdownOperatorType)[];\n value: CascaderDropdownDataValueType;\n onChange: ({\n value,\n selectionPath,\n selectorValue\n }: OnChangeReturnType) => void;\n selectorValue?: CascaderDropdownValueSelectorType;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\nexport const CascaderDropdownProvider = ({\n children, data, value, onChange, selectorValue, defaultOpen = false, onOpenChange\n}: CascaderDropdownProviderProps) => {\n const id = useId();\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n const [popoverOpen, setPopoverOpen] = useState(false);\n const prevPopoverOpen = useRef(false);\n\n useEffect(() => {\n if (defaultOpen) {\n const timer = setTimeout(() => setPopoverOpen(true), 0);\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [defaultOpen]);\n\n useEffect(() => {\n if (prevPopoverOpen.current !== popoverOpen) {\n prevPopoverOpen.current = popoverOpen;\n onOpenChange?.(popoverOpen);\n }\n }, [popoverOpen, onOpenChange]);\n const [selectedNode, setSelectedNode] = useState<CascaderDropdownNode | null>(null);\n const [focusedNode, setFocusedNode] = useState<CascaderDropdownNode | null>(null);\n\n const { selectionPath, foldersSelectionPath } = useMemo(() => {\n return buildSelectionPath(selectedNode);\n }, [selectedNode]);\n\n const rootNode = useMemo(() => {\n const root = buildTree(data);\n const node = root.findNode(value?.value);\n if (node) setSelectedNode(node);\n return root;\n }, [data, value]);\n\n const focusPreviousColumn = () => {\n if (foldersSelectionPath.length === 0 || foldersSelectionPath.length === 1) {\n focusRootNode();\n return;\n }\n if (foldersSelectionPath.length > 1) {\n const selectedFolderNode = rootNode.findNode(foldersSelectionPath.at(-1)?.value);\n const parentNode = rootNode.findNode(foldersSelectionPath.at(-2)?.value);\n if (parentNode) {\n setFocusedNode(selectedFolderNode ?? parentNode.children.at(0) ?? null);\n setSelectedNode(parentNode);\n }\n }\n };\n\n const focusRootNode = () => {\n if (foldersSelectionPath.length > 0) {\n const selectedFolderNode = rootNode.findNode(foldersSelectionPath.at(0)?.value);\n setFocusedNode(selectedFolderNode ?? null);\n setSelectedNode(rootNode);\n return;\n }\n setFocusedNode(rootNode.children.at(0) ?? null);\n setSelectedNode(rootNode);\n };\n\n const focusNthColumn = (index: number) => {\n if (!index) {\n focusRootNode();\n return;\n }\n if (foldersSelectionPath.length > 0) {\n const selectedFolderNode = rootNode.findNode(foldersSelectionPath.at(index)?.value);\n const parent = rootNode.findNode(foldersSelectionPath.at(index - 1)?.value);\n if (parent) {\n setFocusedNode(selectedFolderNode ?? parent.children.at(0) ?? null);\n setSelectedNode(parent);\n }\n }\n };\n\n const focusNextRow = () => {\n if (focusedNode) {\n const nextNode = findNextFocusableRowNode(focusedNode);\n if (nextNode) setFocusedNode(nextNode);\n }\n };\n\n const focusPreviousRow = () => {\n if (focusedNode) {\n const prevNode = findPrevFocusableRowNode(focusedNode);\n if (prevNode) setFocusedNode(prevNode);\n }\n };\n\n const focusNextColumn = () => {\n if (focusedNode && (focusedNode.children.length > 0 || focusedNode.getType() === optionTypes.VALUE_SELECTOR)) {\n setFocusedNode(focusedNode.children.at(0) ?? null);\n setSelectedNode(focusedNode);\n }\n };\n\n const handleChange = (node: (CascaderDropdownNode | CascaderDropdownOperatorType), selectedSelectorValue?: CascaderDropdownValueSelectorType) => {\n setSelectedNode(null);\n setFocusedNode(null);\n setPopoverOpen(false);\n onChange({\n value: { label: node.label, value: node.value },\n selectionPath: selectionPath.map((item) => ({ label: item.label, value: item.value })),\n selectedProperty: recursiveFind(data, { value: node.value, label: node.label }),\n selectorValue: selectedSelectorValue\n });\n };\n\n const selectFocusedNode = () => {\n if (focusedNode) {\n if (focusedNode.children.length > 0 || focusedNode.getType() === optionTypes.VALUE_SELECTOR) {\n setFocusedNode(focusedNode.children.at(0) ?? null);\n setSelectedNode(focusedNode);\n } else {\n handleChange(focusedNode);\n }\n }\n };\n\n useEffect(() => {\n if (inputRef.current && document.activeElement !== inputRef.current) inputRef.current.focus();\n if (!focusedNode) {\n const selectedFolder: CascaderDropdownNode | null = foldersSelectionPath.length > 0 ? rootNode.findNode(foldersSelectionPath.at(0)?.value) : rootNode.children.at(0) ?? null;\n setFocusedNode(selectedFolder);\n }\n });\n\n const providerValue = useMemo<CascaderDropdownContextType>(() => ({\n id,\n data,\n value,\n inputRef,\n rootNode,\n focusedNode,\n popoverOpen,\n selectedNode,\n selectionPath,\n foldersSelectionPath,\n focusNextRow,\n setFocusedNode,\n setPopoverOpen,\n focusNthColumn,\n focusNextColumn,\n setSelectedNode,\n focusPreviousRow,\n focusPreviousColumn,\n handleChange,\n selectFocusedNode,\n selectorValue\n }), [\n id,\n data,\n value,\n inputRef,\n rootNode,\n focusedNode,\n popoverOpen,\n selectedNode,\n selectionPath,\n foldersSelectionPath,\n focusNextRow,\n setFocusedNode,\n focusNthColumn,\n setPopoverOpen,\n focusNextColumn,\n setSelectedNode,\n focusPreviousRow,\n focusPreviousColumn,\n handleChange,\n selectFocusedNode,\n selectorValue\n ]);\n\n return (\n <CascaderDropdownContext.Provider value={providerValue}>\n {children}\n </CascaderDropdownContext.Provider>\n );\n};\n"],"names":["useId","useRef","useState","useEffect","useMemo","buildSelectionPath","buildTree","findNextFocusableRowNode","findPrevFocusableRowNode","optionTypes","recursiveFind","CascaderDropdownContext"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cascader-dropdown-provider.js","sources":["../../../src/cascader-dropdown/cascader-dropdown-provider.tsx"],"sourcesContent":["import React, {\n ReactNode, useId, useMemo, useState, useRef,\n useEffect\n} from 'react';\nimport {\n CascaderDropdownItemType, CascaderDropdownOperatorType, CascaderDropdownDataValueType, CascaderDropdownValueSelectorType, optionTypes\n} from './helpers/cascader-dropdown-constants';\nimport { CascaderDropdownContext, CascaderDropdownContextType } from './use-value';\nimport {\n buildSelectionPath, buildTree, findNextFocusableRowNode, findPrevFocusableRowNode,\n recursiveFind\n} from './helpers/cascader-dropdown-utils';\nimport { CascaderDropdownNode } from './cascader-dropdown-node';\nimport { OnChangeReturnType } from './cascader-dropdown';\n\nexport type CascaderDropdownProviderProps = {\n children: ReactNode;\n data: (CascaderDropdownItemType | CascaderDropdownOperatorType)[];\n value: CascaderDropdownDataValueType;\n onChange: ({\n value,\n selectionPath,\n selectorValue\n }: OnChangeReturnType) => void;\n selectorValue?: CascaderDropdownValueSelectorType;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\nexport const CascaderDropdownProvider = ({\n children, data, value, onChange, selectorValue, defaultOpen = false, onOpenChange\n}: CascaderDropdownProviderProps) => {\n const id = useId();\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n const [popoverOpen, setPopoverOpen] = useState(false);\n const prevPopoverOpen = useRef(false);\n const hasAutoOpened = useRef(false);\n\n useEffect(() => {\n if (!defaultOpen || hasAutoOpened.current) return undefined;\n hasAutoOpened.current = true;\n\n const rafSupported = typeof window !== 'undefined' && typeof window.requestAnimationFrame === 'function';\n let raf1 = 0;\n let raf2 = 0;\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n if (rafSupported) {\n raf1 = window.requestAnimationFrame(() => {\n raf2 = window.requestAnimationFrame(() => setPopoverOpen(true));\n });\n } else {\n timer = setTimeout(() => setPopoverOpen(true), 32);\n }\n\n return () => {\n if (rafSupported) {\n if (raf1) window.cancelAnimationFrame(raf1);\n if (raf2) window.cancelAnimationFrame(raf2);\n }\n if (timer) clearTimeout(timer);\n };\n }, [defaultOpen]);\n\n useEffect(() => {\n if (prevPopoverOpen.current !== popoverOpen) {\n prevPopoverOpen.current = popoverOpen;\n onOpenChange?.(popoverOpen);\n }\n }, [popoverOpen, onOpenChange]);\n const [selectedNode, setSelectedNode] = useState<CascaderDropdownNode | null>(null);\n const [focusedNode, setFocusedNode] = useState<CascaderDropdownNode | null>(null);\n\n const { selectionPath, foldersSelectionPath } = useMemo(() => {\n return buildSelectionPath(selectedNode);\n }, [selectedNode]);\n\n const rootNode = useMemo(() => {\n const root = buildTree(data);\n const node = root.findNode(value?.value);\n if (node) setSelectedNode(node);\n return root;\n }, [data, value]);\n\n const focusPreviousColumn = () => {\n if (foldersSelectionPath.length === 0 || foldersSelectionPath.length === 1) {\n focusRootNode();\n return;\n }\n if (foldersSelectionPath.length > 1) {\n const selectedFolderNode = rootNode.findNode(foldersSelectionPath.at(-1)?.value);\n const parentNode = rootNode.findNode(foldersSelectionPath.at(-2)?.value);\n if (parentNode) {\n setFocusedNode(selectedFolderNode ?? parentNode.children.at(0) ?? null);\n setSelectedNode(parentNode);\n }\n }\n };\n\n const focusRootNode = () => {\n if (foldersSelectionPath.length > 0) {\n const selectedFolderNode = rootNode.findNode(foldersSelectionPath.at(0)?.value);\n setFocusedNode(selectedFolderNode ?? null);\n setSelectedNode(rootNode);\n return;\n }\n setFocusedNode(rootNode.children.at(0) ?? null);\n setSelectedNode(rootNode);\n };\n\n const focusNthColumn = (index: number) => {\n if (!index) {\n focusRootNode();\n return;\n }\n if (foldersSelectionPath.length > 0) {\n const selectedFolderNode = rootNode.findNode(foldersSelectionPath.at(index)?.value);\n const parent = rootNode.findNode(foldersSelectionPath.at(index - 1)?.value);\n if (parent) {\n setFocusedNode(selectedFolderNode ?? parent.children.at(0) ?? null);\n setSelectedNode(parent);\n }\n }\n };\n\n const focusNextRow = () => {\n if (focusedNode) {\n const nextNode = findNextFocusableRowNode(focusedNode);\n if (nextNode) setFocusedNode(nextNode);\n }\n };\n\n const focusPreviousRow = () => {\n if (focusedNode) {\n const prevNode = findPrevFocusableRowNode(focusedNode);\n if (prevNode) setFocusedNode(prevNode);\n }\n };\n\n const focusNextColumn = () => {\n if (focusedNode && (focusedNode.children.length > 0 || focusedNode.getType() === optionTypes.VALUE_SELECTOR)) {\n setFocusedNode(focusedNode.children.at(0) ?? null);\n setSelectedNode(focusedNode);\n }\n };\n\n const handleChange = (node: (CascaderDropdownNode | CascaderDropdownOperatorType), selectedSelectorValue?: CascaderDropdownValueSelectorType) => {\n setSelectedNode(null);\n setFocusedNode(null);\n setPopoverOpen(false);\n onChange({\n value: { label: node.label, value: node.value },\n selectionPath: selectionPath.map((item) => ({ label: item.label, value: item.value })),\n selectedProperty: recursiveFind(data, { value: node.value, label: node.label }),\n selectorValue: selectedSelectorValue\n });\n };\n\n const selectFocusedNode = () => {\n if (focusedNode) {\n if (focusedNode.children.length > 0 || focusedNode.getType() === optionTypes.VALUE_SELECTOR) {\n setFocusedNode(focusedNode.children.at(0) ?? null);\n setSelectedNode(focusedNode);\n } else {\n handleChange(focusedNode);\n }\n }\n };\n\n useEffect(() => {\n if (inputRef.current && document.activeElement !== inputRef.current) inputRef.current.focus();\n if (!focusedNode) {\n const selectedFolder: CascaderDropdownNode | null = foldersSelectionPath.length > 0 ? rootNode.findNode(foldersSelectionPath.at(0)?.value) : rootNode.children.at(0) ?? null;\n setFocusedNode(selectedFolder);\n }\n });\n\n const providerValue = useMemo<CascaderDropdownContextType>(() => ({\n id,\n data,\n value,\n inputRef,\n rootNode,\n focusedNode,\n popoverOpen,\n selectedNode,\n selectionPath,\n foldersSelectionPath,\n focusNextRow,\n setFocusedNode,\n setPopoverOpen,\n focusNthColumn,\n focusNextColumn,\n setSelectedNode,\n focusPreviousRow,\n focusPreviousColumn,\n handleChange,\n selectFocusedNode,\n selectorValue\n }), [\n id,\n data,\n value,\n inputRef,\n rootNode,\n focusedNode,\n popoverOpen,\n selectedNode,\n selectionPath,\n foldersSelectionPath,\n focusNextRow,\n setFocusedNode,\n focusNthColumn,\n setPopoverOpen,\n focusNextColumn,\n setSelectedNode,\n focusPreviousRow,\n focusPreviousColumn,\n handleChange,\n selectFocusedNode,\n selectorValue\n ]);\n\n return (\n <CascaderDropdownContext.Provider value={providerValue}>\n {children}\n </CascaderDropdownContext.Provider>\n );\n};\n"],"names":["useId","useRef","useState","useEffect","useMemo","buildSelectionPath","buildTree","findNextFocusableRowNode","findPrevFocusableRowNode","optionTypes","recursiveFind","CascaderDropdownContext"],"mappings":"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"}
|
|
@@ -16,12 +16,32 @@ const CascaderDropdownProvider = ({
|
|
|
16
16
|
const inputRef = useRef(null);
|
|
17
17
|
const [popoverOpen, setPopoverOpen] = useState(false);
|
|
18
18
|
const prevPopoverOpen = useRef(false);
|
|
19
|
+
const hasAutoOpened = useRef(false);
|
|
19
20
|
useEffect(() => {
|
|
20
|
-
if (defaultOpen)
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
if (!defaultOpen || hasAutoOpened.current)
|
|
22
|
+
return void 0;
|
|
23
|
+
hasAutoOpened.current = true;
|
|
24
|
+
const rafSupported = typeof window !== "undefined" && typeof window.requestAnimationFrame === "function";
|
|
25
|
+
let raf1 = 0;
|
|
26
|
+
let raf2 = 0;
|
|
27
|
+
let timer = null;
|
|
28
|
+
if (rafSupported) {
|
|
29
|
+
raf1 = window.requestAnimationFrame(() => {
|
|
30
|
+
raf2 = window.requestAnimationFrame(() => setPopoverOpen(true));
|
|
31
|
+
});
|
|
32
|
+
} else {
|
|
33
|
+
timer = setTimeout(() => setPopoverOpen(true), 32);
|
|
23
34
|
}
|
|
24
|
-
return
|
|
35
|
+
return () => {
|
|
36
|
+
if (rafSupported) {
|
|
37
|
+
if (raf1)
|
|
38
|
+
window.cancelAnimationFrame(raf1);
|
|
39
|
+
if (raf2)
|
|
40
|
+
window.cancelAnimationFrame(raf2);
|
|
41
|
+
}
|
|
42
|
+
if (timer)
|
|
43
|
+
clearTimeout(timer);
|
|
44
|
+
};
|
|
25
45
|
}, [defaultOpen]);
|
|
26
46
|
useEffect(() => {
|
|
27
47
|
if (prevPopoverOpen.current !== popoverOpen) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cascader-dropdown-provider.js","sources":["../../../src/cascader-dropdown/cascader-dropdown-provider.tsx"],"sourcesContent":["import React, {\n ReactNode, useId, useMemo, useState, useRef,\n useEffect\n} from 'react';\nimport {\n CascaderDropdownItemType, CascaderDropdownOperatorType, CascaderDropdownDataValueType, CascaderDropdownValueSelectorType, optionTypes\n} from './helpers/cascader-dropdown-constants';\nimport { CascaderDropdownContext, CascaderDropdownContextType } from './use-value';\nimport {\n buildSelectionPath, buildTree, findNextFocusableRowNode, findPrevFocusableRowNode,\n recursiveFind\n} from './helpers/cascader-dropdown-utils';\nimport { CascaderDropdownNode } from './cascader-dropdown-node';\nimport { OnChangeReturnType } from './cascader-dropdown';\n\nexport type CascaderDropdownProviderProps = {\n children: ReactNode;\n data: (CascaderDropdownItemType | CascaderDropdownOperatorType)[];\n value: CascaderDropdownDataValueType;\n onChange: ({\n value,\n selectionPath,\n selectorValue\n }: OnChangeReturnType) => void;\n selectorValue?: CascaderDropdownValueSelectorType;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\nexport const CascaderDropdownProvider = ({\n children, data, value, onChange, selectorValue, defaultOpen = false, onOpenChange\n}: CascaderDropdownProviderProps) => {\n const id = useId();\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n const [popoverOpen, setPopoverOpen] = useState(false);\n const prevPopoverOpen = useRef(false);\n\n useEffect(() => {\n if (defaultOpen) {\n const timer = setTimeout(() => setPopoverOpen(true), 0);\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [defaultOpen]);\n\n useEffect(() => {\n if (prevPopoverOpen.current !== popoverOpen) {\n prevPopoverOpen.current = popoverOpen;\n onOpenChange?.(popoverOpen);\n }\n }, [popoverOpen, onOpenChange]);\n const [selectedNode, setSelectedNode] = useState<CascaderDropdownNode | null>(null);\n const [focusedNode, setFocusedNode] = useState<CascaderDropdownNode | null>(null);\n\n const { selectionPath, foldersSelectionPath } = useMemo(() => {\n return buildSelectionPath(selectedNode);\n }, [selectedNode]);\n\n const rootNode = useMemo(() => {\n const root = buildTree(data);\n const node = root.findNode(value?.value);\n if (node) setSelectedNode(node);\n return root;\n }, [data, value]);\n\n const focusPreviousColumn = () => {\n if (foldersSelectionPath.length === 0 || foldersSelectionPath.length === 1) {\n focusRootNode();\n return;\n }\n if (foldersSelectionPath.length > 1) {\n const selectedFolderNode = rootNode.findNode(foldersSelectionPath.at(-1)?.value);\n const parentNode = rootNode.findNode(foldersSelectionPath.at(-2)?.value);\n if (parentNode) {\n setFocusedNode(selectedFolderNode ?? parentNode.children.at(0) ?? null);\n setSelectedNode(parentNode);\n }\n }\n };\n\n const focusRootNode = () => {\n if (foldersSelectionPath.length > 0) {\n const selectedFolderNode = rootNode.findNode(foldersSelectionPath.at(0)?.value);\n setFocusedNode(selectedFolderNode ?? null);\n setSelectedNode(rootNode);\n return;\n }\n setFocusedNode(rootNode.children.at(0) ?? null);\n setSelectedNode(rootNode);\n };\n\n const focusNthColumn = (index: number) => {\n if (!index) {\n focusRootNode();\n return;\n }\n if (foldersSelectionPath.length > 0) {\n const selectedFolderNode = rootNode.findNode(foldersSelectionPath.at(index)?.value);\n const parent = rootNode.findNode(foldersSelectionPath.at(index - 1)?.value);\n if (parent) {\n setFocusedNode(selectedFolderNode ?? parent.children.at(0) ?? null);\n setSelectedNode(parent);\n }\n }\n };\n\n const focusNextRow = () => {\n if (focusedNode) {\n const nextNode = findNextFocusableRowNode(focusedNode);\n if (nextNode) setFocusedNode(nextNode);\n }\n };\n\n const focusPreviousRow = () => {\n if (focusedNode) {\n const prevNode = findPrevFocusableRowNode(focusedNode);\n if (prevNode) setFocusedNode(prevNode);\n }\n };\n\n const focusNextColumn = () => {\n if (focusedNode && (focusedNode.children.length > 0 || focusedNode.getType() === optionTypes.VALUE_SELECTOR)) {\n setFocusedNode(focusedNode.children.at(0) ?? null);\n setSelectedNode(focusedNode);\n }\n };\n\n const handleChange = (node: (CascaderDropdownNode | CascaderDropdownOperatorType), selectedSelectorValue?: CascaderDropdownValueSelectorType) => {\n setSelectedNode(null);\n setFocusedNode(null);\n setPopoverOpen(false);\n onChange({\n value: { label: node.label, value: node.value },\n selectionPath: selectionPath.map((item) => ({ label: item.label, value: item.value })),\n selectedProperty: recursiveFind(data, { value: node.value, label: node.label }),\n selectorValue: selectedSelectorValue\n });\n };\n\n const selectFocusedNode = () => {\n if (focusedNode) {\n if (focusedNode.children.length > 0 || focusedNode.getType() === optionTypes.VALUE_SELECTOR) {\n setFocusedNode(focusedNode.children.at(0) ?? null);\n setSelectedNode(focusedNode);\n } else {\n handleChange(focusedNode);\n }\n }\n };\n\n useEffect(() => {\n if (inputRef.current && document.activeElement !== inputRef.current) inputRef.current.focus();\n if (!focusedNode) {\n const selectedFolder: CascaderDropdownNode | null = foldersSelectionPath.length > 0 ? rootNode.findNode(foldersSelectionPath.at(0)?.value) : rootNode.children.at(0) ?? null;\n setFocusedNode(selectedFolder);\n }\n });\n\n const providerValue = useMemo<CascaderDropdownContextType>(() => ({\n id,\n data,\n value,\n inputRef,\n rootNode,\n focusedNode,\n popoverOpen,\n selectedNode,\n selectionPath,\n foldersSelectionPath,\n focusNextRow,\n setFocusedNode,\n setPopoverOpen,\n focusNthColumn,\n focusNextColumn,\n setSelectedNode,\n focusPreviousRow,\n focusPreviousColumn,\n handleChange,\n selectFocusedNode,\n selectorValue\n }), [\n id,\n data,\n value,\n inputRef,\n rootNode,\n focusedNode,\n popoverOpen,\n selectedNode,\n selectionPath,\n foldersSelectionPath,\n focusNextRow,\n setFocusedNode,\n focusNthColumn,\n setPopoverOpen,\n focusNextColumn,\n setSelectedNode,\n focusPreviousRow,\n focusPreviousColumn,\n handleChange,\n selectFocusedNode,\n selectorValue\n ]);\n\n return (\n <CascaderDropdownContext.Provider value={providerValue}>\n {children}\n </CascaderDropdownContext.Provider>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cascader-dropdown-provider.js","sources":["../../../src/cascader-dropdown/cascader-dropdown-provider.tsx"],"sourcesContent":["import React, {\n ReactNode, useId, useMemo, useState, useRef,\n useEffect\n} from 'react';\nimport {\n CascaderDropdownItemType, CascaderDropdownOperatorType, CascaderDropdownDataValueType, CascaderDropdownValueSelectorType, optionTypes\n} from './helpers/cascader-dropdown-constants';\nimport { CascaderDropdownContext, CascaderDropdownContextType } from './use-value';\nimport {\n buildSelectionPath, buildTree, findNextFocusableRowNode, findPrevFocusableRowNode,\n recursiveFind\n} from './helpers/cascader-dropdown-utils';\nimport { CascaderDropdownNode } from './cascader-dropdown-node';\nimport { OnChangeReturnType } from './cascader-dropdown';\n\nexport type CascaderDropdownProviderProps = {\n children: ReactNode;\n data: (CascaderDropdownItemType | CascaderDropdownOperatorType)[];\n value: CascaderDropdownDataValueType;\n onChange: ({\n value,\n selectionPath,\n selectorValue\n }: OnChangeReturnType) => void;\n selectorValue?: CascaderDropdownValueSelectorType;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\nexport const CascaderDropdownProvider = ({\n children, data, value, onChange, selectorValue, defaultOpen = false, onOpenChange\n}: CascaderDropdownProviderProps) => {\n const id = useId();\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n const [popoverOpen, setPopoverOpen] = useState(false);\n const prevPopoverOpen = useRef(false);\n const hasAutoOpened = useRef(false);\n\n useEffect(() => {\n if (!defaultOpen || hasAutoOpened.current) return undefined;\n hasAutoOpened.current = true;\n\n const rafSupported = typeof window !== 'undefined' && typeof window.requestAnimationFrame === 'function';\n let raf1 = 0;\n let raf2 = 0;\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n if (rafSupported) {\n raf1 = window.requestAnimationFrame(() => {\n raf2 = window.requestAnimationFrame(() => setPopoverOpen(true));\n });\n } else {\n timer = setTimeout(() => setPopoverOpen(true), 32);\n }\n\n return () => {\n if (rafSupported) {\n if (raf1) window.cancelAnimationFrame(raf1);\n if (raf2) window.cancelAnimationFrame(raf2);\n }\n if (timer) clearTimeout(timer);\n };\n }, [defaultOpen]);\n\n useEffect(() => {\n if (prevPopoverOpen.current !== popoverOpen) {\n prevPopoverOpen.current = popoverOpen;\n onOpenChange?.(popoverOpen);\n }\n }, [popoverOpen, onOpenChange]);\n const [selectedNode, setSelectedNode] = useState<CascaderDropdownNode | null>(null);\n const [focusedNode, setFocusedNode] = useState<CascaderDropdownNode | null>(null);\n\n const { selectionPath, foldersSelectionPath } = useMemo(() => {\n return buildSelectionPath(selectedNode);\n }, [selectedNode]);\n\n const rootNode = useMemo(() => {\n const root = buildTree(data);\n const node = root.findNode(value?.value);\n if (node) setSelectedNode(node);\n return root;\n }, [data, value]);\n\n const focusPreviousColumn = () => {\n if (foldersSelectionPath.length === 0 || foldersSelectionPath.length === 1) {\n focusRootNode();\n return;\n }\n if (foldersSelectionPath.length > 1) {\n const selectedFolderNode = rootNode.findNode(foldersSelectionPath.at(-1)?.value);\n const parentNode = rootNode.findNode(foldersSelectionPath.at(-2)?.value);\n if (parentNode) {\n setFocusedNode(selectedFolderNode ?? parentNode.children.at(0) ?? null);\n setSelectedNode(parentNode);\n }\n }\n };\n\n const focusRootNode = () => {\n if (foldersSelectionPath.length > 0) {\n const selectedFolderNode = rootNode.findNode(foldersSelectionPath.at(0)?.value);\n setFocusedNode(selectedFolderNode ?? null);\n setSelectedNode(rootNode);\n return;\n }\n setFocusedNode(rootNode.children.at(0) ?? null);\n setSelectedNode(rootNode);\n };\n\n const focusNthColumn = (index: number) => {\n if (!index) {\n focusRootNode();\n return;\n }\n if (foldersSelectionPath.length > 0) {\n const selectedFolderNode = rootNode.findNode(foldersSelectionPath.at(index)?.value);\n const parent = rootNode.findNode(foldersSelectionPath.at(index - 1)?.value);\n if (parent) {\n setFocusedNode(selectedFolderNode ?? parent.children.at(0) ?? null);\n setSelectedNode(parent);\n }\n }\n };\n\n const focusNextRow = () => {\n if (focusedNode) {\n const nextNode = findNextFocusableRowNode(focusedNode);\n if (nextNode) setFocusedNode(nextNode);\n }\n };\n\n const focusPreviousRow = () => {\n if (focusedNode) {\n const prevNode = findPrevFocusableRowNode(focusedNode);\n if (prevNode) setFocusedNode(prevNode);\n }\n };\n\n const focusNextColumn = () => {\n if (focusedNode && (focusedNode.children.length > 0 || focusedNode.getType() === optionTypes.VALUE_SELECTOR)) {\n setFocusedNode(focusedNode.children.at(0) ?? null);\n setSelectedNode(focusedNode);\n }\n };\n\n const handleChange = (node: (CascaderDropdownNode | CascaderDropdownOperatorType), selectedSelectorValue?: CascaderDropdownValueSelectorType) => {\n setSelectedNode(null);\n setFocusedNode(null);\n setPopoverOpen(false);\n onChange({\n value: { label: node.label, value: node.value },\n selectionPath: selectionPath.map((item) => ({ label: item.label, value: item.value })),\n selectedProperty: recursiveFind(data, { value: node.value, label: node.label }),\n selectorValue: selectedSelectorValue\n });\n };\n\n const selectFocusedNode = () => {\n if (focusedNode) {\n if (focusedNode.children.length > 0 || focusedNode.getType() === optionTypes.VALUE_SELECTOR) {\n setFocusedNode(focusedNode.children.at(0) ?? null);\n setSelectedNode(focusedNode);\n } else {\n handleChange(focusedNode);\n }\n }\n };\n\n useEffect(() => {\n if (inputRef.current && document.activeElement !== inputRef.current) inputRef.current.focus();\n if (!focusedNode) {\n const selectedFolder: CascaderDropdownNode | null = foldersSelectionPath.length > 0 ? rootNode.findNode(foldersSelectionPath.at(0)?.value) : rootNode.children.at(0) ?? null;\n setFocusedNode(selectedFolder);\n }\n });\n\n const providerValue = useMemo<CascaderDropdownContextType>(() => ({\n id,\n data,\n value,\n inputRef,\n rootNode,\n focusedNode,\n popoverOpen,\n selectedNode,\n selectionPath,\n foldersSelectionPath,\n focusNextRow,\n setFocusedNode,\n setPopoverOpen,\n focusNthColumn,\n focusNextColumn,\n setSelectedNode,\n focusPreviousRow,\n focusPreviousColumn,\n handleChange,\n selectFocusedNode,\n selectorValue\n }), [\n id,\n data,\n value,\n inputRef,\n rootNode,\n focusedNode,\n popoverOpen,\n selectedNode,\n selectionPath,\n foldersSelectionPath,\n focusNextRow,\n setFocusedNode,\n focusNthColumn,\n setPopoverOpen,\n focusNextColumn,\n setSelectedNode,\n focusPreviousRow,\n focusPreviousColumn,\n handleChange,\n selectFocusedNode,\n selectorValue\n ]);\n\n return (\n <CascaderDropdownContext.Provider value={providerValue}>\n {children}\n </CascaderDropdownContext.Provider>\n );\n};\n"],"names":[],"mappings":"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"}
|