UNPKG

@hazyflame/ej2-dropdowns

Version:

Essential JS 2 DropDown Components

537 lines (464 loc) 17.5 kB
import { Input, InputObject, FloatLabelType, TextBox, InputEventArgs } from '@syncfusion/ej2-inputs';import { createCheckBox } from '@syncfusion/ej2-buttons';import { NotifyPropertyChanges, INotifyPropertyChanged, Property, Event, EmitType } from '@syncfusion/ej2-base';import { Component, EventHandler, attributes, formatUnit, ChildProperty, remove, L10n, extend } from '@syncfusion/ej2-base';import { addClass, removeClass, detach, prepend, Complex, closest, setValue, getValue, compile, append } from '@syncfusion/ej2-base';import { select, selectAll, isNullOrUndefined as isNOU, matches, Browser, KeyboardEvents, KeyboardEventArgs } from '@syncfusion/ej2-base';import { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';import { Popup } from '@syncfusion/ej2-popups';import { updateBlazorTemplate, resetBlazorTemplate, isBlazor} from '@syncfusion/ej2-base';import { TreeView, NodeSelectEventArgs, DataBoundEventArgs, FieldsSettingsModel, NodeClickEventArgs } from '@syncfusion/ej2-navigations';import { NodeCheckEventArgs, FailureEventArgs} from '@syncfusion/ej2-navigations'; import {Mode,ExpandOn,TreeFilterType,SortOrder,DdtBeforeOpenEventArgs,DdtChangeEventArgs,DdtPopupEventArgs,DdtDataBoundEventArgs,DdtFilteringEventArgs,DdtFocusEventArgs,DdtKeyPressEventArgs,DdtSelectEventArgs} from "./drop-down-tree"; import {ComponentModel} from '@syncfusion/ej2-base'; /** * Interface for a class Fields */ export interface FieldsModel { /** * This field specifies the child items or mapping field for the nested child items that contains an array of JSON objects. */ child?: string | FieldsModel; /** * Specifies the array of JavaScript objects or instance of Data Manager to populate the dropdown tree items. * * @default [] */ /* eslint-disable */ dataSource?: DataManager | { [key: string]: Object }[]; /** * This fields specifies the mapping field to define the expanded state of a Dropdown tree item. */ expanded?: string; /** * This field specifies the mapping field to indicate whether the Dropdown tree item has children or not. */ hasChildren?: string; /** * Specifies the mapping field for htmlAttributes to be added to the Dropdown Tree item. */ htmlAttributes?: string; /** * Specifies the mapping field for icon class of each Dropdown Tree item that will be added before the text. */ iconCss?: string; /** * Specifies the mapping field for image URL of each Dropdown Tree item where image will be added before the text. */ imageUrl?: string; /** * Specifies the parent value field mapped in the data source. */ parentValue?: string; /** * Defines the external [`Query`](https://ej2.syncfusion.com/documentation/api/data/query/) * that will execute along with the data processing. * * @default null */ query?: Query; /** * Specifies the mapping field for the selected state of the Dropdown Tree item. */ selected?: string; /** * Specifies the table name used to fetch data from a specific table in the server. */ tableName?: string; /** * Specifies the mapping field for text displayed as Dropdown Tree items display text. */ text?: string; /** * Specifies the mapping field for tooltip that will be displayed as hovering text of the Dropdown Tree item. */ tooltip?: string; /** * Specifies the value(ID) field mapped in the data source. */ value?: string; } /** * Interface for a class TreeSettings */ export interface TreeSettingsModel { /** * Specifies whether the child and parent tree items check states are dependent over each other when checkboxes are enabled. * * @default false */ autoCheck?: boolean; /** * Specifies the action on which the parent items in the pop-up should expand or collapse. The available actions are * * `Auto` - In desktop, the expand or collapse operation happens when you double-click the node, * and in mobile devices it happens on single-tap. * * `Click` - The expand or collapse operation happens when you perform single-click/tap * on the pop-up item in both desktop and mobile devices. * * `DblClick` - The expand or collapse operation happens when you perform a double-click/tap * on the pop-up item in both desktop and mobile devices. * * `None` - The expand or collapse operation will not happen when you perform single-click/tap * or double-click/tap on the pop-up items in both desktop and mobile devices. * * @default 'Auto' */ expandOn?: ExpandOn; /** * By default, the load on demand (Lazy load) is set to false. * Enabling this property will render only the parent tree items in the popup and * the child items will be rendered on demand when expanding the corresponding parent node. * * @default false */ loadOnDemand?: boolean; } /** * Interface for a class DropDownTree */ export interface DropDownTreeModel extends ComponentModel{ /** * Specifies the template that renders to the popup list content of the * Dropdown Tree component when the data fetch request from the remote server fails. * * @default 'The Request Failed' */ actionFailureTemplate?: string; /** * When allowFiltering is set to true, it shows the filter bar (search text box) of the component. * The filter action retrieves matched items through the **filtering** event based on the characters typed in the search text box. * If no match is found, the value of the **noRecordsTemplate** property will be displayed. * * @default false */ allowFiltering?: boolean; /** * Enables or disables the multi-selection of items. To select multiple items: * * Select the items by holding down the **CTRL** key when clicking on the items. * * Select consecutive items by clicking the first item to select and hold down the **SHIFT** key and click the last item to select. * * @default false */ allowMultiSelection?: boolean; /** * By default, the Dropdown Tree component fires the change event while focusing out the component. * If you want to fire the change event on every value selection and remove, then disable this property. * * @default true */ changeOnBlur?: boolean; /** * Specifies the CSS classes to be added with the root and popup element of the Dropdown Tree component. * that allows customization of appearance. * * @default '' */ cssClass?: string; /** * Defines the value separator character in the input element when multi-selection or checkbox is enabled in the Dropdown Tree. * The delimiter character is applicable only for **default** and **delimiter** visibility modes. * * @default "," */ delimiterChar?: string; /** * Specifies a value that indicates whether the Dropdown Tree component is enabled or not. * * @default true */ enabled?: boolean; /** * Specifies the data source and mapping fields to render Dropdown Tree items. * * @default {value: 'value', text: 'text', dataSource: [], child: 'child', parentValue: 'parentValue', hasChildren: 'hasChildren', * expanded: 'expanded', htmlAttributes: 'htmlAttributes', iconCss: 'iconCss', imageUrl: 'imageUrl', * query: null, selected: 'selected', tableName: null, tooltip: 'tooltip'} */ fields?: FieldsModel; /** * Accepts the value to be displayed as a watermark text on the filter bar. * * @default null */ filterBarPlaceholder?: string; /** * Determines on which filter type, the component needs to be considered on search action. * The **TreeFilterType** and its supported data types are, * * <table> * <tr> * <td colSpan=1 rowSpan=1><b> * TreeFilterType</b></td><td colSpan=1 rowSpan=1><b> * Description</b></td><td colSpan=1 rowSpan=1><b> * Supported Types</b></td></tr> * <tr> * <td colSpan=1 rowSpan=1> * StartsWith<br/></td><td colSpan=1 rowSpan=1> * Checks whether a value begins with the specified value.<br/></td><td colSpan=1 rowSpan=1> * String<br/></td></tr> * <tr> * <td colSpan=1 rowSpan=1> * EndsWith<br/></td><td colSpan=1 rowSpan=1> * Checks whether a value ends with the specified value.<br/></td><td colSpan=1 rowSpan=1> * String<br/></td></tr> * <tr> * <td colSpan=1 rowSpan=1> * Contains<br/></td><td colSpan=1 rowSpan=1> * Checks whether a value contains with specified value.<br/></td><td colSpan=1 rowSpan=1> * String<br/></td></tr> * </table> * * The default value set to **StartsWith**, all the suggestion items which starts with typed characters to listed in the * suggestion popup. * * @default 'StartsWith' */ filterType?: TreeFilterType; /** * Specifies whether to display the floating label above the input element. * Possible values are: * * Never: The label will never float in the input when the placeholder is available. * * Always: The floating label will always float above the input. * * Auto: The floating label will float above the input after focusing or entering a value in the input. * * @default Syncfusion.EJ2.Inputs.FloatLabelType.Never * @isEnumeration true */ floatLabelType?: FloatLabelType; /** * Specifies the template that renders a customized footer container at the bottom of the pop-up list. * By default, the footerTemplate will be null and there will be no footer container for the pop-up list. * * @default null */ footerTemplate?: string; /** * When **ignoreAccent** is set to true, then it ignores the diacritic characters or accents when filtering. */ ignoreAccent?: boolean; /** * When set to false, consider the case-sensitive on performing the search to find suggestions. By default, consider the casing. * * @default true */ ignoreCase?: boolean; /** * Specifies the template that renders a customized header container at the top of the pop-up list. * By default, the headerTemplate will be null and there will be no header container for the pop-up list. * * @default null */ headerTemplate?: string; /** * Allows additional HTML attributes such as title, name, etc., and accepts n number of attributes in a key-value pair format. * * @default {} */ htmlAttributes?: { [key: string]: string; }; /** * Specifies a template to render customized content for all the items. * If the **itemTemplate** property is set, the template content overrides the displayed item text. * The property accepts [template string](https://ej2.syncfusion.com/documentation/common/template-engine/) * or HTML element ID holding the content. * * @default null */ itemTemplate?: string; /** * Configures visibility mode for component interaction when allowMultiSelection or checkbox is enabled. * Different modes are: * * Box : Selected items will be visualized in chip. * * Delimiter : Selected items will be visualized in the text content. * * Default : On focus in component will act in the box mode. On blur component will act in the delimiter mode. */ mode?: Mode; /** * Specifies the template that renders a customized pop-up list content when there is no data available * to be displayed within the pop-up. * * @default 'No Records Found' */ noRecordsTemplate?: string; /** * Specifies a short hint that describes the expected value of the Dropdown Tree component. * * @default null */ placeholder?: string; /** * Specifies the height of the pop-up list. * * @default '300px' */ popupHeight?: string | number; /** * Specifies the width of the popup list. By default, the popup width sets based on the width of the Dropdown Tree element. * * @default '100%' */ popupWidth?: string | number; /** * When set to true, the user interactions on the component will be disabled. * * @default false */ readonly?: boolean; /** * Specifies whether to show or hide the selectAll checkbox in the pop-up which allows you to select all the items in the pop-up. * * @default false */ showSelectAll?: boolean; /** * Specifies the display text for the selectAll checkbox in the pop-up. * * @default 'Select All' */ selectAllText?: string; /** * Enables or disables the checkbox option in the Dropdown Tree component. * If enabled, the Checkbox will be displayed next to the expand or collapse icon of the tree items. * * @default false */ showCheckBox?: boolean; /** * Specifies whether to show or hide the clear icon in textbox. * When the clear button is clicked, `value`, `text` properties will be reset to null. * * @default true */ showClearButton?: boolean; /** * Specifies whether to show or hide the Dropdown button. * * @default true */ showDropDownIcon?: boolean; /** * Specifies a value that indicates whether the items are sorted in the ascending or descending order, or not sorted at all. * The available types of sort order are, * * `None` - The items are not sorted. * * `Ascending` - The items are sorted in the ascending order. * * `Descending` - The items are sorted in the descending order. * * @default 'None' */ sortOrder?: SortOrder; /** * Gets or sets the display text of the selected item which maps the data **text** field in the component. * * @default null */ text?: string; /** * Configures the pop-up tree settings. * * @default {autoCheck: false, expandOn: 'Auto', loadOnDemand: false} */ treeSettings?: TreeSettingsModel; /** * Specifies the display text for the unselect all checkbox in the pop-up. * * @default 'Unselect All' */ unSelectAllText?: string; /** * Gets or sets the value of selected item(s) which maps the data **value** field in the component. * * @default null * @aspType Object */ value?: string[]; /** * Specifies the width of the component. By default, the component width sets based on the width of its parent container. * You can also set the width in pixel values. * * @default '100%' */ width?: string | number; /** * Specifies the z-index value of the pop-up element. * * @default 1000 */ zIndex?: number; /** * Defines whether to enable or disable the feature called wrap the selected items into multiple lines when the selected item's text * content exceeded the input width limit. * * @default false */ wrapText?: boolean; /** * Triggers when the data fetch request from the remote server fails. * * @event */ /* eslint-disable */ actionFailure?: EmitType<Object>; /** * Fires when popup opens before animation. * * @event */ beforeOpen?: EmitType<DdtBeforeOpenEventArgs>; /** * Triggers when an item in a popup is selected or when the model value is changed by user. * * @event */ change?: EmitType<DdtChangeEventArgs>; /** * Fires when popup close after animation completion. * * @event */ close?: EmitType<DdtPopupEventArgs>; /** * Triggers when the Dropdown Tree input element gets focus-out. * * @event */ /* eslint-disable */ blur?: EmitType<Object>; /** * Triggers when the Dropdown Tree is created successfully. * * @event */ /* eslint-disable */ created?: EmitType<Object>; /**      * Triggers when data source is populated in the Dropdown Tree. *      * @event      */ dataBound?: EmitType<DdtDataBoundEventArgs>; /** * Triggers when the Dropdown Tree is destroyed successfully. * * @event */ /* eslint-disable */ destroyed?: EmitType<Object>; /** * Triggers on typing a character in the filter bar when the **allowFiltering** is enabled. * * @event * @blazorProperty 'Filtering' */ filtering?: EmitType<DdtFilteringEventArgs>; /** * Triggers when the Dropdown Tree input element is focused. * * @event */ focus?: EmitType<DdtFocusEventArgs>; /** * Triggers when key press is successful. It helps to customize the operations at key press. * * @event */ keyPress?: EmitType<DdtKeyPressEventArgs>; /** * Fires when popup opens after animation completion. * * @event */ open?: EmitType<DdtPopupEventArgs>; /** * Triggers when an item in the popup is selected by the user either with mouse/tap or with keyboard navigation. * * @event */ select?: EmitType<DdtSelectEventArgs>; }