@vtaits/form-schema
Version:
Serialization and parsing form values by schema
116 lines (113 loc) • 2.93 kB
JavaScript
import {
defaultErrorMessages
} from "./chunk-O5F4Y5EZ.js";
// src/fields/asyncSelect/constants.ts
var DEFAULT_VALUE_KEY = "value";
var DEFAULT_LABEL_KEY = "label";
// src/fields/asyncSelect/asyncMultiSelect.ts
function parseValueArray(value) {
if (value === null || value === void 0) {
return [];
}
if (Array.isArray(value)) {
return value;
}
if (typeof value === "object") {
return Object.values(value);
}
return [value];
}
var asyncMultiSelect = {
serializerSingle: ({
value,
fieldSchema: { getOptionValue, valueKey = DEFAULT_VALUE_KEY }
}) => {
if (!value) {
return [];
}
const valueArr = Array.isArray(value) ? value : [value];
if (getOptionValue) {
return valueArr.map(getOptionValue);
}
return valueArr.map(
(valueItem) => valueItem[valueKey]
);
},
parserSingle: ({ value, fieldSchema: { loadSingleOption } }) => {
const valueArr = parseValueArray(value);
return Promise.all(
valueArr.map((value2) => {
if (!value2) {
return null;
}
if (loadSingleOption) {
return loadSingleOption(value2);
}
return value2;
})
).then((parsedValues) => parsedValues.filter(Boolean));
},
validatorBeforeSubmit: ({ setCurrentError, value, fieldSchema }) => {
const {
errorMessages: errorMessagesParam,
minLength,
maxLength,
required
} = fieldSchema;
const errorMessages = {
...defaultErrorMessages,
...errorMessagesParam
};
const valueArr = Array.isArray(value) ? value : [value];
if (required && valueArr.length === 0) {
setCurrentError(errorMessages.required);
}
if (minLength && valueArr.length < minLength) {
setCurrentError(errorMessages.minLength(minLength));
}
if (maxLength && valueArr.length > maxLength) {
setCurrentError(errorMessages.maxLength(maxLength));
}
}
};
// src/fields/asyncSelect/asyncSelect.ts
var asyncSelect = {
serializerSingle: ({
value,
fieldSchema: { getOptionValue, valueKey = DEFAULT_VALUE_KEY }
}) => {
if (!value) {
return null;
}
if (getOptionValue) {
return getOptionValue(value);
}
return value[valueKey];
},
parserSingle: ({ value, fieldSchema: { loadSingleOption } }) => {
if (!value) {
return null;
}
if (loadSingleOption) {
return loadSingleOption(value);
}
return value;
},
validatorBeforeSubmit: ({ setCurrentError, value, fieldSchema }) => {
const { errorMessages: errorMessagesParam, required } = fieldSchema;
const errorMessages = {
...defaultErrorMessages,
...errorMessagesParam
};
if (required && !value) {
setCurrentError(errorMessages.required);
}
}
};
export {
DEFAULT_LABEL_KEY,
DEFAULT_VALUE_KEY,
asyncMultiSelect,
asyncSelect
};
//# sourceMappingURL=fields_asyncSelect.js.map