import React, { useState } from 'react'; import './Collapse.css'; /** * Kole UI Collapse(React) * 对齐 组件2.txt 规范:标题栏高40px、左侧箭头旋转90°、内容分割线、手风琴模式 * * props: * - items : [{ key, title, disabled? }] * - accordion: Boolean(手风琴模式,同时仅展开一个) * - value / defaultValue : 展开 key 数组(手风琴时为单个 key 字符串) * - onChange(keys) * - renderPanel(key) / children(key) : 返回对应面板内容 */ export default function Collapse({ items = [], accordion = false, value, defaultValue = accordion ? '' : [], onChange, renderPanel }) { const panelFn = renderPanel || (typeof children === 'function' ? children : null); const [inner, setInner] = useState(defaultValue); const open = value !== undefined ? value : inner; const openList = accordion ? (open ? [open] : []) : (Array.isArray(open) ? open : []); const isOpen = (k) => openList.includes(k); const toggle = (item) => { if (item.disabled) return; let next; if (accordion) { next = isOpen(item.key) ? [] : [item.key]; } else { next = isOpen(item.key) ? openList.filter(k => k !== item.key) : [...openList, item.key]; } const result = accordion ? (next[0] || '') : next; if (value === undefined) setInner(result); onChange && onChange(result); }; return (