From 9c2ed89f6ed4b8f40942a4b0248df04f0a8a1eba Mon Sep 17 00:00:00 2001 From: Tudor Stanciu Date: Sat, 19 Dec 2020 01:28:53 +0200 Subject: [PATCH] added new stepper - stepper with icons --- src/components/layout/Main.js | 4 +- .../ApplicationStepper.js} | 43 ++++++----- .../layout/stepper/ColorlibConnector.js | 28 +++++++ .../layout/stepper/ColorlibStepIcon.js | 73 +++++++++++++++++++ 4 files changed, 126 insertions(+), 22 deletions(-) rename src/components/layout/{Stepper.js => stepper/ApplicationStepper.js} (59%) create mode 100644 src/components/layout/stepper/ColorlibConnector.js create mode 100644 src/components/layout/stepper/ColorlibStepIcon.js diff --git a/src/components/layout/Main.js b/src/components/layout/Main.js index 1e04f4b..ceaaa08 100644 --- a/src/components/layout/Main.js +++ b/src/components/layout/Main.js @@ -1,11 +1,11 @@ import React from "react"; -import Stepper from "./Stepper"; +import ApplicationStepper from "./stepper/ApplicationStepper"; import Switcher from "./Switcher"; const Main = () => { return ( <> - +
diff --git a/src/components/layout/Stepper.js b/src/components/layout/stepper/ApplicationStepper.js similarity index 59% rename from src/components/layout/Stepper.js rename to src/components/layout/stepper/ApplicationStepper.js index dd9ac1f..41d4598 100644 --- a/src/components/layout/Stepper.js +++ b/src/components/layout/stepper/ApplicationStepper.js @@ -1,8 +1,7 @@ import React, { useState, useEffect } from "react"; -import steps from "../../constants/steps"; +import steps from "../../../constants/steps"; import { Card, - Grid, Stepper, Step, StepButton, @@ -10,10 +9,12 @@ import { makeStyles } from "@material-ui/core"; import { useLocation, useHistory } from "react-router-dom"; +import ColorlibConnector from "./ColorlibConnector"; +import ColorlibStepIcon from "./ColorlibStepIcon"; const styles = () => ({ stepperCard: { - padding: "2px", + padding: "0px", margin: "15px" } }); @@ -43,23 +44,25 @@ const ApplicationStepper = () => { return ( - - - - {steps.map((step) => ( - - handleStepClick(step)} - > - {step.title} - - - ))} - - - + } + > + {steps.map((step) => ( + + handleStepClick(step)} + > + + {step.title} + + + + ))} + ); }; diff --git a/src/components/layout/stepper/ColorlibConnector.js b/src/components/layout/stepper/ColorlibConnector.js new file mode 100644 index 0000000..3db7971 --- /dev/null +++ b/src/components/layout/stepper/ColorlibConnector.js @@ -0,0 +1,28 @@ +import { withStyles } from "@material-ui/core/styles"; +import StepConnector from "@material-ui/core/StepConnector"; + +const ColorlibConnector = withStyles({ + alternativeLabel: { + top: 22 + }, + active: { + "& $line": { + backgroundImage: + "linear-gradient( 95deg,rgb(242,113,33) 0%,rgb(233,64,87) 50%,rgb(138,35,135) 100%)" + } + }, + completed: { + "& $line": { + backgroundImage: + "linear-gradient( 95deg,rgb(242,113,33) 0%,rgb(233,64,87) 50%,rgb(138,35,135) 100%)" + } + }, + line: { + height: 3, + border: 0, + backgroundColor: "#eaeaf0", + borderRadius: 1 + } +})(StepConnector); + +export default ColorlibConnector; diff --git a/src/components/layout/stepper/ColorlibStepIcon.js b/src/components/layout/stepper/ColorlibStepIcon.js new file mode 100644 index 0000000..d64ce40 --- /dev/null +++ b/src/components/layout/stepper/ColorlibStepIcon.js @@ -0,0 +1,73 @@ +import React from "react"; +import PropTypes from "prop-types"; +import clsx from "clsx"; +import { makeStyles } from "@material-ui/core/styles"; +import SettingsIcon from "@material-ui/icons/Settings"; +import GroupAddIcon from "@material-ui/icons/GroupAdd"; +import VideoLabelIcon from "@material-ui/icons/VideoLabel"; + +const useColorlibStepIconStyles = makeStyles({ + root: { + backgroundColor: "#ccc", + zIndex: 1, + color: "#fff", + width: 50, + height: 50, + display: "flex", + borderRadius: "50%", + justifyContent: "center", + alignItems: "center" + }, + active: { + backgroundImage: + "linear-gradient( 136deg, rgb(242,113,33) 0%, rgb(233,64,87) 50%, rgb(138,35,135) 100%)", + boxShadow: "0 4px 10px 0 rgba(0,0,0,.25)" + }, + completed: { + backgroundImage: + "linear-gradient( 136deg, rgb(242,113,33) 0%, rgb(233,64,87) 50%, rgb(138,35,135) 100%)" + } +}); + +function ColorlibStepIcon(props) { + const classes = useColorlibStepIconStyles(); + const { active, completed } = props; + + const icons = { + 1: , + 2: , + 3: + }; + + const getIcon = (icon) => { + return icons[String(icon)]; + }; + + return ( +
+ {getIcon(props.icon)} +
+ ); +} + +ColorlibStepIcon.propTypes = { + /** + * Whether this step is active. + */ + active: PropTypes.bool, + /** + * Mark the step as completed. Is passed to child components. + */ + completed: PropTypes.bool, + /** + * The label displayed in the step icon. + */ + icon: PropTypes.node +}; + +export default ColorlibStepIcon;