From 6e827190c525c76345a2d10f1af93d31a93d8d0c Mon Sep 17 00:00:00 2001 From: Jay Kim <76601570+yeonkim1213@users.noreply.github.com> Date: Wed, 27 May 2026 21:18:38 -0600 Subject: [PATCH 1/4] Fix reject participant button - participant count, gap --- .../ParticipantRejectModal.tsx | 91 ++++++++++--------- 1 file changed, 50 insertions(+), 41 deletions(-) diff --git a/src/analysis/individualStudy/ParticipantRejectModal.tsx b/src/analysis/individualStudy/ParticipantRejectModal.tsx index 263919fb55..e1f5af7c3d 100644 --- a/src/analysis/individualStudy/ParticipantRejectModal.tsx +++ b/src/analysis/individualStudy/ParticipantRejectModal.tsx @@ -1,5 +1,5 @@ import { - Modal, Text, TextInput, Flex, Button, Alert, Tooltip, + Modal, Text, TextInput, Flex, Button, Alert, Tooltip, Group, } from '@mantine/core'; import { IconAlertTriangle } from '@tabler/icons-react'; import { @@ -106,26 +106,30 @@ export function ParticipantRejectModal({ return ( <> - {rejectedParticipantsCount > 0 && ( - - - - )} - {nonRejectedParticipantsCount > 0 && ( - - - + {(rejectedParticipantsCount > 0 || nonRejectedParticipantsCount > 0) && ( + + {rejectedParticipantsCount > 0 && ( + + + + )} + {nonRejectedParticipantsCount > 0 && ( + + + + )} + )} setModalRejectOpened(false)} - title={nonRejectedParticipantsCount > 0 ? `Reject Participants (${nonRejectedParticipantsCount})` : 'Reject Participant'} + title={`Reject Participant${nonRejectedParticipantsCount === 1 ? '' : 's'} (${nonRejectedParticipantsCount})`} > } @@ -134,25 +138,25 @@ export function ParticipantRejectModal({ mb="md" > {currentAndSelectedParticipants.length > 0 && rejectedParticipantsCount > 0 && ( - <> - {rejectedParticipantsCount} - {' '} - of your - {' '} - {currentAndSelectedParticipants.length} - {' '} - selected participant - {currentAndSelectedParticipants.length === 1 ? '' : 's'} - {' '} - {rejectedParticipantsCount === 1 ? 'has' : 'have'} - {' '} - already been rejected. Clicking reject participants will now reject the other - {' '} - {nonRejectedParticipantsCount} - . -
-
- + <> + {rejectedParticipantsCount} + {' '} + of your + {' '} + {currentAndSelectedParticipants.length} + {' '} + selected participant + {currentAndSelectedParticipants.length === 1 ? '' : 's'} + {' '} + {rejectedParticipantsCount === 1 ? 'has' : 'have'} + {' '} + already been rejected. Clicking reject participants will now reject the other + {' '} + {nonRejectedParticipantsCount} + . +
+
+ )} When participants are rejected, their sequences will be reassigned to other participants.
@@ -165,7 +169,7 @@ export function ParticipantRejectModal({ Cancel
@@ -175,9 +179,9 @@ export function ParticipantRejectModal({ onClose={() => setModalUndoRejectOpened(false)} title={( - {`Undo Reject Participants (${currentAndSelectedParticipants.length})`} + {`Undo Reject Participant${rejectedParticipantsCount === 1 ? '' : 's'} (${rejectedParticipantsCount})`} - )} + )} > } @@ -188,7 +192,12 @@ export function ParticipantRejectModal({ When you undo participant rejections, you may end up with unbalanced latin squares. This is because the rejected sequence may have been reassigned. {currentAndSelectedParticipants.length > 0 ? ( - Are you sure you want to undo the rejection of these participants? + + Are you sure you want to undo the rejection of + {' '} + {rejectedParticipantsCount === 1 ? 'this participant' : 'these participants'} + ? + ) : ( <> @@ -206,7 +215,7 @@ export function ParticipantRejectModal({ Cancel From 797b1a6de30b5193d3207018b37e5c9707786f1b Mon Sep 17 00:00:00 2001 From: Jay Kim <76601570+yeonkim1213@users.noreply.github.com> Date: Wed, 27 May 2026 21:55:00 -0600 Subject: [PATCH 2/4] Update the screen recording icon color --- src/analysis/individualStudy/thinkAloud/ThinkAloudFooter.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/analysis/individualStudy/thinkAloud/ThinkAloudFooter.tsx b/src/analysis/individualStudy/thinkAloud/ThinkAloudFooter.tsx index 52d431e27b..c3fa0e6b3c 100644 --- a/src/analysis/individualStudy/thinkAloud/ThinkAloudFooter.tsx +++ b/src/analysis/individualStudy/thinkAloud/ThinkAloudFooter.tsx @@ -125,6 +125,7 @@ export function ThinkAloudFooter({ async function fetchAssetsUrl() { if (!storageEngine || !participantId || !currentTrial) { setAudioUrl(null); + setScreenRecordingUrl(null); return; } @@ -599,7 +600,7 @@ export function ThinkAloudFooter({ )} {screenRecordingUrl && ( - + From 709ba5bdc6c9d90ae79bfc3e15f15e22060e1c0b Mon Sep 17 00:00:00 2001 From: Jay Kim <76601570+yeonkim1213@users.noreply.github.com> Date: Wed, 27 May 2026 22:09:19 -0600 Subject: [PATCH 3/4] Fix plural wording for reject participants --- src/analysis/individualStudy/ParticipantRejectModal.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/analysis/individualStudy/ParticipantRejectModal.tsx b/src/analysis/individualStudy/ParticipantRejectModal.tsx index e1f5af7c3d..a616c6b9c0 100644 --- a/src/analysis/individualStudy/ParticipantRejectModal.tsx +++ b/src/analysis/individualStudy/ParticipantRejectModal.tsx @@ -150,9 +150,12 @@ export function ParticipantRejectModal({ {' '} {rejectedParticipantsCount === 1 ? 'has' : 'have'} {' '} - already been rejected. Clicking reject participants will now reject the other + already been rejected. Clicking reject participant + {nonRejectedParticipantsCount === 1 ? '' : 's'} {' '} - {nonRejectedParticipantsCount} + will now reject + {' '} + {nonRejectedParticipantsCount === 1 ? 'this participant' : 'these participants'} .

From 1307d0643608d1134baba7c7941378d20c18d018 Mon Sep 17 00:00:00 2001 From: Jay Kim <76601570+yeonkim1213@users.noreply.github.com> Date: Thu, 28 May 2026 00:26:23 -0600 Subject: [PATCH 4/4] Refactor reject participants label --- .../ParticipantRejectModal.tsx | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/analysis/individualStudy/ParticipantRejectModal.tsx b/src/analysis/individualStudy/ParticipantRejectModal.tsx index a616c6b9c0..5efd5ac714 100644 --- a/src/analysis/individualStudy/ParticipantRejectModal.tsx +++ b/src/analysis/individualStudy/ParticipantRejectModal.tsx @@ -52,6 +52,8 @@ export function ParticipantRejectModal({ const currentAndSelectedParticipants = useMemo(() => [...selectedParticipants, currentParticipantData].filter((p) => p !== null) as ParticipantData[], [selectedParticipants, currentParticipantData]); const rejectedParticipantsCount = useMemo(() => currentAndSelectedParticipants.filter((p) => p.rejected).length, [currentAndSelectedParticipants]); const nonRejectedParticipantsCount = useMemo(() => currentAndSelectedParticipants.filter((p) => !p.rejected).length, [currentAndSelectedParticipants]); + const rejectParticipantLabel = `Reject Participant${nonRejectedParticipantsCount === 1 ? '' : 's'}`; + const undoRejectParticipantLabel = `Undo Reject Participant${rejectedParticipantsCount === 1 ? '' : 's'}`; const rejectParticipant = useCallback(async (rejectParticipantId: string, reason: string) => { if (storageEngine && studyId) { @@ -111,16 +113,14 @@ export function ParticipantRejectModal({ {rejectedParticipantsCount > 0 && ( )} {nonRejectedParticipantsCount > 0 && ( )} @@ -129,7 +129,9 @@ export function ParticipantRejectModal({ setModalRejectOpened(false)} - title={`Reject Participant${nonRejectedParticipantsCount === 1 ? '' : 's'} (${nonRejectedParticipantsCount})`} + title={footer + ? rejectParticipantLabel + : `${rejectParticipantLabel} (${nonRejectedParticipantsCount})`} > } @@ -172,7 +174,7 @@ export function ParticipantRejectModal({ Cancel @@ -180,11 +182,9 @@ export function ParticipantRejectModal({ setModalUndoRejectOpened(false)} - title={( - - {`Undo Reject Participant${rejectedParticipantsCount === 1 ? '' : 's'} (${rejectedParticipantsCount})`} - - )} + title={footer + ? undoRejectParticipantLabel + : `${undoRejectParticipantLabel} (${rejectedParticipantsCount})`} > } @@ -218,7 +218,7 @@ export function ParticipantRejectModal({ Cancel