bways-grid 0.0.25 → 0.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,7 +14,7 @@ import { FormsModule } from '@angular/forms';
14
14
 
15
15
  // AUTO-GENERATED FILE. DO NOT EDIT.
16
16
  // Built from src/lib/workers/sorting.worker.ts
17
- const SORTING_WORKER_CODE = `"use strict";(()=>{var U=[],h=[];addEventListener("message",t=>{let{action:o,rows:a,sortModel:r,filterModel:i,conditionFilters:e,groupModel:n,aggregations:l,groupStateMap:d}=t.data;if(o==="INIT"){U=(a||[]).map(u=>({...u,type:"leaf",level:0})),postMessage({action:"INIT_DONE"});return}if(o==="FLATTEN_ONLY"){let s=v(h,d||{},t.data.groupIncludeFooter);postMessage({flatList:s});return}if(o==="EXECUTE"){let s=U,{pivotMode:u,pivotColumns:f}=t.data;if(i&&Object.keys(i).length>0){let p={};for(let g of Object.keys(i))p[g]=new Set(i[g]);s=s.filter(g=>{for(let b of Object.keys(p)){let O=p[b],S=g.data?g.data[b]:null;if(!O.has(S))return!1}return!0})}e&&Object.keys(e).length>0&&(s=\$(s,e));let c={...l||{}},y=[];if(u&&f&&f.length>0&&Object.keys(c).length>0){let{virtualAggrs:p,dynamicColumns:g}=D(s,f,c);c=p,y=g}let N=s;if(n&&n.length>0?N=M(s,n,c):u&&f&&f.length>0&&Object.keys(c).length>0?N=[{id:"pivot-root",type:"leaf",level:0,data:G(s,c)}]:s.forEach(p=>p.level=0),r&&r.length>0&&E(N,r),h=N,n&&n.length>0&&t.data.groupIncludeFooter&&Object.keys(c).length>0){let g={id:"grand-total-footer",type:"group-footer",level:0,groupField:"Grand Total",groupKey:"Grand Total",data:G(s,c)};h.push(g)}let m=v(h,d||{},t.data.groupIncludeFooter),F=T(h);postMessage({flatList:m,resultTree:F,pivotColumns:y})}});function T(t){return t.map(o=>{if(o.type==="leaf")return{id:o.id,type:"leaf",level:o.level,data:o.id==="pivot-root"?o.data:void 0};if(o.type==="group"){let a=o;return{...a,children:a.children?T(a.children):void 0}}return o})}function v(t,o,a=!1){let r=[],i=[];for(let e=t.length-1;e>=0;e--)i.push(t[e]);for(;i.length>0;){let e=i.pop();if(e.type==="group"){let n=e;if(r.push({id:n.id,type:"group",level:n.level,groupField:n.groupField,groupKey:n.groupKey,data:n.data,childCount:n.children?n.children.length:0}),!!o[n.id]&&(a&&i.push({id:\`\${n.id}-footer\`,type:"group-footer",level:n.level,groupField:n.groupField,groupKey:n.groupKey,data:{...n.data}}),n.children))for(let d=n.children.length-1;d>=0;d--)i.push(n.children[d])}else e.type==="group-footer"?r.push({id:e.id,type:"group-footer",level:e.level,groupField:e.groupField,groupKey:e.groupKey,data:e.data}):r.push({id:e.id,type:"leaf",level:e.level,data:e.id==="pivot-root"?e.data:void 0})}return r}function j(t){let o=[],a=[...t];for(;a.length>0;){let r=a.pop();if(C(r))o.push(r);else if(I(r)&&r.children)for(let i=r.children.length-1;i>=0;i--)a.push(r.children[i])}return o}function C(t){return t.type==="leaf"}function I(t){return t.type==="group"}function A(t){if(typeof t=="number")return t;if(typeof t!="string")return t==null?0:Number(t);let o=t.trim();if(!o)return 0;let a=o.startsWith("(")&&o.endsWith(")"),r=o.replace(/[\\u2212\\u2013\\u2014]/g,"-");r.includes("-")&&(a=!0),r=r.replace(/[^0-9.]/g,"");let i=r?Number(r):0;return isNaN(i)?0:a?-i:i}function M(t,o,a){return k(t,o,0,a,"root")}function k(t,o,a,r,i){let e=o[a],n=a===o.length-1,l=new Map;for(let s of t){let u=s.data?s.data[e]:null;l.has(u)||l.set(u,[]),l.get(u).push(s)}let d=[];for(let[s,u]of l.entries()){let f=\`\${i}-\${e}-\${s}\`,c={id:f,type:"group",level:a,groupField:e,groupKey:s,data:{[e]:s},children:[]},y=j(u),N=G(y,r);Object.assign(c.data,N),n?(u.forEach(m=>m.level=a+1),c.children=u):c.children=k(u,o,a+1,r,f),d.push(c)}return d}function G(t,o){let a={};for(let r of Object.keys(o)){let i=o[r],e=0;if(i==="count")e=t.length;else{let n=!0,l=0,d=0;for(let s of t){let u=s.data?s.data[r]:null,f=A(u);i==="sum"?e=Number(e)+f:i==="min"?n?e=f:e=Math.min(e,f):i==="max"?n?e=f:e=Math.max(e,f):i==="avg"&&(l=Number(l)+f,d++),n=!1}i==="avg"&&(e=d>0?l/d:0)}a[r]=e}return a}function E(t,o){t.sort((a,r)=>{for(let i of o){let{field:e,direction:n}=i,l=a.data?a.data[e]:null,d=r.data?r.data[e]:null;if(l===d)continue;let s=l>d?1:-1;return n==="asc"?s:-s}return 0});for(let a of t)a.type==="group"&&a.children&&E(a.children,o)}function \$(t,o){let a=Object.keys(o);return a.length===0?t:t.filter(r=>{for(let i of a){let e=o[i];if(!e||!e.condition1)continue;let n=r.data?r.data[i]:null,l=L(n,e.condition1);if(e.condition2&&e.condition2.type){let d=L(n,e.condition2);if(!(e.operator==="OR"?l||d:l&&d))return!1}else if(!l)return!1}return!0})}function L(t,o){let{type:a,value:r,valueTo:i}=o;if(a==="blank")return t==null||t==="";if(a==="notBlank")return t!=null&&t!=="";if(r==null||r==="")return!0;let e=String(t??"").toLowerCase(),n=String(r).toLowerCase();switch(a){case"contains":return e.includes(n);case"notContains":return!e.includes(n);case"equals":return!isNaN(Number(t))&&!isNaN(Number(r))?Number(t)===Number(r):e===n;case"notEqual":return!isNaN(Number(t))&&!isNaN(Number(r))?Number(t)!==Number(r):e!==n;case"startsWith":return e.startsWith(n);case"endsWith":return e.endsWith(n);case"greaterThan":return Number(t)>Number(r);case"greaterThanOrEqual":return Number(t)>=Number(r);case"lessThan":return Number(t)<Number(r);case"lessThanOrEqual":return Number(t)<=Number(r);case"inRange":if(i==null||i==="")return!0;let l=Number(t);return l>=Number(r)&&l<=Number(i);default:return!0}}function D(t,o,a){let r={};o.forEach(d=>r[d]=new Set),t.forEach(d=>{o.forEach(s=>{let u=d.data[s];u!=null&&r[s].add(u)})});let i={},e=[],n=o[0];return Array.from(r[n]).sort().forEach(d=>{Object.keys(a).forEach(s=>{let u=a[s],f=\`pivot_\${n}_\${d}_\${s}\`;i[f]=u,e.push({field:f,headerName:\`\${d} (\${s})\`,pivotValue:d,originalField:s,isPivotColumn:!0}),t.forEach(c=>{String(c.data[n])===String(d)?c.data[f]=c.data[s]:c.data[f]=null})})}),{virtualAggrs:i,dynamicColumns:e}}})();
17
+ const SORTING_WORKER_CODE = `"use strict";(()=>{var v=[],m=[];addEventListener("message",t=>{let{action:o,rows:a,sortModel:r,filterModel:i,conditionFilters:e,groupModel:n,aggregations:l,groupStateMap:d}=t.data;if(o==="INIT"){v=(a||[]).map(f=>({...f,type:"leaf",level:0})),postMessage({action:"INIT_DONE"});return}if(o==="FLATTEN_ONLY"){let s=L(m,d||{},t.data.groupIncludeFooter);postMessage({flatList:s});return}if(o==="EXECUTE"){let s=v,{pivotMode:f,pivotColumns:u}=t.data;if(i&&Object.keys(i).length>0){let g={};for(let p of Object.keys(i))g[p]=new Set(i[p]);s=s.filter(p=>{for(let y of Object.keys(g)){let h=g[y],S=p.data?p.data[y]:null;if(!h.has(S))return!1}return!0})}e&&Object.keys(e).length>0&&(s=\$(s,e));let c={...l||{}},G=[];if(f&&u&&u.length>0){if(Object.keys(c).length===0){let g=new Set;s.slice(0,20).forEach(p=>{p.data&&Object.keys(p.data).forEach(y=>{let h=p.data[y];(typeof h=="number"||typeof h=="string"&&h.trim()!==""&&!isNaN(Number(h)))&&g.add(y)})}),u.forEach(p=>g.delete(p)),n&&n.forEach(p=>g.delete(p)),g.forEach(p=>{c[p]="sum"})}if(Object.keys(c).length>0){let{virtualAggrs:g,dynamicColumns:p}=D(s,u,c);c=g,G=p}}let N=s;if(n&&n.length>0?N=M(s,n,c):f&&u&&u.length>0&&Object.keys(c).length>0?N=[{id:"pivot-root",type:"leaf",level:0,data:U(s,c)}]:s.forEach(g=>g.level=0),r&&r.length>0&&F(N,r),m=N,n&&n.length>0&&t.data.groupIncludeFooter&&Object.keys(c).length>0){let p={id:"grand-total-footer",type:"group-footer",level:0,groupField:"Grand Total",groupKey:"Grand Total",data:U(s,c)};m.push(p)}let b=L(m,d||{},t.data.groupIncludeFooter),O=E(m);postMessage({flatList:b,resultTree:O,pivotColumns:G})}});function E(t){return t.map(o=>{if(o.type==="leaf")return{id:o.id,type:"leaf",level:o.level,data:o.id==="pivot-root"?o.data:void 0};if(o.type==="group"){let a=o;return{...a,children:a.children?E(a.children):void 0}}return o})}function L(t,o,a=!1){let r=[],i=[];for(let e=t.length-1;e>=0;e--)i.push(t[e]);for(;i.length>0;){let e=i.pop();if(e.type==="group"){let n=e;if(r.push({id:n.id,type:"group",level:n.level,groupField:n.groupField,groupKey:n.groupKey,data:n.data,childCount:n.children?n.children.length:0}),!!o[n.id]&&(a&&i.push({id:\`\${n.id}-footer\`,type:"group-footer",level:n.level,groupField:n.groupField,groupKey:n.groupKey,data:{...n.data}}),n.children))for(let d=n.children.length-1;d>=0;d--)i.push(n.children[d])}else e.type==="group-footer"?r.push({id:e.id,type:"group-footer",level:e.level,groupField:e.groupField,groupKey:e.groupKey,data:e.data}):r.push({id:e.id,type:"leaf",level:e.level,data:e.id==="pivot-root"?e.data:void 0})}return r}function j(t){let o=[],a=[...t];for(;a.length>0;){let r=a.pop();if(C(r))o.push(r);else if(I(r)&&r.children)for(let i=r.children.length-1;i>=0;i--)a.push(r.children[i])}return o}function C(t){return t.type==="leaf"}function I(t){return t.type==="group"}function A(t){if(typeof t=="number")return t;if(typeof t!="string")return t==null?0:Number(t);let o=t.trim();if(!o)return 0;let a=o.startsWith("(")&&o.endsWith(")"),r=o.replace(/[\\u2212\\u2013\\u2014]/g,"-");r.includes("-")&&(a=!0),r=r.replace(/[^0-9.]/g,"");let i=r?Number(r):0;return isNaN(i)?0:a?-i:i}function M(t,o,a){return k(t,o,0,a,"root")}function k(t,o,a,r,i){let e=o[a],n=a===o.length-1,l=new Map;for(let s of t){let f=s.data?s.data[e]:null;l.has(f)||l.set(f,[]),l.get(f).push(s)}let d=[];for(let[s,f]of l.entries()){let u=\`\${i}-\${e}-\${s}\`,c={id:u,type:"group",level:a,groupField:e,groupKey:s,data:{[e]:s},children:[]},G=j(f),N=U(G,r);Object.assign(c.data,N),n?(f.forEach(b=>b.level=a+1),c.children=f):c.children=k(f,o,a+1,r,u),d.push(c)}return d}function U(t,o){let a={};for(let r of Object.keys(o)){let i=o[r],e=0;if(i==="count")e=t.length;else{let n=!0,l=0,d=0;for(let s of t){let f=s.data?s.data[r]:null,u=A(f);i==="sum"?e=Number(e)+u:i==="min"?n?e=u:e=Math.min(e,u):i==="max"?n?e=u:e=Math.max(e,u):i==="avg"&&(l=Number(l)+u,d++),n=!1}i==="avg"&&(e=d>0?l/d:0)}a[r]=e}return a}function F(t,o){t.sort((a,r)=>{for(let i of o){let{field:e,direction:n}=i,l=a.data?a.data[e]:null,d=r.data?r.data[e]:null;if(l===d)continue;let s=l>d?1:-1;return n==="asc"?s:-s}return 0});for(let a of t)a.type==="group"&&a.children&&F(a.children,o)}function \$(t,o){let a=Object.keys(o);return a.length===0?t:t.filter(r=>{for(let i of a){let e=o[i];if(!e||!e.condition1)continue;let n=r.data?r.data[i]:null,l=T(n,e.condition1);if(e.condition2&&e.condition2.type){let d=T(n,e.condition2);if(!(e.operator==="OR"?l||d:l&&d))return!1}else if(!l)return!1}return!0})}function T(t,o){let{type:a,value:r,valueTo:i}=o;if(a==="blank")return t==null||t==="";if(a==="notBlank")return t!=null&&t!=="";if(r==null||r==="")return!0;let e=String(t??"").toLowerCase(),n=String(r).toLowerCase();switch(a){case"contains":return e.includes(n);case"notContains":return!e.includes(n);case"equals":return!isNaN(Number(t))&&!isNaN(Number(r))?Number(t)===Number(r):e===n;case"notEqual":return!isNaN(Number(t))&&!isNaN(Number(r))?Number(t)!==Number(r):e!==n;case"startsWith":return e.startsWith(n);case"endsWith":return e.endsWith(n);case"greaterThan":return Number(t)>Number(r);case"greaterThanOrEqual":return Number(t)>=Number(r);case"lessThan":return Number(t)<Number(r);case"lessThanOrEqual":return Number(t)<=Number(r);case"inRange":if(i==null||i==="")return!0;let l=Number(t);return l>=Number(r)&&l<=Number(i);default:return!0}}function D(t,o,a){let r={};o.forEach(d=>r[d]=new Set),t.forEach(d=>{o.forEach(s=>{let f=d.data[s];f!=null&&r[s].add(f)})});let i={},e=[],n=o[0];return Array.from(r[n]).sort().forEach(d=>{Object.keys(a).forEach(s=>{let f=a[s],u=\`pivot_\${n}_\${d}_\${s}\`;i[u]=f,e.push({field:u,headerName:\`\${d} (\${s})\`,pivotValue:d,originalField:s,isPivotColumn:!0}),t.forEach(c=>{String(c.data[n])===String(d)?c.data[u]=c.data[s]:c.data[u]=null})})}),{virtualAggrs:i,dynamicColumns:e}}})();
18
18
  `;
19
19
 
20
20
  class InfiniteScrollDataSource extends DataSource {
@@ -3005,14 +3005,55 @@ class UltraGridComponent {
3005
3005
  _workerInitialized = false;
3006
3006
  headerElement;
3007
3007
  viewport;
3008
- columns = [];
3009
- rowData = [];
3010
- serverDataSource;
3011
- config = {
3008
+ _columns = [];
3009
+ _config = {
3012
3010
  rowHeight: 40,
3013
3011
  theme: 'ag-theme-alpine',
3014
3012
  sideBarDefaultTab: null
3015
3013
  };
3014
+ set columns(val) {
3015
+ this._columns = this.processColumnsWithDefaults(val);
3016
+ this.hasCheckboxSelection = this._columns.some(c => c.checkboxSelection);
3017
+ this.hasHeaderCheckboxSelection = this._columns.some(c => c.headerCheckboxSelection);
3018
+ this.updateVisibleColumns();
3019
+ }
3020
+ get columns() {
3021
+ return this._columns;
3022
+ }
3023
+ rowData = [];
3024
+ serverDataSource;
3025
+ set config(val) {
3026
+ this._config = val || {};
3027
+ if (this._columns && this._columns.length > 0) {
3028
+ this._columns = this.processColumnsWithDefaults(this._columns);
3029
+ this.updateVisibleColumns();
3030
+ }
3031
+ }
3032
+ get config() {
3033
+ return this._config;
3034
+ }
3035
+ processColumnsWithDefaults(cols) {
3036
+ if (!cols)
3037
+ return [];
3038
+ return cols.map(c => {
3039
+ const merged = { ...c };
3040
+ // 1. Merge defaultColDef if present
3041
+ const defaultDef = this._config && this._config.defaultColDef;
3042
+ if (defaultDef) {
3043
+ Object.keys(defaultDef).forEach(key => {
3044
+ const k = key;
3045
+ if (merged[k] === undefined) {
3046
+ merged[k] = defaultDef[k];
3047
+ }
3048
+ });
3049
+ }
3050
+ // 2. Merge defaultNumberFormat if present
3051
+ if (merged.numberFormat === undefined && this._config && this._config.defaultNumberFormat) {
3052
+ merged.numberFormat = this._config.defaultNumberFormat;
3053
+ }
3054
+ return merged;
3055
+ });
3056
+ }
3016
3057
  pagination = false;
3017
3058
  pageSize = 100;
3018
3059
  rowClicked = new EventEmitter();
@@ -3364,7 +3405,7 @@ class UltraGridComponent {
3364
3405
  }
3365
3406
  }
3366
3407
  }
3367
- if (hasFilter || hasSort || this.groupModel.length > 0 || this.conditionFilters.size > 0) {
3408
+ if (hasFilter || hasSort || this.groupModel.length > 0 || this.conditionFilters.size > 0 || (this.config.pivotMode && this.pivotColumns.length > 0)) {
3368
3409
  if (this.sortingWorker) {
3369
3410
  this.sortingWorker.postMessage({
3370
3411
  action: 'EXECUTE',