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