diff --git a/packages/db/src/core/types/db.ts b/packages/db/src/core/types/db.ts
index 2c00d55f7..80ddbea97 100644
--- a/packages/db/src/core/types/db.ts
+++ b/packages/db/src/core/types/db.ts
@@ -3,4 +3,5 @@ import { Status } from '@vue-skuilder/common';
export interface DataLayerResult {
status: Status;
message: string;
+ id?: string;
}
diff --git a/packages/db/src/impl/pouch/courseAPI.ts b/packages/db/src/impl/pouch/courseAPI.ts
index ae42c8ac9..354c722d7 100644
--- a/packages/db/src/impl/pouch/courseAPI.ts
+++ b/packages/db/src/impl/pouch/courseAPI.ts
@@ -40,16 +40,27 @@ export async function addNote55(
});
if (result.ok) {
- // create cards
- await createCards(courseID, dataShapeId, result.id, tags, elo);
+ try {
+ // create cards
+ await createCards(courseID, dataShapeId, result.id, tags, elo);
+ } catch (error) {
+ console.error(
+ `[addNote55] Failed to create cards for note ${result.id}: ${
+ error instanceof Error ? error.message : String(error)
+ }`
+ );
+ // Add info to result to indicate card creation failed
+ (result as any).cardCreationFailed = true;
+ (result as any).cardCreationError = error instanceof Error ? error.message : String(error);
+ }
} else {
- console.log(`Error adding note: ${result}`);
+ console.error(`[addNote55] Error adding note. Result: ${JSON.stringify(result)}`);
}
return result;
}
-export async function createCards(
+async function createCards(
courseID: string,
datashapeID: PouchDB.Core.DocumentId,
noteID: PouchDB.Core.DocumentId,
@@ -66,8 +77,16 @@ export async function createCards(
}
}
+ if (questionViewTypes.length === 0) {
+ const errorMsg = `No questionViewTypes found for datashapeID: ${datashapeID} in course config. Cards cannot be created.`;
+ console.error(errorMsg);
+ throw new Error(errorMsg);
+ }
+
+ let createdCards = 0;
for (const questionView of questionViewTypes) {
- createCard(questionView, courseID, dsDescriptor, noteID, tags, elo);
+ await createCard(questionView, courseID, dsDescriptor, noteID, tags, elo);
+ createdCards++;
}
}
@@ -86,7 +105,7 @@ async function createCard(
for (const rQ of cfg.questionTypes) {
if (rQ.name === questionViewName) {
for (const view of rQ.viewList) {
- addCard(
+ await addCard(
courseID,
dsDescriptor.course,
[noteID],
diff --git a/packages/db/src/impl/pouch/courseDB.ts b/packages/db/src/impl/pouch/courseDB.ts
index 4cdda3b45..a97ffc370 100644
--- a/packages/db/src/impl/pouch/courseDB.ts
+++ b/packages/db/src/impl/pouch/courseDB.ts
@@ -367,14 +367,28 @@ above:\n${above.rows.map((r) => `\t${r.id}-${r.key}\n`)}`;
try {
const resp = await addNote55(this.id, codeCourse, shape, data, author, tags, uploads, elo);
if (resp.ok) {
+ // Check if card creation failed (property added by addNote55)
+ if ((resp as any).cardCreationFailed) {
+ console.warn(
+ `[courseDB.addNote] Note added but card creation failed: ${
+ (resp as any).cardCreationError
+ }`
+ );
+ return {
+ status: Status.error,
+ message: `Note was added but no cards were created: ${(resp as any).cardCreationError}`,
+ id: resp.id,
+ };
+ }
return {
status: Status.ok,
message: '',
+ id: resp.id,
};
} else {
return {
status: Status.error,
- message: 'Unexpected ',
+ message: 'Unexpected error adding note',
};
}
} catch (e) {
@@ -384,7 +398,7 @@ above:\n${above.rows.map((r) => `\t${r.id}-${r.key}\n`)}`;
);
return {
status: Status.error,
- message: `Error adding note to course. ${(e as PouchError).reason}`,
+ message: `Error adding note to course. ${(e as PouchError).reason || err.message}`,
};
}
}
diff --git a/packages/platform-ui/src/components/Edit/BulkImportView.vue b/packages/platform-ui/src/components/Edit/BulkImportView.vue
new file mode 100644
index 000000000..9f8df9a23
--- /dev/null
+++ b/packages/platform-ui/src/components/Edit/BulkImportView.vue
@@ -0,0 +1,310 @@
+
+ Original Input
+ {{
+ result.originalText
+ }}
+