11import * as React from 'react' ;
22import type { ValueDate } from '../../interface' ;
3+ import moment from 'moment' ;
34
45export interface PresetPanelProps < ValueType = any > {
56 prefixCls : string ;
67 presets : ValueDate < ValueType > [ ] ;
78 onClick : ( value : ValueType ) => void ;
89 onHover : ( value : ValueType ) => void ;
10+ maxDate ?: dateTy ;
911}
1012
1113function executeValue < ValueType extends object > ( value : ValueDate < ValueType > [ 'value' ] ) : ValueType {
@@ -15,7 +17,7 @@ function executeValue<ValueType extends object>(value: ValueDate<ValueType>['val
1517export default function PresetPanel < DateType extends object = any > (
1618 props : PresetPanelProps < DateType > ,
1719) {
18- const { prefixCls, presets, onClick, onHover } = props ;
20+ const { prefixCls, presets, onClick, onHover, maxDate } = props ;
1921
2022 if ( ! presets . length ) {
2123 return null ;
@@ -24,22 +26,29 @@ export default function PresetPanel<DateType extends object = any>(
2426 return (
2527 < div className = { `${ prefixCls } -presets` } >
2628 < ul >
27- { presets . map ( ( { label, value } , index ) => (
28- < li
29- key = { index }
30- onClick = { ( ) => {
31- onClick ( executeValue ( value ) ) ;
32- } }
33- onMouseEnter = { ( ) => {
34- onHover ( executeValue ( value ) ) ;
35- } }
36- onMouseLeave = { ( ) => {
37- onHover ( null ) ;
38- } }
39- >
40- { label }
41- </ li >
42- ) ) }
29+ { presets . map ( ( { label, value } , index ) => {
30+ const isDisabled = moment ( value ) . isAfter ( maxDate ) || moment ( value ) . isSame ( maxDate ) ;
31+ return (
32+ < li
33+ key = { index }
34+ onClick = { ( ) => {
35+ if ( ! isDisabled ) {
36+ onClick ( executeValue ( value ) ) ;
37+ }
38+ } }
39+ onMouseEnter = { ( ) => {
40+ if ( ! isDisabled ) {
41+ onHover ( executeValue ( value ) ) ;
42+ }
43+ } }
44+ onMouseLeave = { ( ) => {
45+ onHover ( null ) ;
46+ } }
47+ >
48+ { label }
49+ </ li >
50+ ) ;
51+ } ) }
4352 </ ul >
4453 </ div >
4554 ) ;
0 commit comments