@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
JavaScript
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;