feat: add UploadZone component and database utility for file processing
This commit is contained in:
@@ -70,7 +70,7 @@ const UploadZone = ({ onUploadComplete }) => {
|
||||
<p className="font-medium text-lg">Drag files here</p>
|
||||
<p className="text-sm text-fg-muted mb-4">Supports .txt and .md (max 5MB)</p>
|
||||
<Button variant="outline" type="button" disabled={isProcessing}>
|
||||
{isProcessing && !syncProgress ? 'AI extraction in progress...' : 'Browse files'}
|
||||
{isProcessing ? 'AI extraction in progress...' : 'Browse files'}
|
||||
</Button>
|
||||
<input
|
||||
type="file"
|
||||
|
||||
@@ -8,22 +8,26 @@ export async function getTopics() {
|
||||
|
||||
export async function saveTopics(topics) {
|
||||
const existing = await pb.collection('topics').getFullList({ fields: 'id' });
|
||||
await Promise.all(existing.map(r => pb.collection('topics').delete(r.id, { requestKey: null })));
|
||||
return Promise.all(topics.map(t => pb.collection('topics').create({
|
||||
for (const r of existing) {
|
||||
await pb.collection('topics').delete(r.id, { requestKey: null });
|
||||
}
|
||||
for (const t of topics) {
|
||||
await pb.collection('topics').create({
|
||||
id: t.id,
|
||||
label: t.label,
|
||||
type: t.type,
|
||||
description: t.description,
|
||||
learning_relevance: t.learning_relevance || 'standard',
|
||||
}, { requestKey: null })));
|
||||
}, { requestKey: null });
|
||||
}
|
||||
}
|
||||
|
||||
export async function upsertTopic(topic) {
|
||||
try {
|
||||
await pb.collection('topics').getOne(topic.id);
|
||||
return pb.collection('topics').update(topic.id, topic);
|
||||
return await pb.collection('topics').update(topic.id, topic);
|
||||
} catch {
|
||||
return pb.collection('topics').create({ id: topic.id, ...topic });
|
||||
return await pb.collection('topics').create({ id: topic.id, ...topic });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,8 +39,12 @@ export async function getRelations() {
|
||||
|
||||
export async function saveRelations(relations) {
|
||||
const existing = await pb.collection('relations').getFullList({ fields: 'id' });
|
||||
await Promise.all(existing.map(r => pb.collection('relations').delete(r.id, { requestKey: null })));
|
||||
return Promise.all(relations.map(r => pb.collection('relations').create(r, { requestKey: null })));
|
||||
for (const r of existing) {
|
||||
await pb.collection('relations').delete(r.id, { requestKey: null });
|
||||
}
|
||||
for (const r of relations) {
|
||||
await pb.collection('relations').create(r, { requestKey: null });
|
||||
}
|
||||
}
|
||||
|
||||
export async function addRelation(relation) {
|
||||
|
||||
Reference in New Issue
Block a user