{#snippet buddyRow(buddy: Buddy)}
(selectedId = buddy.id)} ondblclick={() => openIm(buddy.id, buddy.nickname)} oncontextmenu={(e) => showContext(e, buddy)} >
{buddy.nickname}{buddy.status === 'idle' ? ' (Inactif)' : ''}
{#if buddy.status === 'away'}
{/if}
{#if editMode}
removeBuddy(buddy.id)}>✕
{/if}
{/snippet}
{#snippet menu()}
(dropdownMenu = dropdownMenu === 'aim' ? null : 'aim')}>Mon AIM
{#if dropdownMenu === 'aim'}
{ dropdownMenu = null; desktop.openAway(); }}>Message d’absence…
{ dropdownMenu = null; if (me) desktop.openProfile({ userId: me.id as Id<'users'>, nickname: me.nickname }); }}>Modifier mon profil…
{ dropdownMenu = null; desktop.openPreferences(); }}>Préférences…
Se déconnecter
{/if}
(dropdownMenu = dropdownMenu === 'contacts' ? null : 'contacts')} >Contacts
{#if dropdownMenu === 'contacts'}
openPanel('add')}>Ajouter un contact…
{ dropdownMenu = null; desktop.openNewRoom(); }}>Nouveau salon…
{/if}
(dropdownMenu = dropdownMenu === 'help' ? null : 'help')}>Aide
{#if dropdownMenu === 'help'}
{ dropdownMenu = null; desktop.openAbout(); }}>À propos de PDR AIM
{/if}
{/snippet}
{#if me}
{me.nickname}
{meQuery?.data?.status === 'away' ? `Absent${meQuery.data.awayMessage ? ` : ${meQuery.data.awayMessage}` : ''}` : (STATUS_LABELS_FR[(meQuery?.data?.status ?? me.status) as AimStatus] ?? 'En ligne')}
{:else}
desktop.openLogin('signin')}>Se connecter
Connectez-vous pour voir vos contacts.
{/if}
(editMode = false)} >Online
(editMode = true)} >List Setup
{#if me} {#each sortedGroups as group (group.name)}
toggleGroup(group.name)} >{collapsed.has(group.name) ? '▶' : '▼'} {group.name} ({group.members.filter((buddy) => buddy.status === 'online') .length}/{group.total})
{#if !collapsed.has(group.name)}{#each group.members as buddy (buddy.id)}{@render buddyRow( buddy )}{/each}{/if} {/each}
toggleGroup('Offline')} >{collapsed.has('Offline') ? '▶' : '▼'} Offline ({offline.length})
{#if !collapsed.has('Offline')}{#each offline as buddy (buddy.id)}{@render buddyRow( buddy )}{/each}{/if}
toggleGroup('Salons')} >{collapsed.has('Salons') ? '▶' : '▼'} Salons ({roomsQuery?.data?.length ?? 0})
{#if !collapsed.has('Salons')}{#each [...(roomsQuery?.data ?? [])].sort((a, b) => Number(b.isDefault) - Number(a.isDefault) || a.name.localeCompare(b.name)) as room (room.id)}
desktop.openChatRoom(room.id, room.name)} >
{room.name}
{/each}{/if}
toggleGroup('Conversations')} >{collapsed.has('Conversations') ? '▶' : '▼'} Conversations ({directQuery?.data?.length ?? 0})
{#if !collapsed.has('Conversations')}{#each directQuery?.data ?? [] as room (room.id)}{#if room.other}
0} onclick={() => desktop.openIm({ roomId: room.id, otherUserId: room.other!.id, otherNickname: room.other!.nickname })} >
{room.other.nickname}{room.unreadCount ? ` (${room.unreadCount >= 100 ? '99+' : room.unreadCount})` : ''}
{/if}{/each}{/if} {/if}
{#if me && panel === 'im'}
{ e.preventDefault(); void startIm(); }} >
Pseudo du contact
Ouvrir IM
{/if} {#if me && panel === 'add'}
{ e.preventDefault(); void addBuddy(); }} >
Contact
Choisir…
{#each availableUsers as user (user.id)}
{user.nickname}
{/each}
Groupe
{#each DEFAULT_BUDDY_GROUPS as group (group)}
{group}
{/each}
Autre…
{#if addGroup === 'Autre…'}
{/if}
Ajouter
{/if} {#if error}
{error}
{/if}
openPanel('im')} >
IM
desktop.openNewRoom()} >
Chat
{ if (selectedBuddy) desktop.openProfile({ userId: selectedBuddy.id, nickname: selectedBuddy.nickname }); }}>
Infos
desktop.openAway()} >
Absent
openPanel('add')} >
Ajouter
{#if context}
{ if (context) void openIm(context.buddy.id, context.buddy.nickname); context = null; }}>Envoyer un message instantané
{ if (context) desktop.openProfile({ userId: context.buddy.id, nickname: context.buddy.nickname }); context = null; }}>Infos sur {context.buddy.nickname}
{ if (context) void removeBuddy(context.buddy.id); }}>Retirer de la liste
{/if}