Merge pull request #56 from SELab-2/feat/base64-image
feat: base64ToImage.ts
This commit is contained in:
		
						commit
						8a7fa271ba
					
				
					 3 changed files with 45 additions and 0 deletions
				
			
		
							
								
								
									
										20
									
								
								frontend/src/utils/base64ToImage.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								frontend/src/utils/base64ToImage.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| /** | ||||
|  * Converts a Base64 string to a valid image source URL. | ||||
|  * | ||||
|  * @param base64String - The "image" field from the learning path JSON response. | ||||
|  * @returns A properly formatted data URL for use in an <img> tag. | ||||
|  * | ||||
|  * @example | ||||
|  * // Fetch the learning path data and extract the image
 | ||||
|  * const response = await fetch( learning path route ); | ||||
|  * const data = await response.json(); | ||||
|  * const base64String = data.image; | ||||
|  * | ||||
|  * // Use in an <img> element
 | ||||
|  * <img :src="convertBase64ToImageSrc(base64String)" alt="Learning Path Image" /> | ||||
|  */ | ||||
| export function convertBase64ToImageSrc(base64String: string): string { | ||||
|     return base64String.startsWith("data:image") | ||||
|         ? base64String | ||||
|         : `data:image/png;base64,${base64String}`; | ||||
| } | ||||
							
								
								
									
										1
									
								
								frontend/tests/base64/base64Sample.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								frontend/tests/base64/base64Sample.txt
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										24
									
								
								frontend/tests/base64/base64ToImage.test.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								frontend/tests/base64/base64ToImage.test.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,24 @@ | |||
| import { describe, it, expect, beforeAll } from 'vitest'; | ||||
| import { convertBase64ToImageSrc } from '../../src/utils/base64ToImage.js'; | ||||
| import fs from 'fs'; | ||||
| import path from 'path'; | ||||
| 
 | ||||
| let sampleBase64: string; | ||||
| 
 | ||||
| beforeAll(() => { | ||||
|     // Load base64 sample from text file
 | ||||
|     const filePath = path.resolve(__dirname, 'base64Sample.txt'); | ||||
|     sampleBase64 = fs.readFileSync(filePath, 'utf8').trim(); | ||||
| }); | ||||
| 
 | ||||
| describe('convertBase64ToImageSrc', () => { | ||||
|     it('should return the same string if it is already a valid data URL', () => { | ||||
|         const base64Image = `data:image/png;base64,${sampleBase64}`; | ||||
|         expect(convertBase64ToImageSrc(base64Image)).toBe(base64Image); | ||||
|     }); | ||||
| 
 | ||||
|     it('should correctly format a raw Base64 string as a PNG image URL', () => { | ||||
|         expect(convertBase64ToImageSrc(sampleBase64)).toBe(`data:image/png;base64,${sampleBase64}`); | ||||
|     }); | ||||
| 
 | ||||
| }); | ||||
		Reference in a new issue
	
	 Gabriellvl
						Gabriellvl