WIP - related lists and look up field
This commit is contained in:
@@ -4,7 +4,8 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/com
|
||||
import { Button } from '@/components/ui/button'
|
||||
import { Separator } from '@/components/ui/separator'
|
||||
import FieldRenderer from '@/components/fields/FieldRenderer.vue'
|
||||
import { DetailViewConfig, ViewMode, FieldSection } from '@/types/field-types'
|
||||
import RelatedList from '@/components/RelatedList.vue'
|
||||
import { DetailViewConfig, ViewMode, FieldSection, FieldConfig, RelatedListConfig } from '@/types/field-types'
|
||||
import { Edit, Trash2, ArrowLeft } from 'lucide-vue-next'
|
||||
import {
|
||||
Collapsible,
|
||||
@@ -13,7 +14,7 @@ import {
|
||||
} from '@/components/ui/collapsible'
|
||||
|
||||
interface Props {
|
||||
config: DetailViewConfig
|
||||
config: DetailViewConfig & { relatedLists?: RelatedListConfig[] }
|
||||
data: any
|
||||
loading?: boolean
|
||||
}
|
||||
@@ -27,6 +28,8 @@ const emit = defineEmits<{
|
||||
'delete': []
|
||||
'back': []
|
||||
'action': [actionId: string]
|
||||
'navigate': [objectApiName: string, recordId: string]
|
||||
'createRelated': [objectApiName: string, parentId: string]
|
||||
}>()
|
||||
|
||||
// Organize fields into sections
|
||||
@@ -47,7 +50,7 @@ const sections = computed<FieldSection[]>(() => {
|
||||
const getFieldsBySection = (section: FieldSection) => {
|
||||
return section.fields
|
||||
.map(apiName => props.config.fields.find(f => f.apiName === apiName))
|
||||
.filter(Boolean)
|
||||
.filter((field): field is FieldConfig => field !== undefined)
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -121,6 +124,7 @@ const getFieldsBySection = (section: FieldSection) => {
|
||||
:key="field.id"
|
||||
:field="field"
|
||||
:model-value="data[field.apiName]"
|
||||
:record-data="data"
|
||||
:mode="ViewMode.DETAIL"
|
||||
/>
|
||||
</div>
|
||||
@@ -139,9 +143,10 @@ const getFieldsBySection = (section: FieldSection) => {
|
||||
<div class="grid gap-6 md:grid-cols-2">
|
||||
<FieldRenderer
|
||||
v-for="field in getFieldsBySection(section)"
|
||||
:key="field?.id"
|
||||
:key="field.id"
|
||||
:field="field"
|
||||
:model-value="data[field.apiName]"
|
||||
:record-data="data"
|
||||
:mode="ViewMode.DETAIL"
|
||||
/>
|
||||
</div>
|
||||
@@ -149,6 +154,19 @@ const getFieldsBySection = (section: FieldSection) => {
|
||||
</template>
|
||||
</Card>
|
||||
</div>
|
||||
|
||||
<!-- Related Lists -->
|
||||
<div v-if="config.relatedLists && config.relatedLists.length > 0" class="space-y-6">
|
||||
<RelatedList
|
||||
v-for="relatedList in config.relatedLists"
|
||||
:key="relatedList.relationName"
|
||||
:config="relatedList"
|
||||
:parent-id="data.id"
|
||||
:related-records="data[relatedList.relationName]"
|
||||
@navigate="(objectApiName, recordId) => emit('navigate', objectApiName, recordId)"
|
||||
@create="(objectApiName, parentId) => emit('createRelated', objectApiName, parentId)"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user