Skip to content

Commit 5192575

Browse files
authored
Merge pull request #81 from cortex-reply/fix/knowledge-edit-metadata
fix: applies fix to metadata edit UI
2 parents 9637041 + cce3f2d commit 5192575

1 file changed

Lines changed: 104 additions & 102 deletions

File tree

src/components/Foundary/document-edit.tsx

Lines changed: 104 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -89,16 +89,16 @@ export function DocumentEdit({
8989
return s.replace(/\s+/g, ' ').trim()
9090
}
9191

92-
const canonicalizeMetadata = (meta?: Record<string, any>) => {
93-
if (!meta) return {}
94-
const out: Record<string, string> = {}
95-
Object.keys(meta)
96-
.sort()
97-
.forEach((k) => {
98-
out[k] = String(meta[k] ?? '').trim()
99-
})
100-
return out
101-
}
92+
// const canonicalizeMetadata = (meta?: Record<string, any>) => {
93+
// if (!meta) return {}
94+
// const out: Record<string, string> = {}
95+
// Object.keys(meta)
96+
// .sort()
97+
// .forEach((k) => {
98+
// out[k] = String(meta[k] ?? '').trim()
99+
// })
100+
// return out
101+
// }
102102

103103
const canonicalContent = () => {
104104
// If richText, use stable JSON; if plain text, use normalized text
@@ -116,7 +116,7 @@ export function DocumentEdit({
116116
title: normalizeText(editedDocument.title),
117117
description: normalizeText(editedDocument.description),
118118
format: editedDocument.format,
119-
metadata: canonicalizeMetadata(editedDocument.metadata),
119+
// metadata: canonicalizeMetadata(editedDocument.metadata),
120120
content: canonicalContent(),
121121
}
122122
const s = stableStringify(snapshot)
@@ -430,22 +430,12 @@ export function DocumentEdit({
430430
transition={{ duration: 0.2, ease: 'easeInOut' }}
431431
className="overflow-hidden h-full max-h-full"
432432
>
433-
<div className="pt-4 border-t border-border mt-4 h-screen max-h-full flex">
433+
<div className="pt-4 border-t border-border mt-4 max-h-full flex gap-2">
434434
<div className="flex items-center justify-between mb-3">
435435
<h3 className="text-sm font-semibold text-foreground flex items-center gap-2">
436436
<Info className="h-4 w-4" />
437437
Document Metadata
438438
</h3>
439-
<Button
440-
type="button"
441-
variant="outline"
442-
size="sm"
443-
onClick={handleAddMetadataField}
444-
className="gap-1 h-8"
445-
>
446-
<Plus className="h-3 w-3" />
447-
Add Field
448-
</Button>
449439
</div>
450440

451441
{/* {suggestedKeys.contextKeys.length > 0 && (
@@ -456,88 +446,100 @@ export function DocumentEdit({
456446
</p>
457447
)} */}
458448

459-
<div className="bg-muted rounded-lg p-4 border border-border">
460-
{editedDocument.metadata && Object.keys(editedDocument.metadata).length > 0 ? (
461-
<div className="space-y-2">
462-
{Object.entries(editedDocument.metadata).map(([key, value], index) => {
463-
const suggestedValues = getSuggestedValues(key)
464-
return (
465-
<div key={`metadata-key-${index}`} className="flex gap-2 items-center">
466-
<Input
467-
value={key}
468-
onChange={(e) => {
469-
const newKey = e.target.value || ''
470-
const oldValue = editedDocument.metadata?.[key]
471-
setEditedDocument((prev) => {
472-
const newMetadata = { ...prev.metadata }
473-
delete newMetadata[key]
474-
if (newKey) {
475-
newMetadata[newKey] = oldValue || ''
476-
}
477-
return { ...prev, metadata: newMetadata }
478-
})
479-
}}
480-
placeholder="Key"
481-
className="w-32 h-8 text-sm"
482-
list={`metadata-keys-${key}`}
483-
/>
484-
<datalist id={`metadata-keys-${key}`}>
485-
{suggestedKeys.allKeys.map((suggestedKey) => (
486-
<option key={suggestedKey} value={suggestedKey} />
487-
))}
488-
</datalist>
489-
490-
<span className="text-muted-foreground text-sm">=</span>
491-
492-
{suggestedValues.length > 0 ? (
493-
<Select
494-
value={String(value || '')}
495-
onValueChange={(newValue) => handleMetadataValueSelect(key, newValue)}
496-
>
497-
<SelectTrigger className="flex-1 h-8 text-sm">
498-
<SelectValue placeholder="Value" />
499-
</SelectTrigger>
500-
<SelectContent>
501-
{suggestedValues.map((suggestedValue) => (
502-
<SelectItem key={suggestedValue} value={suggestedValue}>
503-
{suggestedValue}
504-
</SelectItem>
505-
))}
506-
<SelectItem value="__custom__">
507-
<span className="text-muted-foreground text-xs">Custom...</span>
508-
</SelectItem>
509-
</SelectContent>
510-
</Select>
511-
) : (
449+
<div className="flex flex-col gap-2">
450+
<div className="bg-muted rounded-lg p-4 border border-border">
451+
{editedDocument.metadata && Object.keys(editedDocument.metadata).length > 0 ? (
452+
<div className="space-y-2">
453+
{Object.entries(editedDocument.metadata).map(([key, value], index) => {
454+
const suggestedValues = getSuggestedValues(key)
455+
return (
456+
<div key={`metadata-key-${index}`} className="flex gap-2 items-center">
512457
<Input
513-
value={String(value || '')}
514-
onChange={(e) => handleMetadataChange(key, e.target.value)}
515-
placeholder="Value"
516-
className="flex-1 h-8 text-sm"
458+
value={key}
459+
onChange={(e) => {
460+
const newKey = e.target.value || ''
461+
const oldValue = editedDocument.metadata?.[key]
462+
setEditedDocument((prev) => {
463+
const newMetadata = { ...prev.metadata }
464+
delete newMetadata[key]
465+
if (newKey) {
466+
newMetadata[newKey] = oldValue || ''
467+
}
468+
return { ...prev, metadata: newMetadata }
469+
})
470+
}}
471+
placeholder="Key"
472+
className="w-32 h-8 text-sm"
473+
list={`metadata-keys-${key}`}
517474
/>
518-
)}
519-
520-
<Button
521-
type="button"
522-
variant="ghost"
523-
size="sm"
524-
onClick={() => handleRemoveMetadataField(key)}
525-
className="h-8 w-8 p-0 text-muted-foreground hover:text-destructive"
526-
>
527-
<X className="h-3 w-3" />
528-
</Button>
529-
</div>
530-
)
531-
})}
532-
</div>
533-
) : (
534-
<div className="text-center py-4">
535-
<p className="text-sm text-muted-foreground mb-2">No metadata fields</p>
536-
<p className="text-xs text-muted-foreground">
537-
Click "Add Field" to create metadata
538-
</p>
539-
</div>
540-
)}
475+
<datalist id={`metadata-keys-${key}`}>
476+
{suggestedKeys.allKeys.map((suggestedKey) => (
477+
<option key={suggestedKey} value={suggestedKey} />
478+
))}
479+
</datalist>
480+
481+
<span className="text-muted-foreground text-sm">=</span>
482+
483+
{suggestedValues.length > 0 ? (
484+
<Select
485+
value={String(value || '')}
486+
onValueChange={(newValue) => handleMetadataValueSelect(key, newValue)}
487+
>
488+
<SelectTrigger className="flex-1 h-8 text-sm">
489+
<SelectValue placeholder="Value" />
490+
</SelectTrigger>
491+
<SelectContent>
492+
{suggestedValues.map((suggestedValue) => (
493+
<SelectItem key={suggestedValue} value={suggestedValue}>
494+
{suggestedValue}
495+
</SelectItem>
496+
))}
497+
<SelectItem value="__custom__">
498+
<span className="text-muted-foreground text-xs">Custom...</span>
499+
</SelectItem>
500+
</SelectContent>
501+
</Select>
502+
) : (
503+
<Input
504+
value={String(value || '')}
505+
onChange={(e) => handleMetadataChange(key, e.target.value)}
506+
placeholder="Value"
507+
className="flex-1 h-8 text-sm"
508+
/>
509+
)}
510+
511+
<Button
512+
type="button"
513+
variant="ghost"
514+
size="sm"
515+
onClick={() => handleRemoveMetadataField(key)}
516+
className="h-8 w-8 p-0 text-muted-foreground hover:text-destructive"
517+
>
518+
<X className="h-3 w-3" />
519+
</Button>
520+
</div>
521+
)
522+
})}
523+
</div>
524+
) : (
525+
<div className="text-center py-4">
526+
<p className="text-sm text-muted-foreground mb-2">No metadata fields</p>
527+
<p className="text-xs text-muted-foreground">
528+
Click "Add Field" to create metadata
529+
</p>
530+
</div>
531+
)}
532+
</div>
533+
<Button
534+
type="button"
535+
variant="outline"
536+
size="sm"
537+
onClick={handleAddMetadataField}
538+
className="gap-1 h-8"
539+
>
540+
<Plus className="h-3 w-3" />
541+
Add Field
542+
</Button>
541543
</div>
542544
</div>
543545
</motion.div>

0 commit comments

Comments
 (0)