95 lines
1.6 KiB
TypeScript
95 lines
1.6 KiB
TypeScript
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;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|