Multiple Selector With Sync Search And Creatable And Group

PreviousNext

component for the Multiple Selector With Sync Search And Creatable And Group

Docs
spectrumuicomponent

Preview

Loading preview…
app/registry/multiple-selector/usage/multiple-selector-with-sync-search.tsx
"use client";
import React from "react";
import MultipleSelector, {
  Option,
} from "@/app/registry/spectrumui/multiple-selector-dependencies";
import { H4 } from "@/app/registry/spectrumui/heading-with-anchor";

const OPTIONS: Option[] = [
  { label: "nextjs", value: "nextjs" },
  { label: "React", value: "react" },
  { label: "Remix", value: "remix" },
  { label: "Vite", value: "vite" },
  { label: "Nuxt", value: "nuxt" },
  { label: "Vue", value: "vue" },
  { label: "Svelte", value: "svelte" },
  { label: "Angular", value: "angular" },
  { label: "Ember", value: "ember" },
  { label: "Gatsby", value: "gatsby" },
  { label: "Astro", value: "astro" },
];

const GROUP_OPTIONS: Option[] = [
  { label: "nextjs", value: "nextjs", group: "React" },
  { label: "React", value: "react", group: "React" },
  { label: "Remix", value: "remix", group: "React" },
  { label: "shadcn-ui", value: "shadcn-ui", group: "React" },
  { label: "mui", value: "mui", group: "React" },
  { label: "Vite", value: "vite", group: "Vue" },
  { label: "Nuxt", value: "nuxt", group: "Vue" },
  { label: "Vue", value: "vue", group: "Vue" },
  { label: "Quasar", value: "quasar", group: "Vue" },
  { label: "Angular", value: "angular", group: "Angular" },
  { label: "Material UI", value: "material-ui", group: "Angular" },
  { label: "Ng-zorro", value: "ng-zorro", group: "Angular" },
];

const mockSearch = (value: string): Option[] => {
  return OPTIONS.filter((option) => option.value.includes(value));
};

const mockSearchGroup = (value: string): Option[] => {
  return GROUP_OPTIONS.filter((option) => option.value.includes(value));
};

const MultipleSelectorWithSyncSearch = () => {
  return (
    <div className="flex w-full flex-col gap-5 px-10">
      <H4>Sync search</H4>
      <MultipleSelector
        onSearchSync={(value) => {
          const res = mockSearch(value);
          return res;
        }}
        placeholder="trying to search 'a' to get more options..."
        emptyIndicator={
          <p className="w-full text-center text-lg leading-10 text-muted-foreground">
            no results found.
          </p>
        }
      />
      <H4>Creatable</H4>
      <MultipleSelector
        onSearchSync={(value) => {
          const res = mockSearch(value);
          return res;
        }}
        placeholder="trying to search 'a' to get more options..."
        creatable
        emptyIndicator={
          <p className="w-full text-center text-lg leading-10 text-muted-foreground">
            no results found.
          </p>
        }
      />

      <H4>GroupBy</H4>
      <MultipleSelector
        onSearchSync={(value) => {
          const res = mockSearchGroup(value);
          return res;
        }}
        placeholder="trying to search 'a' to get more options..."
        groupBy="group"
        creatable
        emptyIndicator={
          <p className="w-full text-center text-lg leading-10 text-muted-foreground">
            no results found.
          </p>
        }
      />

      <H4>Debounce</H4>
      <MultipleSelector
        onSearchSync={(value) => {
          const res = mockSearch(value);
          return res;
        }}
        placeholder="trying to search 'a' to get more options..."
        delay={1000}
        emptyIndicator={
          <p className="w-full text-center text-lg leading-10 text-muted-foreground">
            no results found.
          </p>
        }
      />
    </div>
  );
};

export default MultipleSelectorWithSyncSearch;

Installation

npx shadcn@latest add @spectrumui/multiple-selector-with-sync-search

Usage

import { MultipleSelectorWithSyncSearch } from "@/components/multiple-selector-with-sync-search"
<MultipleSelectorWithSyncSearch />