feat: relation field and picker

This commit is contained in:
Florian Sylvain committed 2026-10-23 00:13:42 +02:00
1 parent b45c99be3b
commit 37a77c9c22
92 files changed
+6826 -80

No files matched your search

+18 -1
View File
@@ -1,10 +1,12 @@
import { computed, ref } from 'vue'
import type { BuiltinField, ContentEntry } from '@/lib/contentTypes'
import type { MediaMap, MediaSummary } from '@/lib/mediaField'
import type { RelationSummaries, RelationSummary } from '@/lib/relationField'
import {
carriesDefault,
firstIssueKey,
initialImages,
initialRelations,
initialValues,
valuesDiffer,
type EntryIssues,
@@ -16,6 +18,7 @@ export function useEntryForm(fields: () => BuiltinField[], creating: () => boole
const values = ref<EntryValues>({})
const saved = ref<EntryValues>({})
const images = ref<MediaMap>({})
const relations = ref<RelationSummaries>({})
const issues = ref<EntryIssues>({})
const rejected = ref(false)
@@ -28,6 +31,7 @@ export function useEntryForm(fields: () => BuiltinField[], creating: () => boole
values.value = { ...next }
saved.value = { ...next }
images.value = initialImages(fields(), entry)
relations.value = initialRelations(fields(), entry)
issues.value = {}
rejected.value = false
}
@@ -45,9 +49,21 @@ export function useEntryForm(fields: () => BuiltinField[], creating: () => boole
images.value = next
}
function setValue(key: string, value: unknown, image?: MediaSummary | null) {
function setRelations(key: string, summaries: RelationSummary[] | undefined) {
if (summaries !== undefined) {
relations.value = { ...relations.value, [key]: summaries }
}
}
function setValue(
key: string,
value: unknown,
image?: MediaSummary | null,
summaries?: RelationSummary[],
) {
values.value = { ...values.value, [key]: value }
setImage(key, image)
setRelations(key, summaries)
rejected.value = false
if (issues.value[key]) {
const rest = { ...issues.value }
@@ -72,6 +88,7 @@ export function useEntryForm(fields: () => BuiltinField[], creating: () => boole
return {
values,
images,
relations,
issues,
rejected,
dirty,