Fixed User Modification Interaction Logic and Script Editor Text

This commit is contained in:
2025-09-19 19:59:20 -06:00
parent 8075781bb0
commit de56ca9528
2 changed files with 24 additions and 7 deletions

View File

@@ -75,6 +75,7 @@ export default function UserManagement() {
const [menuAnchor, setMenuAnchor] = useState(null); const [menuAnchor, setMenuAnchor] = useState(null);
const [menuUser, setMenuUser] = useState(null); const [menuUser, setMenuUser] = useState(null);
const [resetOpen, setResetOpen] = useState(false); const [resetOpen, setResetOpen] = useState(false);
const [resetTarget, setResetTarget] = useState(null);
const [newPassword, setNewPassword] = useState(""); const [newPassword, setNewPassword] = useState("");
const [createOpen, setCreateOpen] = useState(false); const [createOpen, setCreateOpen] = useState(false);
const [createForm, setCreateForm] = useState({ username: "", display_name: "", password: "", role: "User" }); const [createForm, setCreateForm] = useState({ username: "", display_name: "", password: "", role: "User" });
@@ -191,6 +192,11 @@ export default function UserManagement() {
const openChangeRole = (user) => { const openChangeRole = (user) => {
if (!user) return; if (!user) return;
if (me && user.username && String(me.username).toLowerCase() === String(user.username).toLowerCase()) {
setWarnMessage("You cannot change your own role.");
setWarnOpen(true);
return;
}
const nextRole = (String(user.role || "User").toLowerCase() === "admin") ? "User" : "Admin"; const nextRole = (String(user.role || "User").toLowerCase() === "admin") ? "User" : "Admin";
setChangeRoleTarget(user); setChangeRoleTarget(user);
setChangeRoleNext(nextRole); setChangeRoleNext(nextRole);
@@ -224,7 +230,7 @@ export default function UserManagement() {
}; };
const doResetPassword = async () => { const doResetPassword = async () => {
const user = menuUser; const user = resetTarget;
if (!user) return; if (!user) return;
const pw = newPassword || ""; const pw = newPassword || "";
if (!pw.trim()) return; if (!pw.trim()) return;
@@ -242,6 +248,7 @@ export default function UserManagement() {
return; return;
} }
setResetOpen(false); setResetOpen(false);
setResetTarget(null);
setNewPassword(""); setNewPassword("");
} catch (e) { } catch (e) {
console.error(e); console.error(e);
@@ -249,7 +256,12 @@ export default function UserManagement() {
} }
}; };
const openReset = () => { setResetOpen(true); setNewPassword(""); closeMenu(); }; const openReset = (user) => {
if (!user) return;
setResetTarget(user);
setResetOpen(true);
setNewPassword("");
};
const openCreate = () => { setCreateOpen(true); setCreateForm({ username: "", display_name: "", password: "", role: "User" }); }; const openCreate = () => { setCreateOpen(true); setCreateForm({ username: "", display_name: "", password: "", role: "User" }); };
const doCreate = async () => { const doCreate = async () => {
@@ -408,15 +420,20 @@ export default function UserManagement() {
> >
Delete User Delete User
</MenuItem> </MenuItem>
<MenuItem onClick={() => { openReset(); }}>Reset Password</MenuItem> <MenuItem onClick={() => { const u = menuUser; closeMenu(); openReset(u); }}>Reset Password</MenuItem>
<MenuItem onClick={() => { const u = menuUser; closeMenu(); openChangeRole(u); }}>Change Role</MenuItem> <MenuItem
disabled={me && menuUser && String(me.username).toLowerCase() === String(menuUser.username).toLowerCase()}
onClick={() => { const u = menuUser; closeMenu(); openChangeRole(u); }}
>
Change Role
</MenuItem>
</Menu> </Menu>
<Dialog open={resetOpen} onClose={() => setResetOpen(false)} PaperProps={{ sx: { bgcolor: "#121212", color: "#fff" } }}> <Dialog open={resetOpen} onClose={() => setResetOpen(false)} PaperProps={{ sx: { bgcolor: "#121212", color: "#fff" } }}>
<DialogTitle>Reset Password</DialogTitle> <DialogTitle>Reset Password</DialogTitle>
<DialogContent> <DialogContent>
<DialogContentText sx={{ color: "#ccc" }}> <DialogContentText sx={{ color: "#ccc" }}>
Enter a new password for {menuUser?.username}. Enter a new password for {resetTarget?.username}.
</DialogContentText> </DialogContentText>
<TextField <TextField
autoFocus autoFocus
@@ -440,7 +457,7 @@ export default function UserManagement() {
/> />
</DialogContent> </DialogContent>
<DialogActions> <DialogActions>
<Button onClick={() => setResetOpen(false)} sx={{ color: "#58a6ff" }}>Cancel</Button> <Button onClick={() => { setResetOpen(false); setResetTarget(null); }} sx={{ color: "#58a6ff" }}>Cancel</Button>
<Button onClick={doResetPassword} sx={{ color: "#58a6ff" }}>OK</Button> <Button onClick={doResetPassword} sx={{ color: "#58a6ff" }}>OK</Button>
</DialogActions> </DialogActions>
</Dialog> </Dialog>

View File

@@ -535,7 +535,7 @@ export default function ScriptEditor() {
<Box sx={{ p: 2, pb: 1 }}> <Box sx={{ p: 2, pb: 1 }}>
<Typography variant="h6" sx={{ color: "#58a6ff", mb: 0 }}>Scripts</Typography> <Typography variant="h6" sx={{ color: "#58a6ff", mb: 0 }}>Scripts</Typography>
<Typography variant="body2" sx={{ color: "#aaa" }}> <Typography variant="body2" sx={{ color: "#aaa" }}>
Create, edit, and rearrange scripts in folders. Create, edit, and organize various types of scripts.
</Typography> </Typography>
</Box> </Box>
<Box <Box