From f5c531656508acb718e7f7490b6aa11ef32f6136 Mon Sep 17 00:00:00 2001 From: George Sproston Date: Fri, 1 Sep 2023 14:07:59 +0100 Subject: [PATCH 1/8] Moved export and reset buttons --- frontend/src/components/ChatBox/ChatBox.tsx | 24 +++--------- frontend/src/components/EmailBox/EmailBox.css | 5 +-- .../components/ExportChat/ExportPDFLink.css | 9 ++--- .../components/ExportChat/ExportPDFLink.tsx | 2 +- .../src/components/MainComponent/DemoBody.css | 14 +++++++ .../src/components/MainComponent/DemoBody.tsx | 37 ++++++++++++++++--- .../ModelSelectionBox/ModelSelectionBox.css | 4 +- .../components/StrategyBox/StrategyBox.css | 4 +- 8 files changed, 61 insertions(+), 38 deletions(-) diff --git a/frontend/src/components/ChatBox/ChatBox.tsx b/frontend/src/components/ChatBox/ChatBox.tsx index 01e4a3b32..c2c7f000f 100644 --- a/frontend/src/components/ChatBox/ChatBox.tsx +++ b/frontend/src/components/ChatBox/ChatBox.tsx @@ -18,21 +18,22 @@ import { DEFENCE_DETAILS_ALL } from "../../Defences"; function ChatBox( { messages, + completedPhases, currentPhase, addChatMessage, - resetPhase, + addCompletedPhase, setNumCompletedPhases, setEmails, }: { messages: ChatMessage[]; + completedPhases: Set; currentPhase: PHASE_NAMES; addChatMessage: (message: ChatMessage) => void; - resetPhase: () => void; + addCompletedPhase: (phase: PHASE_NAMES) => void; setNumCompletedPhases: (numCompletedPhases: number) => void; setEmails: (emails: EmailInfo[]) => void; } ) { - const [completedPhases, setCompletedPhases] = useState>(new Set()); const [isSendingMessage, setIsSendingMessage] = useState(false); // called on mount @@ -49,12 +50,6 @@ function ChatBox( } } - function resetButtonPressed() { - completedPhases.delete(currentPhase); - setCompletedPhases(completedPhases); - resetPhase(); - } - async function sendChatMessage() { const inputBoxElement = document.getElementById( "chat-box-input" @@ -144,7 +139,7 @@ function ChatBox( setEmails(sentEmails); if (response.wonPhase && !completedPhases.has(currentPhase)) { - setCompletedPhases(completedPhases.add(currentPhase)); + addCompletedPhase(currentPhase); const successMessage = "Congratulations! You have completed this phase. Please click on the next phase to continue."; addChatMessage({ @@ -180,15 +175,6 @@ function ChatBox( Send - ); diff --git a/frontend/src/components/EmailBox/EmailBox.css b/frontend/src/components/EmailBox/EmailBox.css index 4e1b808e6..efd0d59b1 100644 --- a/frontend/src/components/EmailBox/EmailBox.css +++ b/frontend/src/components/EmailBox/EmailBox.css @@ -10,6 +10,5 @@ flex-direction: column-reverse; flex-grow: 1; overflow-y: auto; - padding: 0 40px; - padding-bottom: 40px; -} + padding: 32px 8px; +} \ No newline at end of file diff --git a/frontend/src/components/ExportChat/ExportPDFLink.css b/frontend/src/components/ExportChat/ExportPDFLink.css index ce5faaf64..c5b3b1835 100644 --- a/frontend/src/components/ExportChat/ExportPDFLink.css +++ b/frontend/src/components/ExportChat/ExportPDFLink.css @@ -1,17 +1,16 @@ #export-chat-box { - margin: 15px; - padding-top: 20px; - padding-bottom: 20px; text-align: center; + height: 100%; + width: 100%; } a { padding: 5 12px; - font-size: 16px; color: var(--main-button-inactive-text-colour); text-decoration: none; } button { - height: 30px; + height: 100%; + width: 100%; } \ No newline at end of file diff --git a/frontend/src/components/ExportChat/ExportPDFLink.tsx b/frontend/src/components/ExportChat/ExportPDFLink.tsx index e095a74f2..d85ba0996 100644 --- a/frontend/src/components/ExportChat/ExportPDFLink.tsx +++ b/frontend/src/components/ExportChat/ExportPDFLink.tsx @@ -33,7 +33,7 @@ const ExportPDFLink = ({ } fileName={getFileName()} > - {"Export chat history"} + {"Export"} {" "} diff --git a/frontend/src/components/MainComponent/DemoBody.css b/frontend/src/components/MainComponent/DemoBody.css index f380c9236..428b1f34e 100644 --- a/frontend/src/components/MainComponent/DemoBody.css +++ b/frontend/src/components/MainComponent/DemoBody.css @@ -23,6 +23,7 @@ height: 100%; width: 30%; overflow-y: auto; + padding: 0 30px; } .side-bar-header { @@ -33,4 +34,17 @@ margin-bottom: 10px; padding-bottom: 20px; text-align: center; +} + +#control-buttons { + display: flex; + flex-direction: row; + justify-content: space-between; + height: 34px; + min-height: 34px; + padding: 32px 0; +} + +.control-button { + width: 45%; } \ No newline at end of file diff --git a/frontend/src/components/MainComponent/DemoBody.tsx b/frontend/src/components/MainComponent/DemoBody.tsx index 6496a96d4..433b80044 100644 --- a/frontend/src/components/MainComponent/DemoBody.tsx +++ b/frontend/src/components/MainComponent/DemoBody.tsx @@ -11,6 +11,7 @@ import ExportPDFLink from "../ExportChat/ExportPDFLink"; import ModelSelectionBox from "../ModelSelectionBox/ModelSelectionBox"; import { EmailInfo } from "../../models/email"; import { addMessageToChatHistory } from "../../service/chatService"; +import { useState } from "react"; function DemoBody({ currentPhase, @@ -31,6 +32,19 @@ function DemoBody({ setEmails: (emails: EmailInfo[]) => void; setNumCompletedPhases: (numCompletedPhases: number) => void; }) { + const [completedPhases, setCompletedPhases] = useState>(new Set()); + + function addCompletedPhase(phase: PHASE_NAMES) { + completedPhases.add(phase); + setCompletedPhases(completedPhases); + } + + function resetButtonClicked() { + completedPhases.delete(currentPhase); + setCompletedPhases(completedPhases); + resetPhase(); + } + const addInfoMessage = (message: string) => { addChatMessage({ message: message, @@ -74,20 +88,31 @@ function DemoBody({ currentPhase === PHASE_NAMES.SANDBOX) && ( )} - {/* hide model selection box on phases 0 and 1 */} {currentPhase === PHASE_NAMES.SANDBOX && } +
+
+ +
+ +
diff --git a/frontend/src/components/ModelSelectionBox/ModelSelectionBox.css b/frontend/src/components/ModelSelectionBox/ModelSelectionBox.css index 293abfbad..2b8844bb8 100644 --- a/frontend/src/components/ModelSelectionBox/ModelSelectionBox.css +++ b/frontend/src/components/ModelSelectionBox/ModelSelectionBox.css @@ -1,5 +1,5 @@ #model-selection-box { - padding: 1px 32px; + padding: 1px 0; position: relative; } @@ -16,7 +16,7 @@ #model-selection-info p { margin: 0; padding: 0; - color:cadetblue + color: cadetblue } #p error { diff --git a/frontend/src/components/StrategyBox/StrategyBox.css b/frontend/src/components/StrategyBox/StrategyBox.css index 50f2870f9..da154394a 100644 --- a/frontend/src/components/StrategyBox/StrategyBox.css +++ b/frontend/src/components/StrategyBox/StrategyBox.css @@ -1,4 +1,4 @@ #strategy-box { - padding: 16px 32px; + padding: 16px 0; position: relative; -} +} \ No newline at end of file From 5f8620111faf946b5002de95fff9b90eb3f1432e Mon Sep 17 00:00:00 2001 From: George Sproston Date: Fri, 1 Sep 2023 14:13:57 +0100 Subject: [PATCH 2/8] Showing attacks before defences --- .../src/components/MainComponent/DemoBody.tsx | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/frontend/src/components/MainComponent/DemoBody.tsx b/frontend/src/components/MainComponent/DemoBody.tsx index 433b80044..db06d0c4d 100644 --- a/frontend/src/components/MainComponent/DemoBody.tsx +++ b/frontend/src/components/MainComponent/DemoBody.tsx @@ -67,8 +67,16 @@ function DemoBody({ return (
+ {/* show reduced set of attacks on phase 1 */} + {currentPhase === PHASE_NAMES.PHASE_1 && ( + + )} + {/* show all attacks on phase 2 and sandbox */} + {(currentPhase === PHASE_NAMES.PHASE_2 || + currentPhase === PHASE_NAMES.SANDBOX) && ( + + )} {/* hide defence box on phases 0 and 1. only allow configuration in sandbox */} - {/* hide defence box on phases 0 and 1 */} {(currentPhase === PHASE_NAMES.PHASE_2 || currentPhase === PHASE_NAMES.SANDBOX) && ( )} - {/* show reduced set of attacks on phase 1 */} - {currentPhase === PHASE_NAMES.PHASE_1 && ( - - )} - {/* show all attacks on phase 2 and sandbox */} - {(currentPhase === PHASE_NAMES.PHASE_2 || - currentPhase === PHASE_NAMES.SANDBOX) && ( - - )} {/* hide model selection box on phases 0 and 1 */} {currentPhase === PHASE_NAMES.SANDBOX && }
From eabe6b74224b021847f794fc0897f49adc91be6d Mon Sep 17 00:00:00 2001 From: George Sproston Date: Fri, 1 Sep 2023 14:28:52 +0100 Subject: [PATCH 3/8] Left side bar headers --- frontend/src/components/AttackBox/AttackBox.tsx | 2 +- frontend/src/components/DefenceBox/DefenceBox.tsx | 2 +- frontend/src/components/MainComponent/DemoBody.css | 11 ++++------- .../ModelSelectionBox/ModelSelectionBox.tsx | 2 +- frontend/src/components/StrategyBox/StrategyBox.css | 1 - 5 files changed, 7 insertions(+), 11 deletions(-) diff --git a/frontend/src/components/AttackBox/AttackBox.tsx b/frontend/src/components/AttackBox/AttackBox.tsx index 11c53d00e..b16122470 100644 --- a/frontend/src/components/AttackBox/AttackBox.tsx +++ b/frontend/src/components/AttackBox/AttackBox.tsx @@ -5,7 +5,7 @@ import { AttackInfo } from "../../models/attack"; function AttackBox({ attacks }: { attacks: AttackInfo[] }) { return (
-
attack mechanisms
+
Attacks
{attacks.map((attack) => { return ; })} diff --git a/frontend/src/components/DefenceBox/DefenceBox.tsx b/frontend/src/components/DefenceBox/DefenceBox.tsx index 9c2fc60f7..8aac8b85c 100644 --- a/frontend/src/components/DefenceBox/DefenceBox.tsx +++ b/frontend/src/components/DefenceBox/DefenceBox.tsx @@ -113,7 +113,7 @@ function DefenceBox({ return (
-
defence mechanisms
+
Defences
{defenceDetails.map((defenceDetail, index) => { return ( -
model selection
+
Model

Select a model:

+ +
{isInfoBoxVisible ? (
From 4621685f95ed130c6e5e6a203b32ebf7d4c5da8f Mon Sep 17 00:00:00 2001 From: George Sproston Date: Fri, 1 Sep 2023 15:58:33 +0100 Subject: [PATCH 7/8] Defence toggles --- .../DefenceBox/DefenceMechanism.tsx | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/DefenceBox/DefenceMechanism.tsx b/frontend/src/components/DefenceBox/DefenceMechanism.tsx index 0c18a572d..5cb193df7 100644 --- a/frontend/src/components/DefenceBox/DefenceMechanism.tsx +++ b/frontend/src/components/DefenceBox/DefenceMechanism.tsx @@ -65,16 +65,21 @@ function DefenceMechanism({ onMouseLeave={() => { setIsInfoBoxVisible(false); }} - onClick={() => { - defenceDetail.isActive - ? setDefenceInactive(defenceDetail.id) - : setDefenceActive(defenceDetail.id); - }} >
{defenceDetail.name} -
From 1214f0c239304499ccc52c677b57e0a349bce111 Mon Sep 17 00:00:00 2001 From: George Sproston Date: Fri, 1 Sep 2023 17:29:03 +0100 Subject: [PATCH 8/8] Fixed warning --- frontend/src/components/DefenceBox/DefenceMechanism.css | 4 ++++ frontend/src/components/DefenceBox/DefenceMechanism.tsx | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/DefenceBox/DefenceMechanism.css b/frontend/src/components/DefenceBox/DefenceMechanism.css index eea7c55dd..ab2e6b255 100644 --- a/frontend/src/components/DefenceBox/DefenceMechanism.css +++ b/frontend/src/components/DefenceBox/DefenceMechanism.css @@ -65,6 +65,10 @@ input:checked+.slider:before { transform: translateX(16px); } +/* + * Modified from https://www.w3schools.com/howto/howto_css_switch.asp +*/ + /* Rounded sliders */ .slider.round { border-radius: 34px; diff --git a/frontend/src/components/DefenceBox/DefenceMechanism.tsx b/frontend/src/components/DefenceBox/DefenceMechanism.tsx index 5cb193df7..29f9ef103 100644 --- a/frontend/src/components/DefenceBox/DefenceMechanism.tsx +++ b/frontend/src/components/DefenceBox/DefenceMechanism.tsx @@ -72,7 +72,7 @@ function DefenceMechanism({ { + onChange={() => { defenceDetail.isActive ? setDefenceInactive(defenceDetail.id) : setDefenceActive(defenceDetail.id);