bways-grid 0.0.17 → 0.0.18
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.
- package/fesm2022/bways-grid.mjs +112 -27
- package/fesm2022/bways-grid.mjs.map +1 -1
- package/lib/components/column-tool-panel/column-tool-panel.component.d.ts +3 -0
- package/lib/components/filter-tool-panel/filter-tool-panel.component.d.ts +4 -0
- package/lib/components/ultra-grid/ultra-grid.component.d.ts +1 -0
- package/lib/workers/generated/sorting.worker.code.d.ts +1 -1
- package/package.json +1 -1
- package/src/lib/workers/generated/sorting.worker.code.ts +1 -1
- package/src/lib/workers/sorting.worker.ts +13 -3
|
@@ -27,6 +27,9 @@ export declare class ColumnToolPanelComponent implements OnChanges {
|
|
|
27
27
|
getColumnHeader(field: string): string;
|
|
28
28
|
applySearch(): void;
|
|
29
29
|
toggleVisibility(col: UltraGridColumn): void;
|
|
30
|
+
isAllColumnsSelected(): boolean;
|
|
31
|
+
isSomeColumnsSelected(): boolean;
|
|
32
|
+
toggleAllColumns(): void;
|
|
30
33
|
onDrop(event: CdkDragDrop<UltraGridColumn[]>): void;
|
|
31
34
|
onGroupDrop(event: CdkDragDrop<UltraGridColumn[]>): void;
|
|
32
35
|
removeGroup(col: UltraGridColumn): void;
|
|
@@ -42,6 +42,8 @@ export declare class FilterToolPanelComponent implements OnChanges {
|
|
|
42
42
|
importReportRequested: EventEmitter<any>;
|
|
43
43
|
sections: FilterSection[];
|
|
44
44
|
private _loadedFields;
|
|
45
|
+
showSaveModal: boolean;
|
|
46
|
+
reportNameInput: string;
|
|
45
47
|
constructor(cdr: ChangeDetectorRef);
|
|
46
48
|
get hasAnyActiveFilter(): boolean;
|
|
47
49
|
ngOnChanges(changes: SimpleChanges): void;
|
|
@@ -63,6 +65,8 @@ export declare class FilterToolPanelComponent implements OnChanges {
|
|
|
63
65
|
onClearAll(): void;
|
|
64
66
|
trackByField(index: number, section: FilterSection): string;
|
|
65
67
|
onSaveReportPrompt(): void;
|
|
68
|
+
confirmSaveReport(): void;
|
|
69
|
+
cancelSaveReport(): void;
|
|
66
70
|
onImportReport(): void;
|
|
67
71
|
static ɵfac: i0.ɵɵFactoryDeclaration<FilterToolPanelComponent, never>;
|
|
68
72
|
static ɵcmp: i0.ɵɵComponentDeclaration<FilterToolPanelComponent, "ug-filter-tool-panel", never, { "columns": { "alias": "columns"; "required": false; }; "rowData": { "alias": "rowData"; "required": false; }; "activeFilters": { "alias": "activeFilters"; "required": false; }; "conditionFilters": { "alias": "conditionFilters"; "required": false; }; }, { "filterApplied": "filterApplied"; "conditionFilterChanged": "conditionFilterChanged"; "clearAllFilters": "clearAllFilters"; "saveReportRequested": "saveReportRequested"; "importReportRequested": "importReportRequested"; }, never, never, true, never>;
|
|
@@ -45,6 +45,7 @@ export declare class UltraGridComponent implements OnInit, OnDestroy, OnChanges
|
|
|
45
45
|
private _dynamicPivotColumns;
|
|
46
46
|
private _userColumns;
|
|
47
47
|
private _isRebuildingColumns;
|
|
48
|
+
private _autoColumnWidth;
|
|
48
49
|
_internalDataSource?: InfiniteScrollDataSource<UltraGridRow>;
|
|
49
50
|
_localTreeData: UltraGridNode[];
|
|
50
51
|
_unpaginatedLocalData: UltraGridRow[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const SORTING_WORKER_CODE = "\"use strict\";(()=>{var
|
|
1
|
+
export declare 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}}})();\n";
|
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// AUTO-GENERATED FILE. DO NOT EDIT.
|
|
2
2
|
// Built from src/lib/workers/sorting.worker.ts
|
|
3
|
-
export const SORTING_WORKER_CODE = `"use strict";(()=>{var
|
|
3
|
+
export 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}}})();
|
|
4
4
|
`;
|
|
@@ -66,6 +66,15 @@ addEventListener('message', (event: MessageEvent) => {
|
|
|
66
66
|
|
|
67
67
|
if (groupModel && groupModel.length > 0) {
|
|
68
68
|
resultTree = buildTree(processed, groupModel, resultAggregations);
|
|
69
|
+
} else if (pivotMode && pivotColumns && pivotColumns.length > 0 && Object.keys(resultAggregations).length > 0) {
|
|
70
|
+
// Aggregate all rows into a single row if pivoting without grouping
|
|
71
|
+
const grandTotalData = computeAggregations(processed, resultAggregations);
|
|
72
|
+
resultTree = [{
|
|
73
|
+
id: 'pivot-root',
|
|
74
|
+
type: 'leaf',
|
|
75
|
+
level: 0,
|
|
76
|
+
data: grandTotalData
|
|
77
|
+
} as UltraGridLeafNode];
|
|
69
78
|
} else {
|
|
70
79
|
processed.forEach(r => r.level = 0);
|
|
71
80
|
}
|
|
@@ -110,8 +119,8 @@ function stripTreeData(nodes: UltraGridNode[]): UltraGridNode[] {
|
|
|
110
119
|
return {
|
|
111
120
|
id: node.id,
|
|
112
121
|
type: 'leaf',
|
|
113
|
-
level: node.level
|
|
114
|
-
|
|
122
|
+
level: node.level,
|
|
123
|
+
data: node.id === 'pivot-root' ? (node as UltraGridLeafNode).data : undefined
|
|
115
124
|
} as any;
|
|
116
125
|
} else if (node.type === 'group') {
|
|
117
126
|
const groupNode = node as UltraGridGroupNode;
|
|
@@ -186,7 +195,8 @@ function flattenTree(nodes: UltraGridNode[], stateMap: { [key: string]: boolean
|
|
|
186
195
|
result.push({
|
|
187
196
|
id: node.id,
|
|
188
197
|
type: 'leaf',
|
|
189
|
-
level: node.level
|
|
198
|
+
level: node.level,
|
|
199
|
+
data: node.id === 'pivot-root' ? (node as UltraGridLeafNode).data : undefined
|
|
190
200
|
});
|
|
191
201
|
}
|
|
192
202
|
}
|