UNPKG

@progress/kendo-react-grid

Version:
184 lines • 6.5 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var React = require("react"); var GridColumnMenuItem_1 = require("./GridColumnMenuItem"); var GridColumnMenuItemGroup_1 = require("./GridColumnMenuItemGroup"); var GridSortSettings_1 = require("../interfaces/GridSortSettings"); var kendo_react_intl_1 = require("@progress/kendo-react-intl"); var messages_1 = require("../messages"); /** * @hidden */ var ASC_DIR = 'asc'; /** * @hidden */ var DESC_DIR = 'desc'; /** * @hidden */ var sortSeqMap = { true: { 'asc': { 'asc': '', 'desc': 'desc' }, 'desc': { 'asc': 'asc', 'desc': '' }, '': { 'asc': 'asc', 'desc': 'desc' } }, false: { 'asc': { 'asc': 'asc', 'desc': 'desc' }, 'desc': { 'asc': 'asc', 'desc': 'desc' }, '': { 'asc': 'asc', 'desc': 'desc' } } }; /** * @hidden */ var sortIndex = function (field, sort) { if (!sort) { return -1; } return sort.findIndex(function (s) { return s.field === field; }); }; /** * @hidden */ var sortedAsc = function (sortedIndex, sort) { return !!(sort && sortedIndex > -1 && sort[sortedIndex].dir === ASC_DIR); }; /** * @hidden */ var sortedDesc = function (sortedIndex, sort) { return !!(sort && sortedIndex > -1 && sort[sortedIndex].dir === DESC_DIR); }; /** * @example * ```jsx * class ColumnMenu extends React.Component { * render() { * return ( * <div> * <GridColumnMenuSort {...this.props} /> * </div>); * } * } * * class App extends React.PureComponent { * constructor(props) { * super(props); * * this.state = this.createAppState({ * take: 10, * skip: 0 * }); * } * * createAppState(dataState) { * return { * result: process(products.slice(0), dataState), * dataState: dataState * }; * } * * dataStateChange = (event) => { * this.setState(this.createAppState(event.data)); * } * * render() { * return ( * <div> * <Grid * data={this.state.result} * {...this.state.dataState} * onDataStateChange={this.dataStateChange} * sortable={true} * pageable={true} * > * <Column field="ProductID" title="Product ID" columnMenu={ColumnMenu}/> * <Column field="ProductName" /> * </Grid> * <br /> * </div> * ); * } * } * * ReactDOM.render(<App />, document.querySelector('my-app')); * ``` */ var GridColumnMenuSort = /** @class */ (function (_super) { __extends(GridColumnMenuSort, _super); function GridColumnMenuSort() { var _this = _super !== null && _super.apply(this, arguments) || this; /** * @hidden */ _this.onAscClick = function (e) { _this.onSort(e, ASC_DIR); if (_this.props.onCloseMenu) { _this.props.onCloseMenu(); } }; /** * @hidden */ _this.onDescClick = function (e) { _this.onSort(e, DESC_DIR); if (_this.props.onCloseMenu) { _this.props.onCloseMenu(); } }; return _this; } /** * @hidden */ GridColumnMenuSort.prototype.onSort = function (e, selectedDir) { e.preventDefault(); if (!this.props.onSortChange) { return; } var _a = this.props, column = _a.column, sortable = _a.sortable, sort = _a.sort; var _b = GridSortSettings_1.normalize(sortable || false, false), allowUnsort = _b.allowUnsort, mode = _b.mode; var oldDescriptor = (sort || []).filter(function (d) { return d.field === column.field; })[0]; var dir = sortSeqMap[allowUnsort][oldDescriptor && oldDescriptor.dir || ''][selectedDir]; var newDescriptor = (mode === 'single') ? [] : (this.props.sort || []).filter(function (d) { return d.field !== column.field; }); if (dir !== '' && column.field) { newDescriptor.push({ field: column.field, dir: dir }); } this.props.onSortChange(newDescriptor, e); }; /** * @hidden */ GridColumnMenuSort.prototype.render = function () { var _a = this.props, sort = _a.sort, column = _a.column; var currentSortIndex = sortIndex(column.field, sort); var localizationService = kendo_react_intl_1.provideLocalizationService(this); return (React.createElement(GridColumnMenuItemGroup_1.GridColumnMenuItemGroup, null, React.createElement(GridColumnMenuItem_1.GridColumnMenuItem, { title: localizationService.toLanguageString(messages_1.sortAscending, messages_1.messages[messages_1.sortAscending]), iconClass: 'k-i-sort-asc-sm', selected: sortedAsc(currentSortIndex, sort), onClick: this.onAscClick }), React.createElement(GridColumnMenuItem_1.GridColumnMenuItem, { title: localizationService.toLanguageString(messages_1.sortDescending, messages_1.messages[messages_1.sortDescending]), iconClass: 'k-i-sort-desc-sm', selected: sortedDesc(currentSortIndex, sort), onClick: this.onDescClick }))); }; // tslint:disable:max-line-length /** * Can be used to check if sorting is applied to a specific field ([see example]({% slug column_menu_grid %}#toc-styling-the-column-menu-icon)). Useful for creating active sort indicators. */ // tslint:enable:max-line-length GridColumnMenuSort.active = function (field, sort) { var currentSortIndex = sortIndex(field, sort); return sortedDesc(currentSortIndex, sort) || sortedAsc(currentSortIndex, sort); }; return GridColumnMenuSort; }(React.Component)); exports.GridColumnMenuSort = GridColumnMenuSort; //# sourceMappingURL=GridColumnMenuSort.js.map