coveo-search-ui
Version:
Coveo JavaScript Search Framework
291 lines (254 loc) • 9.71 kB
text/typescript
import { IFieldDescription } from '../../rest/FieldDescription';
/**
* The `IFieldOption` interface declares a type for options that should contain a field to be used in a query.
*
* The only constraint this type has over a basic string is that it should start with the `@` character.
*/
export interface IFieldOption extends String {}
/**
* The `IFieldConditionOption` is a component option expressing a field-based condition that must be satisfied.
*/
export interface IFieldConditionOption {
/**
* The name of the field on which the condition is based (e.g., `author`).
*/
field: string;
/**
* The field values allowed (or disallowed) by the condition (e.g., `["Alice Smith", "Bob Jones"]`).
*/
values: string[];
/**
* Whether the condition should disallow the specified [`values`]{@link IFieldConditionOption} rather than allowing them.
*/
reverseCondition?: boolean;
}
/**
* The `IQueryExpression` type is a string type dedicated to query expressions.
*
* This type is used to build a specific option for query expressions.
*/
export type IQueryExpression = string;
export interface IComponentOptionsLoadOption<T> {
(element: HTMLElement, name: string, option: IComponentOptionsOption<T>): T;
}
/**
* The `IComponentOptionsPostProcessing<T>` interface describes a post process function that should allow a component
* option to further modify its own value once all other options of that component have been built.
*/
export interface IComponentOptionsPostProcessing<T> {
/**
* Specifies a function that should allow a component option to further modify its own value once all other options
* of that component have been built.
* @param value The value originally specified for the option.
* @param options The options of the component.
*/
(value: T, options: any): T;
}
export interface IComponentOptionsOption<T> extends IComponentOptions<T> {
type?: ComponentOptionsType;
load?: IComponentOptionsLoadOption<T>;
}
/**
* The `IComponentOptions` interface describes the available parameters when building any kind of component
* option.
*/
export interface IComponentOptions<T> {
/**
* Specifies the value the option must take when no other value is explicitly specified.
*/
defaultValue?: T;
/**
* Specifies a function that should return the value the option must take when no other value is explicitly specified.
*
* @param element The HTMLElement on which the current option is being parsed.
* @return The default value of the option.
*/
defaultFunction?: (element: HTMLElement) => T;
/**
* Specifies whether it is necessary to explicitly specify a value for the option in order for the component to
* function properly.
*
* **Example:**
*
* > The [`field`]{@link Facet.options.field} option of the `Facet` component is required, since a facet cannot
* > function properly without a field.
*/
required?: boolean;
/**
* Specifies a function that should allow a component option to further modify its own value once all other options
* of that component have been built.
*
* **Example:**
*
* > By default, the [`id`]{@link Facet.options.id} option of the `Facet` component uses a post processing function to
* > set its value to that of the [`field`]{@link Facet.options.field} option.
*/
postProcessing?: IComponentOptionsPostProcessing<T>;
/**
* Specifies a different markup name to use for an option, rather than the standard name (i.e., `data-` followed by
* the hyphened name of the option).
*
* **Note:**
*
* > This should only be used for backward compatibility reasons.
*/
attrName?: string;
/**
* Specifies an alias, or array of aliases, which can be used instead of the actual option name.
*
* **Note:**
*
* > This can be useful to modify an option name without introducing a breaking change.
*/
alias?: string | string[];
/**
* Specifies a section name inside which the option should appear in the Coveo JavaScript Interface Editor.
*/
section?: string;
/**
* Specifies the name of a boolean component option which must be `true` in order for this option to function
* properly.
*
* **Note:**
*
* > This is mostly useful for the Coveo JavaScript Interface Editor.
*/
depend?: string;
priority?: number;
/**
* Specifies a message that labels the option as deprecated. This message appears in the console upon initialization
* if the deprecated option is used in the page. Consequently, this message should explain as clearly as possible why
* the option is deprecated, and what now replaces it.
*
* **Note:**
*
* > Deprecated options do not appear in the Coveo JavaScript Interface Editor.
*/
deprecated?: string;
/**
* Specifies a function that should indicate whether the option value is valid.
*
* @param value The option value to validate.
* @returns `true` if the option value is valid; `false` otherwise.
*/
validator?: (value: T) => boolean;
}
export interface IComponentOptionsNumberOption extends IComponentOptionsOption<number>, IComponentOptionsNumberOptionArgs {}
/**
* The `IComponentOptionsNumberOptionArgs` interface describes the available parameters when building a
* [number option]{@link ComponentOptions.buildNumberOption).
*/
export interface IComponentOptionsNumberOptionArgs extends IComponentOptions<number> {
/**
* Specifies the exclusive minimum value the option can take.
*
* Configuring the option using a value strictly less than this minimum displays a warning message in the console and
* automatically sets the option to its minimum value.
*/
min?: number;
/**
* Specifies the exclusive maximum value the option can take.
*
* Configuring the option using a value strictly greater than this maximum displays a warning message in the console
* and automatically sets the option to its maximum value.
*/
max?: number;
/**
* Specifies whether the value of this option is a floating point number.
*/
float?: boolean;
}
export interface IComponentOptionsListOption extends IComponentOptionsOption<string[]>, IComponentOptionsListOptionArgs {}
/**
* The `IComponentOptionsListOptionArgs` interface describes the available parameters when building a
* [list option]{@link ComponentOptions.buildListOption).
*/
export interface IComponentOptionsListOptionArgs extends IComponentOptions<string[]> {
/**
* Specifies the regular expression to use to separate the elements of the list option.
*
* Default value is a regular expression that inserts a comma character (`,`) between each word.
*/
separator?: RegExp;
/**
* Specifies the possible values the list option elements can take.
*/
values?: any;
}
export interface IComponentOptionsCustomListOptionArgs<T> extends IComponentOptions<T> {
separator?: RegExp;
values?: any;
}
export interface IComponentOptionsChildHtmlElementOption
extends IComponentOptionsOption<HTMLElement>,
IComponentOptionsChildHtmlElementOptionArgs {}
export interface IComponentOptionsChildHtmlElementOptionArgs extends IComponentOptions<HTMLElement> {
selectorAttr?: string;
childSelector?: string;
}
/**
* The `IComponentOptionsTemplateOptionArgs` interface describes the available parameters when building a
* [template option]{@link ComponentOptions.buildTemplateOption}.
*/
export interface IComponentOptionsFieldOption extends IComponentOptionsOption<string>, IComponentOptionsFieldOptionArgs {}
/**
* The `IComponentOptionsFieldOptionArgs` interface describes the available parameters when building a
* [field option]{@link ComponentOptions.buildFieldOption}.
*/
export interface IComponentOptionsFieldOptionArgs extends IComponentOptions<string> {
groupByField?: boolean;
includeInResults?: boolean;
sortByField?: boolean;
splitGroupByField?: boolean;
match?: (field: IFieldDescription) => boolean;
}
export interface IComponentOptionsFieldsOption extends IComponentOptionsOption<string[]>, IComponentOptionsFieldsOptionArgs {}
/**
* The `IComponentOptionsFieldsOptionArgs` interface describes the available parameters when building a
* [fields option]{@link ComponentOptions.buildFieldsOption}.
*/
export interface IComponentOptionsFieldsOptionArgs extends IComponentOptions<string[]> {
groupByField?: boolean;
includeInResults?: boolean;
sortByField?: boolean;
splitGroupByField?: boolean;
match?: (field: IFieldDescription) => boolean;
}
/**
* The `IComponentLocalizedStringOptionArgs` interface describes the available parameters when building a
* [fields option]{@link ComponentOptions.buildLocalizedStringOption}.
*/
export interface IComponentLocalizedStringOptionArgs extends IComponentOptions<string> {
localizedString?: () => string;
/**
* @deprecated Use `localizedString` instead. Using this option could cause localized string to appear incorrectly translated in the interface.
*/
defaultValue?: string;
}
export interface IComponentOptionsObjectOption extends IComponentOptionsOption<{ [key: string]: any }>, IComponentOptionsObjectOptionArgs {}
export interface IComponentOptionsObjectOptionArgs extends IComponentOptions<{ [key: string]: any }> {
subOptions: { [key: string]: IComponentOptionsOption<any> };
}
export interface IComponentJsonObjectOption<T> extends IComponentOptions<T> {}
export enum ComponentOptionsType {
BOOLEAN,
NUMBER,
STRING,
LOCALIZED_STRING,
LIST,
SELECTOR,
CHILD_HTML_ELEMENT,
TEMPLATE,
FIELD,
FIELDS,
ICON,
COLOR,
OBJECT,
QUERY,
HELPER,
LONG_STRING,
JSON,
JAVASCRIPT,
NONE,
QUERY_EXPRESSION
}