@astro-utils/forms
Version:
Server component for Astro (call server functions from client side with validation and state management)
44 lines (43 loc) • 1.42 kB
JavaScript
import { setProperty } from 'dot-prop';
export default class AboutFormName {
constructor(form, originalName, formValue, errorMessage) {
this.form = form;
this.originalName = originalName;
this.formValue = formValue;
this.errorMessage = errorMessage;
this.hadError = false;
}
pushError(zodError, overrideMessage) {
this.hadError = true;
const topMessage = overrideMessage ?? zodError.issues.at(0).message;
this.form.errors.push({
name: this.originalName,
value: this.formValue,
message: this.errorMessage ?? topMessage,
issues: zodError.issues.map(x => ({ code: x.code, message: x.message }))
});
}
pushErrorManually(code, errorMessage) {
this.hadError = true;
this.form.errors.push({
name: this.originalName,
value: this.formValue,
message: this.errorMessage ?? errorMessage,
issues: [{ code, message: errorMessage }]
});
}
catchParse(zObject, overrideMessage) {
try {
this.formValue = zObject.parse(this.formValue);
return true;
}
catch (err) {
this.pushError(err, overrideMessage);
}
}
setValue() {
if (this.hadError)
return;
setProperty(this.form, this.originalName, this.formValue);
}
}