spectator nicknames, overseer common issue filtering

This commit is contained in:
legop3
2026-06-07 15:21:42 -04:00
parent 097d23dc66
commit 124cdc0c64
7 changed files with 34 additions and 25 deletions
+5 -7
View File
@@ -2,29 +2,28 @@
// Purpose: Defines the Nickname Form module and the local helpers/components used in this file.
// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.
import { useEffect, useState } from 'react';
import { useSessionActions, useSessionSelector } from '../../context/SessionContext.jsx';
import { useSessionActions } from '../../context/SessionContext.jsx';
import { useSettingsNamespace } from '../../settings/index.js';
export default function NicknameForm({ compact = false }) {
const role = useSessionSelector((state) => state.session?.role || null);
const { setNickname } = useSessionActions();
const { value, save } = useSettingsNamespace('profile', { nickname: '' });
const [nicknameInput, setNicknameInput] = useState(value.nickname || '');
const [saving, setSaving] = useState(false);
const canSetNickname = role !== 'spectator';
useEffect(() => {
setNicknameInput(value.nickname || '');
}, [value.nickname]);
async function handleSave(event) {
event.preventDefault();
if (!canSetNickname) return;
const trimmed = (nicknameInput || '').trim().slice(0, 32);
if (!trimmed) return;
setSaving(true);
try {
// Nicknames are identity metadata rather than rover-control permission.
// Spectator pages use the same socket action and local profile storage as
// the driver UI so chat/user-list labels stay consistent across routes.
await setNickname(trimmed);
save({ nickname: trimmed });
} catch (err) {
@@ -47,12 +46,11 @@ export default function NicknameForm({ compact = false }) {
}}
maxLength={32}
placeholder="Enter a nickname"
disabled={!canSetNickname}
/>
<button
type="button"
onClick={handleSave}
disabled={!canSetNickname || saving}
disabled={saving}
className="button-dark h-full shrink-0 whitespace-nowrap px-0.5 py-0 disabled:opacity-50"
>
{saving ? 'Saving…' : compact ? 'Set' : 'Save'}