diff --git a/src/constants/progress-bar-mapper.js b/src/constants/progress-bar-mapper.js
new file mode 100644
index 000000000..98ae07992
--- /dev/null
+++ b/src/constants/progress-bar-mapper.js
@@ -0,0 +1,26 @@
+const pagePercentageMapper = {
+ vehicle: 4,
+ "vehicle-damage": 16,
+ estimate: 28,
+ "service-zip": 32,
+ "vin-lookup": 32,
+ "license-plate-lookup": 32,
+ "address-lookup": 32,
+ "address-vehicles": 36,
+ "part-questions": 40,
+ "molding-questions": 40,
+ "vehicle-parts": 40,
+ "capability-questions": 40,
+ quote: 48,
+ "insurance-company": 52,
+ "service-location": 60,
+ schedule: 72,
+ "customer-details": 84,
+ "payment-method": 92,
+ payment: 96,
+ confirmation: 100,
+};
+
+export const getProgressBarPercentage = (page) => {
+ return pagePercentageMapper[page] || 0;
+};
diff --git a/src/fmg-components/funnel-header/funnel-header.vue b/src/fmg-components/funnel-header/funnel-header.vue
index c6cbb8727..092224551 100644
--- a/src/fmg-components/funnel-header/funnel-header.vue
+++ b/src/fmg-components/funnel-header/funnel-header.vue
@@ -6,6 +6,7 @@
+
@@ -26,6 +27,7 @@ import alert from "@/ux-components/alert/alert";
import eventBus from "@/helpers/event-bus/event-bus";
import { globalEvents } from "@/constants/events";
import menuModal from "@/fmg-components/funnel-header/menu-modal/menu-modal";
+import progressBar from "@/fmg-components/funnel-header/progress-bar/progress-bar";
// Constants
const ALERT_DURATION = 3000; // millisecond time to display alert before dismissal
@@ -62,6 +64,7 @@ export default {
components: {
alert,
menuModal,
+ progressBar,
},
mounted() {
// Check if alert event is on the bus
diff --git a/src/fmg-components/funnel-header/progress-bar/progres-bar.spec.js b/src/fmg-components/funnel-header/progress-bar/progres-bar.spec.js
new file mode 100644
index 000000000..92e6e15a5
--- /dev/null
+++ b/src/fmg-components/funnel-header/progress-bar/progres-bar.spec.js
@@ -0,0 +1,84 @@
+import { shallowMount } from "@vue/test-utils";
+import progressBar from "./progress-bar";
+import store from "@/store";
+
+describe("progressBar", () => {
+ test("progress should be 0", () => {
+ // Arrange
+
+ // Act
+ const wrapper = shallowMount(progressBar, {
+ mixins: [mockMixin],
+ });
+
+ // Assert
+ expect(wrapper.vm.progress).toBe(0);
+ wrapper.unmount();
+ });
+});
+
+describe("progressBar", () => {
+ test("progress should be 4%", () => {
+ // Arrange
+ store.getters = {
+ applicationUser: {
+ lastPageVisited: "vehicle",
+ },
+ };
+
+ // Act
+ const wrapper = shallowMount(progressBar, {
+ mixins: [mockMixin],
+ });
+
+ // Assert
+ expect(wrapper.vm.progress).toBe(4);
+ wrapper.unmount();
+ });
+});
+
+describe("progressBar", () => {
+ test("progress should be 48%", () => {
+ // Arrange
+ store.getters = {
+ applicationUser: {
+ lastPageVisited: "quote",
+ },
+ };
+
+ // Act
+ const wrapper = shallowMount(progressBar, {
+ mixins: [mockMixin],
+ });
+
+ // Assert
+ expect(wrapper.vm.progress).toBe(48);
+ wrapper.unmount();
+ });
+});
+
+describe("progressBar", () => {
+ test("progress should be 100%", () => {
+ // Arrange
+ store.getters = {
+ applicationUser: {
+ lastPageVisited: "confirmation",
+ },
+ };
+
+ // Act
+ const wrapper = shallowMount(progressBar, {
+ mixins: [mockMixin],
+ });
+
+ // Assert
+ expect(wrapper.vm.progress).toBe(100);
+ wrapper.unmount();
+ });
+});
+
+const mockMixin = {
+ methods: {
+ getProgress: jest.fn(),
+ },
+};
diff --git a/src/fmg-components/funnel-header/progress-bar/progress-bar.vue b/src/fmg-components/funnel-header/progress-bar/progress-bar.vue
new file mode 100644
index 000000000..c8d880dab
--- /dev/null
+++ b/src/fmg-components/funnel-header/progress-bar/progress-bar.vue
@@ -0,0 +1,60 @@
+
+
+
+
+
+
diff --git a/src/layouts/quote/quote.vue b/src/layouts/quote/quote.vue
index 6ef3d4749..4a20b4dbc 100644
--- a/src/layouts/quote/quote.vue
+++ b/src/layouts/quote/quote.vue
@@ -891,7 +891,7 @@ export default {
&.funnel-header-wrapper,
&.save-progress-popup {
- display: block;
+ display: flex;
}
}