Home / Function/ InnerSideMenuWithSearch() — supabase Function Reference

InnerSideMenuWithSearch() — supabase Function Reference

Architecture documentation for the InnerSideMenuWithSearch() function in inner-side-menu-with-search.tsx from the supabase codebase.

Entity Profile

Relationship Graph

Source Code

apps/design-system/registry/default/example/inner-side-menu-with-search.tsx lines 15–92

export default function InnerSideMenuWithSearch() {
  const [sort, setSort] = useState('alphabetical')
  const [searchTerm, setSearchTerm] = useState('')

  const foodCategories = {
    Fruits: ['Apple', 'Banana', 'Orange', 'Strawberry'],
    Vegetables: ['Carrot', 'Broccoli', 'Spinach', 'Tomato'],
    Grains: ['Rice', 'Wheat', 'Oats', 'Quinoa'],
    Proteins: ['Chicken', 'Beef', 'Fish', 'Tofu'],
  }

  const filteredAndSortedCategories = useMemo(() => {
    return Object.entries(foodCategories).reduce(
      (acc, [category, items]) => {
        let filteredItems = items.filter((item) =>
          item.toLowerCase().includes(searchTerm.toLowerCase())
        )

        // Sort the filtered items
        filteredItems.sort((a, b) => {
          if (sort === 'alphabetical') {
            return a.localeCompare(b)
          } else {
            return b.localeCompare(a)
          }
        })

        acc[category] = filteredItems
        return acc
      },
      {} as Record<string, string[]>
    )
  }, [foodCategories, searchTerm, sort])

  return (
    <Card className="w-64 py-4 flex flex-col gap-4 bg-dash-sidebar">
      <InnerSideBarFilters>
        <InnerSideBarFilterSearchInput
          name="search-input"
          placeholder="Search..."
          value={searchTerm}
          onChange={(e) => setSearchTerm(e.target.value)}
          aria-labelledby="Search items"
        >
          <InnerSideBarFilterSortDropdown value={sort} onValueChange={(value) => setSort(value)}>
            <InnerSideBarFilterSortDropdownItem value="alphabetical">
              Sort Alphabetically
            </InnerSideBarFilterSortDropdownItem>
            <InnerSideBarFilterSortDropdownItem value="reverse">
              Sort Reverse Alphabetically
            </InnerSideBarFilterSortDropdownItem>
          </InnerSideBarFilterSortDropdown>
        </InnerSideBarFilterSearchInput>
      </InnerSideBarFilters>

      {Object.entries(filteredAndSortedCategories).map(([category, items]) => (
        <InnerSideMenuCollapsible key={category} defaultOpen>
          <InnerSideMenuCollapsibleTrigger title={category} />
          <InnerSideMenuCollapsibleContent className="pt-2">
            {items.length > 0 ? (
              items.map((item) => (
                <InnerSideMenuItem key={item} href="#">
                  {item}
                </InnerSideMenuItem>
              ))
            ) : (
              <InnerSideBarEmptyPanel
                className="mx-2"
                title={`No ${category.toLowerCase()} found`}
                description={`Your search did not return any results in ${category}`}
              />
            )}
          </InnerSideMenuCollapsibleContent>
        </InnerSideMenuCollapsible>
      ))}
    </Card>
  )
}

Domain

Subdomains

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free