@elisra-devops/docgen-skins 0.20.0 → 0.21.0

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.
@@ -4,6 +4,7 @@ export default class JSONTable {
4
4
  tableStyles: StyleOptions;
5
5
  constructor(data: WIQueryResults, headerRowStyle: StyleOptions, tableStyles: StyleOptions, headingLvl: number, retrieveOriginal?: boolean, insertPageBreak?: boolean, isFlattened?: boolean);
6
6
  generateJsonRows(data: any, headerRowStyle: StyleOptions, tableStyles: StyleOptions, retrieveOriginal: boolean, isFlattened: boolean): TableRow[];
7
+ private applyVerticalMerges;
7
8
  headersRowAdapter(data: WIData): WIData;
8
9
  getJSONTable(): Table;
9
10
  }
@@ -47,8 +47,50 @@ class JSONTable {
47
47
  let row = new JSONTableRow_1.default(rowData, tableStyles, retrieveOriginal, undefined, isFlattened);
48
48
  rows.push(row.getRow());
49
49
  });
50
+ // Apply vertical merging for grouped source cells (first row shows value; subsequent are empty)
51
+ this.applyVerticalMerges(rows);
50
52
  return rows;
51
53
  } //generateJsonRows
54
+ applyVerticalMerges(rows) {
55
+ var _a, _b, _c, _d, _e, _f, _g;
56
+ if (!rows || rows.length <= 2)
57
+ return; // header + at least 1 data row needed
58
+ const getCellText = (cell) => {
59
+ var _a, _b;
60
+ try {
61
+ const runs = ((_b = (_a = cell === null || cell === void 0 ? void 0 : cell.Paragraphs) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.Runs) || [];
62
+ return runs.map((r) => { var _a; return ((_a = r === null || r === void 0 ? void 0 : r.text) !== null && _a !== void 0 ? _a : ''); }).join('').trim();
63
+ }
64
+ catch (_c) {
65
+ return '';
66
+ }
67
+ };
68
+ const dataRowStart = 1; // skip header
69
+ const maxCols = Math.max(...rows.map((r) => { var _a; return (((_a = r === null || r === void 0 ? void 0 : r.Cells) === null || _a === void 0 ? void 0 : _a.length) || 0); }));
70
+ for (let col = 0; col < maxCols; col++) {
71
+ for (let i = dataRowStart + 1; i < rows.length; i++) {
72
+ const prev = (_b = (_a = rows[i - 1]) === null || _a === void 0 ? void 0 : _a.Cells) === null || _b === void 0 ? void 0 : _b[col];
73
+ const curr = (_d = (_c = rows[i]) === null || _c === void 0 ? void 0 : _c.Cells) === null || _d === void 0 ? void 0 : _d[col];
74
+ if (!prev || !curr)
75
+ continue;
76
+ const sameFill = (((_e = prev.shading) === null || _e === void 0 ? void 0 : _e.fill) || '') === (((_f = curr.shading) === null || _f === void 0 ? void 0 : _f.fill) || '');
77
+ const prevTextEmpty = getCellText(prev) === '';
78
+ const currTextEmpty = getCellText(curr) === '';
79
+ if (!sameFill) {
80
+ continue;
81
+ }
82
+ // Start merge when prev has text and current is empty
83
+ if (!prevTextEmpty && currTextEmpty) {
84
+ prev.vMerge = (_g = prev.vMerge) !== null && _g !== void 0 ? _g : 'restart';
85
+ curr.vMerge = 'continue';
86
+ }
87
+ else if ((prev.vMerge === 'restart' || prev.vMerge === 'continue') && currTextEmpty) {
88
+ // Continue an existing merge block
89
+ curr.vMerge = 'continue';
90
+ }
91
+ }
92
+ }
93
+ }
52
94
  headersRowAdapter(data) {
53
95
  let headerValuesWi;
54
96
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"JSONTable.js","sourceRoot":"","sources":["../../../../src/models/json/table/JSONTable.ts"],"names":[],"mappings":";;;;;AAAA,sEAA8C;AAU9C,kEAA0C;AAC1C,MAAqB,SAAS;IAI5B,YACE,IAAoB,EACpB,cAA4B,EAC5B,WAAyB,EACzB,UAAkB,EAClB,gBAAgB,GAAG,KAAK,EACxB,kBAA2B,KAAK,EAChC,WAAW,GAAG,KAAK;QAEnB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG;YACnB,IAAI,EAAE,OAAO;YACb,YAAY,EAAE,UAAU;YACxB,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE,gBAAgB,EAAE,WAAW,CAAC;YAClG,eAAe,EAAE,eAAe;SACjC,CAAC;IACJ,CAAC;IAED,gBAAgB,CACd,IAAS,EACT,cAA4B,EAC5B,WAAyB,EACzB,gBAAyB,EACzB,WAAoB;QAEpB,IAAI,IAAI,GAAe,EAAE,CAAC;QAC1B,IAAI,cAAc,GAAW,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7D,MAAM,qBAAqB,GAAG;YAC5B,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,KAAK;YAClB,IAAI,EAAE,EAAE;YACR,GAAG,EAAE,IAAI;YACT,IAAI,EAAE,OAAO;YACb,eAAe,EAAE,KAAK;YACtB,WAAW,EAAE,KAAK;SACnB,CAAC;QAEF,2DAA2D;QAC3D,MAAM,mBAAmB,GAAG,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,qBAAqB,CAAC;QAEpE,iCAAiC;QACjC,MAAM,aAAa,GACjB,cAAc,KAAK,SAAS;YAC1B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC;gBACE,KAAK,EAAE,MAAM;gBACb,IAAI,EAAE,QAAQ;gBACd,cAAc,EAAE,IAAI;aACrB,CAAC;QAER,MAAM,UAAU,GAAG,IAAI,sBAAY,CAAC,cAAc,EAAE,mBAAmB,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QACnG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;SACvC;QACD,IAAI,CAAC,OAAO,CAAC,CAAC,OAAe,EAAE,EAAE;YAC/B,IAAI,GAAG,GAAG,IAAI,sBAAY,CAAC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;YAC3F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,kBAAkB;IAEpB,iBAAiB,CAAC,IAAY;QAC5B,IAAI,cAAc,CAAC;QACnB,IAAI;YACF,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAiB,EAAE,EAAE;gBACrD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACzE,CAAC,CAAC,CAAC;SACJ;QAAC,OAAO,KAAK,EAAE;YACd,gBAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;SACrC;QACD,OAAO;YACL,GAAG,EAAE,EAAE;YACP,MAAM,EAAE,cAAc;YACtB,MAAM,EAAE,YAAY;YACpB,KAAK,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,KAAI,CAAC;SACxB,CAAC;IACJ,CAAC,CAAC,mBAAmB;IAErB,YAAY;QACV,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC,CAAC,cAAc;CACjB,CAAC,OAAO;AAzFT,4BAyFC"}
1
+ {"version":3,"file":"JSONTable.js","sourceRoot":"","sources":["../../../../src/models/json/table/JSONTable.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,7 @@ export interface TableCell {
36
36
  shading?: Shading;
37
37
  width?: string;
38
38
  Html?: JsonHtml;
39
+ vMerge?: 'restart' | 'continue';
39
40
  }
40
41
  export interface Shading {
41
42
  color: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elisra-devops/docgen-skins",
3
- "version": "0.20.0",
3
+ "version": "0.21.0",
4
4
  "description": "Can be outputed in various types:",
5
5
  "main": "./bin/index.js",
6
6
  "types": "./bin/index.d.ts",
@@ -75,9 +75,53 @@ export default class JSONTable {
75
75
  rows.push(row.getRow());
76
76
  });
77
77
 
78
+ // Apply vertical merging for grouped source cells (first row shows value; subsequent are empty)
79
+ this.applyVerticalMerges(rows);
80
+
78
81
  return rows;
79
82
  } //generateJsonRows
80
83
 
84
+ private applyVerticalMerges(rows: TableRow[]) {
85
+ if (!rows || rows.length <= 2) return; // header + at least 1 data row needed
86
+
87
+ const getCellText = (cell: any): string => {
88
+ try {
89
+ const runs = cell?.Paragraphs?.[0]?.Runs || [];
90
+ return runs.map((r: any) => (r?.text ?? '')).join('').trim();
91
+ } catch {
92
+ return '';
93
+ }
94
+ };
95
+
96
+ const dataRowStart = 1; // skip header
97
+ const maxCols = Math.max(...rows.map((r) => (r?.Cells?.length || 0)));
98
+
99
+ for (let col = 0; col < maxCols; col++) {
100
+ for (let i = dataRowStart + 1; i < rows.length; i++) {
101
+ const prev = rows[i - 1]?.Cells?.[col];
102
+ const curr = rows[i]?.Cells?.[col];
103
+ if (!prev || !curr) continue;
104
+
105
+ const sameFill = (prev.shading?.fill || '') === (curr.shading?.fill || '');
106
+ const prevTextEmpty = getCellText(prev) === '';
107
+ const currTextEmpty = getCellText(curr) === '';
108
+
109
+ if (!sameFill) {
110
+ continue;
111
+ }
112
+
113
+ // Start merge when prev has text and current is empty
114
+ if (!prevTextEmpty && currTextEmpty) {
115
+ prev.vMerge = prev.vMerge ?? 'restart';
116
+ curr.vMerge = 'continue';
117
+ } else if ((prev.vMerge === 'restart' || prev.vMerge === 'continue') && currTextEmpty) {
118
+ // Continue an existing merge block
119
+ curr.vMerge = 'continue';
120
+ }
121
+ }
122
+ }
123
+ }
124
+
81
125
  headersRowAdapter(data: WIData): WIData {
82
126
  let headerValuesWi;
83
127
  try {
@@ -36,6 +36,7 @@ export interface TableCell {
36
36
  shading?: Shading;
37
37
  width?: string;
38
38
  Html?: JsonHtml;
39
+ vMerge?: 'restart' | 'continue';
39
40
  }
40
41
 
41
42
  export interface Shading {