import { useSignal } from '@preact/signals-react'; import * as Dialog from '@radix-ui/react-dialog'; import { resolveResource } from '@tauri-apps/api/path'; import { readTextFile, writeTextFile } from '@tauri-apps/plugin-fs'; import { nip19 } from 'nostr-tools'; import { useEffect } from 'react'; import { parse, stringify } from 'smol-toml'; import { toast } from 'sonner'; import { CancelIcon, PlusIcon, UserAddIcon, UserRemoveIcon } from '@shared/icons'; import { User } from '@shared/user'; export function DepotMembers() { const members = useSignal>(null); const tmpMembers = useSignal>([]); const newMember = useSignal(''); const addMember = async () => { if (!newMember.value.startsWith('npub1')) return toast.error('You need to enter a valid npub'); try { const pubkey = nip19.decode(newMember.value).data as string; tmpMembers.value.push(pubkey); } catch (e) { console.error(e); } }; const removeMember = (member: string) => { tmpMembers.value = tmpMembers.value.filter((item) => item !== member); }; const updateMembers = async () => { members.value = new Set(tmpMembers.value); const defaultConfig = await resolveResource('resources/config.toml'); const config = await readTextFile(defaultConfig); const configContent = parse(config); configContent.authorization['pubkey_whitelist'] = [...members.value]; const newConfig = stringify(configContent); return await writeTextFile(defaultConfig, newConfig); }; useEffect(() => { async function loadConfig() { const defaultConfig = await resolveResource('resources/config.toml'); const config = await readTextFile(defaultConfig); const configContent = parse(config); tmpMembers.value = Array.from(configContent.authorization['pubkey_whitelist']); } loadConfig(); }, []); return (

Members

Only allowed users can publish event to your Depot

{tmpMembers.value.slice(0, 5).map((item) => ( ))} {tmpMembers.value.length > 5 ? (
+{tmpMembers.value.length}
) : null}
Manage
Manage member
(newMember.value = e.target.value)} placeholder="npub1..." className="h-11 w-full rounded-lg border-transparent bg-neutral-100 pl-3 pr-20 placeholder:text-neutral-500 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:bg-neutral-900 dark:placeholder:text-neutral-400 dark:focus:ring-blue-800" />
{tmpMembers.value.map((member) => (
))}
); }