import React, { ChangeEventHandler, FormEventHandler, useCallback, useState } from 'react'; import { Box, Button, Chip, Icon, IconButton, Icons, Input, Spinner, Text, config } from 'folds'; import { SequenceCard } from '../../../components/sequence-card'; import { SequenceCardStyle } from '../styles.css'; import { SettingTile } from '../../../components/setting-tile'; import { useMatrixClient } from '../../../hooks/useMatrixClient'; import { AsyncStatus, useAsyncCallback } from '../../../hooks/useAsyncCallback'; import { isUserId } from '../../../utils/matrix'; import { useIgnoredUsers } from '../../../hooks/useIgnoredUsers'; function IgnoreUserInput({ userList }: { userList: string[] }) { const mx = useMatrixClient(); const [userId, setUserId] = useState(''); const [ignoreState, ignore] = useAsyncCallback( useCallback( async (uId: string) => { mx.setIgnoredUsers([...userList, uId]); setUserId(''); }, [mx, userList] ) ); const ignoring = ignoreState.status === AsyncStatus.Loading; const handleChange: ChangeEventHandler = (evt) => { const uId = evt.currentTarget.value; setUserId(uId); }; const handleReset = () => { setUserId(''); }; const handleSubmit: FormEventHandler = (evt) => { evt.preventDefault(); if (ignoring) return; const target = evt.target as HTMLFormElement | undefined; const userIdInput = target?.userIdInput as HTMLInputElement | undefined; const uId = userIdInput?.value.trim(); if (!uId) return; if (!isUserId(uId)) return; ignore(uId); }; return ( ) } /> ); } function IgnoredUserChip({ userId, userList }: { userId: string; userList: string[] }) { const mx = useMatrixClient(); const [unignoreState, unignore] = useAsyncCallback( useCallback( () => mx.setIgnoredUsers(userList.filter((uId) => uId !== userId)), [mx, userId, userList] ) ); const handleUnignore = () => unignore(); const unIgnoring = unignoreState.status === AsyncStatus.Loading; return ( ) : ( ) } onClick={handleUnignore} disabled={unIgnoring} > {userId} ); } export function IgnoredUserList() { const ignoredUsers = useIgnoredUsers(); return ( Block Messages {ignoredUsers.length > 0 && ( Blocklist {ignoredUsers.map((userId) => ( ))} )} ); }