From 0856fb8a8ea4b292fe2bf358cd55a4893948a6a9 Mon Sep 17 00:00:00 2001
From: Calum Murphy
Date: Thu, 27 Aug 2026 15:34:53 +0100
Subject: [PATCH 1/2] Fixing editing cluster instructions. Ordering now works
and GOOD - BAD no longer swap on patch request.
---
frontend/app/components/ClusterSettings.jsx | 114 ++++++++++--------
frontend/app/components/Overview.jsx | 2 +-
frontend/app/components/PersonalSchedule.jsx | 2 +-
frontend/app/components/PoolSettingsPage.jsx | 4 +-
frontend/app/components/TeamsSettingsPage.jsx | 4 +-
frontend/app/globals.css | 7 +-
6 files changed, 76 insertions(+), 57 deletions(-)
diff --git a/frontend/app/components/ClusterSettings.jsx b/frontend/app/components/ClusterSettings.jsx
index f3ad435..b78f5b8 100644
--- a/frontend/app/components/ClusterSettings.jsx
+++ b/frontend/app/components/ClusterSettings.jsx
@@ -269,7 +269,7 @@ export default function ClusterSettingsPage() {
expectedTime,
bad,
good,
- position
+ position: Number(position)
})
});
@@ -370,7 +370,7 @@ export default function ClusterSettingsPage() {
{!hasChecks ? (
-
+
No checks have been performed for this cluster
@@ -395,13 +395,18 @@ export default function ClusterSettingsPage() {
)}
-
+
id: {clusterId}
-
- pool: {cluster.pool.name}
-
+ {cluster.pool.name && (
+
+
+ pool: {cluster.pool.name}
+
+
+ )}
+
@@ -558,6 +563,7 @@ export default function ClusterSettingsPage() {
{editingInstructionId === step.id ? (
+
Title
@@ -565,7 +571,7 @@ export default function ClusterSettingsPage() {
}
className="w-full rounded-xl border border-slate-700 bg-slate-900 p-4 text-white outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/30"
/>
-
+
Instruction
-
+
Expected time
@@ -583,7 +589,7 @@ export default function ClusterSettingsPage() {
placeholder="Expected time (e.g. 5 mins)"
className="w-full rounded-xl border border-slate-700 bg-slate-900 p-4 text-white outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/30"
/>
-
+
Good outcome
@@ -592,6 +598,7 @@ export default function ClusterSettingsPage() {
placeholder="Everything worked"
className="w-full rounded-xl border border-slate-700 bg-slate-900 p-4 text-white outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/30"
/>
+
Bad outcome
@@ -600,14 +607,15 @@ export default function ClusterSettingsPage() {
placeholder="Everything is on fire"
className="w-full rounded-xl border border-slate-700 bg-slate-900 p-4 text-white outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/30"
/>
-
+
Position
+
setEditedInstructionPosition(e.target.value)
}
- className="w-full appearance-none rounded-xl border border-slate-700 bg-slate-900 p-4 pr-12 text-white outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/30"
+ className="w-full cursor-pointer appearance-none rounded-xl border border-slate-700 bg-slate-900 p-4 pr-12 text-white outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/30"
>
{Array.from({ length: steps.length }, (_, i) => (
@@ -656,8 +664,10 @@ export default function ClusterSettingsPage() {
editedInstructionTitle.trim(),
editedInstructionDescription.trim(),
editedInstructionExpectedTime.trim(),
- editedInstructionGood.trim(),
editedInstructionBad.trim(),
+
+ editedInstructionGood.trim(),
+
editedInstructionPosition
)
}
@@ -685,47 +695,49 @@ export default function ClusterSettingsPage() {
{step.description}
+
+
+ {
+ setEditingInstructionId(step.id);
+ setEditedInstructionTitle(step.title || '');
+ setEditedInstructionDescription(
+ step.description || ''
+ );
+ setEditedInstructionExpectedTime(
+ step.expectedTime || ''
+ );
+ setEditedInstructionGood(step.good || '');
+ setEditedInstructionBad(step.bad || '');
+ setEditedInstructionPosition(step.position || 1);
+ }}
+ className="w-full cursor-pointer rounded-xl border border-blue-300/25 bg-blue-500/10 px-4 py-2 text-sm font-semibold text-blue-100 shadow-md shadow-black/20 transition duration-200 hover:-translate-y-0.5 hover:border-blue-300/45 hover:bg-blue-500/20 hover:text-white cursor-pointer md:w-auto"
+ >
+ Edit Instruction
+
+
+ {
+ const confirmed = window.confirm(
+ 'Delete this instruction? This will remove all methods too.'
+ );
+
+ if (confirmed) {
+ deleteInstruction(step.id);
+ }
+ }}
+ className="w-full cursor-pointer rounded-xl border border-red-300/25 bg-red-500/10 px-4 py-2 text-sm font-semibold text-red-100 shadow-md shadow-black/20 transition duration-200 hover:-translate-y-0.5 hover:border-red-300/45 hover:bg-red-500/20 hover:text-white cursor-pointer md:w-auto"
+ >
+ Delete Instruction
+
+
>
)}
-
- {
- setEditingInstructionId(step.id);
- setEditedInstructionTitle(step.title || '');
- setEditedInstructionDescription(
- step.description || ''
- );
- setEditedInstructionExpectedTime(
- step.expectedTime || ''
- );
- setEditedInstructionGood(step.good || '');
- setEditedInstructionBad(step.bad || '');
- setEditedInstructionPosition(step.position || 1);
- }}
- className="w-full cursor-pointer rounded-xl border border-blue-300/25 bg-blue-500/10 px-4 py-2 text-sm font-semibold text-blue-100 shadow-md shadow-black/20 transition duration-200 hover:-translate-y-0.5 hover:border-blue-300/45 hover:bg-blue-500/20 hover:text-white cursor-pointer md:w-auto"
- >
- Edit Instruction
-
- {
- const confirmed = window.confirm(
- 'Delete this instruction? This will remove all methods too.'
- );
-
- if (confirmed) {
- deleteInstruction(step.id);
- }
- }}
- className="w-full cursor-pointer rounded-xl border border-red-300/25 bg-red-500/10 px-4 py-2 text-sm font-semibold text-red-100 shadow-md shadow-black/20 transition duration-200 hover:-translate-y-0.5 hover:border-red-300/45 hover:bg-red-500/20 hover:text-white cursor-pointer md:w-auto"
- >
- Delete Instruction
-
-
@@ -788,12 +800,12 @@ export default function ClusterSettingsPage() {
) : (
-
-
+
+
{methodIndex + 1}
-
+
{method.content}
diff --git a/frontend/app/components/Overview.jsx b/frontend/app/components/Overview.jsx
index 0944ee1..27468a4 100644
--- a/frontend/app/components/Overview.jsx
+++ b/frontend/app/components/Overview.jsx
@@ -138,7 +138,7 @@ export default function Overview() {
{/* Body */}
{!report.id ? (
-
+
No overview available
) : (
diff --git a/frontend/app/components/PersonalSchedule.jsx b/frontend/app/components/PersonalSchedule.jsx
index 12e4ec1..8e0f565 100644
--- a/frontend/app/components/PersonalSchedule.jsx
+++ b/frontend/app/components/PersonalSchedule.jsx
@@ -219,7 +219,7 @@ export default function PersonalSchedule() {
Checks are not open yet. Please come back during the allocated time window.
) : !canComplete ? (
-
+
You are outside of the allocated time window for checks. Speak to your
manager or system administrator.
diff --git a/frontend/app/components/PoolSettingsPage.jsx b/frontend/app/components/PoolSettingsPage.jsx
index e0a5028..a9df1cb 100644
--- a/frontend/app/components/PoolSettingsPage.jsx
+++ b/frontend/app/components/PoolSettingsPage.jsx
@@ -146,7 +146,9 @@ export default function PoolClustersPage() {
Manage clusters assigned to this pool.
- id: {pool.id}
+
+ id: {pool.id}
+
{statusMessage && (
diff --git a/frontend/app/components/TeamsSettingsPage.jsx b/frontend/app/components/TeamsSettingsPage.jsx
index 283544b..4113e9f 100644
--- a/frontend/app/components/TeamsSettingsPage.jsx
+++ b/frontend/app/components/TeamsSettingsPage.jsx
@@ -399,7 +399,9 @@ export default function TeamSettingsPage() {
Manage users and pools assigned to this team.
-
id: {team.id}
+
+ id: {team.id}
+
{statusMessage && (
diff --git a/frontend/app/globals.css b/frontend/app/globals.css
index c256eec..498c6fb 100644
--- a/frontend/app/globals.css
+++ b/frontend/app/globals.css
@@ -30,7 +30,7 @@ body {
@keyframes fadeUp {
0% {
opacity: 0;
- transform: translateY(16px) scale(0.98);
+ transform: translateY(22px) scale(0.96);
filter: blur(6px);
}
@@ -42,9 +42,12 @@ body {
}
.animate-fade-up {
- animation: fadeUp 1000ms ease-out both;
+ animation: fadeUp 1945ms ease-out both;
}
+
+
+
.results-datepicker {
border: 1px solid rgba(255, 255, 255, 0.1) !important;
border-radius: 0.75rem !important;
From 777c7821a4314400489efee687e5309994a00288 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 27 Aug 2026 14:42:56 +0000
Subject: [PATCH 2/2] chore: apply formatting
---
frontend/app/components/ClusterSettings.jsx | 34 ++++++++++++-------
frontend/app/components/PoolSettingsPage.jsx | 6 ++--
frontend/app/components/TeamsSettingsPage.jsx | 4 +--
frontend/app/globals.css | 3 --
4 files changed, 26 insertions(+), 21 deletions(-)
diff --git a/frontend/app/components/ClusterSettings.jsx b/frontend/app/components/ClusterSettings.jsx
index b78f5b8..605719d 100644
--- a/frontend/app/components/ClusterSettings.jsx
+++ b/frontend/app/components/ClusterSettings.jsx
@@ -400,13 +400,10 @@ export default function ClusterSettingsPage() {
{cluster.pool.name && (
-
pool: {cluster.pool.name}
-
)}
-
@@ -563,7 +560,9 @@ export default function ClusterSettingsPage() {
{editingInstructionId === step.id ? (
-
Title
+
+ Title
+
@@ -571,7 +570,9 @@ export default function ClusterSettingsPage() {
}
className="w-full rounded-xl border border-slate-700 bg-slate-900 p-4 text-white outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/30"
/>
-
Instruction
+
+ Instruction
+
-
Expected time
+
+ Expected time
+
@@ -589,7 +592,9 @@ export default function ClusterSettingsPage() {
placeholder="Expected time (e.g. 5 mins)"
className="w-full rounded-xl border border-slate-700 bg-slate-900 p-4 text-white outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/30"
/>
-
Good outcome
+
+ Good outcome
+
@@ -598,7 +603,9 @@ export default function ClusterSettingsPage() {
placeholder="Everything worked"
className="w-full rounded-xl border border-slate-700 bg-slate-900 p-4 text-white outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/30"
/>
-
Bad outcome
+
+ Bad outcome
+
@@ -607,9 +614,10 @@ export default function ClusterSettingsPage() {
placeholder="Everything is on fire"
className="w-full rounded-xl border border-slate-700 bg-slate-900 p-4 text-white outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-500/30"
/>
-
Position
+
+ Position
+
-
@@ -710,7 +718,9 @@ export default function ClusterSettingsPage() {
);
setEditedInstructionGood(step.good || '');
setEditedInstructionBad(step.bad || '');
- setEditedInstructionPosition(step.position || 1);
+ setEditedInstructionPosition(
+ step.position || 1
+ );
}}
className="w-full cursor-pointer rounded-xl border border-blue-300/25 bg-blue-500/10 px-4 py-2 text-sm font-semibold text-blue-100 shadow-md shadow-black/20 transition duration-200 hover:-translate-y-0.5 hover:border-blue-300/45 hover:bg-blue-500/20 hover:text-white cursor-pointer md:w-auto"
>
@@ -736,8 +746,6 @@ export default function ClusterSettingsPage() {
>
)}
-
-
diff --git a/frontend/app/components/PoolSettingsPage.jsx b/frontend/app/components/PoolSettingsPage.jsx
index a9df1cb..31464d9 100644
--- a/frontend/app/components/PoolSettingsPage.jsx
+++ b/frontend/app/components/PoolSettingsPage.jsx
@@ -146,9 +146,9 @@ export default function PoolClustersPage() {
Manage clusters assigned to this pool.
-
- id: {pool.id}
-
+
+ id: {pool.id}
+
{statusMessage && (
diff --git a/frontend/app/components/TeamsSettingsPage.jsx b/frontend/app/components/TeamsSettingsPage.jsx
index 4113e9f..b9413ac 100644
--- a/frontend/app/components/TeamsSettingsPage.jsx
+++ b/frontend/app/components/TeamsSettingsPage.jsx
@@ -400,8 +400,8 @@ export default function TeamSettingsPage() {
- id: {team.id}
-
+ id: {team.id}
+
{statusMessage && (
diff --git a/frontend/app/globals.css b/frontend/app/globals.css
index 498c6fb..024418e 100644
--- a/frontend/app/globals.css
+++ b/frontend/app/globals.css
@@ -45,9 +45,6 @@ body {
animation: fadeUp 1945ms ease-out both;
}
-
-
-
.results-datepicker {
border: 1px solid rgba(255, 255, 255, 0.1) !important;
border-radius: 0.75rem !important;