npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@boewa-software/react-searchbar

v3.2.0

Published

React Searchbar Component

Downloads

82

Readme

React Searchbar

ACHTUNG: VERSION 3.0.0 ENTHÄLT NOCH EINEN BUG IM CHOICEFILTER, DER IN VERSION 3.0.1 BEHOBEN WURDE.

Installation

Das Modul kann via NPM zu einem existierenden Projekt hinzugefügt werden:

$ npm install @boewa-software/react-searchbar

Usage

Die Nutzung erfolgt als klassische React-Komponenten.

import {
  ChoiceFilter,
  DatePickerFilter,
  DateTimePickerFilter,
  FilterPicker,
  NumberFilter,
  TextFilter,
  ValueFilter,
  Searchbar,
} from '@boewa-software/react-searchbar';

CSS

Optional gibt es im dist Ordner auch eine CSS Datei, die einige Default Styles der Searchbar definiert.

import '@boewa-software/react-searchbar/dist/css/react-searchbar.min.css';

HTML

Die Searchbar generiert folgendes Markup:

<div class="searchbar-wrapper">
  <div class="searchbar">
    <ul class="searchbar-filter-list">
      <!-- START Spezielles Markup für den FilterPicker -->
      <li class="searchbar-filter searchbar-search">
        <label for="search" class="visually-hidden">Suchbegriff</label>
        <input
          type="text"
          class="form-control"
          placeholder="Search"
          id="search"
        />
        <ul class="dropdown-menu show">
          <li>
            <button class="dropdown-item">
              Press Enter or click to search
            </button>
          </li>
          <li>
            <button class="dropdown-item">Filter by <strong>X</strong></button>
          </li>
          <li>
            <button class="dropdown-item">Filter by <strong>Y</strong></button>
          </li>
        </ul>
      </li>
      <!-- ENDE Spezielles Markup für den FilterPicker -->
      <li class="searchbar-filter">
        <label class="searchbar-filter-label" for="container">Container</label>
        <div class="searchbar-filter-input-wrapper">
          <!-- Hier wird der gesetzte FilterComponent hineingerendert -->
        </div>
        <button class="btn btn-xs btn-icon btn-search btn-secondary">
          <span class="visually-hidden">Filter entfernen</span>
        </button>
      </li>
    </ul>
  </div>
</div>

Types

Falls explizitere interne Typescript-Types benötigt werden, können diese wie folgt importiert werden:

import type {
  FilterComponentProps,
  FilterProps,
  Filters,
  FilterSuggestionProps,
  RemoveFilterButtonComponentProps,
  SetValue,
  UnknownFilter,
  UseFilter,
  SearchbarContextProps,
  SearchbarProps,
  SearchbarRef,
} from '@boewa-software/react-searchbar';

Searchbar

Dies ist die eigentliche Searchbar und muss mit einem Array von Filterobjekten initialisiert werden.

Props:

  • filters : array, required

    Array mit Filter-Deklarationen in folgendem Format:

    type Filters = {
      name: string;
      label: string;
      showLabel: boolean;
      allowRemove: boolean; // Entscheidet ob der RemoveFilterButton angezeigt wird
      filterComponent: React.ElementType<any>;
      value: any;
      alwaysVisible?: boolean; // Entscheidet ob der Filter immer angezeigt und mit abgeschickt wird
      isFilterPicker?: boolean; // Nötig, da der FilterPicker spezielles Markup generiert
      hideInFilterPicker?: boolean; // Entscheidet ob der Filter im FilterPicker angezeigt wird
      [x: string]: any; // Alle anderen custom Attribute werden an den FilterComponent übergeben
    }[];
  • submitButtonComponent : React-Komponente, optional

    Props:

    interface SubmitButtonComponentProps {
      onClick: () => void; // Funktion die die Suche ausführt
    }

    Komponente die den Submit-Button darstellt. Eine Default-Komponente wird mitgeliefert.

  • removeFilterButtonComponent : React-Komponente, optional

    Props:

    interface RemoveFilterButtonComponentProps {
      name: string;
      removeFilter: (name: string) => void; // Funktion die den Filter entfernt
    }

    Komponente die den Remove-Filter-Button darstellt. Eine Default-Komponente wird mitgeliefert.

  • ref : React.RefObject, optional

    interface SearchbarRef {
      setValue: SetValue;
      removeFilter: (name: string) => void;
      submitSearch: () => void;
      addUnknownFilter: (unknownFilter: UnknownFilter) => void;
      resetFilters: () => void;
    }

    RefObject der Searchbar. Wird benötigt um den inneren SearchbarState zu manipulieren. Die oben zu sehenen Funktionen werden durch das RefObject zur Verfügung gestellt.

    Beispielnutzung:

    const searchBarRef = useRef<SearchbarRef>(null);
    if (!searchBarRef.current) return;
    searchbarRef.current.setValue('search[query]', 'test');
    searchbarRef.current.submitSearch();
    searchbarRef.current.resetFilters();

FilterPicker

Der FilterPicker baut ein Dropdown mit allen verfügbaren Filtern und ist selber auch ein Filter.

Das Filter Objekt für den FilterPicker könnte beispielhaft so aussehen:

{
  "name": "search[query]",
  "label": "Search",
  "allowRemove": false,
  "showLabel": false,
  "alwaysVisible": true,
  "filterComponent": "FilterPicker",
  "isFilterPicker": true,
  "value": null
}

Hinweise zu FilterComponents

Die FilterComponents erhalten folgende Props:

interface FilterComponentProps {
  name: string; // Name des Filters
  value: any; // Wert des Filters
  setValue: (name: string, value: any) => void; // setzt den Wert des Filters
  submitSearch: () => void; // setzt die url search params und führt die Suche aus
  focusedFilter: string | null; // Name des aktuell zu fokussierenden Filters
  [x: string]: any; // hier werden wie oben beschrieben alle custom Attribute aus dem Parent Filter Objekt übergeben
}