0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2026-01-15 08:22:43 +00:00

Merge pull request #2547 from jeddai/tags-validation-fix

Fix tags validation issues
This commit is contained in:
Trevor Buckner
2022-12-07 12:54:22 -05:00
committed by GitHub

View File

@@ -9,12 +9,18 @@ const Nav = require('naturalcrit/nav/nav.jsx');
const StringArrayEditor = require('../stringArrayEditor/stringArrayEditor.jsx'); const StringArrayEditor = require('../stringArrayEditor/stringArrayEditor.jsx');
const Themes = require('themes/themes.json'); const Themes = require('themes/themes.json');
const validations = require('./validations.js') const validations = require('./validations.js');
const SYSTEMS = ['5e', '4e', '3.5e', 'Pathfinder']; const SYSTEMS = ['5e', '4e', '3.5e', 'Pathfinder'];
const homebreweryThumbnail = require('../../thumbnail.png'); const homebreweryThumbnail = require('../../thumbnail.png');
const callIfExists = (val, fn, ...args)=>{
if(val[fn]) {
val[fn](...args);
}
};
const MetadataEditor = createClass({ const MetadataEditor = createClass({
displayName : 'MetadataEditor', displayName : 'MetadataEditor',
getDefaultProps : function() { getDefaultProps : function() {
@@ -53,28 +59,25 @@ const MetadataEditor = createClass({
}, },
handleFieldChange : function(name, e){ handleFieldChange : function(name, e){
e.persist();
// load validation rules, and check input value against them // load validation rules, and check input value against them
const inputRules = validations[name] ?? []; const inputRules = validations[name] ?? [];
const validationErr = inputRules.map((rule)=>rule(e.target.value)).filter(Boolean); const validationErr = inputRules.map((rule)=>rule(e.target.value)).filter(Boolean);
// if no validation rules, save to props // if no validation rules, save to props
if(validationErr.length === 0){ if(validationErr.length === 0){
e.target.setCustomValidity(''); callIfExists(e.target, 'setCustomValidity', '');
this.props.onChange({ this.props.onChange({
...this.props.metadata, ...this.props.metadata,
[name] : e.target.value [name] : e.target.value
}); });
} else { } else {
// if validation issues, display built-in browser error popup with each error. // if validation issues, display built-in browser error popup with each error.
console.log(validationErr);
const errMessage = validationErr.map((err)=>{ const errMessage = validationErr.map((err)=>{
return `- ${err}`; return `- ${err}`;
}).join('\n'); }).join('\n');
e.target.setCustomValidity(errMessage); callIfExists(e.target, 'setCustomValidity', errMessage);
e.target.reportValidity(); callIfExists(e.target, 'reportValidity');
}; }
}, },
handleSystem : function(system, e){ handleSystem : function(system, e){