ant-design-vue
Version:
An enterprise-class UI design language and Vue-based implementation
167 lines • 5.73 kB
JavaScript
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import { createVNode as _createVNode } from "vue";
import Select from '../select';
import { Group, Button } from '../radio';
import { defineComponent, ref } from 'vue';
var YearSelectOffset = 10;
var YearSelectTotal = 20;
function YearSelect(props) {
var fullscreen = props.fullscreen,
validRange = props.validRange,
generateConfig = props.generateConfig,
locale = props.locale,
prefixCls = props.prefixCls,
value = props.value,
_onChange = props.onChange,
divRef = props.divRef;
var year = generateConfig.getYear(value || generateConfig.getNow());
var start = year - YearSelectOffset;
var end = start + YearSelectTotal;
if (validRange) {
start = generateConfig.getYear(validRange[0]);
end = generateConfig.getYear(validRange[1]) + 1;
}
var suffix = locale && locale.year === '年' ? '年' : '';
var options = [];
for (var index = start; index < end; index++) {
options.push({
label: "".concat(index).concat(suffix),
value: index
});
}
return _createVNode(Select, {
"size": fullscreen ? undefined : 'small',
"options": options,
"value": year,
"class": "".concat(prefixCls, "-year-select"),
"onChange": function onChange(numYear) {
var newDate = generateConfig.setYear(value, numYear);
if (validRange) {
var _validRange = _slicedToArray(validRange, 2),
startDate = _validRange[0],
endDate = _validRange[1];
var newYear = generateConfig.getYear(newDate);
var newMonth = generateConfig.getMonth(newDate);
if (newYear === generateConfig.getYear(endDate) && newMonth > generateConfig.getMonth(endDate)) {
newDate = generateConfig.setMonth(newDate, generateConfig.getMonth(endDate));
}
if (newYear === generateConfig.getYear(startDate) && newMonth < generateConfig.getMonth(startDate)) {
newDate = generateConfig.setMonth(newDate, generateConfig.getMonth(startDate));
}
}
_onChange(newDate);
},
"getPopupContainer": function getPopupContainer() {
return divRef.value;
}
}, null);
}
YearSelect.inheritAttrs = false;
function MonthSelect(props) {
var prefixCls = props.prefixCls,
fullscreen = props.fullscreen,
validRange = props.validRange,
value = props.value,
generateConfig = props.generateConfig,
locale = props.locale,
_onChange2 = props.onChange,
divRef = props.divRef;
var month = generateConfig.getMonth(value || generateConfig.getNow());
var start = 0;
var end = 11;
if (validRange) {
var _validRange2 = _slicedToArray(validRange, 2),
rangeStart = _validRange2[0],
rangeEnd = _validRange2[1];
var currentYear = generateConfig.getYear(value);
if (generateConfig.getYear(rangeEnd) === currentYear) {
end = generateConfig.getMonth(rangeEnd);
}
if (generateConfig.getYear(rangeStart) === currentYear) {
start = generateConfig.getMonth(rangeStart);
}
}
var months = locale.shortMonths || generateConfig.locale.getShortMonths(locale.locale);
var options = [];
for (var index = start; index <= end; index += 1) {
options.push({
label: months[index],
value: index
});
}
return _createVNode(Select, {
"size": fullscreen ? undefined : 'small',
"class": "".concat(prefixCls, "-month-select"),
"value": month,
"options": options,
"onChange": function onChange(newMonth) {
_onChange2(generateConfig.setMonth(value, newMonth));
},
"getPopupContainer": function getPopupContainer() {
return divRef.value;
}
}, null);
}
MonthSelect.inheritAttrs = false;
function ModeSwitch(props) {
var prefixCls = props.prefixCls,
locale = props.locale,
mode = props.mode,
fullscreen = props.fullscreen,
onModeChange = props.onModeChange;
return _createVNode(Group, {
"onChange": function onChange(_ref) {
var value = _ref.target.value;
onModeChange(value);
},
"value": mode,
"size": fullscreen ? undefined : 'small',
"class": "".concat(prefixCls, "-mode-switch")
}, {
default: function _default() {
return [_createVNode(Button, {
"value": "month"
}, {
default: function _default() {
return [locale.month];
}
}), _createVNode(Button, {
"value": "year"
}, {
default: function _default() {
return [locale.year];
}
})];
}
});
}
ModeSwitch.inheritAttrs = false;
export default defineComponent({
name: 'CalendarHeader',
inheritAttrs: false,
props: ['mode', 'prefixCls', 'value', 'validRange', 'generateConfig', 'locale', 'mode', 'fullscreen'],
setup: function setup(_props, _ref2) {
var attrs = _ref2.attrs;
var divRef = ref(null);
return function () {
var props = _objectSpread(_objectSpread({}, _props), attrs);
var prefixCls = props.prefixCls,
fullscreen = props.fullscreen,
mode = props.mode,
onChange = props.onChange,
onModeChange = props.onModeChange;
var sharedProps = _objectSpread(_objectSpread({}, props), {}, {
onChange: onChange,
fullscreen: fullscreen,
divRef: divRef
});
return _createVNode("div", {
"class": "".concat(prefixCls, "-header"),
"ref": divRef
}, [_createVNode(YearSelect, sharedProps, null), mode === 'month' && _createVNode(MonthSelect, sharedProps, null), _createVNode(ModeSwitch, _objectSpread(_objectSpread({}, sharedProps), {}, {
"onModeChange": onModeChange
}), null)]);
};
}
});