import React, { useState, useEffect } from "react"; import { Box, Flex } from "theme-ui"; import RadioIconButton from "./RadioIconButton"; // Section of map tools with the option to collapse into a vertical list function ToolSection({ collapse, tools, onToolClick }) { const [showMore, setShowMore] = useState(false); const [collapsedTool, setCollapsedTool] = useState(); useEffect(() => { const selectedTool = tools.find((tool) => tool.isSelected); if (selectedTool) { setCollapsedTool(selectedTool); } else { // No selected tool, deselect if we have a tool or get the first tool if not setCollapsedTool((prevTool) => prevTool ? { ...prevTool, isSelected: false } : tools[0] ); } }, [tools]); function handleToolClick(tool) { if (collapse && tool.isSelected) { setShowMore(!showMore); } else if (collapse && !tool.isSelected) { setShowMore(false); } onToolClick(tool); } function renderTool(tool) { return ( handleToolClick(tool)} key={tool.id} isSelected={tool.isSelected} > {tool.icon} ); } if (collapse) { if (!collapsedTool) { return null; } return ( {renderTool(collapsedTool)} {/* Render chevron when more tools is available */} {showMore && ( {tools.filter((tool) => !tool.isSelected).map(renderTool)} )} ); } else { return tools.map((tool) => ( handleToolClick(tool)} key={tool.id} isSelected={tool.isSelected} > {tool.icon} )); } } ToolSection.defaultProps = { collapse: false, }; export default ToolSection;