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 useMinLoading from "../../components/useMinLoading" import { eventStore, primeProfiles, useAdminTenants } from "../../lib/hooks" function shortenPubkey(pubkey: string) { if (pubkey.length <= 16) return pubkey return `${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((result) => result.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

setQuery(e.currentTarget.value)} placeholder="Search tenants..." class="w-full border border-gray-300 rounded-lg py-2 pl-10 pr-3 focus:outline-none focus:ring-2 focus:ring-blue-500" />
0} fallback={

No tenants found.

}>
) }