import { A } from "@solidjs/router" import Fuse from "fuse.js" import { createEffect, createMemo, createSignal, For, onCleanup, Show } from "solid-js" import { getProfilePicture } from "applesauce-core/helpers/profile" import PageContainer from "@/components/PageContainer" import ResourceState from "@/components/ResourceState" import SearchInput from "@/components/SearchInput" import useMinLoading from "@/components/useMinLoading" import { primeProfiles, useAdminTenants } from "@/lib/hooks" import { eventStore } from "@/lib/state" function shortenPubkey(pubkey: string) { return pubkey.length <= 16 ? pubkey : `${pubkey.slice(0, 8)}...${pubkey.slice(-8)}` } export default function AdminTenantList() { const [query, setQuery] = createSignal("") const [tenants] = useAdminTenants() const [profiles, setProfiles] = createSignal>({}) const loading = useMinLoading(() => tenants.loading) const filtered = createMemo(() => { const list = (tenants() ?? []).map((tenant) => { const profile = profiles()[tenant.pubkey] return { ...tenant, profileName: profile?.name, profileAbout: profile?.about, profileNip05: profile?.nip05 } }) const q = query().trim() if (!q) return list return new Fuse(list, { keys: ["pubkey", "status", "profileName", "profileAbout", "profileNip05"], threshold: 0.35, ignoreLocation: true }).search(q).map(r => r.item) }) createEffect(() => { const list = tenants() ?? [] if (!list.length) return const pubkeys = list.map(t => t.pubkey) const reqSub = primeProfiles(pubkeys) const profileSubs = pubkeys.map((pubkey) => eventStore.profile(pubkey).subscribe((profile) => { setProfiles(prev => ({ ...prev, [pubkey]: { name: profile?.name || profile?.display_name, about: profile?.about, nip05: profile?.nip05, picture: getProfilePicture(profile), }, })) }), ) onCleanup(() => { reqSub.unsubscribe() for (const sub of profileSubs) sub.unsubscribe() }) }) return (

Tenants

0} fallback={

No tenants found.

}>
) }