'use client'; import Button from '@/components/button/PrimaryButton'; import SearchBox from '@/components/input/SearchBox'; import BlurredOverlayContainer from '@/components/overlays/BlurredOverlayContainer'; import { ScrollArea } from '@/components/ui/scrollarea'; import { Radar2, Trash } from 'iconsax-react'; import { Check, CheckCheck } from 'lucide-react'; import Image from 'next/image'; import Link from 'next/link'; import React, { useCallback, useState } from 'react' import { useTranslation } from 'react-i18next'; import { motion } from 'framer-motion'; import { LongPressCallbackMeta, LongPressReactEvents, useLongPress } from 'use-long-press' import { useRouter } from 'next/navigation'; type Props = object type ChatEntryModel = { id: string, username: string, avatarUrl: string, update?: { time: string, content: string, count?: number, seen?: boolean } } function ChatIndex({ }: Props) { const { t } = useTranslation('chat'); const { t: tDeleteModal } = useTranslation('common', { keyPrefix: 'DeleteChatModal' }); const [search, setSearch] = useState(''); const [selectedChats, setSelectedChats] = useState>([]); const [deleteModalVisible, setDeleteModalVisible] = useState(false); const router = useRouter(); const [chatsList, setChatList] = useState>([ { id: '0', username: 'علی مصلحی', avatarUrl: '/assets/images/user-avatar.png', update: { time: '12:03', content: 'چه خبر', count: 2, } }, { id: '1', username: 'علی مصلحی', avatarUrl: '/assets/images/user-avatar.png', update: { time: '12:03', content: 'چه خبر', count: 2, } }, { id: '2', username: 'علی مصلحی', avatarUrl: '/assets/images/user-avatar.png', update: { time: '12:03', content: 'چه خبر', seen: true } }, { id: '3', username: 'علی مصلحی', avatarUrl: '/assets/images/user-avatar.png', update: { time: '12:03', content: 'چه خبر', seen: true } }, { id: '4', username: 'علی مصلحی', avatarUrl: '/assets/images/user-avatar.png', update: { time: '12:03', content: 'چه خبر', seen: true } }, { id: '5', username: 'علی مصلحی', avatarUrl: '/assets/images/user-avatar.png', update: { time: '12:03', content: 'چه خبر', seen: false } }, ]); const toggleDeleteModalVisiblity = (e?: React.MouseEvent) => { e?.preventDefault(); e?.stopPropagation(); setDeleteModalVisible((state) => { if (state) { setSelectedChats([]); } return !state; }); }; const deleteSelectedChats = () => { if (setSelectedChats.length <= 0) return; setChatList((prev) => { return prev.filter(x => !selectedChats.includes(x.id)); }) toggleDeleteModalVisiblity(); } const longPressCallback = useCallback((e: LongPressReactEvents, ctx: LongPressCallbackMeta) => { e.preventDefault(); if (!ctx?.context) return; const id = String(ctx.context); setSelectedChats((prev) => { if (prev.includes(id)) return prev.filter(x => x !== id); return [...prev, id] }) }, []) const longPressCancelledCallback = useCallback((id: string, reason?: string) => { if (reason && reason !== 'cancelled-by-release') return; if (selectedChats.length > 0) { setSelectedChats((prev) => { if (prev.includes(id)) return prev.filter(x => x !== id); return [...prev, id] }) } else { router.push(`chat/${id}`) } }, [router, selectedChats.length]) const longPress = useLongPress(longPressCallback, { onCancel: (event, ctx) => longPressCancelledCallback(String(ctx.context), String(ctx.reason)), threshold: 500, // In milliseconds captureEvent: true, // Event won't get cleared after React finish processing it cancelOnMovement: 100, // Square side size (in pixels) inside which movement won't cancel long press cancelOutsideElement: true, // Cancel long press when moved mouse / pointer outside element while pressing }); return (
setSearch(e.target.value)} /> {selectedChats.length > 0 ? : }
    {chatsList.map((chat, i) => { return (
  • { selectedChats.includes(chat.id) ?
    : {`${chat.username}'s }
    {chat.username}

    {chat.update?.content}

    {chat.update?.time} {chat.update?.count !== undefined && chat.update?.count > 0 ? {chat.update?.count} : chat.update?.seen !== undefined && chat.update?.seen ? : }
  • ) })}

{tDeleteModal('Heading')}

{tDeleteModal('Description')}

) } export default ChatIndex