|
1 | 1 | import React from 'react';
|
2 | 2 | import useDataSaver from 'lib/hooks/useDataSaver';
|
3 |
| -import { TopicMessage } from 'generated-sources'; |
| 3 | +import { Action, ResourceType, TopicMessage } from 'generated-sources'; |
4 | 4 | import MessageToggleIcon from 'components/common/Icons/MessageToggleIcon';
|
5 | 5 | import IconButtonWrapper from 'components/common/Icons/IconButtonWrapper';
|
6 | 6 | import { Dropdown, DropdownItem } from 'components/common/Dropdown';
|
| 7 | +import { ActionDropdownItem } from 'components/common/ActionComponent'; |
7 | 8 | import { formatTimestamp } from 'lib/dateTimeHelpers';
|
8 | 9 | import { JSONPath } from 'jsonpath-plus';
|
9 | 10 | import Ellipsis from 'components/common/Ellipsis/Ellipsis';
|
10 | 11 | import WarningRedIcon from 'components/common/Icons/WarningRedIcon';
|
11 | 12 | import Tooltip from 'components/common/Tooltip/Tooltip';
|
| 13 | +import useAppParams from 'lib/hooks/useAppParams'; |
| 14 | +import { RouteParamsClusterTopic } from 'lib/paths'; |
| 15 | +import { useTopicActions } from 'components/contexts/TopicActionsContext'; |
12 | 16 |
|
13 | 17 | import MessageContent from './MessageContent/MessageContent';
|
14 | 18 | import * as S from './MessageContent/MessageContent.styled';
|
@@ -41,7 +45,24 @@ const Message: React.FC<Props> = ({
|
41 | 45 | keyFilters,
|
42 | 46 | contentFilters,
|
43 | 47 | }) => {
|
| 48 | + const { topicName } = useAppParams<RouteParamsClusterTopic>(); |
| 49 | + const { openSidebarWithMessage } = useTopicActions(); |
44 | 50 | const [isOpen, setIsOpen] = React.useState(false);
|
| 51 | + |
| 52 | + const message = { |
| 53 | + timestamp, |
| 54 | + timestampType, |
| 55 | + offset, |
| 56 | + key, |
| 57 | + keySize, |
| 58 | + partition, |
| 59 | + value, |
| 60 | + valueSize, |
| 61 | + headers, |
| 62 | + valueSerde, |
| 63 | + keySerde, |
| 64 | + }; |
| 65 | + |
45 | 66 | const savedMessageJson = {
|
46 | 67 | Value: value,
|
47 | 68 | Offset: offset,
|
@@ -138,10 +159,28 @@ const Message: React.FC<Props> = ({
|
138 | 159 | <td style={{ width: '5%' }}>
|
139 | 160 | {vEllipsisOpen && (
|
140 | 161 | <Dropdown>
|
141 |
| - <DropdownItem onClick={copyToClipboard}> |
| 162 | + <DropdownItem |
| 163 | + aria-label="Copy to clipboard" |
| 164 | + onClick={copyToClipboard} |
| 165 | + > |
142 | 166 | Copy to clipboard
|
143 | 167 | </DropdownItem>
|
144 |
| - <DropdownItem onClick={saveFile}>Save as a file</DropdownItem> |
| 168 | + <DropdownItem aria-label="Save as a file" onClick={saveFile}> |
| 169 | + Save as a file |
| 170 | + </DropdownItem> |
| 171 | + <ActionDropdownItem |
| 172 | + aria-label="Produce message" |
| 173 | + onClick={() => { |
| 174 | + openSidebarWithMessage(message); |
| 175 | + }} |
| 176 | + permission={{ |
| 177 | + resource: ResourceType.TOPIC, |
| 178 | + action: Action.MESSAGES_PRODUCE, |
| 179 | + value: topicName, |
| 180 | + }} |
| 181 | + > |
| 182 | + Produce message |
| 183 | + </ActionDropdownItem> |
145 | 184 | </Dropdown>
|
146 | 185 | )}
|
147 | 186 | </td>
|
|
0 commit comments