{"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;CAC9F,QAAQ,QAAQ,MAAhB;EACE,KAAK,cACH,OAAO,CAAC,GAAG,OAAO,QAAQ,OAAO;EAGnC,KAAK,iBACH,OAAO,QAAQ,QAAQ,eAAe;GACpC,WAAW,OAAO,QAAQ,OAAO,GAAG,QAAQ,OAAO;EACrD,CAAC;EAGH,KAAK,iBACH,OAAO,MAAM,QAAQ,GAAG,UAAU,UAAU,QAAQ,KAAK;EAE3D,KAAK,iBACH,OAAO,CAAC;EAGV,KAAK,iBACH,OAAO,QAAQ,QAAQ,eAAe;GACpC,MAAM,EAAE,OAAO,YAAY;GAE3B,WAAW,MAAM,CAAC,UAAU;EAC9B,CAAC;EAEH,KAAK,qBACH,OAAO,QAAQ,QAAQ,eAAe;GACpC,MAAM,EAAE,OAAO,SAAS;GAExB,WAAW,MAAM,CAAC,OAAO;EAC3B,CAAC;EAGH,KAAK,kBACH,OAAO,QAAQ,QAAQ,eAAe;GACpC,WAAW,KAAK;IAAE,SAAS,QAAQ;IAAS,MAAM;GAAO,CAAC;EAC5D,CAAC;EAGH,KAAK,0BACH,OAAO,QAAQ,aAAa;GAC1B,MAAM,EAAE,mBAAmB;GAC3B,MAAM,aAAa;IAAE,SAAS,eAAe,KAAK,EAAE;IAAG,MAAM;GAAY;GAEzE,OAAO,CAAC,GAAG,MAAM,MAAM,GAAG,EAAE,GAAG,UAAU;EAC3C,CAAC;EAGH,KAAK,mBACH,OAAO,QAAQ,QAAQ,eAAe;GACpC,MAAM,EAAE,OAAO,UAAU;GAGzB,WAAW,MAAM,CAAC,QAAQ;EAC5B,CAAC;EAGH,SACE,MAAM,IAAI,MAAM,wBAAwB;CAE5C;AACF"}