mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-05-26 08:08:33 +08:00
The `DMultiSelect` component provides a customizable multi-select dropdown with support for both mouse and keyboard interactions.  ### Parameters #### `@loadFn` (required) An async function that returns the data to populate the dropdown options. ```javascript const loadFn = async () => { return [ { id: 1, name: "Option 1" }, { id: 2, name: "Option 2" }, ]; }; ``` #### `@compareFn` A function used to determine equality between items. This is particularly useful when working with complex objects. By default, `id` will be used. ```javascript const compareFn = (a, b) => { return a.name === b.name; }; ``` #### `@selection` An array of pre-selected items that will be displayed as selected when the component renders. ```javascript const selection = [ { id: 1, name: "Option 1" }, { id: 2, name: "Option 2" }, ]; ``` #### `@label` Text label displayed in the trigger element when no items are selected. ```javascript @label="Select options" ``` ### Named Blocks #### :selection Block for customizing how selected items appear in the trigger. ```javascript <:selection as |result|>{{result.name}}</:selection> ``` #### :result Block for customizing how items appear in the dropdown list. ```javascript <:result as |result|>{{result.name}}</:result> ``` #### :result Block for customizing how errors appear in the component. ```javascript <:error as |error|>{{error}}</:error> ``` ### Example Usage ```javascript <DMultiSelect @loadFn={{this.loadOptions}} @selection={{this.selectedItems}} @compareFn={{this.compareItems}} @label="Select options"> <:selection as |result|>{{result.name}}</:selection> <:result as |result|>{{result.name}}</:result> <:error as |error|>{{error}}</:error> </DMultiSelect> ``` Co-Authored-By: Jordan Vidrine <30537603+jordanvidrine@users.noreply.github.com> --------- Co-authored-by: Jordan Vidrine <30537603+jordanvidrine@users.noreply.github.com> |
||
|---|---|---|
| .. | ||
| sidebar/edit-navigation-menu | ||
| _index.scss | ||
| add-pm-participants.scss | ||
| badges.scss | ||
| banner.scss | ||
| bookmark-list.scss | ||
| bookmark-menu.scss | ||
| bookmark-modal.scss | ||
| buttons.scss | ||
| calendar-date-time-input.scss | ||
| char-counter.scss | ||
| color-input.scss | ||
| composer-toggle-switch.scss | ||
| conditional-loading-section.scss | ||
| convert-to-public-topic-modal.scss | ||
| d-breadcrumbs.scss | ||
| d-multi-select.scss | ||
| d-page-header.scss | ||
| d-select.scss | ||
| d-stat-tiles.scss | ||
| d-toggle-switch.scss | ||
| date-input.scss | ||
| date-picker.scss | ||
| date-time-input-range.scss | ||
| date-time-input.scss | ||
| download-calendar.scss | ||
| drafts-dropdown-menu.scss | ||
| dropdown-menu.scss | ||
| emoji-picker.scss | ||
| file-size-input.scss | ||
| filter-input.scss | ||
| footer-nav.scss | ||
| form-template-field.scss | ||
| group-member-dropdown.scss | ||
| groups-form-membership-fields.scss | ||
| hashtag.scss | ||
| horizontal-overflow-nav.scss | ||
| iframed-html.scss | ||
| ignored-user-list.scss | ||
| keyboard_shortcuts.scss | ||
| more-topics.scss | ||
| navs.scss | ||
| notifications-tracking.scss | ||
| offline-indicator.scss | ||
| pick-files-button.scss | ||
| post-list.scss | ||
| powered-by-discourse.scss | ||
| relative-time-picker.scss | ||
| signup-progress-bar.scss | ||
| svg.scss | ||
| tap-tile.scss | ||
| theme-card.scss | ||
| time-input.scss | ||
| time-shortcut-picker.scss | ||
| topic-map.scss | ||
| topic-query-filter.scss | ||
| user-card.scss | ||
| user-info.scss | ||
| user-status-message.scss | ||
| user-status-picker.scss | ||
| user-stream-item.scss | ||
| user-stream.scss | ||
| welcome-banner.scss | ||
| welcome-header.scss | ||
| widget-dropdown.scss | ||