Files
HiveGrid-Wireframes/hivegrid-cloud/apps/web/app/modules/jsonProperties/utils/JsonPropertiesUtils.ts
T

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,
};