1
0
Fork 0

Fix workers editing

This commit is contained in:
Pabloader 2026-04-13 15:34:13 +00:00
parent ecacc126f4
commit 662b903bb4
4 changed files with 23 additions and 14 deletions

View File

@ -15,4 +15,5 @@
color: var(--text-muted);
font-style: italic;
pointer-events: none;
position: absolute;
}

View File

@ -154,8 +154,10 @@
}
.footer {
width: 100%;
display: flex;
justify-content: space-between;
flex-direction: row;
align-items: center;
}

View File

@ -7,19 +7,13 @@ import clsx from "clsx";
import styles from "../../assets/manage-workers-modal.module.css";
import ui from "@common/assets/ui.module.css";
import { useHordeState } from "../../contexts/state";
import { deleteWorker, fetchWorker, updateWorker, type WorkerData } from "../../utils/api";
import { deleteWorker, fetchWorker, updateWorker, type WorkerData, type WorkerEdit } from "../../utils/api";
interface Props {
open: boolean;
onClose: () => void;
}
interface WorkerEdit {
name: string;
info: string;
maintenance_mode: boolean;
}
interface WorkerCard {
data: WorkerData;
edit: WorkerEdit;
@ -52,7 +46,7 @@ export const ManageWorkersModal = ({ open, onClose }: Props) => {
});
setWorkers(sorted.map(w => ({
data: w,
edit: { name: w.name, info: w.info ?? '', maintenance_mode: w.maintenance_mode },
edit: { name: w.name, info: w.info ?? '', maintenance: w.maintenance_mode },
saving: false,
saved: false,
deleting: false,
@ -81,7 +75,13 @@ export const ManageWorkersModal = ({ open, onClose }: Props) => {
const updated = await updateWorker(id, apiKey, worker.edit);
setWorkers(prev => prev.map(w =>
w.data.id === id
? { ...w, data: updated, saving: false, saved: true }
? {
...w, data: {
...w.data,
...updated,
maintenance_mode: Boolean(updated.maintenance),
}, saving: false, saved: true
}
: w
));
setTimeout(() => {
@ -129,7 +129,7 @@ export const ManageWorkersModal = ({ open, onClose }: Props) => {
const hasChanges = workers.some(w =>
w.edit.name !== w.data.name ||
w.edit.info !== (w.data.info ?? '') ||
w.edit.maintenance_mode !== w.data.maintenance_mode
w.edit.maintenance !== w.data.maintenance_mode
);
const footer = (
@ -151,7 +151,7 @@ export const ManageWorkersModal = ({ open, onClose }: Props) => {
const hasChangesForWorker = (w: WorkerCard) =>
w.edit.name !== w.data.name ||
w.edit.info !== (w.data.info ?? '') ||
w.edit.maintenance_mode !== w.data.maintenance_mode;
w.edit.maintenance !== w.data.maintenance_mode;
return (
<Modal open={open && Boolean(user)} onClose={onClose} title="Manage Workers" class={styles.modal} footer={footer}>
@ -206,8 +206,8 @@ export const ManageWorkersModal = ({ open, onClose }: Props) => {
<label class={styles.checkboxLabel}>
<input
type="checkbox"
checked={w.edit.maintenance_mode}
onChange={e => setEdit(w.data.id, { maintenance_mode: (e.target as HTMLInputElement).checked })}
checked={w.edit.maintenance}
onChange={e => setEdit(w.data.id, { maintenance: (e.target as HTMLInputElement).checked })}
/>
Maint.
</label>

View File

@ -21,6 +21,12 @@ export interface WorkerData {
info: string | null;
}
export interface WorkerEdit {
name: string;
info: string;
maintenance: boolean;
}
export interface UserData {
username: string;
kudos: number;
@ -98,7 +104,7 @@ export const updateWorker = async (
id: string,
apiKey: string,
patch: { name?: string; info?: string; maintenance_mode?: boolean }
): Promise<WorkerData> => {
): Promise<WorkerEdit> => {
const res = await fetch(`${BASE}/workers/${id}`, {
method: 'PUT',
headers: headers(apiKey),