API Docs for: 3.0.1.91d25ad1
Show:

File: addon/components/models-table/columns-dropdown.js

import {layout as templateLayout} from '@ember-decorators/component';
import Component from '@ember/component';
import {action} from '@ember/object';
import layout from '../../templates/components/models-table/columns-dropdown';

/**
 * Dropdown with list of table's columns used within [models-table](Components.ModelsTable.html).
 *
 * It allows to toggle visibility for column sets or single column.
 *
 * Columns that should not be hidden must have property [mayBeHidden](Utils.ModelsTableColumn.html#property_mayBeHidden) set to `false`.
 *
 * Usage example:
 *
 * ```hbs
 * <ModelsTable @data={{data}} @columns={{columns}} as |MT|>
 *   <MT.ColumnsDropdown />
 *   {{! .... }}
 * </ModelsTable>
 * ```
 *
 * Block usage example:
 *
 * ```hbs
 * <ModelsTable @data={{data}} @columns={{columns}} as |MT|>
 *   <MT.ColumnsDropdown as |CD|>
 *     {{#if MT.columnDropdownOptions.showAll}}
 *       <button {{action MT.showAllColumns}}>Show all</button>
 *     {{/if}}
 *     {{#if MT.columnDropdownOptions.hideAll}}
 *       <button {{action MT.hideAllColumns}}>Hide all</button>
 *     {{/if}}
 *     {{#if MT.columnDropdownOptions.restoreDefaults}}
 *       <button {{action MT.restoreDefaultVisibility}}>Restore default visibility</button>
 *     {{/if}}
 *     {{#each MT.columnDropdownOptions.columnSets as |columnSet|}}
 *       <button {{action MT.toggleColumnSetVisibility columnSet}}>{{columnSet.label}}</button>
 *     {{/each}}
 *     {{#each MT.processedColumns as |column|}}
 *       {{#if column.mayBeHidden}}
 *         <button {{action MT.toggleHidden column}}>
 *           <i class={{if column.toggleColumnVisibility MT.themeInstance.columnVisibleIcon MT.themeInstance.columnHiddenIcon}}></i>
 *           {{column.title}}
 *         </button>
 *       {{/if}}
 *     {{/each}}
 *   </MT.ColumnsDropdown>
 *   {{! .... }}
 * </ModelsTable>
 * ```
 *
 * @namespace Components
 * @class ModelsTableColumnsDropdown
 * @extends Ember.Component
 */
export default
@templateLayout(layout)
class ColumnsDropdownComponent extends Component {

  /**
   * Bound from [ModelsTable.processedColumns](Components.ModelsTable.html#property_processedColumns)
   *
   * @property processedColumns
   * @type Utils.ModelsTableColumn[]
   * @default null
   */
  processedColumns = null;

  /**
   * Bound from [ModelsTable.columnDropdownOptions](Components.ModelsTable.html#property_columnDropdownOptions)
   *
   * @property columnDropdownOptions
   * @type ColumnDropdownOptions
   * @default null
   */
  columnDropdownOptions = null;

  /**
   * Bound from [ModelsTable.themeInstance](Components.ModelsTable.html#property_themeInstance)
   *
   * @property themeInstance
   * @type object
   * @default null
   */
  themeInstance = null;

  /**
   * Closure action [ModelsTable.showAllColumns](Components.ModelsTable.html#event_showAllColumns)
   *
   * @event showAllColumns
   */
  showAllColumns = null;

  /**
   * Closure action [ModelsTable.hideAllColumns](Components.ModelsTable.html#event_hideAllColumns)
   *
   * @event hideAllColumns
   */
  hideAllColumns = null;

  /**
   * Closure action [ModelsTable.restoreDefaultVisibility](Components.ModelsTable.html#event_restoreDefaultVisibility)
   *
   * @event restoreDefaultVisibility
   */
  restoreDefaultVisibility = null;

  /**
   * Closure action [ModelsTable.toggleColumnSet](Components.ModelsTable.html#event_toggleColumnSet)
   *
   * @event toggleColumnSet
   */
  toggleColumnSet = null;

  /**
   * Closure action [ModelsTable.toggleHidden](Components.ModelsTable.html#event_toggleHidden)
   *
   * @event toggleHidden
   */
  toggleHidden = null;

  /**
   * @event doShowAllColumns
   * @param {Event} e
   * @protected
   */
  @action
  doShowAllColumns(e) {
    this.showAllColumns();
    if (e) {
      e.stopPropagation();
    }
    return false;
  }

  /**
   * @event doHideAllColumns
   * @param {Event} e
   * @protected
   */
  @action
  doHideAllColumns(e) {
    this.hideAllColumns();
    if (e) {
      e.stopPropagation();
    }
    return false;
  }

  /**
   * @event doRestoreDefaultVisibility
   * @param {Event} e
   * @protected
   */
  @action
  doRestoreDefaultVisibility(e) {
    this.restoreDefaultVisibility();
    if (e) {
      e.stopPropagation();
    }
    return false;
  }

  /**
   * @event doToggleColumnSet
   * @param {ColumnSet} columnSet
   * @param {Event} e
   * @protected
   */
  @action
  doToggleColumnSet(columnSet, e) {
    this.toggleColumnSet(columnSet);
    if (e) {
      e.stopPropagation();
    }
    return false;
  }

  /**
   * @event doToggleHidden
   * @param {Utils.ModelsTableColumn} column
   * @param {Event} e
   * @protected
   */
  @action
  doToggleHidden(column, e) {
    this.toggleHidden(column);
    if (e) {
      e.stopPropagation();
    }
    return false;
  }

}