@progress/kendo-react-grid
Version:
React Data Grid (Table) provides 100+ ready-to-use data grid features. KendoReact Grid package
9 lines (8 loc) • 5.49 kB
JavaScript
/**
* @license
*-------------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the package root for more information
*-------------------------------------------------------------------------------------------
*/
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("../utils/index.js"),G=1,w=20;class x{constructor(u){this.columns=[],this.columnsState=[],this.resizable=!1,this.isRtl=!1,this.setIsRtl=c=>{this.isRtl=c},this.initWidths=()=>{var h;const c=((h=this.colGroupMain)==null?void 0:h.children)||[],l=p.getFlatColumnsState(this.columnsState),r=this.columns.filter(n=>{var o;return!((o=n.children)!=null&&o.length)});for(let n=0;n<c.length;n++){const o=c[n];let t="";const i=l.find(s=>s.id===r[n].id);i&&(t=i.width||""),o.width=t,this.colGroupHeader&&(this.colGroupHeader.children[n].width=t),this.colGroupFooter&&(this.colGroupFooter.children[n].width=t)}},this.dragHandler=(c,l,r,h)=>{const n=c.originalEvent;h||(n.preventDefault(),n.stopPropagation(),n.stopImmediatePropagation());const o=r.closest("th");if(!o||!o)return;const t=o.clientWidth;let i=t;if(this.isRtl?i+=r.getBoundingClientRect().right-r.offsetWidth/2-c.clientX:i+=c.clientX-r.getBoundingClientRect().left-r.offsetWidth/2,!h&&Math.abs(i-t)<1)return;this.fixateInitialWidths(o.parentElement.clientWidth),this.setWidths(l,Math.floor(i)/t);const s=this.columns.filter(e=>!e.children.length).findIndex(e=>e.id===l.id);this.onResize(s,t,i,n,h,this.columnsState,l.id)},this.dblClickHandler=(c,l)=>{const r=this.columns.filter(d=>l.indexOf(d.id)>-1),h=p.getFlatColumnsState(this.columnsState);if(!this.colGroupMain||!r.length)return;const n={},o=r;for(;o.length>0;){const d=o.pop();if(!d)break;d.children.length?o.push(...d.children):n[d.id]=d}const t=this.columns.filter(d=>!d.children.length),i=[];t.forEach((d,f)=>{n[d.id]&&i.push(f)});const s=[this.colGroupMain.parentElement],e=[this.colGroupMain];this.colGroupHeader&&(s.push(this.colGroupHeader.parentElement),e.push(this.colGroupHeader)),this.colGroupFooter&&(s.push(this.colGroupFooter.parentElement),e.push(this.colGroupFooter)),s.forEach(d=>d.classList.add("k-autofitting"));const a=[];e.forEach(d=>{i.forEach(f=>{d.children[f]&&(d.children[f].width="",a[f]=Math.max(a[f]||0,d.children[f].offsetWidth+G))})}),e.forEach(d=>{i.forEach(f=>{if(d.children[f]){d.children[f].width=a[f]+"px";const g=h.find(m=>m.id===t[f].id);g&&(g.width=a[f])}})}),s.forEach(d=>d.classList.remove("k-autofitting")),this.onResize(i[0],0,0,c,!0,this.columnsState,l[0])},this.updateColElements=c=>{const l=this.columns.filter(h=>!h.hidden&&!h.children.length);let r=1e-10;for(let h=0;h<c.length;h++){const n=c[h],o=l.findIndex(a=>a.id===n.id),t=parseFloat((n.width||0).toString()),i=Math.floor(t);r+=t-i;const s=i+Math.floor(r);r-=Math.floor(r);const e=l.find(a=>a.id===n.id);if(!e)return;if(this.colGroupMain&&this.colGroupMain.children[o]){const a=parseInt(this.colGroupMain.children[o].width,10);this.colGroupMain.children[o].width=s+"px",this.updateNextLockedCol(this.colGroupMain.parentElement,e,a-s)}if(this.colGroupHeader&&this.colGroupHeader.children[o]){const a=parseInt(this.colGroupHeader.children[o].width,10);this.colGroupHeader.children[o].width=s+"px",this.updateNextLockedCol(this.colGroupHeader.parentElement,e,a-s)}if(this.colGroupFooter&&this.colGroupFooter.children[o]){const a=parseInt(this.colGroupFooter.children[o].width,10);this.colGroupFooter.children[o].width=s+"px",this.updateNextLockedCol(this.colGroupFooter.parentElement,e,a-s)}}},this.onResize=u}fixateInitialWidths(u){var o;let c=0;const l=((o=this.colGroupMain)==null?void 0:o.children)||[];for(let t=0;t<l.length;t++)l[t].width?u-=l[t].clientWidth:c++;if(c===0)return;const r=Math.floor(u/c),h=p.getFlatColumnsState(this.columnsState),n=this.columns.filter(t=>!t.children.length);for(let t=0;t<l.length;t++){const i=l[t],s=i.width?i.clientWidth:r;i.width=s;const e=h.find(a=>a.id===n[t].id);e&&(e.width=s.toString()),this.colGroupHeader&&(this.colGroupHeader.children[t].width=s),this.colGroupFooter&&(this.colGroupFooter.children[t].width=s)}}setWidths(u,c){const l=p.getFlatColumnsState(this.columnsState),r=this.columns.findIndex(t=>t.id===u.id),h=[];let n=u.children.filter(t=>!t.hidden).length;for(let t=r+1;t<this.columns.length&&!(n<=0);t++){const i=this.columns[t];i.children.length?n+=i.children.filter(s=>!s.hidden).length:h.push(i),n--}h.length===0&&h.push(u);const o=[];h.forEach(t=>{const i=l.find(s=>s.id===t.id);if(i){let s=i.width?parseFloat(i.width.toString())*c:0;const e=t.minResizableWidth===void 0?10:t.minResizableWidth;s<e&&(s=e),i.width=s,o.push(i)}}),this.updateColElements(o)}updateNextLockedCol(u,c,l){const r=c.index,h=this.colGroupMain.parentElement.closest(".k-grid"),n=h==null?void 0:h.clientWidth,o=this.columns.filter(t=>t.locked).map(t=>parseInt(t.width+"",10)).reduce((t,i)=>t+i,0);!c.locked||n<=o+w||this.columns.forEach(t=>{if(t!=null&&t.locked&&l){const i=u==null?void 0:u.querySelectorAll('[aria-colindex="'+t.ariaColumnIndex+'"]');i==null||i.forEach(s=>{const e=s.style;this.isRtl?(t.index>r&&e&&e.right&&(e.right=parseInt(e.right,10)-l+"px"),t.index<r&&e&&e.left&&(e.left=parseInt(e.left,10)-l+"px")):(t.index>r&&e&&e.left&&(e.left=parseInt(e.left,10)-l+"px"),t.index<r&&e&&e.right&&(e.right=parseInt(e.right,10)-l+"px"))})}})}}exports.ColumnResize=x;