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
JavaScript
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;
;