import * as moment from 'moment' import Calendar from '../vc-calendar' import VcDatePicker from '../vc-calendar/src/Picker' import Icon from '../icon' import { hasProp, getOptionProps, initDefaultProps } from '../_util/props-util' import BaseMixin from '../_util/BaseMixin' import { WeekPickerProps } from './interface' import interopDefault from '../_util/interopDefault' function formatValue (value, format) { return (value && value.format(format)) || '' } function noop () {} export default { // static defaultProps = { // format: 'YYYY-wo', // allowClear: true, // }; // private input: any; props: initDefaultProps(WeekPickerProps(), { format: 'gggg-wo', allowClear: true, }), name: 'AWeekPicker', mixins: [BaseMixin], data () { const value = this.value || this.defaultValue if (value && !interopDefault(moment).isMoment(value)) { throw new Error( 'The value/defaultValue of DatePicker or MonthPicker must be ' + 'a moment object', ) } return { sValue: value, } }, watch: { value (val) { this.setState({ sValue: val }) }, }, methods: { weekDateRender (current) { const selectedValue = this.sValue const { prefixCls } = this if (selectedValue && current.year() === selectedValue.year() && current.week() === selectedValue.week()) { return (
{current.date()}
) } return (
{current.date()}
) }, handleChange (value) { if (!hasProp(this, 'value')) { this.setState({ sValue: value }) } this.$emit('change', value, formatValue(value, this.format)) }, clearSelection (e) { e.preventDefault() e.stopPropagation() this.handleChange(null) }, focus () { this.$refs.input.focus() }, blur () { this.$refs.input.blur() }, }, render () { const props = getOptionProps(this) const { prefixCls, disabled, pickerClass, popupStyle, pickerInputClass, format, allowClear, locale, localeCode, disabledDate, sValue: pickerValue, $listeners, $scopedSlots, } = this const { focus = noop, blur = noop } = $listeners if (pickerValue && localeCode) { pickerValue.locale(localeCode) } const placeholder = hasProp(this, 'placeholder') ? this.placeholder : locale.lang.placeholder const weekDateRender = this.dateRender || $scopedSlots.dateRender || this.weekDateRender const calendar = ( ) const clearIcon = (!disabled && allowClear && this.sValue) ? ( ) : null const input = ({ value }) => { return ( {clearIcon} ) } const vcDatePickerProps = { props: { ...props, calendar, prefixCls: `${prefixCls}-picker-container`, value: pickerValue, }, on: { ...$listeners, change: this.handleChange, }, style: popupStyle, } return ( {input} ) }, }