v0.12.9 bug fixes (FCM and list ordering)

This commit is contained in:
2026-03-23 21:43:35 -04:00
parent 01f37e60be
commit 477b25dfa0
9 changed files with 32 additions and 95 deletions

View File

@@ -71,7 +71,7 @@ function AllGroupsTab({ allUsers, onRefresh, isMobile = false, onIF, onIB }) {
const [showDelete, setShowDelete] = useState(false);
const load = useCallback(() =>
api.getUserGroups().then(({ groups }) => setGroups(groups)).catch(() => {}), []);
api.getUserGroups().then(({ groups }) => setGroups([...(groups||[])].sort((a, b) => a.name.localeCompare(b.name)))).catch(() => {}), []);
useEffect(() => { load(); }, [load]);
const selectGroup = async (g) => {
@@ -220,7 +220,7 @@ function DirectMessagesTab({ allUserGroups, onRefresh, refreshKey, isMobile = fa
const [showDelete, setShowDelete] = useState(false);
const load = useCallback(() =>
api.getMultiGroupDms().then(({ dms }) => setDms(dms||[])).catch(() => {}), []);
api.getMultiGroupDms().then(({ dms }) => setDms([...(dms||[])].sort((a, b) => a.name.localeCompare(b.name)))).catch(() => {}), []);
useEffect(() => { load(); }, [load, refreshKey]);
const clearSelection = () => { setSelected(null); setDmName(''); setGroupIds(new Set()); setSavedGroupIds(new Set()); setShowDelete(false); };
@@ -556,8 +556,8 @@ export default function GroupManagerPage({ isMobile = false, onProfile, onHelp,
const onRefresh = () => setRefreshKey(k => k+1);
useEffect(() => {
api.searchUsers('').then(({ users }) => setAllUsers(users.filter(u => u.status==='active'))).catch(() => {});
api.getUserGroups().then(({ groups }) => setAllUserGroups(groups)).catch(() => {});
api.searchUsers('').then(({ users }) => setAllUsers(users.filter(u => u.status==='active').sort((a, b) => (a.display_name||a.name).localeCompare(b.display_name||b.name)))).catch(() => {});
api.getUserGroups().then(({ groups }) => setAllUserGroups([...(groups||[])].sort((a, b) => a.name.localeCompare(b.name)))).catch(() => {});
}, [refreshKey]);
// Nav item helper — matches Schedule page style

View File

@@ -300,11 +300,13 @@ export default function UserManagerPage({ isMobile = false, onProfile, onHelp, o
api.getSettings().then(({ settings }) => { if (settings.user_pass) setUserPass(settings.user_pass); }).catch(() => {});
}, [load]);
const filtered = users.filter(u =>
!search || u.name?.toLowerCase().includes(search.toLowerCase()) ||
u.display_name?.toLowerCase().includes(search.toLowerCase()) ||
u.email?.toLowerCase().includes(search.toLowerCase())
);
const filtered = users
.filter(u =>
!search || u.name?.toLowerCase().includes(search.toLowerCase()) ||
u.display_name?.toLowerCase().includes(search.toLowerCase()) ||
u.email?.toLowerCase().includes(search.toLowerCase())
)
.sort((a, b) => a.name.localeCompare(b.name));
// ── Nav item helper (matches Schedule page style) ─────────────────────────
const navItem = (label, key) => (
@@ -354,7 +356,7 @@ export default function UserManagerPage({ isMobile = false, onProfile, onHelp, o
)}
{/* Content */}
<div style={{ flex:1, overflowY:'auto', padding:16 }}>
<div style={{ flex:1, overflowY:'auto', padding:16, paddingBottom: isMobile ? 72 : 16, overscrollBehavior: 'contain' }}>
{tab === 'users' && (
<>
<input className="input" placeholder="Search users…" value={search} onChange={e => setSearch(e.target.value)}