FleetCart/Themes/Storefront/resources/assets/public/js/components/Countdown.vue
2023-12-03 14:07:47 +00:00

101 lines
2.9 KiB
Vue

<template>
<div class="daily-deals-countdown countdown clearfix">
<span class="countdown-row">
<span class="countdown-section">
<span class="countdown-amount">{{ date.days }}</span>
<span class="countdown-period">
{{ $trans("storefront::product_card.days") }}
</span>
</span>
<span class="countdown-section">
<span class="countdown-amount">{{ date.hours }}</span>
<span class="countdown-period">
{{ $trans("storefront::product_card.hours") }}
</span>
</span>
<span class="countdown-section">
<span class="countdown-amount">{{ date.minutes }}</span>
<span class="countdown-period">
{{ $trans("storefront::product_card.minutes") }}
</span>
</span>
<span class="countdown-section">
<span class="countdown-amount">{{ date.seconds }}</span>
<span class="countdown-period">
{{ $trans("storefront::product_card.seconds") }}
</span>
</span>
</span>
</div>
</template>
<script>
export default {
props: ["endDate"],
data() {
return {
date: {},
countdown: null,
};
},
mounted() {
if (new Date() > new Date(this.endDate)) {
this.setInitialDate();
return;
}
this.countdown = this.initCountdown();
},
methods: {
initCountdown() {
return countdown(
new Date(this.endDate),
({ days, hours, minutes, seconds }) => {
if (new Date() > new Date(this.endDate)) {
this.setInitialDate();
window.clearInterval(this.countdown);
return;
}
this.date = Object.assign({}, this.date, {
days: this.leadingZero(days),
hours: this.leadingZero(hours),
minutes: this.leadingZero(minutes),
seconds: this.leadingZero(seconds),
});
},
countdown.DAYS |
countdown.HOURS |
countdown.MINUTES |
countdown.SECONDS
);
},
setInitialDate() {
this.date = Object.assign({}, this.date, {
days: "00",
hours: "00",
minutes: "00",
seconds: "00",
});
},
leadingZero(number) {
return number < 10 ? "0" + number : number;
},
},
};
</script>