@@ -129,9 +129,53 @@ export async function syncCollection(
129129 if ( fieldEntry ) {
130130 fieldData [ field . id ] = fieldEntry
131131 } else {
132- console . warn (
133- `Skipping item at index ${ index } because it doesn't have a valid value for field ${ field . name } `
134- )
132+ switch ( field . type ) {
133+ case "string" :
134+ case "formattedText" :
135+ fieldData [ field . id ] = {
136+ value : "" ,
137+ type : field . type ,
138+ }
139+ break
140+ case "enum" : {
141+ const firstCase = field . cases [ 0 ]
142+ if ( ! firstCase ) {
143+ console . warn (
144+ `Skipping item “${ item . id } ” because enum field “${ field . name } ” has no cases.`
145+ )
146+ continue
147+ }
148+ fieldData [ field . id ] = {
149+ value : firstCase . id ,
150+ type : "enum" ,
151+ }
152+ break
153+ }
154+ case "boolean" :
155+ fieldData [ field . id ] = {
156+ value : false ,
157+ type : "boolean" ,
158+ }
159+ break
160+ case "number" :
161+ fieldData [ field . id ] = {
162+ value : 0 ,
163+ type : "number" ,
164+ }
165+ break
166+ case "image" :
167+ case "file" :
168+ case "link" :
169+ case "date" :
170+ case "color" :
171+ case "collectionReference" :
172+ case "multiCollectionReference" :
173+ fieldData [ field . id ] = {
174+ value : null ,
175+ type : field . type ,
176+ }
177+ break
178+ }
135179 }
136180 }
137181
@@ -408,21 +452,13 @@ export function getFieldDataEntryForProperty(
408452 }
409453 case "select" : {
410454 if ( field . type !== "enum" ) return null
411-
412- if ( ! property . select ) {
413- const firstCase = field . cases [ 0 ] ?. id
414- return firstCase ? { type : "enum" , value : firstCase } : null
415- }
455+ if ( ! property . select ) return null
416456
417457 return { type : "enum" , value : property . select . id }
418458 }
419459 case "status" : {
420460 if ( field . type !== "enum" ) return null
421-
422- if ( ! property . status ) {
423- const firstCase = field . cases [ 0 ] ?. id
424- return firstCase ? { type : "enum" , value : firstCase } : null
425- }
461+ if ( ! property . status ) return null
426462
427463 return { type : "enum" , value : property . status . id }
428464 }
@@ -533,6 +569,65 @@ export function getFieldDataEntryForProperty(
533569
534570 return { type : "string" , value : phoneNumber }
535571 }
572+ case "formula" : {
573+ const formula = property . formula
574+
575+ let value = null
576+ switch ( formula . type ) {
577+ case "string" :
578+ value = formula . string
579+ break
580+ case "number" :
581+ value = formula . number
582+ break
583+ case "boolean" :
584+ value = formula . boolean
585+ break
586+ case "date" :
587+ value = formula . date
588+ break
589+ }
590+
591+ if ( value === null ) return null
592+
593+ switch ( field . type ) {
594+ case "string" :
595+ case "color" :
596+ case "link" :
597+ if ( typeof value === "object" ) return null
598+
599+ return {
600+ type : field . type ,
601+ value : String ( value ) ,
602+ }
603+ case "number" : {
604+ const number = Number ( value )
605+ if ( isNaN ( number ) ) return null
606+
607+ return {
608+ type : "number" ,
609+ value : number ,
610+ }
611+ }
612+ case "date" : {
613+ if ( formula . type !== "date" || ! formula . date ?. start ) return null
614+
615+ const date = new Date ( formula . date . start )
616+
617+ return {
618+ type : "date" ,
619+ value : date . toISOString ( ) ,
620+ }
621+ }
622+ case "boolean" :
623+ return {
624+ type : "boolean" ,
625+ value : Boolean ( value ) ,
626+ }
627+ default :
628+ return null
629+ }
630+ }
536631 }
537632
538633 return null
0 commit comments