UNPKG

ze-react-component-library

Version:
248 lines (202 loc) 8.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _request = require("../request"); var _moment = _interopRequireDefault(require("moment")); var _util = require("../util"); var _react = require("react"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var hasLastPeriodPred = function hasLastPeriodPred(preds) { return preds.find(function (p) { return p.operator === "$mom" || p.operator === "$yoy" || p.operator === "$wow" || p.operator === "$splm" || p.operator === "$sply" || p.operator === "$splw"; }); }; var calcPercentageResult = function calcPercentageResult(thisPeriod, lastPeriod, property) { if (typeof lastPeriod !== "number" || typeof thisPeriod !== "number") { return {}; } if (lastPeriod === 0) { return {}; } var trend = undefined; if (thisPeriod > lastPeriod) trend = "up"; if (thisPeriod < lastPeriod) trend = "down"; if (property === null || property === void 0 ? void 0 : property.use_minus_on_mom) { return { value: thisPeriod - lastPeriod, trend: trend, thisPeriod: thisPeriod, lastPeriod: lastPeriod }; } return { value: thisPeriod / lastPeriod - 1, trend: trend, thisPeriod: thisPeriod, lastPeriod: lastPeriod }; }; var getYoyMomLogicform = function getYoyMomLogicform(logicForm, type) { var operator = type === "yoy" ? "$sply" : "$splm"; var lf = JSON.parse(JSON.stringify(logicForm)); lf.preds = lf.preds.map(function (d) { if (d && _typeof(d) === "object") { if (d.operator === "$sum" && !d.by) { return { operator: operator, pred: d.pred, query: d.query, schema: d.schema, params: d.params }; } return { operator: operator, pred: { operator: d.operator, pred: d.pred }, query: d.query, schema: d.schema, params: d.params, by: d.by }; } return d; }); return lf; }; function useYoyMom(_a) { var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; var data = _a.data, showYoyAndMom = _a.showYoyAndMom, upColor = _a.upColor, downColor = _a.downColor; var _m = (0, _react.useState)(), lyLF = _m[0], setLyLF = _m[1]; // last year logicform,用来计算同比 var _o = (0, _react.useState)(), lmLF = _o[0], setLmLF = _o[1]; // last month logicform, 用来计算环比 var _p = (0, _react.useState)(), yoyData = _p[0], setYoyData = _p[1]; var _q = (0, _react.useState)(), momData = _q[0], setMomData = _q[1]; var timestampProperty = (0, _react.useMemo)(function () { var _a, _b; if ((data === null || data === void 0 ? void 0 : data.schema) && ((_a = data === null || data === void 0 ? void 0 : data.logicform) === null || _a === void 0 ? void 0 : _a.query)) { var queryKeys_1 = Object.keys((_b = data === null || data === void 0 ? void 0 : data.logicform) === null || _b === void 0 ? void 0 : _b.query); return data.schema.properties.filter(function (f) { return queryKeys_1.includes(f.name); }).find(function (p) { return ["timestamp", "date"].includes(p.type); }); } return undefined; }, [data]); var shouldSplitByYear = false; if (showYoyAndMom && ((_b = data === null || data === void 0 ? void 0 : data.logicform) === null || _b === void 0 ? void 0 : _b.query) && ((_c = data === null || data === void 0 ? void 0 : data.schema) === null || _c === void 0 ? void 0 : _c.type) === "event" && timestampProperty) { if (timestampProperty.name in ((_d = data === null || data === void 0 ? void 0 : data.logicform) === null || _d === void 0 ? void 0 : _d.query) && _typeof((_e = data === null || data === void 0 ? void 0 : data.logicform) === null || _e === void 0 ? void 0 : _e.query[timestampProperty.name]) === 'object' && ((_f = data === null || data === void 0 ? void 0 : data.logicform) === null || _f === void 0 ? void 0 : _f.query[timestampProperty.name].$gte) && ((_g = data === null || data === void 0 ? void 0 : data.logicform) === null || _g === void 0 ? void 0 : _g.query[timestampProperty.name].$lte)) { var startDate = (0, _moment.default)(data.logicform.query[timestampProperty.name].$gte); var endDate = (0, _moment.default)(data.logicform.query[timestampProperty.name].$lte); if (endDate.diff(startDate, "year", true) > 1) { shouldSplitByYear = true; } } else if (!(timestampProperty.name in data.logicform.query)) { shouldSplitByYear = true; } } var getYoyMom = function getYoyMom(_property, index) { var _a; if (index === void 0) { index = 0; } var yoy; var yoyLF; // 这是真实的yoyLF,preds是$yoy的那种。 // 默认为第一个property var property = _property || ((_a = data === null || data === void 0 ? void 0 : data.columnProperties) === null || _a === void 0 ? void 0 : _a[0]); var getVal = function getVal(d) { var _a, _b, _c, _d; return (_b = (_a = d === null || d === void 0 ? void 0 : d.result) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b[(_d = (_c = d === null || d === void 0 ? void 0 : d.columnProperties) === null || _c === void 0 ? void 0 : _c[index]) === null || _d === void 0 ? void 0 : _d.name]; }; if (data && yoyData) { yoy = calcPercentageResult(getVal(data), getVal(yoyData), property); try { yoyLF = (0, _util.genYoyAndMomLogicform)(data.logicform, "$yoy"); } catch (error) {} } var mom; var momLF; // 这是真实的momLF,preds是$mom的那种 if (data && momData) { mom = calcPercentageResult(getVal(data), getVal(momData), property); try { momLF = (0, _util.genYoyAndMomLogicform)(data.logicform, "$mom"); } catch (error) {} } return { yoy: yoy, yoyLF: yoyLF, mom: mom, momLF: momLF }; }; var _r = { lyTip: (_j = (_h = yoyData === null || yoyData === void 0 ? void 0 : yoyData.columnProperties) === null || _h === void 0 ? void 0 : _h[0]) === null || _j === void 0 ? void 0 : _j.description, lmTip: (_l = (_k = momData === null || momData === void 0 ? void 0 : momData.columnProperties) === null || _k === void 0 ? void 0 : _k[0]) === null || _l === void 0 ? void 0 : _l.description }, lyTip = _r.lyTip, lmTip = _r.lmTip; var hideMom = lyTip && lmTip && lyTip === lmTip; (0, _react.useEffect)(function () { var _a, _b; // 跨年的话,不计算同环比 if (shouldSplitByYear) { setLyLF(null); setLmLF(null); return; } if ((data === null || data === void 0 ? void 0 : data.schema) && data.schema.type === "event" && (data === null || data === void 0 ? void 0 : data.logicform) && !hasLastPeriodPred((_a = data === null || data === void 0 ? void 0 : data.logicform) === null || _a === void 0 ? void 0 : _a.preds) && // 已经有yoy或mom的不要再显示了 timestampProperty) { if ((_b = data.logicform.query) === null || _b === void 0 ? void 0 : _b[timestampProperty.name]) { setLyLF(getYoyMomLogicform(data.logicform, "yoy")); setLmLF(getYoyMomLogicform(data.logicform, "mom")); } } }, [data, shouldSplitByYear, timestampProperty]); (0, _react.useEffect)(function () { if (lyLF && showYoyAndMom) { (0, _request.requestLogicform)(lyLF, true).then(setYoyData); } else { setYoyData(undefined); } }, [lyLF]); (0, _react.useEffect)(function () { if (lmLF && showYoyAndMom) { (0, _request.requestLogicform)(lmLF, true).then(setMomData); } else { setMomData(undefined); } }, [lmLF]); return { timestampProperty: timestampProperty, shouldSplitByYear: shouldSplitByYear, lyLF: lyLF, lyTip: lyTip, lmTip: lmTip, lmLF: lmLF, yoyData: yoyData, momData: momData, getYoyMom: getYoyMom, hideMom: hideMom, colors: { up: upColor || "#1BCC42", down: downColor || "#FF4F7A" } }; } var _default = useYoyMom; exports.default = _default;