Giter Site home page Giter Site logo

templeoftemplar / searchpicker Goto Github PK

View Code? Open in Web Editor NEW

This project forked from skbkontur/searchpicker

0.0 2.0 0.0 281 KB

Searchpicker or combo-box dropdown ui form component, written in typescript

Home Page: http://tech.skbkontur.ru/searchpicker/

License: MIT License

JavaScript 27.41% TypeScript 65.15% HTML 2.28% CSS 5.16%

searchpicker's Introduction

searchpicker Build Status

Searchpicker or combo-box dropdown with multiple choices support, written in typescript. No dependencies.

Demo page

How to install

npm i searchpicker --save

Start local sample

npm start

Server stared at http://localhost:8080

How to use

Initialize picker control to specified container in your app:

import {SearchPicker} from 'searchpicker';

const picker = new SearchPicker(document.getElementById('searchpicker-container'), options);

Options

placeholder: string - Default ''

maxSelectedChoices: number - amount of choices that user can select. 1 - single choice. Default - unlimited

minLengthToSearch: number - minimal text length in field length to start search from

searchInValues: boolean - instruct default searcher to search text in picker identifiers. Default - false

resultsLimit: number - maximum shown results. Default - all results returned by searcher.

pickerItemFactory?: (item: any) => IPickerItem - allow to convert source data to picker item for default searcher

source: any[] - data for search with default searcher.

resultRenderer: (item: IPickerItem, query: string) => Node - allow to override default picker item view.

noResultsRenderer: (query: string) => Node - allows to override default view when no results found

choiceRenderer: (item: IPickerItem, renderClose?:boolean) => Node - allow to override default choice view

searcher: ISearcher - allows to add custom logic for result search. For instance: async fetch data from server side.

ISearcher

export interface ISearcher {
    /**
     * Search data
     * @param {string} query                                user query
     * @param {ISearchPickerOptions} options                current searchpicker options
     * @param {(items: IPickerItem[]) => void} onresults    callback with result
     * @param {(message: string) => void} onerror           callback with search error
     */
    search(query: string
        , options: ISearchPickerOptions
        , onresults: (items: IPickerItem[]) => void
        , onerror?: (message: string) => void);
}

Sample of custom data searcher

export class BackendSearcher implements ISearcher {

    private pickerItems: IPickerItem[] = null;
    private lastSearchText: string;
    private foundItems: IPickerItem[] = [];
    private tmrId: number;

    search(query: string
        , options: ISearchPickerOptions
        , onresults: (items: IPickerItem[]) => void
        , onerror?: (message: string) => void) {

        if (this.tmrId)
            clearTimeout(this.tmrId);

        // fetch data from server
        fetch("api/search?q=" + query)
            .then((results) => {
                onresults(results.map(r => { return {title: r.title, id: r.login} }));
            }, err => {
                onerror(err);
            });

    }

}

Events

You can subscribe for picker events and read current selected values

choiceAdded

Invokes when user add new choice

const picker = new SearchPicker(...);

picker.on("choiceAdded", (item: IPickerItem) => {
   console.log(picker.getChoices());
});

choiceRemoved

Invokes when user remove selected choice

const picker = new SearchPicker(...);

picker.on("choiceRemoved", (item: IPickerItem) => {
   console.log(picker.getChoices());
});

Run e2e tests

npm run test

Build library

npm run build:lib

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.