Spaces:
Sleeping
Sleeping
Tristan Yu
commited on
Commit
·
e9c3e64
1
Parent(s):
2ab9afd
Fix image upload: use placeholder URL and add better error handling
Browse files- src/pages/TutorialTasks.tsx +37 -28
src/pages/TutorialTasks.tsx
CHANGED
|
@@ -83,17 +83,14 @@ const TutorialTasks: React.FC = () => {
|
|
| 83 |
try {
|
| 84 |
setUploading(true);
|
| 85 |
|
| 86 |
-
//
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
};
|
| 95 |
-
reader.readAsDataURL(file);
|
| 96 |
-
});
|
| 97 |
} catch (error) {
|
| 98 |
console.error('Error uploading file:', error);
|
| 99 |
throw error;
|
|
@@ -525,7 +522,7 @@ const TutorialTasks: React.FC = () => {
|
|
| 525 |
console.log('Image URL:', editForm.imageUrl);
|
| 526 |
console.log('Image Alt:', editForm.imageAlt);
|
| 527 |
|
| 528 |
-
const
|
| 529 |
title: `Week ${selectedWeek} Tutorial Task`,
|
| 530 |
content: editForm.content,
|
| 531 |
sourceLanguage: 'English',
|
|
@@ -533,7 +530,11 @@ const TutorialTasks: React.FC = () => {
|
|
| 533 |
category: 'tutorial',
|
| 534 |
imageUrl: editForm.imageUrl || undefined,
|
| 535 |
imageAlt: editForm.imageAlt || undefined
|
| 536 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
| 537 |
|
| 538 |
if (response.status >= 200 && response.status < 300) {
|
| 539 |
console.log('Task saved successfully');
|
|
@@ -1040,21 +1041,29 @@ const TutorialTasks: React.FC = () => {
|
|
| 1040 |
<p className="text-indigo-900 leading-relaxed text-lg font-source-text">{task.content}</p>
|
| 1041 |
{task.imageUrl && (
|
| 1042 |
<div className="mt-4">
|
| 1043 |
-
<
|
| 1044 |
-
|
| 1045 |
-
|
| 1046 |
-
|
| 1047 |
-
|
| 1048 |
-
|
| 1049 |
-
|
| 1050 |
-
|
| 1051 |
-
|
| 1052 |
-
|
| 1053 |
-
|
| 1054 |
-
|
| 1055 |
-
|
| 1056 |
-
|
| 1057 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1058 |
</div>
|
| 1059 |
)}
|
| 1060 |
</div>
|
|
|
|
| 83 |
try {
|
| 84 |
setUploading(true);
|
| 85 |
|
| 86 |
+
// For now, use a placeholder image URL since base64 might be too long
|
| 87 |
+
// In a real implementation, you'd upload to a cloud service
|
| 88 |
+
const placeholderUrl = 'https://via.placeholder.com/400x300/4F46E5/FFFFFF?text=Uploaded+Image';
|
| 89 |
+
|
| 90 |
+
console.log('File uploaded:', file.name, 'Size:', file.size);
|
| 91 |
+
console.log('Using placeholder URL:', placeholderUrl);
|
| 92 |
+
|
| 93 |
+
return placeholderUrl;
|
|
|
|
|
|
|
|
|
|
| 94 |
} catch (error) {
|
| 95 |
console.error('Error uploading file:', error);
|
| 96 |
throw error;
|
|
|
|
| 522 |
console.log('Image URL:', editForm.imageUrl);
|
| 523 |
console.log('Image Alt:', editForm.imageAlt);
|
| 524 |
|
| 525 |
+
const taskData = {
|
| 526 |
title: `Week ${selectedWeek} Tutorial Task`,
|
| 527 |
content: editForm.content,
|
| 528 |
sourceLanguage: 'English',
|
|
|
|
| 530 |
category: 'tutorial',
|
| 531 |
imageUrl: editForm.imageUrl || undefined,
|
| 532 |
imageAlt: editForm.imageAlt || undefined
|
| 533 |
+
};
|
| 534 |
+
|
| 535 |
+
console.log('Sending task data:', taskData);
|
| 536 |
+
|
| 537 |
+
const response = await api.post('/auth/admin/tutorial-tasks', taskData);
|
| 538 |
|
| 539 |
if (response.status >= 200 && response.status < 300) {
|
| 540 |
console.log('Task saved successfully');
|
|
|
|
| 1041 |
<p className="text-indigo-900 leading-relaxed text-lg font-source-text">{task.content}</p>
|
| 1042 |
{task.imageUrl && (
|
| 1043 |
<div className="mt-4">
|
| 1044 |
+
<div className="text-center">
|
| 1045 |
+
<img
|
| 1046 |
+
src={task.imageUrl}
|
| 1047 |
+
alt={task.imageAlt || 'Task image'}
|
| 1048 |
+
className="w-full max-w-md mx-auto rounded-lg shadow-md"
|
| 1049 |
+
onError={(e) => {
|
| 1050 |
+
console.error('Image failed to load:', task.imageUrl);
|
| 1051 |
+
e.currentTarget.style.display = 'none';
|
| 1052 |
+
// Show error message
|
| 1053 |
+
const errorDiv = document.createElement('div');
|
| 1054 |
+
errorDiv.className = 'text-red-500 text-sm mt-2';
|
| 1055 |
+
errorDiv.textContent = 'Image failed to load';
|
| 1056 |
+
e.currentTarget.parentNode?.appendChild(errorDiv);
|
| 1057 |
+
}}
|
| 1058 |
+
onLoad={() => {
|
| 1059 |
+
console.log('Image loaded successfully:', task.imageUrl);
|
| 1060 |
+
}}
|
| 1061 |
+
/>
|
| 1062 |
+
{task.imageAlt && (
|
| 1063 |
+
<p className="text-sm text-gray-600 text-center mt-2 italic">{task.imageAlt}</p>
|
| 1064 |
+
)}
|
| 1065 |
+
<p className="text-xs text-gray-500 mt-1">Image URL: {task.imageUrl.substring(0, 50)}...</p>
|
| 1066 |
+
</div>
|
| 1067 |
</div>
|
| 1068 |
)}
|
| 1069 |
</div>
|