# tableberg/1.2.0/components/icon-library/LibrarySidebar.tsx

Tableberg – Simple Gutenberg Table Block, version 1.2.0. 110 lines.

- Page: https://pluginprobe.com/plugins/tableberg/1.2.0/code/components/icon-library/LibrarySidebar.tsx
- Raw: https://pluginprobe.com/plugins/tableberg/1.2.0/raw/components/icon-library/LibrarySidebar.tsx
- Modified: 2026-09-16T03:30:32+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/tableberg/1.2.0/code/components/icon-library/LibrarySidebar.tsx#L10-L20`.

```tsx
/**
 * WordPress Dependencies
 */
import { isEmpty } from "lodash";
import { __ } from "@wordpress/i18n";
import { useEffect } from "react";
import { tablebergIcons } from "./icons";
import {
    SearchControl,
    MenuGroup,
    MenuItem,
    PanelBody,
} from "@wordpress/components";

export interface IconsLibrarySidebarProps {
    subCategoryFilter: string;
    search: string;
    setSubCategoryFilter: (subCategoryFilter: string) => void;
    setSearch: (search: string) => void;
    mainCategoryFilter: string;
    setMainCategoryFilter: (mainCategoryFilter: string) => void;
}

function Sidebar(props: IconsLibrarySidebarProps) {
    const {
        search,
        setSearch,
        subCategoryFilter,
        setSubCategoryFilter,
        setMainCategoryFilter,
    } = props;

    const preparedIconPacks = tablebergIcons.map(iconPack => {
        const categories = iconPack?.categories;
        const allCategories: Array<{
            name: string;
            title: string;
            count: number;
        }> = categories?.map(category => {
            const categoryName = category?.name;
            const categoryIcons = iconPack?.icons.filter(icon => {
                return icon?.categories?.includes(categoryName);
            });
            return { ...category, count: categoryIcons.length };
        });
        allCategories.unshift({
            name: "all-" + iconPack?.type,
            title: __("All", "tableberg"),
            count: iconPack?.icons.length,
        });
        return { ...iconPack, categories: allCategories };
    });

    useEffect(() => {
        setSubCategoryFilter(preparedIconPacks[0]?.categories?.[0]?.name);
    }, []);

    return (
        <div className="tableberg_icons_library_sidebar">
            <SearchControl
                value={search}
                onChange={newValue => {
                    setSearch(newValue);
                }}
                placeholder={__("Search Icon", "tableberg")}
            />

            {!isEmpty(preparedIconPacks) && (
                <MenuGroup className="tableberg_icons_library_sidebar_item_group">
                    {preparedIconPacks.map((iconPack, index) => {
                        return (
                            <PanelBody
                                title={iconPack?.title}
                                initialOpen={index === 0}
                            >
                                {iconPack?.categories.map(category => {
                                    return (
                                        <MenuItem
                                            key={category?.name}
                                            className="tableberg_icons_library_sidebar_item"
                                            // @ts-ignore
                                            isPressed={
                                                subCategoryFilter ===
                                                category?.name
                                            }
                                            onClick={() => {
                                                setSubCategoryFilter(
                                                    category?.name
                                                );
                                                setMainCategoryFilter(
                                                    iconPack?.type
                                                );
                                            }}
                                        >
                                            <span>{category?.title}</span>
                                            <span>{category?.count}</span>
                                        </MenuItem>
                                    );
                                })}
                            </PanelBody>
                        );
                    })}
                </MenuGroup>
            )}
        </div>
    );
}

export default Sidebar;

```
