combobox-controlled-demo

PreviousNext
Docs
pureuiexample

Preview

Loading preview…
registry/pure-ui/examples/combobox/combobox-controlled-demo.tsx
"use client";

import {
  Combobox,
  ComboboxEmpty,
  ComboboxInput,
  ComboboxItem,
  ComboboxList,
  ComboboxPopup,
} from "@/registry/pure-ui/ui/combobox";
import { useState } from "react";

const users = [
  { id: "u1", name: "Alice Johnson", email: "alice@example.com" },
  { id: "u2", name: "Bob Lee", email: "bob@example.com" },
  { id: "u3", name: "Cathy Kim", email: "cathy@example.com" },
  { id: "u4", name: "David Smith", email: "david@example.com" },
  { id: "u5", name: "Emily Davis", email: "emily@example.com" },
  { id: "u6", name: "Frank Miller", email: "frank@example.com" },
  { id: "u7", name: "Grace Lee", email: "grace@example.com" },
  { id: "u8", name: "Henry Walker", email: "henry@example.com" },
];

type User = (typeof users)[number];

export function ComboboxControlledDemo() {
  const [selectedUser, setSelectedUser] = useState<User | null>(null);

  return (
    <div className="flex flex-col gap-5 max-w-xs w-full">
      <Combobox
        items={users}
        itemToStringLabel={(user: User) => user.name}
        value={selectedUser}
        onValueChange={setSelectedUser}
      >
        <ComboboxInput placeholder="Select a user..." />
        <ComboboxPopup>
          <ComboboxEmpty>No users found.</ComboboxEmpty>
          <ComboboxList>
            {(user: User) => (
              <ComboboxItem key={user.id} value={user}>
                <div>
                  <div className="font-medium">{user.name}</div>
                  <div className="text-xs text-muted-foreground">
                    {user.email}
                  </div>
                </div>
              </ComboboxItem>
            )}
          </ComboboxList>
        </ComboboxPopup>
      </Combobox>

      <div className="flex flex-col gap-2">
        <p className="text-sm text-muted-foreground">Selected User:</p>
        <div className="relative bg-muted p-4 rounded-md">
          <pre>{JSON.stringify(selectedUser, null, 2)}</pre>
        </div>
      </div>
    </div>
  );
}

Installation

npx shadcn@latest add @pureui/combobox-controlled-demo

Usage

import { ComboboxControlledDemo } from "@/components/combobox-controlled-demo"
<ComboboxControlledDemo />