function StatelessAccordion()

in src/accordion/stateless-accordion.tsx [13:68]


function StatelessAccordion({
  accordion = true,
  children,
  disabled,
  expanded,
  onChange,
  overrides = {},
  renderAll,
}: StatelessAccordionProps) {
  const { Root: RootOverrides, ...PanelOverrides } = overrides;
  const [Root, rootProps] = getOverrides(RootOverrides, StyledRoot);
  return (
    <Root data-baseweb="accordion" {...rootProps}>
      {React.Children.map(children, (child, index) => {
        let normalizedChild =
          isElement(child) || isPortal(child) ? (
            child
          ) : (
            // if primitive value - wrap it in a fragment
            <>{child}</>
          );
        const key = normalizedChild.key || String(index);
        return React.cloneElement(normalizedChild, {
          disabled: normalizedChild.props.disabled || disabled,
          expanded: expanded.includes(key),
          key,
          onChange:
            // Don't bother constructing the wrapper function if no one is listening
            onChange && typeof onChange === 'function'
              ? () => {
                  // @ts-ignore
                  let next;
                  if (accordion) {
                    if (expanded.includes(key)) {
                      next = [];
                    } else {
                      next = [key];
                    }
                  } else {
                    if (expanded.includes(key)) {
                      next = expanded.filter((k) => k !== key);
                    } else {
                      next = [...expanded, key];
                    }
                  }
                  // @ts-ignore
                  onChange({ key, expanded: next });
                }
              : onChange,
          overrides: normalizedChild.props.overrides || PanelOverrides,
          renderAll,
        });
      })}
    </Root>
  );
}