fix: android dropdown menu button

This commit is contained in:
2026-06-27 20:27:44 +07:00
parent a7e569d9b4
commit 3fa80b69bf
6 changed files with 113 additions and 181 deletions
@@ -81,14 +81,13 @@ export const MapProfileDropdown: React.FC<MapProfileDropdownProps> = ({
/>
<div
className="fixed bottom-0 left-0 right-0 sm:absolute sm:bottom-auto sm:top-14 sm:right-0 sm:left-auto z-[999999] w-full sm:w-64 bg-slate-900 border-t sm:border border-slate-800 rounded-t-3xl sm:rounded-2xl p-3 sm:p-2 shadow-2xl animate-in slide-in-from-bottom sm:slide-in-from-top-2 duration-300 text-xs text-slate-200"
className="absolute right-0 top-14 z-[999999] w-64 bg-slate-900 border border-slate-800 rounded-2xl p-2 shadow-2xl flex flex-col space-y-0.5 text-xs text-slate-200"
style={{
maxHeight: '80vh',
maxHeight: '75vh',
overflowY: 'auto',
boxShadow: '0 20px 25px -5px rgba(0, 0, 0, 0.5), 0 10px 10px -5px rgba(0, 0, 0, 0.4)'
boxShadow: '0 20px 25px -5px rgba(0, 0, 0, 0.6)'
}}
>
<div className="w-12 h-1 bg-slate-700 rounded-full mx-auto mb-3 sm:hidden" />
{isAuthenticated ? (
<div className="flex flex-col space-y-1">
@@ -39,10 +39,16 @@ export const FriendsManagerModal: React.FC<FriendsManagerModalProps> = ({
const res = await fetch('/api/v1/connections', { headers: getHeaders() });
if (res.ok) {
const data = await res.json();
setConnections(data || []);
const list = Array.isArray(data)
? data
: (data && Array.isArray(data.connections) ? data.connections : []);
setConnections(list);
} else {
setConnections([]);
}
} catch (e) {
console.error('[FriendsManagerModal] Error fetching connections:', e);
setConnections([]);
} finally {
setIsLoading(false);
}
@@ -170,15 +176,19 @@ export const FriendsManagerModal: React.FC<FriendsManagerModalProps> = ({
if (!isOpen || !user) return null;
// Filter lists
const activeFriends = connections.filter((c: any) => c.status === 'ACCEPTED');
const activeFriends = Array.isArray(connections)
? connections.filter((c: any) => c && c.status === 'ACCEPTED')
: [];
// Received pending requests
const pendingRequests = connections.filter((c: any) => c.status === 'PENDING' && c.targetUser?.id === user?.id);
const pendingRequests = Array.isArray(connections)
? connections.filter((c: any) => c && c.status === 'PENDING' && c.targetUser?.id === user?.id)
: [];
const getStatusText = (targetUserId: string) => {
const existing = connections.find(
c => c.targetUser?.id === targetUserId || c.requester?.id === targetUserId
);
const existing = Array.isArray(connections)
? connections.find(c => c && (c.targetUser?.id === targetUserId || c.requester?.id === targetUserId))
: null;
if (!existing) return null;
if (existing.status === 'ACCEPTED') return 'FRIEND';
if (existing.status === 'PENDING') {
@@ -46,11 +46,17 @@ export const LiveChatModal: React.FC<LiveChatModalProps> = ({
if (res.ok) {
const data = await res.json();
// Accepted connections only
const activeConns = data.filter((c: any) => c.status === 'ACCEPTED');
const list = Array.isArray(data)
? data
: (data && Array.isArray(data.connections) ? data.connections : []);
const activeConns = list.filter((c: any) => c && c.status === 'ACCEPTED');
setConnections(activeConns);
} else {
setConnections([]);
}
} catch (e) {
console.error('[LiveChatModal] Error fetching connections:', e);
setConnections([]);
} finally {
setIsLoadingContacts(false);
}
@@ -236,10 +242,12 @@ export const LiveChatModal: React.FC<LiveChatModalProps> = ({
if (!isOpen || !user) return null;
// Filter connections by search query
const filteredConnections = connections.filter((conn: any) => {
const friend = conn.targetUser?.id === user?.id ? conn.requester : conn.targetUser;
return friend?.name?.toLowerCase().includes(searchQuery.toLowerCase());
});
const filteredConnections = Array.isArray(connections)
? connections.filter((conn: any) => {
const friend = conn.targetUser?.id === user?.id ? conn.requester : conn.targetUser;
return friend?.name?.toLowerCase().includes(searchQuery.toLowerCase());
})
: [];
return (
<div className="fixed inset-0 z-[1000000] bg-black/70 backdrop-blur-sm flex items-end sm:items-center justify-center p-0 sm:p-4 pointer-events-auto">