Skip to content

Commit 4a93fd3

Browse files
MOBILE-4077 ReportBuilder: Fix number rendering error and error handling
1 parent 70c07d4 commit 4a93fd3

File tree

5 files changed

+47
-31
lines changed

5 files changed

+47
-31
lines changed

src/core/features/reportbuilder/components/report-column/report-column.html

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,18 @@
44
<ion-label>
55
<p class="item-heading" *ngIf="columnIndex !== 0 || (columnIndex === 0 && showFirstTitle)"> {{ header }} </p>
66
<h2 *ngIf="columnIndex === 0">
7-
<core-format-text [text]="column" [contextLevel]="source" [contextInstanceId]="contextId"></core-format-text>
7+
<core-format-text *ngIf="isString(column); else notText" [text]="column" [contextLevel]="source"
8+
[contextInstanceId]="contextId">
9+
</core-format-text>
10+
<ng-template #notText>{{ column }}</ng-template>
811
</h2>
9-
<core-format-text *ngIf="columnIndex !== 0" [text]="column" [contextLevel]="source" [contextInstanceId]="contextId">
10-
</core-format-text>
12+
13+
<ng-container *ngIf="columnIndex !== 0">
14+
<core-format-text *ngIf="isString(column); else notText" [text]="column" [contextLevel]="source"
15+
[contextInstanceId]="contextId">
16+
</core-format-text>
17+
<ng-template #notText>{{ column }}</ng-template>
18+
</ng-container>
1119
</ion-label>
1220
<ion-icon [class.expandable-status-icon-expanded]="!isExpanded" slot="end" aria-hidden="true" name="fas-chevron-up"
1321
class="expandable-status-icon" *ngIf="isExpandable" flip-rtl>

src/core/features/reportbuilder/components/report-column/report-column.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,15 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
15+
import { Component, EventEmitter, Input, Output } from '@angular/core';
16+
import { CoreReportBuilder } from '@features/reportbuilder/services/reportbuilder';
1617

1718
@Component({
1819
selector: 'core-report-builder-report-column',
1920
templateUrl: './report-column.html',
2021
styleUrls: ['./report-column.scss'],
2122
})
22-
export class CoreReportBuilderReportColumnComponent implements OnInit {
23+
export class CoreReportBuilderReportColumnComponent {
2324

2425
@Input() isExpanded = false;
2526
@Input() isExpandable = false;
@@ -32,11 +33,7 @@ export class CoreReportBuilderReportColumnComponent implements OnInit {
3233
@Input() source!: string;
3334
@Output() onToggleRow: EventEmitter<number> = new EventEmitter();
3435

35-
ngOnInit(): void {
36-
if (typeof this.column === 'number') {
37-
this.column = this.column.toString();
38-
}
39-
}
36+
isString = (value: unknown): boolean => CoreReportBuilder.isString(value);
4037

4138
/**
4239
* Emits row click

src/core/features/reportbuilder/components/report-detail/report-detail.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,10 @@
3434
<tbody>
3535
<tr *ngFor="let row of state.report.data.rows">
3636
<td *ngFor="let column of row.columns">
37-
<core-format-text [text]="column" [contextLevel]="source$ | async"
37+
<core-format-text *ngIf="isString(column); else notText" [text]="column" [contextLevel]="source$ | async"
3838
[contextInstanceId]="state.report.details.contextid">
3939
</core-format-text>
40+
<ng-template #notText> {{ column }} </ng-template>
4041
</td>
4142
</tr>
4243
</tbody>

src/core/features/reportbuilder/components/report-detail/report-detail.ts

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ export class CoreReportBuilderReportDetailComponent implements OnInit {
5858

5959
source$: Observable<string>;
6060

61+
isString = (value: unknown): boolean => CoreReportBuilder.isString(value);
62+
6163
constructor() {
6264
this.source$ = this.state$.pipe(
6365
map(state => {
@@ -81,33 +83,37 @@ export class CoreReportBuilderReportDetailComponent implements OnInit {
8183
* Get report data.
8284
*/
8385
async getReport(): Promise<void> {
84-
if (!this.reportId) {
85-
CoreDomUtils.showErrorModal(new CoreError('No report found'));
86-
CoreNavigator.back();
86+
try {
87+
if (!this.reportId) {
88+
CoreDomUtils.showErrorModal(new CoreError('No report found'));
89+
CoreNavigator.back();
8790

88-
return;
89-
}
91+
return;
92+
}
9093

91-
const { page } = this.state$.getValue();
94+
const { page } = this.state$.getValue();
9295

93-
const report = await CoreReportBuilder.loadReport(parseInt(this.reportId), page,this.perPage ?? REPORT_ROWS_LIMIT);
96+
const report = await CoreReportBuilder.loadReport(parseInt(this.reportId), page,this.perPage ?? REPORT_ROWS_LIMIT);
9497

95-
if (!report) {
96-
CoreDomUtils.showErrorModal(new CoreError('No report found'));
97-
CoreNavigator.back();
98+
if (!report) {
99+
CoreDomUtils.showErrorModal(new CoreError('No report found'));
100+
CoreNavigator.back();
98101

99-
return;
100-
}
102+
return;
103+
}
101104

102-
await CoreReportBuilder.viewReport(this.reportId);
105+
await CoreReportBuilder.viewReport(this.reportId);
103106

104-
this.updateState({
105-
report,
106-
cardVisibleColumns: report.details.settingsdata.cardviewVisibleColumns,
107-
cardviewShowFirstTitle: report.details.settingsdata.cardviewShowFirstTitle,
108-
});
107+
this.updateState({
108+
report,
109+
cardVisibleColumns: report.details.settingsdata.cardviewVisibleColumns,
110+
cardviewShowFirstTitle: report.details.settingsdata.cardviewShowFirstTitle,
111+
});
109112

110-
this.onReportLoaded.emit(report.details);
113+
this.onReportLoaded.emit(report.details);
114+
} catch (err) {
115+
await CoreDomUtils.showErrorModal(err);
116+
}
111117
}
112118

113119
updateState(state: Partial<CoreReportBuilderReportDetailState>): void {

src/core/features/reportbuilder/services/reportbuilder.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,10 @@ export class CoreReportBuilderService {
162162
return ROOT_CACHE_KEY + 'report';
163163
}
164164

165+
isString(value: unknown): boolean {
166+
return typeof value === 'string';
167+
}
168+
165169
}
166170

167171
export const CoreReportBuilder = makeSingleton(CoreReportBuilderService);
@@ -232,7 +236,7 @@ export interface CoreReportBuilderRetrieveReportMapped extends Omit<CoreReportBu
232236
export type CoreReportBuilderReportDataWSResponse = {
233237
headers: string[]; // Headers.
234238
rows: { // Rows.
235-
columns: string | number[]; // Columns.
239+
columns: (string | number)[]; // Columns.
236240
isExpanded: boolean;
237241
}[];
238242
totalrowcount: number; // Totalrowcount.

0 commit comments

Comments
 (0)