UNPKG

@sprucelabs/schema

Version:

Static and dynamic binding plus runtime validation and transformation to ensure your app is sound. 🤓

48 lines (47 loc) • 1.83 kB
import AbstractField from './AbstractField.js'; import { requiredImageSizes } from './ImageField.types.js'; class ImageField extends AbstractField { static generateTemplateDetails(options) { const { definition, importAs, language } = options; const { isArray } = definition; const arrayNotation = isArray ? '[]' : ''; return { valueType: language === 'go' ? `${arrayNotation}${importAs}.ImageFieldValue` : `${importAs}.ImageFieldValue${arrayNotation}`, }; } validate(value) { var _a; const errors = super.validate(value); if (value && errors.length === 0 && !value.base64) { let sizes = this.getRequiredSizes(); const missing = []; for (const size of sizes) { const key = `${size}Uri`; //@ts-ignore if (value && !value[key]) { missing.push(key); } } if (missing.length > 0) { errors.push({ code: 'INVALID_PARAMETER', name: this.name, friendlyMessage: `You need to supply the remaining sizes to upload an image to ${(_a = this.label) !== null && _a !== void 0 ? _a : this.name}: '${missing.join("', '")}'`, }); } } return errors; } getRequiredSizes() { var _a, _b; let sizes = (_b = (_a = this.definition.options) === null || _a === void 0 ? void 0 : _a.requiredSizes) !== null && _b !== void 0 ? _b : []; if (sizes[0] === '*') { sizes = requiredImageSizes.filter((s) => s !== '*'); } return sizes; } } ImageField.description = 'Images of various sizes!'; export default ImageField;