@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.48 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 F{constructor(u){this.columns=[],this.columnsState=[],this.resizable=!1,this.isRtl=!1,this.setIsRtl=c=>{this.isRtl=c},this.initWidths=()=>{var r;const c=((r=this.colGroupMain)==null?void 0:r.children)||[],l=p.getFlatColumnsState(this.columnsState),h=this.columns.filter(s=>{var o;return!((o=s.children)!=null&&o.length)});for(let s=0;s<c.length;s++){const o=c[s];let t="";const i=l.find(n=>n.id===h[s].id);i&&(t=i.width||""),o.width=t,this.colGroupHeader&&(this.colGroupHeader.children[s].width=t),this.colGroupFooter&&(this.colGroupFooter.children[s].width=t)}},this.dragHandler=(c,l,h,r)=>{const s=c.originalEvent;r||(s.preventDefault(),s.stopPropagation(),s.stopImmediatePropagation());const o=h.closest("th");if(!o||!o)return;const t=o.clientWidth;let i=t;if(this.isRtl?i+=h.getBoundingClientRect().right-h.offsetWidth/2-c.clientX:i+=c.clientX-h.getBoundingClientRect().left-h.offsetWidth/2,!r&&Math.abs(i-t)<1)return;this.fixateInitialWidths(o.parentElement.clientWidth),this.setWidths(l,Math.floor(i)/t);const n=this.columns.filter(e=>!e.children.length).findIndex(e=>e.id===l.id);this.onResize(n,t,i,s,r,this.columnsState,l.id)},this.dblClickHandler=(c,l)=>{const h=this.columns.filter(d=>l.indexOf(d.id)>-1),r=p.getFlatColumnsState(this.columnsState);if(!this.colGroupMain||!h.length)return;const s={},o=h;for(;o.length>0;){const d=o.pop();if(!d)break;d.children.length?o.push(...d.children):s[d.id]=d}const t=this.columns.filter(d=>!d.children.length),i=[];t.forEach((d,f)=>{s[d.id]&&i.push(f)});const n=[this.colGroupMain.parentElement],e=[this.colGroupMain];this.colGroupHeader&&(n.push(this.colGroupHeader.parentElement),e.push(this.colGroupHeader)),this.colGroupFooter&&(n.push(this.colGroupFooter.parentElement),e.push(this.colGroupFooter)),n.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=r.find(m=>m.id===t[f].id);g&&(g.width=a[f])}})}),n.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(r=>!r.hidden&&!r.children.length);let h=1e-10;for(let r=0;r<c.length;r++){const s=c[r],o=l.findIndex(a=>a.id===s.id),t=parseFloat((s.width||0).toString()),i=Math.floor(t);h+=t-i;const n=i+Math.floor(h);h-=Math.floor(h);const e=l.find(a=>a.id===s.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=n+"px",this.updateNextLockedCol(this.colGroupMain.parentElement,e,a-n)}if(this.colGroupHeader&&this.colGroupHeader.children[o]){const a=parseInt(this.colGroupHeader.children[o].width,10);this.colGroupHeader.children[o].width=n+"px",this.updateNextLockedCol(this.colGroupHeader.parentElement,e,a-n)}if(this.colGroupFooter&&this.colGroupFooter.children[o]){const a=parseInt(this.colGroupFooter.children[o].width,10);this.colGroupFooter.children[o].width=n+"px",this.updateNextLockedCol(this.colGroupFooter.parentElement,e,a-n)}}},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-=parseFloat(l[t].width):c++;if(c===0)return;const h=Math.floor(u/c),r=p.getFlatColumnsState(this.columnsState),s=this.columns.filter(t=>!t.children.length);for(let t=0;t<l.length;t++){const i=l[t];if(!i.width){i.width=h;const n=r.find(e=>e.id===s[t].id);n&&(n.width=h.toString()),this.colGroupHeader&&(this.colGroupHeader.children[t].width=h),this.colGroupFooter&&(this.colGroupFooter.children[t].width=h)}}}setWidths(u,c){const l=p.getFlatColumnsState(this.columnsState),h=this.columns.findIndex(t=>t.id===u.id),r=[];let s=u.children.filter(t=>!t.hidden).length;for(let t=h+1;t<this.columns.length&&!(s<=0);t++){const i=this.columns[t];i.children.length?s+=i.children.filter(n=>!n.hidden).length:r.push(i),s--}r.length===0&&r.push(u);const o=[];r.forEach(t=>{const i=l.find(n=>n.id===t.id);if(i){let n=i.width?parseFloat(i.width.toString())*c:0;const e=t.minResizableWidth===void 0?10:t.minResizableWidth;n<e&&(n=e),i.width=n,o.push(i)}}),this.updateColElements(o)}updateNextLockedCol(u,c,l){const h=c.index,r=this.colGroupMain.parentElement.closest(".k-grid"),s=r==null?void 0:r.clientWidth,o=this.columns.filter(t=>t.locked).map(t=>parseInt(t.width+"",10)).reduce((t,i)=>t+i,0);!c.locked||s<=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(n=>{const e=n.style;this.isRtl?(t.index>h&&e&&e.right&&(e.right=parseInt(e.right,10)-l+"px"),t.index<h&&e&&e.left&&(e.left=parseInt(e.left,10)-l+"px")):(t.index>h&&e&&e.left&&(e.left=parseInt(e.left,10)-l+"px"),t.index<h&&e&&e.right&&(e.right=parseInt(e.right,10)-l+"px"))})}})}}exports.ColumnResize=F;