@ant-design/pro-chat
Version:
a solution for ai chat
88 lines (86 loc) • 3.02 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
var _excluded = ["type"],
_excluded2 = ["id", "key", "value", "type"];
import { produce } from 'immer';
import { nanoid } from "../../utils/uuid";
export var messagesReducer = function messagesReducer(state, payload) {
switch (payload.type) {
case 'addMessage':
{
return produce(state, function (draftState) {
var mid = payload.id || nanoid();
// drop type from payload, otherwise the content display in a wrong way
// eslint-disable-next-line @typescript-eslint/no-unused-vars
var _ = payload.type,
rest = _objectWithoutProperties(payload, _excluded);
draftState.push(_objectSpread({
content: payload.message,
createAt: Date.now(),
id: mid,
updateAt: Date.now()
}, rest));
});
}
case 'deleteMessage':
{
return state.map(function (m) {
if (m.id !== payload.id) return m;
return false;
}).filter(Boolean);
}
case 'updateMessage':
{
return produce(state, function (draftState) {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
var id = payload.id,
key = payload.key,
value = payload.value,
_ = payload.type,
rest = _objectWithoutProperties(payload, _excluded2);
var message = draftState.find(function (m) {
return m.id === id;
});
if (!message) return;
message.updateAt = Date.now();
// 遍历 rest 对象并更新 message 对象
for (var _i = 0, _Object$entries = Object.entries(rest); _i < _Object$entries.length; _i++) {
var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
restKey = _Object$entries$_i[0],
restValue = _Object$entries$_i[1];
message[restKey] = restValue;
}
// @ts-ignore
message[key] = value;
});
}
case 'updateMessageExtra':
{
return produce(state, function (draftState) {
var id = payload.id,
key = payload.key,
value = payload.value;
var message = draftState.find(function (m) {
return m.id === id;
});
if (!message) return;
if (!message.extra) {
message.extra = _defineProperty({}, key, value);
} else {
message.extra[key] = value;
}
message.updateAt = Date.now();
});
}
case 'resetMessages':
{
return [];
}
default:
{
throw new Error('暂未实现的 type,请检查 reducer');
}
}
};