azure-devops-ui
Version:
React components for building web UI in Azure DevOps
1 lines • 1.61 kB
JavaScript
import{cellFromEvent}from"../../List";import{KeyCode}from"../../Util";import{SortOrder}from"./Table.Props";class ColumnSorting{constructor(t){this.initialize=(t,e,o)=>{this.props=t,(this.eventDispatch=o).addEventListener("click",this.onClick),o.addEventListener("keydown",this.onKeyDown)},this.componentDidMount=t=>{this.props=t},this.componentDidUpdate=t=>{this.props=t},this.componentWillUnmount=()=>{this.eventDispatch&&(this.eventDispatch.removeEventListener("click",this.onClick),this.eventDispatch.removeEventListener("keydown",this.onKeyDown))},this.onClick=t=>{t.defaultPrevented||this.processSortEvent(t,!0)},this.onKeyDown=t=>{t.defaultPrevented||t.which!==KeyCode.enter&&t.which!==KeyCode.space||this.processSortEvent(t)},this.onSort=t}processSortEvent(o,r){if("true"!==document.body.getAttribute("data-resize-active")&&"false"!==document.body.getAttribute("data-resize-active")){var s=cellFromEvent(o);let t=o.target,e=!r&&t.classList.contains("bolt-table-header-cell-actionable");if(!t.classList.contains("bolt-table-header-sizer")){for(;!e&&t!==s.cellElement&&t.parentElement;)t=t.parentElement,e=t.classList.contains("bolt-table-header-cell-actionable");-1===s.rowIndex&&e&&(r=this.props.columns[s.cellIndex])&&r.sortProps&&(r=r.sortProps.sortOrder===SortOrder.ascending?SortOrder.descending:SortOrder.ascending,this.onSort(s.cellIndex,r,o),o.preventDefault())}}}}function sortItems(o,e,r,s,t){let n=r[o];n&&e===SortOrder.descending&&(n=(t,e)=>-r[o](t,e));for(let t=0;t<s.length;t++){var i=s[t];i.sortProps&&(i.sortProps.sortOrder=t===o?e:void 0)}return n?t.sort(n):t}export{ColumnSorting,sortItems};