import * as React from 'react';
import { useLanguage } from '../hooks/useLanguage';
import { makeError, makeNoError } from '../builder/tools';
import * as types from '../types';
const isNumeric = (value) => {
return !isNaN(value - parseFloat(value));
};
let validation = ({ Element, data, Language, value }: types.Part.ValidationProps) => {
if (Element.validation?.required && (value == null || value == "")) {
return makeError(Element.name,
Language["number"]?.["required"].replace("{field}", Element.props.label)
);
}
if (value) {
if (!isNumeric(value)) {
return makeError(Element.name,
Language["number"]?.["format"].replace("{field}", Element.props.label)
);
}
else if (Element.validation?.min && parseFloat(value) < Element.validation?.min) {
return makeError(Element.name,
Language["number"]?.["min"]
.replace("{field}", Element.props.label)
.replace("{min}", Element.validation?.min)
);
} else if (Element.validation?.max && parseFloat(value) > Element.validation?.max) {
return makeError(Element.name,
Language["number"]?.["max"]
.replace("{field}", Element.props.label)
.replace("{max}", Element.validation?.max)
);
}
}
return makeNoError(Element.name);
};
const Logic = ({ Element, Component, onChange, data, error, ...props }: types.Part.LogicProps) => {
const Language = useLanguage();
let componentOnChange = (evt) => {
let value = evt.currentTarget.value;
return onChange({
data: {
[Element.name]: value
},
error: {
...(validation({
Element, data, value, Language
}) ?? {})
}
});
};
let propsToPass = {
value: data[Element.name],
error: error[Element.name],
...Element.props,
onChange: componentOnChange,
};
return ;
};
const Component = ({ name, label, value, onChange }) => {
return ;
};
let Part: types.Part.Part = {
Component,
Logic,
validation
};
export {
Part as number
};