@kiwicom/orbit-components
Version:
Orbit-components is a React component library which provides developers with the easiest possible way of building Kiwi.com’s products.
66 lines (59 loc) • 1.89 kB
JavaScript
import React, { useState } from "react";
import styled from "styled-components";
import Stack from "../Stack";
import Text from "../Text";
import useMediaQuery from "../hooks/useMediaQuery";
const StyledPricingTable = styled.div.withConfig({
displayName: "PricingTable__StyledPricingTable",
componentId: "sc-1aibxyh-0"
})([""]);
const PricingTable = ({
children,
defaultActiveElement = 0
}) => {
const {
isTablet
} = useMediaQuery();
const [activeElement, setActiveElement] = useState(defaultActiveElement);
const handleOnClick = i => {
return () => {
if (!isTablet) {
setActiveElement(i);
}
};
};
const resolveBasis = item => {
if (item.length) {
return `${Math.floor(100 / item.length)}%`;
}
return `100%`;
};
return React.createElement(StyledPricingTable, null, React.createElement(Stack, {
flex: true,
grow: true,
spaceAfter: "medium",
spacing: "condensed",
align: "stretch",
tablet: {
spacing: "natural",
spaceAfter: "none"
}
}, isTablet ? children : React.Children.map(children, (child, i) => React.cloneElement(child, {
active: activeElement === i,
compact: true,
basis: resolveBasis(child),
onClick: handleOnClick(i)
}))), !isTablet && children && React.createElement(Stack, {
spacing: "condensed"
}, React.Children.map(children, (child, i) => {
if (i === activeElement) {
return React.createElement(React.Fragment, null, child.props.mobileDescription && React.createElement(Text, {
weight: "bold",
size: "normal"
}, child.props.mobileDescription), child.props.children && React.cloneElement(child.props.children), child.props.action && React.cloneElement(child.props.action));
}
return null;
})));
};
export default PricingTable;
export { default as PricingTableItem } from "./PricingTableItem";