Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
6573bcf
adding date presets
chippison Feb 17, 2026
b9d2028
adding the date range preset class;
chippison Feb 17, 2026
92e7b87
refactoring to PresetDateRanges to a vue component instead of just a …
chippison Feb 17, 2026
e132a57
fixing bug that seems to always click the 'Periods' initially then 'P…
chippison Feb 17, 2026
5f08b6e
refactoring out PeriodOptions into its own vue component.
chippison Feb 18, 2026
ded18ab
refactoring out PresetDateRange so that it is its own module and not …
chippison Feb 18, 2026
87d8c76
udating PresetDateRangeResolver.ts so that it uses magic strings we a…
chippison Feb 18, 2026
b6b8770
fixing a bug that causes some issues with PeriodSelector closing the …
chippison Feb 18, 2026
d70ad77
fixing space difference for compare checkbox
chippison Feb 18, 2026
c6e99e5
fixing bug where the Period selector panel when switching from a sing…
chippison Feb 18, 2026
3fef1f4
added a 'gate' so that we can stop click event from going into date r…
chippison Feb 20, 2026
66ce334
making some cosmetic changes
chippison Feb 23, 2026
f3995bc
adding tests and comments for using the magic keys in the URL for boo…
chippison Feb 23, 2026
a7b3e0b
fixing move period bug can go over min/max dates;
chippison Feb 23, 2026
da10328
made apply button show all the time again
chippison Feb 24, 2026
75d55ca
fixing P1 where staged state can leak across report navigation if dat…
chippison Feb 24, 2026
fd23582
adding tests for new watcher resync
chippison Feb 24, 2026
8ff496a
fixing bug where changing some preset options immediately changes som…
chippison Feb 24, 2026
fb66a84
making sure we include idSite and segment when trying to decide if co…
chippison Feb 24, 2026
a6b12db
adding tests so that we check that preset mode exits when a period op…
chippison Feb 24, 2026
d0b9736
hide preset date options for periods disabled in enabled_periods_UI
chippison Feb 24, 2026
cc878d5
removed unused translation
chippison Feb 24, 2026
b29da71
making getContextKeyFromParsed more robust and not just be based on h…
chippison Feb 24, 2026
73f9f32
added compareSegments to context to ignore
chippison Feb 24, 2026
9c30b3e
updating tests; transferred some ui dom tests to jest
chippison Feb 24, 2026
486e091
moved the periods and preset date options to the left and the calenda…
chippison Feb 25, 2026
220b57c
added jest test to make sure clicking outside just closes the panel a…
chippison Feb 25, 2026
0154e56
removed test that is already covered by jest test in PresetDateRanges…
chippison Feb 25, 2026
130844d
updated screenshot tests so that it actually types in the actual dates
chippison Feb 25, 2026
58bb39d
making changes to the UI so that we follow the spec
chippison Feb 25, 2026
d868432
adding tests and updating built files
chippison Feb 25, 2026
98f6681
adding hover colour to Period selection;
chippison Feb 25, 2026
5b3afaa
fixing UI test
chippison Feb 25, 2026
07a5914
Adding keyboard accessibility and updating tests
chippison Feb 26, 2026
1cace70
adding a fix so that magic strings in the URL still reflect back corr…
chippison Feb 26, 2026
2bc94a9
refactoring period selector by creating new vue component for Compare…
chippison Feb 26, 2026
7b07c56
changing spec names
chippison Feb 26, 2026
e220a46
update built file
chippison Feb 26, 2026
e42aae2
updating screenshots
chippison Feb 26, 2026
ec261c3
applying a bit of refactor for readability
chippison Feb 26, 2026
17a252d
disabling the whole calendar when we click on a Preset date option
chippison Mar 1, 2026
f8441b1
updating tests so that we do not use nextTick; updating screenshots a…
chippison Mar 2, 2026
33af6a1
fixing bug that sometimes enables the Apply button even when on perio…
chippison Mar 2, 2026
66eeb6e
Build vue files
innocraft-automation Mar 2, 2026
78e72ac
adding some changes from initial review
chippison Mar 4, 2026
b07596e
fixing issue where we unselect selected period option when we change …
chippison Mar 5, 2026
8688dd8
updating screenshots;updating unit test so and comment so that behavi…
chippison Mar 5, 2026
1016103
renaming state names so that its more descriptive and also removing r…
chippison Mar 9, 2026
7223f21
Build vue files
innocraft-automation Mar 9, 2026
9daed58
refactoring PeriodSelector.vue so that we split to a couple more vue …
chippison Mar 3, 2026
3e57de5
making sure hovering does not leave gaps for hover color
chippison Mar 4, 2026
775928e
added functionality to highlight the dates in between start and end d…
chippison Mar 4, 2026
3053c04
highlighting the dates in between for ranges; adding period selector …
chippison Mar 4, 2026
04a824e
updating branch from dev-19875
chippison Mar 5, 2026
260374c
removed unused css variables; also making sure radio input colour is …
chippison Mar 5, 2026
d439e35
making the radio button and checkbox a little bit lighter in the peri…
chippison Mar 5, 2026
eef2c80
merging 19875 and adding comments
chippison Mar 5, 2026
7c5160b
instead of buttons, decided to use radio instead just so we can eas…
chippison Mar 6, 2026
d53f743
updating screenshots; removed the use of waitForTimeOut in PeriodSele…
chippison Mar 6, 2026
5f9f034
fixing issue with highlighting gets removed when hovering over select…
chippison Mar 10, 2026
91a74bf
updating built files
chippison Mar 10, 2026
f3ceef7
Build vue files
innocraft-automation Mar 10, 2026
42184e3
removing highlight for DateRangePicker.vue
chippison Mar 10, 2026
733f679
Merge remote-tracking branch 'origin/calendar-refresh-v2' into calend…
chippison Mar 10, 2026
e9c80b1
refactor some unused variables; refactoring some tests to remove not …
chippison Mar 10, 2026
dcd3b63
merging 5.x-dev
chippison Mar 11, 2026
7ff444c
making calendar cells square instead of rectangular; tidy up branch
chippison Mar 11, 2026
fd2ac93
cleanup of less files by using class names instead of targeting actua…
chippison Mar 12, 2026
ef6e6c3
updating screenshots
chippison Mar 12, 2026
720f07f
fixing issues found in code review
chippison Mar 12, 2026
1e983fe
fixing screenshot issue in ci
chippison Mar 12, 2026
6fb7094
Merge branch '5.x-dev' into calendar-refresh-v2
chippison Mar 12, 2026
8cd5bea
resolving merge conflict and updating screenshot
chippison Mar 12, 2026
b043cf5
updating less file
chippison Mar 13, 2026
1826d38
Merge branch '5.x-dev' into calendar-refresh-v2
chippison Mar 16, 2026
8eb74f6
updating built files
chippison Mar 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
967 changes: 672 additions & 295 deletions plugins/CoreHome/vue/dist/CoreHome.umd.js

Large diffs are not rendered by default.

96 changes: 57 additions & 39 deletions plugins/CoreHome/vue/dist/CoreHome.umd.min.js

Large diffs are not rendered by default.

60 changes: 50 additions & 10 deletions plugins/CoreHome/vue/src/DatePicker/DatePicker.vue
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ export default defineComponent({
props: {
selectedDateStart: Date,
selectedDateEnd: Date,
persistentHighlightedDateStart: Date,
persistentHighlightedDateEnd: Date,
highlightedDateStart: Date,
highlightedDateEnd: Date,
viewDate: [String, Date],
Expand All @@ -40,12 +42,27 @@ export default defineComponent({

function setDateCellColor($dateCell: JQuery, dateValue: Date): void {
const $dateCellLink = $dateCell.children('a');

if (props.selectedDateStart
&& props.selectedDateEnd
&& dateValue >= props.selectedDateStart
&& dateValue <= props.selectedDateEnd
) {
const { selectedDateStart, selectedDateEnd } = props;
const dateValueTime = dateValue.getTime();
const isPersistentlyHighlightedDate = !!(
props.persistentHighlightedDateStart
&& props.persistentHighlightedDateEnd
&& dateValue >= props.persistentHighlightedDateStart
&& dateValue <= props.persistentHighlightedDateEnd
);

// Intentional UX: for custom date ranges (dual calendar) we only style the boundary dates
// as selected. The in-between span is not kept persistently highlighted.
const isBoundarySelectedDate = !!(
selectedDateStart
&& selectedDateEnd
&& (
dateValueTime === selectedDateStart.getTime()
|| dateValueTime === selectedDateEnd.getTime()
)
);

if (isBoundarySelectedDate) {
$dateCell.addClass('ui-datepicker-current-period');
} else {
$dateCell.removeClass('ui-datepicker-current-period');
Expand All @@ -56,13 +73,26 @@ export default defineComponent({
&& dateValue >= props.highlightedDateStart
&& dateValue <= props.highlightedDateEnd
) {
// other-month cells don't have links, so the <td> must have the ui-state-hover class
const elementToAddClassTo = $dateCellLink.length ? $dateCellLink : $dateCell;
elementToAddClassTo.addClass('ui-state-hover');
// Always mark the td so hover can fill full cell area (including horizontal padding).
$dateCell.addClass('ui-state-hover');
// Keep anchor class too for existing link-focused hover styling.
if ($dateCellLink.length) {
$dateCellLink.addClass('ui-state-hover');
}
} else {
$dateCell.removeClass('ui-state-hover');
$dateCellLink.removeClass('ui-state-hover');
}

if (isPersistentlyHighlightedDate) {
$dateCell.addClass('ui-datepicker-persistent-highlight');
if ($dateCellLink.length) {
$dateCellLink.addClass('ui-datepicker-persistent-highlight');
}
} else {
$dateCell.removeClass('ui-datepicker-persistent-highlight');
$dateCellLink.removeClass('ui-datepicker-persistent-highlight');
}
}

function getCellDate($dateCell: JQuery, month: number, year: number): Date {
Expand Down Expand Up @@ -168,6 +198,14 @@ export default defineComponent({

// add href to left/right nav in calendar so they can be accessed via keyboard
element.find('.ui-datepicker-prev,.ui-datepicker-next').attr('href', '');

// Use explicit chevron classes so scoped styles can render modern nav icons.
element.find('.ui-datepicker-prev .ui-icon')
.removeClass('ui-icon-circle-triangle-w')
.addClass('icon-chevron-left');
element.find('.ui-datepicker-next .ui-icon')
.removeClass('ui-icon-circle-triangle-e')
.addClass('icon-chevron-right');
}

function stepMonthsChanged(): boolean {
Expand Down Expand Up @@ -235,6 +273,8 @@ export default defineComponent({
[
(x: typeof props): Date|undefined => x.selectedDateStart,
(x: typeof props): Date|undefined => x.selectedDateEnd,
(x: typeof props): Date|undefined => x.persistentHighlightedDateStart,
(x: typeof props): Date|undefined => x.persistentHighlightedDateEnd,
(x: typeof props): Date|undefined => x.highlightedDateStart,
(x: typeof props): Date|undefined => x.highlightedDateEnd,
].forEach((selector) => {
Expand Down Expand Up @@ -273,7 +313,7 @@ export default defineComponent({
enableDisableMonthDropdown();
}

// redraw when selected/highlighted dates change
// redraw when selected or highlighted date props change
if (redraw) {
setDatePickerCellColors();
}
Expand Down
6 changes: 6 additions & 0 deletions plugins/CoreHome/vue/src/DateRangePicker/DateRangePicker.less
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
.dateRangePicker {
display: block;
.date-range-picker-label {
margin-left: 10px;
.date-range-picker-field {
font-size: 13px !important;
}
}
}
65 changes: 33 additions & 32 deletions plugins/CoreHome/vue/src/DateRangePicker/DateRangePicker.vue
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
<template>
<div class="dateRangePicker">
<div id="calendarRangeFrom">
<h6>
<h6 class="date-range-picker-label">
{{ translate('General_DateRangeFrom') }}
<input
type="text"
id="inputCalendarFrom"
name="inputCalendarFrom"
class="browser-default"
class="browser-default date-range-picker-field"
v-model="startDateText"
@keydown="onRangeInputChanged('from', $event)"
@keyup="handleEnterPress($event)"
Expand All @@ -23,24 +23,24 @@
<DatePicker
id="calendarFrom"
:view-date="startDate"
:selected-date-start="fromPickerSelectedDates[0]"
:selected-date-end="fromPickerSelectedDates[1]"
:highlighted-date-start="fromPickerHighlightedDates[0]"
:highlighted-date-end="fromPickerHighlightedDates[1]"
:selected-date-start="fromPickerSelectedDate"
:selected-date-end="fromPickerSelectedDate"
:highlighted-date-start="fromPickerHoveredDate"
:highlighted-date-end="fromPickerHoveredDate"
@date-select="setStartRangeDate($event.date)"
@cell-hover="fromPickerHighlightedDates = getNewHighlightedDates($event.date, $event.$cell)"
@cell-hover-leave="fromPickerHighlightedDates = [null, null]"
@cell-hover="fromPickerHoveredDate = getNewHoveredDate($event.date, $event.$cell)"
@cell-hover-leave="fromPickerHoveredDate = null"
>
</DatePicker>
</div>
<div id="calendarRangeTo">
<h6>
<h6 class="date-range-picker-label">
{{ translate('General_DateRangeTo') }}
<input
type="text"
id="inputCalendarTo"
name="inputCalendarTo"
class="browser-default"
class="browser-default date-range-picker-field"
v-model="endDateText"
@keydown="onRangeInputChanged('to', $event)"
@keyup="handleEnterPress($event)"
Expand All @@ -49,13 +49,13 @@
<DatePicker
id="calendarTo"
:view-date="endDate"
:selected-date-start="toPickerSelectedDates[0]"
:selected-date-end="toPickerSelectedDates[1]"
:highlighted-date-start="toPickerHighlightedDates[0]"
:highlighted-date-end="toPickerHighlightedDates[1]"
:selected-date-start="toPickerSelectedDate"
:selected-date-end="toPickerSelectedDate"
:highlighted-date-start="toPickerHoveredDate"
:highlighted-date-end="toPickerHoveredDate"
@date-select="setEndRangeDate($event.date)"
@cell-hover="toPickerHighlightedDates = getNewHighlightedDates($event.date, $event.$cell)"
@cell-hover-leave="toPickerHighlightedDates = [null, null]"
@cell-hover="toPickerHoveredDate = getNewHoveredDate($event.date, $event.$cell)"
@cell-hover-leave="toPickerHoveredDate = null"
>
</DatePicker>
</div>
Expand All @@ -71,17 +71,18 @@ import ChangeEvent = JQuery.ChangeEvent;
const DATE_FORMAT = 'YYYY-MM-DD';

interface DateRangePickerState {
fromPickerSelectedDates: (Date|null)[];
toPickerSelectedDates: (Date|null)[];
fromPickerHighlightedDates: (Date|null)[];
toPickerHighlightedDates: (Date|null)[];
fromPickerSelectedDate: Date|null;
toPickerSelectedDate: Date|null;
fromPickerHoveredDate: Date|null;
toPickerHoveredDate: Date|null;
startDateText?: string;
endDateText?: string;
startDateInvalid: boolean;
endDateInvalid: boolean;
}

export default defineComponent({
name: 'DateRangePicker',
props: {
startDate: String,
endDate: String,
Expand Down Expand Up @@ -109,10 +110,10 @@ export default defineComponent({
}

return {
fromPickerSelectedDates: [startDate, startDate],
toPickerSelectedDates: [endDate, endDate],
fromPickerHighlightedDates: [null, null],
toPickerHighlightedDates: [null, null],
fromPickerSelectedDate: startDate,
toPickerSelectedDate: endDate,
fromPickerHoveredDate: null,
toPickerHoveredDate: null,
startDateText: this.startDate,
endDateText: this.endDate,
startDateInvalid: false,
Expand All @@ -135,12 +136,12 @@ export default defineComponent({
},
methods: {
setStartRangeDate(date: Date) {
this.fromPickerSelectedDates = [date, date];
this.fromPickerSelectedDate = date;

this.rangeChanged();
},
setEndRangeDate(date: Date) {
this.toPickerSelectedDates = [date, date];
this.toPickerSelectedDate = date;

this.rangeChanged();
},
Expand All @@ -153,12 +154,12 @@ export default defineComponent({
}
});
},
getNewHighlightedDates(date: Date, $cell: JQuery) {
getNewHoveredDate(date: Date, $cell: JQuery): Date|null {
if ($cell.hasClass('ui-datepicker-unselectable')) {
return null;
}

return [date, date];
return date;
},
handleEnterPress($event: KeyboardEvent) {
if ($event.keyCode !== 13) {
Expand All @@ -183,7 +184,7 @@ export default defineComponent({
}

if (startDateParsed) {
this.fromPickerSelectedDates = [startDateParsed, startDateParsed];
this.fromPickerSelectedDate = startDateParsed;
this.startDateInvalid = false;

this.rangeChanged();
Expand All @@ -202,16 +203,16 @@ export default defineComponent({
}

if (endDateParsed) {
this.toPickerSelectedDates = [endDateParsed, endDateParsed];
this.toPickerSelectedDate = endDateParsed;
this.endDateInvalid = false;

this.rangeChanged();
}
},
rangeChanged() {
this.$emit('rangeChange', {
start: this.fromPickerSelectedDates[0] ? format(this.fromPickerSelectedDates[0]) : null,
end: this.toPickerSelectedDates[0] ? format(this.toPickerSelectedDates[0]) : null,
start: this.fromPickerSelectedDate ? format(this.fromPickerSelectedDate) : null,
end: this.toPickerSelectedDate ? format(this.toPickerSelectedDate) : null,
});
},
},
Expand Down
Loading
Loading