@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.83 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 u=require("../utils/index.js"),m=1,w=20;class W{constructor(a){this.columns=[],this.columnsState=[],this.resizable=!1,this.isRtl=!1,this.setIsRtl=n=>{this.isRtl=n},this.initWidths=()=>{var c;const n=((c=this.colGroupMain)==null?void 0:c.children)||[],l=u.getFlatColumnsState(this.columnsState),r=this.columns.filter(e=>{var o;return!((o=e.children)!=null&&o.length)});for(let e=0;e<n.length;e++){const o=n[e],t=r[e];let i="";const h=l.find(s=>s.id===r[e].id);h&&(i=this.applyWidthConstraints(h,t)),o.width=i,this.colGroupHeader&&(this.colGroupHeader.children[e].width=i),this.colGroupFooter&&(this.colGroupFooter.children[e].width=i)}},this.dragHandler=(n,l,r,c)=>{const e=n.originalEvent;c||(e.preventDefault(),e.stopPropagation(),e.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-n.clientX:i+=n.clientX-r.getBoundingClientRect().left-r.offsetWidth/2,!c&&Math.abs(i-t)<1)return;this.fixateInitialWidths(o.parentElement.clientWidth),this.setWidths(l,Math.floor(i)/t);const h=this.columns.filter(s=>!s.children.length).findIndex(s=>s.id===l.id);this.onResize(h,t,i,e,c,this.columnsState,l.id)},this.dblClickHandler=(n,l)=>{const r=this.columns.filter(d=>l.indexOf(d.id)>-1),c=u.getFlatColumnsState(this.columnsState);if(!this.colGroupMain||!r.length)return;const e={},o=r;for(;o.length>0;){const d=o.pop();if(!d)break;d.children.length?o.push(...d.children):e[d.id]=d}const t=this.columns.filter(d=>!d.children.length),i=[];t.forEach((d,p)=>{e[d.id]&&i.push(p)});const h=[this.colGroupMain.parentElement],s=[this.colGroupMain];this.colGroupHeader&&(h.push(this.colGroupHeader.parentElement),s.push(this.colGroupHeader)),this.colGroupFooter&&(h.push(this.colGroupFooter.parentElement),s.push(this.colGroupFooter)),h.forEach(d=>d.classList.add("k-autofitting"));const f=[];s.forEach(d=>{i.forEach(p=>{d.children[p]&&(d.children[p].width="",f[p]=Math.max(f[p]||0,d.children[p].offsetWidth+m))})}),s.forEach(d=>{i.forEach(p=>{if(d.children[p]){d.children[p].width=f[p]+"px";const g=c.find(G=>G.id===t[p].id);g&&(g.width=f[p])}})}),h.forEach(d=>d.classList.remove("k-autofitting")),this.onResize(i[0],0,0,n,!0,this.columnsState,l[0])},this.updateColElements=n=>{const l=this.columns.filter(c=>!c.hidden&&!c.children.length);let r=1e-10;for(let c=0;c<n.length;c++){const e=n[c],o=l.findIndex(f=>f.id===e.id),t=parseFloat((e.width||0).toString()),i=Math.floor(t);r+=t-i;const h=i+Math.floor(r);r-=Math.floor(r);const s=l.find(f=>f.id===e.id);if(!s)return;if(this.colGroupMain&&this.colGroupMain.children[o]){const f=parseInt(this.colGroupMain.children[o].width,10);this.colGroupMain.children[o].width=h+"px",this.updateNextLockedCol(this.colGroupMain.parentElement,s,f-h)}if(this.colGroupHeader&&this.colGroupHeader.children[o]){const f=parseInt(this.colGroupHeader.children[o].width,10);this.colGroupHeader.children[o].width=h+"px",this.updateNextLockedCol(this.colGroupHeader.parentElement,s,f-h)}if(this.colGroupFooter&&this.colGroupFooter.children[o]){const f=parseInt(this.colGroupFooter.children[o].width,10);this.colGroupFooter.children[o].width=h+"px",this.updateNextLockedCol(this.colGroupFooter.parentElement,s,f-h)}}},this.onResize=a}applyWidthConstraints(a,n,l=1){if(!a.width)return a.width||"";const r=a.width.toString();if(r.includes("%")){const f=parseFloat(r)*l,d=Math.max(0,Math.min(100,f));return a.width=d+"%",a.width}let e=parseFloat(r)*l;const o=n.minResizableWidth===void 0?10:n.minResizableWidth,t=n==null?void 0:n.minWidth,i=t!==void 0?Math.max(o,t):o,h=n==null?void 0:n.maxWidth;return e<i&&(e=i),h!==void 0&&e>h&&(e=h),a.width=e,e}fixateInitialWidths(a){var o;let n=0;const l=((o=this.colGroupMain)==null?void 0:o.children)||[];for(let t=0;t<l.length;t++)l[t].width?a-=l[t].clientWidth:n++;if(n===0)return;const r=Math.floor(a/n),c=u.getFlatColumnsState(this.columnsState),e=this.columns.filter(t=>!t.children.length);for(let t=0;t<l.length;t++){const i=l[t],h=i.width?i.clientWidth:r;i.width=h;const s=c.find(f=>f.id===e[t].id);s&&(s.width=h.toString()),this.colGroupHeader&&(this.colGroupHeader.children[t].width=h),this.colGroupFooter&&(this.colGroupFooter.children[t].width=h)}}setWidths(a,n){const l=u.getFlatColumnsState(this.columnsState),r=this.columns.findIndex(t=>t.id===a.id),c=[];let e=a.children.filter(t=>!t.hidden).length;for(let t=r+1;t<this.columns.length&&!(e<=0);t++){const i=this.columns[t];i.children.length?e+=i.children.filter(h=>!h.hidden).length:c.push(i),e--}c.length===0&&c.push(a);const o=[];c.forEach(t=>{const i=l.find(h=>h.id===t.id);i&&(this.applyWidthConstraints(i,t,n),o.push(i))}),this.updateColElements(o)}updateNextLockedCol(a,n,l){const r=n.index,c=this.colGroupMain.parentElement.closest(".k-grid"),e=c==null?void 0:c.clientWidth,o=this.columns.filter(t=>t.locked).map(t=>parseInt(t.width+"",10)).reduce((t,i)=>t+i,0);!n.locked||e<=o+w||this.columns.forEach(t=>{if(t!=null&&t.locked&&l){const i=a==null?void 0:a.querySelectorAll('[aria-colindex="'+t.ariaColumnIndex+'"]');i==null||i.forEach(h=>{const s=h.style;this.isRtl?(t.index>r&&s&&s.right&&(s.right=parseInt(s.right,10)-l+"px"),t.index<r&&s&&s.left&&(s.left=parseInt(s.left,10)-l+"px")):(t.index>r&&s&&s.left&&(s.left=parseInt(s.left,10)-l+"px"),t.index<r&&s&&s.right&&(s.right=parseInt(s.right,10)-l+"px"))})}})}}exports.ColumnResize=W;