@@ -226,18 +226,54 @@ class ScatterplotRenderer extends UIControlsRenderer {
226226 }
227227 }
228228
229- setBaselineListener ( baselineStartDateSelector , baselineEndDateSelector ) {
230- this . baselineStartDateElement = document . querySelector ( baselineStartDateSelector ) ;
229+ setBaselineListener ( baselineStartDateSelector , baselineEndDateSelector , baselineErrorSelector , namespace ) {
230+ const lastIndex = this . data . length - 1 ;
231+ this . baselineStartDateElement = d3 . select ( baselineStartDateSelector ) ;
231232 if ( this . baselineStartDateElement ) {
232- this . baselineStartDateElement . addEventListener ( 'change' , ( event ) => {
233- this . baselineStartDate = new Date ( event . target . value ) ;
233+ this . baselineStartDateElement . attr ( 'min' , new Date ( this . data [ 0 ] . deliveredDate ) . toISOString ( ) . split ( 'T' ) [ 0 ] ) ;
234+ this . baselineStartDateElement . attr ( 'max' , new Date ( this . data [ lastIndex ] . deliveredDate ) . toISOString ( ) . split ( 'T' ) [ 0 ] ) ;
235+ this . baselineStartDateElement . on ( `change.${ namespace } ` , ( event ) => {
236+ const selectedValue = d3 . select ( event . target ) . property ( 'value' ) ;
237+ this . baselineStartDate = new Date ( selectedValue ) ;
238+
239+ if ( this . baselineEndDate && this . baselineStartDate > this . baselineEndDate ) {
240+ d3 . select ( baselineErrorSelector ) . style ( 'display' , 'block' ) . text ( 'Start date cannot be later than end date.' ) ;
241+
242+ // Reset the end date to the start date
243+ this . baselineEndDateElement . property ( 'value' , selectedValue ) ;
244+ this . baselineEndDate = new Date ( selectedValue ) ;
245+
246+ // Hide the error message after 3 seconds
247+ setTimeout ( ( ) => {
248+ d3 . select ( baselineErrorSelector ) . style ( 'display' , 'none' ) ;
249+ } , 3000 ) ;
250+ }
251+
234252 this . updateGraph ( this . selectedTimeRange ) ;
235253 } ) ;
236254 }
237- this . baselineEndDateElement = document . querySelector ( baselineEndDateSelector ) ;
255+
256+ this . baselineEndDateElement = d3 . select ( baselineEndDateSelector ) ;
238257 if ( this . baselineEndDateElement ) {
239- this . baselineEndDateElement . addEventListener ( 'change' , ( event ) => {
240- this . baselineEndDate = new Date ( event . target . value ) ;
258+ this . baselineEndDateElement . attr ( 'min' , new Date ( this . data [ 0 ] . deliveredDate ) . toISOString ( ) . split ( 'T' ) [ 0 ] ) ;
259+ this . baselineEndDateElement . attr ( 'max' , new Date ( this . data [ lastIndex ] . deliveredDate ) . toISOString ( ) . split ( 'T' ) [ 0 ] ) ;
260+ this . baselineEndDateElement . on ( `change.${ namespace } ` , ( event ) => {
261+ const selectedValue = d3 . select ( event . target ) . property ( 'value' ) ;
262+ this . baselineEndDate = new Date ( selectedValue ) ;
263+
264+ if ( this . baselineStartDate && this . baselineStartDate > this . baselineEndDate ) {
265+ d3 . select ( baselineErrorSelector ) . style ( 'display' , 'block' ) . text ( 'End date cannot be earlier than start date.' ) ;
266+
267+ // Reset the start date to the end date
268+ this . baselineStartDateElement . property ( 'value' , selectedValue ) ;
269+ this . baselineStartDate = new Date ( selectedValue ) ;
270+
271+ // Hide the error message after 3 seconds
272+ setTimeout ( ( ) => {
273+ d3 . select ( baselineErrorSelector ) . style ( 'display' , 'none' ) ;
274+ } , 3000 ) ;
275+ }
276+
241277 this . updateGraph ( this . selectedTimeRange ) ;
242278 } ) ;
243279 }
0 commit comments