@mescius/wijmo.grid.detail
Version:
UI library for pure JS, Angular, React, Vue and more...
14 lines (13 loc) • 12.9 kB
JavaScript
/*!
*
* Wijmo Library 5.20251.40
* https://developer.mescius.com/wijmo
*
* Copyright(c) MESCIUS inc. All rights reserved.
*
* Licensed under the End-User License Agreement For MESCIUS Wijmo Software.
* us.sales@mescius.com
* https://developer.mescius.com/wijmo/licensing
*
*/
var __extends=this&&this.__extends||function(){var extendStatics=function(e,t){return(extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)};return function(e,t){extendStatics(e,t);function __(){this.constructor=e}e.prototype=null===t?Object.create(t):(__.prototype=t.prototype,new __)}}();import{_addCultureInfo,Key,Control,culture,copy,asEnum,asNumber,asBoolean,asFunction,isFunction,isNumber,animate,setCss,closest,closestClass,addClass,hasClass,setAriaLabel,setAttribute,ControlClsNames,InputFormElementsClsNames,GlyphClsNames,format,_registerModule}from"@mescius/wijmo";import{Row,FlexGrid,MergeManager,CellRange,CellType,_NewRowTemplate,GroupRow,FlexGridClsNames}from"@mescius/wijmo.grid";import*as selfModule from"@mescius/wijmo.grid.detail";var DetailRow=function(e){__extends(DetailRow,e);function DetailRow(t){var i=e.call(this)||this;i.isReadOnly=!0;return i}Object.defineProperty(DetailRow.prototype,"detail",{get:function(){return this._detail},set:function(e){this._detail=e},enumerable:!0,configurable:!0});return DetailRow}(Row);export{DetailRow};var DetailMergeManager=function(e){__extends(DetailMergeManager,e);function DetailMergeManager(t){var i=e.call(this)||this;i._originalMergeManager=t.mergeManager;return i}DetailMergeManager.prototype.getMergedRange=function(e,t,i,r){void 0===r&&(r=!0);switch(e.cellType){case CellType.Cell:if(e.rows[t]instanceof DetailRow){e.columns._frozenInternal>0&&e.grid&&(e.grid.cloneFrozenCells=!1);return new CellRange(t,0,t,e.columns.length-1)}break;case CellType.RowHeader:var l=_isFrozen(e,t),o=_isNew(e,t),a=e.rows[t].dataItem;!a&&t>0&&e.rows[t]instanceof DetailRow&&(a=e.rows[t-1].dataItem);for(var n=t;n>0&&e.rows[n-1].dataItem==a&&_isFrozen(e,n-1)==l&&_isNew(e,n-1)==o;)n--;for(var s=t;s<e.rows.length-1&&e.rows[s+1].dataItem==a&&_isFrozen(e,s+1)==l&&_isNew(e,s+1)==o;)s++;s<e.rows.length-1&&e.rows[s+1]instanceof DetailRow&&_isFrozen(e,s+1)==l&&_isNew(e,s+1)==o&&s++;return n!=s?new CellRange(n,i,s,i):null}return this._originalMergeManager.getMergedRange(e,t,i,r)};return DetailMergeManager}(MergeManager);export{DetailMergeManager};function _isFrozen(e,t){return t<e.rows._frozenInternal}function _isNew(e,t){return e.rows[t]instanceof _NewRowTemplate}export var FlexGridDetailProviderClsNames={detail:"wj-detail",detailRow:"wj-detail-row",elemDetail:"wj-elem-detail"};_addCultureInfo("FlexGridDetailProvider",{ariaLabels:{toggleDetail:"Toggle Row Detail"},accessibilityHelperMessage:{showDetail:"Show detail row: {rowIndex}",hideDetail:"Hide detail row: {rowIndex}"}});export var KeyAction;!function(e){e[e.None=0]="None";e[e.ToggleDetail=1]="ToggleDetail"}(KeyAction||(KeyAction={}));export var DetailVisibilityMode;!function(e){e[e.Code=0]="Code";e[e.Selection=1]="Selection";e[e.ExpandSingle=2]="ExpandSingle";e[e.ExpandMulti=3]="ExpandMulti"}(DetailVisibilityMode||(DetailVisibilityMode={}));var FlexGridDetailProvider=function(){function FlexGridDetailProvider(e,t){var i=this;this._maxHeight=null;this._mode=DetailVisibilityMode.ExpandSingle;this._animated=!1;this._keyActionEnter=KeyAction.None;this._g=e;e.mergeManager=new DetailMergeManager(e);e.addEventListener(e.rowHeaders.hostElement,"click",this._hdrClick.bind(this));e.addEventListener(e.rowHeaders.hostElement,"mousedown",(function(t){var r=e.editableCollectionView;if(e.activeEditor||r&&r.currentEditItem){i._hdrClick(t);t.preventDefault()}}));setTimeout((function(){e.formatItem.addHandler(i._formatItem,i)}),100);e.selectionChanged.addHandler(this._selectionChanged,this);e.resizedRow.addHandler(this._resizedRow,this);e.loadingRows.addHandler((function(){return i.hideDetail()}));e.deletingRow.addHandler((function(e,t){i.hideDetail(t.row)}));e.updatedView.addHandler(this._handleFrozenCells,this);e.cloneFrozenCells=!1;e.draggingRow.addHandler((function(e,t){if(t.row<e.rows.length-1&&e.rows[t.row+1]instanceof DetailRow){t.cancel=!0;i.hideDetail(t.row)}}));e.addEventListener(e.hostElement,"keydown",(function(e){if(e.keyCode==Key.Enter&&i._keyActionEnter==KeyAction.ToggleDetail){var t=i._g.selection.row,r=i._g.activePanel.cellType;i._toggleRowDetail(t)&&r===CellType.Cell&&e.preventDefault()}}),!0);e._root.addEventListener("scroll",(function(){hasClass(e.activeCell,FlexGridDetailProviderClsNames.detail)&&Control.sharedState.InvalidScroll||Control.refreshAll(e._root)}));copy(this,t)}Object.defineProperty(FlexGridDetailProvider.prototype,"grid",{get:function(){return this._g},enumerable:!0,configurable:!0});Object.defineProperty(FlexGridDetailProvider.prototype,"detailVisibilityMode",{get:function(){return this._mode},set:function(e){if((e=asEnum(e,DetailVisibilityMode))!=this._mode){this._mode=e;this.hideDetail();this._g.invalidate()}},enumerable:!0,configurable:!0});Object.defineProperty(FlexGridDetailProvider.prototype,"maxHeight",{get:function(){return this._maxHeight},set:function(e){if((e=asNumber(e,!0))!=this._maxHeight){this._maxHeight=e;this.hideDetail()}},enumerable:!0,configurable:!0});Object.defineProperty(FlexGridDetailProvider.prototype,"isAnimated",{get:function(){return this._animated},set:function(e){e!=this._animated&&(this._animated=asBoolean(e))},enumerable:!0,configurable:!0});Object.defineProperty(FlexGridDetailProvider.prototype,"keyActionEnter",{get:function(){return this._keyActionEnter},set:function(e){this._keyActionEnter=asEnum(e,KeyAction)},enumerable:!0,configurable:!0});Object.defineProperty(FlexGridDetailProvider.prototype,"createDetailCell",{get:function(){return this._createDetailCellFn},set:function(e){this._createDetailCellFn=asFunction(e,!0)},enumerable:!0,configurable:!0});Object.defineProperty(FlexGridDetailProvider.prototype,"disposeDetailCell",{get:function(){return this._disposeDetailCellFn},set:function(e){this._disposeDetailCellFn=asFunction(e,!0)},enumerable:!0,configurable:!0});Object.defineProperty(FlexGridDetailProvider.prototype,"rowHasDetail",{get:function(){return this._rowHasDetailFn},set:function(e){if((e=asFunction(e,!0))!=this._rowHasDetailFn){this._rowHasDetailFn=e;this.hideDetail();this._g.invalidate()}},enumerable:!0,configurable:!0});FlexGridDetailProvider.prototype.getDetailRow=function(e){for(var t=this._g.rows,i=this._toIndex(e),r=t[i]?t[i].dataItem:void 0;i<t.length;i++){var l=t[i];if(l instanceof DetailRow)return l;if(l.dataItem!=r)return null}return null};FlexGridDetailProvider.prototype.isDetailVisible=function(e){return null!=this.getDetailRow(e)};FlexGridDetailProvider.prototype.isDetailAvailable=function(e){e=this._toIndex(e);return this._hasDetail(e)};FlexGridDetailProvider.prototype.hideDetail=function(e){var t=this._g,i=t.rows,r=culture.FlexGridDetailProvider.accessibilityHelperMessage.hideDetail;if(null!=e){var l=this._toIndex(e);if(t.rows._frozenInternal>0&&l<=t.rows._frozenInternal-1){t.rows.frozenDetailChildren-=1;t.rows._frozenInternal-=1}else if(t.rows._frozenInternal<0&&t.rows.isFrozen(l)){t.rows.frozenDetailChildren-=1;t.rows._frozenInternal+=1}for(;!(i[l]instanceof DetailRow)&&l<i.length-1;)l++;var o=i[l];if(o instanceof DetailRow){var a=o.detail.parentElement;if(a)for(var n=a.querySelectorAll("."+ControlClsNames.hostElement),s=0;s<n.length;s++){var d=Control.getControl(n[s]);d&&d.containsFocus()&&t.focus(!0)}var c=this.disposeDetailCell;!!c&&c(o)||Control.disposeAll(o.detail);i.removeAt(l);r=format(r,{rowIndex:l});t.announceShortcut(r)}}else for(var u=0;u<i.length;u++)i[u]instanceof DetailRow&&this.hideDetail(u)};FlexGridDetailProvider.prototype.showDetail=function(e,t){void 0===t&&(t=!1);var i=this._g,r=i.rows,l=culture.FlexGridDetailProvider.accessibilityHelperMessage.showDetail,o=this._toIndex(e);if(i.rows._frozenInternal>0&&o<=i.rows._frozenInternal-1){i.rows.frozenDetailChildren+=1;i.rows._frozenInternal+=1}else if(i.rows._frozenInternal<0&&i.rows.isFrozen(o)){i.rows.frozenDetailChildren+=1;i.rows._frozenInternal-=1}o>0&&r[o]instanceof DetailRow&&o--;for(var a=r[o].dataItem;o<r.length-1&&r[o+1].dataItem==a;)o++;if(t){for(var n=i.selection,s=!1,d=0;d<r.length-1;d++)if(d!=o&&r[d+1]instanceof DetailRow){this.hideDetail(d);d<o&&o--;if(d<n.row){n.row--;n.row2--;s=!0}}s&&i.select(n,!1)}if(!this.isDetailVisible(o)&&this._hasDetail(o)){var c=new DetailRow(r[o]),u=this._createDetailCell(r[o]);c.detail=u;if(u){r.insert(o+1,c);l=format(l,{rowIndex:o+1});i.announceShortcut(l);var h=i.containsFocus();if(this._animated){var f=u.style;f.transform="translateY(-100%)";f.opacity="0";animate((function(e){if(e<1){f.transform="translateY("+(100*-(1-e)).toFixed(0)+"%)";f.opacity=(e*e).toString()}else{f.transform=f.opacity="";Control.invalidateAll(u);h&&i.scrollIntoView(o,-1)}}))}else h&&i.scrollIntoView(o,-1,!0)}}};FlexGridDetailProvider.prototype._sizeDetailRow=function(e,t){void 0===t&&(t=!1);var i=this._g,r=e.detail;Control.refreshAll(r);var l=t?r.scrollHeight:r.offsetHeight,o=l+i._cellPadVert+1,a=this._maxHeight;isNumber(a)&&a>0&&o>a&&(o=a);e.height=o;r.style.height||(r.style.height="100%");var n=r.querySelector("."+FlexGridClsNames.hostElement);n&&!n.style.height&&(n.style.height="100%");return l};FlexGridDetailProvider.prototype._handleFrozenCells=function(){var e=this._g,t=e.hostElement,i="."+FlexGridClsNames.hostElement,r=Control.getControl(t.querySelector(i));if(r instanceof FlexGrid&&(r.rows._frozenInternal||r.columns._frozenInternal)){setCss([e._eTL,e._eBL,e._eCFtr,e._eRHdr,e._eMarquee],{zIndex:"13"});setCss(e._eCHdr,{zIndex:"14"});for(var l=t.querySelectorAll("."+FlexGridClsNames.frozen),o=0;o<l.length;o++){var a=l[o];if(closest(a,i)==t){var n=parseInt(a.style.zIndex);a.style.zIndex=(n%10+10).toString()}}}};FlexGridDetailProvider.prototype._toIndex=function(e){return e instanceof Row?e.index:asNumber(e)};FlexGridDetailProvider.prototype._hdrClick=function(e){if(!e.defaultPrevented&&0==e.button&&closestClass(e.target,FlexGridDetailProvider._WJC_DETAIL)){var t=DetailVisibilityMode;switch(this._mode){case t.ExpandMulti:case t.ExpandSingle:var i=this._g,r=i.hitTest(e.target);r.panel||(r=i.hitTest(e));r.panel&&this._toggleRowDetail(r.row)&&e.preventDefault()}}};FlexGridDetailProvider.prototype._toggleRowDetail=function(e){if(e>-1){if(this.isDetailVisible(e)){this.hideDetail(e);return!0}if(this._hasDetail(e)){this.showDetail(e,this._mode==DetailVisibilityMode.ExpandSingle);return!0}}return!1};FlexGridDetailProvider.prototype._selectionChanged=function(e,t){var i=this;if(this._mode==DetailVisibilityMode.Selection){this._toSel&&clearTimeout(this._toSel);this._toSel=setTimeout((function(){var t=e._selHdl.selection.row;t>-1?i.showDetail(t,!0):i.hideDetail()}),300)}};FlexGridDetailProvider.prototype._formatItem=function(e,t){var i=this,r=this._g,l=t.cell,o=t.getRow(),a=DetailVisibilityMode;if(t.panel==r.cells&&o instanceof DetailRow&&null!=o.detail&&!hasClass(l,FlexGridDetailProviderClsNames.detail)){addClass(l,FlexGridDetailProviderClsNames.detail);addClass(l.parentElement,FlexGridDetailProviderClsNames.detailRow);l.textContent="";l.style.textAlign="";l.className=l.className.replace(/wj\-align\-[\S]+/g,"");l.appendChild(o.detail);null==o.height?0===this._sizeDetailRow(o)&&setTimeout((function(){i._sizeDetailRow(o,!0)}),1):Control.refreshAll(o.detail)}if(t.panel==r.rowHeaders&&0==t.col&&this._hasDetail(t.row)){l.style.cursor="";switch(this._mode){case a.ExpandMulti:case a.ExpandSingle:var n=this.isDetailVisible(t.row),s=n?"minus":"plus",d=FlexGridDetailProvider._WJC_DETAIL;l.innerHTML='<div class="'+InputFormElementsClsNames.btn+" "+GlyphClsNames.btnGlyph+" "+d+'" role="button" tabindex="-1"><span class="'+GlyphClsNames.glyph+"-"+s+'"></span></div>';var c=l.children[0],u=culture.FlexGridDetailProvider.ariaLabels.toggleDetail;setAriaLabel(c,u);setAttribute(c,"aria-expanded",n)}}};FlexGridDetailProvider.prototype._resizedRow=function(e,t){var i=t.getRow();i instanceof DetailRow&&i.detail&&Control.refreshAll(i.detail)};FlexGridDetailProvider.prototype._hasDetail=function(e){var t=this._g.rows[e];return isFunction(this._rowHasDetailFn)?this._rowHasDetailFn(t):this._isRegularRow(t)};FlexGridDetailProvider.prototype._isRegularRow=function(e){return!(e instanceof _NewRowTemplate||e instanceof DetailRow)&&!(e instanceof GroupRow&&!this._g.childItemsPath)};FlexGridDetailProvider.prototype._createDetailCell=function(e){return this.createDetailCell?this.createDetailCell(e):null};FlexGridDetailProvider._WJC_DETAIL=FlexGridDetailProviderClsNames.elemDetail;return FlexGridDetailProvider}();export{FlexGridDetailProvider};_registerModule("wijmo.grid.detail",selfModule);