-
+
@@ -8,20 +8,69 @@
import store from "@/store";
import { getProgressBarPercentage } from "@/constants/progress-bar-mapper";
+// Module-level variable to persist progress across component lifecycles
+let lastProgress = 0;
+
export default {
- name: "progressBar",
- data() {},
+ name: "progress-bar",
+ props: {
+ page: {
+ type: String,
+ required: true,
+ },
+ },
+ data() {
+ return {
+ displayedProgress: lastProgress,
+ timeoutId: null,
+ };
+ },
+ watch: {
+ page: {
+ immediate: true,
+ handler(newPage) {
+ const target = getProgressBarPercentage(newPage);
+ if (this.timeoutId) clearTimeout(this.timeoutId);
+
+ // Animate from current value to new value
+ this.timeoutId = setTimeout(() => {
+ this.displayedProgress = target;
+ lastProgress = target; // Update the module-level variable
+ }, 150);
+ },
+ },
+ },
+ beforeUnmount() {
+ if (this.timeoutId) clearTimeout(this.timeoutId);
+ },
computed: {
- progress() {
- return getProgressBarPercentage(this.pageName);
+ progressStyle() {
+ return {
+ width: this.displayedProgress + "%",
+ };
},
},
};