MOBILE-3708 grades: Complete grades types
This commit is contained in:
		
							parent
							
								
									3d80e57402
								
							
						
					
					
						commit
						65d097b498
					
				| @ -22,7 +22,6 @@ import { | ||||
|     CoreGradesFormattedTable, | ||||
|     CoreGradesFormattedTableColumn, | ||||
|     CoreGradesFormattedTableRow, | ||||
|     CoreGradesFormattedTableRowFilled, | ||||
|     CoreGradesHelper, | ||||
| } from '@features/grades/services/grades-helper'; | ||||
| import { CoreSites } from '@services/sites'; | ||||
| @ -203,3 +202,7 @@ class CoreGradesCourseManager extends CorePageItemsListManager<CoreGradesFormatt | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| export type CoreGradesFormattedTableRowFilled = Omit<CoreGradesFormattedTableRow, 'id'> & { | ||||
|     id: number; | ||||
| }; | ||||
|  | ||||
| @ -23,6 +23,8 @@ import { | ||||
|     CoreGradesGradeItem, | ||||
|     CoreGradesGradeOverview, | ||||
|     CoreGradesTable, | ||||
|     CoreGradesTableColumn, | ||||
|     CoreGradesTableItemNameColumn, | ||||
|     CoreGradesTableRow, | ||||
| } from '@features/grades/services/grades'; | ||||
| import { CoreTextUtils } from '@services/utils/text'; | ||||
| @ -56,27 +58,31 @@ export class CoreGradesHelperProvider { | ||||
|             rowclass: '', | ||||
|         }; | ||||
|         for (const name in tableRow) { | ||||
|             if (typeof tableRow[name].content != 'undefined' && tableRow[name].content !== null) { | ||||
|                 let content = String(tableRow[name].content); | ||||
|             const column: CoreGradesTableColumn = tableRow[name]; | ||||
| 
 | ||||
|                 if (name == 'itemname') { | ||||
|                     this.setRowIcon(row, content); | ||||
|                     row.link = this.getModuleLink(content); | ||||
|                     row.rowclass += tableRow[name]!.class.indexOf('hidden') >= 0 ? ' hidden' : ''; | ||||
|                     row.rowclass += tableRow[name]!.class.indexOf('dimmed_text') >= 0 ? ' dimmed_text' : ''; | ||||
| 
 | ||||
|                     content = content.replace(/<\/span>/gi, '\n'); | ||||
|                     content = CoreTextUtils.cleanTags(content); | ||||
|                 } else { | ||||
|                     content = CoreTextUtils.replaceNewLines(content, '<br>'); | ||||
|                 } | ||||
| 
 | ||||
|                 if (content == ' ') { | ||||
|                     content = ''; | ||||
|                 } | ||||
| 
 | ||||
|                 row[name] = content.trim(); | ||||
|             if (column.content === undefined || column.content === null) { | ||||
|                 continue; | ||||
|             } | ||||
| 
 | ||||
|             let content = String(column.content); | ||||
| 
 | ||||
|             if (name == 'itemname') { | ||||
|                 this.setRowIcon(row, content); | ||||
|                 row.link = this.getModuleLink(content); | ||||
|                 row.rowclass += column.class.indexOf('hidden') >= 0 ? ' hidden' : ''; | ||||
|                 row.rowclass += column.class.indexOf('dimmed_text') >= 0 ? ' dimmed_text' : ''; | ||||
| 
 | ||||
|                 content = content.replace(/<\/span>/gi, '\n'); | ||||
|                 content = CoreTextUtils.cleanTags(content); | ||||
|             } else { | ||||
|                 content = CoreTextUtils.replaceNewLines(content, '<br>'); | ||||
|             } | ||||
| 
 | ||||
|             if (content == ' ') { | ||||
|                 content = ''; | ||||
|             } | ||||
| 
 | ||||
|             row[name] = content.trim(); | ||||
|         } | ||||
| 
 | ||||
|         return row; | ||||
| @ -88,35 +94,41 @@ export class CoreGradesHelperProvider { | ||||
|      * @param tableRow JSON object representing row of grades table data. | ||||
|      * @return Formatted row object. | ||||
|      */ | ||||
|     protected formatGradeRowForTable(tableRow: CoreGradesTableRow): CoreGradesFormattedRowForTable { | ||||
|         const row: CoreGradesFormattedRowForTable = {}; | ||||
|     protected formatGradeRowForTable(tableRow: CoreGradesTableRow): CoreGradesFormattedTableRow { | ||||
|         const row: CoreGradesFormattedTableRow = {}; | ||||
|         for (let name in tableRow) { | ||||
|             if (typeof tableRow[name].content != 'undefined' && tableRow[name].content !== null) { | ||||
|                 let content = String(tableRow[name].content); | ||||
|             const column: CoreGradesTableColumn = tableRow[name]; | ||||
| 
 | ||||
|                 if (name == 'itemname') { | ||||
|                     row.id = parseInt(tableRow[name]!.id.split('_')[1], 10); | ||||
|                     row.colspan = tableRow[name]!.colspan; | ||||
|                     row.rowspan = (tableRow.leader && tableRow.leader.rowspan) || 1; | ||||
| 
 | ||||
|                     this.setRowIcon(row, content); | ||||
|                     row.rowclass = tableRow[name]!.class.indexOf('leveleven') < 0 ? 'odd' : 'even'; | ||||
|                     row.rowclass += tableRow[name]!.class.indexOf('hidden') >= 0 ? ' hidden' : ''; | ||||
|                     row.rowclass += tableRow[name]!.class.indexOf('dimmed_text') >= 0 ? ' dimmed_text' : ''; | ||||
| 
 | ||||
|                     content = content.replace(/<\/span>/gi, '\n'); | ||||
|                     content = CoreTextUtils.cleanTags(content); | ||||
|                     name = 'gradeitem'; | ||||
|                 } else { | ||||
|                     content = CoreTextUtils.replaceNewLines(content, '<br>'); | ||||
|                 } | ||||
| 
 | ||||
|                 if (content == ' ') { | ||||
|                     content = ''; | ||||
|                 } | ||||
| 
 | ||||
|                 row[name] = content.trim(); | ||||
|             if (column.content === undefined || column.content === null) { | ||||
|                 continue; | ||||
|             } | ||||
| 
 | ||||
|             let content = String(column.content); | ||||
| 
 | ||||
|             if (name == 'itemname') { | ||||
|                 const itemNameColumn = <CoreGradesTableItemNameColumn> column; | ||||
| 
 | ||||
|                 row.id = parseInt(itemNameColumn.id.split('_')[1], 10); | ||||
|                 row.colspan = itemNameColumn.colspan; | ||||
|                 row.rowspan = tableRow.leader?.rowspan || 1; | ||||
| 
 | ||||
|                 this.setRowIcon(row, content); | ||||
|                 row.rowclass = itemNameColumn.class.indexOf('leveleven') < 0 ? 'odd' : 'even'; | ||||
|                 row.rowclass += itemNameColumn.class.indexOf('hidden') >= 0 ? ' hidden' : ''; | ||||
|                 row.rowclass += itemNameColumn.class.indexOf('dimmed_text') >= 0 ? ' dimmed_text' : ''; | ||||
| 
 | ||||
|                 content = content.replace(/<\/span>/gi, '\n'); | ||||
|                 content = CoreTextUtils.cleanTags(content); | ||||
|                 name = 'gradeitem'; | ||||
|             } else { | ||||
|                 content = CoreTextUtils.replaceNewLines(content, '<br>'); | ||||
|             } | ||||
| 
 | ||||
|             if (content == ' ') { | ||||
|                 content = ''; | ||||
|             } | ||||
| 
 | ||||
|             row[name] = content.trim(); | ||||
|         } | ||||
| 
 | ||||
|         return row; | ||||
| @ -147,9 +159,9 @@ export class CoreGradesHelperProvider { | ||||
|      */ | ||||
|     formatGradesTable(table: CoreGradesTable): CoreGradesFormattedTable { | ||||
|         const maxDepth = table.maxdepth; | ||||
|         const formatted = { | ||||
|             columns: [] as any[], | ||||
|             rows: [] as any[], | ||||
|         const formatted: CoreGradesFormattedTable = { | ||||
|             columns: [], | ||||
|             rows: [], | ||||
|         }; | ||||
| 
 | ||||
|         // Columns, in order.
 | ||||
| @ -185,7 +197,7 @@ export class CoreGradesHelperProvider { | ||||
|         } | ||||
| 
 | ||||
|         for (const colName in columns) { | ||||
|             if (typeof normalRow[colName] != 'undefined') { | ||||
|             if (normalRow && typeof normalRow[colName] != 'undefined') { | ||||
|                 formatted.columns.push({ | ||||
|                     name: colName, | ||||
|                     colspan: colName == 'gradeitem' ? maxDepth : 1, | ||||
| @ -561,10 +573,7 @@ export class CoreGradesHelperProvider { | ||||
|      * @param text HTML where the image will be rendered. | ||||
|      * @return Row object with the image. | ||||
|      */ | ||||
|     protected setRowIcon( | ||||
|         row: CoreGradesFormattedRowForTable | CoreGradesFormattedRow, | ||||
|         text: string, | ||||
|     ): CoreGradesFormattedRowForTable { | ||||
|     protected setRowIcon<T extends CoreGradesFormattedRowCommonData>(row: T, text: string): T { | ||||
|         text = text.replace('%2F', '/').replace('%2f', '/'); | ||||
| 
 | ||||
|         if (text.indexOf('/agg_mean') > -1) { | ||||
| @ -683,10 +692,6 @@ export class CoreGradesHelperProvider { | ||||
| 
 | ||||
| export const CoreGradesHelper = makeSingleton(CoreGradesHelperProvider); | ||||
| 
 | ||||
| // @todo formatted data types.
 | ||||
| export type CoreGradesFormattedRowForTable = any; | ||||
| export type CoreGradesFormattedTableColumn = any; | ||||
| 
 | ||||
| export type CoreGradesFormattedItem = CoreGradesGradeItem & { | ||||
|     weight?: string; // Weight.
 | ||||
|     grade?: string; // The grade formatted.
 | ||||
| @ -696,15 +701,13 @@ export type CoreGradesFormattedItem = CoreGradesGradeItem & { | ||||
|     average?: string; // Grade average.
 | ||||
| }; | ||||
| 
 | ||||
| export type CoreGradesFormattedRow = { | ||||
| export type CoreGradesFormattedRowCommonData = { | ||||
|     icon?: string; | ||||
|     link?: string | false; | ||||
|     rowclass?: string; | ||||
|     itemtype?: string; | ||||
|     image?: string; | ||||
|     itemmodule?: string; | ||||
|     rowspan?: number; | ||||
|     itemname?: string; // The item returned data.
 | ||||
|     weight?: string; // Weight column.
 | ||||
|     grade?: string; // Grade column.
 | ||||
|     range?: string;// Range column.
 | ||||
| @ -716,20 +719,26 @@ export type CoreGradesFormattedRow = { | ||||
|     contributiontocoursetotal?: string; // Contributiontocoursetotal column.
 | ||||
| }; | ||||
| 
 | ||||
| export type CoreGradesFormattedTableRow = CoreGradesFormattedTableRowFilled | CoreGradesFormattedTableRowEmpty; | ||||
| export type CoreGradesFormattedRow = CoreGradesFormattedRowCommonData & { | ||||
|     link?: string | false; | ||||
|     itemname?: string; // The item returned data.
 | ||||
| }; | ||||
| 
 | ||||
| export type CoreGradesFormattedTable = { | ||||
|     columns: CoreGradesFormattedTableColumn[]; | ||||
|     rows: CoreGradesFormattedTableRow[]; | ||||
| }; | ||||
| export type CoreGradesFormattedTableRowFilled = { | ||||
|     // @todo complete types.
 | ||||
|     id: number; | ||||
|     itemtype: 'category' | 'leader'; | ||||
|     grade: unknown; | ||||
|     percentage: unknown; | ||||
| 
 | ||||
| export type CoreGradesFormattedTableRow = CoreGradesFormattedRowCommonData & { | ||||
|     id?: number; | ||||
|     colspan?: number; | ||||
|     gradeitem?: string; // The item returned data.
 | ||||
| }; | ||||
| type CoreGradesFormattedTableRowEmpty ={ | ||||
|     //
 | ||||
| 
 | ||||
| export type CoreGradesFormattedTableColumn = { | ||||
|     name: string; | ||||
|     colspan: number; | ||||
|     hiddenPhone: boolean; | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  | ||||
| @ -515,64 +515,53 @@ export type CoreGradesTable = { | ||||
|  * Grade table data item. | ||||
|  */ | ||||
| export type CoreGradesTableRow = { | ||||
|     itemname?: { | ||||
|         class: string; // Class.
 | ||||
|         colspan: number; // Col span.
 | ||||
|         content: string; // Cell content.
 | ||||
|         celltype: string; // Cell type.
 | ||||
|         id: string; // Id.
 | ||||
|     }; // The item returned data.
 | ||||
|     leader?: { | ||||
|         class: string; // Class.
 | ||||
|         rowspan: number; // Row span.
 | ||||
|     }; // The item returned data.
 | ||||
|     weight?: { | ||||
|         class: string; // Class.
 | ||||
|         content: string; // Cell content.
 | ||||
|         headers: string; // Headers.
 | ||||
|     }; // Weight column.
 | ||||
|     grade?: { | ||||
|         class: string; // Class.
 | ||||
|         content: string; // Cell content.
 | ||||
|         headers: string; // Headers.
 | ||||
|     }; // Grade column.
 | ||||
|     range?: { | ||||
|         class: string; // Class.
 | ||||
|         content: string; // Cell content.
 | ||||
|         headers: string; // Headers.
 | ||||
|     }; // Range column.
 | ||||
|     percentage?: { | ||||
|         class: string; // Class.
 | ||||
|         content: string; // Cell content.
 | ||||
|         headers: string; // Headers.
 | ||||
|     }; // Percentage column.
 | ||||
|     lettergrade?: { | ||||
|         class: string; // Class.
 | ||||
|         content: string; // Cell content.
 | ||||
|         headers: string; // Headers.
 | ||||
|     }; // Lettergrade column.
 | ||||
|     rank?: { | ||||
|         class: string; // Class.
 | ||||
|         content: string; // Cell content.
 | ||||
|         headers: string; // Headers.
 | ||||
|     }; // Rank column.
 | ||||
|     average?: { | ||||
|         class: string; // Class.
 | ||||
|         content: string; // Cell content.
 | ||||
|         headers: string; // Headers.
 | ||||
|     }; // Average column.
 | ||||
|     feedback?: { | ||||
|         class: string; // Class.
 | ||||
|         content: string; // Cell content.
 | ||||
|         headers: string; // Headers.
 | ||||
|     }; // Feedback column.
 | ||||
|     contributiontocoursetotal?: { | ||||
|         class: string; // Class.
 | ||||
|         content: string; // Cell content.
 | ||||
|         headers: string; // Headers.
 | ||||
|     }; // Contributiontocoursetotal column.
 | ||||
|     itemname?: CoreGradesTableItemNameColumn; // The item returned data.
 | ||||
|     leader?: CoreGradesTableLeaderColumn; // The item returned data.
 | ||||
|     weight?: CoreGradesTableCommonColumn; // Weight column.
 | ||||
|     grade?: CoreGradesTableCommonColumn; // Grade column.
 | ||||
|     range?: CoreGradesTableCommonColumn; // Range column.
 | ||||
|     percentage?: CoreGradesTableCommonColumn; // Percentage column.
 | ||||
|     lettergrade?: CoreGradesTableCommonColumn; // Lettergrade column.
 | ||||
|     rank?: CoreGradesTableCommonColumn; // Rank column.
 | ||||
|     average?: CoreGradesTableCommonColumn; // Average column.
 | ||||
|     feedback?: CoreGradesTableCommonColumn; // Feedback column.
 | ||||
|     contributiontocoursetotal?: CoreGradesTableCommonColumn; // Contributiontocoursetotal column.
 | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * Grade table common column data. | ||||
|  */ | ||||
| export type CoreGradesTableCommonColumn = { | ||||
|     class: string; // Class.
 | ||||
|     content: string; // Cell content.
 | ||||
|     headers: string; // Headers.
 | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * Grade table item name column. | ||||
|  */ | ||||
| export type CoreGradesTableItemNameColumn = { | ||||
|     class: string; // Class.
 | ||||
|     colspan: number; // Col span.
 | ||||
|     content: string; // Cell content.
 | ||||
|     celltype: string; // Cell type.
 | ||||
|     id: string; // Id.
 | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * Grade table leader column. | ||||
|  */ | ||||
| export type CoreGradesTableLeaderColumn = { | ||||
|     class: string; // Class.
 | ||||
|     rowspan: number; // Row span.
 | ||||
|     content: undefined; // The WS doesn't return this data, but we declare it to make it coherent with the other columns.
 | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * Grade table column. | ||||
|  */ | ||||
| export type CoreGradesTableColumn = CoreGradesTableCommonColumn | CoreGradesTableItemNameColumn | CoreGradesTableLeaderColumn; | ||||
| 
 | ||||
| /** | ||||
|  * Grade overview data. | ||||
|  */ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user