32
loading...
This website collects cookies to deliver better user experience
Do not repeat yourself.
create-react-app reusable-components
import React from "react";
export default ({ buttons }) => {
const generatedButtons = buttons.map((button, index) => {
const [icon, text, textColor, backgroundColor, buttonRadius, callback] = button;
const Icon = icon;
const styles = {
receivedStyles: {
color: textColor,
background: backgroundColor,
borderRadius: buttonRadius,
},
defaultStyles: {
display: "flex",
alignItems: "center",
justifyContent: "center",
border: "none",
padding: "0.6em 1.2em",
margin: "1em",
fontSize: "0.9em",
},
};
const { receivedStyles, defaultStyles } = styles;
return (
<button
key={index}
style={
icon
? { ...receivedStyles, ...defaultStyles }
: { ...receivedStyles, ...defaultStyles, padding: "1em 1.5em" }
}
onClick={callback || null}
>
{icon && <Icon style={{ margin: "0.3em", fontSize: "1.5em" }} />}
{text && text}
</button>
);
});
return (
<div>
{generatedButtons}
</div>
);
};
import Button from "./Button";
import { IoMdDoneAll as DoneIcon } from "react-icons/io";
import {FaCloudDownloadAlt as CloudDownloadIcon, FaShareAlt as ShareIcon,} from "react-icons/fa";
import { MdCancel as CancelIcon } from "react-icons/md";
const styles = {
height: "100vh",
width: "100%",
display: "flex",
alignItems: "center",
justifyContent: "center",
background: "#242424",
};
function App() {
return (
<div style={styles}>
<Button buttons={[
[DoneIcon, "Done", "#fff", "#570C99", "6px", () => console.log("clicked: Done button")],
[cloudDownloadIcon, "Download", "#fff","#009DAE", "100px",() => console.log("clicked: Download button") ],
[CancelIcon, "Cancel", "#fff","#FF0000", "100px",() => console.log("clicked: Cancel button") ],
[ShareIcon, "Share", "#fff", "#516BEB", null,() => console.log("clicked: Share button") ] ]}
</div>
);
}
export default App;