{"version":3,"file":"messageReducer.mjs","names":[],"sources":["../../../src/chat/EditableMessageList/messageReducer.ts"],"sourcesContent":["import { produce } from 'immer';\n\nimport type { ChatMessageError, LLMMessage, LLMRoleType } from '@/chat/types';\n\nexport type MessageDispatch =\n  | { message: LLMMessage; type: 'addMessage' }\n  | { index: number; message: LLMMessage; type: 'insertMessage' }\n  | { index: number; type: 'deleteMessage' }\n  | { type: 'resetMessages' }\n  | { index: number; message: string; type: 'updateMessage' }\n  | { index: number; role: LLMRoleType; type: 'updateMessageRole' }\n  //\n  | { message: string; type: 'addUserMessage' }\n  | { responseStream: string[]; type: 'updateLatestBotMessage' }\n  | { index: number; message: string; type: 'updateMessageChoice' }\n  | {\n      error: ChatMessageError | undefined;\n      index: number;\n      type: 'setErrorMessage';\n    };\n\nexport const messagesReducer = (state: LLMMessage[], payload: MessageDispatch): LLMMessage[] => {\n  switch (payload.type) {\n    case 'addMessage': {\n      return [...state, payload.message];\n    }\n\n    case 'insertMessage': {\n      return produce(state, (draftState) => {\n        draftState.splice(payload.index, 0, payload.message);\n      });\n    }\n\n    case 'deleteMessage': {\n      return state.filter((_, index) => index !== payload.index);\n    }\n    case 'resetMessages': {\n      return [];\n    }\n\n    case 'updateMessage': {\n      return produce(state, (draftState) => {\n        const { index, message } = payload;\n\n        draftState[index].content = message;\n      });\n    }\n    case 'updateMessageRole': {\n      return produce(state, (draftState) => {\n        const { index, role } = payload;\n\n        draftState[index].role = role;\n      });\n    }\n\n    case 'addUserMessage': {\n      return produce(state, (draftState) => {\n        draftState.push({ content: payload.message, role: 'user' });\n      });\n    }\n\n    case 'updateLatestBotMessage': {\n      return produce(state, () => {\n        const { responseStream } = payload;\n        const newMessage = { content: responseStream.join(''), role: 'assistant' };\n\n        return [...state.slice(0, -1), newMessage];\n      });\n    }\n\n    case 'setErrorMessage': {\n      return produce(state, (draftState) => {\n        const { index, error } = payload;\n\n        // @ts-ignore\n        draftState[index].error = error;\n      });\n    }\n\n    default: {\n      throw new Error('暂未实现的 type，请检查 reducer');\n    }\n  }\n};\n"],"mappings":";;AAqBA,MAAa,mBAAmB,OAAqB,YAA2C;AAC9F,SAAQ,QAAQ,MAAhB;EACE,KAAK,aACH,QAAO,CAAC,GAAG,OAAO,QAAQ,QAAQ;EAGpC,KAAK,gBACH,QAAO,QAAQ,QAAQ,eAAe;AACpC,cAAW,OAAO,QAAQ,OAAO,GAAG,QAAQ,QAAQ;IACpD;EAGJ,KAAK,gBACH,QAAO,MAAM,QAAQ,GAAG,UAAU,UAAU,QAAQ,MAAM;EAE5D,KAAK,gBACH,QAAO,EAAE;EAGX,KAAK,gBACH,QAAO,QAAQ,QAAQ,eAAe;GACpC,MAAM,EAAE,OAAO,YAAY;AAE3B,cAAW,OAAO,UAAU;IAC5B;EAEJ,KAAK,oBACH,QAAO,QAAQ,QAAQ,eAAe;GACpC,MAAM,EAAE,OAAO,SAAS;AAExB,cAAW,OAAO,OAAO;IACzB;EAGJ,KAAK,iBACH,QAAO,QAAQ,QAAQ,eAAe;AACpC,cAAW,KAAK;IAAE,SAAS,QAAQ;IAAS,MAAM;IAAQ,CAAC;IAC3D;EAGJ,KAAK,yBACH,QAAO,QAAQ,aAAa;GAC1B,MAAM,EAAE,mBAAmB;GAC3B,MAAM,aAAa;IAAE,SAAS,eAAe,KAAK,GAAG;IAAE,MAAM;IAAa;AAE1E,UAAO,CAAC,GAAG,MAAM,MAAM,GAAG,GAAG,EAAE,WAAW;IAC1C;EAGJ,KAAK,kBACH,QAAO,QAAQ,QAAQ,eAAe;GACpC,MAAM,EAAE,OAAO,UAAU;AAGzB,cAAW,OAAO,QAAQ;IAC1B;EAGJ,QACE,OAAM,IAAI,MAAM,yBAAyB"}