diff --git a/src/layouts/scheduling/date-picker/date-picker.vue b/src/layouts/scheduling/date-picker/date-picker.vue
index 48c49c1ed..cdbebb5d9 100644
--- a/src/layouts/scheduling/date-picker/date-picker.vue
+++ b/src/layouts/scheduling/date-picker/date-picker.vue
@@ -6,13 +6,7 @@
aria-label="Previous dates"
@click="goBack">
-
@@ -38,16 +32,7 @@
:disabled="!canGoForward"
aria-label="Next dates"
@click="goForward">
-
-
+
@@ -73,6 +58,7 @@ const MONTH_ABBRS = [
const MOBILE_WINDOW_SIZE = 3;
const DESKTOP_WINDOW_SIZE = 5;
const DESKTOP_BREAKPOINT_PX = Breakpoints.MD;
+const MAX_DATE_RANGE = 180;
function toLocalDateString(date) {
const y = date.getFullYear();
@@ -86,6 +72,10 @@ function parseLocalDate(str) {
return new Date(year, month - 1, day);
}
+function getWindowSize() {
+ return window.innerWidth >= DESKTOP_BREAKPOINT_PX ? DESKTOP_WINDOW_SIZE : MOBILE_WINDOW_SIZE;
+}
+
export default {
name: "datePicker",
props: {
@@ -114,10 +104,7 @@ export default {
data() {
return {
windowStart: 0,
- windowSize:
- window.innerWidth >= DESKTOP_BREAKPOINT_PX
- ? DESKTOP_WINDOW_SIZE
- : MOBILE_WINDOW_SIZE,
+ windowSize: getWindowSize(),
pendingAutoSelect: false,
initialized: false,
};
@@ -154,9 +141,8 @@ export default {
},
canGoForward() {
if (this.isLoadingDates || !this.allDates.length) return false;
- const lastDateIsVisible = this.windowStart + this.windowSize >= this.allDates.length;
- if (this.allDates.length >= 180 && lastDateIsVisible) return false;
- return true;
+ const atEnd = this.windowStart + this.windowSize >= this.allDates.length;
+ return !(atEnd && this.allDates.length >= MAX_DATE_RANGE);
},
},
watch: {
@@ -177,12 +163,11 @@ export default {
mounted() {
this.updateWindowSize();
window.addEventListener("resize", this.updateWindowSize);
- if (this.modelValue && this.allDates.length) {
+ if (!this.allDates.length) return;
+ if (this.modelValue) {
const index = this.allDates.findIndex((d) => d.value === this.modelValue);
- if (index !== -1) {
- this.windowStart = Math.floor(index / this.windowSize) * this.windowSize;
- }
- } else if (!this.modelValue && this.allDates.length) {
+ if (index !== -1) this.windowStart = this.getWindowStart(index);
+ } else {
this.initializeWindow();
}
},
@@ -191,10 +176,15 @@ export default {
},
methods: {
updateWindowSize() {
- this.windowSize =
- window.innerWidth >= DESKTOP_BREAKPOINT_PX
- ? DESKTOP_WINDOW_SIZE
- : MOBILE_WINDOW_SIZE;
+ this.windowSize = getWindowSize();
+ },
+ navIconSrc(enabled) {
+ return enabled
+ ? require("@/assets/img/icons/chevron-right-blue.svg")
+ : require("@/assets/img/icons/chevron-right-grey.svg");
+ },
+ getWindowStart(index) {
+ return Math.floor(index / this.windowSize) * this.windowSize;
},
goBack() {
this.windowStart = Math.max(0, this.windowStart - this.windowSize);
@@ -226,7 +216,7 @@ export default {
const firstAvailable = this.allDates.find((d) => d.isAvailable);
if (firstAvailable) {
const index = this.allDates.indexOf(firstAvailable);
- this.windowStart = Math.floor(index / this.windowSize) * this.windowSize;
+ this.windowStart = this.getWindowStart(index);
this.$emit("update:modelValue", firstAvailable.value);
} else {
this.windowStart = Math.max(0, this.allDates.length - this.windowSize);
@@ -312,18 +302,19 @@ export default {
}
}
- &__day-abbr {
+ &__day-abbr,
+ &__day-date {
font-family: $font-family-sans-serif-bold;
font-size: $font-size-14;
color: $blue;
+ }
+
+ &__day-abbr {
text-transform: uppercase;
line-height: 1.2;
}
&__day-date {
- font-family: $font-family-sans-serif-bold;
- font-size: $font-size-14;
- color: $blue;
line-height: 1.4;
white-space: nowrap;
}