Implement vertical stepper in create new project with template flow (#14)
* Implement vertical stepper in create project page * Handle if active step is not found --------- Co-authored-by: neeraj <neeraj.rtly@gmail.com>
This commit is contained in:
parent
237bd01159
commit
cfb299c79e
@ -22,6 +22,7 @@
|
|||||||
"react-tabs": "^6.0.2",
|
"react-tabs": "^6.0.2",
|
||||||
"react-timer-hook": "^3.0.7",
|
"react-timer-hook": "^3.0.7",
|
||||||
"typescript": "^4.9.5",
|
"typescript": "^4.9.5",
|
||||||
|
"vertical-stepper-nav": "^1.0.2",
|
||||||
"web-vitals": "^2.1.4"
|
"web-vitals": "^2.1.4"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
49
packages/frontend/src/components/Stepper.tsx
Normal file
49
packages/frontend/src/components/Stepper.tsx
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { StepperNav } from 'vertical-stepper-nav';
|
||||||
|
|
||||||
|
const COLOR_COMPLETED = '#059669';
|
||||||
|
const COLOR_ACTIVE = '#CFE6FC';
|
||||||
|
const COLOR_NOT_STARTED = '#F1F5F9';
|
||||||
|
|
||||||
|
interface StepperValue {
|
||||||
|
step: number;
|
||||||
|
route: string;
|
||||||
|
label: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface StepperProps {
|
||||||
|
activeStep: number;
|
||||||
|
stepperValues: StepperValue[];
|
||||||
|
}
|
||||||
|
|
||||||
|
const Stepper = ({ activeStep, stepperValues }: StepperProps) => {
|
||||||
|
return (
|
||||||
|
<StepperNav
|
||||||
|
steps={stepperValues.map((stepperValue: StepperValue) => {
|
||||||
|
return {
|
||||||
|
stepContent: () => (
|
||||||
|
<div
|
||||||
|
className={`text-sm ${
|
||||||
|
activeStep === stepperValue.step
|
||||||
|
? 'text-black font-semibold'
|
||||||
|
: 'text-gray-600'
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{stepperValue.label}
|
||||||
|
</div>
|
||||||
|
),
|
||||||
|
stepStatusCircleSize: 30,
|
||||||
|
stepStateColor: `${
|
||||||
|
activeStep > stepperValue.step
|
||||||
|
? COLOR_COMPLETED
|
||||||
|
: activeStep === stepperValue.step
|
||||||
|
? COLOR_ACTIVE
|
||||||
|
: COLOR_NOT_STARTED
|
||||||
|
}`,
|
||||||
|
};
|
||||||
|
})}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Stepper;
|
@ -38,7 +38,7 @@ const CancelDeploymentDialog = ({
|
|||||||
<Button variant="outlined" onClick={handleOpen} className="mr-1">
|
<Button variant="outlined" onClick={handleOpen} className="mr-1">
|
||||||
<span>Cancel</span>
|
<span>Cancel</span>
|
||||||
</Button>
|
</Button>
|
||||||
<Link to="/projects/create/template/">
|
<Link to="/projects/create/template">
|
||||||
<Button variant="gradient" color="red" onClick={handleOpen}>
|
<Button variant="gradient" color="red" onClick={handleOpen}>
|
||||||
<span>Yes, Cancel deployment</span>
|
<span>Yes, Cancel deployment</span>
|
||||||
</Button>
|
</Button>
|
||||||
|
@ -1,7 +1,23 @@
|
|||||||
import React from 'react';
|
import React, { useMemo } from 'react';
|
||||||
import { Outlet } from 'react-router-dom';
|
import { Outlet, useLocation } from 'react-router-dom';
|
||||||
|
|
||||||
|
import Stepper from '../../../components/Stepper';
|
||||||
|
|
||||||
|
const STEPPER_VALUES = [
|
||||||
|
{ step: 1, route: '/projects/create/template', label: 'Create repository' },
|
||||||
|
{ step: 2, route: '/projects/create/template/deploy', label: 'Deploy' },
|
||||||
|
];
|
||||||
|
|
||||||
const CreateWithTemplate = () => {
|
const CreateWithTemplate = () => {
|
||||||
|
const location = useLocation();
|
||||||
|
|
||||||
|
const activeStep = useMemo(
|
||||||
|
() =>
|
||||||
|
STEPPER_VALUES.find((data) => data.route === location.pathname)?.step ??
|
||||||
|
0,
|
||||||
|
[location.pathname],
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col items-center">
|
<div className="flex flex-col items-center">
|
||||||
<div className="flex justify-between w-5/6 my-4 bg-gray-200 rounded-xl p-6">
|
<div className="flex justify-between w-5/6 my-4 bg-gray-200 rounded-xl p-6">
|
||||||
@ -11,8 +27,7 @@ const CreateWithTemplate = () => {
|
|||||||
</div>
|
</div>
|
||||||
<div className="grid grid-cols-3 w-5/6 p-6">
|
<div className="grid grid-cols-3 w-5/6 p-6">
|
||||||
<div>
|
<div>
|
||||||
<div>1 Create repository</div>
|
<Stepper activeStep={activeStep} stepperValues={STEPPER_VALUES} />
|
||||||
<div>2 Deploy</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div className="col-span-2">
|
<div className="col-span-2">
|
||||||
<Outlet />
|
<Outlet />
|
||||||
|
@ -30,7 +30,7 @@ const Deploy = () => {
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<Button onClick={handleOpen} variant="outlined" size="sm">
|
<Button onClick={handleOpen} variant="outlined" size="sm">
|
||||||
^Cancel
|
^ Cancel
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
<CancelDeploymentDialog handleOpen={handleOpen} open={open} />
|
<CancelDeploymentDialog handleOpen={handleOpen} open={open} />
|
||||||
|
@ -5488,7 +5488,7 @@ eslint-plugin-jest@^25.3.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@typescript-eslint/experimental-utils" "^5.0.0"
|
"@typescript-eslint/experimental-utils" "^5.0.0"
|
||||||
|
|
||||||
eslint-plugin-jsx-a11y@^6.5.1:
|
eslint-plugin-jsx-a11y@^6.4.1, eslint-plugin-jsx-a11y@^6.5.1:
|
||||||
version "6.8.0"
|
version "6.8.0"
|
||||||
resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz"
|
resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz"
|
||||||
integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==
|
integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==
|
||||||
@ -12312,6 +12312,13 @@ vary@~1.1.2:
|
|||||||
resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
|
resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
|
||||||
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
|
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
|
||||||
|
|
||||||
|
vertical-stepper-nav@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/vertical-stepper-nav/-/vertical-stepper-nav-1.0.2.tgz#788e057a8b59bc9073e87f422d231f78f87f307b"
|
||||||
|
integrity sha512-lCOcD2hGS7W9jOy/LIFMZU1/EgBFpSOyf78IqEsGGPcES6FrMMK3oh9HszxeUCE5X8c9q/RKl3bvmHOcuK4lSQ==
|
||||||
|
dependencies:
|
||||||
|
eslint-plugin-jsx-a11y "^6.4.1"
|
||||||
|
|
||||||
w3c-hr-time@^1.0.2:
|
w3c-hr-time@^1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz"
|
resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz"
|
||||||
|
Loading…
Reference in New Issue
Block a user