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, getComponentFromProp, isValidElement } from '../_util/props-util' import BaseMixin from '../_util/BaseMixin' import { WeekPickerProps } from './interface' import interopDefault from '../_util/interopDefault' import { cloneElement } from '../_util/vnode' 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], model: { prop: 'value', event: 'change', }, 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 { _value: value, _open: this.open, } }, watch: { value (val) { this.setState({ _value: val }) }, open (val) { this.setState({ _open: val }) }, }, methods: { weekDateRender (current) { const selectedValue = this.$data._value 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({ _value: value }) } this.$emit('change', value, formatValue(value, this.format)) }, handleOpenChange (open) { if (!hasProp(this, 'open')) { this.setState({ _open: open }) } this.$emit('openChange', open) if (!open) { this.focus() } }, clearSelection (e) { e.preventDefault() e.stopPropagation() this.handleChange(null) }, focus () { this.$refs.input.focus() }, blur () { this.$refs.input.blur() }, }, render () { const props = getOptionProps(this) let suffixIcon = getComponentFromProp(this, 'suffixIcon') suffixIcon = Array.isArray(suffixIcon) ? suffixIcon[0] : suffixIcon const { prefixCls, disabled, pickerClass, popupStyle, pickerInputClass, format, allowClear, locale, localeCode, disabledDate, $data, $listeners, $scopedSlots, } = this const { _value: pickerValue, _open: open } = $data 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 && $data._value) ? ( ) : null const inputIcon = suffixIcon && ( isValidElement(suffixIcon) ? cloneElement( suffixIcon, { class: `${prefixCls}-picker-icon`, }, ) : {suffixIcon}) || ( ) const input = ({ value }) => { return ( {clearIcon} {inputIcon} ) } const vcDatePickerProps = { props: { ...props, calendar, prefixCls: `${prefixCls}-picker-container`, value: pickerValue, open, }, on: { ...$listeners, change: this.handleChange, openChange: this.handleOpenChange, }, style: popupStyle, } return ( {input} ) }, }