Implement delete message functionality
- Added a new `deleteMessage` function in `chatSlice.ts` to handle message deletion. - Modified `MessageContainer.tsx` and `MessageHeader.tsx` to pass the entire message item instead of individual properties. - Updated the `showDelete` prop in `MessageContainer.tsx` to only show the delete icon for the second last message. - Dispatch the `deleteMessage` action when the delete icon is clicked in `MessageHeader.tsx`. - Updated the message structure in `chatSlice.ts` to include `date` and `hash` properties. - Added a case for `deleteMessage.fulfilled` in `chatSlice.ts` to remove the deleted message from the state.
This commit is contained in:
parent
9a1a985757
commit
8258d7e01a
@ -105,9 +105,8 @@ const MessageContainer = (props: any) => {
|
|||||||
}}>
|
}}>
|
||||||
<MessageHeader
|
<MessageHeader
|
||||||
key={`message-header-${index}`}
|
key={`message-header-${index}`}
|
||||||
type={messageType}
|
showDelete={index === messages.length - 2}
|
||||||
message={messageText}
|
item={item} />
|
||||||
contexts={contexts} />
|
|
||||||
<Container
|
<Container
|
||||||
key={`message-container-${index}`}
|
key={`message-container-${index}`}
|
||||||
sx={{
|
sx={{
|
||||||
|
@ -14,8 +14,13 @@ import {
|
|||||||
setValue,
|
setValue,
|
||||||
} from './inputSlice';
|
} from './inputSlice';
|
||||||
|
|
||||||
|
import {
|
||||||
|
deleteMessage
|
||||||
|
} from './chatSlice';
|
||||||
|
|
||||||
const MessageHeader = (props: any) => {
|
const MessageHeader = (props: any) => {
|
||||||
const { type, message, contexts, showEdit = false, showDelete = true } = props;
|
const { item, showEdit = false, showDelete = true } = props;
|
||||||
|
const { contexts, message, type, hash } = item;
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
const [done, setDone] = React.useState(false);
|
const [done, setDone] = React.useState(false);
|
||||||
return (<Flex
|
return (<Flex
|
||||||
@ -66,10 +71,10 @@ const MessageHeader = (props: any) => {
|
|||||||
<IconEdit size="1.125rem" />
|
<IconEdit size="1.125rem" />
|
||||||
</ActionIcon>
|
</ActionIcon>
|
||||||
</Tooltip >}
|
</Tooltip >}
|
||||||
{showDelete && <Tooltip sx={{ padding: '3px', fontSize: 'var(--vscode-editor-font-size)' }} label="Delete message" withArrow position="left" color="gray">
|
{showDelete && hash && <Tooltip sx={{ padding: '3px', fontSize: 'var(--vscode-editor-font-size)' }} label="Delete message" withArrow position="left" color="gray">
|
||||||
<ActionIcon size='sm'
|
<ActionIcon size='sm'
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
|
dispatch(deleteMessage(item));
|
||||||
}}>
|
}}>
|
||||||
<IconTrash size="1.125rem" />
|
<IconTrash size="1.125rem" />
|
||||||
</ActionIcon>
|
</ActionIcon>
|
||||||
|
@ -19,6 +19,23 @@ export const fetchHistoryMessages = createAsyncThunk<{ pageIndex: number, entrie
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const deleteMessage = createAsyncThunk<{ hash }, { hash }>('chat/deleteMessage', async (params) => {
|
||||||
|
debugger
|
||||||
|
const { hash } = params;
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
try {
|
||||||
|
messageUtil.sendMessage({ command: 'deleteChatMessage', hash: hash });
|
||||||
|
messageUtil.registerHandler('deletedChatMessage', (rhash: any) => {
|
||||||
|
resolve({
|
||||||
|
hash: rhash
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
reject(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
export const chatSlice = createSlice({
|
export const chatSlice = createSlice({
|
||||||
name: 'chat',
|
name: 'chat',
|
||||||
initialState: {
|
initialState: {
|
||||||
@ -110,8 +127,8 @@ export const chatSlice = createSlice({
|
|||||||
const { hash, user, date, request, response, context } = item;
|
const { hash, user, date, request, response, context } = item;
|
||||||
const contexts = context?.map(({ content, role }) => ({ context: JSON.parse(content) }));
|
const contexts = context?.map(({ content, role }) => ({ context: JSON.parse(content) }));
|
||||||
return [
|
return [
|
||||||
{ type: 'user', message: request, contexts: contexts },
|
{ type: 'user', message: request, contexts: contexts, date: date, hash: hash },
|
||||||
{ type: 'bot', message: response },
|
{ type: 'bot', message: response, date: date, hash: hash },
|
||||||
];
|
];
|
||||||
})
|
})
|
||||||
.flat();
|
.flat();
|
||||||
@ -123,6 +140,13 @@ export const chatSlice = createSlice({
|
|||||||
} else {
|
} else {
|
||||||
state.isLastPage = true;
|
state.isLastPage = true;
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
.addCase(deleteMessage.fulfilled, (state, action) => {
|
||||||
|
const { hash } = action.payload;
|
||||||
|
const index = state.messages.findIndex((item: any) => item.hash === hash);
|
||||||
|
if (index > -1) {
|
||||||
|
state.messages.splice(index);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user