185 lines
5.0 KiB
TypeScript
185 lines
5.0 KiB
TypeScript
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,
|
|
};
|