{#snippet renderUserFilterControls()} {at("filter", {}, "Фильтр")} updateUsersFilterState({ usersFilter: value })} /> {at("panel_status", {}, "Статус панели")} updateUsersFilterState({ usersPanelStatus: value })} /> {at("premium_traffic_filter_label", {}, "Премиум трафик")} updateUsersFilterState({ usersPremiumTraffic: value })} /> {/snippet} {#snippet renderActiveUserFilterChips()} {#if activeUsersFilterCount}
{#each activeUserFilterChips as chip (chip.key)} {chip.label} {chip.value} {/each}
{/if} {/snippet}
{at("filter", {}, "Фильтр")} { usersStore.updateState({ usersFilter: value, usersPage: 0 }); usersStore.loadUsers(); }} /> {at("panel_status", {}, "Статус панели")} { usersStore.updateState({ usersPanelStatus: value, usersPage: 0 }); usersStore.loadUsers(); }} /> {at("premium_traffic_filter_label", {}, "Премиум трафик")} { usersStore.updateState({ usersPremiumTraffic: value, usersPage: 0 }); usersStore.loadUsers(); }} />
{at("total", {}, "Всего")} {usersTotal}
{@render renderActiveUserFilterChips()}
{ usersFilterSheetOpen = false; }} >
{@render renderUserFilterControls()}
{@render renderActiveUserFilterChips()}
{at("reset", {}, "Сбросить")} { usersFilterSheetOpen = false; }} > {at("done", {}, "Готово")}
{#if usersLoading} {:else if !users.length} {at("users_empty", {}, "Никого не найдено")} {:else} {#each userTableColumns() as column (column.key)} {#if column.sort} {:else} {column.label} {/if} {/each} {#each users as user} {@const avatar = resolvedAvatarUrl(user)} {@const badge = panelStatusBadge(user)} usersStore.openUser(user)} on:keydown={(e) => { if (e.key === "Enter" || e.key === " ") { e.preventDefault(); usersStore.openUser(user); } }} >
{#if avatar} {:else} {userInitials(user)} {/if}
{userDisplayName(user)} {userSecondaryName(user)} #{user.user_id}
{#if user.premium_traffic && user.premium_traffic.state !== "none"} {premiumTrafficBadgeText(user.premium_traffic)} {:else} {at("premium_traffic_na", {}, "—")} {/if} {rowPaymentsTotal(user)} {user.payments_count ?? 0} {user.invited_users_count ?? 0} {badge.label} {fmtDateShort(user.subscription_expires_at || user.panel_status_expired_at)} {fmtDateShort(user.registration_date)} {/each}
{/if}
{ usersStore.updateState({ usersPage: Math.max(0, usersPage - 1) }); usersStore.loadUsers(); }} onNext={() => { usersStore.updateState({ usersPage: usersPage + 1 }); usersStore.loadUsers(); }} />