1
1
import { omitBy , isUndefined } from 'lodash'
2
+ import arrify from 'arrify'
2
3
3
4
const TITLE_CANDIDATES = [ 'title' , 'name' , 'label' , 'heading' , 'header' , 'caption' ]
4
5
const DESCRIPTION_CANDIDATES = [ 'description' , ...TITLE_CANDIDATES ]
5
6
6
- function isImageField ( field ) {
7
- return field . type . name === 'image'
7
+ function isImageField ( fieldDef ) {
8
+ return fieldDef . type === 'image'
8
9
}
9
10
10
- function resolveImageAssetPath ( fields ) {
11
- const found = fields . find ( field => isImageField ( field ) )
12
- return found && ` ${ found . name } .url`
11
+ function isImageAssetField ( fieldDef ) {
12
+ return fieldDef . type === 'reference'
13
+ && arrify ( fieldDef . to ) . some ( memberTypeDef => memberTypeDef . type === 'imageAsset' )
13
14
}
14
15
15
- export default function guessPreviewFields ( fields ) {
16
+ function resolveImageAssetPath ( fieldDefs ) {
17
+ const found = fieldDefs . find ( field => isImageAssetField ( field ) || isImageField ( field ) )
18
+ return found && ( isImageField ( found ) ? `${ found . name } .asset.url` : `${ found . name } .url` )
19
+ }
20
+
21
+ export default function guessPreviewFields ( objectTypeDef ) {
16
22
17
- const stringFieldNames = fields
18
- . filter ( field => field . type . name === 'string' )
23
+ const stringFieldNames = objectTypeDef . fields
24
+ . filter ( field => field . type === 'string' )
19
25
. map ( field => field . name )
20
26
21
27
// Check if we have fields with names that is listed in candidate fields
@@ -32,11 +38,11 @@ export default function guessPreviewFields(fields) {
32
38
descField = stringFieldNames [ 1 ]
33
39
}
34
40
35
- const imageAssetPath = resolveImageAssetPath ( fields )
41
+ const imageAssetPath = resolveImageAssetPath ( objectTypeDef . fields )
36
42
37
43
if ( ! titleField && ! imageAssetPath ) {
38
44
// last resort, pick all fields and concat them
39
- const fieldNames = fields . map ( field => field . name )
45
+ const fieldNames = objectTypeDef . fields . map ( field => field . name )
40
46
const fieldMapping = fieldNames . reduce ( ( acc , fieldName ) => {
41
47
acc [ fieldName ] = fieldName
42
48
return acc
0 commit comments