ze-react-component-library
Version:
ZeroETP React Component Library
248 lines (202 loc) • 8.61 kB
JavaScript
;
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;