/* eslint-disable @typescript-eslint/no-explicit-any */ import BaseLayout from '@layouts/baseLayout'; import OnboardingLayout from '@layouts/onboardingLayout'; import { DatabaseContext } from '@components/contexts/database'; import { truncate } from '@utils/truncate'; import data from '@assets/directory.json'; import { CheckCircledIcon } from '@radix-ui/react-icons'; import { useLocalStorage } from '@rehooks/local-storage'; import { motion } from 'framer-motion'; import Image from 'next/image'; import { useRouter } from 'next/router'; import { nip19 } from 'nostr-tools'; import { JSXElementConstructor, ReactElement, ReactFragment, ReactPortal, useContext, useState } from 'react'; const shuffle = (arr: { name: string; avatar: string; npub: string }[]) => [...arr].sort(() => Math.random() - 0.5); export default function Page() { const db: any = useContext(DatabaseContext); const router = useRouter(); const [follow, setFollow] = useState([]); const [loading, setLoading] = useState(false); const [list] = useState(shuffle(data)); const [currentUser]: any = useLocalStorage('current-user'); const followUser = (e) => { const npub = e.currentTarget.getAttribute('data-npub'); setFollow((arr) => [...arr, npub]); }; const insertDB = async () => { // self follow await db.execute( `INSERT INTO follows (pubkey, account, kind) VALUES ("${currentUser.pubkey}", "${currentUser.pubkey}", "0")` ); // follow selected follow.forEach(async (npub) => { const { data } = nip19.decode(npub); await db.execute(`INSERT INTO follows (pubkey, account, kind) VALUES ("${data}", "${currentUser.pubkey}", "0")`); }); }; const createFollowing = async () => { setLoading(true); insertDB().then(() => setTimeout(() => { setLoading(false); router.push('/'); }, 1500) ); }; return (
{/* spacer */}
Choose 10 people you want to following For better experiences, you should follow the people you care about to personalize your newsfeed, otherwise you will be very bored
{list.map((item, index) => (
followUser(e)} data-npub={item.npub} className={`col-span-1 inline-flex cursor-pointer items-center gap-3 rounded-lg p-2 hover:bg-zinc-700 ${ follow.includes(item.npub) ? 'bg-zinc-800' : '' }`} >
{item.name}

{item.name}

{truncate(item.npub, 16, ' .... ')}

{follow.includes(item.npub) ? : <>}
))}
{loading === true ? ( ) : (
)}
); } Page.getLayout = function getLayout( page: | string | number | boolean | ReactElement> | ReactFragment | ReactPortal ) { return ( {page} ); };