import FormHelper from "~/utils/helpers/FormHelper"; import { JsonPropertiesValuesDto } from "../dtos/JsonPropertiesValuesDto"; import { JsonPropertyDto } from "../dtos/JsonPropertyTypeDto"; import { t as i18nT } from "i18next"; function getValuesFromForm({ properties, form, prefix = "attributes", }: { properties: JsonPropertyDto[] | undefined; form: FormData; prefix?: string; }): JsonPropertiesValuesDto { const propertiesValues: JsonPropertiesValuesDto = {}; if (!properties || properties.length === 0) { return propertiesValues; } properties.forEach((prop) => { propertiesValues[prop.name] = getValueFromForm({ property: prop, form, prefix }); }); return propertiesValues; } function getValueFromForm({ property, form, prefix = "properties" }: { property: JsonPropertyDto; form: FormData; prefix?: string }): any { switch (property.type) { case "string": case "wysiwyg": case "monaco": case "content": { const value = FormHelper.getText(form, `${prefix}[${property.name}]`); return value; } case "number": { const value = FormHelper.getNumber(form, `${prefix}[${property.name}]`); return value; } case "boolean": { const value = FormHelper.getBoolean(form, `${prefix}[${property.name}]`); return value; } case "date": { const value = FormHelper.getDate(form, `${prefix}[${property.name}]`); return value; } case "image": { const value = FormHelper.getText(form, `${prefix}[${property.name}]`); return value; } case "select": { const value = FormHelper.getText(form, `${prefix}[${property.name}]`); return value; } case "multiselect": { const value = FormHelper.getJsonArray(form, `${prefix}[${property.name}]`); return value; } default: break; } } const allProperties: JsonPropertyDto[] = [ { type: "string", name: "string", title: i18nT("models.jsonProperty.samples.string"), required: true, defaultValue: "test", }, { type: "string", name: "stringNotRequired", title: i18nT("models.jsonProperty.samples.stringNotRequired"), required: false, defaultValue: "test2", }, { type: "number", name: "number", title: i18nT("models.jsonProperty.samples.number"), required: true, defaultValue: 10, }, { type: "number", name: "numberNotRequired", title: i18nT("models.jsonProperty.samples.numberNotRequired"), required: false, defaultValue: 20, }, { type: "boolean", name: "boolean", title: i18nT("models.jsonProperty.samples.boolean"), required: true, defaultValue: true, }, { type: "boolean", name: "booleanNotRequired", title: i18nT("models.jsonProperty.samples.booleanNotRequired"), required: false, defaultValue: false, }, { type: "date", name: "date", title: i18nT("models.jsonProperty.samples.date"), required: true, defaultValue: new Date().toISOString(), }, { type: "date", name: "dateNotRequired", title: i18nT("models.jsonProperty.samples.dateNotRequired"), required: false, defaultValue: new Date(new Date().setDate(new Date().getDate() + 1)).toISOString(), }, { type: "image", name: "image", title: i18nT("models.jsonProperty.samples.image"), required: true, defaultValue: "https://placehold.co/150", }, { type: "image", name: "imageNotRequired", title: i18nT("models.jsonProperty.samples.imageNotRequired"), required: false, defaultValue: "https://placehold.co/250", }, { type: "select", name: "select", title: i18nT("models.jsonProperty.samples.select"), required: true, defaultValue: "option1", options: [ { name: i18nT("models.jsonProperty.samples.option1"), value: "option1" }, { name: i18nT("models.jsonProperty.samples.option2"), value: "option2" }, ], }, { type: "select", name: "selectNotRequired", title: i18nT("models.jsonProperty.samples.selectNotRequired"), required: false, defaultValue: "option2", options: [ { name: i18nT("models.jsonProperty.samples.option1"), value: "option1" }, { name: i18nT("models.jsonProperty.samples.option2"), value: "option2" }, ], }, { type: "multiselect", name: "multiselect", title: i18nT("models.jsonProperty.samples.multiselect"), required: true, defaultValue: ["option1"], options: [ { name: i18nT("models.jsonProperty.samples.option1"), value: "option1" }, { name: i18nT("models.jsonProperty.samples.option2"), value: "option2" }, ], }, { type: "multiselect", name: "multiselectNotRequired", title: i18nT("models.jsonProperty.samples.multiselectNotRequired"), required: false, defaultValue: ["option1", "option2"], options: [ { name: i18nT("models.jsonProperty.samples.option1"), value: "option1" }, { name: i18nT("models.jsonProperty.samples.option2"), value: "option2" }, ], }, ]; export default { getValuesFromForm, allProperties, };