diff --git a/src/instruments/src/DCDU/elements/SemanticResponseButtons.tsx b/src/instruments/src/DCDU/elements/SemanticResponseButtons.tsx new file mode 100644 index 000000000000..4e2188f32852 --- /dev/null +++ b/src/instruments/src/DCDU/elements/SemanticResponseButtons.tsx @@ -0,0 +1,78 @@ +import React from 'react'; +import { AtsuMessageComStatus } from '@atsu/messages/AtsuMessage'; +import { CpdlcMessage } from '@atsu/messages/CpdlcMessage'; +import { UplinkMessageInterpretation } from '@atsu/components/UplinkMessageInterpretation'; +import { Button } from './Button'; + +type SemanticResponseButtonsProps = { + message: CpdlcMessage, + dataIncomplete: boolean, + invertResponse: (message: number) => void, + sendMessage: (message: number) => void, + closeMessage: (message: number) => void +} + +export const SemanticResponseButtons: React.FC = ({ message, dataIncomplete, invertResponse, sendMessage, closeMessage }) => { + const showAnswers = message.Response === undefined || (message.Response.ComStatus !== AtsuMessageComStatus.Sending && message.Response.ComStatus !== AtsuMessageComStatus.Sent); + const buttonsBlocked = message.Response !== undefined && message.Response.ComStatus === AtsuMessageComStatus.Sending; + + const clicked = (index: string) : void => { + if (message.UniqueMessageID === undefined || buttonsBlocked) { + return; + } + + if (showAnswers) { + if (index === 'L1') { + invertResponse(message.UniqueMessageID); + } else if (index === 'R2' && message.Response) { + sendMessage(message.Response.UniqueMessageID); + } + // TODO process R1 and modify the message + } else if (index === 'R2') { + closeMessage(message.UniqueMessageID); + } + }; + + return ( + <> + {showAnswers && ( + <> + {UplinkMessageInterpretation.HasNegativeResponse(message) && ( + <> +