zmp-ui
Version:
Zalo Mini App framework
132 lines (131 loc) • 5.01 kB
JavaScript
import React, { useCallback, useContext } from "react";
import classNames from "clsx";
import { getPrefixCls } from "../../utils/class";
import Button from "../button";
import Icon from "../icon";
import { CalendarContext } from "./context";
var CalendarHeaderTitle = function CalendarHeaderTitle(props) {
var children = props.children,
onClick = props.onClick;
var prefixCls = getPrefixCls("calendar-header-title");
return /*#__PURE__*/React.createElement("span", {
className: prefixCls,
onClick: onClick,
role: "presentation"
}, children);
};
var CalendarHeader = function CalendarHeader(props) {
var context = useContext(CalendarContext);
var rootClassName = props.rootClassName,
onNext = props.onNext,
onPrev = props.onPrev,
onTypeChange = props.onTypeChange,
currentValue = props.value;
var locale = context == null ? void 0 : context.locale;
var mode = context == null ? void 0 : context.mode;
// const [currentValue] = React.useState<Date>(value);
var prefixCls = getPrefixCls("calendar-header");
var classes = classNames(prefixCls, rootClassName);
var handleTypeChange = useCallback(function (type) {
onTypeChange(type);
}, [onTypeChange]);
var renderDateViewModeTitle = React.useMemo(function () {
var dateString = currentValue.toLocaleString(locale, {
month: "long",
year: "numeric"
});
var monthString = currentValue.toLocaleString(locale, {
month: "long"
});
var yearString = currentValue.toLocaleString(locale, {
year: "numeric"
});
var monthPosition = dateString.indexOf(monthString.toLocaleLowerCase());
if (monthPosition === 0) {
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CalendarHeaderTitle, {
onClick: function onClick() {
return handleTypeChange("month");
}
}, monthString), " ", /*#__PURE__*/React.createElement(CalendarHeaderTitle, {
onClick: function onClick() {
return handleTypeChange("year");
}
}, yearString));
}
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CalendarHeaderTitle, {
onClick: function onClick() {
return handleTypeChange("year");
}
}, yearString), " ", /*#__PURE__*/React.createElement(CalendarHeaderTitle, {
onClick: function onClick() {
return handleTypeChange("month");
}
}, monthString));
}, [currentValue, handleTypeChange, locale]);
var renderMonthViewModeTitle = React.useMemo(function () {
var yearString = currentValue.toLocaleString(locale, {
year: "numeric"
});
return /*#__PURE__*/React.createElement(CalendarHeaderTitle, {
onClick: function onClick() {
return handleTypeChange("year");
}
}, yearString);
}, [currentValue, handleTypeChange, locale]);
var renderYearViewModeTitle = React.useMemo(function () {
var currentYear = currentValue.getFullYear();
var decadeStartYear = Math.floor(currentYear / 10) * 10;
var decadeEndYear = decadeStartYear + 9;
var decadeString = decadeStartYear + " - " + decadeEndYear;
return /*#__PURE__*/React.createElement(CalendarHeaderTitle, {
onClick: function onClick() {
return handleTypeChange("decade");
}
}, decadeString);
}, [currentValue, handleTypeChange]);
var renderDecadeViewModeTitle = React.useMemo(function () {
var currentYear = currentValue.getFullYear();
var centuryStartYear = Math.floor(currentYear / 100) * 100;
var centuryEndYear = centuryStartYear + 99;
var centuryString = centuryStartYear + " - " + centuryEndYear;
return /*#__PURE__*/React.createElement(CalendarHeaderTitle, {
onClick: function onClick() {
return null;
}
}, centuryString);
}, [currentValue]);
var formattedTitle = React.useMemo(function () {
switch (mode) {
case "date":
return renderDateViewModeTitle;
case "month":
return renderMonthViewModeTitle;
case "year":
return renderYearViewModeTitle;
case "decade":
return renderDecadeViewModeTitle;
default:
return renderDateViewModeTitle;
}
}, [mode, renderDateViewModeTitle, renderMonthViewModeTitle, renderYearViewModeTitle, renderDecadeViewModeTitle]);
return /*#__PURE__*/React.createElement("div", {
className: classes
}, /*#__PURE__*/React.createElement(Button, {
className: prefixCls + "-btn-prev",
icon: /*#__PURE__*/React.createElement(Icon, {
icon: "zi-arrow-left"
}),
variant: "tertiary",
onClick: onPrev
}), /*#__PURE__*/React.createElement("div", {
className: prefixCls + "-title"
}, formattedTitle), /*#__PURE__*/React.createElement(Button, {
className: prefixCls + "-btn-next",
icon: /*#__PURE__*/React.createElement(Icon, {
icon: "zi-arrow-right"
}),
variant: "tertiary",
onClick: onNext
}));
};
export default CalendarHeader;