import { useDatabase } from "@/app/providers/DatabaseProvider/useDatabase"; import React, { createContext, useEffect, useState } from "react"; import { usePublicKey } from "../AccountProvider/usePublicKey"; export const BlacklistContext = createContext({}); interface BlacklistProviderProps { children: React.ReactNode; } export function BlacklistProvider(props : BlacklistProviderProps) { const [blocked, setBlocked] = useState([]); const {runQuery, allQuery} = useDatabase(); const myPublicKey = usePublicKey(); useEffect(() => { syncBlacklistWithLocalDb(); }, [myPublicKey]); const syncBlacklistWithLocalDb = async () => { const result = await allQuery("SELECT * FROM `blacklist` WHERE account = ?", [myPublicKey]); let publicKeysBlocked : string[] = []; for(let i = 0; i < result.length; i++){ let publicKey = result[i].public_key; publicKeysBlocked.push(publicKey); } setBlocked(publicKeysBlocked); } const blockUser = (publicKey : string) => { setBlocked((prev) => [...prev, publicKey]); runQuery("INSERT INTO `blacklist` (public_key, account) VALUES (?, ?)", [publicKey, myPublicKey]); } const unblockUser = (publicKey : string) => { setBlocked((prev) => prev.filter(item => item != publicKey)); runQuery("DELETE FROM `blacklist` WHERE `public_key` = ? AND `account` = ?", [publicKey, myPublicKey]); } const isUserBlocked = (publicKey : string) => { return blocked.includes(publicKey); } return ( {props.children} ) }