formgen/source/logic/input/_factory.ts

95 lines
1.6 KiB
TypeScript
Raw Normal View History

2026-04-22 07:47:23 +02:00
namespace formgen.input
{
/**
*/
export function from_raw(
raw : any
) : interface_input<unknown>
{
switch (raw.type)
{
case "checkbox":
{
return (
new class_input_checkbox(
{
"label": formgen.helpers.map.read<(null | string)>(raw, "label", null),
}
)
);
break;
}
case "number":
{
return (
new class_input_number(
{
"label": formgen.helpers.map.read<(null | string)>(raw, "label", null),
}
)
);
break;
}
case "text":
{
return (
new class_input_text(
{
"label": formgen.helpers.map.read<(null | string)>(raw, "label", null),
}
)
);
break;
}
case "color":
{
return (
new class_input_color(
{
"label": formgen.helpers.map.read<(null | string)>(raw, "label", null),
}
)
);
break;
}
case "list":
{
return (
new class_input_list(
() => from_raw(raw.element),
{
"label": formgen.helpers.map.read<(null | string)>(raw, "label", null),
}
)
);
break;
}
case "group":
{
return (
new class_input_group(
formgen.helpers.list.transform(
formgen.helpers.map.to_pairs(raw.members),
(pair) => ({
"name": pair.key,
"input": from_raw(pair.value),
})
),
{
"label": formgen.helpers.map.read<(null | string)>(raw, "label", null),
}
)
);
break;
}
default:
{
throw (new Error("unhandled type: " + raw.type));
break;
}
}
}
}