UNPKG

react-iztro

Version:

基于iztro实现的react紫微斗数星盘组件。A react component used to generate an astrolabe of ziweidoushu based on iztro.

229 lines (228 loc) 13.4 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.IzpalaceCenter = void 0; var classnames_1 = __importDefault(require("classnames")); var react_1 = __importStar(require("react")); var Item_1 = require("./Item"); require("./IzpalaceCenter.css"); var Line_1 = require("./Line"); var utils_1 = require("iztro/lib/utils"); var lunar_lite_1 = require("lunar-lite"); var i18n_1 = require("iztro/lib/i18n"); var data_1 = require("iztro/lib/data"); var IzpalaceCenter = function (_a) { var _b, _c; var astrolabe = _a.astrolabe, horoscope = _a.horoscope, arrowIndex = _a.arrowIndex, arrowScope = _a.arrowScope, _d = _a.horoscopeDate, horoscopeDate = _d === void 0 ? new Date() : _d, _e = _a.horoscopeHour, horoscopeHour = _e === void 0 ? 0 : _e, setHoroscopeDate = _a.setHoroscopeDate, setHoroscopeHour = _a.setHoroscopeHour, centerPalaceAlign = _a.centerPalaceAlign; var records = (0, react_1.useMemo)(function () { return [ { title: "五行局:", content: astrolabe === null || astrolabe === void 0 ? void 0 : astrolabe.fiveElementsClass, }, { title: "年龄(虚岁):", content: "".concat(horoscope === null || horoscope === void 0 ? void 0 : horoscope.age.nominalAge, " \u5C81"), }, { title: "四柱:", content: astrolabe === null || astrolabe === void 0 ? void 0 : astrolabe.chineseDate, }, { title: "阳历:", content: astrolabe === null || astrolabe === void 0 ? void 0 : astrolabe.solarDate, }, { title: "农历:", content: astrolabe === null || astrolabe === void 0 ? void 0 : astrolabe.lunarDate, }, { title: "时辰:", content: "".concat(astrolabe === null || astrolabe === void 0 ? void 0 : astrolabe.time, "(").concat(astrolabe === null || astrolabe === void 0 ? void 0 : astrolabe.timeRange, ")"), }, { title: "生肖:", content: astrolabe === null || astrolabe === void 0 ? void 0 : astrolabe.zodiac, }, { title: "星座:", content: astrolabe === null || astrolabe === void 0 ? void 0 : astrolabe.sign, }, { title: "命主:", content: astrolabe === null || astrolabe === void 0 ? void 0 : astrolabe.soul, }, { title: "身主:", content: astrolabe === null || astrolabe === void 0 ? void 0 : astrolabe.body, }, { title: "命宫:", content: astrolabe === null || astrolabe === void 0 ? void 0 : astrolabe.earthlyBranchOfSoulPalace, }, { title: "身宫:", content: astrolabe === null || astrolabe === void 0 ? void 0 : astrolabe.earthlyBranchOfBodyPalace, }, ]; }, [astrolabe, horoscope]); var horoDate = (0, react_1.useMemo)(function () { var dateStr = horoscopeDate !== null && horoscopeDate !== void 0 ? horoscopeDate : new Date(); var _a = (0, lunar_lite_1.normalizeDateStr)(dateStr), year = _a[0], month = _a[1], date = _a[2]; var dt = new Date(year, month - 1, date); return { solar: "".concat(year, "-").concat(month, "-").concat(date), lunar: (0, lunar_lite_1.solar2lunar)(dateStr).toString(true), prevDecadalDisabled: dt.setFullYear(dt.getFullYear() - 1), }; }, [horoscopeDate]); var onHoroscopeButtonClicked = function (scope, value) { if (!(astrolabe === null || astrolabe === void 0 ? void 0 : astrolabe.solarDate)) { return true; } var _a = (0, lunar_lite_1.normalizeDateStr)(horoscopeDate), year = _a[0], month = _a[1], date = _a[2]; var dt = new Date(year, month - 1, date); var _b = (0, lunar_lite_1.normalizeDateStr)(astrolabe.solarDate), birthYear = _b[0], birthMonth = _b[1], birthDate = _b[2]; var birthday = new Date(birthYear, birthMonth - 1, birthDate); var hour = horoscopeHour; switch (scope) { case "hourly": hour = horoscopeHour + value; if (horoscopeHour + value > 11) { // 如果大于亥时,则加一天,时辰变为早子时 dt.setDate(dt.getDate() + 1); hour = 0; } else if (horoscopeHour + value < 0) { // 如果小于早子时,则减一天,时辰变为亥时 dt.setDate(dt.getDate() - 1); hour = 11; } break; case "daily": dt.setDate(dt.getDate() + value); break; case "monthly": dt.setMonth(dt.getMonth() + value); break; case "yearly": case "decadal": dt.setFullYear(dt.getFullYear() + value); break; } if (dt.getTime() >= birthday.getTime()) { setHoroscopeDate === null || setHoroscopeDate === void 0 ? void 0 : setHoroscopeDate(dt); setHoroscopeHour === null || setHoroscopeHour === void 0 ? void 0 : setHoroscopeHour(hour); } }; var shouldBeDisabled = (0, react_1.useCallback)(function (dateStr, scope, value) { if (!(astrolabe === null || astrolabe === void 0 ? void 0 : astrolabe.solarDate)) { return true; } var _a = (0, lunar_lite_1.normalizeDateStr)(dateStr), year = _a[0], month = _a[1], date = _a[2]; var dt = new Date(year, month - 1, date); var _b = (0, lunar_lite_1.normalizeDateStr)(astrolabe.solarDate), birthYear = _b[0], birthMonth = _b[1], birthDate = _b[2]; var birthday = new Date(birthYear, birthMonth - 1, birthDate); switch (scope) { case "hourly": if (horoscopeHour + value > 11) { dt.setDate(dt.getDate() + 1); } else if (horoscopeHour + value < 0) { dt.setDate(dt.getDate() - 1); } break; case "daily": dt.setDate(dt.getDate() + value); break; case "monthly": dt.setMonth(dt.getMonth() + value); break; case "yearly": case "decadal": dt.setFullYear(dt.getFullYear() + value); break; } if (dt.getTime() < birthday.getTime()) { return true; } return false; }, [horoscopeHour, astrolabe]); return (react_1.default.createElement("div", { className: (0, classnames_1.default)("iztro-center-palace", { "iztro-center-palace-centralize": centerPalaceAlign, }) }, (astrolabe === null || astrolabe === void 0 ? void 0 : astrolabe.earthlyBranchOfSoulPalace) && (react_1.default.createElement(Line_1.Line, { scope: arrowScope, index: arrowIndex !== null && arrowIndex !== void 0 ? arrowIndex : (0, utils_1.fixEarthlyBranchIndex)(astrolabe.earthlyBranchOfSoulPalace) })), react_1.default.createElement("h3", { className: "center-title" }, react_1.default.createElement("span", { className: "gender gender-".concat((0, i18n_1.kot)((_b = astrolabe === null || astrolabe === void 0 ? void 0 : astrolabe.gender) !== null && _b !== void 0 ? _b : "")) }, (0, i18n_1.kot)((_c = astrolabe === null || astrolabe === void 0 ? void 0 : astrolabe.gender) !== null && _c !== void 0 ? _c : "") === "male" ? "♂" : "♀"), react_1.default.createElement("span", null, "\u57FA\u672C\u4FE1\u606F")), react_1.default.createElement("ul", { className: "basic-info" }, records.map(function (rec, idx) { return (react_1.default.createElement(Item_1.Item, __assign({ key: idx }, rec))); })), react_1.default.createElement("h3", { className: "center-title" }, "\u8FD0\u9650\u4FE1\u606F"), react_1.default.createElement("ul", { className: "basic-info" }, react_1.default.createElement(Item_1.Item, { title: "\u519C\u5386\uFF1A", content: horoDate.lunar }), react_1.default.createElement("div", { className: (0, classnames_1.default)("solar-horoscope", { "solar-horoscope-centralize": centerPalaceAlign, }) }, react_1.default.createElement(Item_1.Item, { title: "\u9633\u5386\uFF1A", content: horoDate.solar }), react_1.default.createElement("span", { className: "today", onClick: function () { return setHoroscopeDate === null || setHoroscopeDate === void 0 ? void 0 : setHoroscopeDate(new Date()); } }, "\u4ECA"))), react_1.default.createElement("div", { className: "horo-buttons" }, react_1.default.createElement("span", { className: (0, classnames_1.default)("center-button", { disabled: shouldBeDisabled(horoDate.solar, "yearly", -10), }), onClick: function () { return onHoroscopeButtonClicked("yearly", -10); } }, "\u25C0\u9650"), react_1.default.createElement("span", { className: (0, classnames_1.default)("center-button", { disabled: shouldBeDisabled(horoDate.solar, "yearly", -1), }), onClick: function () { return onHoroscopeButtonClicked("yearly", -1); } }, "\u25C0\u5E74"), react_1.default.createElement("span", { className: (0, classnames_1.default)("center-button", { disabled: shouldBeDisabled(horoDate.solar, "monthly", -1), }), onClick: function () { return onHoroscopeButtonClicked("monthly", -1); } }, "\u25C0\u6708"), react_1.default.createElement("span", { className: (0, classnames_1.default)("center-button", { disabled: shouldBeDisabled(horoDate.solar, "daily", -1), }), onClick: function () { return onHoroscopeButtonClicked("daily", -1); } }, "\u25C0\u65E5"), react_1.default.createElement("span", { className: (0, classnames_1.default)("center-button", { disabled: shouldBeDisabled(horoDate.solar, "hourly", -1), }), onClick: function () { return onHoroscopeButtonClicked("hourly", -1); } }, "\u25C0\u65F6"), react_1.default.createElement("span", { className: "center-horo-hour" }, (0, i18n_1.t)(data_1.CHINESE_TIME[horoscopeHour])), react_1.default.createElement("span", { className: (0, classnames_1.default)("center-button"), onClick: function () { return onHoroscopeButtonClicked("hourly", 1); } }, "\u65F6\u25B6"), react_1.default.createElement("span", { className: (0, classnames_1.default)("center-button"), onClick: function () { return onHoroscopeButtonClicked("daily", 1); } }, "\u65E5\u25B6"), react_1.default.createElement("span", { className: (0, classnames_1.default)("center-button"), onClick: function () { return onHoroscopeButtonClicked("monthly", 1); } }, "\u6708\u25B6"), react_1.default.createElement("span", { className: (0, classnames_1.default)("center-button"), onClick: function () { return onHoroscopeButtonClicked("yearly", 1); } }, "\u5E74\u25B6"), react_1.default.createElement("span", { className: (0, classnames_1.default)("center-button"), onClick: function () { return onHoroscopeButtonClicked("yearly", 10); } }, "\u9650\u25B6")), react_1.default.createElement("a", { className: "iztro-copyright", href: "https://github.com/sylarlong/iztro", target: "_blank" }, react_1.default.createElement("i", null, "Powered by ", react_1.default.createElement("code", null, "iztro"))))); }; exports.IzpalaceCenter = IzpalaceCenter;