HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //opt/coauthor/components/searchbox.tsx
"use client"; 

import { useEffect, useState } from "react"; 
import { useMutation, useQuery } from "convex/react";

import {
    CommandDialog,
    CommandEmpty,
    CommandGroup,
    CommandInput, 
    CommandItem, 
    CommandList,
} from "@/components/ui/command"
import { api } from "@/convex/_generated/api";
import { useSearch } from "@/hooks/use-search";

interface SearchParams{
    workspaceId: string; 
}

export const SearchCommand = ({ workspaceId }: SearchParams) => {
    const users = useQuery(api.user.getAllUsersForSearch);
    const updateWorkspace = useMutation(api.workspace.addUserToWorkspace);
    const [isMounted, setMounted] = useState(false); 
    
    const toggle = useSearch((store) => store.toggle); 
    const isOpen = useSearch((store) => store.isOpen); 
    const onClose = useSearch((store) => store.onClose); 

    useEffect(() => {
        setMounted(true); 
    }, []);

    useEffect(() => {
        const down = (e: KeyboardEvent) => {
            if (e.key === "k" && (e.metaKey || e.ctrlKey)) {
                e.preventDefault();
                toggle(); 
            }
        }

        document.addEventListener("keydown", down); 
        return () => document.removeEventListener("keydown", down); 
    }, [toggle]);

    const onSelect = (id: string) => {
        updateWorkspace({
            workspaceId: workspaceId,
            userId: id.split("-")[0],
        });
        onClose();
    }

    if (!isMounted) {
        return null; 
    }

    return (
        <CommandDialog open={isOpen} onOpenChange={onClose}>
            <CommandInput placeholder={`Invite Users...`}/>
            <CommandList>
                <CommandEmpty>No Results Found...</CommandEmpty>
                <CommandGroup heading="All Users">
                    {users?.map((user) => (
                        <CommandItem 
                        key={user.name}
                        value={`${user.userId}-${user.name}`}
                        title={user.name}
                        onSelect={onSelect}             
                        >
                            { /* eslint-disable-next-line @next/next/no-img-element */ }
                            <img src={user.pfpUrl} alt={user.name} width={30} height={30} className="rounded-full" />
                            <span className="pl-3">
                                {user.name}
                            </span>

                        </CommandItem>
                    ))}
                </CommandGroup>
            </CommandList>
        </CommandDialog>
    )
}