Revisione/app/pages/learn/[id]/dl.vue

44 lines
1.3 KiB
Vue

<script setup lang="ts">
definePageMeta({ layout: false });
const route = useRoute();
const topicId = route.params.id as string;
const { data: lesson, pending, error } = useAsyncData(
`lesson-dl-${topicId}`,
() => $fetch<any>(`/api/topics/${topicId}/lesson`)
);
watch(lesson, (val) => {
if (!val) return;
const content = val.content ?? {};
const steps = (content.steps ?? []).map((step: any) => {
const { audioPath, audioChunks, questionAudioPath, questionAudioChunks, optionAudioPaths, ...rest } = step;
return rest;
});
const payload = {
lessonId: val.id,
topicId,
keyConcepts: content.keyConcepts ?? [],
analogiesUsed: content.analogiesUsed ?? [],
steps,
};
const blob = new Blob([JSON.stringify(payload, null, 2)], { type: "application/json" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = `lesson-${topicId.slice(0, 8)}.json`;
a.click();
URL.revokeObjectURL(url);
}, { immediate: true });
</script>
<template>
<div style="font-family:monospace;padding:2rem;color:#666;">
<p v-if="pending">Loading</p>
<p v-else-if="error">Error loading lesson.</p>
<p v-else>Download started. <a :href="`/learn/${topicId}`" style="color:#6366F1;"> Back to lesson</a></p>
</div>
</template>