diff --git a/packages/playground/components/src/PathMappingControl/PathMappingControl.tsx b/packages/playground/components/src/PathMappingControl/PathMappingControl.tsx index b051c23ed9..5fb1d9f01c 100644 --- a/packages/playground/components/src/PathMappingControl/PathMappingControl.tsx +++ b/packages/playground/components/src/PathMappingControl/PathMappingControl.tsx @@ -9,6 +9,7 @@ import { // @ts-expect-error __experimentalInputControl as InputControl, Button, + SelectControl, } from '@wordpress/components'; import { Icon, chevronRight, chevronDown } from '@wordpress/icons'; import '@wordpress/components/build-style/style.css'; @@ -30,6 +31,7 @@ type MappingNodeStates = Record; type MappingNodeState = { isOpen?: boolean; + pathType?: string; playgroundPath?: string; }; @@ -115,7 +117,11 @@ const NodeRow: React.FC<{ parentMapping = '', }) => { const path = generatePath(node, parentPath); - const nodeState = nodeStates[path] || { isOpen: false, playgroundPath: '' }; + const nodeState = nodeStates[path] || { + isOpen: false, + playgroundPath: '', + pathType: '', + }; const nodeMapping = computeMapping({ node, nodeState, @@ -130,6 +136,33 @@ const NodeRow: React.FC<{ updateNodeState(path, { playgroundPath: value }); }; + const handlePathSelectChange = (pathType: string) => { + switch (pathType) { + case 'plugin': + updateNodeState(path, { + pathType, + playgroundPath: + '/wordpress/wp-content/plugins/' + node.name, + }); + break; + case 'theme': + updateNodeState(path, { + pathType, + playgroundPath: '/wordpress/wp-content/themes/' + node.name, + }); + break; + case 'wp-content': + updateNodeState(path, { + pathType, + playgroundPath: '/wordpress/wp-content', + }); + break; + default: + updateNodeState(path, { pathType, playgroundPath: '' }); + break; + } + }; + const handleKeyDown = (event: any) => { if (event.key === 'ArrowLeft') { if (nodeState.isOpen) { @@ -190,15 +223,42 @@ const NodeRow: React.FC<{ {() => ( <> - + {!parentMapping && ( + + )} + {(parentMapping || nodeState.pathType !== '') && ( + + )} )} diff --git a/packages/playground/components/src/PathMappingControl/demo.tsx b/packages/playground/components/src/PathMappingControl/demo.tsx index e646a95797..0b4c47ae24 100644 --- a/packages/playground/components/src/PathMappingControl/demo.tsx +++ b/packages/playground/components/src/PathMappingControl/demo.tsx @@ -35,6 +35,11 @@ export default function PathMappingControlDemo() { const [mapping, setMapping] = React.useState({}); return (
+