@@ -47,15 +47,43 @@ export class FcDatePicker extends DatePicker {
47
47
}
48
48
} ;
49
49
50
- const _getStyle = key => {
51
- return this . _styles [ key ] || ( this . _styles [ key ] = this . $server . fetchStyles ( key ) ) ;
50
+ const _getStyle = month => {
51
+ const tostr = date => date . toISOString ( ) . substr ( 0 , 7 ) ;
52
+ const add = ( date , delta ) => new Date ( date . getFullYear ( ) , date . getMonth ( ) + delta , 1 ) ;
53
+
54
+ const key = tostr ( month ) ;
55
+
56
+ if ( ! this . _styles [ key ] ) {
57
+ let min = month ;
58
+ let max = month ;
59
+ const N = 50 ;
60
+ for ( let i = 0 ; i < N ; i ++ ) {
61
+ min = add ( min , - 1 ) ;
62
+ if ( this . _styles [ tostr ( min ) ] ) { min = add ( min , + 1 ) ; break ; }
63
+ }
64
+ for ( let i = 0 ; i < N ; i ++ ) {
65
+ max = add ( max , + 1 ) ;
66
+ if ( this . _styles [ tostr ( max ) ] ) { max = add ( max , - 1 ) ; break ; }
67
+ }
68
+
69
+ const fetched = this . $server . fetchStyles ( tostr ( min ) , tostr ( max ) ) . catch ( err => {
70
+ console . error ( 'fetchStyles ' + tostr ( min ) + ' ' + tostr ( max ) + ' failed' , err ) ;
71
+ return { } ;
72
+ } ) ;
73
+ for ( let m = min ; m <= max ; m = add ( m , 1 ) ) {
74
+ const k = tostr ( m ) ;
75
+ this . _styles [ k ] = new Promise ( resolve => {
76
+ fetched . then ( styles => resolve ( styles [ k ] || { } ) ) ;
77
+ } ) ;
78
+ }
79
+ }
80
+ return this . _styles [ key ] ;
52
81
}
53
82
54
83
const _updateMonthStyles = function ( element ) {
55
84
const month = element . month ;
56
- const key = month . toISOString ( ) . substr ( 0 , 7 ) ;
57
85
_clearStyles . call ( element ) ;
58
- _getStyle ( key ) . then ( styles => setTimeout ( ( ) => {
86
+ _getStyle ( month ) . then ( styles => setTimeout ( ( ) => {
59
87
if ( element . month === month ) {
60
88
for ( let i in styles ) {
61
89
_setStyleForDay . call ( element , i , styles [ i ] ) ;
@@ -77,7 +105,7 @@ export class FcDatePicker extends DatePicker {
77
105
setTimeout ( ( ) => _updateMonthStyles ( calendar ) ) ;
78
106
}
79
107
} ) ;
80
- return calendar ;
108
+ return calendar ;
81
109
}
82
110
}
83
111
} ;
0 commit comments