@progress/kendo-react-grid
Version:
KendoReact Grid package
184 lines • 6.5 kB
JavaScript
;
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