@types/semantic-ui-search
Version:
TypeScript definitions for semantic-ui-search
625 lines (575 loc) • 19.6 kB
TypeScript
interface JQuery {
search: SemanticUI.Search;
}
declare namespace SemanticUI {
interface Search {
settings: SearchSettings;
/**
* Search for value currently set in search input
*/
(behavior: "query", callback?: () => void): JQuery;
/**
* Displays message in search results with text, using template matching type
*/
(behavior: "display message", text: string, type: string): JQuery;
/**
* Cancels current remote search query
*/
(behavior: "cancel query"): JQuery;
/**
* Search local object for specified query and display results
*/
(behavior: "search local", query: string): JQuery;
/**
* Whether has minimum characters
*/
(behavior: "has minimum characters"): boolean;
/**
* Search remote endpoint for specified query and display results
*/
(behavior: "search remote", query: string, callback?: () => void): JQuery;
/**
* Search object for specified query and return results
*/
(behavior: "search object", query: string, object: any, searchFields: string[]): any;
/**
* Cancels current remote search request
*/
(behavior: "cancel query"): JQuery;
/**
* Whether search is currently focused
*/
(behavior: "is focused"): boolean;
/**
* Whether search results are visible
*/
(behavior: "is visible"): boolean;
/**
* Whether search results are empty
*/
(behavior: "is empty"): boolean;
/**
* Returns current search value
*/
(behavior: "get value"): any;
/**
* Returns JSON object matching searched title or id (see above)
*/
(behavior: "get result", value: any): any;
/**
* Sets search input to value
*/
(behavior: "set value", value: any): JQuery;
/**
* Reads cached results for query
*/
(behavior: "read cache", query: string): JQuery;
/**
* Clears value from cache, if no parameter passed clears all cache
*/
(behavior: "clear cache", query?: string): JQuery;
/**
* Writes cached results for query
*/
(behavior: "write cache", query: string): JQuery;
/**
* Adds HTML to results and displays
*/
(behavior: "add results", html: string): JQuery;
/**
* Shows results container
*/
(behavior: "show results", callback?: () => void): JQuery;
/**
* Hides results container
*/
(behavior: "hide results", callback?: () => void): JQuery;
/**
* Generates results using parser specified by settings.template
*/
(behavior: "generate results", response: any): JQuery;
/**
* Removes all events
*/
(behavior: "destroy"): JQuery;
<K extends keyof SearchSettings>(behavior: "setting", name: K, value?: undefined): SearchSettings._Impl[K];
<K extends keyof SearchSettings>(behavior: "setting", name: K, value: SearchSettings._Impl[K]): JQuery;
(behavior: "setting", value: SearchSettings): JQuery;
(settings?: SearchSettings): JQuery;
}
/**
* @see {@link http://semantic-ui.com/modules/search.html#/settings}
*/
type SearchSettings = SearchSettings.Param;
namespace SearchSettings {
type Param =
& (
| Pick<_Impl, "apiSettings">
| Pick<_Impl, "type">
| Pick<_Impl, "minCharacters">
| Pick<_Impl, "transition">
| Pick<_Impl, "duration">
| Pick<_Impl, "maxResults">
| Pick<_Impl, "cache">
| Pick<_Impl, "source">
| Pick<_Impl, "selectFirstResult">
| Pick<_Impl, "showNoResults">
| Pick<_Impl, "searchFullText">
| Pick<_Impl, "fields">
| Pick<_Impl, "searchFields">
| Pick<_Impl, "hideDelay">
| Pick<_Impl, "searchDelay">
| Pick<_Impl, "easing">
| Pick<_Impl, "onSelect">
| Pick<_Impl, "onResultsAdd">
| Pick<_Impl, "onSearchQuery">
| Pick<_Impl, "onResults">
| Pick<_Impl, "onResultsOpen">
| Pick<_Impl, "onResultsClose">
| Pick<_Impl, "templates">
| Pick<_Impl, "regExp">
| Pick<_Impl, "selector">
| Pick<_Impl, "metadata">
| Pick<_Impl, "className">
| Pick<_Impl, "error">
| Pick<_Impl, "namespace">
| Pick<_Impl, "name">
| Pick<_Impl, "silent">
| Pick<_Impl, "debug">
| Pick<_Impl, "performance">
| Pick<_Impl, "verbose">
)
& Partial<Pick<_Impl, keyof _Impl>>;
interface _Impl {
type: string;
// region Behavior
/**
* Settings for API call.
*
* @see {@link http://semantic-ui.com/behaviors/api.html#/usage}
*/
apiSettings: ApiSettings;
/**
* Minimum characters to query for results
*
* @default 1
*/
minCharacters: number;
/**
* Named transition to use when animating menu in and out. Fade and slide down are available without including ui transitions
*
* @default 'fade'
* @see {@link http://semantic-ui.com/modules/transition.html}
*/
transition: string;
/**
* Duration of animation events
*
* @default 300
*/
duration: number;
/**
* Maximum results to display when using local and simple search, maximum category count for category search
*
* @default 7
*/
maxResults: number;
/**
* Caches results locally to avoid requerying server
*
* @default true
*/
cache: boolean;
/**
* Specify a Javascript object which will be searched locally
*
* @default false
*/
source: false | any;
/**
* Whether the search should automatically select the first search result after searching
*
* @default false
*/
selectFirstResult: boolean;
/**
* Whether a "no results" message should be shown if no results are found. (These messages can be modified using the template object specified below)
*
* @default false
*/
showNoResults: boolean;
/**
* Return local results that match anywhere inside your content
*
* @default true
*/
searchFullText: boolean;
/**
* List mapping display content to JSON property, either with API or source.
*/
fields: Search.FieldsSettings;
/**
* Specify object properties inside local source object which will be searched
*/
searchFields: string[];
/**
* Delay before hiding results after search blur
*
* @default 0
*/
hideDelay: number;
/**
* Delay before querying results on inputchange
*
* @default 100
*/
searchDelay: number;
/**
* Easing equation when using fallback Javascript animation
*
* @default 'easeOutExpo'
*/
easing: string;
// endregion
// region Callbacks
/**
* Callback on element selection by user.
* The first parameter includes the filtered response results for that element.
* The function should return false to prevent default action (closing search results and selecting value).
*/
// eslint-disable-next-line @typescript-eslint/no-invalid-void-type
onSelect(this: JQuery, result: any, response: any): false | void;
/**
* Callback after processing element template to add HTML to results. Function should return false to prevent default actions.
*/
// eslint-disable-next-line @typescript-eslint/no-invalid-void-type
onResultsAdd(this: JQuery, html: string): false | void;
/**
* Callback on search query
*/
onSearchQuery(this: JQuery, query: string): void;
/**
* Callback on server response
*/
onResults(this: JQuery, response: any): void;
/**
* Callback when results are opened
*/
onResultsOpen(this: JQuery): void;
/**
* Callback when results are closed
*/
onResultsClose(this: JQuery): void;
// endregion
// region Templates
templates: Search.TemplatesSettings;
// endregion
// region DOM Settings
/**
* Regular expressions used for matching
*/
regExp: Search.RegExpSettings;
/**
* Selectors used to find parts of a module
*/
selector: Search.SelectorSettings;
/**
* HTML5 metadata attributes used internally
*/
metadata: Search.MetadataSettings;
/**
* Class names used to determine element state
*/
className: Search.ClassNameSettings;
// endregion
// region Debug Settings
error: Search.ErrorSettings;
// endregion
// region Component Settings
// region DOM Settings
/**
* Event namespace. Makes sure module teardown does not effect other events attached to an element.
*/
namespace: string;
// endregion
// region Debug Settings
/**
* Name used in log statements
*/
name: string;
/**
* Silences all console output including error messages, regardless of other debug settings.
*/
silent: boolean;
/**
* Debug output to console
*/
debug: boolean;
/**
* Show console.table output with performance metrics
*/
performance: boolean;
/**
* Debug output includes all internal behaviors
*/
verbose: boolean;
// endregion
// endregion
}
}
namespace Search {
type FieldsSettings = FieldsSettings.Param;
namespace FieldsSettings {
type Param =
& (
| Pick<_Impl, "categories">
| Pick<_Impl, "categoryName">
| Pick<_Impl, "categoryResults">
| Pick<_Impl, "description">
| Pick<_Impl, "image">
| Pick<_Impl, "price">
| Pick<_Impl, "results">
| Pick<_Impl, "title">
| Pick<_Impl, "action">
| Pick<_Impl, "actionText">
| Pick<_Impl, "actionURL">
)
& Partial<Pick<_Impl, keyof _Impl>>;
interface _Impl {
/**
* array of categories (category view)
*
* @default 'results'
*/
categories: string;
/**
* name of category (category view)
*
* @default 'name'
*/
categoryName: string;
/**
* array of results (category view)
*
* @default 'results'
*/
categoryResults: string;
/**
* result description
*
* @default 'description'
*/
description: string;
/**
* result image
*
* @default 'image'
*/
image: string;
/**
* result price
*
* @default 'price'
*/
price: string;
/**
* array of results (standard)
*
* @default 'results'
*/
results: string;
/**
* result title
*
* @default 'title'
*/
title: string;
/**
* "view more" object name
*
* @default 'action'
*/
action: string;
/**
* "view more" text
*
* @default 'text'
*/
actionText: string;
/**
* "view more" url
*
* @default 'url'
*/
actionURL: string;
}
}
type TemplatesSettings = TemplatesSettings.Param;
namespace TemplatesSettings {
type Param =
& (
| Pick<_Impl, "escape">
| Pick<_Impl, "message">
| Pick<_Impl, "category">
| Pick<_Impl, "standard">
)
& Partial<Pick<_Impl, keyof _Impl>>;
interface _Impl {
escape(string: string): string;
message(message: string, type: string): string;
category(response: any): string;
standard(response: any): string;
}
}
type RegExpSettings = RegExpSettings.Param;
namespace RegExpSettings {
type Param =
& (
| Pick<_Impl, "escape">
| Pick<_Impl, "beginsWith">
)
& Partial<Pick<_Impl, keyof _Impl>>;
interface _Impl {
/**
* @default /[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g
*/
escape: RegExp;
/**
* @default '(?:\s|^)'
*/
beginsWith: string;
}
}
type SelectorSettings = SelectorSettings.Param;
namespace SelectorSettings {
type Param =
& (
| Pick<_Impl, "prompt">
| Pick<_Impl, "searchButton">
| Pick<_Impl, "results">
| Pick<_Impl, "category">
| Pick<_Impl, "result">
)
& Partial<Pick<_Impl, keyof _Impl>>;
interface _Impl {
/**
* @default '.prompt'
*/
prompt: string;
/**
* @default '.search.button'
*/
searchButton: string;
/**
* @default '.results'
*/
results: string;
/**
* @default '.category'
*/
category: string;
/**
* @default '.result'
*/
result: string;
}
}
type MetadataSettings = MetadataSettings.Param;
namespace MetadataSettings {
type Param =
& (
| Pick<_Impl, "cache">
| Pick<_Impl, "results">
)
& Partial<Pick<_Impl, keyof _Impl>>;
interface _Impl {
/**
* @default 'cache'
*/
cache: string;
/**
* @default 'results'
*/
results: string;
}
}
type ClassNameSettings = ClassNameSettings.Param;
namespace ClassNameSettings {
type Param =
& (
| Pick<_Impl, "active">
| Pick<_Impl, "empty">
| Pick<_Impl, "focus">
| Pick<_Impl, "loading">
| Pick<_Impl, "pressed">
)
& Partial<Pick<_Impl, keyof _Impl>>;
interface _Impl {
/**
* @default 'active'
*/
active: string;
/**
* @default 'empty'
*/
empty: string;
/**
* @default 'focus'
*/
focus: string;
/**
* @default 'loading'
*/
loading: string;
/**
* @default 'down'
*/
pressed: string;
}
}
type ErrorSettings = ErrorSettings.Param;
namespace ErrorSettings {
type Param =
& (
| Pick<_Impl, "source">
| Pick<_Impl, "noResults">
| Pick<_Impl, "logging">
| Pick<_Impl, "noTemplate">
| Pick<_Impl, "serverError">
| Pick<_Impl, "maxResults">
| Pick<_Impl, "method">
)
& Partial<Pick<_Impl, keyof _Impl>>;
interface _Impl {
/**
* @default 'Cannot search. No source used, and Semantic API module was not included'
*/
source: string;
/**
* @default 'Your search returned no results'
*/
noResults: string;
/**
* @default 'Error in debug logging, exiting.'
*/
logging: string;
/**
* @default 'A valid template name was not specified.'
*/
noTemplate: string;
/**
* @default 'There was an issue with querying the server.'
*/
serverError: string;
/**
* @default 'Results must be an array to use maxResults setting'
*/
maxResults: string;
/**
* @default 'The method you called is not defined.'
*/
method: string;
}
}
}
}