1+ import { getLocale } from "@symfony/ux-translator" ;
2+ import AirDatepicker from 'air-datepicker' ;
3+ import '../styles/lib/air-datepicker-custom.css' ;
4+ const datepickerLocale = await import ( 'air-datepicker/locale/' + getLocale ( ) + '.js' ) ;
5+
16const BTN_OPEN_FILTER = document . getElementById ( 'open-filter' ) ;
2- const BTN_CLOSE_FILER = document . getElementById ( 'close-filter' ) ;
7+ const BTN_CLOSE_FILTER = document . getElementById ( 'close-filter' ) ;
38const SIDEBAR = document . getElementById ( 'filter-sidebar' ) ;
49const MAIN_CONTENT = document . querySelector ( '.entity-container' ) ;
510const ENTITY_WRAPPER = document . querySelector ( '.entity-wrapper' ) ;
611const FORM_FILTER_SIDEBAR = document . getElementById ( 'filter-sidebar' ) ;
712const ORDER_SELECT = document . getElementById ( 'order-select' ) ;
13+ const PERIOD_SELECT = document . getElementById ( 'period' ) ;
14+ const BTN_APPLY_PERIOD_FILTER = document . getElementById ( 'apply-period-filter' ) ;
815
916BTN_OPEN_FILTER . addEventListener ( 'click' , toggleSidebar ) ;
10- BTN_CLOSE_FILER . addEventListener ( 'click' , toggleSidebar ) ;
17+ BTN_CLOSE_FILTER . addEventListener ( 'click' , toggleSidebar ) ;
1118
1219function toggleSidebar ( ) {
1320 SIDEBAR . classList . toggle ( 'open' ) ;
@@ -16,13 +23,13 @@ function toggleSidebar() {
1623
1724 if ( SIDEBAR . classList . contains ( 'open' ) ) {
1825 BTN_OPEN_FILTER . style . visibility = 'hidden' ;
19- BTN_OPEN_FILTER . style . opacity = 0 ;
26+ BTN_OPEN_FILTER . style . opacity = '0' ;
2027 return ;
2128 }
2229
2330 setTimeout ( ( ) => {
2431 BTN_OPEN_FILTER . style . visibility = 'visible' ;
25- BTN_OPEN_FILTER . style . opacity = 1 ;
32+ BTN_OPEN_FILTER . style . opacity = '1' ;
2633 } , 300 ) ;
2734}
2835
@@ -51,3 +58,63 @@ ORDER_SELECT.addEventListener('change', () => {
5158
5259 window . location . href = `${ window . location . pathname } ?${ params . toString ( ) } ` ;
5360} ) ;
61+
62+ const datepicker = new AirDatepicker ( document . getElementById ( 'datepicker' ) , {
63+ range : true ,
64+ multipleDates : true ,
65+ locale : await datepickerLocale . default . default ,
66+ onSelect : function ( { date, formattedDate } ) {
67+ const customPeriod = document . querySelector ( '#period option[data-name=custom]' ) ;
68+ customPeriod . classList . remove ( 'd-none' ) ;
69+ customPeriod . innerText = formattedDate . join ( ' - ' ) ;
70+
71+ customPeriod . value = date . map ( d => {
72+ return d . getFullYear ( ) + '-'
73+ + ( d . getMonth ( ) + 1 ) . toString ( ) . padStart ( 2 , '0' ) + '-'
74+ + d . getDate ( ) . toString ( ) . padStart ( 2 , '0' ) ;
75+ } ) . join ( ',' ) ;
76+ customPeriod . selected = true ;
77+ } ,
78+ } ) ;
79+
80+ PERIOD_SELECT . addEventListener ( 'change' , function ( ) {
81+ datepicker . clear ( { silent : true } ) ;
82+ const customPeriod = document . querySelector ( '#period option[data-name=custom]' ) ;
83+ customPeriod . classList . add ( 'd-none' ) ;
84+ customPeriod . innerText = '' ;
85+ } ) ;
86+
87+ BTN_APPLY_PERIOD_FILTER . addEventListener ( 'click' , function ( ) {
88+ const period = PERIOD_SELECT . value ;
89+ const url = new URL ( window . location . href ) ;
90+
91+ url . searchParams . set ( 'period' , period ) ;
92+
93+ window . location . href = url . toString ( ) ;
94+ } ) ;
95+
96+ ( function ( ) {
97+ const searchParams = new URLSearchParams ( window . location . search ) ;
98+
99+ new FormData ( FORM_FILTER_SIDEBAR ) . forEach ( function ( value , key ) {
100+ const element = FORM_FILTER_SIDEBAR . querySelector ( `[name=${ key } ]` ) ;
101+ if ( element ) {
102+ element . value = searchParams . get ( key ) ;
103+ }
104+ } ) ;
105+
106+ if ( '' === PERIOD_SELECT . value ) {
107+ const period = searchParams . get ( 'period' ) ;
108+ if ( period ) {
109+ const customPeriod = document . querySelector ( '#period option[data-name=custom]' ) ;
110+ const periodInnerText = period . split ( ',' ) . map ( date => {
111+ const [ year , month , day ] = date . split ( '-' ) ;
112+ return `${ day . padStart ( 2 , '0' ) } /${ month . padStart ( 2 , '0' ) } /${ year } ` ;
113+ } ) ;
114+
115+ customPeriod . value = period ;
116+ customPeriod . selected = 'selected' ;
117+ customPeriod . innerText = periodInnerText . join ( ' - ' ) ;
118+ }
119+ }
120+ } ) ( ) ;
0 commit comments