build.sh bug fixes
This commit is contained in:
@@ -40,15 +40,15 @@ export default function ChangePassword() {
|
||||
<form onSubmit={submit} style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
|
||||
<div className="flex-col gap-1">
|
||||
<label className="text-sm font-medium" style={{ color: 'var(--text-secondary)' }}>Current Password</label>
|
||||
<input className="input" type="password" value={current} onChange={e = autoComplete="new-password"> setCurrent(e.target.value)} required />
|
||||
<input className="input" type="password" value={current} onChange={e => setCurrent(e.target.value)} autoComplete="new-password" required />
|
||||
</div>
|
||||
<div className="flex-col gap-1">
|
||||
<label className="text-sm font-medium" style={{ color: 'var(--text-secondary)' }}>New Password</label>
|
||||
<input className="input" type="password" value={next} onChange={e = autoComplete="new-password"> setNext(e.target.value)} required />
|
||||
<input className="input" type="password" value={next} onChange={e => setNext(e.target.value)} autoComplete="new-password" required />
|
||||
</div>
|
||||
<div className="flex-col gap-1">
|
||||
<label className="text-sm font-medium" style={{ color: 'var(--text-secondary)' }}>Confirm New Password</label>
|
||||
<input className="input" type="password" value={confirm} onChange={e = autoComplete="new-password"> setConfirm(e.target.value)} required />
|
||||
<input className="input" type="password" value={confirm} onChange={e => setConfirm(e.target.value)} autoComplete="new-password" required />
|
||||
</div>
|
||||
<button className="btn btn-primary" type="submit" disabled={loading}>
|
||||
{loading ? 'Saving...' : 'Set New Password'}
|
||||
|
||||
@@ -349,8 +349,7 @@ export default function Chat() {
|
||||
onSettings={() => { setDrawerOpen(false); setModal('settings'); }}
|
||||
onUsers={() => { setDrawerOpen(false); setPage('users'); }}
|
||||
onHostPanel={() => { setDrawerOpen(false); setPage('hostpanel'); }}
|
||||
features={features} currentPage={page} isMobile={isMobile}
|
||||
/>
|
||||
features={features} currentPage={page} isMobile={isMobile} />
|
||||
{modal === 'profile' && <ProfileModal onClose={() => setModal(null)} />}
|
||||
{modal === 'settings' && <SettingsModal onClose={() => setModal(null)} onFeaturesChanged={setFeatures} />}
|
||||
{modal === 'branding' && <BrandingModal onClose={() => setModal(null)} />}
|
||||
@@ -376,8 +375,7 @@ export default function Chat() {
|
||||
onSettings={() => { setDrawerOpen(false); setModal('settings'); }}
|
||||
onUsers={() => { setDrawerOpen(false); setPage('users'); }}
|
||||
onHostPanel={() => { setDrawerOpen(false); setPage('hostpanel'); }}
|
||||
features={features} currentPage={page} isMobile={isMobile}
|
||||
/>
|
||||
features={features} currentPage={page} isMobile={isMobile} />
|
||||
{modal === 'profile' && <ProfileModal onClose={() => setModal(null)} />}
|
||||
{modal === 'settings' && <SettingsModal onClose={() => setModal(null)} onFeaturesChanged={setFeatures} />}
|
||||
{modal === 'branding' && <BrandingModal onClose={() => setModal(null)} />}
|
||||
@@ -407,8 +405,7 @@ export default function Chat() {
|
||||
onHostPanel={() => { setDrawerOpen(false); setPage('hostpanel'); }}
|
||||
features={features}
|
||||
currentPage={page}
|
||||
isMobile={isMobile}
|
||||
/>
|
||||
isMobile={isMobile} />
|
||||
{modal === 'profile' && <ProfileModal onClose={() => setModal(null)} />}
|
||||
{modal === 'settings' && <SettingsModal onClose={() => setModal(null)} onFeaturesChanged={setFeatures} />}
|
||||
</div>
|
||||
@@ -426,8 +423,7 @@ export default function Chat() {
|
||||
features={features}
|
||||
onProfile={() => setModal('profile')}
|
||||
onHelp={() => setModal('help')}
|
||||
onAbout={() => setModal('about')}
|
||||
/>
|
||||
onAbout={() => setModal('about')} />
|
||||
</div>
|
||||
<NavDrawer
|
||||
open={drawerOpen}
|
||||
@@ -442,8 +438,7 @@ export default function Chat() {
|
||||
onHostPanel={() => { setDrawerOpen(false); setPage('hostpanel'); }}
|
||||
features={features}
|
||||
currentPage={page}
|
||||
isMobile={isMobile}
|
||||
/>
|
||||
isMobile={isMobile} />
|
||||
{modal === 'profile' && <ProfileModal onClose={() => setModal(null)} />}
|
||||
{modal === 'settings' && <SettingsModal onClose={() => setModal(null)} onFeaturesChanged={setFeatures} />}
|
||||
{modal === 'branding' && <BrandingModal onClose={() => setModal(null)} />}
|
||||
@@ -483,8 +478,7 @@ export default function Chat() {
|
||||
isMobile={isMobile}
|
||||
onAbout={() => setModal('about')}
|
||||
onHelp={() => setModal('help')}
|
||||
onlineUserIds={onlineUserIds}
|
||||
/>
|
||||
onlineUserIds={onlineUserIds} />
|
||||
)}
|
||||
|
||||
{(!isMobile || !showSidebar) && (
|
||||
@@ -493,8 +487,7 @@ export default function Chat() {
|
||||
onBack={isMobile ? () => { setShowSidebar(true); setActiveGroupId(null); } : null}
|
||||
onGroupUpdated={loadGroups}
|
||||
onDirectMessage={(g) => { loadGroups(); selectGroup(g.id); }}
|
||||
onlineUserIds={onlineUserIds}
|
||||
/>
|
||||
onlineUserIds={onlineUserIds} />
|
||||
)}
|
||||
</div>
|
||||
|
||||
@@ -511,8 +504,7 @@ export default function Chat() {
|
||||
onHostPanel={() => { setDrawerOpen(false); setPage('hostpanel'); }}
|
||||
features={features}
|
||||
currentPage={page}
|
||||
isMobile={isMobile}
|
||||
/>
|
||||
isMobile={isMobile} />
|
||||
{modal === 'profile' && <ProfileModal onClose={() => setModal(null)} />}
|
||||
{modal === 'settings' && <SettingsModal onClose={() => setModal(null)} onFeaturesChanged={setFeatures} />}
|
||||
{modal === 'branding' && <BrandingModal onClose={() => setModal(null)} />}
|
||||
|
||||
@@ -24,8 +24,7 @@ function UserCheckList({ allUsers, selectedIds, onChange, onIF, onIB }) {
|
||||
const filtered = allUsers.filter(u => (u.display_name||u.name).toLowerCase().includes(search.toLowerCase()));
|
||||
return (
|
||||
<div>
|
||||
<input className="input" placeholder="Search users…" value={search} onChange={e = autoComplete="new-password"> setSearch(e.target.value)}
|
||||
style={{ marginBottom:8 }} autoComplete="new-password" onFocus={onIF} onBlur={onIB} />
|
||||
<input className="input" placeholder="Search users…" value={search} onChange={e => setSearch(e.target.value)} autoComplete="new-password" style={{ marginBottom:8 }} autoComplete="new-password" onFocus={onIF} onBlur={onIB} />
|
||||
<div style={{ maxHeight:220, overflowY:'auto', border:'1px solid var(--border)', borderRadius:'var(--radius)' }}>
|
||||
{filtered.map(u => (
|
||||
<label key={u.id} style={{ display:'flex', alignItems:'center', gap:10, padding:'8px 12px', borderBottom:'1px solid var(--border)', cursor:'pointer' }}>
|
||||
@@ -139,8 +138,7 @@ function AllGroupsTab({ allUsers, onRefresh, isMobile = false, onIF, onIB }) {
|
||||
<div style={{ display:'flex', flexDirection:'column', gap:18, maxWidth: isMobile ? '100%' : 520 }}>
|
||||
<div>
|
||||
<label className="settings-section-label">Group Name</label>
|
||||
<input className="input" value={editName} onChange={e = autoComplete="new-password"> setEditName(e.target.value)}
|
||||
placeholder="e.g. Coaches" style={{ marginTop:6 }} autoComplete="new-password" onFocus={onIF} onBlur={onIB} />
|
||||
<input className="input" value={editName} onChange={e => setEditName(e.target.value)} autoComplete="new-password" placeholder="e.g. Coaches" style={{ marginTop:6 }} autoComplete="new-password" onFocus={onIF} onBlur={onIB} />
|
||||
{isCreating && <p style={{ fontSize:12, color:'var(--text-tertiary)', marginTop:5 }}>A matching Direct Message group will be created automatically.</p>}
|
||||
</div>
|
||||
<div>
|
||||
@@ -248,7 +246,7 @@ function DirectMessagesTab({ allUserGroups, onRefresh, refreshKey, isMobile = fa
|
||||
<div style={{ display:'flex', flexDirection:'column', gap:18, maxWidth: isMobile ? '100%' : 520 }}>
|
||||
<div>
|
||||
<label className="settings-section-label">DM Name</label>
|
||||
<input className="input" value={dmName} onChange={e = autoComplete="new-password"> setDmName(e.target.value)} placeholder="e.g. Coaches + Players" style={{ marginTop:6 }} autoComplete="new-password" onFocus={onIF} onBlur={onIB} />
|
||||
<input className="input" value={dmName} onChange={e => setDmName(e.target.value)} autoComplete="new-password" placeholder="e.g. Coaches + Players" style={{ marginTop:6 }} autoComplete="new-password" onFocus={onIF} onBlur={onIB} />
|
||||
</div>
|
||||
<div>
|
||||
<label className="settings-section-label">Member Groups</label>
|
||||
@@ -434,7 +432,7 @@ function U2URestrictionsTab({ allUserGroups, isMobile = false, onIF, onIB }) {
|
||||
Allowed Groups <span style={{ fontWeight:400, color:'var(--text-tertiary)' }}>({otherGroups.length - blockedIds.size} of {otherGroups.length} allowed)</span>
|
||||
</label>
|
||||
<input className="input" placeholder="Search groups…" value={search}
|
||||
onChange={e = autoComplete="new-password"> setSearch(e.target.value)} style={{ marginBottom:8 }}
|
||||
onChange={e => setSearch(e.target.value)} autoComplete="new-password" style={{ marginBottom:8 }}
|
||||
autoComplete="new-password" onFocus={onIF} onBlur={onIB} />
|
||||
</div>
|
||||
|
||||
|
||||
@@ -99,8 +99,7 @@ function Input({ label, value, onChange, placeholder, type = 'text', required, h
|
||||
fontSize: 14, outline: 'none', background: '#fff', color: '#202124',
|
||||
transition: 'border-color 0.15s' }}
|
||||
onFocus={e => e.target.style.borderColor = '#1a73e8'}
|
||||
onBlur={e => e.target.style.borderColor = '#e0e0e0'}
|
||||
/>
|
||||
onBlur={e => e.target.style.borderColor = '#e0e0e0'} />
|
||||
{hint && <span style={{ fontSize: 11, color: '#9aa0a6' }}>{hint}</span>}
|
||||
</div>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user