import * as React from 'react' import {__, _x} from '@wordpress/i18n' import { Modal, __experimentalUseNavigator as useNavigator, __experimentalNavigatorButton as NavigatorButton, __experimentalView as View, __experimentalHStack as HStack, __experimentalVStack as VStack, } from '@wordpress/components' import { sanitizeURIComponent, } from '@ska/utils' import { getSelectorDisplayName, type SelectorsValue, } from '..' export interface SelectorsDetailsModalProps { value: SelectorsValue onRequestClose: () => void } interface SelectorTreeNode { selector: string children: SelectorsTree } type SelectorsTree = SelectorTreeNode[] const buildSelectorsTree = (selectors: SelectorsValue = {}): SelectorsTree => { return Object.keys(selectors).reduce((acc, cur) => { const { skaBlocksSelectors = {}, } = selectors[cur] const node: SelectorTreeNode = { selector: cur, children: buildSelectorsTree(skaBlocksSelectors), } return [ ...acc, node, ] }, [] as SelectorsTree) } interface TreeNodeProps { selector: SelectorTreeNode['selector'] children?: SelectorsTree level?: number path: string } const TreeNode: React.FC = ({ selector, children = [], level = 0, path = '', }) => { const nextPath = `${path}/${sanitizeURIComponent(selector)}` return ( {level > 0 && } {/* Spacing */} {level > 1 && ' '.repeat(level - 1)} {/* Additional spacing for deeper levels */} {level > 0 && '└─'} {/* Connector */} {children.map(node => { return ( ) })} ) } const SelectorsDetailsModal: React.FC = ({ value, onRequestClose, }) => { const navigator = useNavigator() const currentPath = navigator?.location?.path || '/' const nextPath = currentPath === '/' ? '/selector' : currentPath const tree = buildSelectorsTree(value) return ( {tree.map((node, index) => ( ))} ) } export default SelectorsDetailsModal