Fix workers editing
This commit is contained in:
parent
ecacc126f4
commit
662b903bb4
|
|
@ -15,4 +15,5 @@
|
||||||
color: var(--text-muted);
|
color: var(--text-muted);
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
|
position: absolute;
|
||||||
}
|
}
|
||||||
|
|
@ -154,8 +154,10 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer {
|
.footer {
|
||||||
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,19 +7,13 @@ import clsx from "clsx";
|
||||||
import styles from "../../assets/manage-workers-modal.module.css";
|
import styles from "../../assets/manage-workers-modal.module.css";
|
||||||
import ui from "@common/assets/ui.module.css";
|
import ui from "@common/assets/ui.module.css";
|
||||||
import { useHordeState } from "../../contexts/state";
|
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 {
|
interface Props {
|
||||||
open: boolean;
|
open: boolean;
|
||||||
onClose: () => void;
|
onClose: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface WorkerEdit {
|
|
||||||
name: string;
|
|
||||||
info: string;
|
|
||||||
maintenance_mode: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface WorkerCard {
|
interface WorkerCard {
|
||||||
data: WorkerData;
|
data: WorkerData;
|
||||||
edit: WorkerEdit;
|
edit: WorkerEdit;
|
||||||
|
|
@ -52,7 +46,7 @@ export const ManageWorkersModal = ({ open, onClose }: Props) => {
|
||||||
});
|
});
|
||||||
setWorkers(sorted.map(w => ({
|
setWorkers(sorted.map(w => ({
|
||||||
data: 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,
|
saving: false,
|
||||||
saved: false,
|
saved: false,
|
||||||
deleting: false,
|
deleting: false,
|
||||||
|
|
@ -81,7 +75,13 @@ export const ManageWorkersModal = ({ open, onClose }: Props) => {
|
||||||
const updated = await updateWorker(id, apiKey, worker.edit);
|
const updated = await updateWorker(id, apiKey, worker.edit);
|
||||||
setWorkers(prev => prev.map(w =>
|
setWorkers(prev => prev.map(w =>
|
||||||
w.data.id === id
|
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
|
: w
|
||||||
));
|
));
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
|
@ -129,7 +129,7 @@ export const ManageWorkersModal = ({ open, onClose }: Props) => {
|
||||||
const hasChanges = workers.some(w =>
|
const hasChanges = workers.some(w =>
|
||||||
w.edit.name !== w.data.name ||
|
w.edit.name !== w.data.name ||
|
||||||
w.edit.info !== (w.data.info ?? '') ||
|
w.edit.info !== (w.data.info ?? '') ||
|
||||||
w.edit.maintenance_mode !== w.data.maintenance_mode
|
w.edit.maintenance !== w.data.maintenance_mode
|
||||||
);
|
);
|
||||||
|
|
||||||
const footer = (
|
const footer = (
|
||||||
|
|
@ -151,7 +151,7 @@ export const ManageWorkersModal = ({ open, onClose }: Props) => {
|
||||||
const hasChangesForWorker = (w: WorkerCard) =>
|
const hasChangesForWorker = (w: WorkerCard) =>
|
||||||
w.edit.name !== w.data.name ||
|
w.edit.name !== w.data.name ||
|
||||||
w.edit.info !== (w.data.info ?? '') ||
|
w.edit.info !== (w.data.info ?? '') ||
|
||||||
w.edit.maintenance_mode !== w.data.maintenance_mode;
|
w.edit.maintenance !== w.data.maintenance_mode;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Modal open={open && Boolean(user)} onClose={onClose} title="Manage Workers" class={styles.modal} footer={footer}>
|
<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}>
|
<label class={styles.checkboxLabel}>
|
||||||
<input
|
<input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
checked={w.edit.maintenance_mode}
|
checked={w.edit.maintenance}
|
||||||
onChange={e => setEdit(w.data.id, { maintenance_mode: (e.target as HTMLInputElement).checked })}
|
onChange={e => setEdit(w.data.id, { maintenance: (e.target as HTMLInputElement).checked })}
|
||||||
/>
|
/>
|
||||||
Maint.
|
Maint.
|
||||||
</label>
|
</label>
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,12 @@ export interface WorkerData {
|
||||||
info: string | null;
|
info: string | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface WorkerEdit {
|
||||||
|
name: string;
|
||||||
|
info: string;
|
||||||
|
maintenance: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
export interface UserData {
|
export interface UserData {
|
||||||
username: string;
|
username: string;
|
||||||
kudos: number;
|
kudos: number;
|
||||||
|
|
@ -98,7 +104,7 @@ export const updateWorker = async (
|
||||||
id: string,
|
id: string,
|
||||||
apiKey: string,
|
apiKey: string,
|
||||||
patch: { name?: string; info?: string; maintenance_mode?: boolean }
|
patch: { name?: string; info?: string; maintenance_mode?: boolean }
|
||||||
): Promise<WorkerData> => {
|
): Promise<WorkerEdit> => {
|
||||||
const res = await fetch(`${BASE}/workers/${id}`, {
|
const res = await fetch(`${BASE}/workers/${id}`, {
|
||||||
method: 'PUT',
|
method: 'PUT',
|
||||||
headers: headers(apiKey),
|
headers: headers(apiKey),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue