@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
2 lines • 4.03 kB
JavaScript
import{copy as e}from"../../../../i18n/copy.mjs";import t from"../../../helpers/prefix-generated-column-name.mjs";import{clampRelationInputValue as n,normalizeStoredRelationValues as r}from"../../utils/normalize-relation-values.mjs";import i from"../../utils/zod-safe-parse.mjs";import a from"../../custom-field.mjs";import o from"../../utils/key-to-title.mjs";import{mediaFieldConfig as s}from"./config.mjs";import{validateRelationItemCount as c}from"../../utils/relation-item-count-validation.mjs";import l from"zod";var u=class extends a{type=s.type;config;key;props;constructor(t,n){super(),this.key=t,this.props=n,this.config={key:this.key,type:this.type,details:{label:this.props?.details?.label??e(`admin:fields.${this.type}.${this.key}.label`,{defaultMessage:o(this.key)}),summary:this.props?.details?.summary},localized:this.props?.localized??!1,default:this.props?.default??[],index:this.props?.index,multiple:this.props?.multiple,ui:{hidden:this.props?.ui?.hidden,disabled:this.props?.ui?.disabled,condition:this.props?.ui?.condition,width:this.props?.ui?.width},validation:this.props?.validation}}normalizeInputValue(e){return n(e,this.config.multiple)}get defaultValue(){return r(this.config.default,this.config.multiple)}get errors(){return{...super.errors,required:{condition:e=>e==null||Array.isArray(e)&&e.length===0,message:e(`server:core.fields.validation.required`)}}}getSchemaDefinition(e){return{data:{columns:[{name:`media_id`,type:e.db.getDataType(`integer`),nullable:!1,foreignKey:{table:`lucid_media`,column:`id`,onDelete:`cascade`}}]},error:void 0}}formatResponseValue(e){return r(e,this.config.multiple)}get relationValueColumn(){return`media_id`}serializeRelationFieldValue(e){return r(e,this.config.multiple).map(e=>({[t(`media_id`)]:e}))}uniqueValidation(t,r){let a=l.array(l.number()),o=n(t,this.config.multiple),s=i(o,a);if(!s.valid)return s;let u=Array.isArray(o)?o.filter(e=>typeof e==`number`):[],d=c({multiple:this.config.multiple,length:u.length,validation:this.config.validation});if(!d.valid)return d;let f=[];for(let[t,n]of u.entries()){let i=r?.find(e=>e.id===n);if(i===void 0){f.push({itemIndex:t,message:e(`server:core.fields.media.validation.not.found`)});continue}if(this.config.validation?.extensions?.length){let n=i.file_extension;this.config.validation.extensions.includes(n)||f.push({itemIndex:t,message:e(`server:core.fields.media.validation.extension.invalid`,{data:{extensions:this.config.validation.extensions.join(`, `)}})})}if(this.config.validation?.type){let n=i.type;if(!n){f.push({itemIndex:t,message:e(`server:core.fields.media.validation.type.missing`)});continue}this.config.validation.type!==n&&f.push({itemIndex:t,message:e(`server:core.fields.media.validation.type.invalid`,{data:{type:this.config.validation.type}})})}if(this.config.validation?.width&&i.type===`image`){let n=i.width;if(!n){f.push({itemIndex:t,message:e(`server:core.fields.media.validation.width.missing`)});continue}this.config.validation.width.min&&n<this.config.validation.width.min&&f.push({itemIndex:t,message:e(`server:core.fields.media.validation.width.min`,{data:{min:this.config.validation.width.min}})}),this.config.validation.width.max&&n>this.config.validation.width.max&&f.push({itemIndex:t,message:e(`server:core.fields.media.validation.width.max`,{data:{max:this.config.validation.width.max}})})}if(this.config.validation?.height&&i.type===`image`){let n=i.height;if(!n){f.push({itemIndex:t,message:e(`server:core.fields.media.validation.height.missing`)});continue}this.config.validation.height.min&&n<this.config.validation.height.min&&f.push({itemIndex:t,message:e(`server:core.fields.media.validation.height.min`,{data:{min:this.config.validation.height.min}})}),this.config.validation.height.max&&n>this.config.validation.height.max&&f.push({itemIndex:t,message:e(`server:core.fields.media.validation.height.max`,{data:{max:this.config.validation.height.max}})})}}return f.length>0?{valid:!1,errors:f}:{valid:!0}}};export{u as default};
//# sourceMappingURL=custom-field.mjs.map