@@ -8,6 +8,12 @@ export function init(id, invoke, options) {
88 return
99 }
1010
11+ const popover = createPopover ( el , invoke , options ) ;
12+ const input = handlerInput ( el , popover ) ;
13+ Data . set ( id , { el, input, invoke, options, popover } ) ;
14+ }
15+
16+ const createPopover = ( el , invoke , options ) => {
1117 const popover = Popover . init ( el , {
1218 dropdownSelector : el . getAttribute ( 'data-bb-dropdown' ) ,
1319 isDisabled : ( ) => {
@@ -19,27 +25,47 @@ export function init(id, invoke, options) {
1925 }
2026 }
2127 } ) ;
28+ return popover ;
29+ }
30+
31+ const handlerInput = ( el , popover ) => {
2232 const input = el . querySelector ( '.datetime-picker-input' ) ;
23- const dateTimePicker = {
24- input,
25- popover
33+ if ( input ) {
34+ EventHandler . on ( input , 'keydown' , e => {
35+ if ( e . key === 'Tab' && popover . isShown ( ) ) {
36+ popover . hide ( ) ;
37+ }
38+ } ) ;
39+ EventHandler . on ( input , 'keyup' , e => {
40+ if ( e . key === 'Escape' ) {
41+ popover . hide ( ) ;
42+ input . blur ( ) ;
43+ }
44+ else if ( e . key === 'Tab' ) {
45+ popover . show ( ) ;
46+ }
47+ } ) ;
2648 }
27- Data . set ( id , dateTimePicker ) ;
49+ return input ;
50+ }
2851
29- EventHandler . on ( input , 'keydown' , e => {
30- if ( e . key === 'Tab' && popover . isShown ( ) ) {
31- popover . hide ( ) ;
32- }
33- } ) ;
34- EventHandler . on ( input , 'keyup' , e => {
35- if ( e . key === 'Escape' ) {
36- popover . hide ( ) ;
37- input . blur ( ) ;
38- }
39- else if ( e . key === 'Tab' ) {
40- popover . show ( ) ;
41- }
42- } ) ;
52+ const disposeInput = input => {
53+ if ( input ) {
54+ EventHandler . off ( input , 'keydown' ) ;
55+ EventHandler . off ( input , 'keyup' ) ;
56+ }
57+ }
58+
59+ export function reset ( id ) {
60+ const picker = Data . get ( id ) ;
61+ if ( picker ) {
62+ const { el, input, popover, invoke, options } = picker ;
63+ disposeInput ( input ) ;
64+ Popover . dispose ( popover ) ;
65+
66+ picker . popover = createPopover ( el , invoke , options ) ;
67+ picker . input = handlerInput ( picker . el , picker . popover ) ;
68+ }
4369}
4470
4571export function hide ( id ) {
@@ -55,8 +81,7 @@ export function dispose(id) {
5581
5682 if ( data ) {
5783 const { input, popover } = data ;
58- EventHandler . off ( input , 'keydown' ) ;
59- EventHandler . off ( input , 'keyup' ) ;
84+ disposeInput ( input ) ;
6085 Popover . dispose ( popover )
6186 }
6287}
0 commit comments