@ant-design/x
Version:
Craft AI-driven interfaces effortlessly
75 lines (73 loc) • 1.83 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.XAgent = void 0;
exports.default = useXAgent;
var _react = _interopRequireDefault(require("react"));
var _xRequest = _interopRequireDefault(require("../x-request"));
let uuid = 0;
/** This is a wrap class to avoid developer can get too much on origin object */
class XAgent {
config;
requestingMap = {};
constructor(config) {
this.config = config;
}
finishRequest(id) {
delete this.requestingMap[id];
}
request = (info, callbacks) => {
const {
request
} = this.config;
const {
onUpdate,
onSuccess,
onError
} = callbacks;
const id = uuid;
uuid += 1;
this.requestingMap[id] = true;
request?.(info, {
// Status should be unique.
// One get success or error should not get more message
onUpdate: message => {
if (this.requestingMap[id]) {
onUpdate(message);
}
},
onSuccess: message => {
if (this.requestingMap[id]) {
onSuccess(message);
this.finishRequest(id);
}
},
onError: error => {
if (this.requestingMap[id]) {
onError(error);
this.finishRequest(id);
}
}
});
};
isRequesting() {
return Object.keys(this.requestingMap).length > 0;
}
}
exports.XAgent = XAgent;
function useXAgent(config) {
const {
request,
...restConfig
} = config;
return _react.default.useMemo(() => [new XAgent({
request: request || (0, _xRequest.default)({
baseURL: restConfig.baseURL,
model: restConfig.model,
dangerouslyApiKey: restConfig.dangerouslyApiKey
}).create,
...restConfig
})], []);
}