From 5592a5c6dd29a79d8f58c3055e2f34572eedd87a Mon Sep 17 00:00:00 2001
From: Arpita Behura <56763669+arpita009@users.noreply.github.com>
Date: Thu, 25 Sep 2025 02:25:41 +0200
Subject: [PATCH 01/10] Home Page- setup, styling, responsiveness
---
components/stepper/stepper.tsx | 47 +++++++++++++++++++++++++---------
components/stepper/steps.ts | 9 +++++--
pages/index.tsx | 31 +++++++++++-----------
3 files changed, 58 insertions(+), 29 deletions(-)
diff --git a/components/stepper/stepper.tsx b/components/stepper/stepper.tsx
index fe3602e..2bcad39 100644
--- a/components/stepper/stepper.tsx
+++ b/components/stepper/stepper.tsx
@@ -1,14 +1,37 @@
-interface StepperProps {}
+import { steps } from "./steps";
+interface StepperProps {
+ currentStep: number;
+}
+
+export default function Stepper({ currentStep }: StepperProps) {
+ return (
+
= index ? "bg-blue-500 text-white" : "bg-gray-300 text-gray-700"
+ currentStep >= index
+ ? "bg-blue-500 text-white"
+ : "bg-gray-300 text-gray-700"
} z-10`}
>
{index + 1}
@@ -22,6 +24,7 @@ export default function Stepper({ currentStep }: StepperProps) {
{index < steps.length - 1 && (
)}
diff --git a/components/stepper/steps.ts b/components/stepper/steps.ts
index 002a835..def47ff 100644
--- a/components/stepper/steps.ts
+++ b/components/stepper/steps.ts
@@ -3,7 +3,7 @@ interface Step {
}
export const steps: Step[] = [
- { title: "Fahrzeug" },
+ { title: "Service" },
{ title: "Termin" },
{ title: "Fahrzeug" },
{ title: "Kontakt" },
From 12a0f5c97a8120cf784de004d2a0fde9263eeb33 Mon Sep 17 00:00:00 2001
From: Arpita Behura <56763669+arpita009@users.noreply.github.com>
Date: Sat, 27 Sep 2025 13:25:18 +0200
Subject: [PATCH 03/10] Changes to steps to add a field 'isCompleted'
---
__tests__/components/stepper/stepper.test.tsx | 46 ++++++++++---------
components/stepper/stepper.tsx | 14 +++---
components/stepper/steps.ts | 11 +++--
hooks/useStepper.ts | 23 +++++++---
pages/index.tsx | 5 +-
5 files changed, 56 insertions(+), 43 deletions(-)
diff --git a/__tests__/components/stepper/stepper.test.tsx b/__tests__/components/stepper/stepper.test.tsx
index 781f040..dfce2ed 100644
--- a/__tests__/components/stepper/stepper.test.tsx
+++ b/__tests__/components/stepper/stepper.test.tsx
@@ -4,9 +4,10 @@ import { render, screen } from "@testing-library/react";
import "@testing-library/jest-dom";
import Stepper from "../../../components/stepper/stepper";
import { steps } from "../../../components/stepper/steps";
+
describe("Stepper", () => {
it("renders all steps", () => {
- render(
);
+ render(
);
steps.forEach((step, index) => {
expect(screen.getByText(step.title)).toBeInTheDocument();
@@ -15,42 +16,43 @@ describe("Stepper", () => {
});
it("highlights current and previous steps", () => {
- render(
);
+ const current = 2;
+ const stepsWithCompleted = steps.map((s, i) => ({ ...s, isCompleted: i <= current }));
- const step1 = screen.getByText("1");
- const step2 = screen.getByText("2");
- const step3 = screen.getByText("3");
+ render(
);
- expect(step1).toHaveClass("bg-blue-500");
- expect(step2).toHaveClass("bg-blue-500");
- expect(step3).toHaveClass("bg-blue-500");
+ for (let i = 0; i <= current; i++) {
+ const stepCircle = screen.getByText(String(i + 1));
+ expect(stepCircle).toHaveClass("bg-blue-500");
+ }
});
- it("renders correct number of connection lines", () => {
- render(
);
-
- const connectionLines = screen.getAllByTestId('connection-line');
+ it("renders correct number of connection lines", () => {
+ render(
);
+
+ const connectionLines = screen.getAllByTestId("connection-line");
expect(connectionLines).toHaveLength(steps.length - 1);
});
it("applies responsive classes", () => {
- render(
);
+ render(
);
const stepCircle = screen.getByText("1");
- expect(stepCircle).toHaveClass(
- "w-[30px]",
- "h-[30px]",
- "md:w-10",
- "md:h-10"
- );
+ expect(stepCircle).toHaveClass("w-[30px]");
+ expect(stepCircle).toHaveClass("h-[30px]");
+ expect(stepCircle).toHaveClass("md:w-10");
+ expect(stepCircle).toHaveClass("md:h-10");
const stepTitle = screen.getByText(steps[0].title);
- expect(stepTitle).toHaveClass("text-[12px]", "lg:text-[16px]");
+ expect(stepTitle).toHaveClass("text-[12px]");
+ expect(stepTitle).toHaveClass("lg:text-[16px]");
});
-
it("renders correctly with last step as current", () => {
- render(
);
+ const lastIndex = steps.length - 1;
+ const stepsAllCompleted = steps.map((s) => ({ ...s, isCompleted: true }));
+
+ render(
);
steps.forEach((_, index) => {
const stepCircle = screen.getByText(String(index + 1));
diff --git a/components/stepper/stepper.tsx b/components/stepper/stepper.tsx
index e332b11..8e5c195 100644
--- a/components/stepper/stepper.tsx
+++ b/components/stepper/stepper.tsx
@@ -1,9 +1,10 @@
-import { steps } from "./steps";
+import { Step, steps } from "./steps";
interface StepperProps {
+ steps: Step[];
currentStep: number;
}
-export default function Stepper({ currentStep }: StepperProps) {
+export default function Stepper({ steps, currentStep }: StepperProps) {
return (
@@ -13,19 +14,20 @@ export default function Stepper({ currentStep }: StepperProps) {
className="flex flex-col items-center relative w-1/4"
>
= index
+ className={`w-[30px] h-[30px] md:w-10 md:h-10 flex items-center justify-center rounded-full font-bold text-[12px] lg:text-[14px] font-semibold ${
+ step.isCompleted || index === currentStep
? "bg-blue-500 text-white"
: "bg-gray-300 text-gray-700"
} z-10`}
>
{index + 1}
-
{index < steps.length - 1 && (
)}
diff --git a/components/stepper/steps.ts b/components/stepper/steps.ts
index def47ff..1c542dc 100644
--- a/components/stepper/steps.ts
+++ b/components/stepper/steps.ts
@@ -1,10 +1,11 @@
-interface Step {
+export interface Step {
title: string;
+ isCompleted: boolean;
}
export const steps: Step[] = [
- { title: "Service" },
- { title: "Termin" },
- { title: "Fahrzeug" },
- { title: "Kontakt" },
+ { title: "Service", isCompleted: false },
+ { title: "Termin", isCompleted: false },
+ { title: "Fahrzeug", isCompleted: false },
+ { title: "Kontakt", isCompleted: false },
];
diff --git a/hooks/useStepper.ts b/hooks/useStepper.ts
index 588deeb..ccc85db 100644
--- a/hooks/useStepper.ts
+++ b/hooks/useStepper.ts
@@ -1,11 +1,20 @@
import { useState } from "react";
+import { steps } from "../components/stepper/steps";
export default function useStepper() {
- const [currentStep, setCurrentStep] = useState
(0);
- function handleNextStep() {
- setCurrentStep((prev) => {
- return prev + 1;
- });
- }
- return { currentStep, handleNextStep };
+ const [stepsState, setStepsState] = useState(() =>
+ steps.map((step) => ({ ...step }))
+ );
+ const [currentStep, setCurrentStep] = useState(0);
+
+ const handleNextStep = () => {
+ setStepsState((prevSteps) =>
+ prevSteps.map((step, index) => index === currentStep ? { ...step, isCompleted: true } : step)
+ );
+
+ setCurrentStep(prev => {
+ return Math.min(prev + 1, stepsState.length - 1);
+ });
+ };
+ return { steps: stepsState, currentStep, handleNextStep };
}
diff --git a/pages/index.tsx b/pages/index.tsx
index 1bf75ed..9f58f61 100644
--- a/pages/index.tsx
+++ b/pages/index.tsx
@@ -7,15 +7,14 @@ import Stepper from "../components/stepper/stepper";
import useStepper from "../hooks/useStepper";
export default function Home() {
- const { currentStep, handleNextStep } = useStepper();
- console.log("Current Step:", currentStep);
+ const { steps, currentStep, handleNextStep } = useStepper();
return (
<>
{/*TODO: Make sure the Stepper handles clicks on the button*/}
-
+
Next
From 53f611e35b9b9740dcd36f82a0917d533c59a6c2 Mon Sep 17 00:00:00 2001
From: Arpita Behura <56763669+arpita009@users.noreply.github.com>
Date: Mon, 29 Sep 2025 23:05:06 +0200
Subject: [PATCH 04/10] Creating routes
---
components/stepper/steps.ts | 9 ++++----
context/stepperContext.tsx | 44 +++++++++++++++++++++++++++++++++++
hooks/useStepper.ts | 46 ++++++++++++++++++++++++++++---------
pages/_app.tsx | 5 +++-
pages/fahrzeug.tsx | 31 +++++++++++++++++++++++++
pages/kontakt.tsx | 31 +++++++++++++++++++++++++
pages/termin.tsx | 31 +++++++++++++++++++++++++
7 files changed, 181 insertions(+), 16 deletions(-)
create mode 100644 context/stepperContext.tsx
create mode 100644 pages/fahrzeug.tsx
create mode 100644 pages/kontakt.tsx
create mode 100644 pages/termin.tsx
diff --git a/components/stepper/steps.ts b/components/stepper/steps.ts
index 1c542dc..a330349 100644
--- a/components/stepper/steps.ts
+++ b/components/stepper/steps.ts
@@ -1,11 +1,12 @@
export interface Step {
title: string;
isCompleted: boolean;
+ navigateTo: string | null;
}
export const steps: Step[] = [
- { title: "Service", isCompleted: false },
- { title: "Termin", isCompleted: false },
- { title: "Fahrzeug", isCompleted: false },
- { title: "Kontakt", isCompleted: false },
+ { title: "Service", isCompleted: false, navigateTo: "/termin" },
+ { title: "Termin", isCompleted: false, navigateTo: "/fahrzeug" },
+ { title: "Fahrzeug", isCompleted: false, navigateTo: "/kontakt" },
+ { title: "Kontakt", isCompleted: false, navigateTo: null },
];
diff --git a/context/stepperContext.tsx b/context/stepperContext.tsx
new file mode 100644
index 0000000..b7fec49
--- /dev/null
+++ b/context/stepperContext.tsx
@@ -0,0 +1,44 @@
+import React, {
+ createContext,
+ useContext,
+ ReactNode,
+ useState,
+ useCallback,
+} from "react";
+import useStepper from "../hooks/useStepper";
+import { Step } from "../components/stepper/steps";
+
+interface StepperContextType {
+ steps: Step[];
+ currentStep: number;
+ handleNextStep: () => void;
+ setCurrentStep: (step: number) => void;
+}
+
+const StepperContext = createContext(undefined);
+
+export function StepperProvider({ children }: { children: ReactNode }) {
+ const [contextCurrentStep, setContextCurrentStep] = useState(0);
+
+ const onStepChange = useCallback((step: number) => {
+ setContextCurrentStep(step);
+ }, []);
+
+ const stepperHook = useStepper(onStepChange);
+
+ return (
+
+ {children}
+
+ );
+}
+
+export function useStepperContext() {
+ const context = useContext(StepperContext);
+ if (context === undefined) {
+ throw new Error("useStepperContext must be used within a StepperProvider");
+ }
+ return context;
+}
diff --git a/hooks/useStepper.ts b/hooks/useStepper.ts
index ccc85db..aaa8ede 100644
--- a/hooks/useStepper.ts
+++ b/hooks/useStepper.ts
@@ -1,20 +1,44 @@
-import { useState } from "react";
-import { steps } from "../components/stepper/steps";
+import { useState, useCallback } from "react";
+import { steps as initialSteps, Step } from "../components/stepper/steps";
+import { useRouter } from "next/router";
-export default function useStepper() {
- const [stepsState, setStepsState] = useState(() =>
- steps.map((step) => ({ ...step }))
+export default function useStepper(onStepChange?: (step: number) => void) {
+ const router = useRouter();
+ const [stepsState, setStepsState] = useState(() =>
+ initialSteps.map((s) => ({ ...s }))
);
const [currentStep, setCurrentStep] = useState(0);
- const handleNextStep = () => {
+ const updateStepCompletion = useCallback((stepIndex: number) => {
setStepsState((prevSteps) =>
- prevSteps.map((step, index) => index === currentStep ? { ...step, isCompleted: true } : step)
+ prevSteps.map((step, index) =>
+ index < stepIndex ? { ...step, isCompleted: true } : step
+ )
);
+ }, []);
- setCurrentStep(prev => {
- return Math.min(prev + 1, stepsState.length - 1);
- });
+ const setCurrentStepAndNotify = useCallback((newStep: number) => {
+ setCurrentStep(newStep);
+ updateStepCompletion(newStep);
+ if (onStepChange) {
+ onStepChange(newStep);
+ }
+ }, [onStepChange, updateStepCompletion]);
+
+ const handleNextStep = useCallback(() => {
+ const nextStep = Math.min(currentStep + 1, stepsState.length - 1);
+ updateStepCompletion(nextStep);
+ setCurrentStepAndNotify(nextStep);
+ const navigateTo = stepsState[currentStep]?.navigateTo ?? "";
+ if (navigateTo) {
+ router.push(navigateTo);
+ }
+ }, [currentStep, stepsState, router, setCurrentStepAndNotify, updateStepCompletion]);
+
+ return {
+ steps: stepsState,
+ currentStep,
+ handleNextStep,
+ setCurrentStep: setCurrentStepAndNotify
};
- return { steps: stepsState, currentStep, handleNextStep };
}
diff --git a/pages/_app.tsx b/pages/_app.tsx
index 5b48a79..d802510 100644
--- a/pages/_app.tsx
+++ b/pages/_app.tsx
@@ -1,8 +1,11 @@
import "../styles/globals.css";
import type { AppProps } from "next/app";
+import { StepperProvider } from "../context/stepperContext";
function MyApp({ Component, pageProps }: AppProps) {
- return ;
+ return
+
+ ;
}
export default MyApp;
diff --git a/pages/fahrzeug.tsx b/pages/fahrzeug.tsx
new file mode 100644
index 0000000..b6bb324
--- /dev/null
+++ b/pages/fahrzeug.tsx
@@ -0,0 +1,31 @@
+import { useEffect } from "react";
+import Header from "../components/repareo/header";
+import MainWrapper from "../components/repareo/mainWrapper";
+import StepperWrapper from "../components/repareo/stepperWrapper";
+import Stepper from "../components/stepper/stepper";
+import ButtonWrapper from "../components/repareo/buttonWrapper";
+import Button from "../components/repareo/button";
+import useStepper from "../hooks/useStepper";
+
+export default function Fahrzeug() {
+ const { steps, currentStep, handleNextStep, setCurrentStep } = useStepper();
+
+ useEffect(() => {
+ setCurrentStep(2);
+ }, [setCurrentStep]);
+
+ return (
+ <>
+
+
+
+
+
+
+
+ Next
+
+
+ >
+ );
+}
diff --git a/pages/kontakt.tsx b/pages/kontakt.tsx
new file mode 100644
index 0000000..eca24f3
--- /dev/null
+++ b/pages/kontakt.tsx
@@ -0,0 +1,31 @@
+import { useEffect } from "react";
+import Header from "../components/repareo/header";
+import MainWrapper from "../components/repareo/mainWrapper";
+import StepperWrapper from "../components/repareo/stepperWrapper";
+import Stepper from "../components/stepper/stepper";
+import ButtonWrapper from "../components/repareo/buttonWrapper";
+import Button from "../components/repareo/button";
+import useStepper from "../hooks/useStepper";
+
+export default function Kontakt() {
+ const { steps, currentStep, handleNextStep, setCurrentStep } = useStepper();
+
+ useEffect(() => {
+ setCurrentStep(3);
+ }, [setCurrentStep]);
+
+ return (
+ <>
+
+
+
+
+
+
+
+ Next
+
+
+ >
+ );
+}
diff --git a/pages/termin.tsx b/pages/termin.tsx
new file mode 100644
index 0000000..5cbc215
--- /dev/null
+++ b/pages/termin.tsx
@@ -0,0 +1,31 @@
+import { useEffect } from "react";
+import Header from "../components/repareo/header";
+import MainWrapper from "../components/repareo/mainWrapper";
+import StepperWrapper from "../components/repareo/stepperWrapper";
+import Stepper from "../components/stepper/stepper";
+import ButtonWrapper from "../components/repareo/buttonWrapper";
+import Button from "../components/repareo/button";
+import { useStepperContext } from "../context/stepperContext";
+
+export default function Termin() {
+ const { steps, currentStep, handleNextStep, setCurrentStep } =
+ useStepperContext();
+ useEffect(() => {
+ setCurrentStep(1);
+ }, [setCurrentStep]);
+
+ return (
+ <>
+
+
+
+
+
+
+
+ Next
+
+
+ >
+ );
+}
From c057668b65b480f1bddc3a3970c4feac14765836 Mon Sep 17 00:00:00 2001
From: Arpita Behura <56763669+arpita009@users.noreply.github.com>
Date: Tue, 30 Sep 2025 00:00:05 +0200
Subject: [PATCH 05/10] Refactoring repeated components built for routing
---
components/stepper/stepPage.tsx | 37 +++++++++++++++++++++++++++++++++
pages/fahrzeug.tsx | 34 ++++--------------------------
pages/kontakt.tsx | 34 ++++--------------------------
pages/termin.tsx | 32 +++-------------------------
4 files changed, 48 insertions(+), 89 deletions(-)
create mode 100644 components/stepper/stepPage.tsx
diff --git a/components/stepper/stepPage.tsx b/components/stepper/stepPage.tsx
new file mode 100644
index 0000000..7a11348
--- /dev/null
+++ b/components/stepper/stepPage.tsx
@@ -0,0 +1,37 @@
+import { useEffect } from "react";
+import Header from "../../components/repareo/header";
+import MainWrapper from "../../components/repareo/mainWrapper";
+import StepperWrapper from "../../components/repareo/stepperWrapper";
+import Stepper from "../../components/stepper/stepper";
+import ButtonWrapper from "../../components/repareo/buttonWrapper";
+import Button from "../../components/repareo/button";
+import { useStepperContext } from "../../context/stepperContext";
+
+interface StepPageProps {
+ stepIndex: number;
+}
+
+export default function StepPage({ stepIndex }: StepPageProps) {
+ const { steps, currentStep, handleNextStep, setCurrentStep } =
+ useStepperContext();
+
+ useEffect(() => {
+ setCurrentStep(stepIndex);
+ }, [setCurrentStep, stepIndex]);
+
+ return (
+ <>
+
+
+
+
+
+
+ {currentStep < steps.length - 1 && (
+ Next
+ )}
+
+
+ >
+ );
+}
diff --git a/pages/fahrzeug.tsx b/pages/fahrzeug.tsx
index b6bb324..bfc7c8d 100644
--- a/pages/fahrzeug.tsx
+++ b/pages/fahrzeug.tsx
@@ -1,31 +1,5 @@
-import { useEffect } from "react";
-import Header from "../components/repareo/header";
-import MainWrapper from "../components/repareo/mainWrapper";
-import StepperWrapper from "../components/repareo/stepperWrapper";
-import Stepper from "../components/stepper/stepper";
-import ButtonWrapper from "../components/repareo/buttonWrapper";
-import Button from "../components/repareo/button";
-import useStepper from "../hooks/useStepper";
+import StepPage from "../components/stepper/stepPage";
-export default function Fahrzeug() {
- const { steps, currentStep, handleNextStep, setCurrentStep } = useStepper();
-
- useEffect(() => {
- setCurrentStep(2);
- }, [setCurrentStep]);
-
- return (
- <>
-
-
-
-
-
-
-
- Next
-
-
- >
- );
-}
+export default function Termin() {
+ return ;
+}
\ No newline at end of file
diff --git a/pages/kontakt.tsx b/pages/kontakt.tsx
index eca24f3..0951a12 100644
--- a/pages/kontakt.tsx
+++ b/pages/kontakt.tsx
@@ -1,31 +1,5 @@
-import { useEffect } from "react";
-import Header from "../components/repareo/header";
-import MainWrapper from "../components/repareo/mainWrapper";
-import StepperWrapper from "../components/repareo/stepperWrapper";
-import Stepper from "../components/stepper/stepper";
-import ButtonWrapper from "../components/repareo/buttonWrapper";
-import Button from "../components/repareo/button";
-import useStepper from "../hooks/useStepper";
+import StepPage from "../components/stepper/stepPage";
-export default function Kontakt() {
- const { steps, currentStep, handleNextStep, setCurrentStep } = useStepper();
-
- useEffect(() => {
- setCurrentStep(3);
- }, [setCurrentStep]);
-
- return (
- <>
-
-
-
-
-
-
-
- Next
-
-
- >
- );
-}
+export default function Termin() {
+ return ;
+}
\ No newline at end of file
diff --git a/pages/termin.tsx b/pages/termin.tsx
index 5cbc215..a4efffb 100644
--- a/pages/termin.tsx
+++ b/pages/termin.tsx
@@ -1,31 +1,5 @@
-import { useEffect } from "react";
-import Header from "../components/repareo/header";
-import MainWrapper from "../components/repareo/mainWrapper";
-import StepperWrapper from "../components/repareo/stepperWrapper";
-import Stepper from "../components/stepper/stepper";
-import ButtonWrapper from "../components/repareo/buttonWrapper";
-import Button from "../components/repareo/button";
-import { useStepperContext } from "../context/stepperContext";
+import StepPage from "../components/stepper/stepPage";
export default function Termin() {
- const { steps, currentStep, handleNextStep, setCurrentStep } =
- useStepperContext();
- useEffect(() => {
- setCurrentStep(1);
- }, [setCurrentStep]);
-
- return (
- <>
-
-
-
-
-
-
-
- Next
-
-
- >
- );
-}
+ return ;
+}
\ No newline at end of file
From 8beca43e59edee6ab69d76509dea8f98117a4f8f Mon Sep 17 00:00:00 2001
From: Arpita Behura <56763669+arpita009@users.noreply.github.com>
Date: Tue, 30 Sep 2025 00:09:11 +0200
Subject: [PATCH 06/10] Removing hardcoding stepIndex using stepMapping
---
components/stepper/stepMapping.ts | 23 +++++++++++++++++++++++
components/stepper/stepPage.tsx | 18 ++++++++++++------
pages/fahrzeug.tsx | 2 +-
pages/kontakt.tsx | 2 +-
pages/termin.tsx | 2 +-
5 files changed, 38 insertions(+), 9 deletions(-)
create mode 100644 components/stepper/stepMapping.ts
diff --git a/components/stepper/stepMapping.ts b/components/stepper/stepMapping.ts
new file mode 100644
index 0000000..1569347
--- /dev/null
+++ b/components/stepper/stepMapping.ts
@@ -0,0 +1,23 @@
+import { steps, Step } from "./steps";
+
+interface StepMapping {
+ [key: string]: number;
+}
+
+export const stepMapping: StepMapping = steps.reduce(
+ (acc: StepMapping, step: Step, index: number) => {
+ const pageName: string | null = step.navigateTo
+ ? step.navigateTo.replace("/", "")
+ : null;
+ console.log(
+ `Mapping step "${step.title}" to page "${pageName}" with index ${index}`
+ );
+
+ if (pageName) {
+ acc[pageName] = index + 1;
+ }
+
+ return acc;
+ },
+ {}
+);
diff --git a/components/stepper/stepPage.tsx b/components/stepper/stepPage.tsx
index 7a11348..0619dc2 100644
--- a/components/stepper/stepPage.tsx
+++ b/components/stepper/stepPage.tsx
@@ -6,18 +6,24 @@ import Stepper from "../../components/stepper/stepper";
import ButtonWrapper from "../../components/repareo/buttonWrapper";
import Button from "../../components/repareo/button";
import { useStepperContext } from "../../context/stepperContext";
+import { useRouter } from "next/router";
+import { stepMapping } from "./stepMapping";
-interface StepPageProps {
- stepIndex: number;
-}
+interface StepPageProps {}
-export default function StepPage({ stepIndex }: StepPageProps) {
+export default function StepPage({}: StepPageProps) {
const { steps, currentStep, handleNextStep, setCurrentStep } =
useStepperContext();
+ const router = useRouter();
+ const { pathname } = router;
+ const pageName = pathname.split("/").pop() || "";
+ const stepIndex = stepMapping[pageName];
useEffect(() => {
- setCurrentStep(stepIndex);
- }, [setCurrentStep, stepIndex]);
+ if (stepIndex) {
+ setCurrentStep(stepIndex);
+ }
+ }, [setCurrentStep, stepIndex]);
return (
<>
diff --git a/pages/fahrzeug.tsx b/pages/fahrzeug.tsx
index bfc7c8d..3045565 100644
--- a/pages/fahrzeug.tsx
+++ b/pages/fahrzeug.tsx
@@ -1,5 +1,5 @@
import StepPage from "../components/stepper/stepPage";
export default function Termin() {
- return ;
+ return ;
}
\ No newline at end of file
diff --git a/pages/kontakt.tsx b/pages/kontakt.tsx
index 0951a12..3045565 100644
--- a/pages/kontakt.tsx
+++ b/pages/kontakt.tsx
@@ -1,5 +1,5 @@
import StepPage from "../components/stepper/stepPage";
export default function Termin() {
- return ;
+ return ;
}
\ No newline at end of file
diff --git a/pages/termin.tsx b/pages/termin.tsx
index a4efffb..3045565 100644
--- a/pages/termin.tsx
+++ b/pages/termin.tsx
@@ -1,5 +1,5 @@
import StepPage from "../components/stepper/stepPage";
export default function Termin() {
- return ;
+ return ;
}
\ No newline at end of file
From dba174e7f6298beba5d35779564008c8ebbf1184 Mon Sep 17 00:00:00 2001
From: Arpita Behura <56763669+arpita009@users.noreply.github.com>
Date: Tue, 30 Sep 2025 12:31:40 +0200
Subject: [PATCH 07/10] Adding tests for StepPage
---
.../components/stepper/stepPage.test.tsx | 105 ++++++++++++++++++
__tests__/components/stepper/stepper.test.tsx | 1 -
components/stepper/stepMapping.ts | 6 +-
components/stepper/stepPage.tsx | 12 +-
4 files changed, 116 insertions(+), 8 deletions(-)
create mode 100644 __tests__/components/stepper/stepPage.test.tsx
diff --git a/__tests__/components/stepper/stepPage.test.tsx b/__tests__/components/stepper/stepPage.test.tsx
new file mode 100644
index 0000000..6746973
--- /dev/null
+++ b/__tests__/components/stepper/stepPage.test.tsx
@@ -0,0 +1,105 @@
+import React from "react";
+import { render, screen } from "@testing-library/react";
+import "@testing-library/jest-dom";
+import StepPage from "../../../components/stepper/stepPage";
+import { useStepperContext } from "../../../context/stepperContext";
+import { useRouter } from "next/router";
+
+jest.mock("next/router", () => ({
+ useRouter: jest.fn(),
+}));
+
+jest.mock("../../../context/stepperContext", () => ({
+ useStepperContext: jest.fn(),
+}));
+
+
+jest.mock("../../../components/stepper/stepMapping", () => {
+ const mockStepMapping = { step1: 1, step2: 2, termin: 1 };
+ return {
+ stepMapping: mockStepMapping,
+ };
+});
+
+describe("StepPage", () => {
+ const mockSteps = [
+ { title: "Step 1", isCompleted: false, navigateTo: "/step1" },
+ { title: "Step 2", isCompleted: false, navigateTo: "/step2" },
+ ];
+
+ const mockUseStepperContext = {
+ steps: mockSteps,
+ currentStep: 0,
+ handleNextStep: jest.fn(),
+ setCurrentStep: jest.fn(),
+ };
+
+ beforeEach(() => {
+ (useStepperContext as jest.Mock).mockReturnValue(mockUseStepperContext);
+ (useRouter as jest.Mock).mockReturnValue({
+ pathname: "/step1",
+ query: {},
+ push: jest.fn(),
+ events: {
+ emit: jest.fn(),
+ on: jest.fn(),
+ off: jest.fn(),
+ },
+ beforePopState: jest.fn(() => null),
+ prefetch: jest.fn(() => Promise.resolve()),
+ });
+ });
+
+ it("renders the Stepper component", () => {
+ (useRouter as jest.Mock).mockReturnValue({
+ pathname: "/step1",
+ query: {},
+ push: jest.fn(),
+ events: {
+ emit: jest.fn(),
+ on: jest.fn(),
+ off: jest.fn(),
+ },
+ beforePopState: jest.fn(() => null),
+ prefetch: jest.fn(() => Promise.resolve()),
+ });
+ render( );
+ expect(screen.getByText("Step 1")).toBeInTheDocument();
+ });
+
+ it("calls setCurrentStep with the correct step index based on pathname", () => {
+ (useRouter as jest.Mock).mockReturnValue({
+ pathname: "/termin",
+ query: {},
+ push: jest.fn(),
+ events: {
+ emit: jest.fn(),
+ on: jest.fn(),
+ off: jest.fn(),
+ },
+ beforePopState: jest.fn(() => null),
+ prefetch: jest.fn(() => Promise.resolve()),
+ });
+
+ render( );
+ expect(mockUseStepperContext.setCurrentStep).toHaveBeenCalledWith(1);
+ });
+
+ it("renders 'Invalid Step' if the pathname does not match any step", () => {
+ (useRouter as jest.Mock).mockReturnValue({
+ pathname: "/unknown",
+ query: {},
+ push: jest.fn(),
+ events: {
+ emit: jest.fn(),
+ on: jest.fn(),
+ off: jest.fn(),
+ },
+ beforePopState: jest.fn(() => null),
+ prefetch: jest.fn(() => Promise.resolve()),
+ });
+
+ const { container } = render( );
+ expect(container).toHaveTextContent("Invalid Step");
+ });
+});
diff --git a/__tests__/components/stepper/stepper.test.tsx b/__tests__/components/stepper/stepper.test.tsx
index dfce2ed..69096ba 100644
--- a/__tests__/components/stepper/stepper.test.tsx
+++ b/__tests__/components/stepper/stepper.test.tsx
@@ -1,4 +1,3 @@
-// TODO: Implement your tests here
import React from "react";
import { render, screen } from "@testing-library/react";
import "@testing-library/jest-dom";
diff --git a/components/stepper/stepMapping.ts b/components/stepper/stepMapping.ts
index 1569347..1e91b6e 100644
--- a/components/stepper/stepMapping.ts
+++ b/components/stepper/stepMapping.ts
@@ -9,9 +9,9 @@ export const stepMapping: StepMapping = steps.reduce(
const pageName: string | null = step.navigateTo
? step.navigateTo.replace("/", "")
: null;
- console.log(
- `Mapping step "${step.title}" to page "${pageName}" with index ${index}`
- );
+ // console.log(
+ // `Mapping step "${step.title}" to page "${pageName}" with index ${index}`
+ // );
if (pageName) {
acc[pageName] = index + 1;
diff --git a/components/stepper/stepPage.tsx b/components/stepper/stepPage.tsx
index 0619dc2..ea9c8cb 100644
--- a/components/stepper/stepPage.tsx
+++ b/components/stepper/stepPage.tsx
@@ -20,10 +20,14 @@ export default function StepPage({}: StepPageProps) {
const pageName = pathname.split("/").pop() || "";
const stepIndex = stepMapping[pageName];
useEffect(() => {
- if (stepIndex) {
- setCurrentStep(stepIndex);
- }
- }, [setCurrentStep, stepIndex]);
+ if (stepIndex) {
+ setCurrentStep(stepIndex);
+ }
+ }, [setCurrentStep, stepIndex]);
+
+ if (!stepIndex) {
+ return Invalid Step
;
+ }
return (
<>
From bd748ee4bec400e10cb311507723e8c4e22096de Mon Sep 17 00:00:00 2001
From: Arpita Behura <56763669+arpita009@users.noreply.github.com>
Date: Tue, 30 Sep 2025 19:26:05 +0200
Subject: [PATCH 08/10] Variable namings
---
components/stepper/stepMapping.ts | 6 +++---
components/stepper/stepper.tsx | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/components/stepper/stepMapping.ts b/components/stepper/stepMapping.ts
index 1e91b6e..ba5e431 100644
--- a/components/stepper/stepMapping.ts
+++ b/components/stepper/stepMapping.ts
@@ -5,7 +5,7 @@ interface StepMapping {
}
export const stepMapping: StepMapping = steps.reduce(
- (acc: StepMapping, step: Step, index: number) => {
+ (accStepMapping: StepMapping, step: Step, stepIndex: number) => {
const pageName: string | null = step.navigateTo
? step.navigateTo.replace("/", "")
: null;
@@ -14,10 +14,10 @@ export const stepMapping: StepMapping = steps.reduce(
// );
if (pageName) {
- acc[pageName] = index + 1;
+ accStepMapping[pageName] = stepIndex + 1;
}
- return acc;
+ return accStepMapping;
},
{}
);
diff --git a/components/stepper/stepper.tsx b/components/stepper/stepper.tsx
index 8e5c195..6314a03 100644
--- a/components/stepper/stepper.tsx
+++ b/components/stepper/stepper.tsx
@@ -1,4 +1,4 @@
-import { Step, steps } from "./steps";
+import { Step } from "./steps";
interface StepperProps {
steps: Step[];
currentStep: number;
From 09a2d43db697ce34a820203e5d2243e53d48304f Mon Sep 17 00:00:00 2001
From: Arpita Behura <56763669+arpita009@users.noreply.github.com>
Date: Wed, 1 Oct 2025 00:02:35 +0200
Subject: [PATCH 09/10] Readme updates
---
README.md | 63 +++++++++++++++++++--------------
public/architectureDiagram.png | Bin 0 -> 193692 bytes
2 files changed, 37 insertions(+), 26 deletions(-)
create mode 100644 public/architectureDiagram.png
diff --git a/README.md b/README.md
index b0f1cea..c1364e0 100644
--- a/README.md
+++ b/README.md
@@ -2,42 +2,60 @@
Hello there!
-Your task is to implement a new Stepper component
+### Task Overview
+
+Implemented a new Stepper component
based on [these specifications in Figma](https://www.figma.com/design/gvf4xjR6f9rvaj94BPFFyZ/Frontend-Coding-Challenge?node-id=0-1&t=tHGuIxWbpBVVsH5B-1).
-Make sure your component behaves as expected by
-creating tests for it.
## File structure
-The relevant files are these
+
```text
__tests__/
components/
stepper/
stepper.test.tsx
- -> Implement your tests here
+ -> Contains tests for the Stepper component, verifying that it renders correctly and displays the steps.
+ stepPage.test.tsx
+ -> Contains tests for the StepPage component, verifying that it renders the correct content based on the route, calls the `setCurrentStep` function with the correct index, and handles invalid routes.
+
components/
stepper/
- stepper.tsx
+ stepper.tsx
-> The stepper component
steps.ts
- -> You might want to use this to
- configure the steps
+ -> Configuring the steps
+ stepMapping.tsx
+ -> step mapping for each page
+ stepPage.ts
+ -> For creating dynamic routes
hooks/
useStepper.ts
-> Custom hook that handles navigation
+
+context/
+ stepperContext.tsx
+ -> Contains React context providers for managing application state- `StepperContext`
+
pages/
index.tsx
-> The main page (localhost:3000)
+ termin.tsx, fahrzeug.tsx, kontakt.tsx:
+ -> Page components that use the StepPage component.
```
+## Architecture Diagram
+
+
## Setting up everything
Install the dependencies
+
```bash
npm install
```
Start the dev server to get a preview
+
```bash
npm run dev
```
@@ -45,28 +63,21 @@ npm run dev
Check out the page on [localhost:3000](http://localhost:3000)
To run the tests
+
```bash
npm run test
```
-## Getting started
-
-Get started by having a look at the relevant files
-and then start implementing the Stepper component in
-`/components/stepper/stepper.tsx`.
-
-## Things to consider
-
-Please use **Tailwind CSS** to style the component.
-Please **do not install any additional packages**.
-Make sure the component
-- aligns **exactly** with the Figma spec (we already
-implemented the page layout for you,
-you just have to worry about the stepper component)
-- is **reusable**
-- works with **different sets of steps**
-- works well on **all breakpoints**
+## Features & Functionality
-Good luck! :)
\ No newline at end of file
+- Stepper Component implementation ✅
+- Steps configured ✅
+- useStepper hook to encapsulate the stepper logic and manage navigation of steps and routing ✅
+- Responsiveness ✅
+- StepperContext to manage the stepper state (steps, current step) and functions (handleNextStep, setCurrentStep) ✅
+- Dynamic step management ✅
+- Basic error handling to display an "Invalid Step" message if the route does not match a valid step. ✅
+- StepPage is a reusable component that renders the core layout of each step page ✅
+- Tests for Stepper component and StepPage ✅
\ No newline at end of file
diff --git a/public/architectureDiagram.png b/public/architectureDiagram.png
new file mode 100644
index 0000000000000000000000000000000000000000..b1f4d4b82177cdca21d9644f558a3bd8a2911b67
GIT binary patch
literal 193692
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