feat: relation field and picker
This commit is contained in:
1 parent
b45c99be3b
commit
37a77c9c22
92 files changed
+6826
-80
No files matched your search
@@ -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,
|
||||
|
||||
Reference in new issue
Block a user