ze-react-component-library
Version:
ZeroETP React Component Library
144 lines (127 loc) • 4.45 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);
};
import { useRequest } from "@umijs/hooks";
import { requestAsk, requestLogicform } from "../request";
import { useState } from "react";
import React from "react";
import ZELogicformVisualizerList from "../ZELogicformVisualizerList";
function useAsk(_a) {
var question = _a.question,
askContext = _a.askContext,
isMobile = _a.isMobile,
formatAnswer = _a.formatAnswer,
onAnswerError = _a.onAnswerError,
_b = _a.debounceInterval,
debounceInterval = _b === void 0 ? 200 : _b;
var _c = useState(),
answer = _c[0],
_setAnswer = _c[1];
var _d = useState([]),
logicformsToChoose = _d[0],
setLogicformsToChoose = _d[1];
var _e = useState(false),
isResolvingLFs = _e[0],
setIsResolvingLFs = _e[1];
var setAnswer = function setAnswer(answer) {
var finalAnswer = formatAnswer ? formatAnswer(answer) : answer;
if (answer.error) {
onAnswerError === null || onAnswerError === void 0 ? void 0 : onAnswerError(finalAnswer);
}
_setAnswer(finalAnswer);
};
var _f = useRequest(function () {
if ((question === null || question === void 0 ? void 0 : question.length) > 0) {
return requestAsk(question || question, true, askContext);
}
return Promise.reject(null);
}, {
refreshDeps: [question],
debounceInterval: debounceInterval,
onSuccess: function onSuccess(result) {
if (result === null || result === void 0 ? void 0 : result.logicforms) {
// 20230910 - 去数据库全部执行一遍。只找有数据的
if (result.logicforms.length <= 10) {
setIsResolvingLFs(true);
Promise.all(result.logicforms.map(function (lf) {
return requestLogicform({
schema: lf.schema,
query: lf.query,
preds: [{
operator: "$count",
name: "c"
}]
});
})).then(function (results) {
setIsResolvingLFs(false);
var filteredLogicforms = result.logicforms.filter(function (_lf, index) {
return results[index].result[0].c > 0;
});
if (filteredLogicforms.length === 0) {
// 都没有数据
setLogicformsToChoose(result.logicforms);
} else if (filteredLogicforms.length > 1) {
setLogicformsToChoose(filteredLogicforms);
} else {
setLogicformsToChoose([]);
setAnswer({
question: question,
logicform: filteredLogicforms[0]
});
}
}).catch(function (e) {
console.log("error", e);
setIsResolvingLFs(false);
setLogicformsToChoose(result.logicforms);
});
} else {
setLogicformsToChoose(result.logicforms);
}
} else if ((result === null || result === void 0 ? void 0 : result.logicform) || (result === null || result === void 0 ? void 0 : result.error)) {
setLogicformsToChoose([]);
setAnswer(__assign({
question: question
}, result));
} else {
console.error("unexpected ask result: ", result);
}
}
}),
ask = _f.run,
asking = _f.loading;
var render = function render() {
return /*#__PURE__*/React.createElement(React.Fragment, null, (logicformsToChoose === null || logicformsToChoose === void 0 ? void 0 : logicformsToChoose.length) > 0 && /*#__PURE__*/React.createElement("div", {
style: {
marginTop: 10
}
}, /*#__PURE__*/React.createElement(ZELogicformVisualizerList, {
compact: isMobile,
isDrawer: isMobile,
logicforms: logicformsToChoose,
onClick: function onClick(logicform) {
setLogicformsToChoose([]);
setAnswer({
question: question,
logicform: logicform
});
}
})));
};
return {
logicformsToChoose: logicformsToChoose,
render: render,
loading: asking || isResolvingLFs,
ask: ask,
answer: answer
};
}
export default useAsk;