update date-picker demo
							parent
							
								
									6933375351
								
							
						
					
					
						commit
						2b9a433db0
					
				|  | @ -182,13 +182,14 @@ export default { | |||
|     }, | ||||
| 
 | ||||
|     renderFooter (...args) { | ||||
|       const { prefixCls, ranges, renderExtraFooter } = this | ||||
|       const { prefixCls, ranges, $scopedSlots, $slots } = this | ||||
|       const renderExtraFooter = this.renderExtraFooter || $scopedSlots.renderExtraFooter || $slots.renderExtraFooter | ||||
|       if (!ranges && !renderExtraFooter) { | ||||
|         return null | ||||
|       } | ||||
|       const customFooter = renderExtraFooter ? ( | ||||
|         <div class={`${prefixCls}-footer-extra`} key='extra'> | ||||
|           {renderExtraFooter(...args)} | ||||
|           {typeof renderExtraFooter === 'function' ? renderExtraFooter(...args) : renderExtraFooter} | ||||
|         </div> | ||||
|       ) : null | ||||
|       const operations = Object.keys(ranges || {}).map((range) => { | ||||
|  |  | |||
|  | @ -51,10 +51,11 @@ export default function createPicker (TheCalendar, props) { | |||
|     }, | ||||
|     methods: { | ||||
|       renderFooter (...args) { | ||||
|         const { prefixCls, renderExtraFooter } = this | ||||
|         const { prefixCls, $scopedSlots, $slots } = this | ||||
|         const renderExtraFooter = this.renderExtraFooter || $scopedSlots.renderExtraFooter || $slots.renderExtraFooter | ||||
|         return renderExtraFooter ? ( | ||||
|           <div class={`${prefixCls}-footer-extra`}> | ||||
|             {renderExtraFooter(...args)} | ||||
|             {typeof renderExtraFooter === 'function' ? renderExtraFooter(...args) : renderExtraFooter} | ||||
|           </div> | ||||
|         ) : null | ||||
|       }, | ||||
|  |  | |||
|  | @ -1,34 +1,37 @@ | |||
| --- | ||||
| order: 4 | ||||
| title: | ||||
|   zh-CN: 禁用 | ||||
|   en-US: Disabled | ||||
| --- | ||||
| 
 | ||||
| ## zh-CN | ||||
| 
 | ||||
| <cn> | ||||
| #### 禁用 | ||||
| 选择框的不可用状态。 | ||||
| </cn> | ||||
| 
 | ||||
| ## en-US | ||||
| 
 | ||||
| <us> | ||||
| #### Disabled | ||||
| A disabled state of the `DatePicker`. | ||||
| </us> | ||||
| 
 | ||||
| ````jsx | ||||
| import { DatePicker } from 'antd'; | ||||
| import moment from 'moment'; | ||||
| const { MonthPicker, RangePicker } = DatePicker; | ||||
| 
 | ||||
| const dateFormat = 'YYYY-MM-DD'; | ||||
| ReactDOM.render( | ||||
| ```html | ||||
| <template> | ||||
|   <div> | ||||
|     <DatePicker defaultValue={moment('2015-06-06', dateFormat)} disabled /> | ||||
|     <a-date-picker :defaultValue="moment('2015-06-06', dateFormat)" disabled /> | ||||
|     <br /> | ||||
|     <MonthPicker defaultValue={moment('2015-06', 'YYYY-MM')} disabled /> | ||||
|     <a-month-picker :defaultValue="moment('2015-06', 'YYYY-MM')" disabled /> | ||||
|     <br /> | ||||
|     <RangePicker | ||||
|       defaultValue={[moment('2015-06-06', dateFormat), moment('2015-06-06', dateFormat)]} | ||||
|     <a-range-picker | ||||
|       :defaultValue="[moment('2015-06-06', dateFormat), moment('2015-06-06', dateFormat)]" | ||||
|       disabled | ||||
|     /> | ||||
|   </div> | ||||
| , mountNode); | ||||
| ```` | ||||
| </template> | ||||
| <script> | ||||
| import moment from 'moment'; | ||||
| export default { | ||||
|   data(){ | ||||
|     this.dateFormat = 'YYYY-MM-DD' | ||||
|     return {} | ||||
|   }, | ||||
|   methods: { | ||||
|     moment, | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| ``` | ||||
|  |  | |||
|  | @ -1,29 +1,42 @@ | |||
| --- | ||||
| order: 10 | ||||
| title: | ||||
|   zh-CN: 额外的页脚 | ||||
|   en-US: Extra Footer | ||||
| --- | ||||
| 
 | ||||
| ## zh-CN | ||||
| 
 | ||||
| <cn> | ||||
| #### 额外的页脚 | ||||
| 在浮层中加入额外的页脚,以满足某些定制信息的需求。 | ||||
| </cn> | ||||
| 
 | ||||
| ## en-US | ||||
| 
 | ||||
| <us> | ||||
| #### Extra Footer | ||||
| Render extra footer in panel for customized requirements. | ||||
| </us> | ||||
| 
 | ||||
| ````jsx | ||||
| import { DatePicker } from 'antd'; | ||||
| const { RangePicker, MonthPicker } = DatePicker; | ||||
| 
 | ||||
| ReactDOM.render( | ||||
| ```html | ||||
| <template> | ||||
|   <div> | ||||
|     <DatePicker renderExtraFooter={() => 'extra footer'} /> | ||||
|     <DatePicker renderExtraFooter={() => 'extra footer'} showTime /> | ||||
|     <RangePicker renderExtraFooter={() => 'extra footer'} /> | ||||
|     <RangePicker renderExtraFooter={() => 'extra footer'} showTime /> | ||||
|     <MonthPicker renderExtraFooter={() => 'extra footer'} placeholder="Select month" /> | ||||
|     <a-date-picker> | ||||
|       <template slot="renderExtraFooter"> | ||||
|         extra footer | ||||
|       </template> | ||||
|     </a-date-picker> | ||||
|     <a-date-picker showTime > | ||||
|       <template slot="renderExtraFooter"> | ||||
|         extra footer | ||||
|       </template> | ||||
|     </a-date-picker> | ||||
|     <a-range-picker > | ||||
|       <template slot="renderExtraFooter"> | ||||
|         extra footer | ||||
|       </template> | ||||
|     </a-range-picker> | ||||
|     <a-range-picker showTime > | ||||
|       <template slot="renderExtraFooter"> | ||||
|         extra footer | ||||
|       </template> | ||||
|     </a-range-picker> | ||||
|     <a-month-picker placeholder="Select month" > | ||||
|       <template slot="renderExtraFooter"> | ||||
|         extra footer | ||||
|       </template> | ||||
|     </a-month-picker> | ||||
|   </div> | ||||
| , mountNode); | ||||
| ```` | ||||
| </template> | ||||
| ``` | ||||
|  |  | |||
|  | @ -1,35 +1,40 @@ | |||
| --- | ||||
| order: 1 | ||||
| title: | ||||
|   zh-CN: 日期格式 | ||||
|   en-US: Date Format | ||||
| --- | ||||
| 
 | ||||
| ## zh-CN | ||||
| 
 | ||||
| <cn> | ||||
| #### 日期格式 | ||||
| 使用 `format` 属性,可以自定义日期显示格式。 | ||||
| </cn> | ||||
| 
 | ||||
| ## en-US | ||||
| 
 | ||||
| <us> | ||||
| #### Date Format | ||||
| We can set the date format by `format`. | ||||
| </us> | ||||
| 
 | ||||
| ````jsx | ||||
| import { DatePicker } from 'antd'; | ||||
| import moment from 'moment'; | ||||
| const { MonthPicker, RangePicker } = DatePicker; | ||||
| 
 | ||||
| const dateFormat = 'YYYY/MM/DD'; | ||||
| const monthFormat = 'YYYY/MM'; | ||||
| ReactDOM.render( | ||||
| ```html | ||||
| <template> | ||||
|   <div> | ||||
|     <DatePicker defaultValue={moment('2015/01/01', dateFormat)} format={dateFormat} /> | ||||
|     <a-date-picker :defaultValue="moment('2015/01/01', dateFormat)" :format="dateFormat" /> | ||||
|     <br /> | ||||
|     <MonthPicker defaultValue={moment('2015/01', monthFormat)} format={monthFormat} /> | ||||
|     <a-month-picker :defaultValue="moment('2015/01', monthFormat)" :format="monthFormat" /> | ||||
|     <br /> | ||||
|     <RangePicker | ||||
|       defaultValue={[moment('2015/01/01', dateFormat), moment('2015/01/01', dateFormat)]} | ||||
|       format={dateFormat} | ||||
|     <a-range-picker | ||||
|       :defaultValue="[moment('2015/01/01', dateFormat), moment('2015/01/01', dateFormat)]" | ||||
|       :format="dateFormat" | ||||
|     /> | ||||
|   </div> | ||||
| , mountNode); | ||||
| ```` | ||||
| </template> | ||||
| <script> | ||||
| import moment from 'moment'; | ||||
| export default { | ||||
|   data(){ | ||||
|     return { | ||||
|       dateFormat: 'YYYY/MM/DD', | ||||
|       monthFormat: 'YYYY/MM', | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     moment, | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| ``` | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,82 +1,61 @@ | |||
| --- | ||||
| order: 11 | ||||
| title: | ||||
|   zh-CN: 受控面板 | ||||
|   en-US: Controlled Panels | ||||
| --- | ||||
| 
 | ||||
| ## zh-CN | ||||
| 
 | ||||
| <cn> | ||||
| #### 受控面板 | ||||
| 通过组合 `mode` 与 `onPanelChange` 控制要展示的面板。 | ||||
| </cn> | ||||
| 
 | ||||
| ## en-US | ||||
| 
 | ||||
| <us> | ||||
| #### Controlled Panels | ||||
| Determing which panel to show with `mode` and `onPanelChange`. | ||||
| </us> | ||||
| 
 | ||||
| ````jsx | ||||
| import { DatePicker } from 'antd'; | ||||
| const { RangePicker } = DatePicker; | ||||
| 
 | ||||
| class ControlledDatePicker extends React.Component { | ||||
|   state = { mode: 'time' }; | ||||
| 
 | ||||
|   handleOpenChange = (open) => { | ||||
|     if (open) { | ||||
|       this.setState({ mode: 'time' }); | ||||
| ```html | ||||
| <template> | ||||
|   <div> | ||||
|     <a-date-picker | ||||
|       :mode="mode1" | ||||
|       showTime | ||||
|       @openChange="handleOpenChange1" | ||||
|       @panelChange="handlePanelChange1" | ||||
|     /> | ||||
|     <br /> | ||||
|     <a-range-picker | ||||
|       :placeholder="['Start month', 'End month']" | ||||
|       format="YYYY-MM" | ||||
|       :value="value" | ||||
|       :mode="mode2" | ||||
|       @panelChange="handlePanelChange2" | ||||
|     /> | ||||
|   </div> | ||||
| </template> | ||||
| <script> | ||||
| export default { | ||||
|   data(){ | ||||
|     return { | ||||
|       mode1: 'time', | ||||
|       mode2: ['month', 'month'], | ||||
|       value: [], | ||||
|     } | ||||
|   } | ||||
|   }, | ||||
|   methods: { | ||||
|     handleOpenChange1(open) { | ||||
|       if (open) { | ||||
|         this.mode1 = 'time' | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|   handlePanelChange = (value, mode) => { | ||||
|     this.setState({ mode }); | ||||
|   } | ||||
| 
 | ||||
|   render() { | ||||
|     return ( | ||||
|       <DatePicker | ||||
|         mode={this.state.mode} | ||||
|         showTime | ||||
|         onOpenChange={this.handleOpenChange} | ||||
|         onPanelChange={this.handlePanelChange} | ||||
|       /> | ||||
|     ); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| class ControlledRangePicker extends React.Component { | ||||
|   state = { | ||||
|     mode: ['month', 'month'], | ||||
|     value: [], | ||||
|   }; | ||||
| 
 | ||||
|   handlePanelChange = (value, mode) => { | ||||
|     this.setState({ | ||||
|       value, | ||||
|       mode: [ | ||||
|     handlePanelChange1(value, mode) { | ||||
|       this.mode1 = mode | ||||
|     }, | ||||
|     handlePanelChange2 (value, mode) { | ||||
|       this.value = value | ||||
|       this.mode2 = [ | ||||
|         mode[0] === 'date' ? 'month' : mode[0], | ||||
|         mode[1] === 'date' ? 'month' : mode[1], | ||||
|       ], | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   render() { | ||||
|     const { value, mode } = this.state; | ||||
|     return ( | ||||
|       <RangePicker | ||||
|         placeholder={['Start month', 'End month']} | ||||
|         format="YYYY-MM" | ||||
|         value={value} | ||||
|         mode={mode} | ||||
|         onPanelChange={this.handlePanelChange} | ||||
|       /> | ||||
|     ); | ||||
|       ] | ||||
|     }, | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| ``` | ||||
| 
 | ||||
| ReactDOM.render( | ||||
|   <div> | ||||
|     <ControlledDatePicker /> | ||||
|     <br /> | ||||
|     <ControlledRangePicker /> | ||||
|   </div> | ||||
| , mountNode); | ||||
| ```` | ||||
|  |  | |||
|  | @ -41,7 +41,7 @@ export const SinglePickerProps = () => ({ | |||
| 
 | ||||
| export const DatePickerProps = () => ({ | ||||
|   ...PickerProps(), ...SinglePickerProps(), | ||||
|   showTime: PropTypes.oneOfType([PropTypes.shape(TimePickerProps()).loose, PropTypes.bool]), | ||||
|   showTime: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]), | ||||
|   open: PropTypes.bool, | ||||
|   disabledTime: PropTypes.func, | ||||
|   // onOpenChange?: (status: bool) => void;
 | ||||
|  | @ -54,9 +54,15 @@ export const MonthPickerProps = () => ({ | |||
|   placeholder: PropTypes.string, | ||||
|   monthCellContentRender: PropTypes.func, | ||||
| }) | ||||
| function isMomentArray (value) { | ||||
|   if (Array.isArray(value)) { | ||||
|     return value.length === 0 || !!value.find((val) => val === undefined || moment.isMoment(val)) | ||||
|   } | ||||
|   return false | ||||
| } | ||||
| 
 | ||||
| export const RangePickerValue = PropTypes.arrayOf(MomentType) | ||||
| export const RangePickerPresetRange = PropTypes.oneOfType([RangePickerValue, PropTypes.func]) | ||||
| export const RangePickerValue = PropTypes.custom(isMomentArray) | ||||
| // export const RangePickerPresetRange = PropTypes.oneOfType([RangePickerValue, PropTypes.func])
 | ||||
| 
 | ||||
| export const RangePickerProps = () => ({ | ||||
|   ...PickerProps(), | ||||
|  | @ -66,7 +72,7 @@ export const RangePickerProps = () => ({ | |||
|   // onChange?: (dates: RangePickerValue, dateStrings: [string, string]) => void;
 | ||||
|   // onCalendarChange?: (dates: RangePickerValue, dateStrings: [string, string]) => void;
 | ||||
|   // onOk?: (selectedTime: moment.Moment) => void;
 | ||||
|   showTime: PropTypes.oneOfType([PropTypes.shape(TimePickerProps()).loose, PropTypes.bool]), | ||||
|   showTime: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]), | ||||
|   ranges: PropTypes.objectOf(String), | ||||
|   placeholder: PropTypes.arrayOf(String), | ||||
|   mode: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(String)]), | ||||
|  |  | |||
|  | @ -131,7 +131,11 @@ export default function wrapPicker (Picker, props, defaultFormat) { | |||
|         return ( | ||||
|           <Picker | ||||
|             {...pickerProps} | ||||
|           /> | ||||
|           > | ||||
|             <template slot='renderExtraFooter'> | ||||
|               {this.$slots.renderExtraFooter} | ||||
|             </template> | ||||
|           </Picker> | ||||
|         ) | ||||
|       }, | ||||
|     }, | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 tjz
						tjz