@sprucelabs/schema
Version:
Static and dynamic binding plus runtime validation and transformation to ensure your app is sound. 🤓
47 lines (46 loc) • 1.76 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const AbstractField_1 = __importDefault(require("./AbstractField"));
const ImageField_types_1 = require("./ImageField.types");
class ImageField extends AbstractField_1.default {
static generateTemplateDetails(options) {
const { definition, importAs } = options;
return {
valueType: `${importAs}.ImageFieldValue${definition.isArray ? '[]' : ''}`,
};
}
validate(value) {
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 ${this.label ?? this.name}: '${missing.join("', '")}'`,
});
}
}
return errors;
}
getRequiredSizes() {
let sizes = this.definition.options?.requiredSizes ?? [];
if (sizes[0] === '*') {
sizes = ImageField_types_1.requiredImageSizes.filter((s) => s !== '*');
}
return sizes;
}
}
ImageField.description = 'Images of various sizes!';
exports.default = ImageField;