UNPKG

@ant-design/pro-chat

Version:
88 lines (86 loc) 3.02 kB
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'); } } };