UNPKG

azure-devops-ui

Version:

React components for building web UI in Azure DevOps

1 lines 1.99 kB
import{announce}from"../../Core/Util/Accessibility";import{cellFromEvent}from"../../List";import*as Resources from"../../Resources.Widgets";import{KeyCode,setFocusVisible}from"../../Util";import{SortOrder}from"./Table.Props";var ColumnSorting=function(){function e(e){var o=this;this.initialize=function(e,t,n){o.props=e,(o.eventDispatch=n).addEventListener("click",o.onClick),n.addEventListener("keydown",o.onKeyDown)},this.componentDidMount=function(e){o.props=e},this.componentDidUpdate=function(e){o.props=e},this.componentWillUnmount=function(){o.eventDispatch&&(o.eventDispatch.removeEventListener("click",o.onClick),o.eventDispatch.removeEventListener("keydown",o.onKeyDown))},this.onClick=function(e){e.defaultPrevented||o.processSortEvent(e,!0)},this.onKeyDown=function(e){e.defaultPrevented||e.which!==KeyCode.enter&&e.which!==KeyCode.space||o.processSortEvent(e)},this.onSort=e}return e.prototype.processSortEvent=function(e,t){var n,o=cellFromEvent(e),r=e.target,s=!t&&r.classList.contains("bolt-table-header-cell-actionable");for(r.classList.contains("bolt-table-header-sizer")&&(t=r.closest(".bolt-table-header-cell-actionable"))&&(t.focus(),setFocusVisible(!0));!s&&r!==o.cellElement&&r.parentElement;)s=(r=r.parentElement).classList.contains("bolt-table-header-cell-actionable");-1===o.rowIndex&&s&&(t=this.props.columns[o.cellIndex])&&t.sortProps&&(this.onSort(o.cellIndex,t.sortProps.sortOrder===SortOrder.ascending?SortOrder.descending:SortOrder.ascending,e),t=t.sortProps.sortOrder===SortOrder.ascending?null!=(n=t.sortProps.ariaLabelAscending)?n:Resources.ColumnSortedAscendingAnnouncement:null!=(n=t.sortProps.ariaLabelDescending)?n:Resources.ColumnSortedDescendingAnnouncement,announce(t,!0),e.preventDefault())},e}();function sortItems(n,e,o,t,r){var s=o[n];s&&e===SortOrder.descending&&(s=function(e,t){return-o[n](e,t)});for(var i=0;i<t.length;i++){var c=t[i];c.sortProps&&(c.sortProps.sortOrder=i===n?e:void 0)}return s?r.sort(s):r}export{ColumnSorting,sortItems};